Blender
V3.3
|
#include "MEM_guardedalloc.h"
#include "DNA_key_types.h"
#include "DNA_mesh_types.h"
#include "DNA_meshdata_types.h"
#include "DNA_object_types.h"
#include "BLI_alloca.h"
#include "BLI_buffer.h"
#include "BLI_kdtree.h"
#include "BLI_listbase.h"
#include "BLI_math.h"
#include "BKE_DerivedMesh.h"
#include "BKE_context.h"
#include "BKE_customdata.h"
#include "BKE_editmesh.h"
#include "BKE_editmesh_bvh.h"
#include "BKE_global.h"
#include "BKE_layer.h"
#include "BKE_main.h"
#include "BKE_mesh.h"
#include "BKE_mesh_mapping.h"
#include "BKE_report.h"
#include "DEG_depsgraph.h"
#include "BKE_object.h"
#include "WM_api.h"
#include "WM_types.h"
#include "ED_mesh.h"
#include "ED_screen.h"
#include "ED_transform_snap_object_context.h"
#include "ED_uvedit.h"
#include "ED_view3d.h"
#include "mesh_intern.h"
Go to the source code of this file.
Macros | |
#define | VERT_INTPTR(_v, _i) (r_index ? &r_index[_i] : BM_ELEM_CD_GET_VOID_P(_v, cd_vmirr_offset)) |
UV Vertex Map API | |
#define | INVALID_ISLAND ((unsigned int)-1) |
UvVertMap * | BM_uv_vert_map_create (BMesh *bm, const bool use_select, const bool use_winding) |
UvMapVert * | BM_uv_vert_map_at_index (UvVertMap *vmap, uint v) |
static void | bm_uv_assign_island (UvElementMap *element_map, UvElement *element, int nisland, uint *map, UvElement *islandbuf, int islandbufsize) |
static int | bm_uv_edge_select_build_islands (UvElementMap *element_map, const Scene *scene, UvElement *islandbuf, uint *map, bool uv_selected, int cd_loop_uv_offset) |
UvElementMap * | BM_uv_element_map_create (BMesh *bm, const Scene *scene, const bool uv_selected, const bool use_winding, const bool do_islands) |
void | BM_uv_vert_map_free (UvVertMap *vmap) |
void | BM_uv_element_map_free (UvElementMap *element_map) |
UvElement * | BM_uv_element_get (UvElementMap *map, BMFace *efa, BMLoop *l) |
Mirror Cache API | |
#define | BM_SEARCH_MAXDIST_MIRR 0.00002f |
#define | BM_CD_LAYER_ID "__mirror_index" |
static BMVert * | cache_mirr_intptr_as_bmvert (const intptr_t *index_lookup, int index) |
void | EDBM_verts_mirror_cache_begin_ex (BMEditMesh *em, const int axis, const bool use_self, const bool use_select, const bool respecthide, const bool use_topology, float maxdist, int *r_index) |
void | EDBM_verts_mirror_cache_begin (BMEditMesh *em, const int axis, const bool use_self, const bool use_select, const bool respecthide, const bool use_topology) |
BMVert * | EDBM_verts_mirror_get (BMEditMesh *em, BMVert *v) |
BMEdge * | EDBM_verts_mirror_get_edge (BMEditMesh *em, BMEdge *e) |
BMFace * | EDBM_verts_mirror_get_face (BMEditMesh *em, BMFace *f) |
void | EDBM_verts_mirror_cache_clear (BMEditMesh *em, BMVert *v) |
void | EDBM_verts_mirror_cache_end (BMEditMesh *em) |
void | EDBM_verts_mirror_apply (BMEditMesh *em, const int sel_from, const int sel_to) |
#define BM_CD_LAYER_ID "__mirror_index" |
Definition at line 1117 of file editmesh_utils.c.
#define BM_SEARCH_MAXDIST_MIRR 0.00002f |
Mirror editing API, usage:
Definition at line 1116 of file editmesh_utils.c.
#define INVALID_ISLAND ((unsigned int)-1) |
Definition at line 596 of file editmesh_utils.c.
#define VERT_INTPTR | ( | _v, | |
_i | |||
) | (r_index ? &r_index[_i] : BM_ELEM_CD_GET_VOID_P(_v, cd_vmirr_offset)) |
|
static |
Definition at line 598 of file editmesh_utils.c.
References UvElementMap::buf, element, UvElement::flag, UvElement::island, UvElement::l, UvElement::loop_of_poly_index, map, and UvElement::separate.
Referenced by bm_uv_edge_select_build_islands(), and BM_uv_element_map_create().
|
static |
Definition at line 616 of file editmesh_utils.c.
References BLI_assert, bm_uv_assign_island(), BM_uv_element_get(), UvElementMap::buf, element, INVALID_ISLAND, map, MEM_mallocN, MEM_SAFE_FREE, UvElement::next, next, blender::meshintersect::prev(), scene, UvElement::separate, UvElementMap::totalUVs, and uvedit_edge_select_test().
Referenced by BM_uv_element_map_create().
UvElement* BM_uv_element_get | ( | UvElementMap * | map, |
BMFace * | efa, | ||
BMLoop * | l | ||
) |
Definition at line 1041 of file editmesh_utils.c.
References BM_elem_index_get, element, l, map, NULL, and BMLoop::v.
Referenced by bm_uv_edge_select_build_islands(), createTransUVs(), stitch_init(), stitch_process_data(), stitch_select(), stitch_uv_edge_generate_linked_edges(), uv_edge_get(), uv_element_offset_from_face_get(), uv_isolate_selected_islands(), and uv_sculpt_stroke_init().
UvElementMap* BM_uv_element_map_create | ( | BMesh * | bm, |
const Scene * | scene, | ||
const bool | uv_selected, | ||
const bool | use_winding, | ||
const bool | do_islands | ||
) |
Definition at line 724 of file editmesh_utils.c.
References BLI_buffer_declare_static, BLI_buffer_free, BLI_BUFFER_NOP, BLI_buffer_reinit_data, bm, BM_DEFAULT_NGON_STACK_SIZE, BM_ELEM_CD_GET_VOID_P, BM_elem_flag_test, BM_ELEM_HIDDEN, BM_elem_index_get, BM_ELEM_SELECT, BM_FACE, BM_FACES_OF_MESH, BM_ITER_ELEM, BM_ITER_ELEM_INDEX, BM_ITER_MESH, BM_ITER_MESH_INDEX, BM_LOOPS_OF_FACE, BM_mesh_elem_index_ensure(), bm_uv_assign_island(), bm_uv_edge_select_build_islands(), BM_VERT, BM_VERTS_OF_MESH, UvElementMap::buf, CD_MLOOPUV, compare_v2v2(), copy_v2_v2(), copy_vn_i(), cross_poly_v2(), CustomData_get_offset(), element, BMLoop::f, float(), INVALID_ISLAND, UvElement::island, UvElementMap::islandIndices, UvElement::l, l, BMesh::ldata, BMFace::len, UvElement::loop_of_poly_index, map, MEM_callocN, MEM_freeN, MEM_mallocN, UvElement::next, next, NULL, SCE_SELECT_EDGE, scene, ToolSettings::selectmode, UvElement::separate, STD_UV_CONNECT_LIMIT, Scene::toolsettings, UvElementMap::totalIslands, UvElementMap::totalUVs, BMesh::totface, BMesh::totvert, MLoopUV::uv, ToolSettings::uv_flag, UV_SELECT_EDGE, ToolSettings::uv_selectmode, UV_SYNC_SELECTION, uvedit_uv_select_test(), BMLoop::v, v, and UvElementMap::vert.
void BM_uv_element_map_free | ( | UvElementMap * | element_map | ) |
Definition at line 1025 of file editmesh_utils.c.
References UvElementMap::buf, UvElementMap::islandIndices, MEM_freeN, and UvElementMap::vert.
Referenced by createTransUVs(), state_delete(), uv_isolate_selected_islands(), uv_sculpt_stroke_exit(), and uvedit_uv_straighten().
Definition at line 591 of file editmesh_utils.c.
References v, and UvVertMap::vert.
Referenced by uv_select_flush_from_tag_sticky_loc_internal(), and uv_select_linked_multi().
Return a new UvVertMap from the edit-mesh.
Definition at line 453 of file editmesh_utils.c.
References Freestyle::a, BKE_mesh_uv_vert_map_free(), BLI_buffer_declare_static, BLI_buffer_free, BLI_BUFFER_NOP, BLI_buffer_reinit_data, bm, BM_DEFAULT_NGON_STACK_SIZE, BM_ELEM_CD_GET_VOID_P, BM_elem_flag_test, BM_elem_index_get, BM_ELEM_SELECT, BM_FACE, BM_face_at_index(), BM_FACES_OF_MESH, BM_iter_at_index(), BM_ITER_ELEM_INDEX, BM_ITER_MESH, BM_ITER_MESH_INDEX, BM_LOOPS_OF_FACE, BM_mesh_elem_index_ensure(), BM_VERT, BM_VERTS_OF_MESH, UvVertMap::buf, CD_MLOOPUV, compare_v2v2(), copy_v2_v2(), cross_poly_v2(), CustomData_get_offset(), float(), l, BMesh::ldata, BMFace::len, UvMapVert::loop_of_poly_index, MEM_callocN, MEM_freeN, UvMapVert::next, next, NULL, UvMapVert::poly_index, UvMapVert::separate, STD_UV_CONNECT_LIMIT, BMesh::totface, BMesh::totvert, MLoopUV::uv, BMLoop::v, v, and UvVertMap::vert.
Referenced by uv_select_flush_from_loop_edge_flag(), uv_select_flush_from_tag_face(), uv_select_flush_from_tag_loop(), and uv_select_linked_multi().
Definition at line 1012 of file editmesh_utils.c.
References UvVertMap::buf, MEM_freeN, and UvVertMap::vert.
Referenced by uv_select_flush_from_loop_edge_flag(), uv_select_flush_from_tag_face(), uv_select_flush_from_tag_loop(), and uv_select_linked_multi().
bool BMBVH_EdgeVisible | ( | struct BMBVHTree * | tree, |
BMEdge * | e, | ||
struct Depsgraph * | depsgraph, | ||
ARegion * | region, | ||
View3D * | v3d, | ||
Object * | obedit | ||
) |
Definition at line 1700 of file editmesh_utils.c.
References add_v3_v3v3(), BMVert::co, copy_v3_v3(), depsgraph, e, ED_view3d_win_to_segment_clipped(), edge_ray_cast(), blender::robust_pred::epsilon, invert_m4_m4(), mid_v3_v3v3(), mul_m4_v3(), normalize_v3(), normalize_v3_length(), NULL, Object::obmat, scale_point(), sub_v3_v3v3(), tree, ARegion::winx, and ARegion::winy.
Referenced by calcEdgeSlide_mval_range().
Definition at line 1093 of file editmesh_utils.c.
References NULL.
Referenced by EDBM_verts_mirror_cache_begin_ex().
void EDBM_deselect_flush | ( | BMEditMesh * | em | ) |
Definition at line 376 of file editmesh_utils.c.
References BMEditMesh::bm, BM_mesh_deselect_flush(), BMEditMesh::selectmode, and BMesh::selectmode.
Referenced by ED_uvedit_select_sync_flush(), edbm_select_random_exec(), uv_mouse_select_loop_generic_multi(), uv_select_linked_multi(), and vgroup_select_verts().
BMElem* EDBM_elem_from_index_any | ( | BMEditMesh * | em, |
uint | index | ||
) |
Definition at line 1614 of file editmesh_utils.c.
References BMEditMesh::bm, bm, BM_edge_at_index_find_or_table(), BM_face_at_index_find_or_table(), BM_vert_at_index_find_or_table(), NULL, BMesh::totedge, and BMesh::totvert.
Referenced by EDBM_elem_from_index_any_multi(), and edbm_shortest_path_pick_exec().
BMElem* EDBM_elem_from_index_any_multi | ( | ViewLayer * | view_layer, |
uint | object_index, | ||
uint | elem_index, | ||
Object ** | r_obedit | ||
) |
Definition at line 1654 of file editmesh_utils.c.
References BKE_editmesh_from_object(), BKE_view_layer_array_from_bases_in_edit_mode, EDBM_elem_from_index_any(), MEM_freeN, and NULL.
Referenced by edbm_select_linked_pick_exec().
BMElem* EDBM_elem_from_selectmode | ( | BMEditMesh * | em, |
BMVert * | eve, | ||
BMEdge * | eed, | ||
BMFace * | efa | ||
) |
Definition at line 1574 of file editmesh_utils.c.
References NULL, SCE_SELECT_EDGE, SCE_SELECT_FACE, SCE_SELECT_VERTEX, and BMEditMesh::selectmode.
Referenced by edbm_select_linked_pick_invoke().
int EDBM_elem_to_index_any | ( | struct BMEditMesh * | em, |
struct BMElem * | ele | ||
) |
Used when we want to store a single index for any vert/edge/face.
Intended for use with operators.
Definition at line 1591 of file editmesh_utils.c.
References BLI_assert, BMEditMesh::bm, bm, BM_EDGE, BM_elem_index_get, BM_FACE, BM_VERT, BMesh::elem_index_dirty, BMElem::head, BMHeader::htype, BMesh::totedge, and BMesh::totvert.
Referenced by EDBM_elem_to_index_any_multi(), and edbm_shortest_path_pick_invoke().
int EDBM_elem_to_index_any_multi | ( | ViewLayer * | view_layer, |
BMEditMesh * | em, | ||
BMElem * | ele, | ||
int * | r_object_index | ||
) |
Definition at line 1633 of file editmesh_utils.c.
References BKE_editmesh_from_object(), BKE_view_layer_array_from_bases_in_edit_mode, EDBM_elem_to_index_any(), MEM_freeN, NULL, and Base::object.
Referenced by edbm_select_linked_pick_invoke().
void EDBM_flag_disable_all | ( | BMEditMesh * | em, |
const char | hflag | ||
) |
Definition at line 437 of file editmesh_utils.c.
References BMEditMesh::bm, BM_EDGE, BM_FACE, BM_mesh_elem_hflag_disable_all(), and BM_VERT.
Referenced by do_lasso_select_mesh(), do_mesh_box_select(), edbm_bevel_calc(), edbm_bridge_edge_loops_for_single_editmesh(), edbm_delete_exec(), edbm_delete_loose_exec(), edbm_duplicate_exec(), edbm_extrude_discrete_faces(), edbm_extrude_edges_indiv(), edbm_extrude_ex(), edbm_flag_disable_all_multi(), edbm_inset_calc(), edbm_loop_to_region_exec(), edbm_merge_exec(), EDBM_mesh_deselect_all_multi_ex(), EDBM_mesh_reveal(), edbm_poke_face_exec(), edbm_polybuild_delete_at_cursor_invoke(), edbm_polybuild_dissolve_at_cursor_invoke(), edbm_region_to_loop_exec(), edbm_screw_exec(), edbm_select_all_exec(), edbm_select_face_by_sides_exec(), edbm_select_loose_exec(), EDBM_select_mirrored(), edbm_select_non_manifold_exec(), EDBM_select_pick(), EDBM_select_toggle_all(), edbm_select_ungrouped_exec(), edbm_spin_exec(), edgering_select(), knife_make_cuts(), mesh_bisect_exec(), mesh_circle_select(), mesh_symmetrize_exec(), mouse_mesh_loop(), mouse_mesh_loop_edge(), mouse_mesh_loop_edge_ring(), mouse_mesh_loop_face(), and uv_select_all_perform().
void EDBM_flag_enable_all | ( | BMEditMesh * | em, |
const char | hflag | ||
) |
Definition at line 442 of file editmesh_utils.c.
References BMEditMesh::bm, BM_EDGE, BM_FACE, BM_mesh_elem_hflag_enable_all(), and BM_VERT.
Referenced by edbm_select_all_exec(), EDBM_select_toggle_all(), and uv_select_all_perform().
void EDBM_mesh_clear | ( | BMEditMesh * | em | ) |
Definition at line 318 of file editmesh_utils.c.
References BMEditMesh::bm, BM_mesh_clear(), BMEditMesh::looptris, MEM_SAFE_FREE, and BMEditMesh::tottri.
void EDBM_mesh_free_data | ( | struct BMEditMesh * | em | ) |
Should only be called on the active edit-mesh, otherwise call BKE_editmesh_free_data.
Definition at line 333 of file editmesh_utils.c.
References BKE_editmesh_free_data(), ED_mesh_mirror_spatial_table_end(), ED_mesh_mirror_topo_table_end(), and NULL.
Referenced by ED_object_editmode_load_free_ex(), EDBM_mesh_make(), and undomesh_to_editmesh().
bool EDBM_mesh_hide | ( | struct BMEditMesh * | em, |
bool | swap | ||
) |
Swap is 0 or 1, if 1 it hides not selected.
Definition at line 1345 of file editmesh_utils.c.
References BMEditMesh::bm, BM_EDGES_OF_MESH, BM_elem_flag_test, BM_ELEM_HIDDEN, BM_elem_hide_set, BM_ELEM_SELECT, BM_FACES_OF_MESH, BM_ITER_MESH, BM_VERTS_OF_MESH, EDBM_selectmode_flush(), SCE_SELECT_EDGE, SCE_SELECT_VERTEX, BMEditMesh::selectmode, and swap().
Referenced by edbm_hide_exec(), and uv_hide_exec().
Definition at line 328 of file editmesh_utils.c.
References EDBM_mesh_load_ex().
Referenced by object_hook_index_array(), and vertex_parent_set_exec().
ob->data
, see: T46738, T46913. This ensures BKE_object_free_derived_caches runs on all objects that use this mesh. Definition at line 298 of file editmesh_utils.c.
References BLI_listbase_is_empty(), Key::block, BMEditMesh::bm, bm, BM_mesh_bm_to_me(), Object::data, Mesh::edit_mesh, Mesh::key, BMesh::shapenr, Object::shapenr, and UNLIKELY.
Referenced by ED_object_editmode_load_free_ex(), and EDBM_mesh_load().
Definition at line 269 of file editmesh_utils.c.
References Object::actcol, BKE_editmesh_create(), BKE_mesh_to_bmesh(), BMEditMesh::bm, bm, Object::data, EDBM_mesh_free_data(), EDBM_selectmode_flush(), Mesh::edit_mesh, BMEditMesh::mat_nr, MEM_freeN, BMEditMesh::selectmode, and BMesh::selectmode.
Referenced by ED_object_editmode_enter_ex(), object_hook_index_array(), and vertex_parent_set_exec().
void EDBM_mesh_normals_update | ( | BMEditMesh * | em | ) |
Definition at line 1462 of file editmesh_utils.c.
References EDBM_mesh_normals_update_ex().
Referenced by edbm_bridge_edge_loops_for_single_editmesh(), EDBM_mesh_reveal(), EDBM_update(), and object_origin_set_exec().
void EDBM_mesh_normals_update_ex | ( | BMEditMesh * | em, |
const struct BMeshNormalsUpdate_Params * | params | ||
) |
Definition at line 1457 of file editmesh_utils.c.
References BMEditMesh::bm, BM_mesh_normals_update_ex(), and params.
Referenced by EDBM_mesh_normals_update().
bool EDBM_mesh_reveal | ( | BMEditMesh * | em, |
bool | select | ||
) |
Definition at line 1387 of file editmesh_utils.c.
References BMEditMesh::bm, BM_EDGES_OF_MESH, BM_elem_flag_disable, BM_elem_flag_enable, BM_elem_flag_test, BM_ELEM_HIDDEN, BM_elem_select_set(), BM_ELEM_TAG, BM_FACES_OF_MESH, BM_ITER_MESH, BM_VERTS_OF_MESH, EDBM_flag_disable_all(), EDBM_mesh_normals_update(), EDBM_selectmode_flush(), SCE_SELECT_EDGE, SCE_SELECT_FACE, SCE_SELECT_VERTEX, select(), and BMEditMesh::selectmode.
Referenced by edbm_reveal_exec(), and uv_reveal_exec().
bool EDBM_op_call_and_selectf | ( | BMEditMesh * | em, |
wmOperator * | op, | ||
const char * | select_slot_out, | ||
const bool | select_extend, | ||
const char * | fmt, | ||
... | |||
) |
Definition at line 204 of file editmesh_utils.c.
References BKE_reportf(), BLI_assert, BMEditMesh::bm, bm, BM_ALL_NOLOOP, BM_EDGE, BM_ELEM_SELECT, BM_FACE, BM_mesh_elem_hflag_disable_all(), BM_VERT, BMO_FLAG_DEFAULTS, BMO_op_exec(), BMO_op_vinitf(), BMO_slot_buffer_hflag_enable(), BMO_slot_get(), EDBM_op_finish(), eBMOpSlotSubType_Union::elem, wmOperator::reports, RPT_ERROR, BMOpSlot::slot_subtype, and BMOperator::slots_out.
Referenced by add_primitive_circle_exec(), add_primitive_cone_exec(), add_primitive_cube_exec(), add_primitive_cube_gizmo_exec(), add_primitive_cylinder_exec(), add_primitive_grid_exec(), add_primitive_icosphere_exec(), add_primitive_monkey_exec(), add_primitive_plane_exec(), add_primitive_uvsphere_exec(), edbm_beautify_fill_exec(), edbm_dissolve_faces_exec(), edbm_dissolve_limited_exec(), edbm_edge_split_selected_edges(), edbm_fill_holes_exec(), edbm_tris_convert_to_quads_exec(), edbm_vert_connect_concave_exec(), and edbm_vert_connect_nonplaner_exec().
bool EDBM_op_call_silentf | ( | struct BMEditMesh * | em, |
const char * | fmt, | ||
... | |||
) |
Same as above, but doesn't report errors.
Definition at line 242 of file editmesh_utils.c.
References BMEditMesh::bm, bm, BMO_FLAG_DEFAULTS, BMO_op_exec(), BMO_op_vinitf(), EDBM_op_finish(), and NULL.
bool EDBM_op_callf | ( | struct BMEditMesh * | em, |
struct wmOperator * | op, | ||
const char * | fmt, | ||
... | |||
) |
Calls a bmesh op, reporting errors to the user, etc.
Definition at line 184 of file editmesh_utils.c.
References BKE_reportf(), BMEditMesh::bm, bm, BMO_FLAG_DEFAULTS, BMO_op_exec(), BMO_op_vinitf(), EDBM_op_finish(), wmOperator::reports, and RPT_ERROR.
Referenced by edbm_collapse_edge_exec(), edbm_delete_edgeloop_exec(), edbm_delete_exec(), edbm_dissolve_degenerate_exec(), edbm_dissolve_edges_exec(), edbm_dissolve_verts_exec(), edbm_do_smooth_laplacian_vertex_exec(), edbm_do_smooth_vertex_exec(), edbm_dupli_extrude_cursor_invoke(), edbm_edge_split_selected_verts(), edbm_face_make_planar_exec(), edbm_flip_normals_face_winding(), edbm_merge_exec(), edbm_normals_make_consistent_exec(), edbm_polybuild_delete_at_cursor_invoke(), edbm_polybuild_dissolve_at_cursor_invoke(), edbm_remove_doubles_exec(), edbm_subdivide_edge_ring_exec(), geometry_extract_apply(), merge_firstlast(), and merge_target().
bool EDBM_op_finish | ( | struct BMEditMesh * | em, |
struct BMOperator * | bmop, | ||
struct wmOperator * | op, | ||
bool | do_report | ||
) |
Cleans up after a bmesh operator.
The return value:
Definition at line 122 of file editmesh_utils.c.
References BKE_report(), BLI_assert, BMEditMesh::bm, BMO_ERROR_CANCEL, BMO_ERROR_FATAL, BMO_error_pop(), BMO_ERROR_WARN, BMO_op_finish(), NULL, wmOperator::reports, RPT_ERROR, RPT_INFO, RPT_WARNING, BMesh::totedge, BMesh::totface, BMesh::totloop, BMesh::totvert, and type.
Referenced by edbm_add_edge_face_exec(), edbm_bevel_calc(), edbm_bridge_edge_loops_for_single_editmesh(), edbm_connect_vert_pair(), edbm_dupli_extrude_cursor_invoke(), edbm_duplicate_exec(), edbm_edge_rotate_selected_exec(), edbm_extrude_discrete_faces(), edbm_extrude_edges_indiv(), edbm_extrude_verts_indiv(), edbm_fill_exec(), edbm_fill_grid_exec(), edbm_inset_calc(), edbm_knife_cut_exec(), edbm_offset_edgeloop_exec(), EDBM_op_call_and_selectf(), EDBM_op_call_silentf(), EDBM_op_callf(), edbm_poke_face_exec(), edbm_quads_convert_to_tris_exec(), edbm_remove_doubles_exec(), edbm_reverse_colors_exec(), edbm_reverse_uvs_exec(), edbm_rotate_colors_exec(), edbm_rotate_uvs_exec(), edbm_screw_exec(), edbm_solidify_exec(), edbm_spin_exec(), edbm_split_exec(), edbm_unsubdivide_exec(), edbm_wireframe_exec(), mesh_bisect_exec(), and mesh_symmetrize_exec().
bool EDBM_op_init | ( | struct BMEditMesh * | em, |
struct BMOperator * | bmop, | ||
struct wmOperator * | op, | ||
const char * | fmt, | ||
... | |||
) |
These next two functions are the split version of EDBM_op_callf, so you can do stuff with a bmesh operator, after initializing it but before executing it.
execute the operator with BM_Exec_Op
Definition at line 104 of file editmesh_utils.c.
References BKE_reportf(), BMEditMesh::bm, bm, BMO_FLAG_DEFAULTS, BMO_op_vinitf(), wmOperator::reports, and RPT_ERROR.
Referenced by edbm_add_edge_face_exec(), edbm_bevel_calc(), edbm_bridge_edge_loops_for_single_editmesh(), edbm_connect_vert_pair(), edbm_dupli_extrude_cursor_invoke(), edbm_duplicate_exec(), edbm_edge_rotate_selected_exec(), edbm_extrude_discrete_faces(), edbm_extrude_edges_indiv(), edbm_extrude_verts_indiv(), edbm_fill_exec(), edbm_fill_grid_exec(), edbm_inset_calc(), edbm_knife_cut_exec(), edbm_offset_edgeloop_exec(), edbm_poke_face_exec(), edbm_quads_convert_to_tris_exec(), edbm_remove_doubles_exec(), edbm_reverse_colors_exec(), edbm_reverse_uvs_exec(), edbm_rotate_colors_exec(), edbm_rotate_uvs_exec(), edbm_screw_exec(), edbm_solidify_exec(), edbm_spin_exec(), edbm_split_exec(), edbm_unsubdivide_exec(), edbm_wireframe_exec(), mesh_bisect_exec(), and mesh_symmetrize_exec().
void EDBM_project_snap_verts | ( | bContext * | C, |
Depsgraph * | depsgraph, | ||
ARegion * | region, | ||
Object * | obedit, | ||
BMEditMesh * | em | ||
) |
Definition at line 1770 of file editmesh_utils.c.
References BMEditMesh::bm, BM_elem_flag_test, BM_ELEM_SELECT, BM_ITER_MESH, BM_VERTS_OF_MESH, C, BMVert::co, CTX_data_scene(), CTX_wm_view3d(), depsgraph, ED_transform_snap_object_context_create(), ED_transform_snap_object_context_destroy(), ED_transform_snap_object_project_view3d(), ED_view3d_init_mats_rv3d(), ED_view3d_project_float_object(), Object::imat, mul_v3_m4v3(), SnapObjectContext::mval, NULL, SnapObjectContext::region, ARegion::regiondata, SCE_SNAP_MODE_FACE_RAYCAST, SCE_SNAP_TARGET_NOT_ACTIVE, SNAP_GEOM_FINAL, V3D_PROJ_RET_OK, and V3D_PROJ_TEST_NOP.
Referenced by edbm_dupli_extrude_cursor_invoke().
Definition at line 90 of file editmesh_utils.c.
References backup, BM_mesh_data_free(), and MEM_freeN.
Referenced by edbm_bevel_exit(), edbm_bisect_exit(), edbm_connect_vert_pair(), and edbm_inset_exit().
void EDBM_redo_state_restore | ( | BMBackup * | backup, |
BMEditMesh * | em, | ||
bool | recalc_looptri | ||
) |
Definition at line 64 of file editmesh_utils.c.
References backup, BKE_editmesh_looptri_calc(), BMEditMesh::bm, BM_mesh_copy(), BM_mesh_data_free(), MEM_freeN, and NULL.
void EDBM_redo_state_restore_and_free | ( | BMBackup * | backup, |
BMEditMesh * | em, | ||
bool | recalc_looptri | ||
) |
Definition at line 79 of file editmesh_utils.c.
References backup, BKE_editmesh_looptri_calc(), BMEditMesh::bm, BM_mesh_data_free(), MEM_freeN, and NULL.
BMBackup EDBM_redo_state_store | ( | struct BMEditMesh * | em | ) |
Save a copy of the BMesh for restoring later.
Definition at line 57 of file editmesh_utils.c.
References backup, BMEditMesh::bm, and BM_mesh_copy().
Referenced by edbm_bevel_init(), edbm_connect_vert_pair(), edbm_inset_init(), and mesh_bisect_invoke().
void EDBM_select_flush | ( | BMEditMesh * | em | ) |
Definition at line 383 of file editmesh_utils.c.
References BMEditMesh::bm, BM_mesh_select_flush(), BMEditMesh::selectmode, and BMesh::selectmode.
Referenced by ED_uvedit_select_sync_flush(), edbm_dissolve_degenerate_exec(), edbm_edge_split_selected_edges(), edbm_edge_split_selected_verts(), EDBM_selectmode_set(), select_editbmesh_hook(), uv_mouse_select_loop_generic_multi(), and vgroup_select_verts().
void EDBM_select_less | ( | BMEditMesh * | em, |
const bool | use_face_step | ||
) |
Definition at line 412 of file editmesh_utils.c.
References BMEditMesh::bm, BM_ALL_NOLOOP, BM_ELEM_SELECT, BM_mesh_select_mode_clean(), BMO_FLAG_DEFAULTS, BMO_op_exec(), BMO_op_finish(), BMO_op_initf(), BMO_slot_buffer_hflag_disable(), EDBM_selectmode_flush(), SCE_SELECT_FACE, BMEditMesh::selectmode, and BMOperator::slots_out.
Referenced by edbm_select_less_exec(), and uv_select_more_less().
void EDBM_select_more | ( | struct BMEditMesh * | em, |
bool | use_face_step | ||
) |
flushes based on the current select mode. If in vertex select mode, verts select/deselect edges and faces, if in edge select mode, edges select/deselect faces and vertices, and in face select mode faces select/deselect edges and vertices.
Definition at line 390 of file editmesh_utils.c.
References BMEditMesh::bm, BM_ALL_NOLOOP, BM_ELEM_SELECT, BMO_FLAG_DEFAULTS, BMO_op_exec(), BMO_op_finish(), BMO_op_initf(), BMO_slot_buffer_hflag_enable(), EDBM_selectmode_flush(), SCE_SELECT_FACE, BMEditMesh::selectmode, and BMOperator::slots_out.
Referenced by edbm_select_more_exec(), and uv_select_more_less().
void EDBM_selectmode_flush | ( | BMEditMesh * | em | ) |
Definition at line 371 of file editmesh_utils.c.
References EDBM_selectmode_flush_ex(), and BMEditMesh::selectmode.
Referenced by deselect_nth_active(), do_lasso_select_mesh(), do_mesh_box_select(), edbm_bevel_exit(), edbm_connect_vert_pair(), edbm_edge_rotate_selected_exec(), edbm_intersect_select(), edbm_loop_multiselect_exec(), edbm_loop_to_region_exec(), EDBM_mesh_hide(), EDBM_mesh_make(), EDBM_mesh_reveal(), edbm_quads_convert_to_tris_exec(), edbm_remove_doubles_exec(), edbm_select_all_exec(), edbm_select_axis_exec(), edbm_select_face_by_sides_exec(), EDBM_select_less(), edbm_select_linked_exec(), edbm_select_linked_pick_ex(), edbm_select_loose_exec(), edbm_select_mirror_exec(), EDBM_select_more(), edbm_select_non_manifold_exec(), EDBM_select_pick(), edbm_select_random_exec(), edbm_select_sharp_edges_exec(), edbm_select_ungrouped_exec(), EDBM_selectmode_set(), edbm_unsubdivide_exec(), edbm_vert_connect_path_exec(), knifetool_finish_single_post(), mesh_bisect_exec(), mesh_symmetrize_exec(), mouse_mesh_loop(), mouse_mesh_shortest_path_edge(), mouse_mesh_shortest_path_face(), mouse_mesh_shortest_path_vert(), ringsel_finish(), similar_edge_select_exec(), similar_face_select_exec(), similar_vert_select_exec(), uv_mouse_select_multi(), uv_select_all_perform(), and uv_select_linked_multi().
void EDBM_selectmode_flush_ex | ( | BMEditMesh * | em, |
const short | selectmode | ||
) |
Definition at line 366 of file editmesh_utils.c.
References BMEditMesh::bm, BM_mesh_select_mode_flush_ex(), and BM_SELECT_LEN_FLUSH_RECALC_ALL.
Referenced by add_primitive_cube_gizmo_exec(), edbm_decimate_exec(), edbm_delete_edgeloop_exec(), EDBM_selectmode_flush(), edbm_unsubdivide_exec(), make_prim_finish(), ringsel_finish(), special_aftertrans_update__mesh(), and walker_deselect_nth().
Definition at line 350 of file editmesh_utils.c.
References BKE_editmesh_from_object(), C, CTX_data_edit_object(), CTX_data_scene(), NC_SCENE, ND_TOOLSETTINGS, scene, BMEditMesh::selectmode, ToolSettings::selectmode, Scene::toolsettings, and WM_event_add_notifier().
Referenced by edbm_region_to_loop_exec().
void EDBM_stats_update | ( | BMEditMesh * | em | ) |
Definition at line 1470 of file editmesh_utils.c.
References BMEditMesh::bm, BM_EDGES_OF_MESH, BM_elem_flag_test, BM_ELEM_SELECT, BM_FACES_OF_MESH, BM_iter_new, BM_VERTS_OF_MESH, NULL, BMesh::totedgesel, BMesh::totfacesel, and BMesh::totvertsel.
void EDBM_update | ( | struct Mesh * | me, |
const struct EDBMUpdate_Params * | params | ||
) |
So many tools call these that we better make it a generic function.
Definition at line 1499 of file editmesh_utils.c.
References BKE_editmesh_looptri_and_normals_calc(), BKE_editmesh_looptri_calc(), BLI_assert, BMEditMesh::bm, BM_elem_flag_test, BM_ELEM_SELECT, BM_lnorspace_invalidate(), BM_mesh_elem_table_check(), BM_SPACEARR_BMO_SET, DEG_id_tag_update(), EDBM_mesh_normals_update(), Mesh::edit_mesh, BMEditSelection::ele, ListBase::first, Mesh::id, ID_RECALC_GEOMETRY, mesh, NC_GEOM, ND_DATA, BMEditSelection::next, params, BMesh::selected, BMesh::spacearr_dirty, and WM_main_add_notifier().
Referenced by add_primitive_cube_gizmo_exec(), ED_object_data_xform_tag_update(), edbm_add_edge_face_exec(), EDBM_automerge(), EDBM_automerge_and_split(), edbm_average_normals_exec(), edbm_beautify_fill_exec(), edbm_bevel_calc(), edbm_bevel_cancel(), edbm_blend_from_shape_exec(), edbm_bridge_edge_loops_for_single_editmesh(), edbm_collapse_edge_exec(), edbm_connect_vert_pair(), edbm_decimate_exec(), edbm_delete_edgeloop_exec(), edbm_delete_exec(), edbm_delete_loose_exec(), edbm_dissolve_degenerate_exec(), edbm_dissolve_edges_exec(), edbm_dissolve_faces_exec(), edbm_dissolve_limited_exec(), edbm_dissolve_verts_exec(), edbm_do_smooth_laplacian_vertex_exec(), edbm_do_smooth_vertex_exec(), edbm_dupli_extrude_cursor_invoke(), edbm_duplicate_exec(), edbm_edge_rotate_selected_exec(), edbm_edge_split_selected_edges(), edbm_edge_split_selected_verts(), edbm_extrude_context_exec(), edbm_extrude_edges_exec(), edbm_extrude_faces_exec(), edbm_extrude_region_exec(), edbm_extrude_repeat_exec(), edbm_extrude_verts_exec(), edbm_face_make_planar_exec(), edbm_face_split_by_edges_exec(), edbm_faces_shade_flat_exec(), edbm_faces_shade_smooth_exec(), edbm_fill_exec(), edbm_fill_grid_exec(), edbm_fill_holes_exec(), edbm_flip_normals_custom_loop_normals(), edbm_flip_normals_face_winding(), edbm_hide_exec(), edbm_inset_calc(), edbm_inset_cancel(), edbm_intersect_select(), edbm_knife_cut_exec(), edbm_mark_seam_exec(), edbm_mark_sharp_exec(), edbm_merge_exec(), edbm_mod_weighted_strength_exec(), edbm_normals_make_consistent_exec(), edbm_normals_tools_exec(), edbm_offset_edgeloop_exec(), edbm_point_normals_exec(), edbm_point_normals_modal(), edbm_poke_face_exec(), edbm_polybuild_delete_at_cursor_invoke(), edbm_polybuild_dissolve_at_cursor_invoke(), edbm_polybuild_face_at_cursor_invoke(), edbm_polybuild_split_at_cursor_invoke(), edbm_polybuild_transform_at_cursor_invoke(), edbm_quads_convert_to_tris_exec(), edbm_remove_doubles_exec(), edbm_reveal_exec(), edbm_reverse_colors_exec(), edbm_reverse_uvs_exec(), edbm_rip_edge_invoke(), edbm_rip_invoke(), edbm_rotate_colors_exec(), edbm_rotate_uvs_exec(), edbm_screw_exec(), edbm_select_nth_exec(), edbm_separate_exec(), edbm_set_normals_from_faces_exec(), edbm_shape_propagate_to_all_exec(), edbm_smooth_normals_exec(), edbm_solidify_exec(), edbm_spin_exec(), edbm_split_exec(), edbm_subdivide_edge_ring_exec(), edbm_subdivide_exec(), edbm_tris_convert_to_quads_exec(), edbm_unsubdivide_exec(), EDBM_update_extern(), edbm_vert_connect_concave_exec(), edbm_vert_connect_nonplaner_exec(), edbm_vert_connect_path_exec(), edbm_wireframe_exec(), knifetool_finish_single_post(), make_prim_finish(), mesh_bisect_exec(), mesh_symmetrize_exec(), mesh_symmetry_snap_exec(), mouse_mesh_shortest_path_edge(), mouse_mesh_shortest_path_face(), mouse_mesh_shortest_path_vert(), normals_split_merge(), ringsel_finish(), similar_edge_select_exec(), similar_face_select_exec(), similar_vert_select_exec(), sort_bmelem_flag(), uv_hide_exec(), and uv_reveal_exec().
Bad level call from Python API.
Definition at line 1543 of file editmesh_utils.c.
References EDBM_update().
BMFace* EDBM_uv_active_face_get | ( | struct BMEditMesh * | em, |
bool | sloppy, | ||
bool | selected | ||
) |
last_sel, use em->act_face otherwise get the last selected face in the editselections at the moment, last_sel is mainly useful for making sure the space image doesn't flicker.
Definition at line 1058 of file editmesh_utils.c.
References BMEditMesh::bm, BM_mesh_active_face_get(), EDBM_uv_check(), and NULL.
Referenced by mesh_render_data_create().
bool EDBM_uv_check | ( | struct BMEditMesh * | em | ) |
Can we edit UV's for this mesh?
Definition at line 1075 of file editmesh_utils.c.
References BMEditMesh::bm, CD_MLOOPUV, CustomData_has_layer(), BMesh::ldata, and BMesh::totface.
Referenced by ED_space_image_show_uvedit(), ED_uvedit_test(), EDBM_uv_active_face_get(), and uv_seams_from_islands_exec().
bool EDBM_vert_color_check | ( | BMEditMesh * | em | ) |
Definition at line 1081 of file editmesh_utils.c.
References BMEditMesh::bm, CD_PROP_BYTE_COLOR, CustomData_has_layer(), BMesh::ldata, and BMesh::totface.
void EDBM_verts_mirror_apply | ( | BMEditMesh * | em, |
const int | sel_from, | ||
const int | sel_to | ||
) |
Definition at line 1319 of file editmesh_utils.c.
References BLI_assert, BMEditMesh::bm, BM_elem_flag_test, BM_ELEM_SELECT, BM_ITER_MESH, BM_VERT, BM_VERTS_OF_MESH, BMVert::co, copy_v3_v3(), EDBM_verts_mirror_get(), BMesh::elem_table_dirty, NULL, v, and BMesh::vtable.
Referenced by edbm_do_smooth_laplacian_vertex_exec(), and edbm_do_smooth_vertex_exec().
void EDBM_verts_mirror_cache_begin | ( | BMEditMesh * | em, |
const int | axis, | ||
const bool | use_self, | ||
const bool | use_select, | ||
const bool | respecthide, | ||
const bool | use_topology | ||
) |
Definition at line 1235 of file editmesh_utils.c.
References BM_SEARCH_MAXDIST_MIRR, EDBM_verts_mirror_cache_begin_ex(), and NULL.
Referenced by ED_vgroup_mirror(), edbm_do_smooth_laplacian_vertex_exec(), edbm_do_smooth_vertex_exec(), and EDBM_select_mirrored().
void EDBM_verts_mirror_cache_begin_ex | ( | struct BMEditMesh * | em, |
int | axis, | ||
bool | use_self, | ||
bool | use_select, | ||
bool | respecthide, | ||
bool | use_topology, | ||
float | maxdist, | ||
int * | r_index | ||
) |
em | Edit-mesh used for generating mirror data. |
use_self | Allow a vertex to point to itself (middle verts). |
use_select | Restrict to selected verts. |
respecthide | Skip hidden vertices. |
use_topology | Use topology mirror. |
maxdist | Distance for close point test. |
r_index | Optional array to write into, as an alternative to a custom-data layer (length of total verts). |
Definition at line 1119 of file editmesh_utils.c.
References BLI_assert, BMEditMesh::bm, bm, BM_CD_LAYER_ID, BM_data_layer_add_named(), BM_elem_flag_test, BM_ELEM_HIDDEN, BM_elem_index_get, BM_ELEM_SELECT, BM_ITER_MESH_INDEX, BM_mesh_elem_index_ensure(), BM_mesh_elem_table_ensure(), BM_VERT, BM_vert_at_index(), BM_VERTS_OF_MESH, cache_mirr_intptr_as_bmvert(), CD_FLAG_TEMPORARY, CD_PROP_INT32, BMVert::co, copy_v3_v3(), CustomData_get_layer_index(), CustomData_get_n_offset(), CustomData_get_named_layer_index(), ED_mesh_mirrtopo_free(), ED_mesh_mirrtopo_init(), CustomDataLayer::flag, MirrTopoStore_t::index_lookup, CustomData::layers, len_squared_v3v3(), mesh_topo_store, BMEditMesh::mirror_cdlayer, NULL, square_f(), BMesh::totvert, tree, v, BMesh::vdata, and VERT_INTPTR.
Referenced by EDBM_verts_mirror_cache_begin(), mesh_symmetry_snap_exec(), and transform_convert_mesh_mirrordata_calc().
void EDBM_verts_mirror_cache_clear | ( | BMEditMesh * | em, |
BMVert * | v | ||
) |
Definition at line 1303 of file editmesh_utils.c.
References BLI_assert, BMEditMesh::bm, CustomData_bmesh_get_layer_n(), BMHeader::data, BMVert::head, BMEditMesh::mirror_cdlayer, v, and BMesh::vdata.
void EDBM_verts_mirror_cache_end | ( | BMEditMesh * | em | ) |
Definition at line 1314 of file editmesh_utils.c.
References BMEditMesh::mirror_cdlayer.
Referenced by ED_vgroup_mirror(), edbm_do_smooth_laplacian_vertex_exec(), edbm_do_smooth_vertex_exec(), and EDBM_select_mirrored().
BMVert* EDBM_verts_mirror_get | ( | BMEditMesh * | em, |
BMVert * | v | ||
) |
Definition at line 1253 of file editmesh_utils.c.
References BLI_assert, BMEditMesh::bm, bm, CustomData_bmesh_get_layer_n(), BMHeader::data, BMVert::head, BMEditMesh::mirror_cdlayer, NULL, BMesh::totvert, v, BMesh::vdata, and BMesh::vtable.
Referenced by ED_vgroup_mirror(), EDBM_select_mirrored(), EDBM_verts_mirror_apply(), EDBM_verts_mirror_get_edge(), and EDBM_verts_mirror_get_face().
BMEdge* EDBM_verts_mirror_get_edge | ( | BMEditMesh * | em, |
BMEdge * | e | ||
) |
Definition at line 1273 of file editmesh_utils.c.
References BM_edge_exists(), e, EDBM_verts_mirror_get(), LIKELY, and NULL.
Referenced by EDBM_select_mirrored().
BMFace* EDBM_verts_mirror_get_face | ( | BMEditMesh * | em, |
BMFace * | f | ||
) |
Definition at line 1286 of file editmesh_utils.c.
References BLI_array_alloca, BM_face_exists(), BM_FACE_FIRST_LOOP, EDBM_verts_mirror_get(), BMFace::len, BMLoop::next, NULL, and BMLoop::v.
Referenced by EDBM_select_mirrored().
Poll call for mesh operators requiring a view3d context.
Definition at line 1559 of file editmesh_utils.c.
References C, ED_operator_editmesh(), and ED_operator_view3d_active().
Referenced by MESH_OT_knife_cut(), MESH_OT_polybuild_delete_at_cursor(), MESH_OT_polybuild_dissolve_at_cursor(), MESH_OT_polybuild_face_at_cursor(), MESH_OT_polybuild_split_at_cursor(), MESH_OT_polybuild_transform_at_cursor(), MESH_OT_rip(), and MESH_OT_rip_edge().
|
static |
Definition at line 1681 of file editmesh_utils.c.
References BKE_bmbvh_ray_cast(), BM_edge_in_face(), e, NULL, and tree.
Referenced by BMBVH_EdgeVisible().
Definition at line 1693 of file editmesh_utils.c.
References add_v3_v3(), mul_v3_fl(), and sub_v3_v3().
Referenced by BMBVH_EdgeVisible().