19 .
description(
"Number of edges or points in the face");
22 .
description(
"Number of faces which share an edge with the face");
46 return unique_values.
size();
52 return unique_values.
size();
66 for (const int64_t face_i : range) {
67 face_count[face_i] = unique_num(edge_to_faces_map, face_edges[face_i]) - 1;
70 return mesh.attributes().adapt_domain<
int>(
77 :
bke::MeshFieldInput(
CPPType::get<int>(),
"Face Neighbor Count Field")
102 return AttrDomain::Face;
111 [
faces](
const int i) ->
float { return faces[i].size(); }),
143 return AttrDomain::Face;
149 Field<int> vertex_count_field{std::make_shared<FaceVertexCountFieldInput>()};
150 Field<int> neighbor_count_field{std::make_shared<FaceNeighborCountFieldInput>()};
151 params.set_output(
"Vertex Count", std::move(vertex_count_field));
152 params.set_output(
"Face Count", std::move(neighbor_count_field));
160 ntype.
ui_name =
"Face Neighbors";
161 ntype.
ui_description =
"Retrieve topology information relating to each face of a mesh";
#define GEO_NODE_INPUT_MESH_FACE_NEIGHBORS
ATTR_WARN_UNUSED_RESULT const size_t num
#define NOD_REGISTER_NODE(REGISTER_FUNC)
unsigned long long int uint64_t
static VArray from_func(const int64_t size, GetFunc get_func)
void add_multiple(Span< Key > keys)
static VArray from_container(ContainerT container)
void extend_non_duplicates(Span< T > array)
GroupedSpan< int > build_edge_to_face_map(OffsetIndices< int > faces, Span< int > corner_edges, int edges_num, Array< int > &r_offsets, Array< int > &r_indices)
void node_register_type(bNodeType &ntype)
void parallel_for(const IndexRange range, const int64_t grain_size, const Function &function, const TaskSizeHints &size_hints=detail::TaskSizeHints_Static(1))
void geo_node_type_base(blender::bke::bNodeType *ntype, std::string idname, const std::optional< int16_t > legacy_type)
std::string ui_description
NodeGeometryExecFunction geometry_node_execute
const char * enum_name_legacy
NodeDeclareFunction declare
OffsetIndices< int > offsets
IndexRange index_range() const