15 b.add_input<
decl::Vector>(
"UV").hide_value().supports_field();
20 .description(
"Faces to consider when packing islands");
22 "Space between islands");
24 b.add_output<
decl::Vector>(
"UV").field_source_reference_all();
32 const AttrDomain domain)
36 const Span<int> corner_verts = mesh.corner_verts();
40 face_evaluator.
add(selection_field);
41 face_evaluator.evaluate();
42 const IndexMask selection = face_evaluator.get_evaluated_as_mask(0);
43 if (selection.is_empty()) {
54 selection.foreach_index([&](
const int face_index) {
62 const int corner = face[i];
63 const int vert = corner_verts[corner];
65 mp_co[i] = positions[vert];
66 mp_uv[i] = uv[corner];
86 return mesh.attributes().adapt_domain<
float3>(
102 : bke::MeshFieldInput(
CPPType::get<
float3>(),
"Pack UV Islands Field"),
103 selection_field_(selection_field),
112 const AttrDomain domain,
126 return AttrDomain::Corner;
134 const bool rotate =
params.extract_input<
bool>(
"Rotate");
135 const float margin =
params.extract_input<
float>(
"Margin");
138 selection_field, uv_field, rotate, margin)));
#define NODE_CLASS_CONVERTER
#define NOD_REGISTER_NODE(REGISTER_FUNC)
MutableSpan< T > as_mutable_span()
static VArray ForContainer(ContainerT container)
int add(GField field, GVArray *varray_ptr)
virtual void for_each_field_input_recursive(FunctionRef< void(const FieldInput &)> fn) const
const FieldNode & node() const
local_group_size(16, 16) .push_constant(Type b
void node_register_type(bNodeType *ntype)
void uv_parametrizer_construct_end(ParamHandle *phandle, bool fill_holes, bool topology_from_uvs, int *r_count_failed=nullptr)
void uv_parametrizer_flush(ParamHandle *handle)
void uv_parametrizer_pack(ParamHandle *handle, float margin, bool do_rotate, bool ignore_pinned)
void uv_parametrizer_face_add(ParamHandle *handle, const ParamKey key, const int nverts, const ParamKey *vkeys, const float **co, float **uv, const float *weight, const bool *pin, const bool *select)
static void node_geo_exec(GeoNodeExecParams params)
static void node_declare(NodeDeclarationBuilder &b)
static void node_register()
static VArray< float3 > construct_uv_gvarray(const Mesh &mesh, const Field< bool > selection_field, const Field< float3 > uv_field, const bool rotate, const float margin, const AttrDomain domain)
void geo_node_type_base(blender::bke::bNodeType *ntype, int type, const char *name, short nclass)
NodeGeometryExecFunction geometry_node_execute
NodeDeclareFunction declare