[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [40012] branches/bmesh/blender/source/ blender/blenkernel/intern: bmesh: proper sculpting on non-multires object

Sergey Sharybin g.ulairi at gmail.com
Wed Sep 7 14:47:23 CEST 2011


Revision: 40012
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=40012
Author:   nazgul
Date:     2011-09-07 12:47:23 +0000 (Wed, 07 Sep 2011)
Log Message:
-----------
bmesh: proper sculpting on non-multires object

Problem was caused by unneeded call of CDDM_calc_normals when
creating derived mesh for object which duplicated mvert array.

It shouldn't happen unless object has got shapekeys or deformation
modifiers on the top of stack.

Modified Paths:
--------------
    branches/bmesh/blender/source/blender/blenkernel/intern/DerivedMesh.c
    branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/DerivedMesh.c	2011-09-07 12:46:30 UTC (rev 40011)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/DerivedMesh.c	2011-09-07 12:47:23 UTC (rev 40012)
@@ -1354,16 +1354,22 @@
 	} else if(dm) {
 		finaldm = dm;
 	} else {
+		int recalc_normals= 0;
+
 		finaldm = CDDM_from_mesh(me, ob);
 		
-		if (build_shapekey_layers)
+		if(build_shapekey_layers) {
 			add_shapekey_layers(finaldm, me, ob);
+			recalc_normals= 1;
+		}
 		
 		if(deformedVerts) {
 			CDDM_apply_vert_coords(finaldm, deformedVerts);
+			recalc_normals= 1;
 		}
 
-		CDDM_calc_normals(finaldm);
+		if(recalc_normals)
+			CDDM_calc_normals(finaldm);
 		
 		if((dataMask & CD_MASK_WEIGHT_MCOL) && (ob->mode & OB_MODE_WEIGHT_PAINT))
 			add_weight_mcol_dm(ob, finaldm);

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c	2011-09-07 12:46:30 UTC (rev 40011)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c	2011-09-07 12:47:23 UTC (rev 40012)
@@ -239,7 +239,7 @@
 	if(deformed)
 		return 0;
 
-	return dm->deformedOnly || ob->sculpt->kb;
+	return cddm->mvert == me->mvert || ob->sculpt->kb;
 }
 
 static struct PBVH *cdDM_getPBVH(Object *ob, DerivedMesh *dm)




More information about the Bf-blender-cvs mailing list