[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [61035] branches/soc-2013-sketch_mesh/ source/blender/modifiers/intern/MOD_laplaciandeform.c: Fix a bug when the user modify the vertex positions in edit mode
Alexander Pinzon
apinzonf at gmail.com
Thu Oct 31 22:56:04 CET 2013
Revision: 61035
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=61035
Author: apinzonf
Date: 2013-10-31 21:56:04 +0000 (Thu, 31 Oct 2013)
Log Message:
-----------
Fix a bug when the user modify the vertex positions in edit mode
Modified Paths:
--------------
branches/soc-2013-sketch_mesh/source/blender/modifiers/intern/MOD_laplaciandeform.c
Modified: branches/soc-2013-sketch_mesh/source/blender/modifiers/intern/MOD_laplaciandeform.c
===================================================================
--- branches/soc-2013-sketch_mesh/source/blender/modifiers/intern/MOD_laplaciandeform.c 2013-10-31 21:00:55 UTC (rev 61034)
+++ branches/soc-2013-sketch_mesh/source/blender/modifiers/intern/MOD_laplaciandeform.c 2013-10-31 21:56:04 UTC (rev 61035)
@@ -52,6 +52,7 @@
#define LAPDEFORM_SYSTEM_IS_DIFFERENT 1
#define LAPDEFORM_SYSTEM_ONLY_CHANGE_ANCHORS 2
#define LAPDEFORM_SYSTEM_ONLY_CHANGE_GROUP 3
+#define LAPDEFORM_SYSTEM_ONLY_CHANGE_MESH 4
typedef struct LaplacianSystem {
bool is_matrix_computed;
@@ -700,7 +701,11 @@
return LAPDEFORM_SYSTEM_ONLY_CHANGE_ANCHORS;
}
- return false;
+ if (!sys->me->mface) {
+ return LAPDEFORM_SYSTEM_ONLY_CHANGE_MESH;
+ }
+
+ return LAPDEFORM_SYSTEM_NOT_CHANGE;
}
static void LaplacianDeformModifier_do(
@@ -709,12 +714,19 @@
{
float (*filevertexCos)[3];
int sysdif;
+ LaplacianSystem * sys = NULL;
filevertexCos = NULL;
if (smd->cacheSystem) {
sysdif = isSystemDifferent(smd, ob, dm,numVerts);
+ sys = smd->cacheSystem;
if (sysdif) {
- if (sysdif == LAPDEFORM_SYSTEM_ONLY_CHANGE_ANCHORS || sysdif == LAPDEFORM_SYSTEM_ONLY_CHANGE_GROUP) {
+ if (sysdif == LAPDEFORM_SYSTEM_ONLY_CHANGE_MESH ) {
+ sys->me = ob->data;
+ BKE_mesh_tessface_ensure(sys->me);
+ laplacianDeformPreview(sys, vertexCos);
+ }
+ else if (sysdif == LAPDEFORM_SYSTEM_ONLY_CHANGE_ANCHORS || sysdif == LAPDEFORM_SYSTEM_ONLY_CHANGE_GROUP) {
filevertexCos = (float (*)[3]) MEM_mallocN(sizeof(float[3]) * numVerts, "TempModDeformCoordinates");
memcpy(filevertexCos, smd->vertexco, sizeof(float[3]) * numVerts);
MEM_SAFE_FREE(smd->vertexco);
@@ -722,21 +734,21 @@
deleteLaplacianSystem((LaplacianSystem *) smd->cacheSystem);
initSystem(smd, ob, dm, filevertexCos, numVerts);
MEM_SAFE_FREE(filevertexCos);
- laplacianDeformPreview((LaplacianSystem *) smd->cacheSystem, vertexCos);
+ laplacianDeformPreview(sys, vertexCos);
}
else {
- deleteLaplacianSystem((LaplacianSystem *) smd->cacheSystem);
+ deleteLaplacianSystem(sys);
if (smd->vertexco) {
MEM_freeN(smd->vertexco);
}
smd->total_verts = 0;
initSystem(smd, ob, dm, vertexCos, numVerts);
- laplacianDeformPreview((LaplacianSystem *) smd->cacheSystem, vertexCos);
+ laplacianDeformPreview(sys, vertexCos);
}
}
else {
- ((LaplacianSystem *)smd->cacheSystem)->repeat = smd->repeat;
- laplacianDeformPreview((LaplacianSystem *) smd->cacheSystem, vertexCos);
+ sys->repeat = smd->repeat;
+ laplacianDeformPreview(sys, vertexCos);
}
}
else {
@@ -802,7 +814,7 @@
float (*vertexCos)[3], int numVerts, ModifierApplyFlag UNUSED(flag))
{
DerivedMesh *dm = get_dm(ob, NULL, derivedData, NULL, false, false);
-
+
LaplacianDeformModifier_do((LaplacianDeformModifierData *) md, ob, dm,
vertexCos, numVerts);
More information about the Bf-blender-cvs
mailing list