Blender  V2.93
Macros
editmesh_utils.c File Reference
#include "MEM_guardedalloc.h"
#include "DNA_key_types.h"
#include "DNA_mesh_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_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))
 

Functions

Redo API
BMBackup EDBM_redo_state_store (BMEditMesh *em)
 
void EDBM_redo_state_restore (BMBackup backup, BMEditMesh *em, int recalctess)
 
void EDBM_redo_state_free (BMBackup *backup, BMEditMesh *em, int recalctess)
 
BMesh Operator (BMO) API Wrapper
bool EDBM_op_init (BMEditMesh *em, BMOperator *bmop, wmOperator *op, const char *fmt,...)
 
bool EDBM_op_finish (BMEditMesh *em, BMOperator *bmop, wmOperator *op, const bool do_report)
 
bool EDBM_op_callf (BMEditMesh *em, wmOperator *op, const char *fmt,...)
 
bool EDBM_op_call_and_selectf (BMEditMesh *em, wmOperator *op, const char *select_slot_out, const bool select_extend, const char *fmt,...)
 
bool EDBM_op_call_silentf (BMEditMesh *em, const char *fmt,...)
 
Edit BMesh API

Make/Clear/Free functions.

void EDBM_mesh_make (Object *ob, const int select_mode, const bool add_key_index)
 
void EDBM_mesh_load_ex (Main *bmain, Object *ob, bool free_data)
 
void EDBM_mesh_clear (BMEditMesh *em)
 
void EDBM_mesh_load (Main *bmain, Object *ob)
 
void EDBM_mesh_free (BMEditMesh *em)
 
Selection Utilities
void EDBM_selectmode_to_scene (bContext *C)
 
void EDBM_selectmode_flush_ex (BMEditMesh *em, const short selectmode)
 
void EDBM_selectmode_flush (BMEditMesh *em)
 
void EDBM_deselect_flush (BMEditMesh *em)
 
void EDBM_select_flush (BMEditMesh *em)
 
void EDBM_select_more (BMEditMesh *em, const bool use_face_step)
 
void EDBM_select_less (BMEditMesh *em, const bool use_face_step)
 
void EDBM_flag_disable_all (BMEditMesh *em, const char hflag)
 
void EDBM_flag_enable_all (BMEditMesh *em, const char hflag)
 
UV Vertex Map API
UvVertMapBM_uv_vert_map_create (BMesh *bm, const bool use_select, const bool use_winding)
 
UvMapVertBM_uv_vert_map_at_index (UvVertMap *vmap, uint v)
 
UvElementMapBM_uv_element_map_create (BMesh *bm, const Scene *scene, const bool face_selected, 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)
 
UvElementBM_uv_element_get (UvElementMap *map, BMFace *efa, BMLoop *l)
 
Data Layer Checks
BMFaceEDBM_uv_active_face_get (BMEditMesh *em, const bool sloppy, const bool selected)
 
bool EDBM_uv_check (BMEditMesh *em)
 
bool EDBM_vert_color_check (BMEditMesh *em)
 
Hide/Reveal API
bool EDBM_mesh_hide (BMEditMesh *em, bool swap)
 
bool EDBM_mesh_reveal (BMEditMesh *em, bool select)
 
Update API
void EDBM_mesh_normals_update (BMEditMesh *em)
 
void EDBM_stats_update (BMEditMesh *em)
 
void EDBM_update_generic (Mesh *mesh, const bool do_tessellation, const bool is_destructive)
 
Operator Helpers
bool EDBM_view3d_poll (bContext *C)
 
BMesh Element API
BMElemEDBM_elem_from_selectmode (BMEditMesh *em, BMVert *eve, BMEdge *eed, BMFace *efa)
 
int EDBM_elem_to_index_any (BMEditMesh *em, BMElem *ele)
 
BMElemEDBM_elem_from_index_any (BMEditMesh *em, int index)
 
int EDBM_elem_to_index_any_multi (ViewLayer *view_layer, BMEditMesh *em, BMElem *ele, int *r_object_index)
 
BMElemEDBM_elem_from_index_any_multi (ViewLayer *view_layer, int object_index, int elem_index, Object **r_obedit)
 
BMesh BVH API
static BMFaceedge_ray_cast (struct BMBVHTree *tree, const float co[3], const float dir[3], float *r_hitout, BMEdge *e)
 
static void scale_point (float c1[3], const float p[3], const float s)
 
bool BMBVH_EdgeVisible (struct BMBVHTree *tree, BMEdge *e, struct Depsgraph *depsgraph, ARegion *region, View3D *v3d, Object *obedit)
 
