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:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user