Blender
V3.3
|
#include "MEM_guardedalloc.h"
#include "DNA_meshdata_types.h"
#include "BLI_buffer.h"
#include "BLI_math.h"
#include "BKE_customdata.h"
#include "bmesh.h"
#include "intern/bmesh_operators_private.h"
Go to the source code of this file.
Macros | |
#define | USE_EDGE_REGION_FLAGS |
#define | VERT_MARK 1 |
#define | EDGE_MARK 1 |
#define | FACE_MARK 1 |
#define | VERT_NONMAN 2 |
#define | EDGE_NONMAN 2 |
Enumerations | |
enum | { EXT_INPUT = 1 , EXT_KEEP = 2 , EXT_DEL = 4 , EXT_TAG = 8 } |
Functions | |
void | bmo_extrude_discrete_faces_exec (BMesh *bm, BMOperator *op) |
static void | bm_extrude_copy_face_loop_attributes (BMesh *bm, BMFace *f) |
Copy the loop pair from an adjacent face to both sides of this quad. More... | |
static void | bm_extrude_disable_skin_root (BMesh *bm, BMVert *v) |
void | bmo_extrude_edge_only_exec (BMesh *bm, BMOperator *op) |
void | bmo_extrude_vert_indiv_exec (BMesh *bm, BMOperator *op) |
static bool | bm_extrude_region_edge_flag (const BMVert *v, char r_e_hflag[2]) |
void | bmo_extrude_face_region_exec (BMesh *bm, BMOperator *op) |
static void | calc_solidify_normals (BMesh *bm) |
static void | solidify_add_thickness (BMesh *bm, const float dist) |
void | bmo_solidify_face_region_exec (BMesh *bm, BMOperator *op) |
Extrude faces and solidify.
Definition in file bmo_extrude.c.
#define EDGE_MARK 1 |
Definition at line 32 of file bmo_extrude.c.
#define EDGE_NONMAN 2 |
Definition at line 35 of file bmo_extrude.c.
#define FACE_MARK 1 |
Definition at line 33 of file bmo_extrude.c.
#define USE_EDGE_REGION_FLAGS |
Definition at line 22 of file bmo_extrude.c.
#define VERT_MARK 1 |
Definition at line 31 of file bmo_extrude.c.
#define VERT_NONMAN 2 |
Definition at line 34 of file bmo_extrude.c.
anonymous enum |
Enumerator | |
---|---|
EXT_INPUT | |
EXT_KEEP | |
EXT_DEL | |
EXT_TAG |
Definition at line 24 of file bmo_extrude.c.
Copy the loop pair from an adjacent face to both sides of this quad.
The face is assumed to be a quad, created by extruding. This function won't crash if its not but won't work right either. e_b is the new edge.
Definition at line 123 of file bmo_extrude.c.
References bm, BM_edge_other_loop(), BM_elem_attrs_copy(), BM_elem_flag_disable, BM_ELEM_HIDDEN, BM_FACE_FIRST_LOOP, BMLoop::e, BMLoop::f, BMLoop::next, BMLoop::radial_next, and UNLIKELY.
Referenced by bmo_extrude_edge_only_exec(), and bmo_extrude_face_region_exec().
Definition at line 154 of file bmo_extrude.c.
References bm, CD_MVERT_SKIN, CustomData_bmesh_get(), BMHeader::data, MVertSkin::flag, BMVert::head, MVERT_SKIN_ROOT, v, and BMesh::vdata.
Referenced by bmo_extrude_edge_only_exec(), bmo_extrude_face_region_exec(), and bmo_extrude_vert_indiv_exec().
When create an edge for an extruded face region check surrounding edge flags before creating a new edge.
Definition at line 283 of file bmo_extrude.c.
References BM_DISK_EDGE_NEXT, BM_edge_is_boundary(), BM_ELEM_SEAM, BM_ELEM_SMOOTH, BMVert::e, BMEdge::head, BMHeader::hflag, BMEdge::l, and v.
Referenced by bmo_extrude_face_region_exec().
void bmo_extrude_discrete_faces_exec | ( | BMesh * | bm, |
BMOperator * | op | ||
) |
Definition at line 37 of file bmo_extrude.c.
References BLI_ghash_free(), BLI_ghash_lookup(), bm, BM_CREATE_NOP, BM_elem_attrs_copy(), BM_FACE, BM_face_copy(), BM_face_create_quad_tri(), BM_FACE_FIRST_LOOP, BM_select_history_map_create(), BMO_face_flag_enable, BMO_ITER, BMO_op_callf(), BMO_slot_bool_get(), BMO_slot_buffer_from_enabled_flag(), DEL_ONLYFACES, BMLoop::e, BMEditSelection::ele, EXT_DEL, EXT_KEEP, BMOperator::flag, BMLoop::next, NULL, BMOperator::slots_in, BMOperator::slots_out, and BMLoop::v.
void bmo_extrude_edge_only_exec | ( | BMesh * | bm, |
BMOperator * | op | ||
) |
Definition at line 162 of file bmo_extrude.c.
References bm, BM_ALL_NOLOOP, BM_CREATE_NOP, BM_EDGE, bm_extrude_copy_face_loop_attributes(), bm_extrude_disable_skin_root(), BM_face_create_verts(), BM_VERT, BMO_edge_flag_enable, BMO_edge_flag_test, BMO_face_flag_enable, BMO_ITER, BMO_iter_map_value_ptr(), BMO_iter_new(), BMO_iter_step(), BMO_op_exec(), BMO_op_finish(), BMO_op_initf(), BMO_slot_bool_get(), BMO_slot_buffer_from_enabled_flag(), BMO_vert_flag_enable, CD_MVERT_SKIN, CustomData_has_layer(), e, EXT_INPUT, EXT_KEEP, BMOperator::flag, NULL, BMOperator::slots_in, BMOperator::slots_out, v, BMEdge::v1, BMEdge::v2, and BMesh::vdata.
void bmo_extrude_face_region_exec | ( | BMesh * | bm, |
BMOperator * | op | ||
) |
Definition at line 311 of file bmo_extrude.c.
References BMesh::act_face, add_v3_v3(), BLI_assert, bm, BM_CREATE_NO_DOUBLE, BM_CREATE_NOP, BM_DISK_EDGE_NEXT, BM_EDGE, BM_edge_collapse(), BM_edge_create(), BM_edge_exists(), BM_edge_is_boundary(), BM_edge_is_wire(), BM_edge_kill(), BM_EDGES_OF_MESH, BM_EDGES_OF_VERT, BM_elem_flag_disable, BM_elem_flag_enable, bm_extrude_copy_face_loop_attributes(), bm_extrude_disable_skin_root(), bm_extrude_region_edge_flag(), BM_FACE, BM_face_create(), BM_face_create_verts(), BM_face_normal_flip(), BM_FACES_OF_EDGE, BM_FACES_OF_MESH, BM_FACES_OF_VERT, BM_ITER_ELEM, BM_ITER_MESH, BM_VERT, BM_vert_is_edge_pair(), BM_vert_kill(), BM_VERTS_OF_MESH, bmesh_kernel_join_face_kill_edge(), BMO_edge_flag_enable, BMO_edge_flag_test, BMO_elem_flag_enable, BMO_elem_flag_test, BMO_face_flag_enable, BMO_face_flag_test, BMO_ITER, BMO_iter_map_value_ptr(), BMO_iter_new(), BMO_iter_step(), BMO_op_exec(), BMO_op_finish(), BMO_op_initf(), BMO_slot_bool_get(), BMO_slot_buffer_flag_enable(), BMO_slot_copy, BMO_slot_get(), BMO_slot_map_len(), BMO_vert_flag_enable, CD_MVERT_SKIN, CustomData_has_layer(), DEL_ONLYTAGGED, dot_v3v3(), BMVert::e, e, EXT_DEL, EXT_INPUT, EXT_TAG, fabs(), BMOperator::flag, BMEdge::l, MEM_freeN, MEM_mallocN, BMFace::no, normalize_v3(), NULL, BMOperator::slots_in, BMOperator::slots_out, SWAP, BMLoop::v, v, BMEdge::v1, v1, BMEdge::v2, v2, BMesh::vdata, and zero_v3().
void bmo_extrude_vert_indiv_exec | ( | BMesh * | bm, |
BMOperator * | op | ||
) |
Definition at line 230 of file bmo_extrude.c.
References BLI_ghash_free(), BLI_ghash_lookup(), bm, BM_CREATE_NOP, BM_EDGE, BM_edge_create(), bm_extrude_disable_skin_root(), BM_select_history_map_create(), BM_VERT, BM_vert_create(), BMO_edge_flag_enable, BMO_iter_new(), BMO_iter_step(), BMO_slot_bool_get(), BMO_slot_buffer_from_enabled_flag(), BMO_vert_flag_enable, CD_MVERT_SKIN, BMVert::co, CustomData_has_layer(), BMVert::e, e, BMEditSelection::ele, EXT_KEEP, NULL, BMOperator::slots_in, BMOperator::slots_out, SWAP, v, BMEdge::v1, and BMesh::vdata.
void bmo_solidify_face_region_exec | ( | BMesh * | bm, |
BMOperator * | op | ||
) |
Definition at line 825 of file bmo_extrude.c.
References bm, BM_FACE, BMO_op_exec(), BMO_op_finish(), BMO_op_init(), BMO_op_initf(), BMO_slot_bool_set(), BMO_slot_buffer_flag_enable(), BMO_slot_copy, BMO_slot_float_get(), calc_solidify_normals(), FACE_MARK, BMOperator::flag, BMOperator::slots_in, BMOperator::slots_out, and solidify_add_thickness().
Definition at line 627 of file bmo_extrude.c.
References add_v3_v3(), add_v3_v3v3(), angle(), angle_normalized_v3v3(), BLI_assert, bm, BM_EDGE, BM_EDGES_OF_FACE, BM_EDGES_OF_MESH, BM_elem_flag_disable, BM_elem_flag_enable, BM_elem_flag_test, BM_elem_index_get, BM_ELEM_TAG, BM_FACES_OF_EDGE, BM_FACES_OF_MESH, BM_FACES_OF_VERT, BM_ITER_ELEM, BM_ITER_MESH, BM_mesh_elem_index_ensure(), BM_vert_is_manifold(), BM_vert_normal_update(), BM_VERTS_OF_MESH, BMO_edge_flag_enable, BMO_edge_flag_test, BMO_face_flag_test, BMO_vert_flag_enable, BMO_vert_flag_test, copy_v3_v3(), e, EDGE_MARK, EDGE_NONMAN, FACE_MARK, M_PI_2, MEM_callocN, MEM_freeN, mul_v3_fl(), BMVert::no, BMFace::no, normalize_v3(), normalize_v3_length(), NULL, BMesh::totedge, v, VERT_MARK, VERT_NONMAN, and zero_v3().
Referenced by bmo_solidify_face_region_exec().
Definition at line 772 of file bmo_extrude.c.
References angle_poly_v3(), BLI_buffer_declare_static, BLI_buffer_free, BLI_BUFFER_NOP, BLI_buffer_reinit_data, bm, BM_DEFAULT_NGON_STACK_SIZE, BM_elem_index_get, BM_FACES_OF_MESH, BM_ITER_ELEM, BM_ITER_ELEM_INDEX, BM_ITER_MESH, BM_LOOPS_OF_FACE, BM_mesh_elem_index_ensure(), BM_VERT, BM_VERTS_OF_MESH, BMO_face_flag_test, BMVert::co, FACE_MARK, l, BMFace::len, madd_v3_v3fl(), MEM_callocN, MEM_freeN, BMVert::no, BMFace::no, shell_v3v3_normalized_to_dist(), BMesh::totvert, BMLoop::v, v, and verts.
Referenced by bmo_solidify_face_region_exec().