Blender
V4.3
source
blender
nodes
geometry
nodes
node_geo_points.cc
Go to the documentation of this file.
1
/* SPDX-FileCopyrightText: 2023 Blender Authors
2
*
3
* SPDX-License-Identifier: GPL-2.0-or-later */
4
5
#include "
BKE_pointcloud.hh
"
6
#include "
DNA_pointcloud_types.h
"
7
8
#include "
BLI_task.hh
"
9
10
#include "
node_geometry_util.hh
"
11
12
namespace
blender::nodes::node_geo_points_cc
{
13
14
static
void
node_declare
(
NodeDeclarationBuilder
&
b
)
15
{
16
b
.add_input<
decl::Int
>(
"Count"
).default_value(1).min(0).
description
(
17
"The number of points to create"
);
18
b
.add_input<
decl::Vector
>(
"Position"
)
19
.default_value(
float3
(0.0f))
20
.supports_field()
21
.
description
(
"The positions of the new points"
);
22
b
.add_input<
decl::Float
>(
"Radius"
)
23
.
min
(0.0f)
24
.
default_value
(0.1f)
25
.subtype(
PROP_DISTANCE
)
26
.supports_field()
27
.description(
"The radii of the new points"
);
28
b
.add_output<
decl::Geometry
>(
"Points"
,
"Geometry"
);
29
}
30
31
class
PointsFieldContext
:
public
FieldContext
{
32
private
:
33
int
points_num_;
34
35
public
:
36
PointsFieldContext
(
const
int
points_num
) : points_num_(
points_num
) {}
37
38
int64_t
points_num
()
const
39
{
40
return
points_num_;
41
}
42
43
GVArray
get_varray_for_input
(
const
FieldInput
&field_input,
44
const
IndexMask
&mask,
45
ResourceScope
&
/*scope*/
)
const
46
{
47
const
bke::IDAttributeFieldInput
*id_field_input =
48
dynamic_cast<
const
bke::IDAttributeFieldInput
*
>
(&field_input);
49
50
const
fn::IndexFieldInput
*index_field_input =
dynamic_cast<
const
fn::IndexFieldInput
*
>
(
51
&field_input);
52
53
if
(id_field_input ==
nullptr
&& index_field_input ==
nullptr
) {
54
return
{};
55
}
56
57
return
fn::IndexFieldInput::get_index_varray
(mask);
58
}
59
};
60
61
static
void
node_geo_exec
(
GeoNodeExecParams
params
)
62
{
63
const
int
count
=
params
.extract_input<
int
>(
"Count"
);
64
if
(
count
<= 0) {
65
params
.set_default_remaining_outputs();
66
return
;
67
}
68
69
Field<float3>
position_field =
params
.extract_input<
Field<float3>
>(
"Position"
);
70
Field<float>
radius_field =
params
.extract_input<
Field<float>
>(
"Radius"
);
71
72
PointCloud
*points =
BKE_pointcloud_new_nomain
(
count
);
73
MutableAttributeAccessor
attributes = points->attributes_for_write();
74
AttributeWriter<float>
output_radii = attributes.lookup_or_add_for_write<
float
>(
75
"radius"
, AttrDomain::Point);
76
77
PointsFieldContext
context{
count
};
78
fn::FieldEvaluator
evaluator{context,
count
};
79
evaluator.
add_with_destination
(position_field, points->positions_for_write());
80
evaluator.add_with_destination(radius_field, output_radii.
varray
);
81
evaluator.evaluate();
82
83
output_radii.
finish
();
84
params
.set_output(
"Geometry"
,
GeometrySet::from_pointcloud
(points));
85
}
86
87
static
void
node_register
()
88
{
89
static
blender::bke::bNodeType
ntype;
90
geo_node_type_base
(&ntype, GEO_NODE_POINTS,
"Points"
,
NODE_CLASS_GEOMETRY
);
91
ntype.
geometry_node_execute
=
node_geo_exec
;
92
ntype.
declare
=
node_declare
;
93
blender::bke::node_register_type
(&ntype);
94
}
95
NOD_REGISTER_NODE
(
node_register
)
96
97
}
// namespace blender::nodes::node_geo_points_cc
NODE_CLASS_GEOMETRY
#define NODE_CLASS_GEOMETRY
Definition
BKE_node.hh:418
BKE_pointcloud.hh
General operations for point clouds.
BKE_pointcloud_new_nomain
PointCloud * BKE_pointcloud_new_nomain(int totpoint)
Definition
pointcloud.cc:236
BLI_task.hh
DNA_pointcloud_types.h
NOD_REGISTER_NODE
#define NOD_REGISTER_NODE(REGISTER_FUNC)
Definition
NOD_register.hh:34
PROP_DISTANCE
@ PROP_DISTANCE
Definition
RNA_types.hh:159
blender::GVArray
Definition
BLI_generic_virtual_array.hh:176
blender::ResourceScope
Definition
BLI_resource_scope.hh:36
blender::bke::IDAttributeFieldInput
Definition
BKE_geometry_fields.hh:360
blender::bke::MutableAttributeAccessor
Definition
BKE_attribute.hh:678
blender::fn::FieldContext
Definition
FN_field.hh:326
blender::fn::FieldEvaluator
Definition
FN_field.hh:338
blender::fn::FieldEvaluator::add_with_destination
int add_with_destination(GField field, GVMutableArray dst)
Definition
field.cc:743
blender::fn::FieldInput
Definition
FN_field.hh:261
blender::fn::Field
Definition
GEO_mesh_copy_selection.hh:16
blender::fn::IndexFieldInput
Definition
FN_field.hh:529
blender::fn::IndexFieldInput::get_index_varray
static GVArray get_index_varray(const IndexMask &mask)
Definition
field.cc:553
blender::index_mask::IndexMask
Definition
BLI_index_mask.hh:184
blender::nodes::GeoNodeExecParams
Definition
NOD_geometry_exec.hh:71
blender::nodes::NodeDeclarationBuilder
Definition
NOD_node_declaration.hh:525
blender::nodes::SocketDeclaration::description
std::string description
Definition
NOD_node_declaration.hh:175
blender::nodes::decl::Float
Definition
NOD_socket_declarations.hh:19
blender::nodes::decl::Float::default_value
float default_value
Definition
NOD_socket_declarations.hh:23
blender::nodes::decl::Geometry
Definition
NOD_socket_declarations_geometry.hh:15
blender::nodes::decl::Int
Definition
NOD_socket_declarations.hh:48
blender::nodes::decl::Vector
Definition
NOD_socket_declarations.hh:77
blender::nodes::node_geo_points_cc::PointsFieldContext
Definition
node_geo_points.cc:31
blender::nodes::node_geo_points_cc::PointsFieldContext::PointsFieldContext
PointsFieldContext(const int points_num)
Definition
node_geo_points.cc:36
blender::nodes::node_geo_points_cc::PointsFieldContext::get_varray_for_input
GVArray get_varray_for_input(const FieldInput &field_input, const IndexMask &mask, ResourceScope &) const
Definition
node_geo_points.cc:43
blender::nodes::node_geo_points_cc::PointsFieldContext::points_num
int64_t points_num() const
Definition
node_geo_points.cc:38
b
local_group_size(16, 16) .push_constant(Type b
Definition
compositor_morphological_distance_info.hh:16
params
uiWidgetBaseParameters params[MAX_WIDGET_BASE_BATCH]
Definition
interface_widgets.cc:1055
count
int count
Definition
interface_widgets.cc:1056
blender::bke::node_register_type
void node_register_type(bNodeType *ntype)
Definition
node.cc:1708
blender::nodes::node_geo_points_cc
Definition
node_geo_points.cc:12
blender::nodes::node_geo_points_cc::node_geo_exec
static void node_geo_exec(GeoNodeExecParams params)
Definition
node_geo_points.cc:61
blender::nodes::node_geo_points_cc::node_declare
static void node_declare(NodeDeclarationBuilder &b)
Definition
node_geo_points.cc:14
blender::nodes::node_geo_points_cc::node_register
static void node_register()
Definition
node_geo_points.cc:87
blender::float3
VecBase< float, 3 > float3
Definition
BLI_math_vector_types.hh:612
geo_node_type_base
void geo_node_type_base(blender::bke::bNodeType *ntype, int type, const char *name, short nclass)
Definition
node_geometry_util.cc:138
node_geometry_util.hh
min
#define min(a, b)
Definition
sort.c:32
int64_t
__int64 int64_t
Definition
stdint.h:89
PointCloud
Definition
DNA_pointcloud_types.h:37
blender::bke::AttributeWriter
Definition
BKE_attribute.hh:216
blender::bke::AttributeWriter::finish
void finish()
Definition
BKE_attribute.hh:240
blender::bke::AttributeWriter::varray
VMutableArray< T > varray
Definition
BKE_attribute.hh:221
blender::bke::GeometrySet::from_pointcloud
static GeometrySet from_pointcloud(PointCloud *pointcloud, GeometryOwnershipType ownership=GeometryOwnershipType::Owned)
Definition
geometry_set.cc:425
blender::bke::bNodeType
Defines a node type.
Definition
BKE_node.hh:218
blender::bke::bNodeType::geometry_node_execute
NodeGeometryExecFunction geometry_node_execute
Definition
BKE_node.hh:339
blender::bke::bNodeType::declare
NodeDeclareFunction declare
Definition
BKE_node.hh:347
Generated on Thu Feb 6 2025 07:36:39 for Blender by
doxygen
1.11.0