Changeset View
Changeset View
Standalone View
Standalone View
source/blender/nodes/geometry/node_geometry_util.cc
| Show All 30 Lines | if (name == socket->name) { | ||||
| (socket->type == SOCK_FLOAT && mode_ == GEO_NODE_ATTRIBUTE_INPUT_FLOAT) || | (socket->type == SOCK_FLOAT && mode_ == GEO_NODE_ATTRIBUTE_INPUT_FLOAT) || | ||||
| (socket->type == SOCK_VECTOR && mode_ == GEO_NODE_ATTRIBUTE_INPUT_VECTOR) || | (socket->type == SOCK_VECTOR && mode_ == GEO_NODE_ATTRIBUTE_INPUT_VECTOR) || | ||||
| (socket->type == SOCK_RGBA && mode_ == GEO_NODE_ATTRIBUTE_INPUT_COLOR)); | (socket->type == SOCK_RGBA && mode_ == GEO_NODE_ATTRIBUTE_INPUT_COLOR)); | ||||
| nodeSetSocketAvailability(socket, is_available); | nodeSetSocketAvailability(socket, is_available); | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| static int attribute_data_type_complexity(const CustomDataType data_type) | |||||
| { | |||||
| switch (data_type) { | |||||
| case CD_PROP_BOOL: | |||||
| return 0; | |||||
| case CD_PROP_INT32: | |||||
| return 1; | |||||
| case CD_PROP_FLOAT: | |||||
| return 2; | |||||
| case CD_PROP_FLOAT3: | |||||
| return 4; | |||||
| case CD_PROP_COLOR: | |||||
| return 5; | |||||
| #if 0 /* Attribute types are not supported yet. */ | |||||
| case CD_MLOOPCOL: | |||||
| return 3; | |||||
| case CD_PROP_STRING: | |||||
| return 6; | |||||
| #endif | |||||
| default: | |||||
| /* Only accept "generic" custom data types used by the attribute system. */ | |||||
| BLI_assert(false); | |||||
| return 0; | |||||
| } | |||||
| } | |||||
| CustomDataType attribute_domain_highest_complexity(Span<CustomDataType> data_types) | |||||
| { | |||||
| int highest_complexity = INT_MIN; | |||||
| CustomDataType most_complex_type = CD_PROP_COLOR; | |||||
| for (const CustomDataType data_type : data_types) { | |||||
| const int complexity = attribute_data_type_complexity(data_type); | |||||
| if (complexity > highest_complexity) { | |||||
| highest_complexity = complexity; | |||||
| most_complex_type = data_type; | |||||
| } | |||||
| } | |||||
| return most_complex_type; | |||||
| } | |||||
| } // namespace blender::nodes | } // namespace blender::nodes | ||||
| bool geo_node_poll_default(bNodeType *UNUSED(ntype), bNodeTree *ntree) | bool geo_node_poll_default(bNodeType *UNUSED(ntype), bNodeTree *ntree) | ||||
| { | { | ||||
| return STREQ(ntree->idname, "GeometryNodeTree"); | return STREQ(ntree->idname, "GeometryNodeTree"); | ||||
| } | } | ||||
| void geo_node_type_base(bNodeType *ntype, int type, const char *name, short nclass, short flag) | void geo_node_type_base(bNodeType *ntype, int type, const char *name, short nclass, short flag) | ||||
| { | { | ||||
| node_type_base(ntype, type, name, nclass, flag); | node_type_base(ntype, type, name, nclass, flag); | ||||
| ntype->poll = geo_node_poll_default; | ntype->poll = geo_node_poll_default; | ||||
| ntype->update_internal_links = node_update_internal_links_default; | ntype->update_internal_links = node_update_internal_links_default; | ||||
| ntype->insert_link = node_insert_link_default; | ntype->insert_link = node_insert_link_default; | ||||
| } | } | ||||