Blender V4.5
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
21 private:
26 Object *object_orig_;
27 const bke::GeometrySet geometry_set_;
28 const bke::GeometryComponent *component_;
29 bke::AttrDomain domain_;
30 bool show_internal_attributes_;
31 /* Layer index for grease pencil component. */
32 int layer_index_;
33
34 /* Some data is computed on the fly only when it is requested. Computing it does not change the
35 * logical state of this data source. Therefore, the corresponding methods are const and need to
36 * be protected with a mutex. */
37 mutable Mutex mutex_;
38 mutable ResourceScope scope_;
39
40 public:
42 bke::GeometrySet geometry_set,
43 const bke::GeometryComponent::Type component_type,
44 const bke::AttrDomain domain,
45 const bool show_internal_attributes,
46 const int layer_index = -1)
47 : object_orig_(object_orig),
48 geometry_set_(std::move(geometry_set)),
49 component_(geometry_set_.get_component(component_type)),
50 domain_(domain),
51 show_internal_attributes_(show_internal_attributes),
52 layer_index_(layer_index)
53 {
54 }
55
56 bool has_selection_filter() const override;
58
60 FunctionRef<void(const SpreadsheetColumnID &, bool is_extra)> fn) const override;
61
62 std::unique_ptr<ColumnValues> get_column_values(
63 const SpreadsheetColumnID &column_id) const override;
64
65 int tot_rows() const override;
66
67 private:
68 std::optional<const bke::AttributeAccessor> get_component_attributes() const;
69 bool display_attribute(StringRef name, bke::AttrDomain domain) const;
70};
71
73 const bke::GeometrySet geometry_set_;
74 const bke::VolumeComponent *component_;
75
76 public:
78 : geometry_set_(std::move(geometry_set)),
79 component_(geometry_set_.get_component<bke::VolumeComponent>())
80 {
81 }
82
84 FunctionRef<void(const SpreadsheetColumnID &, bool is_extra)> fn) const override;
85
86 std::unique_ptr<ColumnValues> get_column_values(
87 const SpreadsheetColumnID &column_id) const override;
88
89 int tot_rows() const override;
90};
91
93
94std::unique_ptr<DataSource> data_source_from_geometry(const bContext *C, Object *object_eval);
95
97 const Span<SpreadsheetInstanceID> instance_ids);
98
99} // namespace blender::ed::spreadsheet
#define C
Definition RandGen.cpp:29
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
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)
std::mutex Mutex
Definition BLI_mutex.hh:47