forked from blender/blender
davidhaver-WIP-realize-depth #3
@ -3,7 +3,9 @@
|
|||||||
* SPDX-License-Identifier: GPL-2.0-or-later */
|
* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||||
|
|
||||||
#include "node_geometry_util.hh"
|
#include "node_geometry_util.hh"
|
||||||
#include "GEO_join_geometries.hh"
|
|
||||||
|
#include "BKE_instances.hh"
|
||||||
|
|
||||||
#include "GEO_realize_instances.hh"
|
#include "GEO_realize_instances.hh"
|
||||||
|
|
||||||
#include "UI_interface.hh"
|
#include "UI_interface.hh"
|
||||||
@ -19,7 +21,7 @@ static void node_declare(NodeDeclarationBuilder &b)
|
|||||||
.hide_value()
|
.hide_value()
|
||||||
.supports_field()
|
.supports_field()
|
||||||
.description(("Which top-level instances to realize"));
|
.description(("Which top-level instances to realize"));
|
||||||
b.add_input<decl::Float>("Depth")
|
b.add_input<decl::Int>("Depth")
|
||||||
.default_value(0)
|
.default_value(0)
|
||||||
.supports_field()
|
.supports_field()
|
||||||
.description(
|
.description(
|
||||||
@ -30,7 +32,24 @@ static void node_declare(NodeDeclarationBuilder &b)
|
|||||||
static void node_geo_exec(GeoNodeExecParams params)
|
static void node_geo_exec(GeoNodeExecParams params)
|
||||||
{
|
{
|
||||||
GeometrySet geometry_set = params.extract_input<GeometrySet>("Geometry");
|
GeometrySet geometry_set = params.extract_input<GeometrySet>("Geometry");
|
||||||
|
if (!geometry_set.has_instances()) {
|
||||||
|
params.set_output("Geometry", std::move(geometry_set));
|
||||||
|
return;
|
||||||
|
}
|
||||||
GeometryComponentEditData::remember_deformed_positions_if_necessary(geometry_set);
|
GeometryComponentEditData::remember_deformed_positions_if_necessary(geometry_set);
|
||||||
|
Field<bool> selection_field = params.extract_input<Field<bool>>("Selection");
|
||||||
|
Field<int> depth_field = params.extract_input<Field<int>>("Depth");
|
||||||
|
|
||||||
|
const bke::Instances &instances = *geometry_set.get_instances();
|
||||||
|
const bke::InstancesFieldContext field_context{instances};
|
||||||
|
fn::FieldEvaluator evaluator{field_context, instances.instances_num()};
|
||||||
|
evaluator.set_selection(selection_field);
|
||||||
|
evaluator.add(depth_field);
|
||||||
|
evaluator.evaluate();
|
||||||
|
const VArray<int> depths = evaluator.get_evaluated<int>(0);
|
||||||
|
const IndexMask selection = evaluator.get_evaluated_selection_as_mask();
|
||||||
|
// bke::AnonymousAttributePropagationInfo propagation_info = params.get_output_propagation_info("Geometry");
|
||||||
|
|
||||||
geometry::RealizeInstancesOptions options;
|
geometry::RealizeInstancesOptions options;
|
||||||
options.keep_original_ids = false;
|
options.keep_original_ids = false;
|
||||||
options.realize_instance_attributes = true;
|
options.realize_instance_attributes = true;
|
||||||
|
Loading…
Reference in New Issue
Block a user