Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorHans Goudey <h.goudey@me.com>2021-11-05 18:55:51 +0300
committerHans Goudey <h.goudey@me.com>2021-11-05 18:55:51 +0300
commit594ee5f160dd7cbe29d7c406299629ddfacb39ad (patch)
tree8594505b33a62986435565a20f7f685e63d6b551 /source
parent7c755293330e8ebe8717b0a34e6031b4e3186f0d (diff)
Fix T92848: Crash when joining curves with spline domain attributes
The point domain attributes (stored on splines) are sorted so they have a consistent order on all splines after the join. However, spline domain attributes were included in the new order, which didn't work because the length of the attribute lists didn't match. The simple fix is to only include point domain attributes in the new order vector.
Diffstat (limited to 'source')
-rw-r--r--source/blender/blenkernel/intern/geometry_set_instances.cc7
-rw-r--r--source/blender/nodes/geometry/nodes/node_geo_join_geometry.cc7
2 files changed, 10 insertions, 4 deletions
diff --git a/source/blender/blenkernel/intern/geometry_set_instances.cc b/source/blender/blenkernel/intern/geometry_set_instances.cc
index a56c7ffb295..8a7840acd73 100644
--- a/source/blender/blenkernel/intern/geometry_set_instances.cc
+++ b/source/blender/blenkernel/intern/geometry_set_instances.cc
@@ -540,8 +540,11 @@ static void sort_curve_point_attributes(const Map<AttributeIDRef, AttributeKind>
MutableSpan<SplinePtr> splines)
{
Vector<AttributeIDRef> new_order;
- for (const AttributeIDRef attribute_id : info.keys()) {
- new_order.append(attribute_id);
+ for (Map<AttributeIDRef, AttributeKind>::Item item : info.items()) {
+ if (item.value.domain == ATTR_DOMAIN_POINT) {
+ /* Only sort attributes stored on splines. */
+ new_order.append(item.key);
+ }
}
for (SplinePtr &spline : splines) {
spline->attributes.reorder(new_order);
diff --git a/source/blender/nodes/geometry/nodes/node_geo_join_geometry.cc b/source/blender/nodes/geometry/nodes/node_geo_join_geometry.cc
index 110b4a30dc8..9d363bd1af4 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_join_geometry.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_join_geometry.cc
@@ -366,8 +366,11 @@ static void sort_curve_point_attributes(const Map<AttributeIDRef, AttributeMetaD
MutableSpan<SplinePtr> splines)
{
Vector<AttributeIDRef> new_order;
- for (const AttributeIDRef attribute_id : info.keys()) {
- new_order.append(attribute_id);
+ for (Map<AttributeIDRef, AttributeMetaData>::Item item : info.items()) {
+ if (item.value.domain == ATTR_DOMAIN_POINT) {
+ /* Only sort attributes stored on splines. */
+ new_order.append(item.key);
+ }
}
for (SplinePtr &spline : splines) {
spline->attributes.reorder(new_order);