Blender V5.0
spreadsheet_data_source_geometry.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
5#pragma once
6
7#include <mutex>
8
10
11#include "BKE_geometry_set.hh"
12#include "BKE_instances.hh"
14
18
20
21struct bContext;
22
24
26 private:
31 Object *object_orig_;
32 const bke::GeometrySet geometry_set_;
33 const bke::GeometryComponent *component_;
34 bke::AttrDomain domain_;
35 bool show_internal_attributes_;
36 /* Layer index for grease pencil component. */
37 int layer_index_;
38
39 /* Some data is computed on the fly only when it is requested. Computing it does not change the
40 * logical state of this data source. Therefore, the corresponding methods are const and need to
41 * be protected with a mutex. */
42 mutable Mutex mutex_;
43 mutable ResourceScope scope_;
44
45 public:
47 bke::GeometrySet geometry_set,
48 const bke::GeometryComponent::Type component_type,
49 const bke::AttrDomain domain,
50 const bool show_internal_attributes,
51 const int layer_index = -1)
52 : object_orig_(object_orig),
53 geometry_set_(std::move(geometry_set)),
54 component_(geometry_set_.get_component(component_type)),
55 domain_(domain),
56 show_internal_attributes_(show_internal_attributes),
57 layer_index_(layer_index)
58 {
59 }
60
61 bool has_selection_filter() const override;
63
65 FunctionRef<void(const SpreadsheetColumnID &, bool is_extra)> fn) const override;
66
67 std::unique_ptr<ColumnValues> get_column_values(
68 const SpreadsheetColumnID &column_id) const override;
69
70 int tot_rows() const override;
71
72 private:
73 std::optional<const bke::AttributeAccessor> get_component_attributes() const;
74 bool display_attribute(StringRef name, bke::AttrDomain domain) const;
75};
76
78 const bke::GeometrySet geometry_set_;
79 const bke::VolumeComponent *component_;
80
81 public:
83 : geometry_set_(std::move(geometry_set)),
84 component_(geometry_set_.get_component<bke::VolumeComponent>())
85 {
86 }
87
89 FunctionRef<void(const SpreadsheetColumnID &, bool is_extra)> fn) const override;
90
91 std::unique_ptr<ColumnValues> get_column_values(
92 const SpreadsheetColumnID &column_id) const override;
93
94 int tot_rows() const override;
95};
96
97#ifdef WITH_OPENVDB
98
99class VolumeGridDataSource : public DataSource {
101 std::unique_ptr<bke::GVolumeGrid> grid_;
102
103 public:
104 VolumeGridDataSource(const bke::GVolumeGrid &grid);
105
106 void foreach_default_column_ids(
107 FunctionRef<void(const SpreadsheetColumnID &, bool is_extra)> fn) const override;
108
109 std::unique_ptr<ColumnValues> get_column_values(
110 const SpreadsheetColumnID &column_id) const override;
111
112 int tot_rows() const override;
113};
114
115#endif
116
118 nodes::ListPtr list_;
119
120 public:
122
124 FunctionRef<void(const SpreadsheetColumnID &, bool is_extra)> fn) const override;
125
126 std::unique_ptr<ColumnValues> get_column_values(
127 const SpreadsheetColumnID &column_id) const override;
128
129 int tot_rows() const override;
130};
131
133 nodes::BundlePtr bundle_;
134 Vector<std::string> flat_item_keys_;
136
137 public:
139
141 FunctionRef<void(const SpreadsheetColumnID &, bool is_extra)> fn) const override;
142
143 std::unique_ptr<ColumnValues> get_column_values(
144 const SpreadsheetColumnID &column_id) const override;
145
146 int tot_rows() const override;
147
148 private:
149 void collect_flat_items(const nodes::Bundle &bundle, StringRef parent_path);
150};
151
153 nodes::ClosurePtr closure_;
155
156 public:
158
160 FunctionRef<void(const SpreadsheetColumnID &, bool is_extra)> fn) const override;
161
162 std::unique_ptr<ColumnValues> get_column_values(
163 const SpreadsheetColumnID &column_id) const override;
164
165 int tot_rows() const override;
166};
167
169 GVArray value_gvarray_;
170
171 public:
172 SingleValueDataSource(const GPointer value);
173
175 FunctionRef<void(const SpreadsheetColumnID &, bool is_extra)> fn) const override;
176
177 std::unique_ptr<ColumnValues> get_column_values(
178 const SpreadsheetColumnID &column_id) const override;
179
180 int tot_rows() const override;
181};
182
184
185std::unique_ptr<DataSource> data_source_from_geometry(const bContext *C, Object *object_eval);
186
188 const Span<SpreadsheetInstanceID> instance_ids);
189
190} // namespace blender::ed::spreadsheet
SpreadsheetClosureInputOutput
#define C
Definition RandGen.cpp:29
std::unique_ptr< ColumnValues > get_column_values(const SpreadsheetColumnID &column_id) const override
void foreach_default_column_ids(FunctionRef< void(const SpreadsheetColumnID &, bool is_extra)> fn) const override
void foreach_default_column_ids(FunctionRef< void(const SpreadsheetColumnID &, bool is_extra)> fn) const override
std::unique_ptr< ColumnValues > get_column_values(const SpreadsheetColumnID &column_id) const override
ClosureSignatureDataSource(nodes::ClosurePtr closure, SpreadsheetClosureInputOutput in_out)
IndexMask apply_selection_filter(IndexMaskMemory &memory) const
std::unique_ptr< ColumnValues > get_column_values(const SpreadsheetColumnID &column_id) const override
void foreach_default_column_ids(FunctionRef< void(const SpreadsheetColumnID &, bool is_extra)> fn) const override
GeometryDataSource(Object *object_orig, bke::GeometrySet geometry_set, const bke::GeometryComponent::Type component_type, const bke::AttrDomain domain, const bool show_internal_attributes, const int layer_index=-1)
void foreach_default_column_ids(FunctionRef< void(const SpreadsheetColumnID &, bool is_extra)> fn) const override
std::unique_ptr< ColumnValues > get_column_values(const SpreadsheetColumnID &column_id) const override
std::unique_ptr< ColumnValues > get_column_values(const SpreadsheetColumnID &column_id) const override
void foreach_default_column_ids(FunctionRef< void(const SpreadsheetColumnID &, bool is_extra)> fn) const override
void foreach_default_column_ids(FunctionRef< void(const SpreadsheetColumnID &, bool is_extra)> fn) const override
std::unique_ptr< ColumnValues > get_column_values(const SpreadsheetColumnID &column_id) const override
bke::GeometrySet get_geometry_set_for_instance_ids(const bke::GeometrySet &root_geometry, const Span< SpreadsheetInstanceID > instance_ids)
int get_instance_reference_icon(const bke::InstanceReference &reference)
std::unique_ptr< DataSource > data_source_from_geometry(const bContext *C, Object *object_eval)
ImplicitSharingPtr< Bundle > BundlePtr
ImplicitSharingPtr< List > ListPtr
ImplicitSharingPtr< Closure > ClosurePtr
std::mutex Mutex
Definition BLI_mutex.hh:47
const char * name