Blender V4.3
bmesh_operators_private.hh File Reference

Go to the source code of this file.

Functions

void bmo_average_vert_facedata_exec (BMesh *bm, BMOperator *op)
 
void bmo_beautify_fill_exec (BMesh *bm, BMOperator *op)
 
void bmo_bevel_exec (BMesh *bm, BMOperator *op)
 
void bmo_bisect_edges_exec (BMesh *bm, BMOperator *op)
 
void bmo_bisect_plane_exec (BMesh *bm, BMOperator *op)
 
void bmo_bmesh_to_mesh_exec (BMesh *bm, BMOperator *op)
 
void bmo_bridge_loops_exec (BMesh *bm, BMOperator *op)
 
void bmo_collapse_exec (BMesh *bm, BMOperator *op)
 
void bmo_collapse_uvs_exec (BMesh *bm, BMOperator *op)
 
void bmo_connect_verts_exec (BMesh *bm, BMOperator *op)
 
void bmo_connect_verts_concave_exec (BMesh *bm, BMOperator *op)
 
void bmo_connect_verts_nonplanar_exec (BMesh *bm, BMOperator *op)
 
void bmo_connect_vert_pair_exec (BMesh *bm, BMOperator *op)
 
void bmo_contextual_create_exec (BMesh *bm, BMOperator *op)
 
void bmo_convex_hull_exec (BMesh *bm, BMOperator *op)
 
void bmo_create_circle_exec (BMesh *bm, BMOperator *op)
 
void bmo_create_cone_exec (BMesh *bm, BMOperator *op)
 
void bmo_create_cube_exec (BMesh *bm, BMOperator *op)
 
void bmo_create_grid_exec (BMesh *bm, BMOperator *op)
 
void bmo_create_icosphere_exec (BMesh *bm, BMOperator *op)
 
void bmo_create_monkey_exec (BMesh *bm, BMOperator *op)
 
void bmo_create_uvsphere_exec (BMesh *bm, BMOperator *op)
 
void bmo_create_vert_exec (BMesh *bm, BMOperator *op)
 
void bmo_delete_exec (BMesh *bm, BMOperator *op)
 
void bmo_dissolve_edges_exec (BMesh *bm, BMOperator *op)
 
void bmo_dissolve_faces_exec (BMesh *bm, BMOperator *op)
 
void bmo_dissolve_verts_exec (BMesh *bm, BMOperator *op)
 
void bmo_dissolve_limit_exec (BMesh *bm, BMOperator *op)
 
void bmo_dissolve_degenerate_exec (BMesh *bm, BMOperator *op)
 
void bmo_duplicate_exec (BMesh *bm, BMOperator *op)
 
void bmo_edgeloop_fill_exec (BMesh *bm, BMOperator *op)
 
void bmo_face_attribute_fill_exec (BMesh *bm, BMOperator *op)
 
void bmo_holes_fill_exec (BMesh *bm, BMOperator *op)
 
void bmo_edgenet_fill_exec (BMesh *bm, BMOperator *op)
 
void bmo_edgenet_prepare_exec (BMesh *bm, BMOperator *op)
 
void bmo_extrude_discrete_faces_exec (BMesh *bm, BMOperator *op)
 
void bmo_extrude_edge_only_exec (BMesh *bm, BMOperator *op)
 
void bmo_extrude_face_region_exec (BMesh *bm, BMOperator *op)
 
void bmo_extrude_vert_indiv_exec (BMesh *bm, BMOperator *op)
 
void bmo_find_doubles_exec (BMesh *bm, BMOperator *op)
 
void bmo_grid_fill_exec (BMesh *bm, BMOperator *op)
 
void bmo_inset_individual_exec (BMesh *bm, BMOperator *op)
 
void bmo_inset_region_exec (BMesh *bm, BMOperator *op)
 
void bmo_join_triangles_exec (BMesh *bm, BMOperator *op)
 
void bmo_mesh_to_bmesh_exec (BMesh *bm, BMOperator *op)
 
void bmo_mirror_exec (BMesh *bm, BMOperator *op)
 
