Changeset View
Changeset View
Standalone View
Standalone View
source/blender/blenkernel/intern/crazyspace.c
| Show First 20 Lines • Show All 75 Lines • ▼ Show 20 Lines | static void set_crazy_vertex_quat(float r_quat[4], | ||||
| float q1[4], q2[4]; | float q1[4], q2[4]; | ||||
| tan_calc_quat_v3(q1, co_1, co_2, co_3); | tan_calc_quat_v3(q1, co_1, co_2, co_3); | ||||
| tan_calc_quat_v3(q2, vd_1, vd_2, vd_3); | tan_calc_quat_v3(q2, vd_1, vd_2, vd_3); | ||||
| sub_qt_qtqt(r_quat, q2, q1); | sub_qt_qtqt(r_quat, q2, q1); | ||||
| } | } | ||||
| static int modifiers_disable_subsurf_temporary(Object *ob) | static bool modifiers_disable_subsurf_temporary(struct Scene *scene, Object *ob) | ||||
| { | { | ||||
| ModifierData *md; | bool disabled = false; | ||||
| int disabled = 0; | int cageIndex = modifiers_getCageIndex(scene, ob, NULL, 1); | ||||
| for (md = ob->modifiers.first; md; md = md->next) { | ModifierData *md = ob->modifiers.first; | ||||
| for (int i = 0; md && i <= cageIndex; i++, md = md->next) { | |||||
| if (md->type == eModifierType_Subsurf) { | if (md->type == eModifierType_Subsurf) { | ||||
| if (md->mode & eModifierMode_OnCage) { | |||||
| md->mode ^= eModifierMode_DisableTemporary; | md->mode ^= eModifierMode_DisableTemporary; | ||||
| disabled = 1; | disabled = true; | ||||
| } | |||||
| } | } | ||||
| } | } | ||||
| return disabled; | return disabled; | ||||
| } | } | ||||
| /* disable subsurf temporal, get mapped cos, and enable it */ | /* disable subsurf temporal, get mapped cos, and enable it */ | ||||
| float (*BKE_crazyspace_get_mapped_editverts(struct Depsgraph *depsgraph, Object *obedit))[3] | float (*BKE_crazyspace_get_mapped_editverts(struct Depsgraph *depsgraph, Object *obedit))[3] | ||||
| { | { | ||||
| Scene *scene = DEG_get_input_scene(depsgraph); | Scene *scene = DEG_get_input_scene(depsgraph); | ||||
| Scene *scene_eval = DEG_get_evaluated_scene(depsgraph); | Scene *scene_eval = DEG_get_evaluated_scene(depsgraph); | ||||
| Object *obedit_eval = DEG_get_evaluated_object(depsgraph, obedit); | Object *obedit_eval = DEG_get_evaluated_object(depsgraph, obedit); | ||||
| Mesh *mesh_eval = obedit_eval->data; | Mesh *mesh_eval = obedit_eval->data; | ||||
| BMEditMesh *editmesh_eval = mesh_eval->edit_mesh; | BMEditMesh *editmesh_eval = mesh_eval->edit_mesh; | ||||
| /* disable subsurf temporal, get mapped cos, and enable it */ | /* disable subsurf temporal, get mapped cos, and enable it */ | ||||
| if (modifiers_disable_subsurf_temporary(obedit_eval)) { | if (modifiers_disable_subsurf_temporary(scene_eval, obedit_eval)) { | ||||
| /* need to make new derivemesh */ | /* need to make new derivemesh */ | ||||
| makeDerivedMesh(depsgraph, scene_eval, obedit_eval, editmesh_eval, &CD_MASK_BAREMESH); | makeDerivedMesh(depsgraph, scene_eval, obedit_eval, editmesh_eval, &CD_MASK_BAREMESH); | ||||
| } | } | ||||
| /* now get the cage */ | /* now get the cage */ | ||||
| Mesh *mesh_eval_cage = editbmesh_get_eval_cage_from_orig( | Mesh *mesh_eval_cage = editbmesh_get_eval_cage_from_orig( | ||||
| depsgraph, scene, obedit, &CD_MASK_BAREMESH); | depsgraph, scene, obedit, &CD_MASK_BAREMESH); | ||||
| const int nverts = editmesh_eval->bm->totvert; | const int nverts = editmesh_eval->bm->totvert; | ||||
| float(*vertexcos)[3] = MEM_mallocN(sizeof(*vertexcos) * nverts, "vertexcos map"); | float(*vertexcos)[3] = MEM_mallocN(sizeof(*vertexcos) * nverts, "vertexcos map"); | ||||
| mesh_get_mapped_verts_coords(mesh_eval_cage, vertexcos, nverts); | mesh_get_mapped_verts_coords(mesh_eval_cage, vertexcos, nverts); | ||||
| /* set back the flag, no new cage needs to be built, transform does it */ | /* set back the flag, no new cage needs to be built, transform does it */ | ||||
| modifiers_disable_subsurf_temporary(obedit_eval); | modifiers_disable_subsurf_temporary(scene_eval, obedit_eval); | ||||
| return vertexcos; | return vertexcos; | ||||
| } | } | ||||
| void BKE_crazyspace_set_quats_editmesh(BMEditMesh *em, | void BKE_crazyspace_set_quats_editmesh(BMEditMesh *em, | ||||
| float (*origcos)[3], | float (*origcos)[3], | ||||
| float (*mappedcos)[3], | float (*mappedcos)[3], | ||||
| float (*quats)[4], | float (*quats)[4], | ||||
| ▲ Show 20 Lines • Show All 399 Lines • Show Last 20 Lines | |||||