diff options
author | Jacques Lucke <jacques@blender.org> | 2021-08-10 11:39:07 +0300 |
---|---|---|
committer | Jacques Lucke <jacques@blender.org> | 2021-08-10 11:39:07 +0300 |
commit | 277117826fc1c745049463d4d6120849f9369f48 (patch) | |
tree | cfbfef70f2424ba87d08a3552a0ddb075bbfe5df /source/blender/blenkernel/intern/attribute_access.cc | |
parent | 71e3f18b4ae76ee958cf20f2ac2e10172ce8aa3b (diff) |
properly interpolate selection between some domainstemp-geometry-nodes-expandable-geometry-socket-prototype
Diffstat (limited to 'source/blender/blenkernel/intern/attribute_access.cc')
-rw-r--r-- | source/blender/blenkernel/intern/attribute_access.cc | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/source/blender/blenkernel/intern/attribute_access.cc b/source/blender/blenkernel/intern/attribute_access.cc index aa0af294bc3..221a98fdfec 100644 --- a/source/blender/blenkernel/intern/attribute_access.cc +++ b/source/blender/blenkernel/intern/attribute_access.cc @@ -988,9 +988,25 @@ std::unique_ptr<blender::fn::GVArray> GeometryComponent::attribute_try_get_for_r std::unique_ptr<blender::fn::GVArray> varray = std::move(attribute.varray); if (domain != ATTR_DOMAIN_AUTO && attribute.domain != domain) { - varray = this->attribute_try_adapt_domain(std::move(varray), attribute.domain, domain); - if (!varray) { - return {}; + if (this->type() == GEO_COMPONENT_TYPE_MESH && data_type == CD_PROP_BOOL && + varray->type().is<bool>()) { + /* TODO: Not all boolean attributes are selections. */ + const MeshComponent &mesh_component = static_cast<const MeshComponent &>(*this); + blender::VArrayPtr<bool> varray_bool = + std::make_unique<blender::fn::VArray_For_OwnedGVArray<bool>>(std::move(varray)); + varray_bool = mesh_component.adapt_selection( + std::move(varray_bool), attribute.domain, domain); + if (!varray_bool) { + return {}; + } + varray = std::make_unique<blender::fn::GVArray_For_OwnedVArray<bool>>( + std::move(varray_bool)); + } + else { + varray = this->attribute_try_adapt_domain(std::move(varray), attribute.domain, domain); + if (!varray) { + return {}; + } } } |