|
Blender V4.3
|
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 596 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 1333 of file bmesh_polygon.cc.
References BLI_assert, BM_FACE_FIRST_LOOP, l, BMFace::len, and BMLoop::next.
Referenced by bm_grid_fill_array().
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 1320 of file bmesh_polygon.cc.
References BLI_assert, BM_FACE_FIRST_LOOP, l, BMFace::len, and BMLoop::next.
faster alternative to: BM_iter_as_array(bm, BM_VERTS_OF_FACE, f, (void **)v, 4);
Definition at line 1305 of file bmesh_polygon.cc.
References BLI_assert, BM_FACE_FIRST_LOOP, l, BMFace::len, BMLoop::next, and BMLoop::v.
Referenced by BM_face_calc_tangent_edge_pair(), 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 1292 of file bmesh_polygon.cc.
References BLI_assert, BM_FACE_FIRST_LOOP, l, BMFace::len, BMLoop::next, and BMLoop::v.
Referenced by BM_face_calc_tangent_auto(), BM_face_calc_tangent_edge_pair(), 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 200 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 250 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 233 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 214 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 498 of file bmesh_polygon.cc.
References BM_FACE_FIRST_LOOP, BMVert::co, 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 507 of file bmesh_polygon.cc.
References BM_FACE_FIRST_LOOP, BMVert::co, INIT_MINMAX, 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 522 of file bmesh_polygon.cc.
References BLI_assert, bm, BM_elem_index_get, BM_FACE_FIRST_LOOP, BM_VERT, BMesh::elem_index_dirty, INIT_MINMAX, 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 544 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(), mesh_customdatacorrect_apply_vert(), mouse_mesh_loop(), skin_hole_target_face(), sort_bmelem_flag(), 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 902 of file bmesh_polygon.cc.
References BLI_assert, bm, bm_face_calc_poly_center_median_vertex_cos(), BM_VERT, and BMesh::elem_index_dirty.
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 557 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 714 of file bmesh_polygon.cc.
References bm_face_calc_poly_normal(), BM_FACE_FIRST_LOOP, BMVert::co, l, BMFace::len, BMLoop::next, 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(), bm_partial_faces_parallel_range_calc_normals_cb(), and bmesh_calc_tessellation_for_face_impl().
Calculates the face subset normal.
Definition at line 882 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 255 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 268 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 162 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::next, BMLoop::prev, 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 480 of file bmesh_polygon.cc.
References BM_face_as_array_vert_tri(), BM_face_calc_tangent_edge(), BM_face_calc_tangent_edge_pair(), BM_vert_tri_calc_tangent_edge(), BMFace::len, and verts.
Referenced by BM_editselection_plane(), BM_loop_interp_from_face(), and getTransformOrientation_ex().
Compute the tangent of the face, using the longest edge.
Definition at line 351 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 420 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 360 of file bmesh_polygon.cc.
References add_v3_v3v3(), BM_face_as_array_vert_quad(), BM_face_as_array_vert_tri(), BM_face_find_longest_loop(), BM_vert_tri_calc_tangent_edge_pair(), BMVert::co, copy_v3_v3(), BMFace::len, len_squared_v3(), len_squared_v3v3(), BMLoop::next, normalize_v3(), normalize_v3_v3(), BMLoop::prev, sub_v3_v3v3(), UNLIKELY, BMLoop::v, and verts.
Referenced by BM_face_calc_tangent_auto(), and bpy_bmface_calc_tangent_edge_pair().
Compute the tangent of the face, using longest distance between vertices on the face.
Definition at line 452 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_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 111 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 923 of file bmesh_polygon.cc.
References bm, BM_face_normal_flip_ex(), CD_MDISPS, CustomData_get_offset(), and BMesh::ldata.
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 914 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 740 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 929 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, 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 1180 of file bmesh_polygon.cc.
References add_v2_fl(), add_v2_v2(), 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, BMVert::co, EDGE_SHARE_VERT, BMesh::elem_index_dirty, float, FLT_MAX, is_poly_convex_v2(), ISECT_LINE_LINE_CROSS, isect_seg_seg_v2(), l, BMFace::len, len, max_ff(), mid_v2_v2v2(), mul_v2_fl(), mul_v2_m3v3(), BMLoop::next, BMFace::no, sub_v2_v2(), UNPACK2, and BMLoop::v.
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 1278 of file bmesh_polygon.cc.
References BM_vert_pair_share_face_by_angle(), 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 654 of file bmesh_polygon.cc.
References bm_loop_normal_accum(), bmesh_disk_edge_next(), BMVert::e, e, l, len, normalize_v3(), BMLoop::radial_next, BMLoop::v, v, and zero_v3().
Referenced by BM_vert_normal_update().
Definition at line 624 of file bmesh_polygon.cc.
References BM_elem_flag_test, bm_loop_normal_accum(), bmesh_disk_edge_next(), BMVert::e, e, BMLoop::f, l, len, normalize_v3(), BMLoop::radial_next, BMLoop::v, v, and zero_v3().
Referenced by edbm_set_normals_from_faces_exec(), and VertsToTransData().
| void BM_vert_normal_update | ( | BMVert * | v | ) |
update a vert normal (but not the faces incident on it)
Definition at line 709 of file bmesh_polygon.cc.
References BM_vert_calc_normal(), BMVert::no, 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 682 of file bmesh_polygon.cc.
References BM_face_normal_update(), bm_loop_normal_accum(), bmesh_disk_edge_next(), BMVert::e, e, BMLoop::f, l, len, BMVert::no, normalize_v3(), BMLoop::radial_next, BMLoop::v, v, and zero_v3().
Referenced by mdisp_in_mdispquad().
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 328 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 getTransformOrientation_ex().
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 337 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_edge_pair().
Definition at line 877 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 779 of file bmesh_polygon.cc.
References BMVert::co, copy_v3_v3(), dot_v3v3(), float, FLT_MAX, 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().