Blender V5.0
editmesh.cc File Reference
#include "MEM_guardedalloc.h"
#include "DNA_mesh_types.h"
#include "DNA_object_types.h"
#include "BLI_bitmap.h"
#include "BLI_math_geom.h"
#include "BLI_math_vector.h"
#include "BKE_customdata.hh"
#include "BKE_editmesh.hh"
#include "BKE_mesh.hh"
#include "BKE_mesh_iterators.hh"
#include "BKE_mesh_runtime.hh"
#include "BKE_mesh_wrapper.hh"
#include "BKE_object.hh"
#include "DEG_depsgraph_query.hh"

Go to the source code of this file.

Classes

struct  CageUserData

Typedefs

using float3

Functions

BMEditMeshBKE_editmesh_create (BMesh *bm)
BMEditMeshBKE_editmesh_copy (BMEditMesh *em)
BMEditMeshBKE_editmesh_from_object (Object *ob)
 Return the BMEditMesh for a given object.
bool BKE_editmesh_eval_orig_map_available (const Mesh &mesh_eval, const Mesh *mesh_orig)
void BKE_editmesh_looptris_calc_ex (BMEditMesh *em, const BMeshCalcTessellation_Params *params)
void BKE_editmesh_looptris_calc (BMEditMesh *em)
void BKE_editmesh_looptris_and_normals_calc (BMEditMesh *em)
void BKE_editmesh_looptris_calc_with_partial_ex (BMEditMesh *em, BMPartialUpdate *bmpinfo, const BMeshCalcTessellation_Params *params)
void BKE_editmesh_looptris_calc_with_partial (BMEditMesh *em, BMPartialUpdate *bmpinfo)
void BKE_editmesh_looptris_and_normals_calc_with_partial (BMEditMesh *em, BMPartialUpdate *bmpinfo)
void BKE_editmesh_free_data (BMEditMesh *em)
static void cage_mapped_verts_callback (void *user_data, int index, const float co[3], const float[3])
Array< float3BKE_editmesh_vert_coords_alloc (Depsgraph *depsgraph, BMEditMesh *em, Scene *scene, Object *ob)
Span< float3BKE_editmesh_vert_coords_when_deformed (Depsgraph *depsgraph, BMEditMesh *em, Scene *scene, Object *ob, Array< float3 > &r_alloc)
Array< float3BKE_editmesh_vert_coords_alloc_orco (BMEditMesh *em)
void BKE_editmesh_lnorspace_update (BMEditMesh *em)

Typedef Documentation

◆ float3

Definition at line 619 of file BLI_math_vector_types.hh.

Function Documentation

◆ BKE_editmesh_copy()

BMEditMesh * BKE_editmesh_copy ( BMEditMesh * em)

◆ BKE_editmesh_create()

BMEditMesh * BKE_editmesh_create ( BMesh * bm)
Note
The caller is responsible for ensuring triangulation data, typically by calling BKE_editmesh_looptris_calc.

Definition at line 32 of file editmesh.cc.

References bm, and BMEditMesh::bm.

Referenced by blender::bke::tests::ArmatureDeformTestBase::edit_mesh_test(), geometry_extract_apply(), and undomesh_to_editmesh().

◆ BKE_editmesh_eval_orig_map_available()

bool BKE_editmesh_eval_orig_map_available ( const Mesh & mesh_eval,
const Mesh * mesh_orig )

Return whether the evaluated mesh is a "descendant" of the original mesh: whether it is a version of the original mesh propagated during evaluation. This will be false if the mesh was taken from an different object during evaluation, with the object info node for example.

Definition at line 67 of file editmesh.cc.

References Mesh::runtime.

Referenced by blender::draw::DRW_mesh_batch_cache_create_requested(), DRW_text_edit_mesh_measure_stats(), and knifetool_init_obinfo().

◆ BKE_editmesh_free_data()

void BKE_editmesh_free_data ( BMEditMesh * em)

◆ BKE_editmesh_from_object()

BMEditMesh * BKE_editmesh_from_object ( Object * ob)

Return the BMEditMesh for a given object.

Note
this function assumes this is a mesh object, don't add NULL data check here. caller must do that

