16 "The number of points to create");
21 .description(
"The positions of the new points");
27 .description(
"The radii of the new points");
53 if (id_field_input ==
nullptr && index_field_input ==
nullptr) {
63 const int count =
params.extract_input<
int>(
"Count");
65 params.set_default_remaining_outputs();
75 "radius", AttrDomain::Point);
92 ntype.
ui_description =
"Generate a point cloud with positions and radii defined by fields";
#define NODE_CLASS_GEOMETRY
General operations for point clouds.
PointCloud * BKE_pointcloud_new_nomain(int totpoint)
#define NOD_REGISTER_NODE(REGISTER_FUNC)
GAttributeWriter lookup_or_add_for_write(StringRef attribute_id, AttrDomain domain, AttrType data_type, const AttributeInit &initializer=AttributeInitDefaultValue())
int add_with_destination(GField field, GVMutableArray dst)
PointsFieldContext(const int points_num)
GVArray get_varray_for_input(const FieldInput &field_input, const IndexMask &mask, ResourceScope &) const override
int64_t points_num() const
ccl_device_inline float2 mask(const MaskType mask, const float2 a)
void node_register_type(bNodeType &ntype)
static void node_geo_exec(GeoNodeExecParams params)
static void node_declare(NodeDeclarationBuilder &b)
static void node_register()
VecBase< float, 3 > float3
void geo_node_type_base(blender::bke::bNodeType *ntype, std::string idname, const std::optional< int16_t > legacy_type)
VMutableArray< T > varray
std::string ui_description
NodeGeometryExecFunction geometry_node_execute
const char * enum_name_legacy
NodeDeclareFunction declare
static GeometrySet from_pointcloud(PointCloud *pointcloud, GeometryOwnershipType ownership=GeometryOwnershipType::Owned)