BMesh Vertex Projection API
void EDBM_project_snap_verts (bContext *C, Depsgraph *depsgraph, ARegion *region, Object *obedit, BMEditMesh *em)
 

Mirror Cache API

#define BM_SEARCH_MAXDIST_MIRR   0.00002f
 
#define BM_CD_LAYER_ID   "__mirror_index"
 
static BMVertcache_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)
 
BMVertEDBM_verts_mirror_get (BMEditMesh *em, BMVert *v)
 
BMEdgeEDBM_verts_mirror_get_edge (BMEditMesh *em, BMEdge *e)
 
BMFaceEDBM_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)
 

Macro Definition Documentation

◆ BM_CD_LAYER_ID

#define BM_CD_LAYER_ID   "__mirror_index"

Definition at line 1058 of file editmesh_utils.c.

◆ BM_SEARCH_MAXDIST_MIRR

#define BM_SEARCH_MAXDIST_MIRR   0.00002f

Mirror editing API, usage:

BM_ITER_MESH (v, &iter, em->bm, BM_VERTS_OF_MESH) {
v_mirror = EDBM_verts_mirror_get(em, v);
e_mirror = EDBM_verts_mirror_get_edge(em, e);
f_mirror = EDBM_verts_mirror_get_face(em, f);
}
struct BMFace * EDBM_verts_mirror_get_face(struct BMEditMesh *em, struct BMFace *f)
struct BMVert * EDBM_verts_mirror_get(struct BMEditMesh *em, struct BMVert *v)
void EDBM_verts_mirror_cache_end(struct BMEditMesh *em)
void EDBM_verts_mirror_cache_begin(struct BMEditMesh *em, const int axis, const bool use_self, const bool use_select, const bool respecthide, const bool use_topology)
struct BMEdge * EDBM_verts_mirror_get_edge(struct BMEditMesh *em, struct BMEdge *e)
#define BM_ITER_MESH(ele, iter, bm, itype)
@ BM_VERTS_OF_MESH
ATTR_WARN_UNUSED_RESULT const BMVert const BMEdge * e
ATTR_WARN_UNUSED_RESULT const BMVert * v

Definition at line 1057 of file editmesh_utils.c.

◆ VERT_INTPTR

#define VERT_INTPTR (   _v,
  _i 
)    (r_index ? &r_index[_i] : BM_ELEM_CD_GET_VOID_P(_v, cd_vmirr_offset))

Function Documentation

◆ BM_uv_element_get()

UvElement* BM_uv_element_get ( UvElementMap map,
BMFace efa,
BMLoop l 
)

◆ BM_uv_element_map_create()

UvElementMap* BM_uv_element_map_create ( BMesh bm,
const Scene scene,
const bool  face_selected,
const bool  uv_selected,
const bool  use_winding,
const bool  do_islands 
)

◆ BM_uv_element_map_free()

void BM_uv_element_map_free ( UvElementMap element_map)

◆ BM_uv_vert_map_at_index()

UvMapVert* BM_uv_vert_map_at_index ( UvVertMap vmap,
uint  v 
)

Definition at line 667 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().

◆ BM_uv_vert_map_create()

UvVertMap* BM_uv_vert_map_create ( BMesh bm,
const bool  use_select,
const bool  use_winding 
)

◆ BM_uv_vert_map_free()

void BM_uv_vert_map_free ( UvVertMap vmap)

◆ BMBVH_EdgeVisible()

bool BMBVH_EdgeVisible ( struct BMBVHTree tree,
BMEdge e,
struct Depsgraph depsgraph,
ARegion region,
View3D v3d,
Object obedit 
)

◆ cache_mirr_intptr_as_bmvert()

static BMVert* cache_mirr_intptr_as_bmvert ( const intptr_t index_lookup,
int  index 
)
static

Definition at line 1033 of file editmesh_utils.c.

References NULL.

Referenced by EDBM_verts_mirror_cache_begin_ex().

◆ EDBM_deselect_flush()

void EDBM_deselect_flush ( BMEditMesh em)

◆ EDBM_elem_from_index_any()

BMElem* EDBM_elem_from_index_any ( BMEditMesh em,
int  index 
)

◆ EDBM_elem_from_index_any_multi()

BMElem* EDBM_elem_from_index_any_multi ( ViewLayer view_layer,
int  object_index,
int  elem_index,
Object **  r_obedit 
)

◆ EDBM_elem_from_selectmode()

BMElem* EDBM_elem_from_selectmode ( BMEditMesh em,
BMVert eve,
BMEdge eed,
BMFace efa 
)

◆ EDBM_elem_to_index_any()

int EDBM_elem_to_index_any ( BMEditMesh em,
BMElem ele 
)