void bmo_object_load_bmesh_exec (BMesh *bm, BMOperator *op)
 
void bmo_pointmerge_exec (BMesh *bm, BMOperator *op)
 
void bmo_pointmerge_facedata_exec (BMesh *bm, BMOperator *op)
 
void bmo_recalc_face_normals_exec (BMesh *bm, BMOperator *op)
 
void bmo_poke_exec (BMesh *bm, BMOperator *op)
 
void bmo_offset_edgeloops_exec (BMesh *bm, BMOperator *op)
 
void bmo_planar_faces_exec (BMesh *bm, BMOperator *op)
 
void bmo_region_extend_exec (BMesh *bm, BMOperator *op)
 
void bmo_remove_doubles_exec (BMesh *bm, BMOperator *op)
 
void bmo_reverse_colors_exec (BMesh *bm, BMOperator *op)
 
void bmo_reverse_faces_exec (BMesh *bm, BMOperator *op)
 
void bmo_reverse_uvs_exec (BMesh *bm, BMOperator *op)
 
void bmo_rotate_colors_exec (BMesh *bm, BMOperator *op)
 
void bmo_rotate_edges_exec (BMesh *bm, BMOperator *op)
 
void bmo_rotate_exec (BMesh *bm, BMOperator *op)
 
void bmo_rotate_uvs_exec (BMesh *bm, BMOperator *op)
 
void bmo_scale_exec (BMesh *bm, BMOperator *op)
 
void bmo_smooth_vert_exec (BMesh *bm, BMOperator *op)
 
void bmo_smooth_laplacian_vert_exec (BMesh *bm, BMOperator *op)
 
void bmo_solidify_face_region_exec (BMesh *bm, BMOperator *op)
 
void bmo_spin_exec (BMesh *bm, BMOperator *op)
 
void bmo_split_edges_exec (BMesh *bm, BMOperator *op)
 
void bmo_split_exec (BMesh *bm, BMOperator *op)
 
void bmo_subdivide_edges_exec (BMesh *bm, BMOperator *op)
 
void bmo_subdivide_edgering_exec (BMesh *bm, BMOperator *op)
 
void bmo_symmetrize_exec (BMesh *bm, BMOperator *op)
 
void bmo_transform_exec (BMesh *bm, BMOperator *op)
 
void bmo_translate_exec (BMesh *bm, BMOperator *op)
 
void bmo_triangle_fill_exec (BMesh *bm, BMOperator *op)
 
void bmo_triangulate_exec (BMesh *bm, BMOperator *op)
 
void bmo_unsubdivide_exec (BMesh *bm, BMOperator *op)
 
void bmo_weld_verts_exec (BMesh *bm, BMOperator *op)
 
void bmo_wireframe_exec (BMesh *bm, BMOperator *op)
 
void bmo_flip_quad_tessellation_exec (BMesh *bm, BMOperator *op)
 

Function Documentation

◆ bmo_average_vert_facedata_exec()

◆ bmo_beautify_fill_exec()

◆ bmo_bevel_exec()

◆ bmo_bisect_edges_exec()

◆ bmo_bisect_plane_exec()

◆ bmo_bmesh_to_mesh_exec()

void bmo_bmesh_to_mesh_exec ( BMesh * bm,
BMOperator * op )

Definition at line 47 of file bmo_mesh_convert.cc.

References bm, BM_mesh_bm_to_me(), BMO_slot_ptr_get(), G, params, and BMOperator::slots_in.

◆ bmo_bridge_loops_exec()

◆ bmo_collapse_exec()

◆ bmo_collapse_uvs_exec()

◆ bmo_connect_vert_pair_exec()

◆ bmo_connect_verts_concave_exec()

◆ bmo_connect_verts_exec()

◆ bmo_connect_verts_nonplanar_exec()

◆ bmo_contextual_create_exec()

◆ bmo_convex_hull_exec()

void bmo_convex_hull_exec ( BMesh * bm,
BMOperator * op )

◆ bmo_create_circle_exec()

◆ bmo_create_cone_exec()

