Changeset View
Changeset View
Standalone View
Standalone View
source/blender/nodes/geometry/nodes/node_geo_attribute_fill.cc
| Show All 21 Lines | |||||
| #include "DNA_pointcloud_types.h" | #include "DNA_pointcloud_types.h" | ||||
| static bNodeSocketTemplate geo_node_attribute_fill_in[] = { | static bNodeSocketTemplate geo_node_attribute_fill_in[] = { | ||||
| {SOCK_GEOMETRY, N_("Geometry")}, | {SOCK_GEOMETRY, N_("Geometry")}, | ||||
| {SOCK_STRING, N_("Attribute")}, | {SOCK_STRING, N_("Attribute")}, | ||||
| {SOCK_VECTOR, N_("Value"), 0.0f, 0.0f, 0.0f, 0.0f, -FLT_MAX, FLT_MAX}, | {SOCK_VECTOR, N_("Value"), 0.0f, 0.0f, 0.0f, 0.0f, -FLT_MAX, FLT_MAX}, | ||||
| {SOCK_FLOAT, N_("Value"), 0.0f, 0.0f, 0.0f, 0.0f, -FLT_MAX, FLT_MAX}, | {SOCK_FLOAT, N_("Value"), 0.0f, 0.0f, 0.0f, 0.0f, -FLT_MAX, FLT_MAX}, | ||||
| {SOCK_RGBA, N_("Value"), 0.0f, 0.0f, 0.0f, 0.0f, -FLT_MAX, FLT_MAX}, | {SOCK_RGBA, N_("Value"), 0.0f, 0.0f, 0.0f, 0.0f, -FLT_MAX, FLT_MAX}, | ||||
| {SOCK_BOOLEAN, N_("Value"), 0.0f, 0.0f, 0.0f, 0.0f, -FLT_MAX, FLT_MAX}, | |||||
| {-1, ""}, | {-1, ""}, | ||||
| }; | }; | ||||
| static bNodeSocketTemplate geo_node_attribute_fill_out[] = { | static bNodeSocketTemplate geo_node_attribute_fill_out[] = { | ||||
| {SOCK_GEOMETRY, N_("Geometry")}, | {SOCK_GEOMETRY, N_("Geometry")}, | ||||
| {-1, ""}, | {-1, ""}, | ||||
| }; | }; | ||||
| static void geo_node_attribute_fill_init(bNodeTree *UNUSED(tree), bNode *node) | static void geo_node_attribute_fill_init(bNodeTree *UNUSED(tree), bNode *node) | ||||
| { | { | ||||
| node->custom1 = CD_PROP_FLOAT; | node->custom1 = CD_PROP_FLOAT; | ||||
| } | } | ||||
| static void geo_node_attribute_fill_update(bNodeTree *UNUSED(ntree), bNode *node) | static void geo_node_attribute_fill_update(bNodeTree *UNUSED(ntree), bNode *node) | ||||
| { | { | ||||
| bNodeSocket *socket_value_vector = (bNodeSocket *)BLI_findlink(&node->inputs, 2); | bNodeSocket *socket_value_vector = (bNodeSocket *)BLI_findlink(&node->inputs, 2); | ||||
| bNodeSocket *socket_value_float = socket_value_vector->next; | bNodeSocket *socket_value_float = socket_value_vector->next; | ||||
| bNodeSocket *socket_value_color4f = socket_value_float->next; | bNodeSocket *socket_value_color4f = socket_value_float->next; | ||||
| bNodeSocket *socket_value_boolean = socket_value_color4f->next; | |||||
| const CustomDataType data_type = static_cast<CustomDataType>(node->custom1); | const CustomDataType data_type = static_cast<CustomDataType>(node->custom1); | ||||
| nodeSetSocketAvailability(socket_value_vector, data_type == CD_PROP_FLOAT3); | nodeSetSocketAvailability(socket_value_vector, data_type == CD_PROP_FLOAT3); | ||||
| nodeSetSocketAvailability(socket_value_float, data_type == CD_PROP_FLOAT); | nodeSetSocketAvailability(socket_value_float, data_type == CD_PROP_FLOAT); | ||||
| nodeSetSocketAvailability(socket_value_color4f, data_type == CD_PROP_COLOR); | nodeSetSocketAvailability(socket_value_color4f, data_type == CD_PROP_COLOR); | ||||
| nodeSetSocketAvailability(socket_value_boolean, data_type == CD_PROP_BOOL); | |||||
| } | } | ||||
| namespace blender::nodes { | namespace blender::nodes { | ||||
| static void fill_attribute(GeometryComponent &component, const GeoNodeExecParams ¶ms) | static void fill_attribute(GeometryComponent &component, const GeoNodeExecParams ¶ms) | ||||
| { | { | ||||
| const bNode &node = params.node(); | const bNode &node = params.node(); | ||||
| const CustomDataType data_type = static_cast<CustomDataType>(node.custom1); | const CustomDataType data_type = static_cast<CustomDataType>(node.custom1); | ||||
| Show All 29 Lines | switch (data_type) { | ||||
| case CD_PROP_COLOR: { | case CD_PROP_COLOR: { | ||||
| Color4fWriteAttribute color4f_attribute = std::move(attribute); | Color4fWriteAttribute color4f_attribute = std::move(attribute); | ||||
| const Color4f value = params.get_input<Color4f>("Value_002"); | const Color4f value = params.get_input<Color4f>("Value_002"); | ||||
| MutableSpan<Color4f> attribute_span = color4f_attribute.get_span(); | MutableSpan<Color4f> attribute_span = color4f_attribute.get_span(); | ||||
| attribute_span.fill(value); | attribute_span.fill(value); | ||||
| color4f_attribute.apply_span(); | color4f_attribute.apply_span(); | ||||
| break; | break; | ||||
| } | } | ||||
| case CD_PROP_BOOL: { | |||||
| BooleanWriteAttribute boolean_attribute = std::move(attribute); | |||||
| const bool value = params.get_input<bool>("Value_003"); | |||||
| MutableSpan<bool> attribute_span = boolean_attribute.get_span(); | |||||
| attribute_span.fill(value); | |||||
| boolean_attribute.apply_span(); | |||||
| break; | |||||
| } | |||||
| default: | default: | ||||
| break; | break; | ||||
| } | } | ||||
| } | } | ||||
| static void geo_node_attribute_fill_exec(GeoNodeExecParams params) | static void geo_node_attribute_fill_exec(GeoNodeExecParams params) | ||||
| { | { | ||||
| GeometrySet geometry_set = params.extract_input<GeometrySet>("Geometry"); | GeometrySet geometry_set = params.extract_input<GeometrySet>("Geometry"); | ||||
| Show All 24 Lines | |||||