24#include "RNA_prototypes.hh"
42class GeometryDataSetTreeView;
43class GeometryInstancesTreeView;
48 std::optional<bke::AttrDomain>
domain;
75 return IFACE_(
"Face Corner");
86 return IFACE_(
"Control Point");
99 return ICON_VERTEXSEL;
105 return ICON_FACE_CORNER;
116 return ICON_CURVE_BEZCIRCLE;
118 return ICON_CURVE_PATH;
140 label_ = geometry.name.empty() ?
IFACE_(
"(Geometry)") : geometry.name;
152 int reference_index_;
167 if (name.is_empty()) {
168 name =
IFACE_(
"(Geometry)");
170 uiItemL(&row, name.c_str(), icon);
176 return reference_index_;
190 : root_geometry_set_(std::move(geometry_set)),
199 root_item.uncollapse_by_default();
208 for (
const int reference_i : references.
index_range()) {
213 reference.to_geometry_set(reference_geometry);
270 const int count = mesh_ ? mesh_->
attributes().domain_size(domain_) : 0;
295 : curves_(curves), domain_(domain)
310 const int count = curves_ ? curves_->
geometry.wrap().attributes().domain_size(domain_) : 0;
324 uiItemL(&row,
label_.c_str(), ICON_OUTLINER_DATA_GREASEPENCIL);
346 const int count = grease_pencil_ ? grease_pencil_->layers().size() : 0;
358 : layer_(grease_pencil.layer(layer_index))
360 label_ = std::to_string(layer_index);
366 if (name.is_empty()) {
369 uiItemL(&row, name.c_str(), ICON_CURVE_DATA);
381 const int layer_index,
383 : grease_pencil_(grease_pencil), layer_index_(layer_index), domain_(domain)
400 grease_pencil_.layer(layer_index_));
501 : geometry_set_(std::move(geometry_set)),
514 const Mesh *mesh = geometry.get_mesh();
517 const Curves *curves = geometry.get_curves();
520 const GreasePencil *grease_pencil = geometry.get_grease_pencil();
523 const PointCloud *pointcloud = geometry.get_pointcloud();
526 const Volume *volume = geometry.get_volume();
558 if (!grease_pencil) {
562 for (
const int layer_i : layers.index_range()) {
604 r_instance_ids.
append({reference_item->reference_index()});
608 r_instance_ids.
append({reference_item->reference_index()});
611 std::reverse(r_instance_ids.
begin(), r_instance_ids.
end());
627 if (a.reference_index !=
b.reference_index) {
642 sspreadsheet.
instance_ids = MEM_cnew_array<SpreadsheetInstanceID>(instance_ids.
size(), __func__);
657 if (
auto *data_set_view_item =
dynamic_cast<const DataSetViewItem *
>(&item)) {
658 data_id = data_set_view_item->get_geometry_data_id();
670 if (data_id->domain) {
673 if (data_id->layer_index) {
693 data_id->component_type)
697 if (data_id->domain) {
702 if (data_id->layer_index) {
728 "Instances Tree View",
729 std::make_unique<GeometryInstancesTreeView>(root_geometry, *C));
734 C, layout,
"geometry_domain_tree_view",
false,
IFACE_(
"Domain")))
740 "Data Set Tree View",
741 std::make_unique<GeometryDataSetTreeView>(std::move(instance_geometry), *C));
742 tree_view->set_context_menu_title(
"Domain");
bScreen * CTX_wm_screen(const bContext *C)
Depsgraph * CTX_data_depsgraph_pointer(const bContext *C)
SpaceSpreadsheet * CTX_wm_space_spreadsheet(const bContext *C)
Low-level operations for curves.
Low-level operations for grease pencil.
int BKE_volume_num_grids(const Volume *volume)
#define BLI_assert_unreachable()
#define BLI_STR_FORMAT_INT32_DECIMAL_UNIT_SIZE
void BLI_str_format_decimal_unit(char dst[BLI_STR_FORMAT_INT32_DECIMAL_UNIT_SIZE], int number_to_format) ATTR_NONNULL(1)
Object groups, one object can be in many groups at once.
blender::ui::AbstractGridView * UI_block_add_view(uiBlock &block, blender::StringRef idname, std::unique_ptr< blender::ui::AbstractGridView > grid_view)
void uiItemL(uiLayout *layout, const char *name, int icon)
uiBlock * uiLayoutGetBlock(uiLayout *layout)
PanelLayout uiLayoutPanel(const bContext *C, uiLayout *layout, const char *idname, bool default_closed)
void UI_but_hint_drawstr_set(uiBut *but, const char *string)
void UI_block_layout_set_current(uiBlock *block, uiLayout *layout)
#define ND_SPACE_SPREADSHEET
constexpr IndexRange index_range() const
void append(const T &value)
IndexRange index_range() const
int domain_size(const AttrDomain domain) const
AttributeAccessor attributes() const
StringRefNull name() const
int instances_num() const
const bke::CurvesGeometry & strokes() const
void build_row(uiLayout &row) override
CurvesDomainViewItem(const Curves *curves, const bke::AttrDomain domain)
std::optional< GeometryDataIdentifier > get_geometry_data_id() const override
void build_row(uiLayout &row) override
virtual std::optional< GeometryDataIdentifier > get_geometry_data_id() const
std::optional< bool > should_be_active() const override
void on_activate(bContext &C) override
GeometryDataSetTreeView & get_tree() const
void build_tree_for_pointcloud(const PointCloud *pointcloud, ui::TreeViewItemContainer &parent)
void build_tree_for_grease_pencil(const GreasePencil *grease_pencil, ui::TreeViewItemContainer &parent)
GeometryDataSetTreeView(bke::GeometrySet geometry_set, const bContext &C)
void build_tree_for_instances(const bke::Instances *instances, ui::TreeViewItemContainer &parent)
void build_tree_for_curves(const Curves *curves, ui::TreeViewItemContainer &parent)
void build_tree_for_volume(const Volume *volume, ui::TreeViewItemContainer &parent)
void build_tree_for_mesh(const Mesh *mesh, ui::TreeViewItemContainer &parent)
void build_tree() override
void build_tree_for_geometry(const bke::GeometrySet &geometry, ui::TreeViewItemContainer &parent)
GeometryInstancesTreeView(bke::GeometrySet geometry_set, const bContext &C)
void build_tree_for_instances(ui::TreeViewItemContainer &parent, const bke::Instances &instances)
void build_tree() override
GreasePencilLayerCurvesDomainViewItem(const GreasePencil &grease_pencil, const int layer_index, const bke::AttrDomain domain)
std::optional< GeometryDataIdentifier > get_geometry_data_id() const override
void build_row(uiLayout &row) override
GreasePencilLayerViewItem(const GreasePencil &grease_pencil, const int layer_index)
void build_row(uiLayout &row) override
std::optional< GeometryDataIdentifier > get_geometry_data_id() const override
GreasePencilLayersViewItem(const GreasePencil *grease_pencil)
void build_row(uiLayout &row) override
void build_row(uiLayout &row) override
int reference_index() const
void build_row(uiLayout &row) override
InstanceReferenceViewItem(const bke::Instances &instances, const int reference_index)
void get_parent_instance_ids(Vector< SpreadsheetInstanceID > &r_instance_ids) const
GeometryInstancesTreeView & get_tree() const
std::optional< bool > should_be_active() const override
void on_activate(bContext &C) override
std::optional< GeometryDataIdentifier > get_geometry_data_id() const override
InstancesViewItem(const bke::Instances *instances)
void build_row(uiLayout &row) override
std::optional< GeometryDataIdentifier > get_geometry_data_id() const override
MeshDomainViewItem(const Mesh *mesh, const bke::AttrDomain domain)
void build_row(uiLayout &row) override
void build_row(uiLayout &row) override
void build_row(uiLayout &row) override
void build_row(uiLayout &row) override
PointsViewItem(const PointCloud *pointcloud)
std::optional< GeometryDataIdentifier > get_geometry_data_id() const override
void build_row(uiLayout &row) override
RootGeometryViewItem(const bke::GeometrySet &geometry)
void build_row(uiLayout &row) override
VolumeGridsViewItem(const Volume *volume)
std::optional< GeometryDataIdentifier > get_geometry_data_id() const override
Abstract base class for defining a customizable tree-view item.
AbstractTreeView & get_tree_view() const
void uncollapse_by_default()
uiButViewItem * view_item_button() const
void set_context_menu_title(const std::string &title)
static void build_tree_view(AbstractTreeView &tree_view, uiLayout &layout, std::optional< StringRef > search_string={}, bool add_box=true)
ItemT & add_tree_item(Args &&...args)
void foreach_item_recursive(ItemIterFn iter_fn, IterOptions options=IterOptions::None) const
void foreach_parent(ItemIterFn iter_fn) const
local_group_size(16, 16) .push_constant(Type b
static StringRefNull mesh_domain_to_label(const bke::AttrDomain domain)
static void draw_count(ui::AbstractTreeViewItem &view_item, const int count)
void spreadsheet_data_set_panel_draw(const bContext *C, Panel *panel)
static StringRefNull curves_domain_to_label(const bke::AttrDomain domain)
bke::GeometrySet get_geometry_set_for_instance_ids(const bke::GeometrySet &root_geometry, const Span< SpreadsheetInstanceID > instance_ids)
bke::GeometrySet spreadsheet_get_display_geometry_set(const SpaceSpreadsheet *sspreadsheet, Object *object_eval)
static void draw_row_suffix(ui::AbstractTreeViewItem &view_item, const StringRefNull str)
int get_instance_reference_icon(const bke::InstanceReference &reference)
Object * spreadsheet_get_object_eval(const SpaceSpreadsheet *sspreadsheet, const Depsgraph *depsgraph)
static BIFIconID curves_domain_to_icon(const bke::AttrDomain domain)
static BIFIconID mesh_domain_to_icon(const bke::AttrDomain domain)
void initialized_copy_n(const T *src, int64_t n, T *dst)
PropertyRNA * RNA_struct_find_property(PointerRNA *ptr, const char *identifier)
void RNA_property_update(bContext *C, PointerRNA *ptr, PropertyRNA *prop)
PointerRNA RNA_pointer_create(ID *id, StructRNA *type, void *data)
SpreadsheetInstanceID * instance_ids
uint8_t geometry_component_type
const Instances * get_instances() const
bke::GeometryComponent::Type component_type
std::optional< bke::AttrDomain > domain
std::optional< int > layer_index
void WM_main_add_notifier(uint type, void *reference)