diff options
author | Daniel Dunbar <daniel@zuster.org> | 2005-07-26 04:45:19 +0400 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2005-07-26 04:45:19 +0400 |
commit | ee8e41c65a5bc2f89ad3402005b3767d33e52672 (patch) | |
tree | 3c69faff9e234665f4e8a11d941a8911ed0d2489 /source/blender/blenkernel | |
parent | 3abbc85ae09d8d35ddbd247bfe4446aa980ecab3 (diff) |
- added apply button for individual modifiers
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r-- | source/blender/blenkernel/BKE_DerivedMesh.h | 3 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/DerivedMesh.c | 27 |
2 files changed, 27 insertions, 3 deletions
diff --git a/source/blender/blenkernel/BKE_DerivedMesh.h b/source/blender/blenkernel/BKE_DerivedMesh.h index e1e2b1e9681..bd0e2bd3a98 100644 --- a/source/blender/blenkernel/BKE_DerivedMesh.h +++ b/source/blender/blenkernel/BKE_DerivedMesh.h @@ -52,6 +52,7 @@ struct EditVert; struct EditEdge; struct EditFace; struct DispListMesh; +struct ModifierData; typedef struct DerivedMesh DerivedMesh; struct DerivedMesh { @@ -177,6 +178,8 @@ DerivedMesh *derivedmesh_from_displistmesh(struct DispListMesh *dlm); DerivedMesh *mesh_get_derived_final(struct Object *ob, int *needsFree_r); DerivedMesh *mesh_get_derived_deform(struct Object *ob, int *needsFree_r); +DerivedMesh *mesh_create_derived_for_modifier(struct Object *ob, struct ModifierData *md); + DerivedMesh *mesh_create_derived_render(struct Object *ob); DerivedMesh *mesh_create_derived_no_deform(struct Object *ob, float (*vertCos)[3]); DerivedMesh *mesh_create_derived_no_deform_render(struct Object *ob, float (*vertCos)[3]); diff --git a/source/blender/blenkernel/intern/DerivedMesh.c b/source/blender/blenkernel/intern/DerivedMesh.c index 39c0cb199c1..e33de2baf8d 100644 --- a/source/blender/blenkernel/intern/DerivedMesh.c +++ b/source/blender/blenkernel/intern/DerivedMesh.c @@ -1210,9 +1210,32 @@ DerivedMesh *derivedmesh_from_displistmesh(DispListMesh *dlm) typedef float vec3f[3]; +DerivedMesh *mesh_create_derived_for_modifier(Object *ob, ModifierData *md) +{ + Mesh *me = ob->data; + ModifierTypeInfo *mti = modifierType_get_info(md->type); + DerivedMesh *dm; + + if (!(md->mode&eModifierMode_Realtime)) return NULL; + if (mti->isDisabled && mti->isDisabled(md)) return NULL; + + if (mti->type==eModifierTypeType_OnlyDeform) { + int numVerts; + float (*deformedVerts)[3] = mesh_getVertexCos(me, &numVerts); + + mti->deformVerts(md, ob, NULL, deformedVerts, numVerts); + + dm = getMeshDerivedMesh(me, ob, deformedVerts); + MEM_freeN(deformedVerts); + } else { + dm = mti->applyModifier(md, ob, NULL, NULL, 0, 0); + } + + return dm; +} + static void mesh_calc_modifiers(Object *ob, float (*inputVertexCos)[3], DerivedMesh **deform_r, DerivedMesh **final_r, int useRenderParams, int useDeform) { -// double startTime = PIL_check_seconds_timer(); Mesh *me = ob->data; ModifierData *md= ob->modifiers.first; float (*deformedVerts)[3]; @@ -1330,8 +1353,6 @@ static void mesh_calc_modifiers(Object *ob, float (*inputVertexCos)[3], DerivedM if (deformedVerts && deformedVerts!=inputVertexCos) { MEM_freeN(deformedVerts); } - -// printf("mesh_calc_modifiers(%p, %p, %p, %p, %d) : %6.3fs\n", ob, inputVertexCos, deform_r, final_r, useRenderParams, PIL_check_seconds_timer()-startTime); } static vec3f *editmesh_getVertexCos(EditMesh *em, int *numVerts_r) |