Blender V4.3
curves_selection.cc File Reference
#include "BLI_array_utils.hh"
#include "BLI_assert.h"
#include "BLI_index_mask.hh"
#include "BLI_lasso_2d.hh"
#include "BLI_math_geom.h"
#include "BLI_rand.hh"
#include "BLI_rect.h"
#include "BKE_attribute.hh"
#include "BKE_crazyspace.hh"
#include "BKE_curves.hh"
#include "ED_curves.hh"
#include "ED_object.hh"
#include "ED_select_utils.hh"
#include "ED_view3d.hh"

Go to the source code of this file.

Namespaces

namespace  blender
 
namespace  blender::ed
 
namespace  blender::ed::curves
 

Functions

Span< StringRefblender::ed::curves::get_curves_selection_attribute_names (const bke::CurvesGeometry &curves)
 
Span< StringRefblender::ed::curves::get_curves_all_selection_attribute_names ()
 
Span< StringRefblender::ed::curves::get_curves_bezier_selection_attribute_names (const bke::CurvesGeometry &curves)
 
void blender::ed::curves::remove_selection_attributes (bke::MutableAttributeAccessor &attributes, Span< StringRef > selection_attribute_names)
 
Span< float3blender::ed::curves::get_selection_attribute_positions (const bke::CurvesGeometry &curves, const bke::crazyspace::GeometryDeformation &deformation, const StringRef attribute_name)
 
static Vector< bke::GSpanAttributeWriterblender::ed::curves::init_selection_writers (bke::CurvesGeometry &curves, bke::AttrDomain selection_domain)
 
static void blender::ed::curves::finish_attribute_writers (MutableSpan< bke::GSpanAttributeWriter > attribute_writers)
 
static bke::GSpanAttributeWriterblender::ed::curves::selection_attribute_writer_by_name (MutableSpan< bke::GSpanAttributeWriter > selections, StringRef attribute_name)
 
static void blender::ed::curves::init_selectable_foreach (const bke::CurvesGeometry &curves, const bke::crazyspace::GeometryDeformation &deformation, Span< StringRef > &r_bezier_attribute_names, Span< float3 > &r_positions, std::array< Span< float3 >, 2 > &r_bezier_handle_positions, IndexMaskMemory &r_memory, IndexMask &r_bezier_curves)
 
void blender::ed::curves::foreach_selectable_point_range (const bke::CurvesGeometry &curves, const bke::crazyspace::GeometryDeformation &deformation, SelectionRangeFn range_consumer)
 
void blender::ed::curves::foreach_selectable_curve_range (const bke::CurvesGeometry &curves, const bke::crazyspace::GeometryDeformation &deformation, SelectionRangeFn range_consumer)
 
static bool blender::ed::curves::contains (const VArray< bool > &varray, const IndexMask &indices_to_check, const bool value)
 
static bool blender::ed::curves::contains (const VArray< bool > &varray, const IndexRange range_to_check, const bool value)
 
static void blender::ed::curves::invert_selection (MutableSpan< float > selection)
 
static void blender::ed::curves::invert_selection (GMutableSpan selection)
 
static void blender::ed::curves::invert_selection (MutableSpan< float > selection, const IndexMask &mask)
 
static void blender::ed::curves::invert_selection (GMutableSpan selection, const IndexMask &mask)
 
static std::optional< FindClosestDatablender::ed::curves::find_closest_point_to_screen_co (const ARegion *region, const Span< float3 > positions, const float4x4 &projection, const IndexMask &points_mask, const float2 mouse_pos, float radius, const FindClosestData &initial_closest)
 
static std::optional< FindClosestDatablender::ed::curves::find_closest_curve_to_screen_co (const ARegion *region, const OffsetIndices< int > points_by_curve, const Span< float3 > positions, const VArray< bool > &cyclic, const float4x4 &projection, const IndexMask &curves_mask, const float2 mouse_pos, float radius, const FindClosestData &initial_closest)
 
template<typename PointSelectFn , typename LineSelectFn >
IndexMask blender::ed::curves::select_mask_from_predicates (const bke::CurvesGeometry &curves, const IndexMask &mask, const bke::AttrDomain selection_domain, IndexMaskMemory &memory, PointSelectFn &&point_predicate, LineSelectFn &&line_predicate)
 
Selection

Selection on curves can be stored on either attribute domain: either per-curve or per-point. It can be stored with a float or boolean data-type. The boolean data-type is faster, smaller, and corresponds better to edit-mode selections, but the float data type is useful for soft selection (like masking) in sculpt mode.

The attribute API is used to do the necessary type and domain conversions when necessary, and can handle most interaction with the selection attribute, but these functions implement some helpful utilities on top of that.

IndexMask blender::ed::curves::retrieve_selected_curves (const bke::CurvesGeometry &curves, IndexMaskMemory &memory)
 
IndexMask blender::ed::curves::retrieve_selected_curves (const Curves &curves_id, IndexMaskMemory &memory)
 
IndexMask blender::ed::curves::retrieve_selected_points (const bke::CurvesGeometry &curves, IndexMaskMemory &memory)
 
IndexMask blender::ed::curves::retrieve_selected_points (const bke::CurvesGeometry &curves, StringRef attribute_name, IndexMaskMemory &memory)
 
IndexMask blender::ed::curves::retrieve_selected_points (const Curves &curves_id, IndexMaskMemory &memory)
 
void blender::ed::curves::foreach_selection_attribute_writer (bke::CurvesGeometry &curves, bke::AttrDomain selection_domain, blender::FunctionRef< void(bke::GSpanAttributeWriter &selection)> fn)
 
