Blender V4.3
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"
13
15
16struct bContext;
17
19
25 private:
28
29 public:
30 void add(std::string name, GSpan data)
31 {
32 columns_.add(std::move(name), data);
33 }
34
36 FunctionRef<void(const SpreadsheetColumnID &, bool is_extra)> fn) const;
37
38 std::unique_ptr<ColumnValues> get_column_values(const SpreadsheetColumnID &column_id) const;
39};
40
42 private:
47 Object *object_orig_;
48 const bke::GeometrySet geometry_set_;
49 const bke::GeometryComponent *component_;
50 bke::AttrDomain domain_;
51 /* Layer index for grease pencil component. */
52 int layer_index_;
53 ExtraColumns extra_columns_;
54
55 /* Some data is computed on the fly only when it is requested. Computing it does not change the
56 * logical state of this data source. Therefore, the corresponding methods are const and need to
57 * be protected with a mutex. */
58 mutable std::mutex mutex_;
59 mutable ResourceScope scope_;
60
61 public:
63 bke::GeometrySet geometry_set,
64 const bke::GeometryComponent::Type component_type,
65 const bke::AttrDomain domain,
66 const int layer_index = -1,
67 ExtraColumns extra_columns = {})
68 : object_orig_(object_orig),
69 geometry_set_(std::move(geometry_set)),
70 component_(geometry_set_.get_component(component_type)),
71 domain_(domain),
72 layer_index_(layer_index),
73 extra_columns_(std::move(extra_columns))
74 {
75 }
76
77 bool has_selection_filter() const override;
79
81 FunctionRef<void(const SpreadsheetColumnID &, bool is_extra)> fn) const override;
82
83 std::unique_ptr<ColumnValues> get_column_values(
84 const SpreadsheetColumnID &column_id) const override;
85
86 int tot_rows() const override;
87
88 private:
89 std::optional<const bke::AttributeAccessor> get_component_attributes() const;
90};
91
93 const bke::GeometrySet geometry_set_;
94 const bke::VolumeComponent *component_;
95
96 public:
98 : geometry_set_(std::move(geometry_set)),
99 component_(geometry_set_.get_component<bke::VolumeComponent>())
100 {
101 }
102
104 FunctionRef<void(const SpreadsheetColumnID &, bool is_extra)> fn) const override;
105
106 std::unique_ptr<ColumnValues> get_column_values(
107 const SpreadsheetColumnID &column_id) const override;
108
109 int tot_rows() const override;
110};
111
113
114std::unique_ptr<DataSource> data_source_from_geometry(const bContext *C, Object *object_eval);
115
117 const Span<SpreadsheetInstanceID> instance_ids);
118
119} // namespace blender::ed::spreadsheet
bool add(const Key &key, const Value &value)
Definition BLI_map.hh:271
std::unique_ptr< ColumnValues > get_column_values(const SpreadsheetColumnID &column_id) const
void foreach_default_column_ids(FunctionRef< void(const SpreadsheetColumnID &, bool is_extra)> fn) const
IndexMask apply_selection_filter(IndexMaskMemory &memory) const
std::unique_ptr< ColumnValues > get_column_values(const SpreadsheetColumnID &column_id) const override
GeometryDataSource(Object *object_orig, bke::GeometrySet geometry_set, const bke::GeometryComponent::Type component_type, const bke::AttrDomain domain, const int layer_index=-1, ExtraColumns extra_columns={})
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)