◆ bmo_create_cube_exec()

◆ bmo_create_grid_exec()

◆ bmo_create_icosphere_exec()

◆ bmo_create_monkey_exec()

◆ bmo_create_uvsphere_exec()

◆ bmo_create_vert_exec()

◆ bmo_delete_exec()

◆ bmo_dissolve_degenerate_exec()

◆ bmo_dissolve_edges_exec()

◆ bmo_dissolve_faces_exec()

◆ bmo_dissolve_limit_exec()

◆ bmo_dissolve_verts_exec()

◆ bmo_duplicate_exec()

void bmo_duplicate_exec ( BMesh * bm,
BMOperator * op )

Duplicate Operator

Duplicates verts, edges and faces of a mesh.

INPUT SLOTS:

BMOP_DUPE_VINPUT: Buffer containing pointers to mesh vertices to be duplicated BMOP_DUPE_EINPUT: Buffer containing pointers to mesh edges to be duplicated BMOP_DUPE_FINPUT: Buffer containing pointers to mesh faces to be duplicated

OUTPUT SLOTS:

BMOP_DUPE_VORIGINAL: Buffer containing pointers to the original mesh vertices BMOP_DUPE_EORIGINAL: Buffer containing pointers to the original mesh edges BMOP_DUPE_FORIGINAL: Buffer containing pointers to the original mesh faces BMOP_DUPE_VNEW: Buffer containing pointers to the new mesh vertices BMOP_DUPE_ENEW: Buffer containing pointers to the new mesh edges BMOP_DUPE_FNEW: Buffer containing pointers to the new mesh faces

Definition at line 373 of file bmo_dupe.cc.

References bm, BM_ALL_NOLOOP, bmo_mesh_copy(), BMO_slot_buffer_flag_enable(), BMO_slot_buffer_from_enabled_flag(), BMO_slot_copy, BMO_slot_ptr_get(), DUPE_INPUT, DUPE_NEW, BMOperator::slots_in, and BMOperator::slots_out.

◆ bmo_edgeloop_fill_exec()

◆ bmo_edgenet_fill_exec()

◆ bmo_edgenet_prepare_exec()

◆ bmo_extrude_discrete_faces_exec()

◆ bmo_extrude_edge_only_exec()

◆ bmo_extrude_face_region_exec()

◆ bmo_extrude_vert_indiv_exec()

◆ bmo_face_attribute_fill_exec()

◆ bmo_find_doubles_exec()

void bmo_find_doubles_exec ( BMesh * bm,
BMOperator * op )

◆ bmo_flip_quad_tessellation_exec()

void bmo_flip_quad_tessellation_exec ( BMesh * bm,
BMOperator * op )

◆ bmo_grid_fill_exec()

◆ bmo_holes_fill_exec()

◆ bmo_inset_individual_exec()

void bmo_inset_individual_exec ( BMesh * bm,
BMOperator * op )

Individual Face Inset. Find all tagged faces (f), duplicate edges around faces, inset verts of created edges, create new faces between old and new edges, fill face between connected new edges, kill old face (f).

Definition at line 410 of file bmo_inset.cc.

References BLI_memarena_clear(), BLI_memarena_free(), BLI_memarena_new(), BLI_MEMARENA_STD_BUFSIZE, bm, BM_ELEM_TAG, BM_FACE, BM_mesh_elem_hflag_disable_all(), bmo_face_inset_individual(), BMO_ITER, BMO_slot_bool_get(), BMO_slot_buffer_from_enabled_flag(), BMO_slot_buffer_hflag_enable(), BMO_slot_float_get(), ELE_NEW, BMOperator::slots_in, and BMOperator::slots_out.

◆ bmo_inset_region_exec()

void bmo_inset_region_exec ( BMesh * bm,
BMOperator * op )

This case where only one edge attached to #v_split is used. i.e. the face to inset is on a boundary.

                 We want the inset to align flush with the
                 boundary edge, not the normal of the interior
            <--- edge which would give an unsightly bump.
