Changeset View
Changeset View
Standalone View
Standalone View
source/blender/nodes/geometry/nodes/node_geo_set_position.cc
| Show First 20 Lines • Show All 113 Lines • ▼ Show 20 Lines | AttributeDomain domain = component.type() == GEO_COMPONENT_TYPE_INSTANCES ? | ||||
| ATTR_DOMAIN_INSTANCE : | ATTR_DOMAIN_INSTANCE : | ||||
| ATTR_DOMAIN_POINT; | ATTR_DOMAIN_POINT; | ||||
| GeometryComponentFieldContext field_context{component, domain}; | GeometryComponentFieldContext field_context{component, domain}; | ||||
| const int domain_size = component.attribute_domain_size(domain); | const int domain_size = component.attribute_domain_size(domain); | ||||
| if (domain_size == 0) { | if (domain_size == 0) { | ||||
| return; | return; | ||||
| } | } | ||||
| fn::FieldEvaluator selection_evaluator{field_context, domain_size}; | fn::FieldEvaluator evaluator{field_context, domain_size}; | ||||
| selection_evaluator.add(selection_field); | evaluator.set_selection(selection_field); | ||||
| selection_evaluator.evaluate(); | evaluator.add(position_field); | ||||
| const IndexMask selection = selection_evaluator.get_evaluated_as_mask(0); | evaluator.add(offset_field); | ||||
| evaluator.evaluate(); | |||||
| fn::FieldEvaluator position_evaluator{field_context, &selection}; | |||||
| position_evaluator.add(position_field); | const IndexMask selection = evaluator.get_evaluated_selection_as_mask(); | ||||
| position_evaluator.add(offset_field); | const VArray<float3> &positions_input = evaluator.get_evaluated<float3>(0); | ||||
| position_evaluator.evaluate(); | const VArray<float3> &offsets_input = evaluator.get_evaluated<float3>(1); | ||||
| const VArray<float3> &positions_input = position_evaluator.get_evaluated<float3>(0); | |||||
| const VArray<float3> &offsets_input = position_evaluator.get_evaluated<float3>(1); | |||||
| set_computed_position_and_offset(component, positions_input, offsets_input, domain, selection); | set_computed_position_and_offset(component, positions_input, offsets_input, domain, selection); | ||||
| } | } | ||||
| static void node_geo_exec(GeoNodeExecParams params) | static void node_geo_exec(GeoNodeExecParams params) | ||||
| { | { | ||||
| GeometrySet geometry = params.extract_input<GeometrySet>("Geometry"); | GeometrySet geometry = params.extract_input<GeometrySet>("Geometry"); | ||||
| Field<bool> selection_field = params.extract_input<Field<bool>>("Selection"); | Field<bool> selection_field = params.extract_input<Field<bool>>("Selection"); | ||||
| Field<float3> offset_field = params.extract_input<Field<float3>>("Offset"); | Field<float3> offset_field = params.extract_input<Field<float3>>("Offset"); | ||||
| Show All 28 Lines | |||||