|
Blender V4.3
|
#include "MEM_guardedalloc.h"#include "BLI_bounds.hh"#include "BLI_ghash.h"#include "BLI_heap_simple.h"#include "BLI_math_geom.h"#include "BLI_math_vector.h"#include "BLI_math_vector.hh"#include "BLI_memarena.h"#include "BLI_span.hh"#include "BLI_time.h"#include "BLI_utildefines.h"#include "BKE_ccg.hh"#include "BKE_pbvh_api.hh"#include "bmesh.hh"#include "pbvh_intern.hh"#include "CLG_log.h"#include "BKE_global.hh"Go to the source code of this file.
Classes | |
| struct | blender::bke::pbvh::EdgeQueue |
| struct | blender::bke::pbvh::EdgeQueueContext |
| struct | blender::bke::pbvh::FastNodeBuildInfo |
Namespaces | |
| namespace | blender |
| namespace | blender::bke |
| namespace | blender::bke::pbvh |
Macros | |
| #define | USE_EDGEQUEUE_EVEN_SUBDIV |
| #define | USE_EDGEQUEUE_FRONTFACE |
| #define | USE_EDGEQUEUE_TAG |
| #define | pbvh_bmesh_node_vert_use_count_is_equal(nodes, cd_face_node_offset, node, v, n) (pbvh_bmesh_node_vert_use_count_at_most(nodes, cd_face_node_offset, node, v, (n) + 1) == n) |
| #define | EDGE_QUEUE_TEST(e) BM_elem_flag_test((CHECK_TYPE_INLINE(e, BMEdge *), e), BM_ELEM_TAG) |
| #define | EDGE_QUEUE_ENABLE(e) BM_elem_flag_enable((CHECK_TYPE_INLINE(e, BMEdge *), e), BM_ELEM_TAG) |
| #define | EDGE_QUEUE_DISABLE(e) BM_elem_flag_disable((CHECK_TYPE_INLINE(e, BMEdge *), e), BM_ELEM_TAG) |
| #define | EVEN_EDGELEN_THRESHOLD 1.2f |
| #define | EVEN_GENERATION_SCALE 1.6f |
Variables | |
| static CLG_LogRef | LOG = {"pbvh.bmesh"} |
| constexpr int | blender::bke::pbvh::leaf_limit = 400 |
BMesh Utility API | |
Use some local functions which assume triangles. | |
| #define | BM_LOOPS_OF_VERT_ITER_BEGIN(l_iter_radial_, v_) |
| #define | BM_LOOPS_OF_VERT_ITER_END |
| #define | BM_FACES_OF_VERT_ITER_BEGIN(f_iter_, v_) |
| #define | BM_FACES_OF_VERT_ITER_END |
| static Bounds< float3 > | blender::bke::pbvh::negative_bounds () |
| static std::array< BMEdge *, 3 > | blender::bke::pbvh::bm_edges_from_tri (BMesh &bm, const Span< BMVert * > v_tri) |
| BLI_INLINE std::array< BMVert *, 3 > | blender::bke::pbvh::bm_face_as_array (BMFace *f) |
| static BMFace * | blender::bke::pbvh::bm_face_exists_tri_from_loop_vert (BMLoop *l_radial_first, BMVert *v_opposite) |
| static BMVert * | blender::bke::pbvh::bm_vert_hash_lookup_chain (GHash *deleted_verts, BMVert *v) |
| #define BM_FACES_OF_VERT_ITER_BEGIN | ( | f_iter_, | |
| v_ ) |
Definition at line 107 of file pbvh_bmesh.cc.
Referenced by blender::bke::pbvh::pbvh_bmesh_node_vert_use_count_at_most(), blender::bke::pbvh::pbvh_bmesh_vert_other_node_find(), and blender::bke::pbvh::pbvh_bmesh_vert_remove().
| #define BM_FACES_OF_VERT_ITER_END |
Definition at line 113 of file pbvh_bmesh.cc.
Referenced by blender::bke::pbvh::pbvh_bmesh_node_vert_use_count_at_most(), blender::bke::pbvh::pbvh_bmesh_vert_other_node_find(), and blender::bke::pbvh::pbvh_bmesh_vert_remove().
| #define BM_LOOPS_OF_VERT_ITER_BEGIN | ( | l_iter_radial_, | |
| v_ ) |
Typically using BM_LOOPS_OF_VERT and BM_FACES_OF_VERT iterators are fine, however this is an area where performance matters so do it in-line.
Take care since 'break' won't works as expected within these macros!
Definition at line 77 of file pbvh_bmesh.cc.
Referenced by blender::bke::pbvh::pbvh_bmesh_collapse_edge().
| #define BM_LOOPS_OF_VERT_ITER_END |
Definition at line 94 of file pbvh_bmesh.cc.
Referenced by blender::bke::pbvh::pbvh_bmesh_collapse_edge().
| #define EDGE_QUEUE_DISABLE | ( | e | ) | BM_elem_flag_disable((CHECK_TYPE_INLINE(e, BMEdge *), e), BM_ELEM_TAG) |
Definition at line 711 of file pbvh_bmesh.cc.
Referenced by blender::bke::pbvh::pbvh_bmesh_collapse_short_edges(), and blender::bke::pbvh::pbvh_bmesh_subdivide_long_edges().
| #define EDGE_QUEUE_ENABLE | ( | e | ) | BM_elem_flag_enable((CHECK_TYPE_INLINE(e, BMEdge *), e), BM_ELEM_TAG) |
Definition at line 709 of file pbvh_bmesh.cc.
Referenced by blender::bke::pbvh::edge_queue_insert().
| #define EDGE_QUEUE_TEST | ( | e | ) | BM_elem_flag_test((CHECK_TYPE_INLINE(e, BMEdge *), e), BM_ELEM_TAG) |
Definition at line 708 of file pbvh_bmesh.cc.
Referenced by blender::bke::pbvh::edge_queue_insert(), blender::bke::pbvh::long_edge_queue_edge_add(), blender::bke::pbvh::long_edge_queue_edge_add_recursive(), and blender::bke::pbvh::short_edge_queue_edge_add().
| #define EVEN_EDGELEN_THRESHOLD 1.2f |
Referenced by blender::bke::pbvh::long_edge_queue_edge_add_recursive().
| #define EVEN_GENERATION_SCALE 1.6f |
Referenced by blender::bke::pbvh::long_edge_queue_edge_add_recursive().
| #define pbvh_bmesh_node_vert_use_count_is_equal | ( | nodes, | |
| cd_face_node_offset, | |||
| node, | |||
| v, | |||
| n ) (pbvh_bmesh_node_vert_use_count_at_most(nodes, cd_face_node_offset, node, v, (n) + 1) == n) |
Definition at line 500 of file pbvh_bmesh.cc.
Referenced by blender::bke::pbvh::pbvh_bmesh_face_remove().
| #define USE_EDGEQUEUE_EVEN_SUBDIV |
Definition at line 33 of file pbvh_bmesh.cc.
| #define USE_EDGEQUEUE_FRONTFACE |
Definition at line 41 of file pbvh_bmesh.cc.
| #define USE_EDGEQUEUE_TAG |
Definition at line 44 of file pbvh_bmesh.cc.
| void BKE_pbvh_bmesh_after_stroke | ( | BMesh & | bm, |
| blender::bke::pbvh::Tree & | pbvh ) |
Definition at line 2470 of file pbvh_bmesh.cc.
References bm, CD_PROP_INT32, CustomData_get_offset_named(), blender::bke::pbvh::Node::flag_, blender::index_mask::IndexMask::from_bools(), blender::IndexRange::index_range(), blender::bke::pbvh::Tree::nodes_, PBVH_Leaf, BMesh::pdata, blender::bke::pbvh::Tree::tag_positions_changed(), blender::bke::pbvh::Tree::tag_topology_changed(), and BMesh::vdata.
Referenced by blender::ed::sculpt_paint::flush_update_done().
| const blender::Set< BMFace *, 0 > & BKE_pbvh_bmesh_node_faces | ( | blender::bke::pbvh::BMeshNode * | node | ) |
Definition at line 2517 of file pbvh_bmesh.cc.
Referenced by blender::ed::sculpt_paint::undo::bmesh_push(), blender::ed::sculpt_paint::islands::calc_topology_islands_bmesh(), blender::draw::pbvh::ensure_vbos_allocated_bmesh(), blender::draw::pbvh::fill_vbos_bmesh(), blender::ed::sculpt_paint::face_set::gesture_apply_bmesh(), blender::ed::sculpt_paint::hide::invert_visibility_bmesh(), and blender::ed::sculpt_paint::hide::partialvis_update_bmesh_nodes().
| const blender::Set< BMVert *, 0 > & BKE_pbvh_bmesh_node_other_verts | ( | blender::bke::pbvh::BMeshNode * | node | ) |
Definition at line 2511 of file pbvh_bmesh.cc.
Referenced by blender::ed::sculpt_paint::undo::bmesh_push(), and blender::ed::sculpt_paint::hide::partialvis_update_bmesh_nodes().
| void BKE_pbvh_bmesh_node_save_orig | ( | BMesh * | bm, |
| BMLog * | log, | ||
| blender::bke::pbvh::BMeshNode * | node, | ||
| bool | use_original ) |
In order to perform operations on the original node coordinates (currently just ray-cast), store the node's triangles and vertices.
Skips triangles that are hidden.
Definition at line 2418 of file pbvh_bmesh.cc.
References blender::VectorSet< Key, ProbingStrategy, Hash, IsEqual, Slot, Allocator >::add(), bm, BM_elem_flag_test, BM_ELEM_HIDDEN, blender::bke::pbvh::bm_face_as_array(), BM_VERT, blender::bke::pbvh::copy_original_vert(), BMesh::elem_index_dirty, blender::VectorSet< Key, ProbingStrategy, Hash, IsEqual, Slot, Allocator >::index_of(), log(), blender::VectorSet< Key, ProbingStrategy, Hash, IsEqual, Slot, Allocator >::reserve(), v, and verts.
Referenced by blender::bke::pbvh::bmesh_update_topology(), and blender::ed::sculpt_paint::dynamic_topology_update().
| const blender::Set< BMVert *, 0 > & BKE_pbvh_bmesh_node_unique_verts | ( | blender::bke::pbvh::BMeshNode * | node | ) |
Definition at line 2505 of file pbvh_bmesh.cc.
Referenced by blender::ed::sculpt_paint::cloth::apply_filter_forces_bmesh(), blender::ed::sculpt_paint::mask::apply_mask_bmesh(), blender::ed::sculpt_paint::mask::apply_new_mask_bmesh(), blender::ed::sculpt_paint::project::apply_projection_bmesh(), blender::ed::sculpt_paint::smooth::blur_geometry_data_array(), blender::ed::sculpt_paint::undo::bmesh_push(), blender::ed::sculpt_paint::calc_area_normal_and_center_node_bmesh(), blender::ed::sculpt_paint::boundary::calc_bend_bmesh(), blender::ed::sculpt_paint::calc_bmesh(), blender::ed::sculpt_paint::pose::calc_bmesh(), blender::ed::sculpt_paint::cloth::calc_constraint_factors(), blender::ed::sculpt_paint::filter::calc_enhance_details_filter(), blender::ed::sculpt_paint::calc_factors_common_bmesh(), blender::ed::sculpt_paint::calc_factors_common_from_orig_data_bmesh(), blender::ed::sculpt_paint::cloth::calc_forces_bmesh(), blender::ed::sculpt_paint::boundary::calc_grab_bmesh(), blender::ed::sculpt_paint::boundary::calc_inflate_bmesh(), blender::ed::sculpt_paint::filter::calc_inflate_filter(), blender::ed::sculpt_paint::filter::calc_random_filter(), blender::ed::sculpt_paint::filter::calc_relax_face_sets_filter(), blender::ed::sculpt_paint::filter::calc_relax_filter(), blender::ed::sculpt_paint::filter::calc_scale_filter(), blender::ed::sculpt_paint::filter::calc_sharpen_filter(), blender::ed::sculpt_paint::boundary::calc_slide_bmesh(), blender::ed::sculpt_paint::boundary::calc_smooth_bmesh(), blender::ed::sculpt_paint::filter::calc_smooth_filter(), blender::ed::sculpt_paint::filter::calc_sphere_filter(), blender::ed::sculpt_paint::filter::calc_surface_smooth_filter(), blender::ed::sculpt_paint::boundary::calc_twist_bmesh(), blender::ed::sculpt_paint::create_node_vert_offsets_bmesh(), blender::ed::sculpt_paint::mask::decrease_contrast_mask_bmesh(), blender::ed::sculpt_paint::cloth::do_simulation_step(), blender::ed::sculpt_paint::elastic_transform_node_bmesh(), blender::ed::sculpt_paint::cloth::ensure_nodes_constraints(), blender::ed::sculpt_paint::fake_neighbor_search_bmesh(), blender::ed::sculpt_paint::mask::fill_mask_bmesh(), blender::ed::sculpt_paint::mask::gesture_apply_for_symmetry_pass(), blender::ed::sculpt_paint::pose::grow_factors_bmesh(), blender::ed::sculpt_paint::mask::grow_mask_bmesh(), blender::ed::sculpt_paint::mask::increase_contrast_mask_bmesh(), blender::ed::sculpt_paint::mask::invert_mask_bmesh(), blender::ed::sculpt_paint::hide::invert_visibility_bmesh(), blender::ed::sculpt_paint::filter::mesh_filter_sharpen_init(), blender::ed::sculpt_paint::nearest_vert_calc_bmesh(), blender::ed::sculpt_paint::hide::partialvis_update_bmesh_nodes(), blender::ed::sculpt_paint::undo::restore_mask_from_undo_step(), blender::ed::sculpt_paint::undo::restore_position_from_undo_step(), blender::ed::sculpt_paint::sample_node_surface_bmesh(), blender::ed::sculpt_paint::mask::sculpt_mask_init_exec(), blender::ed::sculpt_paint::mask::sharpen_mask_bmesh(), blender::ed::sculpt_paint::mask::shrink_mask_bmesh(), blender::ed::sculpt_paint::mask::smooth_mask_bmesh(), blender::ed::sculpt_paint::transform_node_bmesh(), and blender::ed::sculpt_paint::expand::update_mask_bmesh().
| void BKE_pbvh_node_mark_topology_update | ( | blender::bke::pbvh::Node & | node | ) |
Definition at line 2500 of file pbvh_bmesh.cc.
References PBVH_UpdateTopology.
Referenced by blender::ed::sculpt_paint::dynamic_topology_update(), and blender::ed::sculpt_paint::dyntopo::sculpt_detail_flood_fill_exec().
|
static |
Definition at line 30 of file pbvh_bmesh.cc.