--+-------------------------+---------------+--
  |^v_other    ^e_other    /^v_split        |
  |                       /                 |
  |                      /                  |
  |                     / <- tag split edge |
  |                    /                    |
  |                   /                     |
  |                  /                      |
--+-----------------+-----------------------+--
  |                                         |
  |                                         |
Note
The fact we are doing location comparisons on verts that are moved about doesn't matter because the direction will remain the same in this case.

Loops vars from newly created face (face_a/b)

             l_a->e & l_b->prev->e
+------------------------------------+
|\ l_a                          l_b /|
| \ l_a->prev->e            l_b->e / |
|  \ l_a->prev          l_b->next /  |
|   +----------------------------+   |
|   |l_a_other    ^     l_b_other|   |
|   |        l_b->next->e &...   |   |
|   |        l_a->prev->prev->e  |   |
|   |        (inset face)        |   |
|   +----------------------------+   |
|  /                              \  |
| /                                \ |
|/                                  |
+------------------------------------+

Definition at line 662 of file bmo_inset.cc.

References add_v3_v3(), add_v3_v3v3(), InterpFace::axis_mat, BLI_assert, BLI_ghash_free(), BLI_ghash_ptr_new(), BLI_memarena_alloc(), BLI_memarena_free(), BLI_memarena_new(), BLI_MEMARENA_STD_BUFSIZE, InterpFace::blocks_l, InterpFace::blocks_v, bm, BM_CREATE_NOP, BM_EDGE, BM_edge_calc_face_tangent(), BM_edge_calc_length(), BM_edge_create(), bm_edge_info_average_length_with_fallback(), BM_edge_is_boundary(), BM_edge_is_manifold(), bm_edge_is_mixed_face_tag(), BM_edge_ordered_verts_ex(), BM_edge_other_loop(), BM_edge_other_vert(), BM_EDGES_OF_MESH, BM_EDGES_OF_VERT, BM_elem_attrs_copy(), BM_elem_flag_disable, BM_elem_flag_enable, BM_elem_flag_test, BM_elem_index_get, BM_elem_index_set, BM_ELEM_TAG, BM_FACE, BM_face_copy_shared(), BM_face_create_verts(), BM_FACE_FIRST_LOOP, BM_face_interp_from_face_ex(), BM_FACES_OF_VERT, bm_interp_face_free(), bm_interp_face_store(), BM_ITER_ELEM, BM_ITER_MESH, BM_ITER_MESH_INDEX, bm_loop_customdata_merge(), BM_loop_other_vert_loop(), BM_mesh_elem_hflag_disable_all(), BM_mesh_elem_hflag_enable_all(), BM_VERT, BM_vert_calc_shell_factor(), BM_vert_create(), BM_vert_splice(), BM_VERTS_OF_EDGE, BM_VERTS_OF_MESH, bmesh_kernel_edge_separate(), bmesh_kernel_vert_separate(), BMO_face_flag_enable, BMO_ITER, BMO_slot_bool_get(), BMO_slot_buffer_from_enabled_flag(), BMO_slot_buffer_hflag_disable(), BMO_slot_buffer_hflag_enable(), BMO_slot_float_get(), BMVert::co, compare_v3v3(), copy_v3_v3(), InterpFace::cos_2d, cross_v3_v3v3(), CustomData_bmesh_copy_block(), CustomData_bmesh_free_block_data(), CustomData_has_math(), BMHeader::data, dot_v3v3(), BMLoop::e, BMVert::e, e, SplitEdgeInfo::e_new, SplitEdgeInfo::e_old, ELE_NEW, BMesh::elem_index_dirty, BMLoop::f, InterpFace::f, float, BMLoop::head, BMEdge::l, l, SplitEdgeInfo::l, l_b, BMesh::ldata, len_squared_v3(), len_squared_v3v3(), SplitEdgeInfo::length, madd_v3_v3fl(), madd_v3_v3v3fl(), MEM_callocN, MEM_freeN(), MEM_mallocN, mid_v3_v3v3(), mul_v3_fl(), negate_v3(), BMLoop::next, BMFace::no, BMVert::no, SplitEdgeInfo::no, normalize_v3(), BMLoop::prev, shell_v3v3_mid_normalized_to_dist(), shell_v3v3_normalized_to_dist(), BMOperator::slots_in, BMOperator::slots_out, sub_v3_v3v3(), BMesh::totface, BMesh::totvert, BMLoop::v, v, BMEdge::v1, BMEdge::v2, v2, VERT_ORIG_GET, VERT_ORIG_REMOVE, VERT_ORIG_STORE, and zero_v3().

