Commit: 1e355b0992a68d108ab76ae5daf13e571a5d4fa7
Author: Campbell Barton
Date: Fri Jan 29 09:43:29 2021 +1100
Branches: blender-v2.92-release
https://developer.blender.org/rB1e355b0992a68d108ab76ae5daf13e571a5d4fa7
Docs: add diagrams describing the purpose of BMwEdgeLoopWalker.f_hub
Without this the purpose of this feature isn't clear.
While 01b3e9cc9fdd0875b93ba749c8209e6c43570d13 linked to an image,
add inline ascii diagrams with detailed explanations.
===================================================================
M source/blender/bmesh/intern/bmesh_walkers_impl.c
===================================================================
diff --git a/source/blender/bmesh/intern/bmesh_walkers_impl.c
b/source/blender/bmesh/intern/bmesh_walkers_impl.c
index 7d56e560275..35350383e49 100644
--- a/source/blender/bmesh/intern/bmesh_walkers_impl.c
+++ b/source/blender/bmesh/intern/bmesh_walkers_impl.c
@@ -863,7 +863,70 @@ static void bmw_EdgeLoopWalker_begin(BMWalker *walker,
void *data)
lwalk->is_boundary = BM_edge_is_boundary(e);
lwalk->is_single = (lwalk->is_boundary && bm_edge_is_single(e));
- /* could also check that vertex*/
+ /**
+ * Detect an NGon (face-hub)
+ * =========================
+ *
+ * The face-hub - #BMwEdgeLoopWalker.f_hub - is set when there is an ngon
+ * on one side of the edge and a series of faces on the other,
+ * loop around the ngon for as long as it's connected to faces which would
form an edge loop
+ * in the absence of the ngon (used as the hub).
+ *
+ * This isn't simply ignoring the ngon though, as the edges looped over must
all be
+ * connected to the hub.
+ *
+ * NGon in Grid Example
+ * --------------------
+ * \code{.txt}
+ * +-----+-----+-----+-----+-----+
+ * | | | | | |
+ * +-----va=ea=+==eb=+==ec=vb----+
+ * | | | |
+ * +-----+ +-----+
+ * | | f_hub | |
+ * +-----+ +-----+
+ * | | | |
+ * +-----+-----+-----+-----+-----+
+ * | | | | | |
+ * +-----+-----+-----+-----+-----+
+ * \endcode
+ *
+ * In the example above, starting from edges marked `ea/eb/ec`,
+ * the will detect `f_hub` and walk along the edge loop between `va -> vb`.
+ * The same is true for any of the un-marked sides of the ngon,
+ * walking stops for vertices with >= 3 connected faces (in this case they
look like corners).
+ *
+ * Mixed Triangle-Fan & Quad Example
+ * ---------------------------------
+ * \code{.txt}
+ * +-----------------------------------------------+
+ * | f_hub |
+ * va-ea-vb=eb=+==ec=+=ed==+=ee=vc=ef=vd----------ve
+ * | |\ | | | / / \ |
+ * | | \ \ | / / / \ |
+ * | | \ | | | / / \ |
+ * | | \ \ | / / / \ |
+ * | | \ | | | / / \ |
+ * | | \ \ | / / / \ |
+ * | | \ | | | / / \ |
+ * | | \ \ | / / / \ |
+ * | | \| | |/ / \ |
+ * | | \\|// / \ |
+ * | | \|/ / \|
+ * +-----+-----------+-----+-----------------------+
+ * \endcode
+ *
+ * In the example above, starting from edges marked `eb/eb/ed/ed/ef`,
+ * the will detect `f_hub` and walk along the edge loop between `vb -> vd`.
+ *
+ * Notice `vb` and `vd` delimit the loop, since the faces connected to `vb`
+ * excluding `f_hub` don't share an edge, which isn't walked over in the case
+ * of boundaries either.
+ *
+ * Notice `vc` doesn't delimit stepping from `ee` onto `ef` as the stepping
method used
+ * doesn't differentiate between the number of sides of faces opposite
`f_hub`,
+ * only that each of the connected faces share an edge.
+ */
if ((lwalk->is_boundary == false) && (vert_edge_count[0] == 3 ||
vert_edge_count[1] == 3)) {
BMIter iter;
BMFace *f_iter;
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs