[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [57780] branches/soc-2013-paint: Necromancy exercice no #$%^&@!**#$>:3.
Antony Riakiotakis
kalast at gmail.com
Wed Jun 26 20:26:41 CEST 2013
Revision: 57780
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=57780
Author: psy-fi
Date: 2013-06-26 18:26:41 +0000 (Wed, 26 Jun 2013)
Log Message:
-----------
Necromancy exercice no #$%^&@!**#$>:3. Resurrect feature from old GSOC
onion branch that applies gravity after each dab in sculpt mode. I am
not very fond of the result, it will need artist feedback and testing.
Modified Paths:
--------------
branches/soc-2013-paint/release/scripts/startup/bl_ui/space_view3d_toolbar.py
branches/soc-2013-paint/source/blender/blenkernel/intern/brush.c
branches/soc-2013-paint/source/blender/editors/sculpt_paint/sculpt.c
branches/soc-2013-paint/source/blender/makesdna/DNA_brush_types.h
branches/soc-2013-paint/source/blender/makesrna/intern/rna_brush.c
Modified: branches/soc-2013-paint/release/scripts/startup/bl_ui/space_view3d_toolbar.py
===================================================================
--- branches/soc-2013-paint/release/scripts/startup/bl_ui/space_view3d_toolbar.py 2013-06-26 16:59:58 UTC (rev 57779)
+++ branches/soc-2013-paint/release/scripts/startup/bl_ui/space_view3d_toolbar.py 2013-06-26 18:26:41 UTC (rev 57780)
@@ -673,15 +673,10 @@
col.prop(brush, "use_persistent")
col.operator("sculpt.set_persistent_base")
- col = layout.column(align=True)
- col.label(text="Overlay:")
-
- row = col.row()
- if brush.use_cursor_overlay:
- row.prop(brush, "use_cursor_overlay", toggle=True, text="", icon='RESTRICT_VIEW_OFF')
- else:
- row.prop(brush, "use_cursor_overlay", toggle=True, text="", icon='RESTRICT_VIEW_ON')
-
+ if capabilities.has_gravity:
+ col.separator()
+
+ col.prop(brush, "gravity", slider=True)
# Texture Paint Mode #
elif context.image_paint_object and brush:
@@ -716,16 +711,7 @@
col.prop(brush, "use_accumulate")
- col = layout.column(align=True)
- col.label(text="Overlay:")
- row = col.row()
- if brush.use_cursor_overlay:
- row.prop(brush, "use_cursor_overlay", toggle=True, text="", icon='RESTRICT_VIEW_OFF')
- else:
- row.prop(brush, "use_cursor_overlay", toggle=True, text="", icon='RESTRICT_VIEW_ON')
-
-
# Weight Paint Mode #
elif context.weight_paint_object and brush:
layout.prop(toolsettings, "use_auto_normalize", text="Auto Normalize")
@@ -769,16 +755,7 @@
col.prop(brush, "vertex_tool", text="Blend")
- col = layout.column(align=True)
- col.label(text="Overlay:")
- row = col.row()
- if brush.use_cursor_overlay:
- row.prop(brush, "use_cursor_overlay", toggle=True, text="", icon='RESTRICT_VIEW_OFF')
- else:
- row.prop(brush, "use_cursor_overlay", toggle=True, text="", icon='RESTRICT_VIEW_ON')
-
-
class VIEW3D_PT_tools_brush_texture(Panel, View3DPaintPanel):
bl_label = "Texture"
bl_options = {'DEFAULT_CLOSED'}
@@ -966,17 +943,26 @@
layout.template_curve_mapping(brush, "curve", brush=True)
- row = layout.row(align=True)
+ col = layout.column(align=True)
+ row = col.row(align=True)
row.operator("brush.curve_preset", icon='SMOOTHCURVE', text="").shape = 'SMOOTH'
row.operator("brush.curve_preset", icon='SPHERECURVE', text="").shape = 'ROUND'
row.operator("brush.curve_preset", icon='ROOTCURVE', text="").shape = 'ROOT'
row.operator("brush.curve_preset", icon='SHARPCURVE', text="").shape = 'SHARP'
row.operator("brush.curve_preset", icon='LINCURVE', text="").shape = 'LINE'
row.operator("brush.curve_preset", icon='NOCURVE', text="").shape = 'MAX'
+
+ col = layout.column(align=True)
+ col.separator()
- sub = row.row()
- sub.prop(brush, "cursor_overlay_alpha", text="Alpha")
- sub.prop(brush, "use_cursor_overlay_override", toggle=True, text="", icon='BRUSH_DATA')
+ col.label(text="Overlay:")
+ row = col.row(align=True)
+ if brush.use_cursor_overlay:
+ row.prop(brush, "use_cursor_overlay", toggle=True, text="", icon='RESTRICT_VIEW_OFF')
+ else:
+ row.prop(brush, "use_cursor_overlay", toggle=True, text="", icon='RESTRICT_VIEW_ON')
+ row.prop(brush, "cursor_overlay_alpha", text="Alpha")
+ row.prop(brush, "use_cursor_overlay_override", toggle=True, text="", icon='BRUSH_DATA')
class VIEW3D_PT_sculpt_topology(Panel, View3DPaintPanel):
Modified: branches/soc-2013-paint/source/blender/blenkernel/intern/brush.c
===================================================================
--- branches/soc-2013-paint/source/blender/blenkernel/intern/brush.c 2013-06-26 16:59:58 UTC (rev 57779)
+++ branches/soc-2013-paint/source/blender/blenkernel/intern/brush.c 2013-06-26 18:26:41 UTC (rev 57780)
@@ -135,6 +135,8 @@
brush->stencil_dimension[0] = 256;
brush->stencil_dimension[1] = 256;
+
+ brush->gravity_factor = 0.0;
}
/* Datablock add/copy/free/make_local */
Modified: branches/soc-2013-paint/source/blender/editors/sculpt_paint/sculpt.c
===================================================================
--- branches/soc-2013-paint/source/blender/editors/sculpt_paint/sculpt.c 2013-06-26 16:59:58 UTC (rev 57779)
+++ branches/soc-2013-paint/source/blender/editors/sculpt_paint/sculpt.c 2013-06-26 18:26:41 UTC (rev 57780)
@@ -866,6 +866,7 @@
case SCULPT_TOOL_CLAY:
case SCULPT_TOOL_CLAY_STRIPS:
case SCULPT_TOOL_DRAW:
+ case SCULPT_TOOL_GRAVITY:
case SCULPT_TOOL_LAYER:
return alpha * flip * pressure * overlap * feather;
@@ -1286,14 +1287,15 @@
((brush->normal_weight > 0) ||
(brush->flag & BRUSH_FRONTFACE))) ||
- ELEM7(brush->sculpt_tool,
+ ELEM8(brush->sculpt_tool,
SCULPT_TOOL_BLOB,
SCULPT_TOOL_CREASE,
SCULPT_TOOL_DRAW,
SCULPT_TOOL_LAYER,
SCULPT_TOOL_NUDGE,
SCULPT_TOOL_ROTATE,
- SCULPT_TOOL_THUMB) ||
+ SCULPT_TOOL_THUMB,
+ SCULPT_TOOL_GRAVITY) ||
(brush->mtex.brush_map_mode == MTEX_MAP_MODE_AREA));
}
@@ -2909,6 +2911,61 @@
}
}
+static void gravity(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode, float bstrength)
+{
+ SculptSession *ss = ob->sculpt;
+ Brush *brush = BKE_paint_brush(&sd->paint);
+
+ float offset[3]/*, an[3]*/;
+ int n;
+ float gravity[3];
+
+ gravity[0]= gravity[1]= 0;
+ gravity[2]= -ss->cache->radius_squared;
+
+ /* offset with as much as possible factored in already */
+ mul_v3_v3v3(offset, gravity, ss->cache->scale);
+ mul_v3_fl(offset, bstrength);
+
+ /* threaded loop over nodes */
+ #pragma omp parallel for schedule(guided) if (sd->flags & SCULPT_USE_OPENMP)
+ for(n=0; n<totnode; n++) {
+ PBVHVertexIter vd;
+ SculptBrushTest test;
+ float (*proxy)[3];
+
+ proxy = BKE_pbvh_node_add_proxy(ss->pbvh, nodes[n])->co;
+
+ sculpt_brush_test_init(ss, &test);
+
+ BKE_pbvh_vertex_iter_begin(ss->pbvh, nodes[n], vd, PBVH_ITER_UNIQUE) {
+ if (sculpt_brush_test_sq(&test, vd.co)) {
+ //if(paint_stroke_test_cyl(&test, vd.co, bspace->location, an)) {
+ /* offset vertex */
+ //float fade = tex_strength(stroke, brush, vd.co, vd.mask_combined, test.dist)*frontface(brush, bspace->frontface_start, bspace->frontface_range, an, orig_no[vd.i]);
+ const float fade = bstrength * tex_strength(ss, brush, vd.co,
+ sqrt(test.dist),
+ ss->cache->sculpt_normal_symm, vd.no,
+ vd.fno, vd.mask ? *vd.mask : 0.0f);
+
+ mul_v3_v3fl(proxy[vd.i], offset, fade);
+
+ if(vd.mvert)
+ vd.mvert->flag |= ME_VERT_PBVH_UPDATE;
+ }
+ }
+ BKE_pbvh_vertex_iter_end;
+ }
+}
+
+static void do_gravity_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode)
+{
+ SculptSession *ss = ob->sculpt;
+
+ gravity(sd, ob, nodes, totnode, ss->cache->bstrength);
+}
+
+
void sculpt_vertcos_to_key(Object *ob, KeyBlock *kb, float (*vertCos)[3])
{
Mesh *me = (Mesh *)ob->data;
@@ -3119,6 +3176,9 @@
case SCULPT_TOOL_MASK:
do_mask_brush(sd, ob, nodes, totnode);
break;
+ case SCULPT_TOOL_GRAVITY:
+ do_gravity_brush(sd, ob, nodes, totnode);
+ break;
}
if (!ELEM(brush->sculpt_tool, SCULPT_TOOL_SMOOTH, SCULPT_TOOL_MASK) &&
@@ -3132,6 +3192,9 @@
}
}
+ if (brush->sculpt_tool != SCULPT_TOOL_GRAVITY && brush->gravity_factor > 0)
+ gravity(sd, ob, nodes, totnode, brush->gravity_factor);
+
MEM_freeN(nodes);
/* update average stroke position */
@@ -3585,6 +3648,8 @@
return "Mask Brush";
case SCULPT_TOOL_SIMPLIFY:
return "Simplify Brush";
+ case SCULPT_TOOL_GRAVITY:
+ return "Gravity Brush";
}
return "Sculpting";
@@ -3809,10 +3874,10 @@
cache->original = 1;
}
- if (ELEM8(brush->sculpt_tool,
+ if (ELEM9(brush->sculpt_tool,
SCULPT_TOOL_DRAW, SCULPT_TOOL_CREASE, SCULPT_TOOL_BLOB,
SCULPT_TOOL_LAYER, SCULPT_TOOL_INFLATE, SCULPT_TOOL_CLAY,
- SCULPT_TOOL_CLAY_STRIPS, SCULPT_TOOL_ROTATE))
+ SCULPT_TOOL_CLAY_STRIPS, SCULPT_TOOL_ROTATE, SCULPT_TOOL_GRAVITY))
{
if (!(brush->flag & BRUSH_ACCUMULATE)) {
cache->original = 1;
Modified: branches/soc-2013-paint/source/blender/makesdna/DNA_brush_types.h
===================================================================
--- branches/soc-2013-paint/source/blender/makesdna/DNA_brush_types.h 2013-06-26 16:59:58 UTC (rev 57779)
+++ branches/soc-2013-paint/source/blender/makesdna/DNA_brush_types.h 2013-06-26 18:26:41 UTC (rev 57780)
@@ -89,6 +89,9 @@
float plane_offset; /* offset for plane brushes (clay, flatten, fill, scrape) */
+ float gravity_factor; /* gravity factor for sculpting */
+ int pad;
+
char sculpt_tool; /* active sculpt tool */
char vertexpaint_tool; /* active vertex/weight paint blend mode (poorly named) */
char imagepaint_tool; /* active image paint tool */
@@ -195,7 +198,8 @@
SCULPT_TOOL_CREASE = 16,
SCULPT_TOOL_BLOB = 17,
SCULPT_TOOL_CLAY_STRIPS = 18,
- SCULPT_TOOL_MASK = 19
+ SCULPT_TOOL_MASK = 19,
+ SCULPT_TOOL_GRAVITY = 20
} BrushSculptTool;
/* ImagePaintSettings.tool */
Modified: branches/soc-2013-paint/source/blender/makesrna/intern/rna_brush.c
===================================================================
--- branches/soc-2013-paint/source/blender/makesrna/intern/rna_brush.c 2013-06-26 16:59:58 UTC (rev 57779)
+++ branches/soc-2013-paint/source/blender/makesrna/intern/rna_brush.c 2013-06-26 18:26:41 UTC (rev 57780)
@@ -68,6 +68,7 @@
{SCULPT_TOOL_SMOOTH, "SMOOTH", ICON_BRUSH_SMOOTH, "Smooth", ""},
{SCULPT_TOOL_SNAKE_HOOK, "SNAKE_HOOK", ICON_BRUSH_SNAKE_HOOK, "Snake Hook", ""},
{SCULPT_TOOL_THUMB, "THUMB", ICON_BRUSH_THUMB, "Thumb", ""},
+ {SCULPT_TOOL_GRAVITY, "GRAVITY", ICON_BRUSH_SCULPT_DRAW, "Gravity", ""},
{0, NULL, 0, NULL, NULL}
};
@@ -236,6 +237,12 @@
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list