[Bf-blender-cvs] [425b15e23f1] geometry-nodes: Geometry Nodes: use attribute api in point instance node
Jacques Lucke
noreply at git.blender.org
Wed Nov 18 12:29:24 CET 2020
Commit: 425b15e23f199edd3186045ddb52c4d85c9e59a2
Author: Jacques Lucke
Date: Wed Nov 18 12:25:47 2020 +0100
Branches: geometry-nodes
https://developer.blender.org/rB425b15e23f199edd3186045ddb52c4d85c9e59a2
Geometry Nodes: use attribute api in point instance node
===================================================================
M source/blender/nodes/geometry/nodes/node_geo_point_instance.cc
===================================================================
diff --git a/source/blender/nodes/geometry/nodes/node_geo_point_instance.cc b/source/blender/nodes/geometry/nodes/node_geo_point_instance.cc
index 9c4c3dd99b4..c600f383563 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_point_instance.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_point_instance.cc
@@ -38,15 +38,22 @@ static void geo_point_instance_exec(GeoNodeExecParams params)
{
GeometrySet geometry_set = params.extract_input<GeometrySet>("Geometry");
- Vector<float3> positions;
+ Vector<float3> instance_positions;
if (geometry_set.has_pointcloud()) {
- const PointCloud *pointcloud = geometry_set.get_pointcloud_for_read();
- positions.extend((const float3 *)pointcloud->co, pointcloud->totpoint);
+ const PointCloudComponent &pointcloud_component =
+ *geometry_set.get_component_for_read<PointCloudComponent>();
+ Float3ReadAttribute positions = bke::pointcloud_attribute_get_for_read<float3>(
+ pointcloud_component, "Position", {0, 0, 0});
+ for (const int i : IndexRange(positions.size())) {
+ instance_positions.append(positions[i]);
+ }
}
if (geometry_set.has_mesh()) {
- const Mesh *mesh = geometry_set.get_mesh_for_read();
- for (const int i : IndexRange(mesh->totvert)) {
- positions.append(mesh->mvert[i].co);
+ const MeshComponent &mesh_component = *geometry_set.get_component_for_read<MeshComponent>();
+ Float3ReadAttribute positions = bke::mesh_attribute_get_for_read<float3>(
+ mesh_component, "Position", ATTR_DOMAIN_VERTEX, {0, 0, 0});
+ for (const int i : IndexRange(positions.size())) {
+ instance_positions.append(positions[i]);
}
}
@@ -55,7 +62,7 @@ static void geo_point_instance_exec(GeoNodeExecParams params)
Object *object = params.handle_map().lookup(object_handle);
InstancesComponent &instances = geometry_set.get_component_for_write<InstancesComponent>();
- instances.replace(std::move(positions), object);
+ instances.replace(std::move(instance_positions), object);
params.set_output("Geometry", std::move(geometry_set));
}
More information about the Bf-blender-cvs
mailing list