Used when we want to store a single index for any vert/edge/face.

Intended for use with operators.

Definition at line 1524 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().

◆ EDBM_elem_to_index_any_multi()

int EDBM_elem_to_index_any_multi ( ViewLayer view_layer,
BMEditMesh em,
BMElem ele,
int *  r_object_index 
)

◆ EDBM_flag_disable_all()

void EDBM_flag_disable_all ( BMEditMesh em,
const char  hflag 
)

◆ EDBM_flag_enable_all()

void EDBM_flag_enable_all ( BMEditMesh em,
const char  hflag 
)

◆ EDBM_mesh_clear()

void EDBM_mesh_clear ( BMEditMesh em)

◆ EDBM_mesh_free()

void EDBM_mesh_free ( BMEditMesh em)

Should only be called on the active editmesh, otherwise call BKE_editmesh_free

Definition at line 406 of file editmesh_utils.c.

References BKE_editmesh_free(), 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(), EDBM_op_finish(), and undomesh_to_editmesh().

◆ EDBM_mesh_hide()

bool EDBM_mesh_hide ( BMEditMesh em,
bool  swap 
)

◆ EDBM_mesh_load()

void EDBM_mesh_load ( Main bmain,
Object ob 
)

Definition at line 398 of file editmesh_utils.c.

References EDBM_mesh_load_ex().

Referenced by object_hook_index_array(), and vertex_parent_set_exec().

◆ EDBM_mesh_load_ex()

void EDBM_mesh_load_ex ( Main bmain,
Object ob,
bool  free_data 
)
Warning
This can invalidate the Mesh runtime cache of other objects (for linked duplicates). Most callers should run DEG_id_tag_update on ob->data, see: T46738, T46913

Definition at line 343 of file editmesh_utils.c.

References BKE_object_free_derived_caches(), BLI_listbase_is_empty(), Key::block, BMEditMesh::bm, bm, BM_mesh_bm_to_me(), Object::data, Mesh::edit_mesh, ListBase::first, Mesh::key, NULL, Main::objects, BMesh::shapenr, Object::shapenr, and UNLIKELY.

Referenced by ED_object_editmode_load_free_ex(), and EDBM_mesh_load().

◆ EDBM_mesh_make()

void EDBM_mesh_make ( Object ob,
const int  select_mode,
const bool  add_key_index 
)

◆ EDBM_mesh_normals_update()

void EDBM_mesh_normals_update ( BMEditMesh em)

◆ EDBM_mesh_reveal()

bool EDBM_mesh_reveal ( BMEditMesh em,
bool  select 
)

◆ EDBM_op_call_and_selectf()

bool EDBM_op_call_and_selectf ( BMEditMesh em,
wmOperator op,
const char *  select_slot_out,
const bool  select_extend,
const char *  fmt,
  ... 
)

◆ EDBM_op_call_silentf()

bool EDBM_op_call_silentf ( BMEditMesh em,
const char *  fmt,
  ... 
)

◆ EDBM_op_callf()

bool EDBM_op_callf ( BMEditMesh em,
wmOperator op,
const char *  fmt,
  ... 
)

◆ EDBM_op_finish()

bool EDBM_op_finish ( BMEditMesh em,
BMOperator bmop,
wmOperator op,
const bool  do_report 
)

Note, we could pass in the mesh, however this is an exceptional case, allow a slow lookup.

This is needed because the COW mesh makes a full copy of the BMEditMesh instead of sharing the pointer, tagging since this has been freed above, the BMEditMesh.emcopy needs to be flushed to the COW edit-mesh, see T55457.

Definition at line 146 of file editmesh_utils.c.

References BKE_editmesh_free(), BKE_editmesh_looptri_calc(), BKE_report(), BMEditMesh::bm, BMO_error_get(), BMO_op_finish(), DEG_id_tag_update(), EDBM_mesh_free(), Mesh::edit_mesh, BMEditMesh::emcopy, BMEditMesh::emcopyusers, ListBase::first, G_MAIN, Mesh::id, ID_RECALC_COPY_ON_WRITE, BMEditMesh::looptris, MEM_freeN, mesh, Main::meshes, ID::next, NULL, 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_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().

◆ EDBM_op_init()

bool EDBM_op_init ( BMEditMesh em,
BMOperator bmop,
wmOperator op,
const char *  fmt,
  ... 
)

◆ EDBM_project_snap_verts()

void EDBM_project_snap_verts ( bContext C,
Depsgraph depsgraph,
ARegion region,
Object obedit,
BMEditMesh em 
)

◆ EDBM_redo_state_free()