Definition at line 61 of file editmesh.cc.

References BLI_assert, Object::data, OB_MESH, and Object::type.

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(), blender::ed::transform::applyNormalRotation(), average_islands_scale_exec(), BKE_crazyspace_get_mapped_editverts(), BKE_modifier_get_evaluated_mesh_from_evaluated_object(), blender::ed::object::calc_active_center_for_editmode(), calc_ortho_extent(), blender::ed::transform::calcEdgeSlide_mval_range(), construct_param_handle_multi(), contarget_get_mesh_mat(), EditMeshSymmetryHelper::create_if_needed(), blender::ed::transform::create_mesh(), blender::ed::transform::createTransEdge(), blender::ed::transform::createTransEditVerts(), blender::ed::transform::createTransMeshSkin(), blender::ed::transform::createTransMeshVertCData(), blender::ed::transform::createTransUVs(), cube_project_exec(), cylinder_project_exec(), deform_verts(), dissolve_mode_poll_property(), do_lasso_select_mesh(), do_lasso_select_mesh_uv(), ED_operator_editmesh(), ED_operator_uvmap(), ED_space_image_auto_set(), ED_space_image_show_uvedit(), ED_transverts_update_obedit(), ED_uvedit_deselect_all(), ED_uvedit_foreach_uv_multi(), ED_uvedit_get_aspect(), ED_uvedit_live_unwrap_begin(), ED_uvedit_selectmode_clean(), ED_uvedit_test(), ED_view3d_gizmo_mesh_preselect_get_active(), ED_view3d_viewcontext_init_object(), edbm_add_edge_face_exec(), EDBM_automerge_and_split(), edbm_automerge_impl(), edbm_average_normals_exec(), edbm_beautify_fill_exec(), edbm_bevel_calc(), edbm_bevel_cancel(), edbm_bevel_exit(), edbm_bevel_init(), edbm_bridge_edge_loops_exec(), edbm_collapse_edge_exec(), 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_mode_exec(), edbm_dissolve_verts_exec(), edbm_do_smooth_laplacian_vertex_exec(), edbm_do_smooth_vertex_exec(), edbm_duplicate_exec(), edbm_edge_rotate_selected_exec(), edbm_edge_split_exec(), EDBM_elem_from_index_any_multi(), EDBM_elem_to_index_any_multi(), 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_select_interior_exec(), edbm_faces_shade_flat_exec(), edbm_faces_shade_smooth_exec(), edbm_fill_exec(), edbm_fill_grid_exec(), edbm_fill_holes_exec(), edbm_flag_disable_all_multi(), edbm_flip_normals_exec(), edbm_flip_quad_tessellation_exec(), edbm_hide_exec(), edbm_inset_calc(), edbm_inset_cancel(), edbm_inset_init(), edbm_intersect_boolean_exec(), edbm_intersect_exec(), edbm_loop_multiselect_exec(), edbm_loop_to_region_exec(), edbm_mark_seam_exec(), edbm_mark_sharp_exec(), edbm_merge_exec(), EDBM_mesh_deselect_all_multi_ex(), EDBM_mesh_elem_index_ensure_multi(), EDBM_mesh_knife(), EDBM_mesh_stats_multi(), edbm_mod_weighted_strength_exec(), edbm_normals_make_consistent_exec(), edbm_normals_tools_exec(), edbm_offset_edgeloop_exec(), edbm_point_normals_modal(), edbm_poke_face_exec(), edbm_preselect_or_active(), edbm_quads_convert_to_tris_exec(), edbm_region_to_loop_exec(), edbm_remove_doubles_exec(), edbm_reveal_exec(), edbm_reverse_colors_exec(), edbm_reverse_uvs_exec(), edbm_rip_edge_invoke(), edbm_rip_invoke(), edbm_rip_invoke__edge(), edbm_rip_invoke__vert(), edbm_rotate_colors_exec(), edbm_rotate_uvs_exec(), edbm_screw_exec(), edbm_select_all_exec(), edbm_select_axis_exec(), edbm_select_by_attribute_exec(), edbm_select_by_pole_count_exec(), edbm_select_face_by_sides_exec(), edbm_select_id_bm_elem_get(), edbm_select_less_exec(), edbm_select_linked_exec(), edbm_select_linked_flat_faces_exec(), edbm_select_linked_pick_exec(), edbm_select_loose_exec(), edbm_select_mirror_exec(), edbm_select_more_exec(), edbm_select_non_manifold_exec(), edbm_select_nth_exec(), EDBM_select_pick(), edbm_select_random_exec(), edbm_select_sharp_edges_exec(), edbm_select_similar_region_exec(), edbm_select_ungrouped_exec(), edbm_select_ungrouped_poll(), EDBM_selectmode_disable_multi_ex(), EDBM_selectmode_set_multi(), EDBM_selectmode_set_multi_ex(), edbm_selectmode_sync_multi_ex(), EDBM_selectmode_to_scene(), EDBM_selectmode_toggle_multi(), edbm_separate_exec(), edbm_set_normals_from_faces_exec(), edbm_shortest_path_pick_exec(), edbm_shortest_path_select_exec(), edbm_smooth_normals_exec(), edbm_solidify_exec(), edbm_sort_elements_exec(), edbm_spin_exec(), edbm_split_exec(), edbm_subdivide_edge_ring_exec(), edbm_subdivide_exec(), edbm_tris_convert_to_quads_exec(), EDBM_unified_findnearest_from_raycast(), edbm_unsubdivide_exec(), edbm_vert_connect_concave_exec(), edbm_vert_connect_exec(), edbm_vert_connect_nonplaner_exec(), edbm_vert_connect_path_exec(), edbm_vert_or_edge_select_mode_poll(), edbm_wireframe_exec(), edgering_select(), blender::bke::editbmesh_get_eval_cage_from_orig(), blender::ed::transform::editmesh_snapdata_init(), blender::ed::object::editmode_enter_ex(), em_setup_viewcontext(), blender::ed::transform::freeCustomNormalArray(), blender::ed::transform::getTransformOrientation_ex(), blender::ed::transform::gizmo_3d_foreach_selected(), gizmo_mesh_spin_init_refresh(), gizmo_preselect_edgering_test_select(), gizmo_preselect_elem_test_select(), blender::ed::transform::initNormalRotation(), knife_bvh_init(), knife_bvh_raycast_cb(), knife_find_line_hits(), knife_make_cuts(), knife_ray_intersect_face(), knifeproject_exec(), knifetool_finish_single_post(), knifetool_init(), knifetool_invoke(), loopcut_init(), make_prim_finish(), material_slot_assign_exec(), material_slot_de_select(), merge_type_itemf(), mesh_bisect_exec(), mesh_bisect_invoke(), mesh_circle_select(), blender::ed::transform::mesh_customdatacorrect_create_impl(), mesh_data_from_duplicator_object(), blender::ed::transform::mesh_partial_ensure(), blender::ed::transform::mesh_partial_update(), blender::ed::mesh::set_attribute::mesh_set_attribute_exec(), mesh_symmetrize_exec(), mesh_symmetry_snap_exec(), minimize_stretch_exit(), minimize_stretch_iteration(), mouse_mesh_loop(), mouse_mesh_shortest_path_edge(), mouse_mesh_shortest_path_face(), mouse_mesh_shortest_path_vert(), mouse_mesh_uv_shortest_path_edge(), mouse_mesh_uv_shortest_path_face(), mouse_mesh_uv_shortest_path_vert(), normals_split_merge(), point_normals_apply(), point_normals_init(), blender::ed::transform::recalcData_mesh_skin(), reset_exec(), ringsel_find_edge(), select_similar_type_itemf(), shape_itemf(), similar_edge_select_exec(), similar_face_select_exec(), similar_vert_select_exec(), blender::ed::object::skin_loose_mark_clear_exec(), blender::ed::object::skin_radii_equalize_exec(), blender::ed::object::skin_root_mark_exec(), smart_project_exec(), snap_curs_to_sel_ex(), snap_sel_to_grid_exec(), snap_selected_to_location_rotation(), sort_bmelem_flag(), blender::ed::transform::special_aftertrans_update__mesh(), sphere_project_exec(), stats_object_edit(), stitch_exit(), stitch_init(), stitch_invoke(), blender::ed::transform::transform_convert_mesh_crazyspace_detect(), blender::ed::transform::transform_mesh_edge_slide_data_create(), blender::ed::transform::transform_mesh_uv_edge_slide_data_create(), blender::ed::transform::transform_mesh_uv_vert_slide_data_create(), blender::ed::transform::transformEnd(), uiTemplateEditModeSelection(), uv_align(), uv_arrange_islands_exec(), uv_box_select_exec(), uv_circle_select_exec(), uv_copy_exec(), uv_copy_mirrored_faces_exec(), uv_find_nearest_edge(), uv_find_nearest_face_ex(), uv_find_nearest_loop_from_edge(), uv_find_nearest_loop_from_vert(), uv_find_nearest_vert(), uv_from_view_exec(), uv_hide_exec(), uv_map_clip_correct(), uv_mouse_select_loop_generic_multi(), uv_mouse_select_multi(), uv_move_on_axis_exec(), uv_paste_exec(), uv_pin_exec(), uv_remove_doubles_to_selected(), uv_remove_doubles_to_selected_shared_vertex(), uv_remove_doubles_to_unselected(), uv_reveal_exec(), uv_rip_object(), uv_sculpt_stroke_apply(), uv_sculpt_stroke_init(), uv_select_edgeloop(), uv_select_edgering(), uv_select_faceloop(), uv_select_flush_from_tag_face(), uv_select_flush_from_tag_loop(), uv_select_linked_multi(), uv_select_more_less(), uv_select_overlap(), uv_select_pinned_exec(), uv_select_similar_edge_exec(), uv_select_similar_face_exec(), uv_select_similar_island_exec(), uv_select_similar_vert_exec(), uv_select_split_exec(), uv_select_sync_update(), uv_shortest_path_pick_ex(), uv_shortest_path_pick_exec(), uv_shortest_path_pick_invoke(), uv_shortest_path_select_exec(), uv_snap_selection_exec(), uv_snap_uvs_offset(), uv_snap_uvs_to_adjacent_unselected(), uv_snap_uvs_to_cursor(), uv_snap_uvs_to_pixels(), uv_weld(), uvedit_center(), uvedit_ensure_uvs(), uvedit_have_selection_multi(), uvedit_nearest_uv(), uvedit_pack_islands_multi(), uvedit_select_is_any_selected_multi(), uvedit_translate(), uvedit_unwrap(), blender::ed::object::vgroup_do_remap(), blender::ed::object::vgroup_parray_mirror_assign(), blender::ed::object::vgroup_parray_mirror_sync(), blender::ed::object::vgroup_smooth_subset(), view3d_box_select_exec(), view3d_circle_select_exec(), and view3d_lasso_select().

