[Bf-blender-cvs] [366bc79] soc-2016-uv_tools: Margin computation

Phil Gosch noreply at git.blender.org
Tue Jul 26 11:24:02 CEST 2016


Commit: 366bc79e2a6b97cea396644732a757109cd00094
Author: Phil Gosch
Date:   Tue Jul 26 11:23:34 2016 +0200
Branches: soc-2016-uv_tools
https://developer.blender.org/rB366bc79e2a6b97cea396644732a757109cd00094

Margin computation

Still need to quickly refactor PConvexHull to actually use margins

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

M	source/blender/blenlib/BLI_math_geom.h
M	source/blender/blenlib/intern/math_geom.c
M	source/blender/editors/uvedit/uvedit_parametrizer.c

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

diff --git a/source/blender/blenlib/BLI_math_geom.h b/source/blender/blenlib/BLI_math_geom.h
index 84a25f5..d09dc2d 100644
--- a/source/blender/blenlib/BLI_math_geom.h
+++ b/source/blender/blenlib/BLI_math_geom.h
@@ -416,6 +416,8 @@ void accumulate_vertex_normals_poly(
         float **vertnos, const float polyno[3],
         const float **vertcos, float vdiffs[][3], const int nverts);
 
+void edge_normal_v2_v2v2(float r[2], const float a[2], const float b[2], const bool left);
+
 /********************************* Tangents **********************************/
 
 void tangent_from_uv(
diff --git a/source/blender/blenlib/intern/math_geom.c b/source/blender/blenlib/intern/math_geom.c
index 40454a9..3ce69f0 100644
--- a/source/blender/blenlib/intern/math_geom.c
+++ b/source/blender/blenlib/intern/math_geom.c
@@ -4305,6 +4305,23 @@ void accumulate_vertex_normals_poly(float **vertnos, const float polyno[3],
 	}
 }
 
+/* Calculates the 2d normal for an edge ab. 
+ * if left is true calculates the left normal (viewed in winding direction) */
+void edge_normal_v2_v2v2(float r[2], const float a[2], const float b[2], const bool left)
+{
+	float dx = b[0] - a[0];
+	float dy = b[1] - a[1];
+
+	if (left) {
+		r[0] = -dy;
+		r[1] = dx;
+	}
+	else {
+		r[0] = dy;
+		r[1] = -dx;
+	}
+}
+
 /********************************* Tangents **********************************/
 
 void tangent_from_uv(
diff --git a/source/blender/editors/uvedit/uvedit_parametrizer.c b/source/blender/editors/uvedit/uvedit_parametrizer.c
index 8348c94..f9c21d4 100644
--- a/source/blender/editors/uvedit/uvedit_parametrizer.c
+++ b/source/blender/editors/uvedit/uvedit_parametrizer.c
@@ -5080,9 +5080,39 @@ void p_convex_hull_restore_direction(PConvexHull *item)
 	p_convex_hull_compute_edge_components(item);
 }
 
+/* Grow hull by margin amount */
 void p_convex_hull_grow(PConvexHull *chull, float margin)
 {
 	/* ToDo SaphireS */
+	PVert *v1, *v2, *v3;
+	float angle, dist_fac;
+	float a[2], b[2], dir[2], end_pos[2], a_n[2], b_n[2];
+	int i;
+
+	for (i = 0; i < chull->nverts; i++) {
+		v1 = chull->h_verts[(i ? i : chull->nverts) - 1];
+		v2 = chull->h_verts[i];
+		v3 = chull->h_verts[(i + 1) < chull->nverts ? (i + 1) : 0];
+		
+		sub_v2_v2v2(a, v1, v2);
+		sub_v2_v2v2(b, v3, v2);
+
+		/* distance to offset */
+		dist_fac = shell_v2v2_mid_normalized_to_dist(a, b);
+
+		/* direction to offset */
+		edge_normal_v2_v2v2(a_n, v1, v2, true);
+		edge_normal_v2_v2v2(b_n, v2, v3, true);
+
+		add_v2_v2v2(dir, a_n, b_n);
+
+		normalize_v2(dir);
+
+		/* offset point */
+		madd_v2_v2v2fl(end_pos, v2->uv, dir, dist_fac * margin);
+
+		/*ToDo: apply end_pos */
+	}
 }
 
 PNoFitPolygon *p_inner_fit_polygon_create(PConvexHull *item)




More information about the Bf-blender-cvs mailing list