[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [49469] trunk/blender/source/blender/ editors/sculpt_paint/sculpt.c: fix for assert when going from edit mode directly into sculpt mode.

Campbell Barton ideasman42 at gmail.com
Wed Aug 1 19:25:10 CEST 2012


Revision: 49469
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=49469
Author:   campbellbarton
Date:     2012-08-01 17:25:10 +0000 (Wed, 01 Aug 2012)
Log Message:
-----------
fix for assert when going from edit mode directly into sculpt mode.
the tessellation faces were not pre-calculated.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/sculpt_paint/sculpt.c

Modified: trunk/blender/source/blender/editors/sculpt_paint/sculpt.c
===================================================================
--- trunk/blender/source/blender/editors/sculpt_paint/sculpt.c	2012-08-01 17:19:32 UTC (rev 49468)
+++ trunk/blender/source/blender/editors/sculpt_paint/sculpt.c	2012-08-01 17:25:10 UTC (rev 49469)
@@ -3064,12 +3064,19 @@
 
 void sculpt_update_mesh_elements(Scene *scene, Sculpt *sd, Object *ob, int need_pmap)
 {
-	DerivedMesh *dm = mesh_get_derived_final(scene, ob, CD_MASK_BAREMESH);
+	DerivedMesh *dm;
 	SculptSession *ss = ob->sculpt;
+	Mesh *me = ob->data;
 	MultiresModifierData *mmd = sculpt_multires_active(scene, ob);
 
 	ss->modifiers_active = sculpt_modifiers_active(scene, sd, ob);
 
+	/* BMESH ONLY --- at some point we should move sculpt code to use polygons only - but for now it needs tessfaces */
+	BKE_mesh_tessface_ensure(me);
+
+	/* needs to be called after we ensure tessface */
+	dm = mesh_get_derived_final(scene, ob, CD_MASK_BAREMESH);
+
 	if (!mmd) ss->kb = ob_get_keyblock(ob);
 	else ss->kb = NULL;
 
@@ -3083,7 +3090,6 @@
 		ss->face_normals = NULL;
 	}
 	else {
-		Mesh *me = BKE_mesh_from_object(ob);
 		ss->totvert = me->totvert;
 		ss->totpoly = me->totpoly;
 		ss->mvert = me->mvert;
@@ -3094,9 +3100,6 @@
 		ss->vmask = CustomData_get_layer(&me->vdata, CD_PAINT_MASK);
 	}
 
-	/* BMESH ONLY --- at some point we should move sculpt code to use polygons only - but for now it needs tessfaces */
-	BKE_mesh_tessface_ensure(ob->data);
-
 	ss->pbvh = dm->getPBVH(ob, dm);
 	ss->pmap = (need_pmap && dm->getPolyMap) ? dm->getPolyMap(ob, dm) : NULL;
 
@@ -3106,14 +3109,14 @@
 
 			free_sculptsession_deformMats(ss);
 
-			if (ss->kb) ss->orig_cos = key_to_vertcos(ob, ss->kb);
-			else ss->orig_cos = mesh_getVertexCos(ob->data, NULL);
+			ss->orig_cos = (ss->kb) ? key_to_vertcos(ob, ss->kb) : mesh_getVertexCos(me, NULL);
 
 			crazyspace_build_sculpt(scene, ob, &ss->deform_imats, &ss->deform_cos);
 			BLI_pbvh_apply_vertCos(ss->pbvh, ss->deform_cos);
 
-			for (a = 0; a < ((Mesh *)ob->data)->totvert; ++a)
+			for (a = 0; a < me->totvert; ++a) {
 				invert_m3(ss->deform_imats[a]);
+			}
 		}
 	}
 	else free_sculptsession_deformMats(ss);
@@ -4194,7 +4197,7 @@
 
 		if (flush_recalc)
 			DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
-		
+
 		/* Create persistent sculpt mode data */
 		if (!ts->sculpt) {
 			ts->sculpt = MEM_callocN(sizeof(Sculpt), "sculpt mode data");




More information about the Bf-blender-cvs mailing list