◆ bmo_join_triangles_exec()

◆ bmo_mesh_to_bmesh_exec()

void bmo_mesh_to_bmesh_exec ( BMesh * bm,
BMOperator * op )

◆ bmo_mirror_exec()

◆ bmo_object_load_bmesh_exec()

void bmo_object_load_bmesh_exec ( BMesh * bm,
BMOperator * op )

◆ bmo_offset_edgeloops_exec()

◆ bmo_planar_faces_exec()

◆ bmo_pointmerge_exec()

◆ bmo_pointmerge_facedata_exec()

◆ bmo_poke_exec()

◆ bmo_recalc_face_normals_exec()

void bmo_recalc_face_normals_exec ( BMesh * bm,
BMOperator * op )

Put normal to the outside, and set the first direction flags in edges

then check the object, and set directions / direction-flags: but only for edges with 1 or 2 faces this is in fact the 'select connected'

in case all faces were not done: start over with 'find the ultimate ...'.

Definition at line 256 of file bmo_normals.cc.

References bm, BM_EDGE, BM_FACE, BM_face_at_index(), BM_mesh_calc_face_groups(), BM_mesh_elem_table_ensure(), BMO_face_flag_test_bool, bmo_recalc_face_normals_array(), bmo_recalc_normal_loop_filter_cb(), BMO_slot_buffer_flag_enable(), FACE_FLAG, int, MEM_freeN(), MEM_mallocN, BMOperator::slots_in, and BMesh::totface.

◆ bmo_region_extend_exec()

◆ bmo_remove_doubles_exec()

void bmo_remove_doubles_exec ( BMesh * bm,
BMOperator * op )

◆ bmo_reverse_colors_exec()

void bmo_reverse_colors_exec ( BMesh * bm,
BMOperator * op )

◆ bmo_reverse_faces_exec()

void bmo_reverse_faces_exec ( BMesh * bm,
BMOperator * op )

◆ bmo_reverse_uvs_exec()

void bmo_reverse_uvs_exec ( BMesh * bm,
BMOperator * op )

◆ bmo_rotate_colors_exec()

◆ bmo_rotate_edges_exec()

◆ bmo_rotate_exec()

void bmo_rotate_exec ( BMesh * bm,
BMOperator * op )

◆ bmo_rotate_uvs_exec()

◆ bmo_scale_exec()

void bmo_scale_exec ( BMesh * bm,
BMOperator * op )

◆ bmo_smooth_laplacian_vert_exec()

◆ bmo_smooth_vert_exec()

◆ bmo_solidify_face_region_exec()

◆ bmo_spin_exec()

◆ bmo_split_edges_exec()

◆ bmo_split_exec()

void bmo_split_exec ( BMesh * bm,
BMOperator * op )

Split Operator

Duplicates verts, edges and faces of a mesh but also deletes the originals.

INPUT SLOTS:

BMOP_DUPE_VINPUT: Buffer containing pointers to mesh vertices to be split BMOP_DUPE_EINPUT: Buffer containing pointers to mesh edges to be split BMOP_DUPE_FINPUT: Buffer containing pointers to mesh faces to be split

OUTPUT SLOTS:

BMOP_DUPE_VOUTPUT: Buffer containing pointers to the split mesh vertices BMOP_DUPE_EOUTPUT: Buffer containing pointers to the split mesh edges BMOP_DUPE_FOUTPUT: Buffer containing pointers to the split mesh faces

Note
Lower level uses of this operator may want to use BM_mesh_separate_faces Since it's faster for the 'use_only_faces' case.