bke::GSpanAttributeWriter blender::ed::curves::ensure_selection_attribute (bke::CurvesGeometry &curves, bke::AttrDomain selection_domain, eCustomDataType create_type, StringRef attribute_name)
 
void blender::ed::curves::fill_selection_false (GMutableSpan selection)
 
void blender::ed::curves::fill_selection_true (GMutableSpan selection)
 
void blender::ed::curves::fill_selection (GMutableSpan selection, bool value)
 
void blender::ed::curves::fill_selection_false (GMutableSpan selection, const IndexMask &mask)
 
void blender::ed::curves::fill_selection_true (GMutableSpan selection, const IndexMask &mask)
 
bool blender::ed::curves::has_anything_selected (const VArray< bool > &varray, const IndexRange range_to_check)
 
bool blender::ed::curves::has_anything_selected (const VArray< bool > &varray, const IndexMask &indices_to_check)
 
bool blender::ed::curves::has_anything_selected (const bke::CurvesGeometry &curves)
 
bool blender::ed::curves::has_anything_selected (const bke::CurvesGeometry &curves, bke::AttrDomain selection_domain)
 
bool blender::ed::curves::has_anything_selected (const bke::CurvesGeometry &curves, bke::AttrDomain selection_domain, const IndexMask &mask)
 
bool blender::ed::curves::has_anything_selected (const GSpan selection)
 
void blender::ed::curves::select_all (bke::CurvesGeometry &curves, const IndexMask &mask, const bke::AttrDomain selection_domain, int action)
 
void blender::ed::curves::select_all (bke::CurvesGeometry &curves, const bke::AttrDomain selection_domain, int action)
 
void blender::ed::curves::select_linked (bke::CurvesGeometry &curves, const IndexMask &curves_mask)
 
void blender::ed::curves::select_linked (bke::CurvesGeometry &curves)
 
void blender::ed::curves::select_alternate (bke::CurvesGeometry &curves, const IndexMask &curves_mask, const bool deselect_ends)
 
void blender::ed::curves::select_alternate (bke::CurvesGeometry &curves, const bool deselect_ends)
 
void blender::ed::curves::select_adjacent (bke::CurvesGeometry &curves, const IndexMask &curves_mask, const bool deselect)
 
void blender::ed::curves::select_adjacent (bke::CurvesGeometry &curves, const bool deselect)
 
void blender::ed::curves::apply_selection_operation_at_index (GMutableSpan selection, const int index, const eSelectOp sel_op)
 
std::optional< FindClosestDatablender::ed::curves::closest_elem_find_screen_space (const ViewContext &vc, const OffsetIndices< int > points_by_curve, const Span< float3 > positions, const VArray< bool > &cyclic, const float4x4 &projection, const IndexMask &mask, const bke::AttrDomain domain, const int2 coord, const FindClosestData &initial_closest)
 
bool blender::ed::curves::select_box (const ViewContext &vc, bke::CurvesGeometry &curves, const bke::crazyspace::GeometryDeformation &deformation, const float4x4 &projection, const IndexMask &selection_mask, const IndexMask &bezier_mask, const bke::AttrDomain selection_domain, const rcti &rect, const eSelectOp sel_op)
 
bool blender::ed::curves::select_lasso (const ViewContext &vc, bke::CurvesGeometry &curves, const bke::crazyspace::GeometryDeformation &deformation, const float4x4 &projection_matrix, const IndexMask &selection_mask, const IndexMask &bezier_mask, const bke::AttrDomain selection_domain, const Span< int2 > lasso_coords, const eSelectOp sel_op)
 
bool blender::ed::curves::select_circle (const ViewContext &vc, bke::CurvesGeometry &curves, const bke::crazyspace::GeometryDeformation &deformation, const float4x4 &projection, const IndexMask &selection_mask, const IndexMask &bezier_mask, const bke::AttrDomain selection_domain, const int2 coord, const float radius, const eSelectOp sel_op)
 
IndexMask blender::ed::curves::select_adjacent_mask (const bke::CurvesGeometry &curves, const IndexMask &curves_mask, const StringRef attribute_name, const bool deselect, IndexMaskMemory &memory)
 
IndexMask blender::ed::curves::select_adjacent_mask (const bke::CurvesGeometry &curves, const StringRef attribute_name, const bool deselect, IndexMaskMemory &memory)
 
IndexMask blender::ed::curves::select_box_mask (const ViewContext &vc, const bke::CurvesGeometry &curves, const bke::crazyspace::GeometryDeformation &deformation, const float4x4 &projection, const IndexMask &selection_mask, const IndexMask &bezier_mask, const bke::AttrDomain selection_domain, const StringRef attribute_name, const rcti &rect, IndexMaskMemory &memory)
 
IndexMask blender::ed::curves::select_lasso_mask (const ViewContext &vc, const bke::CurvesGeometry &curves, const bke::crazyspace::GeometryDeformation &deformation, const float4x4 &projection, const IndexMask &selection_mask, const IndexMask &bezier_mask, const bke::AttrDomain selection_domain, const StringRef attribute_name, const Span< int2 > lasso_coords, IndexMaskMemory &memory)
 
IndexMask blender::ed::curves::select_circle_mask (const ViewContext &vc, const bke::CurvesGeometry &curves, const bke::crazyspace::GeometryDeformation &deformation, const float4x4 &projection, const IndexMask &selection_mask, const IndexMask &bezier_mask, const bke::AttrDomain selection_domain, const StringRef attribute_name, const int2 coord, const float radius, IndexMaskMemory &memory)