Cleanup: Use consistent order for functions in node files
After this commit, all geometry node "init" and "update" functions are at the top of each file, right below the "layout" function. This means you can always scroll to the bottom of the file to see the entry point, and the boring boilerplate code is grouped in one section.
This commit is contained in:
parent
3d604ba867
commit
58893eaef8
|
@ -51,6 +51,28 @@ static void geo_node_align_rotation_to_vector_layout(uiLayout *layout,
|
|||
|
||||
namespace blender::nodes {
|
||||
|
||||
static void geo_node_align_rotation_to_vector_init(bNodeTree *UNUSED(ntree), bNode *node)
|
||||
{
|
||||
NodeGeometryAlignRotationToVector *node_storage = (NodeGeometryAlignRotationToVector *)
|
||||
MEM_callocN(sizeof(NodeGeometryAlignRotationToVector), __func__);
|
||||
|
||||
node_storage->axis = GEO_NODE_ALIGN_ROTATION_TO_VECTOR_AXIS_X;
|
||||
node_storage->input_type_factor = GEO_NODE_ATTRIBUTE_INPUT_FLOAT;
|
||||
node_storage->input_type_vector = GEO_NODE_ATTRIBUTE_INPUT_VECTOR;
|
||||
|
||||
node->storage = node_storage;
|
||||
}
|
||||
|
||||
static void geo_node_align_rotation_to_vector_update(bNodeTree *UNUSED(ntree), bNode *node)
|
||||
{
|
||||
NodeGeometryAlignRotationToVector *node_storage = (NodeGeometryAlignRotationToVector *)
|
||||
node->storage;
|
||||
update_attribute_input_socket_availabilities(
|
||||
*node, "Factor", (GeometryNodeAttributeInputMode)node_storage->input_type_factor);
|
||||
update_attribute_input_socket_availabilities(
|
||||
*node, "Vector", (GeometryNodeAttributeInputMode)node_storage->input_type_vector);
|
||||
}
|
||||
|
||||
static void align_rotations_auto_pivot(const VArray<float3> &vectors,
|
||||
const VArray<float> &factors,
|
||||
const float3 local_main_axis,
|
||||
|
@ -195,28 +217,6 @@ static void geo_node_align_rotation_to_vector_exec(GeoNodeExecParams params)
|
|||
params.set_output("Geometry", geometry_set);
|
||||
}
|
||||
|
||||
static void geo_node_align_rotation_to_vector_init(bNodeTree *UNUSED(ntree), bNode *node)
|
||||
{
|
||||
NodeGeometryAlignRotationToVector *node_storage = (NodeGeometryAlignRotationToVector *)
|
||||
MEM_callocN(sizeof(NodeGeometryAlignRotationToVector), __func__);
|
||||
|
||||
node_storage->axis = GEO_NODE_ALIGN_ROTATION_TO_VECTOR_AXIS_X;
|
||||
node_storage->input_type_factor = GEO_NODE_ATTRIBUTE_INPUT_FLOAT;
|
||||
node_storage->input_type_vector = GEO_NODE_ATTRIBUTE_INPUT_VECTOR;
|
||||
|
||||
node->storage = node_storage;
|
||||
}
|
||||
|
||||
static void geo_node_align_rotation_to_vector_update(bNodeTree *UNUSED(ntree), bNode *node)
|
||||
{
|
||||
NodeGeometryAlignRotationToVector *node_storage = (NodeGeometryAlignRotationToVector *)
|
||||
node->storage;
|
||||
update_attribute_input_socket_availabilities(
|
||||
*node, "Factor", (GeometryNodeAttributeInputMode)node_storage->input_type_factor);
|
||||
update_attribute_input_socket_availabilities(
|
||||
*node, "Vector", (GeometryNodeAttributeInputMode)node_storage->input_type_vector);
|
||||
}
|
||||
|
||||
} // namespace blender::nodes
|
||||
|
||||
void register_node_type_geo_align_rotation_to_vector()
|
||||
|
|
|
@ -44,6 +44,14 @@ static void geo_node_attribute_color_ramp_layout(uiLayout *layout,
|
|||
|
||||
namespace blender::nodes {
|
||||
|
||||
static void geo_node_attribute_color_ramp_init(bNodeTree *UNUSED(ntree), bNode *node)
|
||||
{
|
||||
NodeAttributeColorRamp *node_storage = (NodeAttributeColorRamp *)MEM_callocN(
|
||||
sizeof(NodeAttributeColorRamp), __func__);
|
||||
BKE_colorband_init(&node_storage->color_ramp, true);
|
||||
node->storage = node_storage;
|
||||
}
|
||||
|
||||
static AttributeDomain get_result_domain(const GeometryComponent &component,
|
||||
StringRef input_name,
|
||||
StringRef result_name)
|
||||
|
@ -115,14 +123,6 @@ static void geo_node_attribute_color_ramp_exec(GeoNodeExecParams params)
|
|||
params.set_output("Geometry", std::move(geometry_set));
|
||||
}
|
||||
|
||||
static void geo_node_attribute_color_ramp_init(bNodeTree *UNUSED(ntree), bNode *node)
|
||||
{
|
||||
NodeAttributeColorRamp *node_storage = (NodeAttributeColorRamp *)MEM_callocN(
|
||||
sizeof(NodeAttributeColorRamp), __func__);
|
||||
BKE_colorband_init(&node_storage->color_ramp, true);
|
||||
node->storage = node_storage;
|
||||
}
|
||||
|
||||
} // namespace blender::nodes
|
||||
|
||||
void register_node_type_geo_attribute_color_ramp()
|
||||
|
|
|
@ -59,6 +59,28 @@ static void geo_node_attribute_mix_layout(uiLayout *layout, bContext *UNUSED(C),
|
|||
|
||||
namespace blender::nodes {
|
||||
|
||||
static void geo_node_attribute_mix_init(bNodeTree *UNUSED(ntree), bNode *node)
|
||||
{
|
||||
NodeAttributeMix *data = (NodeAttributeMix *)MEM_callocN(sizeof(NodeAttributeMix),
|
||||
"attribute mix node");
|
||||
data->blend_type = MA_RAMP_BLEND;
|
||||
data->input_type_factor = GEO_NODE_ATTRIBUTE_INPUT_FLOAT;
|
||||
data->input_type_a = GEO_NODE_ATTRIBUTE_INPUT_ATTRIBUTE;
|
||||
data->input_type_b = GEO_NODE_ATTRIBUTE_INPUT_ATTRIBUTE;
|
||||
node->storage = data;
|
||||
}
|
||||
|
||||
static void geo_node_attribute_mix_update(bNodeTree *UNUSED(ntree), bNode *node)
|
||||
{
|
||||
NodeAttributeMix *node_storage = (NodeAttributeMix *)node->storage;
|
||||
update_attribute_input_socket_availabilities(
|
||||
*node, "Factor", (GeometryNodeAttributeInputMode)node_storage->input_type_factor);
|
||||
update_attribute_input_socket_availabilities(
|
||||
*node, "A", (GeometryNodeAttributeInputMode)node_storage->input_type_a);
|
||||
update_attribute_input_socket_availabilities(
|
||||
*node, "B", (GeometryNodeAttributeInputMode)node_storage->input_type_b);
|
||||
}
|
||||
|
||||
static void do_mix_operation_float(const int blend_mode,
|
||||
const VArray<float> &factors,
|
||||
const VArray<float> &inputs_a,
|
||||
|
@ -216,28 +238,6 @@ static void geo_node_attribute_mix_exec(GeoNodeExecParams params)
|
|||
params.set_output("Geometry", geometry_set);
|
||||
}
|
||||
|
||||
static void geo_node_attribute_mix_init(bNodeTree *UNUSED(ntree), bNode *node)
|
||||
{
|
||||
NodeAttributeMix *data = (NodeAttributeMix *)MEM_callocN(sizeof(NodeAttributeMix),
|
||||
"attribute mix node");
|
||||
data->blend_type = MA_RAMP_BLEND;
|
||||
data->input_type_factor = GEO_NODE_ATTRIBUTE_INPUT_FLOAT;
|
||||
data->input_type_a = GEO_NODE_ATTRIBUTE_INPUT_ATTRIBUTE;
|
||||
data->input_type_b = GEO_NODE_ATTRIBUTE_INPUT_ATTRIBUTE;
|
||||
node->storage = data;
|
||||
}
|
||||
|
||||
static void geo_node_attribute_mix_update(bNodeTree *UNUSED(ntree), bNode *node)
|
||||
{
|
||||
NodeAttributeMix *node_storage = (NodeAttributeMix *)node->storage;
|
||||
update_attribute_input_socket_availabilities(
|
||||
*node, "Factor", (GeometryNodeAttributeInputMode)node_storage->input_type_factor);
|
||||
update_attribute_input_socket_availabilities(
|
||||
*node, "A", (GeometryNodeAttributeInputMode)node_storage->input_type_a);
|
||||
update_attribute_input_socket_availabilities(
|
||||
*node, "B", (GeometryNodeAttributeInputMode)node_storage->input_type_b);
|
||||
}
|
||||
|
||||
} // namespace blender::nodes
|
||||
|
||||
void register_node_type_geo_attribute_mix()
|
||||
|
|
|
@ -40,6 +40,14 @@ static void geo_node_collection_info_layout(uiLayout *layout, bContext *UNUSED(C
|
|||
|
||||
namespace blender::nodes {
|
||||
|
||||
static void geo_node_collection_info_node_init(bNodeTree *UNUSED(tree), bNode *node)
|
||||
{
|
||||
NodeGeometryCollectionInfo *data = (NodeGeometryCollectionInfo *)MEM_callocN(
|
||||
sizeof(NodeGeometryCollectionInfo), __func__);
|
||||
data->transform_space = GEO_NODE_TRANSFORM_SPACE_ORIGINAL;
|
||||
node->storage = data;
|
||||
}
|
||||
|
||||
static void geo_node_collection_info_exec(GeoNodeExecParams params)
|
||||
{
|
||||
Collection *collection = params.get_input<Collection *>("Collection");
|
||||
|
@ -74,14 +82,6 @@ static void geo_node_collection_info_exec(GeoNodeExecParams params)
|
|||
params.set_output("Geometry", geometry_set_out);
|
||||
}
|
||||
|
||||
static void geo_node_collection_info_node_init(bNodeTree *UNUSED(tree), bNode *node)
|
||||
{
|
||||
NodeGeometryCollectionInfo *data = (NodeGeometryCollectionInfo *)MEM_callocN(
|
||||
sizeof(NodeGeometryCollectionInfo), __func__);
|
||||
data->transform_space = GEO_NODE_TRANSFORM_SPACE_ORIGINAL;
|
||||
node->storage = data;
|
||||
}
|
||||
|
||||
} // namespace blender::nodes
|
||||
|
||||
void register_node_type_geo_collection_info()
|
||||
|
|
|
@ -44,6 +44,7 @@ static bNodeSocketTemplate geo_node_edge_split_out[] = {
|
|||
};
|
||||
|
||||
namespace blender::nodes {
|
||||
|
||||
static void geo_node_edge_split_exec(GeoNodeExecParams params)
|
||||
{
|
||||
GeometrySet geometry_set = params.extract_input<GeometrySet>("Geometry");
|
||||
|
@ -82,6 +83,7 @@ static void geo_node_edge_split_exec(GeoNodeExecParams params)
|
|||
|
||||
params.set_output("Geometry", std::move(geometry_set));
|
||||
}
|
||||
|
||||
} // namespace blender::nodes
|
||||
|
||||
void register_node_type_geo_edge_split()
|
||||
|
|
|
@ -47,6 +47,15 @@ static void geo_node_point_instance_layout(uiLayout *layout, bContext *UNUSED(C)
|
|||
|
||||
namespace blender::nodes {
|
||||
|
||||
static void geo_node_point_instance_init(bNodeTree *UNUSED(tree), bNode *node)
|
||||
{
|
||||
NodeGeometryPointInstance *data = (NodeGeometryPointInstance *)MEM_callocN(
|
||||
sizeof(NodeGeometryPointInstance), __func__);
|
||||
data->instance_type = GEO_NODE_POINT_INSTANCE_TYPE_OBJECT;
|
||||
data->flag |= GEO_NODE_POINT_INSTANCE_WHOLE_COLLECTION;
|
||||
node->storage = data;
|
||||
}
|
||||
|
||||
static void geo_node_point_instance_update(bNodeTree *UNUSED(tree), bNode *node)
|
||||
{
|
||||
bNodeSocket *object_socket = (bNodeSocket *)BLI_findlink(&node->inputs, 1);
|
||||
|
@ -234,15 +243,6 @@ static void geo_node_point_instance_exec(GeoNodeExecParams params)
|
|||
params.set_output("Geometry", std::move(geometry_set_out));
|
||||
}
|
||||
|
||||
static void geo_node_point_instance_init(bNodeTree *UNUSED(tree), bNode *node)
|
||||
{
|
||||
NodeGeometryPointInstance *data = (NodeGeometryPointInstance *)MEM_callocN(
|
||||
sizeof(NodeGeometryPointInstance), __func__);
|
||||
data->instance_type = GEO_NODE_POINT_INSTANCE_TYPE_OBJECT;
|
||||
data->flag |= GEO_NODE_POINT_INSTANCE_WHOLE_COLLECTION;
|
||||
node->storage = data;
|
||||
}
|
||||
|
||||
} // namespace blender::nodes
|
||||
|
||||
void register_node_type_geo_point_instance()
|
||||
|
|
|
@ -59,6 +59,40 @@ static void geo_node_point_rotate_layout(uiLayout *layout, bContext *UNUSED(C),
|
|||
|
||||
namespace blender::nodes {
|
||||
|
||||
static void geo_node_point_rotate_init(bNodeTree *UNUSED(ntree), bNode *node)
|
||||
{
|
||||
NodeGeometryRotatePoints *node_storage = (NodeGeometryRotatePoints *)MEM_callocN(
|
||||
sizeof(NodeGeometryRotatePoints), __func__);
|
||||
|
||||
node_storage->type = GEO_NODE_POINT_ROTATE_TYPE_EULER;
|
||||
node_storage->space = GEO_NODE_POINT_ROTATE_SPACE_OBJECT;
|
||||
node_storage->input_type_axis = GEO_NODE_ATTRIBUTE_INPUT_VECTOR;
|
||||
node_storage->input_type_angle = GEO_NODE_ATTRIBUTE_INPUT_FLOAT;
|
||||
node_storage->input_type_rotation = GEO_NODE_ATTRIBUTE_INPUT_VECTOR;
|
||||
|
||||
node->storage = node_storage;
|
||||
}
|
||||
|
||||
static void geo_node_point_rotate_update(bNodeTree *UNUSED(ntree), bNode *node)
|
||||
{
|
||||
NodeGeometryRotatePoints *node_storage = (NodeGeometryRotatePoints *)node->storage;
|
||||
update_attribute_input_socket_availabilities(
|
||||
*node,
|
||||
"Axis",
|
||||
(GeometryNodeAttributeInputMode)node_storage->input_type_axis,
|
||||
node_storage->type == GEO_NODE_POINT_ROTATE_TYPE_AXIS_ANGLE);
|
||||
update_attribute_input_socket_availabilities(
|
||||
*node,
|
||||
"Angle",
|
||||
(GeometryNodeAttributeInputMode)node_storage->input_type_angle,
|
||||
node_storage->type == GEO_NODE_POINT_ROTATE_TYPE_AXIS_ANGLE);
|
||||
update_attribute_input_socket_availabilities(
|
||||
*node,
|
||||
"Rotation",
|
||||
(GeometryNodeAttributeInputMode)node_storage->input_type_rotation,
|
||||
node_storage->type == GEO_NODE_POINT_ROTATE_TYPE_EULER);
|
||||
}
|
||||
|
||||
static void point_rotate__axis_angle__object_space(const int domain_size,
|
||||
const VArray<float3> &axis,
|
||||
const VArray<float> &angles,
|
||||
|
@ -183,40 +217,6 @@ static void geo_node_point_rotate_exec(GeoNodeExecParams params)
|
|||
params.set_output("Geometry", geometry_set);
|
||||
}
|
||||
|
||||
static void geo_node_point_rotate_init(bNodeTree *UNUSED(ntree), bNode *node)
|
||||
{
|
||||
NodeGeometryRotatePoints *node_storage = (NodeGeometryRotatePoints *)MEM_callocN(
|
||||
sizeof(NodeGeometryRotatePoints), __func__);
|
||||
|
||||
node_storage->type = GEO_NODE_POINT_ROTATE_TYPE_EULER;
|
||||
node_storage->space = GEO_NODE_POINT_ROTATE_SPACE_OBJECT;
|
||||
node_storage->input_type_axis = GEO_NODE_ATTRIBUTE_INPUT_VECTOR;
|
||||
node_storage->input_type_angle = GEO_NODE_ATTRIBUTE_INPUT_FLOAT;
|
||||
node_storage->input_type_rotation = GEO_NODE_ATTRIBUTE_INPUT_VECTOR;
|
||||
|
||||
node->storage = node_storage;
|
||||
}
|
||||
|
||||
static void geo_node_point_rotate_update(bNodeTree *UNUSED(ntree), bNode *node)
|
||||
{
|
||||
NodeGeometryRotatePoints *node_storage = (NodeGeometryRotatePoints *)node->storage;
|
||||
update_attribute_input_socket_availabilities(
|
||||
*node,
|
||||
"Axis",
|
||||
(GeometryNodeAttributeInputMode)node_storage->input_type_axis,
|
||||
node_storage->type == GEO_NODE_POINT_ROTATE_TYPE_AXIS_ANGLE);
|
||||
update_attribute_input_socket_availabilities(
|
||||
*node,
|
||||
"Angle",
|
||||
(GeometryNodeAttributeInputMode)node_storage->input_type_angle,
|
||||
node_storage->type == GEO_NODE_POINT_ROTATE_TYPE_AXIS_ANGLE);
|
||||
update_attribute_input_socket_availabilities(
|
||||
*node,
|
||||
"Rotation",
|
||||
(GeometryNodeAttributeInputMode)node_storage->input_type_rotation,
|
||||
node_storage->type == GEO_NODE_POINT_ROTATE_TYPE_EULER);
|
||||
}
|
||||
|
||||
} // namespace blender::nodes
|
||||
|
||||
void register_node_type_geo_point_rotate()
|
||||
|
|
|
@ -43,6 +43,23 @@ static void geo_node_point_scale_layout(uiLayout *layout, bContext *UNUSED(C), P
|
|||
|
||||
namespace blender::nodes {
|
||||
|
||||
static void geo_node_point_scale_init(bNodeTree *UNUSED(tree), bNode *node)
|
||||
{
|
||||
NodeGeometryPointScale *data = (NodeGeometryPointScale *)MEM_callocN(
|
||||
sizeof(NodeGeometryPointScale), __func__);
|
||||
|
||||
data->input_type = GEO_NODE_ATTRIBUTE_INPUT_VECTOR;
|
||||
node->storage = data;
|
||||
}
|
||||
|
||||
static void geo_node_point_scale_update(bNodeTree *UNUSED(ntree), bNode *node)
|
||||
{
|
||||
NodeGeometryPointScale &node_storage = *(NodeGeometryPointScale *)node->storage;
|
||||
|
||||
update_attribute_input_socket_availabilities(
|
||||
*node, "Factor", (GeometryNodeAttributeInputMode)node_storage.input_type);
|
||||
}
|
||||
|
||||
static void execute_on_component(GeoNodeExecParams params, GeometryComponent &component)
|
||||
{
|
||||
/* Note that scale doesn't necessarily need to be created with a vector type-- it could also use
|
||||
|
@ -102,23 +119,6 @@ static void geo_node_point_scale_exec(GeoNodeExecParams params)
|
|||
params.set_output("Geometry", std::move(geometry_set));
|
||||
}
|
||||
|
||||
static void geo_node_point_scale_init(bNodeTree *UNUSED(tree), bNode *node)
|
||||
{
|
||||
NodeGeometryPointScale *data = (NodeGeometryPointScale *)MEM_callocN(
|
||||
sizeof(NodeGeometryPointScale), __func__);
|
||||
|
||||
data->input_type = GEO_NODE_ATTRIBUTE_INPUT_VECTOR;
|
||||
node->storage = data;
|
||||
}
|
||||
|
||||
static void geo_node_point_scale_update(bNodeTree *UNUSED(ntree), bNode *node)
|
||||
{
|
||||
NodeGeometryPointScale &node_storage = *(NodeGeometryPointScale *)node->storage;
|
||||
|
||||
update_attribute_input_socket_availabilities(
|
||||
*node, "Factor", (GeometryNodeAttributeInputMode)node_storage.input_type);
|
||||
}
|
||||
|
||||
} // namespace blender::nodes
|
||||
|
||||
void register_node_type_geo_point_scale()
|
||||
|
|
|
@ -55,6 +55,35 @@ static void geo_node_points_to_volume_layout(uiLayout *layout,
|
|||
|
||||
namespace blender::nodes {
|
||||
|
||||
static void geo_node_points_to_volume_init(bNodeTree *UNUSED(ntree), bNode *node)
|
||||
{
|
||||
NodeGeometryPointsToVolume *data = (NodeGeometryPointsToVolume *)MEM_callocN(
|
||||
sizeof(NodeGeometryPointsToVolume), __func__);
|
||||
data->resolution_mode = GEO_NODE_POINTS_TO_VOLUME_RESOLUTION_MODE_AMOUNT;
|
||||
data->input_type_radius = GEO_NODE_ATTRIBUTE_INPUT_FLOAT;
|
||||
node->storage = data;
|
||||
|
||||
bNodeSocket *radius_attribute_socket = nodeFindSocket(node, SOCK_IN, "Radius");
|
||||
bNodeSocketValueString *radius_attribute_socket_value =
|
||||
(bNodeSocketValueString *)radius_attribute_socket->default_value;
|
||||
STRNCPY(radius_attribute_socket_value->value, "radius");
|
||||
}
|
||||
|
||||
static void geo_node_points_to_volume_update(bNodeTree *UNUSED(ntree), bNode *node)
|
||||
{
|
||||
NodeGeometryPointsToVolume *data = (NodeGeometryPointsToVolume *)node->storage;
|
||||
bNodeSocket *voxel_size_socket = nodeFindSocket(node, SOCK_IN, "Voxel Size");
|
||||
bNodeSocket *voxel_amount_socket = nodeFindSocket(node, SOCK_IN, "Voxel Amount");
|
||||
nodeSetSocketAvailability(voxel_amount_socket,
|
||||
data->resolution_mode ==
|
||||
GEO_NODE_POINTS_TO_VOLUME_RESOLUTION_MODE_AMOUNT);
|
||||
nodeSetSocketAvailability(
|
||||
voxel_size_socket, data->resolution_mode == GEO_NODE_POINTS_TO_VOLUME_RESOLUTION_MODE_SIZE);
|
||||
|
||||
update_attribute_input_socket_availabilities(
|
||||
*node, "Radius", (GeometryNodeAttributeInputMode)data->input_type_radius);
|
||||
}
|
||||
|
||||
#ifdef WITH_OPENVDB
|
||||
namespace {
|
||||
/* Implements the interface required by #openvdb::tools::ParticlesToLevelSet. */
|
||||
|
@ -231,35 +260,6 @@ static void geo_node_points_to_volume_exec(GeoNodeExecParams params)
|
|||
params.set_output("Geometry", std::move(geometry_set_out));
|
||||
}
|
||||
|
||||
static void geo_node_points_to_volume_init(bNodeTree *UNUSED(ntree), bNode *node)
|
||||
{
|
||||
NodeGeometryPointsToVolume *data = (NodeGeometryPointsToVolume *)MEM_callocN(
|
||||
sizeof(NodeGeometryPointsToVolume), __func__);
|
||||
data->resolution_mode = GEO_NODE_POINTS_TO_VOLUME_RESOLUTION_MODE_AMOUNT;
|
||||
data->input_type_radius = GEO_NODE_ATTRIBUTE_INPUT_FLOAT;
|
||||
node->storage = data;
|
||||
|
||||
bNodeSocket *radius_attribute_socket = nodeFindSocket(node, SOCK_IN, "Radius");
|
||||
bNodeSocketValueString *radius_attribute_socket_value =
|
||||
(bNodeSocketValueString *)radius_attribute_socket->default_value;
|
||||
STRNCPY(radius_attribute_socket_value->value, "radius");
|
||||
}
|
||||
|
||||
static void geo_node_points_to_volume_update(bNodeTree *UNUSED(ntree), bNode *node)
|
||||
{
|
||||
NodeGeometryPointsToVolume *data = (NodeGeometryPointsToVolume *)node->storage;
|
||||
bNodeSocket *voxel_size_socket = nodeFindSocket(node, SOCK_IN, "Voxel Size");
|
||||
bNodeSocket *voxel_amount_socket = nodeFindSocket(node, SOCK_IN, "Voxel Amount");
|
||||
nodeSetSocketAvailability(voxel_amount_socket,
|
||||
data->resolution_mode ==
|
||||
GEO_NODE_POINTS_TO_VOLUME_RESOLUTION_MODE_AMOUNT);
|
||||
nodeSetSocketAvailability(
|
||||
voxel_size_socket, data->resolution_mode == GEO_NODE_POINTS_TO_VOLUME_RESOLUTION_MODE_SIZE);
|
||||
|
||||
update_attribute_input_socket_availabilities(
|
||||
*node, "Radius", (GeometryNodeAttributeInputMode)data->input_type_radius);
|
||||
}
|
||||
|
||||
} // namespace blender::nodes
|
||||
|
||||
void register_node_type_geo_points_to_volume()
|
||||
|
|
|
@ -70,20 +70,6 @@ static void geo_node_switch_init(bNodeTree *UNUSED(tree), bNode *node)
|
|||
|
||||
namespace blender::nodes {
|
||||
|
||||
template<typename T>
|
||||
void output_input(GeoNodeExecParams ¶ms,
|
||||
const bool input,
|
||||
const StringRef input_suffix,
|
||||
const StringRef output_identifier)
|
||||
{
|
||||
if (input) {
|
||||
params.set_output(output_identifier, params.extract_input<T>("B" + input_suffix));
|
||||
}
|
||||
else {
|
||||
params.set_output(output_identifier, params.extract_input<T>("A" + input_suffix));
|
||||
}
|
||||
}
|
||||
|
||||
static void geo_node_switch_update(bNodeTree *UNUSED(ntree), bNode *node)
|
||||
{
|
||||
NodeSwitch *node_storage = (NodeSwitch *)node->storage;
|
||||
|
@ -99,6 +85,20 @@ static void geo_node_switch_update(bNodeTree *UNUSED(ntree), bNode *node)
|
|||
}
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
void output_input(GeoNodeExecParams ¶ms,
|
||||
const bool input,
|
||||
const StringRef input_suffix,
|
||||
const StringRef output_identifier)
|
||||
{
|
||||
if (input) {
|
||||
params.set_output(output_identifier, params.extract_input<T>("B" + input_suffix));
|
||||
}
|
||||
else {
|
||||
params.set_output(output_identifier, params.extract_input<T>("A" + input_suffix));
|
||||
}
|
||||
}
|
||||
|
||||
static void geo_node_switch_exec(GeoNodeExecParams params)
|
||||
{
|
||||
const NodeSwitch &storage = *(const NodeSwitch *)params.node().storage;
|
||||
|
|
|
@ -179,22 +179,18 @@ static void geo_node_transform_exec(GeoNodeExecParams params)
|
|||
Mesh *mesh = geometry_set.get_mesh_for_write();
|
||||
transform_mesh(mesh, translation, rotation, scale);
|
||||
}
|
||||
|
||||
if (geometry_set.has_pointcloud()) {
|
||||
PointCloud *pointcloud = geometry_set.get_pointcloud_for_write();
|
||||
transform_pointcloud(pointcloud, translation, rotation, scale);
|
||||
}
|
||||
|
||||
if (geometry_set.has_instances()) {
|
||||
InstancesComponent &instances = geometry_set.get_component_for_write<InstancesComponent>();
|
||||
transform_instances(instances, translation, rotation, scale);
|
||||
}
|
||||
|
||||
if (geometry_set.has_volume()) {
|
||||
Volume *volume = geometry_set.get_volume_for_write();
|
||||
transform_volume(volume, translation, rotation, scale, params);
|
||||
}
|
||||
|
||||
if (geometry_set.has_curve()) {
|
||||
CurveEval *curve = geometry_set.get_curve_for_write();
|
||||
transform_curve(*curve, translation, rotation, scale);
|
||||
|
|
Loading…
Reference in New Issue