[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [25710] trunk/blender: Sculpt:

Brecht Van Lommel brecht at blender.org
Mon Jan 4 17:53:33 CET 2010


Revision: 25710
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=25710
Author:   blendix
Date:     2010-01-04 17:53:32 +0100 (Mon, 04 Jan 2010)

Log Message:
-----------
Sculpt:

* Fix #20482: grab brush + size pressure sensitivity don't work
  together, disabled the pressure sensitivty for that case now.
* Fix for smooth brush messing up mesh sometimes, smooth factor
  is now clamped to reasonable range.
* Fix #20449: smooth brush + mirror modifier could crash.

Modified Paths:
--------------
    trunk/blender/release/scripts/ui/space_view3d_toolbar.py
    trunk/blender/source/blender/blenkernel/BKE_DerivedMesh.h
    trunk/blender/source/blender/blenkernel/intern/cdderivedmesh.c
    trunk/blender/source/blender/editors/sculpt_paint/sculpt.c

Modified: trunk/blender/release/scripts/ui/space_view3d_toolbar.py
===================================================================
--- trunk/blender/release/scripts/ui/space_view3d_toolbar.py	2010-01-04 16:48:14 UTC (rev 25709)
+++ trunk/blender/release/scripts/ui/space_view3d_toolbar.py	2010-01-04 16:53:32 UTC (rev 25710)
@@ -542,9 +542,10 @@
 
             row = col.row(align=True)
             row.prop(brush, "size", slider=True)
-            row.prop(brush, "use_size_pressure", toggle=True, text="")
 
             if brush.sculpt_tool != 'GRAB':
+                row.prop(brush, "use_size_pressure", toggle=True, text="")
+
                 row = col.row(align=True)
                 row.prop(brush, "strength", slider=True)
                 row.prop(brush, "use_strength_pressure", text="")

Modified: trunk/blender/source/blender/blenkernel/BKE_DerivedMesh.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_DerivedMesh.h	2010-01-04 16:48:14 UTC (rev 25709)
+++ trunk/blender/source/blender/blenkernel/BKE_DerivedMesh.h	2010-01-04 16:53:32 UTC (rev 25710)
@@ -202,7 +202,7 @@
 
 	/* Get a map of vertices to faces
 	 */
-	struct ListBase *(*getFaceMap)(DerivedMesh *dm);
+	struct ListBase *(*getFaceMap)(struct Object *ob, DerivedMesh *dm);
 
 	/* Get the BVH used for paint modes
 	 */

Modified: trunk/blender/source/blender/blenkernel/intern/cdderivedmesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/cdderivedmesh.c	2010-01-04 16:48:14 UTC (rev 25709)
+++ trunk/blender/source/blender/blenkernel/intern/cdderivedmesh.c	2010-01-04 16:53:32 UTC (rev 25710)
@@ -177,13 +177,15 @@
 	no_r[2] = no[2]/32767.f;
 }
 
-static ListBase *cdDM_getFaceMap(DerivedMesh *dm)
+static ListBase *cdDM_getFaceMap(Object *ob, DerivedMesh *dm)
 {
 	CDDerivedMesh *cddm = (CDDerivedMesh*) dm;
 
-	if(!cddm->fmap) {
-		create_vert_face_map(&cddm->fmap, &cddm->fmap_mem, cddm->mface,
-				     dm->getNumVerts(dm), dm->getNumFaces(dm));
+	if(!cddm->fmap && ob->type == OB_MESH) {
+		Mesh *me= ob->data;
+
+		create_vert_face_map(&cddm->fmap, &cddm->fmap_mem, me->mface,
+				     me->totvert, me->totface);
 	}
 
 	return cddm->fmap;

Modified: trunk/blender/source/blender/editors/sculpt_paint/sculpt.c
===================================================================
--- trunk/blender/source/blender/editors/sculpt_paint/sculpt.c	2010-01-04 16:48:14 UTC (rev 25709)
+++ trunk/blender/source/blender/editors/sculpt_paint/sculpt.c	2010-01-04 16:53:32 UTC (rev 25710)
@@ -914,6 +914,8 @@
 		if(sculpt_brush_test(&test, vd.co)) {
 			float fade = tex_strength(ss, brush, vd.co, test.dist)*bstrength;
 			float avg[3], val[3];
+
+			CLAMP(fade, 0.0f, 1.0f);
 			
 			neighbor_average(ss, avg, vd.vert_indices[vd.i]);
 			val[0] = vd.co[0]+(avg[0]-vd.co[0])*fade;
@@ -990,6 +992,8 @@
 					if(y == 0 || y == gridsize - 1)
 						mul_v3_fl(avg, 2.0f);
 
+					CLAMP(fade, 0.0f, 1.0f);
+
 					val[0] = co[0]+(avg[0]-co[0])*fade;
 					val[1] = co[1]+(avg[1]-co[1])*fade;
 					val[2] = co[2]+(avg[2]-co[2])*fade;
@@ -1013,15 +1017,15 @@
 		for(n=0; n<totnode; n++) {
 			sculpt_undo_push_node(ss, nodes[n]);
 
-			if(ss->fmap)
+			if(ss->multires)
+				do_multires_smooth_brush(sd, ss, nodes[n]);
+			else if(ss->fmap)
 				do_mesh_smooth_brush(sd, ss, nodes[n]);
-			else
-				do_multires_smooth_brush(sd, ss, nodes[n]);
 
 			BLI_pbvh_node_mark_update(nodes[n]);
 		}
 
-		if(!ss->fmap)
+		if(ss->multires)
 			multires_stitch_grids(ss->ob);
 	}
 }
@@ -1544,7 +1548,7 @@
 	}
 
 	ss->tree = dm->getPBVH(ob, dm);
-	ss->fmap = (need_fmap && dm->getFaceMap)? dm->getFaceMap(dm): NULL;
+	ss->fmap = (need_fmap && dm->getFaceMap)? dm->getFaceMap(ob, dm): NULL;
 }
 
 static int sculpt_mode_poll(bContext *C)
@@ -1743,7 +1747,7 @@
 	if(cache->first_time)
 		cache->initial_radius = unproject_brush_radius(ss->ob, cache->vc, cache->true_location, brush->size);
 
-	if(brush->flag & BRUSH_SIZE_PRESSURE) {
+	if(brush->flag & BRUSH_SIZE_PRESSURE && brush->sculpt_tool != SCULPT_TOOL_GRAB) {
 		cache->pixel_radius *= cache->pressure;
 		cache->radius = cache->initial_radius * cache->pressure;
 	}
@@ -1797,8 +1801,12 @@
 
 static void sculpt_stroke_modifiers_check(bContext *C, SculptSession *ss)
 {
-	if(sculpt_modifiers_active(ss->ob))
-		sculpt_update_mesh_elements(CTX_data_scene(C), ss->ob, 0); // XXX brush->sculpt_tool == SCULPT_TOOL_SMOOTH);
+	if(sculpt_modifiers_active(ss->ob)) {
+		Sculpt *sd = CTX_data_tool_settings(C)->sculpt;
+		Brush *brush = paint_brush(&sd->paint);
+
+		sculpt_update_mesh_elements(CTX_data_scene(C), ss->ob, brush->sculpt_tool == SCULPT_TOOL_SMOOTH);
+	}
 }
 
 typedef struct {





More information about the Bf-blender-cvs mailing list