[Bf-blender-cvs] [91971093bbb] geometry-nodes: Geometry Nodes: support controlling instance scale in point instancer node
Jacques Lucke
noreply at git.blender.org
Wed Nov 18 13:41:44 CET 2020
Commit: 91971093bbb400e0f3446740372f1d80ebb58d17
Author: Jacques Lucke
Date: Wed Nov 18 13:41:08 2020 +0100
Branches: geometry-nodes
https://developer.blender.org/rB91971093bbb400e0f3446740372f1d80ebb58d17
Geometry Nodes: support controlling instance scale in point instancer 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 c600f383563..24f2ce8591d 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_point_instance.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_point_instance.cc
@@ -38,31 +38,41 @@ static void geo_point_instance_exec(GeoNodeExecParams params)
{
GeometrySet geometry_set = params.extract_input<GeometrySet>("Geometry");
- Vector<float3> instance_positions;
- if (geometry_set.has_pointcloud()) {
- const PointCloudComponent &pointcloud_component =
- *geometry_set.get_component_for_read<PointCloudComponent>();
+ bke::PersistentObjectHandle object_handle = params.extract_input<bke::PersistentObjectHandle>(
+ "Object");
+ Object *object = params.handle_map().lookup(object_handle);
+
+ InstancesComponent &instances = geometry_set.get_component_for_write<InstancesComponent>();
+
+ const PointCloudComponent *pointcloud_component =
+ geometry_set.get_component_for_read<PointCloudComponent>();
+ if (pointcloud_component != nullptr) {
Float3ReadAttribute positions = bke::pointcloud_attribute_get_for_read<float3>(
- pointcloud_component, "Position", {0, 0, 0});
+ *pointcloud_component, "Position", {0, 0, 0});
+ FloatReadAttribute radii = bke::pointcloud_attribute_get_for_read<float>(
+ *pointcloud_component, "Radius", 1.0f);
+
for (const int i : IndexRange(positions.size())) {
- instance_positions.append(positions[i]);
+ const float radius = radii[i];
+ instances.add_instance(object, positions[i], {0, 0, 0}, {radius, radius, radius});
}
}
- if (geometry_set.has_mesh()) {
- const MeshComponent &mesh_component = *geometry_set.get_component_for_read<MeshComponent>();
+
+ const MeshComponent *mesh_component = geometry_set.get_component_for_read<MeshComponent>();
+ if (mesh_component != nullptr) {
Float3ReadAttribute positions = bke::mesh_attribute_get_for_read<float3>(
- mesh_component, "Position", ATTR_DOMAIN_VERTEX, {0, 0, 0});
+ *mesh_component, "Position", ATTR_DOMAIN_VERTEX, {0, 0, 0});
+ FloatReadAttribute radii = bke::mesh_attribute_get_for_read<float>(
+ *mesh_component, "Radius", ATTR_DOMAIN_VERTEX, 1.0f);
+
for (const int i : IndexRange(positions.size())) {
- instance_positions.append(positions[i]);
+ const float radius = radii[i];
+ instances.add_instance(object, positions[i], {0, 0, 0}, {radius, radius, radius});
}
}
- bke::PersistentObjectHandle object_handle = params.extract_input<bke::PersistentObjectHandle>(
- "Object");
- Object *object = params.handle_map().lookup(object_handle);
-
- InstancesComponent &instances = geometry_set.get_component_for_write<InstancesComponent>();
- instances.replace(std::move(instance_positions), object);
+ geometry_set.replace_mesh(nullptr);
+ geometry_set.replace_pointcloud(nullptr);
params.set_output("Geometry", std::move(geometry_set));
}
More information about the Bf-blender-cvs
mailing list