Definition at line 436 of file bmo_dupe.cc.

References bm, BM_ALL_NOLOOP, BM_EDGES_OF_MESH, BM_EDGES_OF_VERT, BM_FACES_OF_EDGE, BM_ITER_ELEM, BM_ITER_MESH, BM_VERTS_OF_MESH, BMO_edge_flag_enable, BMO_edge_flag_test, BMO_face_flag_test, BMO_mesh_delete_oflag_context(), BMO_op_exec(), BMO_op_finish(), BMO_op_init(), BMO_slot_bool_get(), BMO_slot_buffer_flag_enable(), BMO_slot_copy, BMO_vert_flag_enable, DEL_FACES, e, BMOperator::flag, BMOperator::slots_in, SPLIT_INPUT, and v.

◆ bmo_subdivide_edgering_exec()

◆ bmo_subdivide_edges_exec()

void bmo_subdivide_edges_exec ( BMesh * bm,
BMOperator * op )

Definition at line 911 of file bmo_subdivide.cc.

References b, BLI_assert, BLI_rng_free(), BLI_rng_get_float(), BLI_rng_new_srandom(), BLI_stack_discard(), BLI_stack_free(), BLI_stack_is_empty(), BLI_stack_new, BLI_stack_peek(), BLI_stack_push_r(), bm, BM_ALL_NOLOOP, BM_CHECK_ELEMENT, BM_data_layer_add(), BM_data_layer_free_n(), BM_EDGE, BM_edge_exists(), BM_edge_share_vert_check(), BM_ELEM_CD_GET_VOID_P, BM_FACE, BM_face_split(), BM_FACES_OF_MESH, BM_ITER_ELEM, BM_ITER_ELEM_INDEX, BM_ITER_MESH, BM_LOOPS_OF_FACE, BM_LOOPS_OF_VERT, bm_subdivide_multicut(), BM_vert_in_face(), BM_VERTS_OF_MESH, BMO_edge_flag_enable, BMO_edge_flag_test, BMO_face_flag_enable, BMO_face_flag_test, BMO_slot_bool_get(), BMO_slot_buffer_flag_enable(), BMO_slot_buffer_from_enabled_flag(), BMO_slot_float_get(), BMO_slot_get(), BMO_slot_int_get(), BMO_slot_map_to_flag(), bmo_subd_init_shape_info(), BMO_vert_flag_test, BMOpSlot::buf, CD_SHAPEKEY, BMVert::co, SubDPattern::connectexec, copy_v3_v3(), BMOpSlot::data, dot_v3v3(), BMLoop::e, EDGE_PERCENT, ELE_INNER, ELE_SPLIT, BMLoop::f, fabsf, SubDFaceData::face, FACE_CUSTOMFILL, FLT_FACE_SPLIT_EPSILON, l, BMOpSlot::len, SubDPattern::len, BMLoop::next, normalize_v3(), params, SubDFaceData::pat, patterns, PATTERNS_TOT, BMLoop::prev, quad_1edge, quad_2edge_fan, quad_2edge_innervert, quad_2edge_path, quad_4edge, blender::Vector< T, InlineBufferCapacity, Allocator >::reinitialize(), seed, SubDPattern::seledges, BMOperator::slots_in, BMOperator::slots_out, smooth(), SubDFaceData::start, sub_v3_v3v3(), SUBD_CORNER_FAN, SUBD_CORNER_INNERVERT, SUBD_CORNER_PATH, SUBD_SPLIT, SubDFaceData::totedgesel, tri_1edge, tri_3edge, BMLoop::v, v, BMEdge::v1, BMEdge::v2, BMesh::vdata, and verts.

◆ bmo_symmetrize_exec()

◆ bmo_transform_exec()

◆ bmo_translate_exec()

void bmo_translate_exec ( BMesh * bm,
BMOperator * op )

◆ bmo_triangle_fill_exec()

◆ bmo_triangulate_exec()

◆ bmo_unsubdivide_exec()

◆ bmo_weld_verts_exec()

◆ bmo_wireframe_exec()