[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [28543] branches/render25/source/blender: mask modifier properly works in weightpaint and edit modes now.
Joseph Eagar
joeedh at gmail.com
Mon May 3 12:04:25 CEST 2010
Revision: 28543
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=28543
Author: joeedh
Date: 2010-05-03 12:04:25 +0200 (Mon, 03 May 2010)
Log Message:
-----------
mask modifier properly works in weightpaint and edit modes now. note that modifiers should not have to provide a applyModifierEM function, there's really no reason to not pull the result from applyModifier if applyModifierEM doesn't exist, it's not like we don't have a dozen *EM functions that do just that, anyway. fixes 22192
Modified Paths:
--------------
branches/render25/source/blender/blenkernel/intern/DerivedMesh.c
branches/render25/source/blender/modifiers/intern/MOD_collision.c
branches/render25/source/blender/modifiers/intern/MOD_mask.c
Modified: branches/render25/source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
--- branches/render25/source/blender/blenkernel/intern/DerivedMesh.c 2010-05-03 08:43:00 UTC (rev 28542)
+++ branches/render25/source/blender/blenkernel/intern/DerivedMesh.c 2010-05-03 10:04:25 UTC (rev 28543)
@@ -2017,7 +2017,9 @@
}
}
- mti->deformVertsEM(md, ob, em, dm, deformedVerts, numVerts);
+ if (mti->deformVertsEM)
+ mti->deformVertsEM(md, ob, em, dm, deformedVerts, numVerts);
+ else mti->deformVerts(md, ob, dm, deformedVerts, numVerts, 0, 0);
} else {
DerivedMesh *ndm;
@@ -2053,8 +2055,12 @@
mask &= ~CD_MASK_ORCO;
DM_set_only_copy(orcodm, mask);
- ndm = mti->applyModifierEM(md, ob, em, orcodm);
+ if (mti->applyModifierEM)
+ ndm = mti->applyModifierEM(md, ob, em, orcodm);
+ else
+ ndm = mti->applyModifier(md, ob, orcodm, 0, 0);
+
if(ndm) {
/* if the modifier returned a new dm, release the old one */
if(orcodm && orcodm != ndm) orcodm->release(orcodm);
@@ -2069,7 +2075,10 @@
if(!CustomData_has_layer(&dm->faceData, CD_ORIGSPACE))
DM_add_face_layer(dm, CD_ORIGSPACE, CD_DEFAULT, NULL);
- ndm = mti->applyModifierEM(md, ob, em, dm);
+ if (mti->applyModifierEM)
+ ndm = mti->applyModifierEM(md, ob, em, dm);
+ else
+ ndm = mti->applyModifier(md, ob, dm, 0, 0);
if (ndm) {
if(dm && dm != ndm)
Modified: branches/render25/source/blender/modifiers/intern/MOD_collision.c
===================================================================
--- branches/render25/source/blender/modifiers/intern/MOD_collision.c 2010-05-03 08:43:00 UTC (rev 28542)
+++ branches/render25/source/blender/modifiers/intern/MOD_collision.c 2010-05-03 10:04:25 UTC (rev 28543)
@@ -46,6 +46,7 @@
{
CollisionModifierData *collmd = (CollisionModifierData*) md;
+ collmd->xold = NULL;
collmd->x = NULL;
collmd->xnew = NULL;
collmd->current_x = NULL;
@@ -64,6 +65,8 @@
{
if(collmd->bvhtree)
BLI_bvhtree_free(collmd->bvhtree);
+ if(collmd->xold)
+ MEM_freeN(collmd->xold);
if(collmd->x)
MEM_freeN(collmd->x);
if(collmd->xnew)
@@ -143,6 +146,8 @@
}
collmd->xnew = MEM_dupallocN(collmd->x); // frame end position
+
+ collmd->xold = MEM_dupallocN(collmd->x);
collmd->current_x = MEM_dupallocN(collmd->x); // inter-frame
collmd->current_xnew = MEM_dupallocN(collmd->x); // inter-frame
collmd->current_v = MEM_dupallocN(collmd->x); // inter-frame
@@ -153,19 +158,21 @@
collmd->numfaces = dm->getNumFaces(dm);
// create bounding box hierarchy
- collmd->bvhtree = bvhtree_build_from_mvert(collmd->mfaces, collmd->numfaces, collmd->x, numverts, ob->pd->pdef_sboft);
+ collmd->bvhtree = bvhtree_build_from_mvert(collmd->mfaces, collmd->numfaces, collmd->x, collmd->numverts, ob->pd->pdef_sboft);
collmd->time = current_time;
}
else if(numverts == collmd->numverts)
{
+ MVert *mv = dm->getVertArray(dm);
+
// put positions to old positions
- tempVert = collmd->x;
+ tempVert = collmd->xold;
+ collmd->xold = collmd->x;
collmd->x = collmd->xnew;
collmd->xnew = tempVert;
-
- memcpy(collmd->xnew, dm->getVertArray(dm), numverts*sizeof(MVert));
-
+
+ memcpy(collmd->xnew, mv, sizeof(MVert)*numverts); // frame start position
for ( i = 0; i < numverts; i++ )
{
// we save global positions
@@ -181,7 +188,7 @@
if(ob->pd->pdef_sboft != BLI_bvhtree_getepsilon(collmd->bvhtree))
{
BLI_bvhtree_free(collmd->bvhtree);
- collmd->bvhtree = bvhtree_build_from_mvert(collmd->mfaces, collmd->numfaces, collmd->current_x, numverts, ob->pd->pdef_sboft);
+ collmd->bvhtree = bvhtree_build_from_mvert(collmd->mfaces, collmd->numfaces, collmd->x, collmd->numverts, ob->pd->pdef_sboft);
}
}
@@ -189,12 +196,12 @@
/* happens on file load (ONLY when i decomment changes in readfile.c) */
if(!collmd->bvhtree)
{
- collmd->bvhtree = bvhtree_build_from_mvert(collmd->mfaces, collmd->numfaces, collmd->current_x, numverts, ob->pd->pdef_sboft);
+ collmd->bvhtree = bvhtree_build_from_mvert(collmd->mfaces, collmd->numfaces, collmd->x, collmd->numverts, ob->pd->pdef_sboft);
}
else
{
// recalc static bounding boxes
- bvhtree_update_from_mvert ( collmd->bvhtree, collmd->mfaces, collmd->numfaces, collmd->current_x, collmd->current_xnew, collmd->numverts, 1 );
+ bvhtree_update_from_mvert(collmd->bvhtree, collmd->mfaces, collmd->numfaces, collmd->x, collmd->xnew, collmd->numverts, 1);
}
collmd->time = current_time;
Modified: branches/render25/source/blender/modifiers/intern/MOD_mask.c
===================================================================
--- branches/render25/source/blender/modifiers/intern/MOD_mask.c 2010-05-03 08:43:00 UTC (rev 28542)
+++ branches/render25/source/blender/modifiers/intern/MOD_mask.c 2010-05-03 10:04:25 UTC (rev 28543)
@@ -32,6 +32,7 @@
#include "DNA_armature_types.h"
#include "DNA_meshdata_types.h"
+#include "DNA_modifier_types.h"
#include "BLI_ghash.h"
@@ -386,7 +387,7 @@
/* structName */ "MaskModifierData",
/* structSize */ sizeof(MaskModifierData),
/* type */ eModifierTypeType_Nonconstructive,
- /* flags */ eModifierTypeFlag_AcceptsMesh,
+ /* flags */ eModifierTypeFlag_AcceptsMesh|eModifierTypeFlag_SupportsMapping|eModifierTypeFlag_SupportsEditmode,
/* copyData */ copyData,
/* deformVerts */ 0,
More information about the Bf-blender-cvs
mailing list