|
Blender V4.3
|
#include "BLI_listbase.h"#include "BLI_math_vector.h"#include "BLI_utildefines.h"#include "bmesh.hh"#include "intern/bmesh_operators_private.hh"Go to the source code of this file.
Macros | |
| #define | USE_DUPLICATE_FACE_VERT_CHECK |
| #define | EDGE_MARK 4 |
| #define | EDGE_OUT 8 |
| #define | FACE_OUT 16 |
Functions | |
| static void | bm_bridge_splice_loops (BMesh *bm, LinkData *el_a, LinkData *el_b, const float merge_factor) |
| static void | bm_vert_loop_pair (BMesh *bm, BMVert *v1, BMVert *v2, BMLoop **l1, BMLoop **l2) |
| static float | bm_edgeloop_offset_length (LinkData *el_a, LinkData *el_b, LinkData *el_b_first, const float len_max) |
| static void | bm_bridge_best_rotation (BMEdgeLoopStore *el_store_a, BMEdgeLoopStore *el_store_b) |
| static void | bm_face_edges_tag_out (BMesh *bm, BMFace *f) |
| static bool | bm_edge_test_cb (BMEdge *e, void *bm_v) |
| static void | bridge_loop_pair (BMesh *bm, BMEdgeLoopStore *el_store_a, BMEdgeLoopStore *el_store_b, const bool use_merge, const float merge_factor, const int twist_offset) |
| void | bmo_bridge_loops_exec (BMesh *bm, BMOperator *op) |
Connect verts across faces (splits faces) and bridge tool.
Definition in file bmo_bridge.cc.
| #define EDGE_MARK 4 |
Definition at line 26 of file bmo_bridge.cc.
Referenced by bm_edge_test_cb(), bmo_bridge_loops_exec(), and Nature_Init().
| #define EDGE_OUT 8 |
Definition at line 27 of file bmo_bridge.cc.
Referenced by bm_face_edges_tag_out(), bmo_bridge_loops_exec(), and bridge_loop_pair().
| #define FACE_OUT 16 |
Definition at line 28 of file bmo_bridge.cc.
Referenced by bmo_bridge_loops_exec(), and bridge_loop_pair().
| #define USE_DUPLICATE_FACE_VERT_CHECK |
TODO(@ideasman42): Many connected edge loops can cause an error attempting to create faces with duplicate vertices. While this needs to be investigated, it's simple enough to check for this case, see: #102232.
Definition at line 24 of file bmo_bridge.cc.
|
static |
Definition at line 95 of file bmo_bridge.cc.
References BLI_listbase_rotate_first(), bm_edgeloop_offset_length(), BM_edgeloop_verts_get(), ListBase::first, FLT_MAX, len, and LinkData::next.
Referenced by bridge_loop_pair().
|
static |
Definition at line 31 of file bmo_bridge.cc.
References BLI_assert, bm, BM_data_interp_from_verts(), BMO_op_exec(), BMO_op_finish(), BMO_op_init(), BMO_slot_get(), BMO_slot_map_elem_insert(), BMVert::co, LinkData::data, interp_v3_v3v3(), LinkData::next, and BMOperator::slots_in.
Referenced by bridge_loop_pair().
|
static |
Definition at line 128 of file bmo_bridge.cc.
References BMO_edge_flag_test, e, and EDGE_MARK.
Referenced by bmo_bridge_loops_exec().
|
static |
Definition at line 81 of file bmo_bridge.cc.
References BLI_assert, LinkData::data, len, len_v3v3(), LinkData::next, and LinkData::prev.
Referenced by bm_bridge_best_rotation().
Definition at line 119 of file bmo_bridge.cc.
References bm, BM_FACE_FIRST_LOOP, BMO_edge_flag_enable, BMLoop::e, EDGE_OUT, and BMLoop::next.
Referenced by bridge_loop_pair().
|
static |
Definition at line 58 of file bmo_bridge.cc.
References bm, BM_edge_exists(), BM_iter_at_index(), BM_LOOPS_OF_VERT, e, l, BMLoop::next, BMLoop::v, and v2.
Referenced by bridge_loop_pair().
| void bmo_bridge_loops_exec | ( | BMesh * | bm, |
| BMOperator * | op ) |
Definition at line 574 of file bmo_bridge.cc.
References bm, BM_EDGE, bm_edge_test_cb(), BM_edgeloop_length_get(), BM_FACE, BM_mesh_edgeloops_calc_center(), BM_mesh_edgeloops_calc_normal(), BM_mesh_edgeloops_calc_order(), BM_mesh_edgeloops_find(), BM_mesh_edgeloops_free(), BMO_ERROR_CANCEL, BMO_error_raise(), BMO_slot_bool_get(), BMO_slot_buffer_flag_enable(), BMO_slot_buffer_from_enabled_flag(), BMO_slot_float_get(), BMO_slot_int_get(), bridge_loop_pair(), count, EDGE_MARK, EDGE_OUT, FACE_OUT, ListBase::first, LISTBASE_FOREACH, BMEdgeLoopStore::next, LinkData::next, BMOperator::slots_in, and BMOperator::slots_out.
|
static |
This is a corner case:
(loop a) (loop b) +--------+ +--------+
When loops are aligned to the direction between the loops values of 'dir_a/b' is degenerate, in this case compare the original directions (before they were corrected by 'el_dir'), see: #43013
Definition at line 133 of file bmo_bridge.cc.
References add_v3_v3v3(), BLI_assert, BLI_listbase_rotate_first(), BLI_rfindlink(), bm, bm_bridge_best_rotation(), bm_bridge_splice_loops(), BM_CREATE_NOP, BM_EDGE, BM_edge_exists(), BM_edge_is_boundary(), BM_EDGELINK_NEXT, BM_edgeloop_calc_normal(), BM_edgeloop_calc_normal_aligned(), BM_edgeloop_center_get(), BM_edgeloop_copy(), BM_edgeloop_expand(), BM_edgeloop_flip(), BM_edgeloop_free(), BM_edgeloop_is_closed(), BM_edgeloop_length_get(), BM_edgeloop_normal_get(), BM_edgeloop_verts_get(), BM_elem_attrs_copy(), BM_elem_flag_enable, BM_elem_flag_set, BM_ELEM_TAG, BM_FACE, BM_face_create_verts(), bm_face_edges_tag_out(), BM_face_exists(), BM_FACE_FIRST_LOOP, BM_face_normal_update(), BM_iter_at_index(), BM_LOOPS_OF_VERT, BM_mesh_elem_hflag_disable_all(), bm_vert_loop_pair(), BMO_edge_flag_disable, BMO_face_flag_enable, BMO_ITER, BMO_op_exec(), BMO_op_finish(), BMO_op_initf(), BMO_slot_buffer_flag_enable(), BMO_slot_buffer_hflag_enable(), cross_v3_v3v3(), LinkData::data, dot_v3v3(), e, EDGE_OUT, ELEM, eps, BMLoop::f, fabsf, FACE_OUT, ListBase::first, is_zero_v3(), l_b, ListBase::last, len_squared_v3(), LIKELY, LISTBASE_FOREACH, mod_i(), BMLoop::next, LinkData::next, normalize_v3_v3(), op_sub(), sub_v3_v3v3(), BMesh::totface, and UNLIKELY.
Referenced by bmo_bridge_loops_exec().