[Bf-blender-cvs] [594ee5f160d] blender-v3.0-release: Fix T92848: Crash when joining curves with spline domain attributes

Hans Goudey noreply at git.blender.org
Fri Nov 5 16:56:34 CET 2021


Commit: 594ee5f160dd7cbe29d7c406299629ddfacb39ad
Author: Hans Goudey
Date:   Fri Nov 5 10:55:51 2021 -0500
Branches: blender-v3.0-release
https://developer.blender.org/rB594ee5f160dd7cbe29d7c406299629ddfacb39ad

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.

===================================================================

M	source/blender/blenkernel/intern/geometry_set_instances.cc
M	source/blender/nodes/geometry/nodes/node_geo_join_geometry.cc

===================================================================

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);



More information about the Bf-blender-cvs mailing list