diff options
author | Jacques Lucke <jacques@blender.org> | 2021-04-21 18:07:00 +0300 |
---|---|---|
committer | Jacques Lucke <jacques@blender.org> | 2021-04-21 18:07:00 +0300 |
commit | 3da74c1c18dca19af9e2745ff9ea5ad587f3b47e (patch) | |
tree | 4251da06ea442046ad485c5b9490513a47f34e15 /source/blender/blenkernel/intern | |
parent | 1dd17726f2a17483b62e762da26a236d6440f8a9 (diff) |
Geometry Nodes: add method to get attribute by name and type
This is needed by the upcoming Attribute Transfer node. It changes
its behavior based on what domain the attribute is on.
Diffstat (limited to 'source/blender/blenkernel/intern')
-rw-r--r-- | source/blender/blenkernel/intern/attribute_access.cc | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/source/blender/blenkernel/intern/attribute_access.cc b/source/blender/blenkernel/intern/attribute_access.cc index 70572e446b7..3b2ee126d91 100644 --- a/source/blender/blenkernel/intern/attribute_access.cc +++ b/source/blender/blenkernel/intern/attribute_access.cc @@ -786,6 +786,23 @@ std::unique_ptr<blender::bke::GVArray> GeometryComponent::attribute_try_get_for_ return std::move(attribute.varray); } +blender::bke::ReadAttributeLookup GeometryComponent::attribute_try_get_for_read( + const blender::StringRef attribute_name, const CustomDataType data_type) const +{ + blender::bke::ReadAttributeLookup attribute = this->attribute_try_get_for_read(attribute_name); + if (!attribute) { + return {}; + } + const blender::fn::CPPType *type = blender::bke::custom_data_type_to_cpp_type(data_type); + BLI_assert(type != nullptr); + if (attribute.varray->type() == *type) { + return attribute; + } + const blender::nodes::DataTypeConversions &conversions = + blender::nodes::get_implicit_type_conversions(); + return {conversions.try_convert(std::move(attribute.varray), *type), attribute.domain}; +} + std::unique_ptr<blender::bke::GVArray> GeometryComponent::attribute_get_for_read( const StringRef attribute_name, const AttributeDomain domain, |