|
Blender V5.0
|
#include "BLI_compiler_attrs.h"#include "BLI_math_vector_types.hh"#include "BLI_span.hh"#include "bmesh_class.hh"Go to the source code of this file.
| void BM_edge_normals_update | ( | BMEdge * | e | ) |
updates face and vertex normals incident on an edge
Definition at line 704 of file bmesh_polygon.cc.
References BM_face_normal_update(), BM_FACES_OF_EDGE, BM_ITER_ELEM, BM_vert_normal_update(), and e.
Referenced by bpy_bmedge_normal_update().
faster alternative to: BM_iter_as_array(bm, BM_LOOPS_OF_FACE, f, (void **)l, 4);
Definition at line 1466 of file bmesh_polygon.cc.
References BLI_assert, BM_FACE_FIRST_LOOP, l, and BMFace::len.
Referenced by bm_grid_fill_array(), and reprioritize_face_neighbors().
Small utility functions for fast access
faster alternative to: BM_iter_as_array(bm, BM_LOOPS_OF_FACE, f, (void **)l, 3);
Definition at line 1453 of file bmesh_polygon.cc.
References BLI_assert, BM_FACE_FIRST_LOOP, l, and BMFace::len.
faster alternative to: BM_iter_as_array(bm, BM_VERTS_OF_FACE, f, (void **)v, 4);
Definition at line 1438 of file bmesh_polygon.cc.
References BLI_assert, BM_FACE_FIRST_LOOP, l, and BMFace::len.
Referenced by bm_face_calc_tangent_from_quad_edge_pair(), bm_face_calc_tangent_pair_from_quad_edge_pair(), bmo_join_triangles_exec(), and skin_fix_hole_no_good_verts().
Small utility functions for fast access
faster alternative to: BM_iter_as_array(bm, BM_VERTS_OF_FACE, f, (void **)v, 3);
Definition at line 1425 of file bmesh_polygon.cc.
References BLI_assert, BM_FACE_FIRST_LOOP, l, and BMFace::len.
Referenced by BM_face_calc_tangent_auto(), BM_face_calc_tangent_from_edge_pair(), BM_face_calc_tangent_pair_auto(), bm_log_face_alloc(), blender::bke::pbvh::bmesh_node_nearest_to_ray(), blender::bke::pbvh::edge_queue_tri_in_circle(), blender::bke::pbvh::edge_queue_tri_in_sphere(), blender::bke::pbvh::node_raycast_bmesh(), quad_from_tris(), and blender::bke::pbvh::raycast_node_detail_bmesh().
get the area of the face
Definition at line 211 of file bmesh_polygon.cc.
References add_newell_cross_v3_v3v3(), BM_FACE_FIRST_LOOP, BMVert::co, len_v3(), BMLoop::next, BMLoop::v, and zero_v3().
Referenced by bpy_bmface_calc_area(), edbm_average_normals_exec(), EDBM_select_interior_faces(), hull_merge_triangles(), recalc_face_normals_find_index(), and smart_project_exec().
Calculate the area of UV face.
Definition at line 261 of file bmesh_polygon.cc.
References BM_face_calc_area_uv_signed(), and fabsf.
Referenced by get_uv_edge_needle(), get_uv_face_needle(), get_uv_island_needle(), and get_uv_vert_needle().
Calculate the signed area of UV face.
Definition at line 244 of file bmesh_polygon.cc.
References BM_ELEM_CD_GET_FLOAT_P, BM_FACE_FIRST_LOOP, cross, and BMLoop::next.
Referenced by BM_face_calc_area_uv(), BM_uv_element_map_create(), and get_uv_face_needle().
Get the area of the face in world space.
Definition at line 225 of file bmesh_polygon.cc.
References add_newell_cross_v3_v3v3(), BM_FACE_FIRST_LOOP, BMVert::co, copy_v3_v3(), len_v3(), mul_v3_m3v3(), BMLoop::next, BMLoop::v, and zero_v3().
Referenced by get_uv_edge_needle(), get_uv_face_needle(), get_uv_island_needle(), get_uv_vert_needle(), and similar_face_select_exec().
expands bounds (min/max must be initialized).
Definition at line 606 of file bmesh_polygon.cc.
References BM_FACE_FIRST_LOOP, BMVert::co, max, min, minmax_v3v3_v3(), BMLoop::next, and BMLoop::v.
Referenced by uv_map_transform_calc_bounds().
computes center of face in 3d. uses center of bounding box.
Definition at line 615 of file bmesh_polygon.cc.
References BM_FACE_FIRST_LOOP, BMVert::co, INIT_MINMAX, max, mid_v3_v3v3(), min, minmax_v3v3_v3(), BMLoop::next, and BMLoop::v.
Referenced by bmo_poke_exec(), bpy_bmface_calc_center_bounds(), choose_rep_face(), DRW_text_edit_mesh_measure_stats(), and math_layer_info_init().
| void BM_face_calc_center_bounds_vcos | ( | const BMesh * | bm, |
| const BMFace * | f, | ||
| float | r_center[3], | ||
| blender::Span< blender::float3 > | vert_positions ) |
computes center of face in 3d. uses center of bounding box.
Definition at line 630 of file bmesh_polygon.cc.
References BLI_assert, bm, BM_elem_index_get, BM_FACE_FIRST_LOOP, BM_VERT, INIT_MINMAX, max, mid_v3_v3v3(), min, minmax_v3v3_v3(), BMLoop::next, and BMLoop::v.
Referenced by DRW_text_edit_mesh_measure_stats().
computes the center of a face, using the mean average
Definition at line 652 of file bmesh_polygon.cc.
References add_v3_v3(), BM_FACE_FIRST_LOOP, BMVert::co, BMFace::len, mul_v3_fl(), BMLoop::next, BMLoop::v, and zero_v3().
Referenced by BKE_editmesh_cache_ensure_face_centers(), bm_decim_build_quadrics(), BM_edge_split(), BM_editselection_center(), BM_face_interp_multires(), BM_face_split(), BM_face_triangulate(), BM_faces_join(), BM_loop_interp_multires(), bmo_poke_exec(), bpy_bmface_calc_center_mean(), compute_mdisp_quad(), DRW_text_edit_mesh_measure_stats(), EDBM_unified_findnearest_from_raycast(), blender::ed::sculpt_paint::face_set::gesture_apply_bmesh(), blender::ed::transform::mesh_customdatacorrect_apply_vert(), mouse_mesh_loop(), skin_hole_target_face(), sort_bmelem_flag(), uv_copy_mirrored_faces(), and uv_map_transform_calc_center_median().
| void BM_face_calc_center_median_vcos | ( | const BMesh * | bm, |
| const BMFace * | f, | ||
| float | r_center[3], | ||
| const blender::Span< blender::float3 > | vert_positions ) |
Definition at line 1010 of file bmesh_polygon.cc.
References BLI_assert, bm, bm_face_calc_poly_center_median_vertex_cos(), and BM_VERT.
Referenced by BKE_editmesh_cache_ensure_face_centers(), DRW_text_edit_mesh_measure_stats(), and EDBM_unified_findnearest_from_raycast().
computes the center of a face, using the mean average weighted by edge length
Definition at line 665 of file bmesh_polygon.cc.
References BM_edge_calc_length(), BM_FACE_FIRST_LOOP, BMVert::co, BMLoop::e, madd_v3_v3fl(), mul_v3_fl(), BMLoop::next, BMLoop::prev, BMLoop::v, w(), and zero_v3().
Referenced by bmo_planar_faces_exec(), bmo_poke_exec(), bpy_bmface_calc_center_median_weighted(), edgetag_cut_cost_face(), facetag_cut_cost_edge(), facetag_cut_cost_vert(), and recalc_face_normals_find_index().
BMESH UPDATE FACE NORMAL.
Updates the stored normal for the given face. Requires that a buffer of sufficient length to store projected coordinates for all of the face's vertices is passed in as well.
Definition at line 822 of file bmesh_polygon.cc.
References bm_face_calc_poly_normal(), BM_FACE_FIRST_LOOP, l, BMFace::len, normal_quad_v3(), normal_tri_v3(), and v.
Referenced by bm_face_calc_normals_cb(), BM_face_is_normal_valid(), BM_face_normal_update(), bm_mesh_calc_tessellation__single_threaded(), bmesh_calc_tessellation_for_face_impl(), and bmo_vert_calc_edge_angle_blended().
Calculates the face subset normal.
Definition at line 990 of file bmesh_polygon.cc.
References add_newell_cross_v3_v3v3(), BMVert::co, BMLoop::next, normalize_v3(), BMLoop::v, and zero_v3().
Referenced by bm_face_calc_split_dot(), and bm_face_split_find().
| float BM_face_calc_normal_vcos | ( | const BMesh * | bm, |
| const BMFace * | f, | ||
| float | r_no[3], | ||
| blender::Span< blender::float3 > | vertexCos ) |
compute the perimeter of an ngon
Definition at line 266 of file bmesh_polygon.cc.
References BM_FACE_FIRST_LOOP, BMVert::co, len_v3v3(), BMLoop::next, and BMLoop::v.
Referenced by bpy_bmface_calc_perimeter().
Calculate the perimeter of a ngon in world space.
Definition at line 279 of file bmesh_polygon.cc.
References BM_FACE_FIRST_LOOP, BMVert::co, copy_v3_v3(), len_v3v3(), mul_v3_m3v3(), BMLoop::next, and BMLoop::v.
Referenced by similar_face_select_exec().
Return a point inside the face.
Definition at line 173 of file bmesh_polygon.cc.
References area_squared_tri_v3(), ARRAY_SET_ITEMS, BLI_array_alloca, BM_face_calc_tessellation(), BM_FACE_FIRST_LOOP, BMVert::co, l, BMFace::len, mid_v3_v3v3v3(), BMLoop::v, and v.
Referenced by BM_mesh_intersect(), and EDBM_mesh_knife().
Compute a meaningful direction along the face (use for gizmo axis).
Definition at line 570 of file bmesh_polygon.cc.
References BM_face_as_array_vert_tri(), BM_face_calc_tangent_from_edge(), bm_face_calc_tangent_from_quad_edge_pair(), BM_vert_tri_calc_tangent_from_edge(), BMFace::len, and verts.
Referenced by BM_editselection_plane().
Compute the tangent of the face, using the longest edge.
Definition at line 387 of file bmesh_polygon.cc.
References BM_face_find_longest_loop(), BMVert::co, BMLoop::next, normalize_v3(), sub_v3_v3v3(), and BMLoop::v.
Referenced by BM_face_calc_tangent_auto(), and bpy_bmface_calc_tangent_edge().
Compute the tangent of the face, using the edge farthest away from any vertex in the face.
| r_tangent | Calculated unit length tangent (return value). |
Definition at line 510 of file bmesh_polygon.cc.
References BLI_assert, BM_FACE_FIRST_LOOP, closest_to_line_segment_v3(), BMVert::co, copy_v3_v3(), ELEM, len_squared_v3(), BMLoop::next, normalize_v3(), BMLoop::prev, sub_v3_v3v3(), BMLoop::v, and zero_v3().
Referenced by bpy_bmface_calc_tangent_edge_diagonal().
Compute the tangent of the face, using the two longest disconnected edges.
| r_tangent | Calculated unit length tangent (return value). |
Definition at line 464 of file bmesh_polygon.cc.
References add_v3_v3v3(), BM_face_as_array_vert_tri(), bm_face_calc_tangent_pair_from_quad_edge_pair(), BM_face_find_longest_loop(), BM_vert_tri_calc_tangent_edge_pair(), BMVert::co, BMFace::len, len_squared_v3v3(), BMLoop::next, normalize_v3(), normalize_v3_v3(), BMLoop::prev, sub_v3_v3v3(), UNLIKELY, BMLoop::v, and verts.
Referenced by bpy_bmface_calc_tangent_edge_pair().
Compute the tangent of the face, using longest distance between vertices on the face.
Definition at line 542 of file bmesh_polygon.cc.
References BM_FACE_FIRST_LOOP, BMVert::co, copy_v3_v3(), len_squared_v3(), BMLoop::next, normalize_v3(), sub_v3_v3v3(), BMLoop::v, and zero_v3().
Referenced by bpy_bmface_calc_tangent_vert_diagonal().
| void BM_face_calc_tangent_pair_auto | ( | const BMFace * | f, |
| float | r_tangent_a[3], | ||
| float | r_tangent_b[3] ) |
A version of BM_face_calc_tangent_auto that calculates two tangents. Useful when one may not be usable.
Definition at line 588 of file bmesh_polygon.cc.
References BM_face_as_array_vert_tri(), BM_face_calc_tangent_pair_from_edge(), bm_face_calc_tangent_pair_from_quad_edge_pair(), BM_vert_tri_calc_tangent_pair_from_edge(), BMFace::len, and verts.
Referenced by blender::ed::transform::getTransformOrientation_ex().
| void BM_face_calc_tangent_pair_from_edge | ( | const BMFace * | f, |
| float | r_tangent_a[3], | ||
| float | r_tangent_b[3] ) |
Definition at line 441 of file bmesh_polygon.cc.
References BM_face_find_longest_loop(), BMVert::co, cross_v3_v3v3(), len_squared_v3(), BMLoop::next, normalize_v3(), normalize_v3_v3(), BMLoop::prev, sub_v3_v3v3(), and BMLoop::v.
Referenced by BM_face_calc_tangent_pair_auto().
| void BM_face_calc_tessellation | ( | const BMFace * | f, |
| bool | use_fixed_quad, | ||
| BMLoop ** | r_loops, | ||
| uint(*) | r_index[3] ) |
For tools that insist on using triangles, ideally we would cache this data.
| use_fixed_quad | When true, always split quad along (0 -> 2) regardless of concave corners, (as done in BM_mesh_calc_tessellation). |
| r_loops | Store face loop pointers, (f->len) |
| r_index | Store triangle triples, indices into r_loops, ((f->len - 2) * 3) |
Definition at line 122 of file bmesh_polygon.cc.
References axis_dominant_v3_to_m3_negate(), BLI_array_alloca, BLI_polyfill_calc(), BM_FACE_FIRST_LOOP, BMVert::co, float, BMFace::len, mul_v2_m3v3(), BMLoop::next, BMFace::no, and BMLoop::v.
Referenced by BM_face_calc_point_in_face(), and bm_mesh_calc_volume_face().
Definition at line 1031 of file bmesh_polygon.cc.
References bm, BM_face_normal_flip_ex(), CD_MDISPS, and CustomData_get_offset().
Referenced by BM_edge_rotate(), bm_face_copy_shared_all(), BM_mesh_intersect(), bmo_extrude_face_region_exec(), bmo_recalc_face_normals_array(), bpy_bm_utils_face_flip(), and bpy_bmface_normal_flip().
| void BM_face_normal_flip_ex | ( | BMesh * | bm, |
| BMFace * | f, | ||
| int | cd_loop_mdisp_offset, | ||
| bool | use_loop_mdisp_flip ) |
Face Flip Normal.
Reverses the winding of a face.
Definition at line 1022 of file bmesh_polygon.cc.
References bm, bmesh_kernel_loop_reverse(), negate_v3(), and BMFace::no.
Referenced by BM_face_normal_flip(), BMD_mesh_bm_create(), bmo_reverse_faces_exec(), and blender::geometry::boolean::mesh_bm_concat().
| void BM_face_normal_update | ( | BMFace * | f | ) |
Definition at line 848 of file bmesh_polygon.cc.
References BM_face_calc_normal(), and BMFace::no.
Referenced by add_poly(), BM_edge_normals_update(), bm_face_triangulate(), BM_mesh_bm_from_me(), BM_mesh_calc_uvs_cone(), BM_mesh_decimate_dissolve_ex(), BM_mesh_intersect_edges(), BM_vert_normal_update_all(), blender::bke::pbvh::bmesh_normals_update(), bmo_connect_verts_nonplanar_exec(), bmo_edgenet_fill_exec(), bmo_holes_fill_exec(), bmo_planar_faces_exec(), bpy_bmface_normal_update(), bridge_loop_pair(), build_hull(), skin_smooth_hulls(), and vert_face_normal_mark_update().
BM POINT IN FACE
Projects co onto face f, and returns true if it is inside the face bounds.
Definition at line 1037 of file bmesh_polygon.cc.
References axis_dominant_v3_to_m3(), BLI_array_alloca, BLI_assert, BM_FACE_FIRST_LOOP, BM_face_is_normal_valid(), BMVert::co, float, i, isect_point_poly_v2(), BMFace::len, mul_v2_m3v3(), BMLoop::next, BMFace::no, and BMLoop::v.
Referenced by bm_vert_pair_share_best_splittable_face_cb(), bpy_bm_geometry_intersect_face_point(), find_face_internal_boundverts(), and knife_verts_edge_in_face().
each pair of loops defines a new edge, a split. this function goes through and sets pairs that are geometrically invalid to null. a split is invalid, if it forms a concave angle or it intersects other edges in the face, or it intersects another split. in the case of intersecting splits, only the first of the set of intersecting splits survives
Definition at line 1288 of file bmesh_polygon.cc.
References add_v2_v2(), angle_signed_v2v2_pos(), axis_dominant_v3_to_m3(), BLI_array_alloca, BLI_assert, bm, BM_elem_index_get, BM_elem_index_set, BM_FACE_FIRST_LOOP, BM_face_is_normal_valid(), BM_LOOP, EDGE_SHARE_VERT, equals_v2v2(), float, i, is_poly_convex_v2(), ISECT_LINE_LINE_CROSS, isect_seg_seg_v2(), l, BMFace::len, len, mul_v2_fl(), mul_v2_m3v3(), BMLoop::next, BMFace::no, blender::math::normalize(), BMLoop::prev, sub_v2_v2(), UNLIKELY, and UNPACK2.
Referenced by bm_face_connect_verts(), and bm_face_split_find().
This simply checks that the verts don't connect faces which would have more optimal splits. but not check for correctness.
Definition at line 1411 of file bmesh_polygon.cc.
References BM_vert_pair_share_face_by_angle(), i, len, and v.
Referenced by bm_face_connect_verts().
| void BM_face_triangulate | ( | BMesh * | bm, |
| BMFace * | f, | ||
| BMFace ** | r_faces_new, | ||
| int * | r_faces_new_tot, | ||
| BMEdge ** | r_edges_new, | ||
| int * | r_edges_new_tot, | ||
| struct LinkNode ** | r_faces_double, | ||
| int | quad_method, | ||
| int | ngon_method, | ||
| bool | use_tag, | ||
| struct MemArena * | pf_arena, | ||
| struct Heap * | pf_heap ) |
BMESH TRIANGULATE FACE.
Breaks all quads and ngons down to triangles. It uses poly-fill for the ngons splitting, and the beautify operator when use_beauty is true.
| r_faces_new | if non-null, must be an array of BMFace pointers, with a length equal to (f->len - 3). It will be filled with the new triangles (not including the original triangle). |
| r_faces_double | When newly created faces are duplicates of existing faces, they're added to this list. Caller must handle de-duplication. This is done because its possible all faces exist already, and in that case we would have to remove all faces including the one passed, which causes complications adding/removing faces while looking over them. |
Definition at line 762 of file bmesh_polygon.cc.
References bm_loop_normal_accum(), bmesh_disk_edge_next(), e, l, len, normalize_v3(), v, and zero_v3().
Referenced by BM_vert_normal_update().
Definition at line 732 of file bmesh_polygon.cc.
References BM_elem_flag_test, bm_loop_normal_accum(), bmesh_disk_edge_next(), e, l, len, normalize_v3(), v, and zero_v3().
Referenced by edbm_set_normals_from_faces_exec(), and blender::ed::transform::VertsToTransData().
| void BM_vert_normal_update | ( | BMVert * | v | ) |
update a vert normal (but not the faces incident on it)
Definition at line 817 of file bmesh_polygon.cc.
References BM_vert_calc_normal(), and v.
Referenced by bm_decim_edge_collapse(), BM_edge_normals_update(), bm_vert_connect_pair(), blender::bke::pbvh::bmesh_normals_update(), bpy_bmvert_normal_update(), and calc_solidify_normals().
| void BM_vert_normal_update_all | ( | BMVert * | v | ) |
Definition at line 790 of file bmesh_polygon.cc.
References BM_face_normal_update(), bm_loop_normal_accum(), bmesh_disk_edge_next(), e, l, len, normalize_v3(), v, and zero_v3().
Referenced by mdisp_in_mdispquad().
Calculate a tangent from any 3 vertices,
The tangent follows the center-line formed by the most unique edges center and the opposite vertex.
| r_tangent | Calculated unit length tangent (return value). |
Definition at line 373 of file bmesh_polygon.cc.
References bm_vert_tri_find_unique_edge(), mid_v3_v3v3(), normalize_v3(), sub_v3_v3v3(), and verts.
Referenced by BM_face_calc_tangent_from_edge_pair().
Calculate a tangent from any 3 vertices.
The tangent aligns to the most unique edge (the edge most unlike the other two).
| r_tangent | Calculated unit length tangent (return value). |
Definition at line 339 of file bmesh_polygon.cc.
References bm_vert_tri_find_unique_edge(), normalize_v3(), sub_v3_v3v3(), and verts.
Referenced by BM_face_calc_tangent_auto(), and blender::ed::transform::getTransformOrientation_ex().
| void BM_vert_tri_calc_tangent_pair_from_edge | ( | BMVert * | verts[3], |
| float | r_tangent_a[3], | ||
| float | r_tangent_b[3] ) |
Definition at line 348 of file bmesh_polygon.cc.
References bm_vert_tri_find_unique_edge(), cross_v3_v3v3(), len_squared_v3(), normalize_v3(), normalize_v3_v3(), sub_v3_v3v3(), and verts.
Referenced by BM_face_calc_tangent_pair_auto().
Definition at line 985 of file bmesh_polygon.cc.
References BM_verts_calc_normal_from_cloud_ex().
| void BM_verts_calc_normal_from_cloud_ex | ( | BMVert ** | varr, |
| int | varr_len, | ||
| float | r_normal[3], | ||
| float | r_center[3], | ||
| int * | r_index_tangent ) |
Calculate a normal from a vertex cloud.
Definition at line 887 of file bmesh_polygon.cc.
References BMVert::co, copy_v3_v3(), dot_v3v3(), float, FLT_MAX, i, len_squared_v3(), len_squared_v3v3(), madd_v3_v3fl(), normal_quad_v3(), normal_tri_v3(), normalize_v3(), project_plane_normalized_v3_v3v3(), and sub_v3_v3v3().
Referenced by BM_verts_calc_normal_from_cloud(), and BM_verts_sort_radial_plane().