[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