[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