Fix: incorrect Exists output in Named Attribute node for grease pencil

Grease pencil needs some special handling because it stores layer attributes
independently of point/curve attributes.
This commit is contained in:
Jacques Lucke
2024-01-16 16:16:12 +01:00
parent 6d63da40ee
commit 6a35c8c99e

View File

@@ -406,8 +406,22 @@ GVArray AttributeFieldInput::get_varray_for_context(const GeometryFieldContext &
GVArray AttributeExistsFieldInput::get_varray_for_context(const bke::GeometryFieldContext &context,
const IndexMask & /*mask*/) const
{
const AttrDomain domain = context.domain();
if (context.type() == GeometryComponent::Type::GreasePencil) {
const AttributeAccessor layer_attributes = context.grease_pencil()->attributes();
if (context.domain() == AttrDomain::Layer) {
const bool exists = layer_attributes.contains(name_);
const int domain_size = layer_attributes.domain_size(AttrDomain::Layer);
return VArray<bool>::ForSingle(exists, domain_size);
}
const greasepencil::Drawing *drawing = context.grease_pencil_layer_drawing();
const AttributeAccessor curve_attributes = drawing->strokes().attributes();
const bool exists = layer_attributes.contains(name_) || curve_attributes.contains(name_);
const int domain_size = curve_attributes.domain_size(domain);
return VArray<bool>::ForSingle(exists, domain_size);
}
const bool exists = context.attributes()->contains(name_);
const int domain_size = context.attributes()->domain_size(context.domain());
const int domain_size = context.attributes()->domain_size(domain);
return VArray<bool>::ForSingle(exists, domain_size);
}