Changeset View
Changeset View
Standalone View
Standalone View
source/blender/blenkernel/intern/crazyspace.c
| Show First 20 Lines • Show All 99 Lines • ▼ Show 20 Lines | float (*BKE_crazyspace_get_mapped_editverts( | ||||
| Mesh *me = obedit->data; | Mesh *me = obedit->data; | ||||
| Mesh *me_eval; | Mesh *me_eval; | ||||
| float (*vertexcos)[3]; | float (*vertexcos)[3]; | ||||
| int nverts = me->edit_mesh->bm->totvert; | int nverts = me->edit_mesh->bm->totvert; | ||||
| /* disable subsurf temporal, get mapped cos, and enable it */ | /* disable subsurf temporal, get mapped cos, and enable it */ | ||||
| if (modifiers_disable_subsurf_temporary(obedit)) { | if (modifiers_disable_subsurf_temporary(obedit)) { | ||||
| /* need to make new derivemesh */ | /* need to make new derivemesh */ | ||||
| makeDerivedMesh(depsgraph, scene, obedit, me->edit_mesh, CD_MASK_BAREMESH, false); | makeDerivedMesh(depsgraph, scene, obedit, me->edit_mesh, &CD_MASK_BAREMESH, false); | ||||
| } | } | ||||
| /* now get the cage */ | /* now get the cage */ | ||||
| vertexcos = MEM_mallocN(sizeof(*vertexcos) * nverts, "vertexcos map"); | vertexcos = MEM_mallocN(sizeof(*vertexcos) * nverts, "vertexcos map"); | ||||
| me_eval = editbmesh_get_eval_cage_from_orig(depsgraph, scene, obedit, me->edit_mesh, CD_MASK_BAREMESH); | me_eval = editbmesh_get_eval_cage_from_orig(depsgraph, scene, obedit, me->edit_mesh, &CD_MASK_BAREMESH); | ||||
| mesh_get_mapped_verts_coords(me_eval, vertexcos, nverts); | mesh_get_mapped_verts_coords(me_eval, 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); | modifiers_disable_subsurf_temporary(obedit); | ||||
| return vertexcos; | return vertexcos; | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 145 Lines • ▼ Show 20 Lines | for (i = 0; md && i <= cageIndex; i++, md = md->next) { | ||||
| const ModifierTypeInfo *mti = modifierType_getInfo(md->type); | const ModifierTypeInfo *mti = modifierType_getInfo(md->type); | ||||
| if (!editbmesh_modifier_is_enabled(scene, md, me != NULL)) | if (!editbmesh_modifier_is_enabled(scene, md, me != NULL)) | ||||
| continue; | continue; | ||||
| if (mti->type == eModifierTypeType_OnlyDeform && mti->deformMatricesEM) { | if (mti->type == eModifierTypeType_OnlyDeform && mti->deformMatricesEM) { | ||||
| if (!defmats) { | if (!defmats) { | ||||
| const int required_mode = eModifierMode_Realtime | eModifierMode_Editmode; | const int required_mode = eModifierMode_Realtime | eModifierMode_Editmode; | ||||
| CustomDataMask data_mask = CD_MASK_BAREMESH; | CustomData_Masks data_mask = CD_MASK_BAREMESH; | ||||
| CDMaskLink *datamasks = modifiers_calcDataMasks(scene, ob, md, data_mask, required_mode, NULL, 0); | CDMaskLink *datamasks = modifiers_calcDataMasks(scene, ob, md, &data_mask, required_mode, NULL, NULL); | ||||
| data_mask = datamasks->mask; | data_mask = datamasks->mask; | ||||
| BLI_linklist_free((LinkNode *)datamasks, NULL); | BLI_linklist_free((LinkNode *)datamasks, NULL); | ||||
| me = BKE_mesh_from_editmesh_with_coords_thin_wrap(em, data_mask, NULL); | me = BKE_mesh_from_editmesh_with_coords_thin_wrap(em, &data_mask, NULL); | ||||
| deformedVerts = editbmesh_get_vertex_cos(em, &numVerts); | deformedVerts = editbmesh_get_vertex_cos(em, &numVerts); | ||||
| defmats = MEM_mallocN(sizeof(*defmats) * numVerts, "defmats"); | defmats = MEM_mallocN(sizeof(*defmats) * numVerts, "defmats"); | ||||
| for (a = 0; a < numVerts; a++) | for (a = 0; a < numVerts; a++) | ||||
| unit_m3(defmats[a]); | unit_m3(defmats[a]); | ||||
| } | } | ||||
| mti->deformMatricesEM(md, &mectx, em, me, deformedVerts, defmats, numVerts); | mti->deformMatricesEM(md, &mectx, em, me, deformedVerts, defmats, numVerts); | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 148 Lines • Show Last 20 Lines | |||||