[Bf-blender-cvs] [16cf823] hair_immediate_fixes: Apply the same weight profile in the comb tool as in particle edit mode.
Lukas Tönne
noreply at git.blender.org
Sat Dec 27 11:32:31 CET 2014
Commit: 16cf82378014f2bc1260c9dcb894a29adc712f2c
Author: Lukas Tönne
Date: Wed Dec 3 18:03:36 2014 +0100
Branches: hair_immediate_fixes
https://developer.blender.org/rB16cf82378014f2bc1260c9dcb894a29adc712f2c
Apply the same weight profile in the comb tool as in particle edit mode.
The comb tool will likely get a complete overhaul, but until then it
should just behave like the old tool.
===================================================================
M source/blender/editors/hair/hair_stroke.c
===================================================================
diff --git a/source/blender/editors/hair/hair_stroke.c b/source/blender/editors/hair/hair_stroke.c
index f93e919..61cbd18 100644
--- a/source/blender/editors/hair/hair_stroke.c
+++ b/source/blender/editors/hair/hair_stroke.c
@@ -121,14 +121,14 @@ BLI_INLINE float factor_vertex(HairToolData *data, BMVert *v)
if (!test_inside_circle(data, v, radsq, &dist))
return 0.0f;
- return 1.0f; // TODO
+ return 1.0f - dist / rad;
}
/* ------------------------------------------------------------------------- */
-typedef void (*VertexToolCb)(HairToolData *data, BMVert *v, float factor);
+typedef void (*VertexToolCb)(HairToolData *data, void *userdata, BMVert *v, float factor);
-static int hair_tool_apply_vertex(HairToolData *data, VertexToolCb cb)
+static int hair_tool_apply_vertex(HairToolData *data, VertexToolCb cb, void *userdata)
{
const float threshold = 0.0f; /* XXX could be useful, is it needed? */
@@ -139,7 +139,7 @@ static int hair_tool_apply_vertex(HairToolData *data, VertexToolCb cb)
BM_ITER_MESH(v, &iter, data->edit->bm, BM_VERTS_OF_MESH) {
float factor = factor_vertex(data, v);
if (factor > threshold) {
- cb(data, v, factor);
+ cb(data, userdata, v, factor);
++tot;
}
}
@@ -149,9 +149,17 @@ static int hair_tool_apply_vertex(HairToolData *data, VertexToolCb cb)
/* ------------------------------------------------------------------------- */
-static void hair_vertex_comb(HairToolData *data, BMVert *v, float factor)
+typedef struct CombData {
+ float power;
+} CombData;
+
+static void hair_vertex_comb(HairToolData *data, void *userdata, BMVert *v, float factor)
{
- madd_v3_v3fl(v->co, data->delta, factor);
+ CombData *combdata = userdata;
+
+ float combfactor = powf(factor, combdata->power);
+
+ madd_v3_v3fl(v->co, data->delta, combfactor);
}
bool hair_brush_step(HairToolData *data)
@@ -161,7 +169,17 @@ bool hair_brush_step(HairToolData *data)
int tot = 0;
switch (hair_tool) {
- case HAIR_TOOL_COMB: tot = hair_tool_apply_vertex(data, hair_vertex_comb); break;
+ case HAIR_TOOL_COMB: {
+ CombData combdata;
+ combdata.power = (brush->alpha - 0.5f) * 2.0f;
+ if (combdata.power < 0.0f)
+ combdata.power = 1.0f - 9.0f * combdata.power;
+ else
+ combdata.power = 1.0f - combdata.power;
+
+ tot = hair_tool_apply_vertex(data, hair_vertex_comb, &combdata);
+ break;
+ }
case HAIR_TOOL_CUT: break;
case HAIR_TOOL_LENGTH: break;
case HAIR_TOOL_PUFF: break;
More information about the Bf-blender-cvs
mailing list