Fix T98152: Named Attribute node changes data type for non-existant attributes
Skip changing the data type in the node if it is not known.
This commit is contained in:
parent
d1340e1bb2
commit
f29ff7fb7e
Notes:
blender-bot
2023-02-14 09:38:57 +01:00
Referenced by issue #98152, Named Attribute Node Changes Data Type When Calling an Non-Existent Attribute
|
@ -40,8 +40,8 @@ static StringRef attribute_domain_string(const AttributeDomain domain)
|
|||
|
||||
static bool attribute_search_item_add(uiSearchItems *items, const GeometryAttributeInfo &item)
|
||||
{
|
||||
const StringRef data_type_name = attribute_data_type_string(item.data_type);
|
||||
const StringRef domain_name = attribute_domain_string(item.domain);
|
||||
const StringRef data_type_name = attribute_data_type_string(*item.data_type);
|
||||
const StringRef domain_name = attribute_domain_string(*item.domain);
|
||||
std::string search_item_text = domain_name + " " + UI_MENU_ARROW_SEP + item.name + UI_SEP_CHAR +
|
||||
data_type_name;
|
||||
|
||||
|
|
|
@ -183,9 +183,9 @@ static void attribute_search_exec_fn(bContext *C, void *data_v, void *item_v)
|
|||
BLI_assert(socket->type == SOCK_STRING);
|
||||
|
||||
/* For the attribute input node, also adjust the type and links connected to the output. */
|
||||
if (node->type == GEO_NODE_INPUT_NAMED_ATTRIBUTE) {
|
||||
if (node->type == GEO_NODE_INPUT_NAMED_ATTRIBUTE && item->data_type.has_value()) {
|
||||
NodeGeometryInputNamedAttribute &storage = *(NodeGeometryInputNamedAttribute *)node->storage;
|
||||
const CustomDataType new_type = data_type_in_attribute_input_node(item->data_type);
|
||||
const CustomDataType new_type = data_type_in_attribute_input_node(*item->data_type);
|
||||
if (new_type != storage.data_type) {
|
||||
storage.data_type = new_type;
|
||||
/* Make the output socket with the new type on the attribute input node active. */
|
||||
|
|
|
@ -89,8 +89,9 @@ class GFieldValueLog : public ValueLog {
|
|||
|
||||
struct GeometryAttributeInfo {
|
||||
std::string name;
|
||||
AttributeDomain domain;
|
||||
CustomDataType data_type;
|
||||
/** Can be empty when #name does not actually exist on a geometry yet. */
|
||||
std::optional<AttributeDomain> domain;
|
||||
std::optional<CustomDataType> data_type;
|
||||
};
|
||||
|
||||
/** Contains information about a geometry set. In most cases this does not store the entire
|
||||
|
|
Loading…
Reference in New Issue