29using bke::AttributeAccessor;
30using bke::AttributeFieldInput;
31using bke::AttributeFilter;
32using bke::AttributeIter;
33using bke::AttributeKind;
34using bke::AttributeMetaData;
35using bke::AttributeReader;
36using bke::AttributeWriter;
37using bke::CurveComponent;
38using bke::GAttributeReader;
39using bke::GAttributeWriter;
40using bke::GeometryComponent;
41using bke::GeometryComponentEditData;
42using bke::GeometrySet;
43using bke::GreasePencilComponent;
44using bke::GSpanAttributeWriter;
45using bke::InstancesComponent;
46using bke::MeshComponent;
47using bke::MutableAttributeAccessor;
48using bke::PointCloudComponent;
49using bke::SocketValueVariant;
50using bke::SpanAttributeWriter;
51using bke::VolumeComponent;
53using fn::FieldContext;
54using fn::FieldEvaluator;
56using fn::FieldOperation;
76 const Span<int> lf_input_for_output_bsocket_usage_;
77 const Span<int> lf_input_for_attribute_propagation_to_output_;
78 const FunctionRef<std::string(
int)> get_output_attribute_id_;
84 const Span<int> lf_input_for_output_bsocket_usage,
85 const Span<int> lf_input_for_attribute_propagation_to_output,
86 const FunctionRef<std::string(
int)> get_output_attribute_id)
89 lf_context_(lf_context),
90 lf_input_for_output_bsocket_usage_(lf_input_for_output_bsocket_usage),
91 lf_input_for_attribute_propagation_to_output_(
92 lf_input_for_attribute_propagation_to_output),
93 get_output_attribute_id_(get_output_attribute_id)
122 return value_variant.
extract<T>();
128 const int index = this->get_input_index(identifier);
130 if constexpr (std::is_same_v<T, GeometrySet>) {
133 if constexpr (std::is_same_v<T, SocketValueVariant>) {
151 return value_variant.extract<T>();
157 const int index = this->get_input_index(identifier);
158 const T &value = params_.
get_input<T>(index);
159 if constexpr (std::is_same_v<T, GeometrySet>) {
162 if constexpr (std::is_same_v<T, SocketValueVariant>) {
175 using StoredT = std::decay_t<T>;
178 this->
set_output(identifier, std::move(value_variant));
183 this->check_output_access(identifier, type);
184 if constexpr (std::is_same_v<StoredT, SocketValueVariant>) {
189 if constexpr (std::is_same_v<StoredT, GeometrySet>) {
192 const int index = this->get_output_index(identifier);
193 params_.
set_output(index, std::forward<T>(value));
207 const int index = this->get_input_index(identifier);
216 const int index = this->get_output_index(identifier);
230 if (
const auto *data = this->
user_data()) {
231 return data->call_data->self_object();
238 if (
const auto *data = this->
user_data()) {
239 if (data->call_data->modifier_data) {
240 return data->call_data->modifier_data->depsgraph;
242 if (data->call_data->operator_data) {
243 return data->call_data->operator_data->depsgraphs->active;
277 lf_input_for_output_bsocket_usage_[node_.output_by_identifier(output_identifier)
278 .index_in_all_outputs()];
279 return params_.
get_input<
bool>(lf_index);
287 const StringRef output_identifier,
const bool force_create =
false)
292 const bNodeSocket &output_socket = node_.output_by_identifier(output_identifier);
293 return get_output_attribute_id_(output_socket.index());
302 lf_input_for_attribute_propagation_to_output_[node_.output_by_identifier(output_identifier)
303 .index_in_all_outputs()];
311 void check_input_access(
StringRef identifier,
const CPPType *requested_type =
nullptr)
const;
312 void check_output_access(
StringRef identifier,
const CPPType &value_type)
const;
317 int get_input_index(
const StringRef identifier)
const
320 for (
const bNodeSocket *socket : node_.input_sockets()) {
321 if (!socket->is_available()) {
324 if (socket->identifier == identifier) {
333 int get_output_index(
const StringRef identifier)
const
336 for (
const bNodeSocket *socket : node_.output_sockets()) {
337 if (!socket->is_available()) {
340 if (socket->identifier == identifier) {
#define BLI_assert_unreachable()
static const CPPType & get()
void set_output(int index, T &&value)
ValueUsage get_output_usage(int index) const
T & get_input(int index) const
T extract_input(int index)
void set_input_unused(int index)
T extract_input(StringRef identifier)
geo_eval_log::GeoTreeLogger * get_local_tree_logger() const
void error_message_add(const NodeWarningType type, StringRef message) const
void set_output(StringRef identifier, T &&value)
void set_input_unused(StringRef identifier)
void check_output_geometry_set(const GeometrySet &geometry_set) const
bool output_is_required(StringRef identifier) const
GeoNodeExecParams(const bNode &node, lf::Params ¶ms, const lf::Context &lf_context, const Span< int > lf_input_for_output_bsocket_usage, const Span< int > lf_input_for_attribute_propagation_to_output, const FunctionRef< std::string(int)> get_output_attribute_id)
GeoNodesLFLocalUserData * local_user_data() const
T get_input(StringRef identifier) const
void check_input_geometry_set(StringRef identifier, const GeometrySet &geometry_set) const
bool anonymous_attribute_output_is_required(const StringRef output_identifier)
void used_named_attribute(StringRef attribute_name, NamedAttributeUsage usage)
std::optional< std::string > get_output_anonymous_attribute_id_if_needed(const StringRef output_identifier, const bool force_create=false)
const bNode & node() const
void set_default_remaining_outputs()
GeoNodesLFUserData * user_data() const
NodeAttributeFilter get_attribute_filter(const StringRef output_identifier) const
const Depsgraph * depsgraph() const
static constexpr bool is_field_base_type_v
const Object * self_object() const
static constexpr bool stored_as_SocketValueVariant_v
Result filter(StringRef attribute_name) const override
NodeAttributeFilter(const bke::AnonymousAttributeSet &set)
draw_view in_light_buf[] float
draw_view push_constant(Type::INT, "radiance_src") .push_constant(Type capture_info_buf storage_buf(1, Qualifier::READ, "ObjectBounds", "bounds_buf[]") .push_constant(Type draw_view int
static constexpr bool is_field_v
QuaternionBase< float > Quaternion
constexpr bool is_same_any_v
ColorSceneLinear4f< eAlpha::Premultiplied > ColorGeometry4f
VecBase< float, 3 > float3
LocalUserData * local_user_data
geo_eval_log::GeoTreeLogger * try_get_tree_logger(const GeoNodesLFUserData &user_data) const