|
Blender V5.0
|
#include <BLI_index_mask.hh>
Inherits blender::index_mask::IndexMaskData.
Public Types | |
| using | Initializer = std::variant<IndexRange, Span<int64_t>, Span<int>, int64_t> |
Static Public Member Functions | |
| template<typename T> | |
| static IndexMask | from_indices (Span< T > indices, IndexMaskMemory &memory) |
| static IndexMask | from_bits (BitSpan bits, IndexMaskMemory &memory) |
| static IndexMask | from_bits (const IndexMask &universe, BitSpan bits, IndexMaskMemory &memory) |
| static IndexMask | from_bools (Span< bool > bools, IndexMaskMemory &memory) |
| static IndexMask | from_bools (const VArray< bool > &bools, IndexMaskMemory &memory) |
| static IndexMask | from_bools_inverse (const VArray< bool > &bools, IndexMaskMemory &memory) |
| static IndexMask | from_bools (const IndexMask &universe, Span< bool > bools, IndexMaskMemory &memory) |
| static IndexMask | from_bools_inverse (const IndexMask &universe, Span< bool > bools, IndexMaskMemory &memory) |
| static IndexMask | from_bools (const IndexMask &universe, const VArray< bool > &bools, IndexMaskMemory &memory) |
| static IndexMask | from_bools_inverse (const IndexMask &universe, const VArray< bool > &bools, IndexMaskMemory &memory) |
| template<typename T> | |
| static IndexMask | from_ranges (OffsetIndices< T > offsets, const IndexMask &mask, IndexMaskMemory &memory) |
| static IndexMask | from_repeating (const IndexMask &mask_to_repeat, int64_t repetitions, int64_t stride, int64_t initial_offset, IndexMaskMemory &memory) |
| static IndexMask | from_every_nth (int64_t n, int64_t indices_num, const int64_t initial_offset, IndexMaskMemory &memory) |
| static IndexMask | from_segments (Span< IndexMaskSegment > segments, IndexMaskMemory &memory) |
| static IndexMask | from_initializers (const Span< Initializer > initializers, IndexMaskMemory &memory) |
| static IndexMask | from_union (const IndexMask &mask_a, const IndexMask &mask_b, IndexMaskMemory &memory) |
| static IndexMask | from_union (Span< IndexMask > masks, IndexMaskMemory &memory) |
| static IndexMask | from_difference (const IndexMask &mask_a, const IndexMask &mask_b, IndexMaskMemory &memory) |
| static IndexMask | from_intersection (const IndexMask &mask_a, const IndexMask &mask_b, IndexMaskMemory &memory) |
| static IndexMask | from_batch_predicate (const IndexMask &universe, GrainSize grain_size, IndexMaskMemory &memory, FunctionRef< int64_t(const IndexMaskSegment &universe_segment, IndexRangesBuilder< int16_t > &builder)> batch_predicate) |
| static Vector< IndexMask, 4 > | from_group_ids (const VArray< int > &group_ids, IndexMaskMemory &memory, VectorSet< int > &r_index_by_group_id) |
| static Vector< IndexMask, 4 > | from_group_ids (const IndexMask &universe, const VArray< int > &group_ids, IndexMaskMemory &memory, VectorSet< int > &r_index_by_group_id) |
| static void | foreach_segment_zipped (Span< IndexMask > masks, FunctionRef< bool(Span< IndexMaskSegment > segments)> fn) |
Friends | |
| bool | operator== (const IndexMask &a, const IndexMask &b) |
| bool | operator!= (const IndexMask &a, const IndexMask &b) |
#IndexMask Inline Methods | |
| IndexMask () | |
| IndexMask (int64_t size) | |
| IndexMask (IndexRange range) | |
| int64_t | size () const |
| bool | is_empty () const |
| IndexRange | index_range () const |
| int64_t | first () const |
| int64_t | last () const |
| IndexRange | bounds () const |
| int64_t | min_array_size () const |
| RawMaskIterator | index_to_iterator (int64_t index) const |
| int64_t | iterator_to_index (const RawMaskIterator &it) const |
| int64_t | operator[] (int64_t i) const |
| int64_t | operator[] (const RawMaskIterator &it) const |
| IndexMask | slice (IndexRange range) const |
| int64_t | segments_num () const |
| IndexMaskSegment | segment (int64_t segment_i) const |
| template<typename Fn> | |
| void | foreach_index (Fn &&fn) const |
| template<typename Fn> | |
| void | foreach_index (GrainSize grain_size, Fn &&fn) const |
| template<typename IndexT, typename Fn> | |
| void | foreach_index_optimized (Fn &&fn) const |
| template<typename IndexT, typename Fn> | |
| void | foreach_index_optimized (GrainSize grain_size, Fn &&fn) const |
| template<typename Fn> | |
| void | foreach_segment (Fn &&fn) const |
| template<typename Fn> | |
| void | foreach_segment (GrainSize grain_size, Fn &&fn) const |
| template<typename Fn> | |
| void | foreach_segment_optimized (Fn &&fn) const |
| template<typename Fn> | |
| void | foreach_segment_optimized (GrainSize grain_size, Fn &&fn) const |
| template<typename Fn> | |
| void | foreach_range (Fn &&fn) const |
| std::optional< IndexRange > | to_range () const |
| template<int64_t N = 4> | |
| Vector< std::variant< IndexRange, IndexMaskSegment >, N > | to_spans_and_ranges () const |
| IndexMaskData & | data_for_inplace_construction () |
| template<typename Fn> | |
| static IndexMask | from_predicate (const IndexMask &universe, GrainSize grain_size, IndexMaskMemory &memory, Fn &&predicate) |
| template<typename T, typename Fn> | |
| static void | from_groups (const IndexMask &universe, IndexMaskMemory &memory, Fn &&get_group_index, MutableSpan< IndexMask > r_masks) |
An IndexMask is a sequence of unique and sorted indices (BLI_unique_sorted_indices.hh). It's commonly used when a subset of elements in an array has to be processed.
IndexMask is a non-owning container. That data it references is usually either statically allocated or is owned by an IndexMaskMemory.
Internally, an index mask is split into an arbitrary number of ordered segments. Each segment contains up to max_segment_size (2^14 = 16384) indices. The indices in a segment are stored as int16_t, but each segment also has a int64_t offset.
The data structure is designed to satisfy the following key requirements:
Construction: A new index mask is usually created by calling one of its constructors which are O(1), or for more complex masks, by calling various IndexMask::from_* functions that create masks from various sources. Those generally need additional memory which is provided with by an IndexMaskMemory.
Some of the IndexMask::from_* functions have an IndexMask universe input. When provided, the function will only consider the indices in the "universe". The term comes from mathematics: https://en.wikipedia.org/wiki/Universe_(mathematics).
Iteration: To iterate over the indices, one usually has to use one of the foreach_* functions which require a callback function. Due to the internal segmentation of the index mask, this is more efficient than using a normal C++ iterator and range-based for loops.
There are multiple variants of the foreach_* functions which are useful in different scenarios. The callback can generally take one or two arguments. The first is the index stored in the mask and the second is the index that would have to be passed into operator[] to get the first index.
The foreach_* methods also accept an optional GrainSize argument. When that is provided, multi-threading is used when appropriate. Integrating multi-threading at this level works well because mask iteration and parallelism are often used at the same time.
Extraction: An IndexMask can be converted into various other forms using the to_* methods.
Definition at line 188 of file BLI_index_mask.hh.
| using blender::index_mask::IndexMask::Initializer = std::variant<IndexRange, Span<int64_t>, Span<int>, int64_t> |
Construct a mask from some parts. This is mainly meant for more concise testing code. The individual items are unioned together.
Definition at line 251 of file BLI_index_mask.hh.
|
inline |
Construct an empty mask.
Definition at line 660 of file BLI_index_mask.hh.
References blender::index_mask::init_empty_mask().
Referenced by complement(), foreach_segment_zipped(), from_batch_predicate(), from_bits(), from_bits(), from_bools(), from_bools(), from_bools(), from_bools(), from_bools_inverse(), from_bools_inverse(), from_bools_inverse(), from_difference(), from_every_nth(), from_group_ids(), from_group_ids(), from_groups(), from_indices(), from_initializers(), from_intersection(), from_predicate(), from_ranges(), from_repeating(), from_segments(), from_union(), from_union(), operator!=, operator==, shift(), slice(), slice(), slice(), slice_and_shift(), slice_and_shift(), slice_content(), and slice_content().
|
inlineexplicit |
Construct a mask that contains the indices from 0 to size - 1. This takes O(1) time.
Definition at line 665 of file BLI_index_mask.hh.
References blender::index_mask::IndexMaskData::begin_index_in_segment_, blender::index_mask::IndexMaskData::end_index_in_segment_, blender::index_mask::get_static_index_mask_for_min_size(), blender::index_mask::IndexMaskData::indices_num_, blender::index_mask::init_empty_mask(), blender::index_mask::max_segment_size, blender::index_mask::max_segment_size_mask_high, blender::index_mask::max_segment_size_shift, blender::index_mask::IndexMaskData::segments_num_, and size().
|
inline |
Construct a mask that contains the indices in the range. This takes O(1) time.
Definition at line 678 of file BLI_index_mask.hh.
References blender::index_mask::IndexMaskData::begin_index_in_segment_, blender::index_mask::IndexMaskData::cumulative_segment_sizes_, blender::index_mask::IndexMaskData::end_index_in_segment_, blender::IndexRange::first(), blender::index_mask::get_static_index_mask_for_min_size(), blender::index_mask::IndexMaskData::indices_by_segment_, blender::index_mask::IndexMaskData::indices_num_, blender::index_mask::init_empty_mask(), blender::IndexRange::is_empty(), blender::IndexRange::last(), blender::index_mask::max_segment_size_mask_high, blender::index_mask::max_segment_size_mask_low, blender::index_mask::max_segment_size_shift, blender::IndexRange::one_after_last(), blender::index_mask::IndexMaskData::segment_offsets_, blender::index_mask::IndexMaskData::segments_num_, and blender::IndexRange::size().
|
inline |
Returns the smallest range that contains all indices stored in this mask.
Definition at line 714 of file BLI_index_mask.hh.
References first(), blender::IndexRange::from_begin_end_inclusive(), is_empty(), and last().
Referenced by from_repeating().
| IndexMask blender::index_mask::IndexMask::complement | ( | const IndexMask & | universe, |
| IndexMaskMemory & | memory ) const |
Definition at line 404 of file index_mask.cc.
References blender::index_mask::evaluate_expression(), IndexMask(), and blender::index_mask::ExprBuilder::subtract().
Referenced by blender::build_sequential(), blender::geometry::convert_curves_to_bezier(), blender::geometry::convert_curves_to_catmull_rom_or_poly(), blender::geometry::convert_curves_to_nurbs(), blender::nodes::node_geo_curves_to_grease_pencil_cc::curves_to_grease_pencil_with_one_layer(), blender::io::grease_pencil::SVGExporter::export_grease_pencil_objects(), blender::draw::extract_lines_bm(), blender::draw::extract_lines_mesh(), blender::ed::curves::pen_tool::extrude_curves(), blender::ed::greasepencil::extrude_grease_pencil_curves(), blender::geometry::fillet_curves(), blender::geometry::fit_poly_to_bezier_curves(), blender::generate_curves(), blender::ed::greasepencil::get_reordered_indices(), blender::ed::greasepencil::grease_pencil_copy_strokes_exec(), blender::ed::curves::pen_tool::insert_point_to_curve(), blender::modify_drawing(), blender::geometry::propagate_instances_to_keep(), blender::bke::CurvesGeometry::remove_curves(), blender::bke::CurvesGeometry::remove_points(), blender::geometry::resample_to_count(), blender::geometry::resample_to_evaluated(), blender::geometry::resample_to_length(), blender::geometry::resample_to_uniform(), blender::geometry::resample_to_uniform(), blender::ed::curves::resize_curves(), blender::ed::sculpt_paint::select_grow::select_grow_invoke_per_curve(), blender::ed::curves::select_random_exec(), blender::ed::pointcloud::select_random_exec(), blender::ed::greasepencil::selection_update(), blender::ed::greasepencil::simplify_fixed(), blender::geometry::split_edges(), blender::geometry::subdivide_curves(), blender::bke::greasepencil::Drawing::tag_topology_changed(), blender::index_mask::tests::TEST(), to_ranges_invert(), and blender::geometry::trim_curves().
| bool blender::index_mask::IndexMask::contains | ( | int64_t | query_index | ) | const |
Definition at line 941 of file index_mask.cc.
References find().
Referenced by blender::draw::grease_pencil_geom_batch_ensure(), blender::draw::grease_pencil_get_visible_nurbs_points(), blender::ed::greasepencil::retrieve_editable_fill_strokes(), blender::index_mask::tests::TEST(), and blender::ed::transform::curves::update_handle_types_for_transform().
Is used by some functions to get low level access to the mask in order to construct it.
Definition at line 806 of file BLI_index_mask.hh.
| std::optional< RawMaskIterator > blender::index_mask::IndexMask::find | ( | int64_t | query_index | ) | const |
Definition at line 873 of file index_mask.cc.
References find_larger_equal().
Referenced by contains().
| std::optional< RawMaskIterator > blender::index_mask::IndexMask::find_larger_equal | ( | int64_t | query_index | ) | const |
Definition at line 883 of file index_mask.cc.
References BLI_assert, blender::binary_search::first_if(), i, blender::index_mask::IndexMaskData::indices_by_segment_, blender::OffsetSpan< T, BaseT >::last(), blender::index_mask::max_segment_size, segment(), and blender::index_mask::IndexMaskData::segments_num_.
Referenced by find(), find_smaller_equal(), and slice_content().
| std::optional< RawMaskIterator > blender::index_mask::IndexMask::find_smaller_equal | ( | int64_t | query_index | ) | const |
Definition at line 909 of file index_mask.cc.
References blender::index_mask::IndexMaskData::begin_index_in_segment_, blender::index_mask::IndexMaskData::cumulative_segment_sizes_, blender::index_mask::IndexMaskData::end_index_in_segment_, find_larger_equal(), blender::index_mask::IndexMaskData::indices_num_, and blender::index_mask::IndexMaskData::segments_num_.
Referenced by slice_content().
|
inline |
Definition at line 724 of file BLI_index_mask.hh.
References blender::index_mask::IndexMaskData::begin_index_in_segment_, BLI_assert, blender::index_mask::IndexMaskData::indices_by_segment_, blender::index_mask::IndexMaskData::indices_num_, and blender::index_mask::IndexMaskData::segment_offsets_.
Referenced by bounds(), blender::ed::transform::curves::curve_populate_trans_data_structs(), blender::io::grease_pencil::SVGExporter::export_scene(), blender::ed::greasepencil::grease_pencil_set_active_material_exec(), shift(), to_range(), and blender::io::grease_pencil::SVGExporter::write_animation_node().
|
inline |
Calls the function once for every index.
Supported function signatures:
i is the index that should be processed and pos is the position of that index in the mask: i == mask[pos]
Definition at line 816 of file BLI_index_mask.hh.
References foreach_segment(), i, and indices.
Referenced by blender::nodes::node_geo_instance_on_points_cc::add_instances_from_component(), blender::ed::greasepencil::apply_color_operation_for_mode(), blender::ed::greasepencil::apply_eval_grease_pencil_data(), blender::ed::greasepencil::apply_mask_as_selection(), blender::ed::sculpt_paint::mask::apply_mask_from_settings(), blender::ed::sculpt_paint::mask::apply_new_mask_bmesh(), blender::ed::sculpt_paint::mask::apply_new_mask_grids(), blender::ed::sculpt_paint::mask::apply_new_mask_mesh(), blender::ed::sculpt_paint::smooth::blur_geometry_data_array(), blender::bke::pbvh::bmesh_normals_update(), blender::ed::greasepencil::build_curves_2d_bvh_from_visible(), blender::build_sequential(), blender::draw::build_tris_from_subdiv_quad_selection(), blender::geometry::calc_all_corner_groups(), blender::ed::sculpt_paint::auto_mask::Cache::calc_cavity_factor(), blender::ed::sculpt_paint::cloth::calc_constraint_factors(), blender::draw::calc_edit_handles_ibo(), blender::ed::sculpt_paint::filter::calc_enhance_details_filter(), blender::ed::sculpt_paint::filter::calc_erase_displacement_filter(), blender::ed::sculpt_paint::filter::calc_inflate_filter(), blender::geometry::calc_new_edges(), blender::bke::pbvh::calc_node_face_normals(), blender::bke::pbvh::calc_node_vert_normals(), 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::filter::calc_smooth_filter(), blender::ed::sculpt_paint::calc_smooth_translations(), blender::ed::sculpt_paint::filter::calc_sphere_filter(), blender::ed::sculpt_paint::filter::calc_surface_smooth_filter(), blender::ed::sculpt_paint::expand::calc_topology_falloff_from_verts(), blender::ed::sculpt_paint::islands::calc_topology_islands_bmesh(), blender::ed::sculpt_paint::islands::calc_topology_islands_mesh(), blender::geometry::ngon::calc_tris_by_ngon(), calculate_average_color(), blender::ed::curves::pen_tool::calculate_center_of_mass(), blender::geometry::calculate_result_offsets(), blender::geometry::calculate_result_offsets(), blender::ed::sculpt_paint::greasepencil::calculate_view_positions(), blender::ed::sculpt_paint::greasepencil::calculate_view_radii(), blender::ed::sculpt_paint::face_set::clear_face_sets(), blender::ed::sculpt_paint::cloth::cloth_brush_apply_brush_forces(), blender::ed::sculpt_paint::cloth::cloth_sim_initialize_default_node_state(), blender::ed::sculpt_paint::paint::image::collect_dirty_tiles(), blender::geometry::compute_curve_trim_parameters(), blender::nodes::node_geo_uv_pack_islands_cc::construct_uv_gvarray(), blender::nodes::node_geo_uv_unwrap_cc::construct_uv_gvarray(), blender::geometry::convert_curves_to_bezier(), blender::geometry::convert_curves_to_catmull_rom_or_poly(), blender::geometry::convert_curves_to_nurbs(), blender::array_utils::copy_group_to_group(), blender::bke::copy_point_selection_custom_knots(), blender::nodes::node_geo_duplicate_elements_cc::copy_stable_id_curves(), blender::nodes::node_geo_duplicate_elements_cc::copy_stable_id_edges(), blender::io::hydra::copy_submesh(), blender::create_dashes(), blender::draw::create_edit_points_data(), blender::create_envelope_strokes(), blender::ed::sculpt_paint::create_node_vert_offsets(), blender::ed::sculpt_paint::create_node_vert_offsets(), blender::ed::sculpt_paint::create_node_vert_offsets_bmesh(), blender::draw::create_segments_with_cyclic(), blender::bke::create_tree_from_edges(), blender::bke::create_tree_from_tris(), blender::bke::create_tree_from_verts(), blender::nodes::node_geo_curves_to_grease_pencil_cc::curve_instances_to_grease_pencil_layers(), blender::ed::greasepencil::curve_merge_by_distance(), blender::ed::transform::curves::curve_populate_trans_data_structs(), blender::bke::curves::curve_to_point_selection(), blender::bke::curves_copy_point_selection(), blender::deform_drawing(), blender::deform_drawing(), blender::deform_drawing_as_envelope(), blender::ed::sculpt_paint::boundary::do_bend_brush(), blender::ed::sculpt_paint::brushes::do_bmesh_topology_rake_brush(), blender::ed::sculpt_paint::brushes::do_clay_brush(), blender::ed::sculpt_paint::brushes::do_clay_strips_brush(), blender::ed::sculpt_paint::brushes::do_clay_thumb_brush(), blender::ed::sculpt_paint::brushes::do_displacement_eraser_brush(), blender::ed::sculpt_paint::brushes::do_displacement_smear_brush(), blender::ed::sculpt_paint::brushes::do_draw_vector_displacement_brush(), blender::ed::sculpt_paint::brushes::do_elastic_deform_brush(), blender::ed::sculpt_paint::brushes::do_enhance_details_brush(), blender::ed::sculpt_paint::boundary::do_grab_brush(), blender::ed::sculpt_paint::brushes::do_grab_brush(), blender::ed::sculpt_paint::boundary::do_inflate_brush(), blender::ed::sculpt_paint::brushes::do_inflate_brush(), blender::ed::sculpt_paint::brushes::do_layer_brush(), blender::ed::sculpt_paint::brushes::do_mask_brush(), blender::ed::sculpt_paint::brushes::do_multiplane_scrape_brush(), blender::ed::sculpt_paint::color::do_paint_brush(), blender::ed::sculpt_paint::brushes::do_pinch_brush(), blender::ed::sculpt_paint::brushes::do_plane_brush(), blender::ed::sculpt_paint::pose::do_pose_brush(), blender::ed::sculpt_paint::brushes::do_rotate_brush(), blender::ed::sculpt_paint::boundary::do_slide_brush(), blender::ed::sculpt_paint::boundary::do_smooth_brush(), blender::ed::sculpt_paint::brushes::do_smooth_brush(), blender::ed::sculpt_paint::brushes::do_smooth_mask_brush(), blender::ed::sculpt_paint::brushes::do_snake_hook_brush(), blender::ed::sculpt_paint::brushes::do_thumb_brush(), blender::ed::sculpt_paint::brushes::do_topology_slide_brush(), blender::ed::sculpt_paint::boundary::do_twist_brush(), do_vpaint_brush_blur_loops(), do_vpaint_brush_blur_verts(), do_vpaint_brush_smear(), do_wpaint_brush_blur(), do_wpaint_brush_draw(), do_wpaint_brush_smear(), blender::draw::overlay::GreasePencil::draw_grease_pencil(), blender::ed::greasepencil::image_render::draw_grease_pencil_strokes(), blender::geometry::duplicate_fillet_point_data(), blender::nodes::node_geo_duplicate_elements_cc::duplicate_instances(), blender::nodes::node_geo_duplicate_elements_cc::duplicate_layers(), blender::ed::sculpt_paint::dynamic_topology_update(), blender::nodes::node_geo_edge_paths_to_curves_cc::edge_paths_to_curves_convert(), blender::nodes::node_geo_edge_paths_to_selection_cc::edge_paths_to_selection(), blender::nodes::node_geo_scale_elements_cc::edge_to_vert_islands(), blender::ed::sculpt_paint::face_set::edit_fairing(), blender::ed::curves::end_points(), blender::draw::pbvh::DrawCacheImpl::ensure_lines_batches(), blender::draw::pbvh::DrawCacheImpl::ensure_tris_batches(), blender::draw::pbvh::ensure_vbos_allocated_bmesh(), blender::draw::pbvh::ensure_vbos_allocated_grids(), blender::draw::pbvh::ensure_vbos_allocated_mesh(), blender::bke::CurvesGeometry::evaluated_tangents(), blender::ed::curves::cyclic_toggle::exec(), blender::ed::sculpt_paint::DeleteOperationExecutor::execute(), blender::ed::sculpt_paint::ScaleCurvesEffect::execute(), blender::io::grease_pencil::SVGExporter::export_scene(), blender::geometry::extend_curves(), blender::draw::extract_edit_data(), blender::draw::extract_edituv_lines_mesh(), blender::draw::extract_edituv_tris_mesh(), blender::draw::extract_lines_bm(), blender::draw::extract_points_bm(), blender::ed::curves::pen_tool::extrude_curves(), blender::ed::greasepencil::extrude_grease_pencil_curves(), blender::nodes::node_geo_extrude_mesh_cc::extrude_individual_mesh_faces(), blender::ed::curves::extrude_knots(), blender::nodes::node_geo_extrude_mesh_cc::extrude_mesh_edges(), blender::nodes::node_geo_extrude_mesh_cc::extrude_mesh_face_regions(), blender::ed::sculpt_paint::face_set::face_hide_update(), blender::ed::sculpt_paint::face_set::face_sets_update(), blender::nodes::node_geo_scale_elements_cc::face_to_vert_islands(), blender::ed::sculpt_paint::fake_neighbor_search(), blender::geometry::fill_bezier_data(), blender::draw::pbvh::fill_face_sets_grids(), blender::ed::sculpt_paint::mask::fill_mask_bmesh(), blender::ed::sculpt_paint::mask::fill_mask_grids(), blender::ed::sculpt_paint::mask::fill_mask_mesh(), blender::draw::pbvh::fill_masks_grids(), blender::draw::pbvh::fill_normals_grids(), blender::bke::curves::fill_points(), blender::draw::pbvh::fill_positions_grids(), blender::ed::greasepencil::find_curve_intersections(), blender::ed::greasepencil::find_curve_segments(), blender::geometry::fit_poly_to_bezier_curves(), blender::bke::flip_corner_data(), blender::bke::pbvh::Tree::flush_bounds_to_parents(), blender::ed::sculpt_paint::hide::flush_face_changes_node(), blender::draw::pbvh::flush_vbo_data(), blender::ed::curves::foreach_selectable_point_range(), from_group_ids(), from_groups(), blender::geometry::gather_attribute_propagation_components_with_custom_depths(), blender::array_utils::gather_group_to_group(), blender::array_utils::gather_group_to_group(), blender::array_utils::gather_to_groups(), blender::ed::sculpt_paint::expand::geodesic_falloff_create(), blender::ed::sculpt_paint::face_set::gesture_apply_bmesh(), blender::ed::sculpt_paint::mask::gesture_apply_for_symmetry_pass(), blender::ed::sculpt_paint::project::gesture_apply_for_symmetry_pass(), blender::ed::sculpt_paint::face_set::gesture_apply_mesh(), blender::ed::greasepencil::get_boundary_bounds(), blender::modifier::greasepencil::get_drawing_infos_by_frame(), blender::modifier::greasepencil::get_drawing_infos_by_layer(), blender::modifier::greasepencil::get_drawings_for_write(), blender::nodes::node_geo_edges_to_face_groups_cc::FaceSetFromBoundariesInput::get_varray_for_context(), blender::nodes::node_geo_input_instance_bounds_cc::InstanceBoundsField::get_varray_for_context(), blender::ed::transform::gizmo_3d_foreach_selected(), blender::draw::grease_pencil_edit_batch_ensure(), blender::draw::grease_pencil_geom_batch_ensure(), blender::ed::sculpt_paint::greasepencil::grease_pencil_interpolate_sequence_exec(), blender::ed::greasepencil::grease_pencil_material_lock_unselected_exec(), blender::ed::greasepencil::grease_pencil_material_select_exec(), blender::ed::greasepencil::grease_pencil_reproject_exec(), blender::ed::greasepencil::grease_pencil_set_handle_type_exec(), blender::ed::greasepencil::grease_pencil_set_uniform_opacity_exec(), blender::ed::greasepencil::grease_pencil_snap_compute_centroid(), blender::ed::greasepencil::grease_pencil_snap_to_cursor_exec(), blender::ed::greasepencil::grease_pencil_snap_to_grid_exec(), blender::ed::greasepencil::grease_pencil_texture_gradient_exec(), blender::draw::grease_pencil_weight_batch_ensure(), blender::draw::grease_pencil_wire_batch_ensure(), blender::ed::sculpt_paint::hide::grid_hide_update(), blender::ed::sculpt_paint::hide::grow_shrink_visibility_grid(), blender::draw::index_buf_add_bezier_handle_lines(), blender::draw::index_buf_add_line_points(), blender::draw::index_buf_add_nurbs_lines(), blender::draw::index_buf_add_points(), blender::fn::multi_function::VariableState::indices_split(), blender::ed::sculpt_paint::greasepencil::GreasePencilStrokeOperationCommon::init_auto_masking(), init_curves_selection_status(), blender::ed::sculpt_paint::mask::init_mask_grids(), blender::ed::greasepencil::insert_selected_values(), blender::geometry::interpolate_curves(), blender::geometry::interpolate_curves_with_samples(), blender::ed::sculpt_paint::mask::invert_mask_bmesh(), blender::ed::sculpt_paint::mask::invert_mask_grids(), blender::ed::sculpt_paint::hide::invert_visibility_bmesh(), blender::ed::sculpt_paint::hide::invert_visibility_grids(), blender::ed::sculpt_paint::hide::invert_visibility_mesh(), blender::geometry::mapped_corner_selection_from_face(), blender::bke::mesh_calc_edges(), blender::ed::sculpt_paint::filter::mesh_filter_sharpen_init(), blender::bke::mesh_flip_faces(), blender::geometry::mesh_merge_by_distance_all(), blender::geometry::mix_arrays(), blender::geometry::mix_curve_type(), blender::geometry::mix_handle_type_arrays(), blender::modify_curves(), blender::modify_curves(), blender::modify_drawing(), blender::modify_fill_color(), blender::modify_fill_color(), blender::modify_fill_color(), blender::modify_geometry_set(), blender::modify_opacity(), blender::modify_softness(), blender::modify_stroke_by_index(), blender::modify_stroke_by_layer(), blender::modify_stroke_by_material(), blender::modify_stroke_color(), blender::modify_stroke_color(), blender::modify_stroke_color(), blender::modify_stroke_random(), blender::ed::curves::pen_tool::move_handles_in_curve(), blender::ed::sculpt_paint::nearest_vert_calc_bmesh(), blender::ed::sculpt_paint::nearest_vert_calc_grids(), blender::ed::sculpt_paint::nearest_vert_calc_mesh(), blender::nodes::node_geo_grease_pencil_to_curves_cc::node_geo_exec(), blender::bke::pbvh::nodes_to_face_selection_grids(), blender::ed::sculpt_paint::brushes::offset_positions(), blender::ed::sculpt_paint::greasepencil::PinchOperation::on_stroke_extended(), blender::ed::sculpt_paint::greasepencil::PushOperation::on_stroke_extended(), blender::ed::sculpt_paint::greasepencil::RandomizeOperation::on_stroke_extended(), blender::ed::sculpt_paint::greasepencil::StrengthOperation::on_stroke_extended(), blender::ed::sculpt_paint::greasepencil::ThicknessOperation::on_stroke_extended(), blender::ed::sculpt_paint::greasepencil::TwistOperation::on_stroke_extended(), blender::ed::sculpt_paint::greasepencil::VertexAverageOperation::on_stroke_extended(), blender::ed::sculpt_paint::greasepencil::VertexBlurOperation::on_stroke_extended(), blender::ed::sculpt_paint::greasepencil::VertexPaintOperation::on_stroke_extended(), blender::ed::sculpt_paint::greasepencil::VertexReplaceOperation::on_stroke_extended(), blender::ed::sculpt_paint::greasepencil::VertexSmearOperation::on_stroke_extended(), blender::ed::sculpt_paint::hide::partialvis_update_bmesh_nodes(), blender::ed::curves::pen_tool::pen_find_closest_edge_point(), blender::ed::curves::pen_tool::pen_find_closest_handle(), blender::ed::curves::pen_tool::pen_find_closest_point(), blender::geometry::point_merge_by_distance(), blender::ed::sculpt_paint::undo::push_nodes(), blender::geometry::reassign_loose_edge_verts(), blender::geometry::remap_edges(), blender::reorder_cyclic_curve_points(), blender::ed::sculpt_paint::expand::reposition_pivot(), blender::geometry::resample_to_length(), blender::ed::curves::resize_curves(), blender::ed::sculpt_paint::expand::restore_color_data(), blender::ed::sculpt_paint::undo::restore_color_from_undo_step(), blender::ed::sculpt_paint::undo::restore_face_set_from_undo_step(), blender::ed::sculpt_paint::undo::restore_mask_from_undo_step(), blender::ed::sculpt_paint::undo::restore_position_from_undo_step(), blender::bke::curves::bezier::retrieve_all_positions(), blender::bke::reverse_curve_point_data(), blender::bke::CurvesGeometry::reverse_curves(), blender::bke::reverse_swap_curve_point_data(), blender::nodes::node_geo_rotate_instances_cc::rotate_instances(), blender::geometry::sample_curve_attribute(), blender::geometry::sample_curve_positions_and_handles(), blender::nodes::node_geo_scale_instances_cc::scale_instances(), blender::draw::sculpt_batches_get_ex(), blender::ed::sculpt_paint::cloth::sculpt_cloth_filter_modal(), blender::ed::sculpt_paint::color::sculpt_color_filter_apply(), blender::ed::sculpt_paint::dyntopo::sculpt_detail_flood_fill_exec(), SCULPT_do_paint_brush_image(), blender::ed::sculpt_paint::mask::sculpt_mask_filter_exec(), blender::ed::sculpt_paint::mask::sculpt_mask_init_exec(), blender::ed::sculpt_paint::sculpt_transform_all_vertices(), blender::ed::curves::select_adjacent(), blender::ed::curves::select_adjacent_mask(), blender::ed::curves::select_alternate(), blender::ed::sculpt_paint::select_grow::select_grow_invoke_per_curve(), blender::ed::curves::select_linked(), blender::geometry::separate_grease_pencil_layer_selection(), blender::ed::curves::set_attribute_invoke(), blender::ed::pointcloud::set_attribute_invoke(), blender::nodes::node_geo_set_position_cc::set_instances_position(), blender::bke::greasepencil::Drawing::set_texture_matrices(), blender::nodes::node_geo_input_shortest_edge_paths_cc::shortest_paths(), blender::ed::sculpt_paint::cloth::sim_activate_nodes(), blender::geometry::simplify_curve_attribute(), blender::geometry::smooth_curve_attribute(), blender::geometry::smooth_curve_positions(), blender::geometry::subdivide_attribute_catmull_rom(), blender::geometry::subdivide_attribute_linear(), blender::geometry::subdivide_curves(), blender::ed::greasepencil::subdivide_last_segement(), blender::index_mask::tests::TEST(), blender::ed::greasepencil::toggle_caps(), blender::ed::sculpt_paint::transform_radius_elastic(), blender::nodes::node_geo_translate_instances_cc::translate_instances(), blender::geometry::trim_bezier_curves(), blender::geometry::trim_catmull_rom_curves(), blender::ed::greasepencil::trim::trim_curve_segments(), blender::geometry::trim_evaluated_curves(), blender::geometry::trim_polygonal_curves(), blender::ed::curves::convert_to_particle_system::try_convert_single_object(), blender::ed::sculpt_paint::mask::try_remove_mask_mesh(), blender::bke::pbvh::Tree::update_bounds_bmesh(), blender::bke::pbvh::Tree::update_bounds_grids(), blender::bke::pbvh::Tree::update_bounds_mesh(), blender::bke::greasepencil::update_curve_plane_normal_cache(), blender::draw::pbvh::update_face_sets_bmesh(), blender::draw::pbvh::update_face_sets_mesh(), blender::ed::sculpt_paint::expand::update_for_vert(), blender::draw::pbvh::update_generic_attribute_bmesh(), blender::draw::pbvh::update_generic_attribute_mesh(), blender::bke::pbvh::update_mask_bmesh(), blender::bke::pbvh::update_mask_grids(), blender::bke::pbvh::update_mask_mesh(), blender::ed::sculpt_paint::mask::update_mask_mesh(), blender::draw::pbvh::update_masks_bmesh(), blender::draw::pbvh::update_masks_mesh(), blender::ed::sculpt_paint::hide::update_node_visibility_from_face_changes(), blender::draw::pbvh::update_normals_bmesh(), blender::bke::pbvh::update_normals_mesh(), blender::draw::pbvh::update_normals_mesh(), blender::draw::pbvh::update_positions_bmesh(), blender::draw::pbvh::update_positions_mesh(), blender::ed::sculpt_paint::hide::update_undo_state(), blender::geometry::update_unselected_edges(), blender::bke::pbvh::update_visibility_bmesh(), blender::bke::pbvh::update_visibility_faces(), blender::bke::pbvh::update_visibility_grids(), blender::ed::sculpt_paint::hide::vert_hide_update(), vpaint_do_draw(), blender::bke::curves::bezier::write_all_positions(), blender::io::grease_pencil::SVGExporter::write_animation_node(), blender::write_fill_transforms(), blender::ed::sculpt_paint::mask::write_mask_mesh(), blender::write_stroke_transforms(), and blender::write_weights_for_drawing().
|
inline |
Definition at line 834 of file BLI_index_mask.hh.
References index_range(), blender::threading::parallel_for(), and blender::GrainSize::value.
|
inline |
Same as foreach_index, but generates more code, increasing compile time and binary size. This is because separate loops are generated for segments that are ranges and those that are not. Only use this when very little processing is done for each index.
Definition at line 898 of file BLI_index_mask.hh.
References foreach_segment(), blender::index_mask::optimized_foreach_index(), blender::index_mask::optimized_foreach_index_with_pos(), and segment().
Referenced by blender::geometry::calc_new_edges(), blender::bke::curves::bezier::calculate_aligned_handles(), blender::array_utils::copy(), blender::bke::create_tree_from_tris(), blender::ed::greasepencil::curve_merge_by_distance(), blender::nodes::node_geo_duplicate_elements_cc::duplicate_faces(), blender::nodes::node_geo_scale_elements_cc::edge_to_vert_islands(), blender::nodes::node_geo_extrude_mesh_cc::extrude_mesh_edges(), blender::nodes::node_geo_extrude_mesh_cc::extrude_mesh_vertices(), blender::nodes::node_geo_scale_elements_cc::face_to_vert_islands(), blender::io::hydra::gather_corner_data(), blender::io::hydra::gather_face_data(), blender::offset_indices::gather_selected_offsets(), blender::ed::greasepencil::get_reordered_indices(), blender::bke::calc_edges::mask_first_distinct_edges(), blender::geometry::ngon_indices_of_tris(), blender::geometry::point_merge_by_distance(), blender::geometry::quad_indices_of_tris(), blender::nodes::node_geo_material_selection_cc::select_by_material(), blender::nodes::node_geo_sort_elements_cc::sorted_indices(), to_bools(), to_indices(), and blender::geometry::vert_selection_from_edge().
|
inline |
Definition at line 912 of file BLI_index_mask.hh.
References index_range(), blender::threading::parallel_for(), and blender::GrainSize::value.
|
inline |
Calls the function once for every range. Note that this might call the function for each index separately in the worst case if there are no consecutive indices.
Support function signatures:
Definition at line 1003 of file BLI_index_mask.hh.
References blender::Span< T >::drop_front(), blender::unique_sorted_indices::find_size_of_next_range(), foreach_segment(), blender::index_mask::has_segment_and_start_parameter, indices, and blender::Span< T >::is_empty().
Referenced by blender::ed::curves::foreach_selectable_curve_range(), blender::ed::sculpt_paint::greasepencil::simplify_opacities(), blender::geometry::smooth_curve_attribute(), blender::geometry::smooth_curve_positions(), and to_ranges().
|
inline |
Calls the function once for every segment. This should be used instead of foreach_index if the algorithm can be implemented more efficiently by processing multiple indices at once.
Supported function signatures:
The segment_pos is the position in the mask where the segment starts: segment[0] == mask[segment_pos]
Definition at line 970 of file BLI_index_mask.hh.
References blender::index_mask::has_segment_and_start_parameter, segment(), and blender::index_mask::IndexMaskData::segments_num_.
Referenced by blender::index_mask::build_result_mask_segments(), blender::geometry::ngon::calc_corner_tris(), blender::geometry::quad::calc_corner_tris(), blender::geometry::curve_constraints::compute_segment_lengths(), blender::geometry::convert_curves_to_nurbs(), blender::nodes::node_geo_extrude_mesh_cc::copy_with_mixing(), blender::ed::transform::curves::curve_populate_trans_data_structs(), blender::ed::sculpt_paint::ShrinkCurvesEffect::execute(), blender::geometry::fillet_curves(), foreach_index(), foreach_index_optimized(), foreach_range(), foreach_segment_optimized(), from_batch_predicate(), blender::index_mask::detail::from_predicate_impl(), blender::ed::sculpt_paint::PuffOperationExecutor::puff(), blender::geometry::resample_to_evaluated(), blender::geometry::resample_to_uniform(), blender::geometry::curve_constraints::solve_length_and_collision_constraints(), blender::geometry::curve_constraints::solve_length_constraints(), transform_active_color_data(), and blender::bke::greasepencil::update_triangle_cache().
|
inline |
Definition at line 986 of file BLI_index_mask.hh.
References index_range(), blender::threading::parallel_for(), and blender::GrainSize::value.
|
inline |
This is similar to foreach_segment but supports slightly different function signatures:
The segment input is either of type IndexMaskSegment or IndexRange, so the function has to support both cases. This also means that more code is generated by the compiler because the function is instantiated twice. Only use this when very little processing happens per index.
Definition at line 928 of file BLI_index_mask.hh.
References foreach_segment(), blender::index_mask::has_segment_and_start_parameter, blender::unique_sorted_indices::non_empty_is_range(), and segment().
Referenced by blender::length_parameterize::interpolate_to_masked(), set_bits(), and to_spans_and_ranges().
|
inline |
Definition at line 953 of file BLI_index_mask.hh.
References index_range(), blender::threading::parallel_for(), and blender::GrainSize::value.
|
static |
Iterate over the indices in multiple masks which have the same size. The given function is called for groups of segments where each segment has the same size and comes from a different input mask. For example, if the input masks are (both have size 18): A: [0, 15), {20, 24, 25} B: [0, 5), [10, 15], {20, 30, 40, 50, 60, 70, 80, 90} Then the function will be called multiple times, each time with two segments:
Definition at line 1078 of file index_mask.cc.
References blender::Span< T >::begin(), BLI_assert, blender::Span< T >::end(), blender::Span< T >::index_range(), IndexMask(), blender::Span< T >::is_empty(), blender::math::min(), segments_num(), size(), blender::Span< T >::size(), and blender::Span< T >::slice().
Referenced by operator==, blender::index_mask::tests::TEST(), blender::index_mask::tests::TEST(), and blender::index_mask::tests::TEST().
|
static |
This is a variant of from_predicate that is more efficient if the predicate for many indices can be evaluated at once.
| batch_predicate | A function that finds indices in a certain segment that should become part of the mask. To efficiently handle ranges, this function uses IndexRangesBuilder. It returns an index offset that should be applied to each index in the builder. |
Definition at line 553 of file index_mask.cc.
References data, blender::index_mask::ParallelSegmentsCollector::data_by_thread, foreach_segment(), from_segments(), IndexMask(), is_empty(), blender::threading::EnumerableThreadSpecific< T >::local(), blender::index_mask::ParallelSegmentsCollector::reduce(), segment(), blender::index_mask::segments_from_batch_predicate(), segments_num(), size(), and blender::GrainSize::value.
Referenced by from_bits(), and from_bools().
|
static |
Construct a mask from the indices of set bits.
Definition at line 449 of file index_mask.cc.
References from_bits(), and IndexMask().
Referenced by from_bits(), from_bools(), from_bools_inverse(), blender::index_mask::tests::TEST(), blender::index_mask::tests::TEST(), blender::index_mask::tests::TEST(), blender::index_mask::tests::TEST(), blender::index_mask::tests::TEST(), blender::index_mask::tests::TEST(), and blender::index_mask::tests::TEST().
|
static |
Construct a mask from the indices of set bits, but limited to the indices in #universe.
Definition at line 482 of file index_mask.cc.
References BLI_assert, from_batch_predicate(), blender::IndexRange::from_begin_end_inclusive(), blender::index_mask::from_bits_batch_predicate(), IndexMask(), blender::OffsetSpan< T, BaseT >::last(), blender::index_mask::max_segment_size, min_array_size(), and slice().
|
static |
Definition at line 637 of file index_mask.cc.
References blender::VArrayCommon< T >::common_info(), blender::CommonVArrayInfo::data, from_bools(), from_predicate(), IndexMask(), blender::CommonVArrayInfo::Single, blender::VArrayCommon< T >::size(), blender::CommonVArrayInfo::Span, and blender::CommonVArrayInfo::type.
|
static |
Construct a mask from the true indices, but limited by the indices in #universe.
Definition at line 599 of file index_mask.cc.
References BLI_assert, from_batch_predicate(), blender::IndexRange::from_begin_end_inclusive(), from_bits(), blender::index_mask::from_bits_batch_predicate(), IndexMask(), blender::OffsetSpan< T, BaseT >::last(), blender::index_mask::max_segment_size, min_array_size(), blender::bits::or_bools_into_bits(), blender::Span< T >::size(), slice(), and blender::Span< T >::slice().
|
static |
Definition at line 589 of file index_mask.cc.
References from_bools(), blender::VArrayCommon< T >::index_range(), and IndexMask().
|
static |
Construct a mask from the true indices.
Definition at line 584 of file index_mask.cc.
References from_bools(), blender::Span< T >::index_range(), and IndexMask().
Referenced by from_bools(), from_bools(), from_bools(), blender::index_mask::random_mask(), and blender::index_mask::tests::TEST().
|
static |
Definition at line 653 of file index_mask.cc.
References blender::VArrayCommon< T >::common_info(), blender::CommonVArrayInfo::data, from_bools_inverse(), from_predicate(), IndexMask(), blender::CommonVArrayInfo::Single, blender::VArrayCommon< T >::size(), blender::CommonVArrayInfo::Span, and blender::CommonVArrayInfo::type.
|
static |
Definition at line 628 of file index_mask.cc.
References from_bits(), IndexMask(), and blender::bits::invert().
|
static |
Definition at line 594 of file index_mask.cc.
References from_bools_inverse(), blender::VArrayCommon< T >::index_range(), and IndexMask().
Referenced by from_bools_inverse(), and from_bools_inverse().
|
static |
Construct a mask from the difference of #mask_a and #mask_b.
Definition at line 700 of file index_mask.cc.
References blender::index_mask::evaluate_expression(), IndexMask(), and blender::index_mask::ExprBuilder::subtract().
Referenced by blender::index_mask::tests::TEST().
|
static |
Constructs a mask that contains every nth index the given number of times.
Definition at line 1069 of file index_mask.cc.
References BLI_assert, from_repeating(), and IndexMask().
Referenced by blender::index_mask::tests::TEST(), and blender::index_mask::tests::TEST().
|
static |
Definition at line 1185 of file index_mask.cc.
References blender::VectorSet< Key, InlineBufferCapacity, ProbingStrategy, Hash, IsEqual, Slot, Allocator >::add(), BLI_assert, foreach_index(), from_groups(), blender::VArrayCommon< T >::get_if_single(), i, blender::VectorSet< Key, InlineBufferCapacity, ProbingStrategy, Hash, IsEqual, Slot, Allocator >::index_of(), blender::VectorSet< Key, InlineBufferCapacity, ProbingStrategy, Hash, IsEqual, Slot, Allocator >::index_of_or_add(), IndexMask(), min_array_size(), blender::Vector< T, InlineBufferCapacity, Allocator >::resize(), blender::VArrayCommon< T >::size(), and blender::VectorSet< Key, InlineBufferCapacity, ProbingStrategy, Hash, IsEqual, Slot, Allocator >::size().
|
static |
Creates an index mask for every unique group id.
Definition at line 1216 of file index_mask.cc.
References from_group_ids(), IndexMask(), and blender::VArrayCommon< T >::size().
Referenced by from_group_ids().
|
static |
Sorts all indices from #universe into the different output masks.
Definition at line 1062 of file BLI_index_mask.hh.
References blender::Vector< T, InlineBufferCapacity, Allocator >::append(), foreach_index(), blender::IndexMask::from_indices(), i, blender::MutableSpan< T >::index_range(), IndexMask(), blender::MutableSpan< T >::size(), and T.
Referenced by from_group_ids().
|
static |
Construct a mask from unique sorted indices.
Definition at line 412 of file index_mask.cc.
References BLI_system_thread_count(), blender::index_mask::consolidate_index_mask_segments(), from_segments(), IndexMask(), indices, blender::index_mask::max_segment_size, blender::unique_sorted_indices::non_empty_as_range_try(), blender::threading::parallel_for(), blender::index_mask::ParallelSegmentsCollector::reduce(), blender::Vector< T, InlineBufferCapacity, Allocator >::resize(), and blender::index_mask::segments_from_indices().
Referenced by from_initializers(), blender::index_mask::tests::TEST(), blender::index_mask::tests::TEST(), blender::index_mask::tests::TEST(), blender::index_mask::tests::TEST(), blender::index_mask::tests::TEST(), blender::index_mask::tests::TEST(), blender::index_mask::tests::TEST(), blender::index_mask::tests::TEST(), blender::index_mask::tests::TEST(), blender::index_mask::tests::TEST(), blender::index_mask::tests::TEST(), blender::index_mask::tests::TEST(), blender::index_mask::tests::TEST(), and blender::index_mask::tests::TEST().
|
static |
Definition at line 718 of file index_mask.cc.
References blender::Set< Key, InlineBufferCapacity, ProbingStrategy, Hash, IsEqual, Slot, Allocator >::add(), blender::Vector< T, InlineBufferCapacity, Allocator >::as_span(), blender::Set< Key, InlineBufferCapacity, ProbingStrategy, Hash, IsEqual, Slot, Allocator >::begin(), blender::Vector< T, InlineBufferCapacity, Allocator >::begin(), blender::Set< Key, InlineBufferCapacity, ProbingStrategy, Hash, IsEqual, Slot, Allocator >::end(), blender::Vector< T, InlineBufferCapacity, Allocator >::end(), blender::Vector< T, InlineBufferCapacity, Allocator >::extend(), from_indices(), i, and IndexMask().
Referenced by blender::index_mask::tests::TEST(), blender::index_mask::tests::TEST(), blender::index_mask::tests::TEST(), blender::index_mask::tests::TEST(), blender::index_mask::tests::TEST(), blender::index_mask::tests::TEST(), blender::index_mask::tests::TEST(), blender::index_mask::tests::TEST(), blender::index_mask::tests::TEST(), blender::index_mask::tests::TEST(), blender::index_mask::tests::TEST(), blender::index_mask::tests::TEST(), blender::index_mask::tests::TEST(), blender::index_mask::tests::TEST(), blender::index_mask::tests::TEST(), blender::index_mask::tests::TEST(), blender::index_mask::tests::TEST(), blender::index_mask::tests::TEST(), blender::index_mask::tests::TEST(), blender::index_mask::tests::TEST(), blender::index_mask::tests::TEST(), and blender::index_mask::tests::TEST().
|
static |
Construct a mask from the intersection of #mask_a and #mask_b.
Definition at line 709 of file index_mask.cc.
References blender::index_mask::evaluate_expression(), IndexMask(), and blender::index_mask::ExprBuilder::intersect().
Referenced by blender::index_mask::tests::TEST().
|
inlinestatic |
Construct a mask from all the indices for which the predicate is true.
Definition at line 1031 of file BLI_index_mask.hh.
References BLI_assert, ELEM, blender::index_mask::detail::from_predicate_impl(), IndexMask(), and indices.
Referenced by from_bools(), from_bools_inverse(), blender::index_mask::tests::TEST(), blender::index_mask::tests::TEST(), and blender::index_mask::tests::TEST().
|
static |
Construct a mask from the ranges referenced by the offset indices.
Definition at line 670 of file index_mask.cc.
References from_segments(), blender::index_mask::index_range_to_mask_segments(), IndexMask(), and mask().
Referenced by blender::index_mask::tests::TEST().
|
static |
Constructs a mask by repeating the indices in the given mask with a stride. For example, with an input mask containing {3, 5} and a stride of 10 the resulting mask would contain {3, 5, 13, 15, 23, 25, ...}.
Definition at line 994 of file index_mask.cc.
References blender::LinearAllocator< Allocator >::allocate_array(), blender::Vector< T, InlineBufferCapacity, Allocator >::append(), BLI_assert, bounds(), blender::ceil_division(), from_segments(), blender::index_mask::get_every_nth_index(), i, blender::OffsetSpan< T, BaseT >::index_range(), IndexMask(), is_empty(), last(), blender::index_mask::max_segment_size, segment(), segments_num(), size(), blender::OffsetSpan< T, BaseT >::size(), blender::Span< T >::take_front(), and to_range().
Referenced by from_every_nth(), blender::index_mask::tests::TEST(), blender::index_mask::tests::TEST(), blender::index_mask::tests::TEST(), blender::index_mask::tests::TEST(), blender::index_mask::tests::TEST(), blender::index_mask::tests::TEST(), blender::index_mask::tests::TEST(), blender::index_mask::tests::TEST(), blender::index_mask::tests::TEST(), and blender::index_mask::tests::TEST().
|
static |
Construct a mask from the given segments. The provided segments are expected to be sorted and owned by #memory already.
Definition at line 286 of file index_mask.cc.
References blender::LinearAllocator< Allocator >::allocate_array(), BLI_assert, blender::MutableSpan< T >::data(), data, blender::Span< T >::drop_front(), blender::Span< T >::index_range(), IndexMask(), blender::Span< T >::is_empty(), blender::Span< T >::last(), mask(), segment(), segments_num(), and blender::Span< T >::size().
Referenced by from_batch_predicate(), from_indices(), blender::index_mask::detail::from_predicate_impl(), from_ranges(), from_repeating(), blender::index_mask::tests::TEST(), and blender::index_mask::tests::TEST().
|
static |
Construct a mask from the union of #mask_a and #mask_b.
Definition at line 682 of file index_mask.cc.
References from_union(), and IndexMask().
Referenced by from_union(), blender::index_mask::tests::TEST(), blender::index_mask::tests::TEST(), blender::index_mask::tests::TEST(), blender::index_mask::tests::TEST(), blender::index_mask::tests::TEST(), and blender::index_mask::tests::TEST().
|
static |
Constructs a mask from the union of multiple masks.
Definition at line 689 of file index_mask.cc.
References blender::Vector< T, InlineBufferCapacity, Allocator >::append(), blender::index_mask::evaluate_expression(), IndexMask(), mask(), and blender::index_mask::ExprBuilder::merge().
|
inline |
Definition at line 709 of file BLI_index_mask.hh.
References blender::index_mask::IndexMaskData::indices_num_.
Referenced by blender::nodes::node_geo_instance_on_points_cc::add_instances_from_component(), blender::ed::sculpt_paint::average_mask_border_position(), blender::ed::sculpt_paint::average_unmasked_position(), blender::ed::sculpt_paint::calc_area_center(), blender::ed::sculpt_paint::calc_area_normal(), blender::ed::sculpt_paint::calc_area_normal_and_center(), blender::geometry::ngon::calc_corner_tris(), blender::geometry::calc_vert_ranges_per_old_vert(), calculate_average_weight(), blender::array_utils::contains(), blender::array_utils::copy(), blender::nodes::node_geo_duplicate_elements_cc::copy_stable_id_faces(), blender::ed::sculpt_paint::color::do_paint_brush(), blender::ed::sculpt_paint::fake_neighbor_search(), blender::ed::curves::find_closest_curve_to_screen_co(), blender::ed::curves::find_closest_point_to_screen_co(), blender::ed::pointcloud::find_closest_point_to_screen_co(), foreach_index(), foreach_index_optimized(), foreach_segment(), foreach_segment_optimized(), blender::ed::sculpt_paint::pose::grow_pose_factor(), blender::ed::sculpt_paint::nearest_vert_calc_bmesh(), blender::ed::sculpt_paint::nearest_vert_calc_grids(), blender::ed::sculpt_paint::nearest_vert_calc_mesh(), parallel_nodes_loop_with_mirror_check(), blender::ed::sculpt_paint::brushes::sample_surface(), blender::ed::sculpt_paint::select_grow::select_grow_invoke_per_curve(), blender::nodes::node_geo_set_curve_handles_cc::set_position_in_component(), and blender::ed::sculpt_paint::mask::try_remove_mask_mesh().
|
inline |
Definition at line 746 of file BLI_index_mask.hh.
References blender::index_mask::IndexMaskData::begin_index_in_segment_, BLI_assert, blender::index_mask::IndexMaskData::cumulative_segment_sizes_, blender::index_mask::RawMaskIterator::index_in_segment, blender::index_mask::IndexMaskData::indices_num_, blender::binary_search::last_if(), blender::index_mask::RawMaskIterator::segment_i, and blender::index_mask::IndexMaskData::segments_num_.
Referenced by operator[](), slice(), and blender::index_mask::tests::TEST().
|
inline |
Definition at line 704 of file BLI_index_mask.hh.
References blender::index_mask::IndexMaskData::indices_num_.
Referenced by blender::nodes::node_geo_instance_on_points_cc::add_instances_from_component(), blender::ed::greasepencil::apply_color_operation_for_mode(), blender::ed::greasepencil::apply_mask_as_segment_selection(), blender::ed::greasepencil::apply_mask_as_selection(), blender::ed::spreadsheet::GeometryDataSource::apply_selection_filter(), bounds(), blender::ed::sculpt_paint::greasepencil::brush_point_influence_mask(), blender::ed::spreadsheet::calc_mesh_selection_mask(), blender::nodes::node_geo_menu_switch_cc::MenuSwitchFn::call(), blender::nodes::node_geo_uv_pack_islands_cc::construct_uv_gvarray(), blender::nodes::node_geo_uv_unwrap_cc::construct_uv_gvarray(), blender::nodes::node_geo_instances_to_points_cc::convert_instances_to_points(), blender::ed::greasepencil::convert_to_bezier(), blender::ed::greasepencil::convert_to_catmull_rom(), blender::ed::greasepencil::convert_to_nurbs(), blender::ed::greasepencil::convert_to_poly(), blender::bke::copy_attributes_group_to_group(), blender::draw::create_edit_points_data(), blender::draw::create_edit_points_position(), blender::draw::create_edit_points_selection(), blender::ed::transform::curves::createTransCurvesVerts(), blender::ed::transform::greasepencil::createTransGreasePencilVerts(), blender::ed::sculpt_paint::cursor_geometry_info_update(), blender::ed::transform::curves::curve_populate_trans_data_structs(), blender::ed::curves::curves_extrude_exec(), blender::deform_drawing(), blender::deform_drawing(), blender::deform_drawing(), blender::geometry::delete_selected_instances(), blender::ed::sculpt_paint::do_brush_action(), blender::nodes::node_geo_split_to_instances_cc::do_common_split(), blender::ed::pointcloud::duplicate_exec(), blender::ed::sculpt_paint::dynamic_topology_update(), blender::modifier::greasepencil::ensure_no_bezier_curves(), blender::bke::CurvesGeometry::evaluated_tangents(), blender::ed::curves::clear_tilt::exec(), blender::ed::curves::curve_type_set::exec(), blender::ed::curves::cyclic_toggle::exec(), blender::ed::curves::subdivide::exec(), blender::ed::curves::switch_direction::exec(), blender::io::grease_pencil::SVGExporter::export_scene(), blender::geometry::extend_curves(), blender::draw::extract_lines_bm(), blender::draw::extract_lines_mesh(), blender::nodes::node_geo_extrude_mesh_cc::extrude_individual_mesh_faces(), blender::nodes::node_geo_extrude_mesh_cc::extrude_mesh_edges(), blender::nodes::node_geo_extrude_mesh_cc::extrude_mesh_face_regions(), blender::nodes::node_geo_extrude_mesh_cc::extrude_mesh_vertices(), blender::ed::sculpt_paint::face_set::face_hide_update(), blender::ed::sculpt_paint::fake_neighbor_search(), blender::geometry::fit_poly_to_bezier_curves(), blender::ed::sculpt_paint::hide::flush_face_changes_node(), from_batch_predicate(), blender::index_mask::detail::from_predicate_impl(), from_repeating(), blender::offset_indices::gather_selected_offsets(), blender::generate_curves(), blender::ed::sculpt_paint::face_set::gesture_apply_bmesh(), blender::nodes::node_geo_input_shortest_edge_paths_cc::ShortestEdgePathsCostFieldInput::get_varray_for_context(), blender::nodes::node_geo_input_shortest_edge_paths_cc::ShortestEdgePathsNextVertFieldInput::get_varray_for_context(), blender::ed::greasepencil::gpencil_stroke_subdivide_exec(), blender::draw::grease_pencil_cache_add_nurbs(), blender::ed::greasepencil::grease_pencil_caps_set_exec(), blender::ed::greasepencil::grease_pencil_convert_curve_type_exec(), blender::ed::greasepencil::grease_pencil_cyclical_set_exec(), blender::ed::greasepencil::grease_pencil_delete_exec(), blender::ed::greasepencil::grease_pencil_dissolve_exec(), blender::ed::greasepencil::grease_pencil_duplicate_exec(), blender::draw::grease_pencil_edit_batch_ensure(), blender::ed::greasepencil::grease_pencil_extrude_exec(), blender::ed::greasepencil::grease_pencil_material_lock_unselected_exec(), blender::ed::greasepencil::grease_pencil_material_select_exec(), blender::ed::greasepencil::grease_pencil_move_to_layer_exec(), blender::ed::greasepencil::grease_pencil_outline_exec(), blender::ed::greasepencil::grease_pencil_reproject_exec(), blender::ed::greasepencil::grease_pencil_reset_uvs_exec(), blender::ed::greasepencil::grease_pencil_separate_layer(), blender::ed::greasepencil::grease_pencil_separate_material(), blender::ed::greasepencil::grease_pencil_separate_selected(), blender::ed::greasepencil::grease_pencil_set_active_material_exec(), blender::ed::greasepencil::grease_pencil_set_corner_type_exec(), blender::ed::greasepencil::grease_pencil_set_curve_resolution_exec(), blender::ed::greasepencil::grease_pencil_set_curve_type_exec(), blender::ed::greasepencil::grease_pencil_set_start_point_exec(), blender::ed::greasepencil::grease_pencil_set_uniform_opacity_exec(), blender::ed::greasepencil::grease_pencil_set_uniform_thickness_exec(), blender::ed::greasepencil::grease_pencil_stroke_material_set_exec(), blender::ed::greasepencil::grease_pencil_stroke_merge_by_distance_exec(), blender::ed::greasepencil::grease_pencil_stroke_reorder_exec(), blender::ed::greasepencil::grease_pencil_stroke_simplify_exec(), blender::ed::greasepencil::grease_pencil_stroke_smooth_exec(), blender::ed::greasepencil::grease_pencil_stroke_split_exec(), blender::ed::greasepencil::grease_pencil_stroke_switch_direction_exec(), blender::ed::greasepencil::grease_pencil_texture_gradient_exec(), blender::ed::sculpt_paint::hide::grid_hide_update(), blender::ed::sculpt_paint::hide::grids_show_all(), blender::draw::index_buf_add_bezier_handle_lines(), blender::draw::index_buf_add_bezier_line_points(), blender::draw::index_buf_add_nurbs_lines(), blender::ed::sculpt_paint::greasepencil::GreasePencilStrokeOperationCommon::init_auto_masking(), blender::nodes::node_geo_proximity_cc::ProximityFunction::init_for_mesh(), blender::nodes::node_geo_proximity_cc::ProximityFunction::init_for_pointcloud(), blender::ed::sculpt_paint::face_set::init_op_exec(), blender::bke::calc_edges::mask_first_distinct_edges(), blender::geometry::mesh_copy_selection(), blender::bke::mesh_flip_faces(), blender::nodes::node_geo_merge_by_distance_cc::mesh_merge_by_distance_all(), blender::geometry::mesh_triangulate(), blender::ed::curves::pen_tool::move_handles_in_curve(), blender::ed::sculpt_paint::nearest_vert_calc_bmesh(), blender::ed::sculpt_paint::nearest_vert_calc_grids(), blender::ed::sculpt_paint::nearest_vert_calc_mesh(), blender::nodes::node_geo_curve_spline_type_cc::node_geo_exec(), blender::nodes::node_geo_flip_faces_cc::node_geo_exec(), blender::nodes::node_geo_mesh_to_curve_cc::node_geo_exec(), blender::nodes::node_geo_set_mesh_normal_cc::node_geo_exec(), blender::nodes::node_geo_triangulate_cc::node_geo_exec(), blender::ed::sculpt_paint::greasepencil::VertexAverageOperation::on_stroke_extended(), blender::ed::sculpt_paint::greasepencil::VertexBlurOperation::on_stroke_extended(), blender::ed::sculpt_paint::greasepencil::VertexPaintOperation::on_stroke_extended(), blender::ed::sculpt_paint::greasepencil::VertexReplaceOperation::on_stroke_extended(), blender::ed::sculpt_paint::greasepencil::VertexSmearOperation::on_stroke_extended(), blender::nodes::node_geo_merge_by_distance_cc::pointcloud_merge_by_distance(), blender::ed::greasepencil::polyline_fit_curve(), blender::geometry::propagate_instances_to_keep(), blender::bke::CurvesGeometry::remove_curves(), blender::bke::CurvesGeometry::remove_points(), blender::ed::sculpt_paint::remove_points_and_split_from_drawings(), blender::ed::curves::resize_curves(), blender::ed::greasepencil::retrieve_editable_fill_strokes(), blender::nodes::node_geo_curve_reverse_cc::reverse_curve(), blender::ed::sculpt_paint::mask::sculpt_mask_init_exec(), blender::ed::greasepencil::select_all_exec(), blender::ed::greasepencil::select_linked_exec(), blender::ed::greasepencil::select_random_exec(), blender::ed::greasepencil::select_similar_by_layer(), blender::ed::greasepencil::selection_update(), blender::geometry::separate_curves_selection(), blender::geometry::separate_grease_pencil_layer_selection(), blender::geometry::separate_pointcloud_selection(), blender::ed::curves::set_attribute_exec(), blender::ed::pointcloud::set_attribute_exec(), blender::simplify_drawing(), blender::ed::sculpt_paint::greasepencil::simplify_stroke(), blender::geometry::smooth_curve_attribute(), blender::geometry::smooth_curve_positions(), blender::ed::sculpt_paint::smooth_fill_strokes(), blender::ed::curves::split::split_exec(), blender::bke::greasepencil::Drawing::tag_positions_changed(), blender::bke::greasepencil::Drawing::tag_topology_changed(), blender::index_mask::tests::TEST(), blender::index_mask::tests::TEST(), blender::index_mask::tests::TEST(), blender::index_mask::tests::TEST(), blender::geometry::trim_curves(), blender::nodes::node_geo_curve_trim_cc::trim_curves(), blender::bke::pbvh::Tree::update_bounds_bmesh(), blender::bke::pbvh::Tree::update_bounds_grids(), blender::bke::pbvh::Tree::update_bounds_mesh(), blender::ed::transform::curves::update_handle_types_for_transform(), blender::ed::transform::curves::update_vector_handle_types(), blender::bke::pbvh::Tree::update_visibility(), blender::ed::greasepencil::weight_sample_invoke(), blender::bke::curves::bezier::write_all_positions(), and blender::write_weights_for_drawing().
|
inline |
Definition at line 760 of file BLI_index_mask.hh.
References blender::index_mask::IndexMaskData::begin_index_in_segment_, BLI_assert, blender::index_mask::IndexMaskData::cumulative_segment_sizes_, blender::index_mask::RawMaskIterator::index_in_segment, blender::index_mask::RawMaskIterator::segment_i, and blender::index_mask::IndexMaskData::segments_num_.
Referenced by slice(), slice_content(), and blender::index_mask::tests::TEST().
|
inline |
Definition at line 730 of file BLI_index_mask.hh.
References BLI_assert, blender::index_mask::IndexMaskData::end_index_in_segment_, blender::index_mask::IndexMaskData::indices_by_segment_, blender::index_mask::IndexMaskData::indices_num_, blender::index_mask::IndexMaskData::segment_offsets_, and blender::index_mask::IndexMaskData::segments_num_.
Referenced by bounds(), from_repeating(), min_array_size(), to_range(), and blender::geometry::trim_curves().
|
inline |
Definition at line 738 of file BLI_index_mask.hh.
References blender::index_mask::IndexMaskData::indices_num_, and last().
Referenced by blender::ed::sculpt_paint::mask::apply_new_mask_bmesh(), blender::ed::sculpt_paint::mask::apply_new_mask_grids(), blender::ed::sculpt_paint::mask::apply_new_mask_mesh(), blender::ed::sculpt_paint::greasepencil::brush_point_influence_mask(), blender::array_utils::copy(), blender::nodes::node_geo_scale_elements_cc::edge_to_vert_islands(), blender::fn::multi_function::VariableState::ensure_is_mutable(), blender::ed::sculpt_paint::face_set::face_hide_update(), blender::nodes::node_geo_scale_elements_cc::face_to_vert_islands(), blender::ed::sculpt_paint::mask::fill_mask_bmesh(), blender::ed::sculpt_paint::mask::fill_mask_grids(), blender::ed::sculpt_paint::mask::fill_mask_mesh(), blender::ed::sculpt_paint::hide::flush_face_changes_node(), from_bits(), from_bools(), from_group_ids(), blender::ed::sculpt_paint::face_set::gesture_apply_bmesh(), blender::ed::sculpt_paint::mask::gesture_apply_for_symmetry_pass(), blender::ed::sculpt_paint::hide::grid_hide_update(), blender::ed::sculpt_paint::undo::restore_face_set_from_undo_step(), blender::ed::sculpt_paint::undo::restore_mask_from_undo_step(), blender::ed::sculpt_paint::mask::sculpt_mask_filter_exec(), blender::nodes::node_geo_material_selection_cc::select_by_material(), blender::bke::pbvh::Tree::tag_positions_changed(), blender::bke::pbvh::Tree::tag_visibility_changed(), blender::draw::pbvh::DrawCacheImpl::tag_visibility_changed(), blender::ed::sculpt_paint::expand::update_for_vert(), blender::ed::sculpt_paint::mask::update_mask_mesh(), and blender::ed::sculpt_paint::hide::update_node_visibility_from_face_changes().
|
inline |
Same as above but takes O(1) time. It's still preferable to use foreach_* methods for iteration.
Definition at line 777 of file BLI_index_mask.hh.
References blender::index_mask::RawMaskIterator::index_in_segment, blender::index_mask::IndexMaskData::indices_by_segment_, blender::index_mask::RawMaskIterator::segment_i, and blender::index_mask::IndexMaskData::segment_offsets_.
Get the index at the given position. Prefer foreach_* methods for better performance. This takes O(log n) time.
Definition at line 771 of file BLI_index_mask.hh.
References i, and index_to_iterator().
|
inline |
Definition at line 787 of file BLI_index_mask.hh.
References blender::index_mask::IndexMaskData::begin_index_in_segment_, BLI_assert, blender::index_mask::IndexMaskData::cumulative_segment_sizes_, blender::index_mask::IndexMaskData::end_index_in_segment_, blender::index_mask::IndexMaskData::indices_by_segment_, blender::index_mask::IndexMaskData::segment_offsets_, and blender::index_mask::IndexMaskData::segments_num_.
Referenced by find_larger_equal(), foreach_index_optimized(), foreach_segment(), foreach_segment_optimized(), from_batch_predicate(), blender::index_mask::detail::from_predicate_impl(), from_repeating(), from_segments(), set_bits(), and to_spans_and_ranges().
|
inline |
Definition at line 782 of file BLI_index_mask.hh.
References blender::index_mask::IndexMaskData::segments_num_.
Referenced by foreach_segment_zipped(), from_batch_predicate(), blender::index_mask::detail::from_predicate_impl(), from_repeating(), and from_segments().
| void blender::index_mask::IndexMask::set_bits | ( | MutableBitSpan | r_bits, |
| int64_t | offset = 0 ) const |
Set the bits at indices in the mask to 1.
Definition at line 757 of file index_mask.cc.
References BLI_assert, foreach_segment_optimized(), i, indices, segment(), blender::bits::MutableBitSpan::set_all(), blender::IndexRange::shift(), blender::bits::MutableBitSpan::size(), and blender::bits::MutableBitSpan::slice().
Referenced by blender::bke::pbvh::Tree::tag_positions_changed(), blender::bke::pbvh::Tree::tag_visibility_changed(), blender::draw::pbvh::DrawCacheImpl::tag_visibility_changed(), and to_bits().
| IndexMask blender::index_mask::IndexMask::shift | ( | const int64_t | offset, |
| IndexMaskMemory & | memory ) const |
Adds an offset to every index in the mask.
Definition at line 203 of file index_mask.cc.
References blender::LinearAllocator< Allocator >::allocate_array(), BLI_assert, blender::MutableSpan< T >::data(), first(), i, IndexMask(), blender::index_mask::IndexMaskData::indices_num_, blender::index_mask::IndexMaskData::segment_offsets_, blender::index_mask::IndexMaskData::segments_num_, and to_range().
Referenced by blender::draw::extract_points_subdiv_mesh(), and slice_and_shift().
|
inline |
Definition at line 699 of file BLI_index_mask.hh.
References blender::index_mask::IndexMaskData::indices_num_.
Referenced by blender::nodes::node_geo_duplicate_elements_cc::accumulate_counts_to_offsets(), blender::fn::multi_function::VariableState::add_as_output(), blender::ed::transform::curves::append_positions_to_custom_data(), blender::nodes::node_geo_set_material_cc::assign_material_to_id_geometry(), blender::ed::sculpt_paint::greasepencil::brush_point_influence_mask(), blender::draw::build_tris_from_subdiv_quad_selection(), blender::nodes::node_geo_extrude_mesh_cc::build_vert_to_edge_map(), blender::bke::bvhtree_from_mesh_edges_init(), blender::bke::bvhtree_from_mesh_tris_init(), blender::bke::bvhtree_from_mesh_verts_init(), blender::bke::bvhtree_from_pointcloud_get(), blender::geometry::calc_all_corner_groups(), blender::geometry::ngon::calc_corner_tris(), blender::geometry::quad::calc_corner_tris(), blender::ed::spreadsheet::calc_mesh_selection_mask(), blender::geometry::calc_vert_ranges_per_old_vert(), blender::nodes::node_geo_menu_switch_cc::MenuSwitchFn::call(), blender::nodes::node_geo_instances_to_points_cc::convert_instances_to_points(), blender::bke::copy_attributes_group_to_group(), blender::bke::copy_curve_selection_custom_knots(), blender::io::hydra::copy_submesh(), blender::nodes::node_geo_extrude_mesh_cc::copy_with_mixing(), blender::geometry::create_curves_for_faces(), blender::nodes::node_geo_duplicate_elements_cc::create_duplicate_index_attribute(), blender::ed::sculpt_paint::create_node_vert_offsets(), blender::ed::sculpt_paint::create_node_vert_offsets(), blender::ed::sculpt_paint::create_node_vert_offsets_bmesh(), blender::geometry::create_point_to_vert_map(), blender::bke::create_tree_from_edges(), blender::bke::create_tree_from_tris(), blender::bke::create_tree_from_verts(), blender::ed::transform::curves::createTransCurvesVerts(), blender::ed::transform::greasepencil::createTransGreasePencilVerts(), blender::ed::transform::pointcloud::createTransPointCloudVerts(), blender::nodes::node_geo_curves_to_grease_pencil_cc::curve_instances_to_grease_pencil_layers(), blender::ed::greasepencil::curve_merge_by_distance(), blender::ed::transform::curves::curve_populate_trans_data_structs(), blender::bke::curves::curve_to_point_selection(), blender::bke::curves_copy_curve_selection(), blender::bke::curves_copy_point_selection(), blender::fn::multi_function::VariableState::destruct(), blender::draw::DRW_curves_batch_cache_create_requested(), blender::ed::pointcloud::duplicate_exec(), blender::nodes::node_geo_duplicate_elements_cc::duplicate_faces(), blender::nodes::node_geo_scale_elements_cc::edge_to_vert_islands(), blender::fn::multi_function::evaluate_as_one(), blender::ed::curves::clear_tilt::exec(), blender::ed::sculpt_paint::DensitySubtractOperationExecutor::execute(), blender::io::grease_pencil::SVGExporter::export_scene(), blender::draw::extract_edituv_face_dots_bm(), blender::draw::extract_edituv_face_dots_mesh(), blender::draw::extract_edituv_tris_bm(), blender::draw::extract_edituv_tris_mesh(), blender::draw::extract_lines_bm(), blender::draw::extract_lines_mesh(), blender::draw::extract_points_bm(), blender::draw::extract_points_mesh(), blender::draw::extract_points_subdiv_bm(), blender::draw::extract_points_subdiv_mesh(), blender::ed::curves::extrude_curves(), blender::nodes::node_geo_extrude_mesh_cc::extrude_individual_mesh_faces(), blender::nodes::node_geo_extrude_mesh_cc::extrude_mesh_edges(), blender::nodes::node_geo_extrude_mesh_cc::extrude_mesh_vertices(), blender::nodes::node_geo_scale_elements_cc::face_to_vert_islands(), blender::bke::CurvesGeometry::fill_curve_types(), blender::ed::sculpt_paint::greasepencil::find_curve_mapping_from_index(), blender::ed::greasepencil::find_curve_segments(), blender::geometry::fit_poly_to_bezier_curves(), blender::bke::pbvh::Tree::flush_bounds_to_parents(), foreach_segment_zipped(), from_batch_predicate(), blender::index_mask::detail::from_predicate_impl(), from_repeating(), blender::bke::gather_attributes(), blender::bke::gather_attributes_group_to_group(), blender::geometry::gather_attributes_to_propagate(), blender::bke::curves::nurbs::gather_custom_knots(), blender::nodes::node_geo_scale_elements_cc::gather_edge_islands(), blender::nodes::node_geo_scale_elements_cc::gather_face_islands(), blender::nodes::node_geo_mesh_to_points_cc::geometry_set_mesh_to_points(), blender::nodes::node_geo_points_to_vertices_cc::geometry_set_points_to_vertices(), blender::ed::greasepencil::get_reordered_indices(), blender::ed::transform::gizmo_3d_foreach_selected(), blender::draw::grease_pencil_cache_add_nurbs(), blender::draw::grease_pencil_edit_batch_ensure(), blender::draw::grease_pencil_geom_batch_ensure(), blender::ed::greasepencil::grease_pencil_reset_uvs_exec(), blender::ed::greasepencil::grease_pencil_snap_compute_centroid(), blender::ed::greasepencil::grease_pencil_stroke_reorder_exec(), blender::ed::greasepencil::grease_pencil_stroke_simplify_exec(), blender::ed::greasepencil::grease_pencil_texture_gradient_exec(), blender::draw::grease_pencil_weight_batch_ensure(), blender::draw::index_buf_add_bezier_handle_lines(), blender::draw::index_buf_add_bezier_line_points(), IndexMask(), blender::geometry::interpolate_curves_with_samples(), blender::length_parameterize::interpolate_to_masked(), blender::fn::multi_function::VariableState::is_fully_initialized(), blender::bke::mesh_calc_edges(), blender::geometry::mesh_copy_selection(), blender::geometry::mesh_copy_selection_keep_edges(), blender::geometry::mesh_copy_selection_keep_verts(), blender::geometry::mesh_edges_to_curves_convert(), blender::geometry::mesh_merge_by_distance_all(), blender::geometry::mesh_triangulate(), blender::modify_drawing(), blender::modify_drawing(), blender::geometry::ngon_indices_of_tris(), blender::nodes::node_geo_grease_pencil_to_curves_cc::node_geo_exec(), operator==, blender::geometry::point_merge_by_distance(), blender::ed::greasepencil::polyline_fit_curve(), blender::geometry::quad_indices_of_tris(), blender::geometry::remap_verts(), blender::bke::Instances::remove(), blender::bke::CurvesGeometry::remove_curves(), blender::bke::CurvesGeometry::remove_points(), blender::ed::curves::resize_curves(), blender::draw::sculpt_batches_get_ex(), blender::ed::sculpt_paint::select_grow::select_grow_invoke_per_curve(), blender::geometry::separate_curves_selection(), blender::geometry::separate_grease_pencil_layer_selection(), blender::geometry::separate_pointcloud_selection(), blender::simplify_drawing(), slice(), slice(), slice_and_shift(), slice_content(), blender::geometry::split_edges(), blender::ed::spreadsheet::spreadsheet_main_region_draw(), blender::ed::spreadsheet::SpreadsheetLayoutDrawer::SpreadsheetLayoutDrawer(), blender::bke::greasepencil::Drawing::tag_positions_changed(), blender::bke::greasepencil::Drawing::tag_topology_changed(), blender::index_mask::tests::TEST(), blender::index_mask::tests::TEST(), blender::index_mask::tests::TEST(), blender::index_mask::tests::TEST(), blender::index_mask::tests::TEST(), blender::index_mask::tests::TEST(), blender::index_mask::tests::TEST(), blender::index_mask::tests::TEST(), to_indices(), blender::geometry::trim_curves(), and blender::ed::curves::convert_to_particle_system::try_convert_single_object().
|
inline |
Get a new mask that contains a consecutive subset of this mask. Takes O(log n) time but can reuse the memory from the source mask.
Definition at line 801 of file BLI_index_mask.hh.
References IndexMask(), blender::IndexRange::size(), slice(), and blender::IndexRange::start().
Referenced by blender::array_utils::contains(), do_wpaint_brush_blur(), do_wpaint_brush_draw(), do_wpaint_brush_smear(), blender::ed::sculpt_paint::fake_neighbor_search(), blender::ed::sculpt_paint::greasepencil::find_curve_mapping_from_index(), from_bits(), from_bools(), blender::geometry::mesh_triangulate(), blender::ed::sculpt_paint::nearest_vert_calc_bmesh(), blender::ed::sculpt_paint::nearest_vert_calc_grids(), blender::ed::sculpt_paint::nearest_vert_calc_mesh(), slice(), slice_and_shift(), slice_content(), and blender::ed::sculpt_paint::mask::try_remove_mask_mesh().
Definition at line 123 of file index_mask.cc.
References blender::index_mask::RawMaskIterator::index_in_segment, index_to_iterator(), IndexMask(), blender::index_mask::RawMaskIterator::segment_i, and size().
| IndexMask blender::index_mask::IndexMask::slice | ( | RawMaskIterator | first_it, |
| RawMaskIterator | last_it, | ||
| int64_t | size ) const |
Definition at line 142 of file index_mask.cc.
References BLI_assert, blender::index_mask::RawMaskIterator::index_in_segment, IndexMask(), iterator_to_index(), blender::index_mask::RawMaskIterator::segment_i, and size().
| IndexMask blender::index_mask::IndexMask::slice_and_shift | ( | IndexRange | range, |
| int64_t | offset, | ||
| IndexMaskMemory & | memory ) const |
Same slice but can also add an offset to every index in the mask. Takes O(log n + range.size()) time but with a very small constant factor.
Definition at line 182 of file index_mask.cc.
References IndexMask(), blender::IndexRange::size(), slice_and_shift(), and blender::IndexRange::start().
Referenced by slice_and_shift().
| IndexMask blender::index_mask::IndexMask::slice_and_shift | ( | int64_t | start, |
| int64_t | size, | ||
| int64_t | offset, | ||
| IndexMaskMemory & | memory ) const |
Definition at line 189 of file index_mask.cc.
References IndexMask(), shift(), size(), slice(), and to_range().
| IndexMask blender::index_mask::IndexMask::slice_content | ( | IndexRange | range | ) | const |
Slices the mask based on the stored indices. The resulting mask only contains the indices that are within the given range.
Definition at line 158 of file index_mask.cc.
References IndexMask(), blender::IndexRange::size(), slice_content(), and blender::IndexRange::start().
Referenced by blender::index_mask::build_result_mask_segments(), blender::ed::transform::curves::curve_populate_trans_data_structs(), blender::index_mask::evaluate_coarse(), blender::index_mask::evaluate_exact_with_bits(), blender::index_mask::evaluate_exact_with_indices(), blender::index_mask::evaluate_short_unknown_segments_exactly(), blender::index_mask::evaluated_segments_to_index_mask(), blender::ed::greasepencil::extrude_grease_pencil_curves(), blender::ed::greasepencil::find_curve_segments(), blender::ed::greasepencil::grease_pencil_snap_to_cursor_exec(), slice_content(), and blender::index_mask::tests::TEST().
Definition at line 163 of file index_mask.cc.
References find_larger_equal(), find_smaller_equal(), IndexMask(), iterator_to_index(), size(), and slice().
| void blender::index_mask::IndexMask::to_bits | ( | MutableBitSpan | r_bits, |
| int64_t | offset = 0 ) const |
Set the bits at indices in the mask to 1 and all other bits to 0.
Definition at line 776 of file index_mask.cc.
References BLI_assert, blender::bits::MutableBitSpan::reset_all(), set_bits(), and blender::bits::MutableBitSpan::size().
Referenced by blender::geometry::split_edges().
| void blender::index_mask::IndexMask::to_bools | ( | MutableSpan< bool > | r_bools | ) | const |
Set the bools at indices in the mask to true and all others to false.
Definition at line 783 of file index_mask.cc.
References BLI_assert, blender::MutableSpan< T >::fill(), foreach_index_optimized(), i, and blender::MutableSpan< T >::size().
Referenced by blender::ed::greasepencil::apply_mask_as_segment_selection(), blender::build_drawing(), blender::ed::spreadsheet::calc_mesh_selection_mask(), blender::ed::curves::curve_mask_from_points(), blender::ed::curves::subdivide::exec(), blender::nodes::node_geo_extrude_mesh_cc::extrude_mesh_face_regions(), blender::nodes::node_geo_set_mesh_normal_cc::node_geo_exec(), blender::ed::sculpt_paint::greasepencil::SmoothOperation::on_stroke_extended(), blender::point_counts_to_keep_concurrent(), blender::points_info_sequential(), and blender::nodes::node_geo_extrude_mesh_cc::save_selection_as_attribute().
| template void blender::index_mask::IndexMask::to_indices | ( | MutableSpan< T > | r_indices | ) | const |
Fill the provided span with the indices in the mask. The span is expected to have the same size as the mask.
Definition at line 748 of file index_mask.cc.
References BLI_assert, blender::MutableSpan< T >::data(), foreach_index_optimized(), i, pos, size(), and blender::MutableSpan< T >::size().
Referenced by blender::nodes::node_geo_extrude_mesh_cc::build_vert_to_edge_map(), blender::draw::extract_edituv_face_dots_bm(), blender::draw::extract_edituv_face_dots_mesh(), blender::draw::extract_points_subdiv_bm(), blender::draw::extract_points_subdiv_mesh(), blender::nodes::node_geo_scale_elements_cc::gather_edge_islands(), blender::nodes::node_geo_scale_elements_cc::gather_face_islands(), blender::ed::greasepencil::get_reordered_indices(), and blender::ed::greasepencil::polyline_fit_curve().
|
inline |
Try to convert the entire index mask into a range. This only works if there are no gaps between any indices.
Definition at line 1077 of file BLI_index_mask.hh.
References first(), blender::index_mask::IndexMaskData::indices_num_, and last().
Referenced by from_repeating(), operator==, blender::ed::curves::resize_curves(), shift(), slice_and_shift(), and blender::geometry::smooth_curve_attribute().
| Vector< IndexRange > blender::index_mask::IndexMask::to_ranges | ( | ) | const |
Definition at line 791 of file index_mask.cc.
References blender::Vector< T, InlineBufferCapacity, Allocator >::append(), and foreach_range().
Referenced by to_ranges_invert().
| Vector< IndexRange > blender::index_mask::IndexMask::to_ranges_invert | ( | IndexRange | universe | ) | const |
Definition at line 798 of file index_mask.cc.
References complement(), and to_ranges().
|
inline |
Definition at line 1091 of file BLI_index_mask.hh.
References blender::Vector< T, InlineBufferCapacity, Allocator >::append(), foreach_segment_optimized(), N, and segment().
Definition at line 1098 of file BLI_index_mask.hh.
References b, and IndexMask().
Definition at line 1164 of file index_mask.cc.
References b, foreach_segment_zipped(), IndexMask(), blender::index_mask::segments_is_equal(), size(), and to_range().