[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [56758] trunk/blender/source/blender/bmesh /operators/bmo_bridge.c: fix for bridge flipping, loops pointing away from eachother (over 90d difference) would flip

Campbell Barton ideasman42 at gmail.com
Mon May 13 13:21:33 CEST 2013


Revision: 56758
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=56758
Author:   campbellbarton
Date:     2013-05-13 11:21:33 +0000 (Mon, 13 May 2013)
Log Message:
-----------
fix for bridge flipping, loops pointing away from eachother (over 90d difference) would flip
now check the loops are facing eachother, taking their relative positions into account.

Modified Paths:
--------------
    trunk/blender/source/blender/bmesh/operators/bmo_bridge.c

Modified: trunk/blender/source/blender/bmesh/operators/bmo_bridge.c
===================================================================
--- trunk/blender/source/blender/bmesh/operators/bmo_bridge.c	2013-05-13 11:20:32 UTC (rev 56757)
+++ trunk/blender/source/blender/bmesh/operators/bmo_bridge.c	2013-05-13 11:21:33 UTC (rev 56758)
@@ -120,6 +120,7 @@
 	const bool is_closed = BM_edgeloop_is_closed(el_store_a) && BM_edgeloop_is_closed(el_store_b);
 	int el_store_a_len, el_store_b_len;
 	bool el_store_b_free = false;
+	float el_dir[3];
 
 	el_store_a_len = BM_edgeloop_length_get((struct BMEdgeLoopStore *)el_store_a);
 	el_store_b_len = BM_edgeloop_length_get((struct BMEdgeLoopStore *)el_store_b);
@@ -137,19 +138,20 @@
 		BM_mesh_elem_hflag_disable_all(bm, BM_FACE | BM_EDGE, BM_ELEM_TAG, false);
 	}
 
-	if (dot_v3v3(BM_edgeloop_normal_get(el_store_a), BM_edgeloop_normal_get(el_store_b)) < 0.0f) {
+	sub_v3_v3v3(el_dir, BM_edgeloop_center_get(el_store_a), BM_edgeloop_center_get(el_store_b));
+	if ((dot_v3v3(BM_edgeloop_normal_get(el_store_a), el_dir) < 0.0f) !=
+		(dot_v3v3(BM_edgeloop_normal_get(el_store_b), el_dir) < 0.0f))
+	{
 		BM_edgeloop_flip(bm, el_store_b);
 	}
 
 	/* we only care about flipping if we make faces */
 	if (use_merge == false) {
 		float no[3];
-		float dir[3];
 
 		add_v3_v3v3(no, BM_edgeloop_normal_get(el_store_a), BM_edgeloop_normal_get(el_store_b));
-		sub_v3_v3v3(dir, BM_edgeloop_center_get(el_store_a), BM_edgeloop_center_get(el_store_b));
 
-		if (dot_v3v3(no, dir) < 0.0f) {
+		if (dot_v3v3(no, el_dir) < 0.0f) {
 			BM_edgeloop_flip(bm, el_store_a);
 			BM_edgeloop_flip(bm, el_store_b);
 		}




More information about the Bf-blender-cvs mailing list