[Bf-blender-cvs] [a4ad4bc8d3c] geometry-nodes-curve-support: Create curve component with object info node

Hans Goudey noreply at git.blender.org
Fri Apr 2 20:20:07 CEST 2021


Commit: a4ad4bc8d3cc4c1043cd02b4e6a81c8d6d5da3a1
Author: Hans Goudey
Date:   Fri Apr 2 11:20:45 2021 -0500
Branches: geometry-nodes-curve-support
https://developer.blender.org/rBa4ad4bc8d3cc4c1043cd02b4e6a81c8d6d5da3a1

Create curve component with object info node

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

M	source/blender/blenkernel/BKE_geometry_set.hh
M	source/blender/blenkernel/intern/displist.cc
M	source/blender/nodes/geometry/nodes/node_geo_object_info.cc

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

diff --git a/source/blender/blenkernel/BKE_geometry_set.hh b/source/blender/blenkernel/BKE_geometry_set.hh
index 8e12d3afc9e..09c1249d2fb 100644
--- a/source/blender/blenkernel/BKE_geometry_set.hh
+++ b/source/blender/blenkernel/BKE_geometry_set.hh
@@ -34,6 +34,7 @@
 #include "BKE_attribute_access.hh"
 #include "BKE_geometry_set.h"
 
+struct DCurve;
 struct Collection;
 struct Mesh;
 struct Object;
@@ -321,7 +322,7 @@ struct GeometrySet {
       Mesh *mesh, GeometryOwnershipType ownership = GeometryOwnershipType::Owned);
   static GeometrySet create_with_pointcloud(
       PointCloud *pointcloud, GeometryOwnershipType ownership = GeometryOwnershipType::Owned);
-  static GeometrySet GeometrySet::create_with_curve(
+  static GeometrySet create_with_curve(
       DCurve *curve, GeometryOwnershipType ownership = GeometryOwnershipType::Owned);
 
   /* Utility methods for access. */
diff --git a/source/blender/blenkernel/intern/displist.cc b/source/blender/blenkernel/intern/displist.cc
index 90718d85f5b..fb6cc8b1c74 100644
--- a/source/blender/blenkernel/intern/displist.cc
+++ b/source/blender/blenkernel/intern/displist.cc
@@ -897,7 +897,7 @@ static void displist_vert_coords_apply(ListBase *dispbase, const float (*allvert
 
 static Mesh *modifier_modify_mesh_and_geometry_set(ModifierData *md,
                                                    const ModifierEvalContext &mectx,
-                                                   Curve *curve,
+                                                   const Curve *curve,
                                                    Object *ob,
                                                    Mesh *input_mesh,
                                                    GeometrySet &geometry_set)
diff --git a/source/blender/nodes/geometry/nodes/node_geo_object_info.cc b/source/blender/nodes/geometry/nodes/node_geo_object_info.cc
index 54ecb20dae7..a48b3744a9c 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_object_info.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_object_info.cc
@@ -14,18 +14,18 @@
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-#include "node_geometry_util.hh"
+#include "DNA_curve_types.h"
+#include "DNA_object_types.h"
 
-#include "BKE_mesh.h"
-#include "BKE_mesh_wrapper.h"
-#include "BKE_modifier.h"
-#include "BKE_volume.h"
+#include "BKE_derived_curve.hh"
 
 #include "BLI_math_matrix.h"
 
 #include "UI_interface.h"
 #include "UI_resources.h"
 
+#include "node_geometry_util.hh"
+
 static bNodeSocketTemplate geo_node_object_info_in[] = {
     {SOCK_OBJECT, N_("Object")},
     {-1, ""},
@@ -64,28 +64,33 @@ static void geo_node_object_info_exec(GeoNodeExecParams params)
   const Object *self_object = params.self_object();
 
   if (object != nullptr) {
-    float transform[4][4];
-    mul_m4_m4m4(transform, self_object->imat, object->obmat);
-
-    float quaternion[4];
-    if (transform_space_relative) {
-      mat4_decompose(location, quaternion, scale, transform);
+    if (object->type == OB_CURVE) {
+      geometry_set = GeometrySet::create_with_curve(dcurve_from_dna_curve(*(Curve *)object->data));
     }
     else {
-      mat4_decompose(location, quaternion, scale, object->obmat);
-    }
-    quat_to_eul(rotation, quaternion);
-
-    if (object != self_object) {
-      InstancesComponent &instances = geometry_set.get_component_for_write<InstancesComponent>();
+      float transform[4][4];
+      mul_m4_m4m4(transform, self_object->imat, object->obmat);
 
+      float quaternion[4];
       if (transform_space_relative) {
-        instances.add_instance(object, transform);
+        mat4_decompose(location, quaternion, scale, transform);
       }
       else {
-        float unit_transform[4][4];
-        unit_m4(unit_transform);
-        instances.add_instance(object, unit_transform);
+        mat4_decompose(location, quaternion, scale, object->obmat);
+      }
+      quat_to_eul(rotation, quaternion);
+
+      if (object != self_object) {
+        InstancesComponent &instances = geometry_set.get_component_for_write<InstancesComponent>();
+
+        if (transform_space_relative) {
+          instances.add_instance(object, transform);
+        }
+        else {
+          float unit_transform[4][4];
+          unit_m4(unit_transform);
+          instances.add_instance(object, unit_transform);
+        }
       }
     }
   }



More information about the Bf-blender-cvs mailing list