◆ BKE_editmesh_lnorspace_update()

◆ BKE_editmesh_looptris_and_normals_calc()

◆ BKE_editmesh_looptris_and_normals_calc_with_partial()

◆ BKE_editmesh_looptris_calc()

◆ BKE_editmesh_looptris_calc_ex()

◆ BKE_editmesh_looptris_calc_with_partial()

void BKE_editmesh_looptris_calc_with_partial ( BMEditMesh * em,
BMPartialUpdate * bmpinfo )

◆ BKE_editmesh_looptris_calc_with_partial_ex()

◆ BKE_editmesh_vert_coords_alloc()

◆ BKE_editmesh_vert_coords_alloc_orco()

Array< float3 > BKE_editmesh_vert_coords_alloc_orco ( BMEditMesh * em)

Definition at line 215 of file editmesh.cc.

References BMEditMesh::bm, and BM_mesh_vert_coords_alloc().

Referenced by correctivesmooth_modifier_do().

◆ BKE_editmesh_vert_coords_when_deformed()

◆ cage_mapped_verts_callback()

void cage_mapped_verts_callback ( void * user_data,
int index,
const float co[3],
const float [3] )
static

Definition at line 147 of file editmesh.cc.

References BLI_BITMAP_ENABLE, BLI_BITMAP_TEST, copy_v3_v3(), and data.

Referenced by BKE_editmesh_vert_coords_alloc().