Changeset View
Changeset View
Standalone View
Standalone View
source/blender/nodes/intern/node_geometry_exec.cc
| Show All 24 Lines | |||||
| #include "NOD_type_conversions.hh" | #include "NOD_type_conversions.hh" | ||||
| #include "node_geometry_util.hh" | #include "node_geometry_util.hh" | ||||
| namespace blender::nodes { | namespace blender::nodes { | ||||
| void GeoNodeExecParams::error_message_add(const NodeWarningType type, std::string message) const | void GeoNodeExecParams::error_message_add(const NodeWarningType type, std::string message) const | ||||
| { | { | ||||
| bNodeTree *btree_cow = node_->btree(); | bNodeTree *btree_cow = provider_->dnode->btree(); | ||||
| BLI_assert(btree_cow != nullptr); | BLI_assert(btree_cow != nullptr); | ||||
| if (btree_cow == nullptr) { | if (btree_cow == nullptr) { | ||||
| return; | return; | ||||
| } | } | ||||
| bNodeTree *btree_original = (bNodeTree *)DEG_get_original_id((ID *)btree_cow); | bNodeTree *btree_original = (bNodeTree *)DEG_get_original_id((ID *)btree_cow); | ||||
| const NodeTreeEvaluationContext context(*self_object_, *modifier_); | const NodeTreeEvaluationContext context(*provider_->self_object, *provider_->modifier); | ||||
| BKE_nodetree_error_message_add( | BKE_nodetree_error_message_add( | ||||
| *btree_original, context, *node_->bnode(), type, std::move(message)); | *btree_original, context, *provider_->dnode->bnode(), type, std::move(message)); | ||||
| } | } | ||||
| const bNodeSocket *GeoNodeExecParams::find_available_socket(const StringRef name) const | const bNodeSocket *GeoNodeExecParams::find_available_socket(const StringRef name) const | ||||
| { | { | ||||
| for (const InputSocketRef *socket : node_->inputs()) { | for (const InputSocketRef *socket : provider_->dnode->inputs()) { | ||||
| if (socket->is_available() && socket->name() == name) { | if (socket->is_available() && socket->name() == name) { | ||||
| return socket->bsocket(); | return socket->bsocket(); | ||||
| } | } | ||||
| } | } | ||||
| return nullptr; | return nullptr; | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 121 Lines • ▼ Show 20 Lines | AttributeDomain GeoNodeExecParams::get_highest_priority_input_domain( | ||||
| if (input_domains.size() > 0) { | if (input_domains.size() > 0) { | ||||
| return bke::attribute_domain_highest_priority(input_domains); | return bke::attribute_domain_highest_priority(input_domains); | ||||
| } | } | ||||
| return default_domain; | return default_domain; | ||||
| } | } | ||||
| void GeoNodeExecParams::check_extract_input(StringRef identifier, | void GeoNodeExecParams::check_input_access(StringRef identifier, | ||||
| const CPPType *requested_type) const | const CPPType *requested_type) const | ||||
| { | { | ||||
| bNodeSocket *found_socket = nullptr; | bNodeSocket *found_socket = nullptr; | ||||
| for (const InputSocketRef *socket : node_->inputs()) { | for (const InputSocketRef *socket : provider_->dnode->inputs()) { | ||||
| if (socket->identifier() == identifier) { | if (socket->identifier() == identifier) { | ||||
| found_socket = socket->bsocket(); | found_socket = socket->bsocket(); | ||||
| break; | break; | ||||
| } | } | ||||
| } | } | ||||
| if (found_socket == nullptr) { | if (found_socket == nullptr) { | ||||
| std::cout << "Did not find an input socket with the identifier '" << identifier << "'.\n"; | std::cout << "Did not find an input socket with the identifier '" << identifier << "'.\n"; | ||||
| std::cout << "Possible identifiers are: "; | std::cout << "Possible identifiers are: "; | ||||
| for (const InputSocketRef *socket : node_->inputs()) { | for (const InputSocketRef *socket : provider_->dnode->inputs()) { | ||||
| if (socket->is_available()) { | if (socket->is_available()) { | ||||
| std::cout << "'" << socket->identifier() << "', "; | std::cout << "'" << socket->identifier() << "', "; | ||||
| } | } | ||||
| } | } | ||||
| std::cout << "\n"; | std::cout << "\n"; | ||||
| BLI_assert(false); | BLI_assert_unreachable(); | ||||
| } | } | ||||
| else if (found_socket->flag & SOCK_UNAVAIL) { | else if (found_socket->flag & SOCK_UNAVAIL) { | ||||
| std::cout << "The socket corresponding to the identifier '" << identifier | std::cout << "The socket corresponding to the identifier '" << identifier | ||||
| << "' is disabled.\n"; | << "' is disabled.\n"; | ||||
| BLI_assert(false); | BLI_assert_unreachable(); | ||||
| } | } | ||||
| else if (!input_values_.contains(identifier)) { | else if (!provider_->can_get_input(identifier)) { | ||||
| std::cout << "The identifier '" << identifier | std::cout << "The identifier '" << identifier | ||||
| << "' is valid, but there is no value for it anymore.\n"; | << "' is valid, but there is no value for it anymore.\n"; | ||||
| std::cout << "Most likely it has been extracted before.\n"; | std::cout << "Most likely it has been extracted before.\n"; | ||||
| BLI_assert(false); | BLI_assert_unreachable(); | ||||
| } | } | ||||
| else if (requested_type != nullptr) { | else if (requested_type != nullptr) { | ||||
| const CPPType &expected_type = *socket_cpp_type_get(*found_socket->typeinfo); | const CPPType &expected_type = *socket_cpp_type_get(*found_socket->typeinfo); | ||||
| if (*requested_type != expected_type) { | if (*requested_type != expected_type) { | ||||
| std::cout << "The requested type '" << requested_type->name() << "' is incorrect. Expected '" | std::cout << "The requested type '" << requested_type->name() << "' is incorrect. Expected '" | ||||
| << expected_type.name() << "'.\n"; | << expected_type.name() << "'.\n"; | ||||
| BLI_assert(false); | BLI_assert_unreachable(); | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| void GeoNodeExecParams::check_set_output(StringRef identifier, const CPPType &value_type) const | void GeoNodeExecParams::check_output_access(StringRef identifier, const CPPType &value_type) const | ||||
| { | { | ||||
| bNodeSocket *found_socket = nullptr; | bNodeSocket *found_socket = nullptr; | ||||
| for (const OutputSocketRef *socket : node_->outputs()) { | for (const OutputSocketRef *socket : provider_->dnode->outputs()) { | ||||
| if (socket->identifier() == identifier) { | if (socket->identifier() == identifier) { | ||||
| found_socket = socket->bsocket(); | found_socket = socket->bsocket(); | ||||
| break; | break; | ||||
| } | } | ||||
| } | } | ||||
| if (found_socket == nullptr) { | if (found_socket == nullptr) { | ||||
| std::cout << "Did not find an output socket with the identifier '" << identifier << "'.\n"; | std::cout << "Did not find an output socket with the identifier '" << identifier << "'.\n"; | ||||
| std::cout << "Possible identifiers are: "; | std::cout << "Possible identifiers are: "; | ||||
| for (const OutputSocketRef *socket : node_->outputs()) { | for (const OutputSocketRef *socket : provider_->dnode->outputs()) { | ||||
| if (socket->is_available()) { | if (socket->is_available()) { | ||||
| std::cout << "'" << socket->identifier() << "', "; | std::cout << "'" << socket->identifier() << "', "; | ||||
| } | } | ||||
| } | } | ||||
| std::cout << "\n"; | std::cout << "\n"; | ||||
| BLI_assert(false); | BLI_assert_unreachable(); | ||||
| } | } | ||||
| else if (found_socket->flag & SOCK_UNAVAIL) { | else if (found_socket->flag & SOCK_UNAVAIL) { | ||||
| std::cout << "The socket corresponding to the identifier '" << identifier | std::cout << "The socket corresponding to the identifier '" << identifier | ||||
| << "' is disabled.\n"; | << "' is disabled.\n"; | ||||
| BLI_assert(false); | BLI_assert_unreachable(); | ||||
| } | } | ||||
| else if (output_values_.contains(identifier)) { | else if (!provider_->can_set_output(identifier)) { | ||||
| std::cout << "The identifier '" << identifier << "' has been set already.\n"; | std::cout << "The identifier '" << identifier << "' has been set already.\n"; | ||||
| BLI_assert(false); | BLI_assert_unreachable(); | ||||
| } | } | ||||
| else { | else { | ||||
| const CPPType &expected_type = *socket_cpp_type_get(*found_socket->typeinfo); | const CPPType &expected_type = *socket_cpp_type_get(*found_socket->typeinfo); | ||||
| if (value_type != expected_type) { | if (value_type != expected_type) { | ||||
| std::cout << "The value type '" << value_type.name() << "' is incorrect. Expected '" | std::cout << "The value type '" << value_type.name() << "' is incorrect. Expected '" | ||||
| << expected_type.name() << "'.\n"; | << expected_type.name() << "'.\n"; | ||||
| BLI_assert(false); | BLI_assert_unreachable(); | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| } // namespace blender::nodes | } // namespace blender::nodes | ||||