Blender  V3.3
Macros
editmesh_utils.c File Reference
#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))
 

Functions

Redo API
BMBackup EDBM_redo_state_store (BMEditMesh *em)
 
void EDBM_redo_state_restore (BMBackup *backup, BMEditMesh *em, bool recalc_looptri)
 
void EDBM_redo_state_restore_and_free (BMBackup *backup, BMEditMesh *em, bool recalc_looptri)
 
void EDBM_redo_state_free (BMBackup *backup)
 
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_data (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)
 
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_ex (BMEditMesh *em, const struct BMeshNormalsUpdate_Params *params)
 
void EDBM_mesh_normals_update (BMEditMesh *em)
 
void EDBM_stats_update (BMEditMesh *em)
 
void EDBM_update (Mesh *mesh, const struct EDBMUpdate_Params *params)
 
void EDBM_update_extern (struct Mesh *me, 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, uint 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, uint object_index, uint 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)
 

UV Vertex Map API

#define INVALID_ISLAND   ((unsigned int)-1)
 
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)
 
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)
 
UvElementMapBM_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)
 
UvElementBM_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 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 1117 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, int axis, bool use_self, bool use_select, bool respecthide, 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 1116 of file editmesh_utils.c.

◆ INVALID_ISLAND

#define INVALID_ISLAND   ((unsigned int)-1)

Definition at line 596 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_assign_island()

static void bm_uv_assign_island ( UvElementMap element_map,
UvElement element,
int  nisland,
uint map,
UvElement islandbuf,
int  islandbufsize 
)
static

◆ bm_uv_edge_select_build_islands()

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 
)
static

◆ 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  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 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().

◆ BM_uv_vert_map_create()

UvVertMap* BM_uv_vert_map_create ( struct BMesh bm,
bool  use_select,
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 1093 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,
uint  index 
)

◆ EDBM_elem_from_index_any_multi()

BMElem* EDBM_elem_from_index_any_multi ( ViewLayer view_layer,
uint  object_index,
uint  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 ( 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().

◆ 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_data()

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().

◆ EDBM_mesh_hide()

bool EDBM_mesh_hide ( struct BMEditMesh em,
bool  swap 
)

◆ EDBM_mesh_load()

void EDBM_mesh_load ( Main bmain,
Object ob 
)

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().

◆ EDBM_mesh_load_ex()

void EDBM_mesh_load_ex ( struct Main bmain,
struct 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. 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().

◆ 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_normals_update_ex()

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().

◆ 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 ( 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.

◆ EDBM_op_callf()

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

◆ EDBM_op_finish()

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

◆ EDBM_op_init()

bool EDBM_op_init ( struct BMEditMesh em,
struct BMOperator bmop,
struct 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)

◆ EDBM_redo_state_restore()

void EDBM_redo_state_restore ( BMBackup backup,
BMEditMesh em,
bool  recalc_looptri 
)

◆ EDBM_redo_state_restore_and_free()

void EDBM_redo_state_restore_and_free ( BMBackup backup,
BMEditMesh em,
bool  recalc_looptri 
)

◆ EDBM_redo_state_store()

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().

◆ 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 ( 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().

◆ 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()

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().

◆ EDBM_update_extern()

void EDBM_update_extern ( struct Mesh me,
bool  do_tessellation,
bool  is_destructive 
)

Bad level call from Python API.

Definition at line 1543 of file editmesh_utils.c.

References EDBM_update().

◆ EDBM_uv_active_face_get()

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().

◆ EDBM_uv_check()

bool EDBM_uv_check ( struct 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 ( struct BMEditMesh em,
int  axis,
bool  use_self,
bool  use_select,
bool  respecthide,
bool  use_topology,
float  maxdist,
int *  r_index 
)
Parameters
emEdit-mesh used for generating mirror data.
use_selfAllow a vertex to point to itself (middle verts).
use_selectRestrict to selected verts.
respecthideSkip hidden vertices.
use_topologyUse topology mirror.
maxdistDistance for close point test.
r_indexOptional 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().

◆ 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 1273 of file editmesh_utils.c.

References BM_edge_exists(), e, EDBM_verts_mirror_get(), LIKELY, 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 ( struct 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 1681 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 1693 of file editmesh_utils.c.

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

Referenced by BMBVH_EdgeVisible().