[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