void EDBM_redo_state_free ( BMBackup backup,
BMEditMesh em,
int  recalctess 
)

◆ EDBM_redo_state_restore()

void EDBM_redo_state_restore ( BMBackup  backup,
BMEditMesh em,
int  recalctess 
)

◆ EDBM_redo_state_store()

BMBackup EDBM_redo_state_store ( BMEditMesh em)

Definition at line 71 of file editmesh_utils.c.

References backup, BMEditMesh::bm, and BM_mesh_copy().

Referenced by edbm_bevel_init(), edbm_inset_init(), and mesh_bisect_invoke().

◆ EDBM_select_flush()

void EDBM_select_flush ( BMEditMesh em)

◆ EDBM_select_less()

void EDBM_select_less ( BMEditMesh em,
const bool  use_face_step 
)

◆ EDBM_select_more()

void EDBM_select_more ( BMEditMesh em,
const bool  use_face_step 
)

◆ EDBM_selectmode_flush()

void EDBM_selectmode_flush ( BMEditMesh em)

◆ EDBM_selectmode_flush_ex()

void EDBM_selectmode_flush_ex ( BMEditMesh em,
const short  selectmode 
)

◆ EDBM_selectmode_to_scene()

void EDBM_selectmode_to_scene ( bContext C)

◆ EDBM_stats_update()

void EDBM_stats_update ( BMEditMesh em)

◆ EDBM_update_generic()

void EDBM_update_generic ( Mesh mesh,
const bool  do_tessellation,
const bool  is_destructive 
)

Definition at line 1444 of file editmesh_utils.c.

References BKE_editmesh_free_derivedmesh(), 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(), Mesh::edit_mesh, BMEditSelection::ele, ListBase::first, Mesh::id, ID_RECALC_GEOMETRY, mesh, NC_GEOM, ND_DATA, BMEditSelection::next, 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_exec(), 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_vert_connect_concave_exec(), edbm_vert_connect_nonplaner_exec(), edbm_vert_connect_path_exec(), edbm_wireframe_exec(), knifetool_finish_ex(), 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(), uv_hide_exec(), and uv_reveal_exec().

◆ EDBM_uv_active_face_get()

BMFace* EDBM_uv_active_face_get ( BMEditMesh em,
const bool  sloppy,
const 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 997 of file editmesh_utils.c.

References BMEditMesh::bm, BM_mesh_active_face_get(), EDBM_uv_check(), and NULL.

Referenced by mesh_render_data_create().

◆ EDBM_uv_check()

bool EDBM_uv_check ( BMEditMesh em)

◆ EDBM_vert_color_check()

bool EDBM_vert_color_check ( BMEditMesh em)

◆ EDBM_verts_mirror_apply()

void EDBM_verts_mirror_apply ( BMEditMesh em,
const int  sel_from,
const int  sel_to 
)

◆ EDBM_verts_mirror_cache_begin()

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 
)

◆ EDBM_verts_mirror_cache_begin_ex()

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 
)

◆ EDBM_verts_mirror_cache_clear()

void EDBM_verts_mirror_cache_clear ( BMEditMesh em,
BMVert v 
)

◆ EDBM_verts_mirror_cache_end()

void EDBM_verts_mirror_cache_end ( BMEditMesh em)

◆ EDBM_verts_mirror_get()

BMVert* EDBM_verts_mirror_get ( BMEditMesh em,
BMVert v 
)

◆ EDBM_verts_mirror_get_edge()

BMEdge* EDBM_verts_mirror_get_edge ( BMEditMesh em,
BMEdge e 
)

Definition at line 1223 of file editmesh_utils.c.

References BM_edge_exists(), e, EDBM_verts_mirror_get(), and NULL.

Referenced by EDBM_select_mirrored().

◆ EDBM_verts_mirror_get_face()

BMFace* EDBM_verts_mirror_get_face ( BMEditMesh em,
BMFace f 
)

◆ EDBM_view3d_poll()

bool EDBM_view3d_poll ( bContext C)

◆ edge_ray_cast()

static BMFace* edge_ray_cast ( struct BMBVHTree tree,
const float  co[3],
const float  dir[3],
float r_hitout,
BMEdge e 
)
static

Definition at line 1614 of file editmesh_utils.c.

References BKE_bmbvh_ray_cast(), BM_edge_in_face(), e, NULL, and tree.

Referenced by BMBVH_EdgeVisible().

◆ scale_point()

static void scale_point ( float  c1[3],
const float  p[3],
const float  s 
)
static

Definition at line 1626 of file editmesh_utils.c.

References add_v3_v3(), mul_v3_fl(), and sub_v3_v3().

Referenced by BMBVH_EdgeVisible().