[Bf-blender-cvs] [8e345fec7dc] soc-2017-sculpting_brush: Another attempt to make clipping brush

decoda noreply at git.blender.org
Tue Jun 13 18:22:06 CEST 2017


Commit: 8e345fec7dc6a3f1e7db8998484b81918697e062
Author: decoda
Date:   Tue Jun 13 21:51:06 2017 +0530
Branches: soc-2017-sculpting_brush
https://developer.blender.org/rB8e345fec7dc6a3f1e7db8998484b81918697e062

Another attempt to make clipping brush

===================================================================

M	source/blender/editors/sculpt_paint/sculpt.c

===================================================================

diff --git a/source/blender/editors/sculpt_paint/sculpt.c b/source/blender/editors/sculpt_paint/sculpt.c
index 2fc17a838ce..f45bfd716d1 100644
--- a/source/blender/editors/sculpt_paint/sculpt.c
+++ b/source/blender/editors/sculpt_paint/sculpt.c
@@ -659,7 +659,7 @@ typedef struct SculptBrushTest {
 	/* View3d clipping - only set rv3d for clipping */
 	RegionView3D *clip_rv3d;
 
-
+	float no[3];
 
 } SculptBrushTest;
 
@@ -670,7 +670,7 @@ static void sculpt_brush_test_init(SculptSession *ss, SculptBrushTest *test)
 	test->radius_squared = ss->cache->radius_squared;
 	copy_v3_v3(test->location, ss->cache->location);
 	test->dist = 0.0f;   /* just for initialize */
-
+	copy_v3_v3(test->no, ss->cache->view_normal);
 	test->mirror_symmetry_pass = ss->cache->mirror_symmetry_pass;
 
 	if (rv3d->rflag & RV3D_CLIPPING) {
@@ -3055,6 +3055,18 @@ static void do_clay_strips_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int t
 	            ((sd->flags & SCULPT_USE_OPENMP) && totnode > SCULPT_THREADED_LIMIT), false);
 }
 
+static void calc_foot_perp_v3_v3v3v3(float* foot, const float* a, const float* l_dir, const float* p) 
+/*to calculate foot of perpendicular */
+{
+	float v1[3];
+
+	sub_v3_v3v3(v1, a, p);
+
+	float vp[3];
+	mul_v3_v3fl(vp, l_dir, dot_v3v3(l_dir, v1));
+	add_v3_v3v3(foot, p, vp);
+}
+
 static void do_clip_brush_task_cb_ex(
 	void *userdata, void *UNUSED(userdata_chunk), const int n, const int thread_id)
 {
@@ -3075,7 +3087,7 @@ static void do_clip_brush_task_cb_ex(
 	proxy = BKE_pbvh_node_add_proxy(ss->pbvh, data->nodes[n])->co;
 
 	sculpt_brush_test_init(ss, &test);
-
+	
 	BKE_pbvh_vertex_iter_begin(ss->pbvh, data->nodes[n], vd, PBVH_ITER_UNIQUE)
 	{
 		sculpt_orig_vert_data_update(&orig_data, &vd);
@@ -3090,12 +3102,17 @@ static void do_clip_brush_task_cb_ex(
 			axis_angle_normalized_to_mat3(rot, ss->cache->sculpt_normal_symm, angle * fade);
 			mul_v3_m3v3(proxy[vd.i], rot, vec);
 			add_v3_v3(proxy[vd.i], ss->cache->location); */
-			sub_v3_v3v3(vec, vd.co, ss->cache->location);
+
+			float foot[3];
+			calc_foot_perp_v3_v3v3v3(foot, vd.co, test.no, ss->cache->location);
+			sub_v3_v3v3(vec, vd.co, foot);
 			float length = dot_v3v3(vec, vec);
 			float r = ss->cache->radius_squared;
 			float p1[3];
-			mul_v3_v3fl(p1, vec, sqrt(r / length));
 
+			mul_v3_v3fl(p1, vec, sqrt(1 / length));
+			add_v3_v3v3(p1, p1, foot);
+			sub_v3_v3v3(vec, vd.co, ss->cache->location);
 			copy_v3_v3(proxy[vd.i], p1);
 			/*
 			mul_v3_v3fl(proxy[vd.i], vd.co, 1.5); just testing the working*/
@@ -4233,7 +4250,7 @@ static void sculpt_update_cache_invariants(
 	cache->first_time = 1;
 
 #define PIXEL_INPUT_THRESHHOLD 5
-	if (brush->sculpt_tool == SCULPT_TOOL_ROTATE)
+	if (brush->sculpt_tool == SCULPT_TOOL_ROTATE || brush->sculpt_tool == SCULPT_TOOL_CLIP)
 		cache->dial = BLI_dial_initialize(cache->initial_mouse, PIXEL_INPUT_THRESHHOLD);
 		
 #undef PIXEL_INPUT_THRESHHOLD




More information about the Bf-blender-cvs mailing list