39 tree_logger->node_warnings.append(
40 *tree_logger->allocator,
41 {node_.identifier, {type, tree_logger->allocator->copy_string(message)}});
49 tree_logger->used_named_attributes.append(
50 *tree_logger->allocator,
51 {node_.identifier, tree_logger->allocator->copy_string(attribute_name), usage});
60 if (geo_decl ==
nullptr) {
68 if (only_realized_data) {
71 TIP_(
"Instances in input geometry are ignored"));
77 TIP_(
"Realized data in input geometry is ignored"));
87 if (type == GeometryComponent::Type::Instance) {
90 if (supported_types.
contains(type)) {
93 std::string message =
RPT_(
"Input geometry has unsupported type: ");
95 case GeometryComponent::Type::Mesh: {
97 if (mesh->verts_num == 0) {
101 message +=
RPT_(
"Mesh");
104 case GeometryComponent::Type::PointCloud: {
106 if (pointcloud->totpoint == 0) {
110 message +=
RPT_(
"Point Cloud");
113 case GeometryComponent::Type::Instance: {
117 case GeometryComponent::Type::Volume: {
121 case GeometryComponent::Type::Curve: {
123 if (curves->geometry.point_num == 0) {
127 message +=
RPT_(
"Curve");
130 case GeometryComponent::Type::Edit: {
133 case GeometryComponent::Type::GreasePencil: {
135 if (grease_pencil->drawing_array_num == 0) {
139 message +=
RPT_(
"Grease Pencil");
161 for (
const bNodeSocket *socket : node_.input_sockets()) {
162 if (socket->is_available() && socket->name ==
name) {
175void GeoNodeExecParams::check_input_access(
StringRef identifier)
const
178 for (
const bNodeSocket *socket : node_.input_sockets()) {
179 if (socket->identifier == identifier) {
180 found_socket = socket;
185 if (found_socket ==
nullptr) {
186 std::cout <<
"Did not find an input socket with the identifier '" << identifier <<
"'.\n";
187 std::cout <<
"Possible identifiers are: ";
188 for (
const bNodeSocket *socket : node_.input_sockets()) {
189 if (socket->is_available()) {
190 std::cout <<
"'" << socket->identifier <<
"', ";
197 std::cout <<
"The socket corresponding to the identifier '" << identifier
198 <<
"' is disabled.\n";
203void GeoNodeExecParams::check_output_access(
StringRef identifier)
const
206 for (
const bNodeSocket *socket : node_.output_sockets()) {
207 if (socket->identifier == identifier) {
208 found_socket = socket;
213 if (found_socket ==
nullptr) {
214 std::cout <<
"Did not find an output socket with the identifier '" << identifier <<
"'.\n";
215 std::cout <<
"Possible identifiers are: ";
216 for (
const bNodeSocket *socket : node_.output_sockets()) {
217 if (socket->is_available()) {
218 std::cout <<
"'" << socket->identifier <<
"', ";
225 std::cout <<
"The socket corresponding to the identifier '" << identifier
226 <<
"' is disabled.\n";
229 else if (params_.output_was_set(this->get_output_index(identifier))) {
230 std::cout <<
"The identifier '" << identifier <<
"' has been set already.\n";
238 return AttributeFilter::Result::Process;
241 return AttributeFilter::Result::AllowSkip;
243 if (set_.names->contains(attribute_name)) {
244 return AttributeFilter::Result::Process;
246 return AttributeFilter::Result::AllowSkip;
260 if (!base_path || base_path[0] ==
'\0') {
266 return absolute_path;
Low-level operations for curves.
#define BLI_assert_unreachable()
bool BLI_path_abs(char path[FILE_MAX], const char *basepath) ATTR_NONNULL(1
bool BLI_path_is_rel(const char *path) ATTR_NONNULL(1) ATTR_WARN_UNUSED_RESULT
char * STRNCPY(char(&dst)[N], const char *src)
#define UNUSED_VARS_NDEBUG(...)
#define BLT_I18NCONTEXT_ID_ID
#define CTX_RPT_(context, msgid)
Main * DEG_get_bmain(const Depsgraph *graph)
#define ID_BLEND_PATH(_bmain, _id)
struct bNodeSocket bNodeSocket
constexpr bool is_empty() const
constexpr bool contains(const T &value) const
constexpr bool is_empty() const
constexpr const char * c_str() const
geo_eval_log::GeoTreeLogger * get_local_tree_logger() const
void error_message_add(const NodeWarningType type, StringRef message) const
void check_output_geometry_set(const GeometrySet &geometry_set) const
void check_input_geometry_set(StringRef identifier, const GeometrySet &geometry_set) const
std::optional< std::string > ensure_absolute_path(StringRefNull path) const
void used_named_attribute(StringRef attribute_name, NamedAttributeUsage usage)
void set_default_remaining_outputs()
const Depsgraph * depsgraph() const
Result filter(StringRef attribute_name) const override
bool only_realized_data() const
Span< bke::GeometryComponent::Type > supported_types() const
bool only_instances() const
bool attribute_name_is_anonymous(const StringRef name)
void set_default_remaining_node_outputs(lf::Params ¶ms, const bNode &node)
const CurvesEditHints * get_curve_edit_hints() const
const GreasePencil * get_grease_pencil() const
bool has_realized_data() const
const Curves * get_curves() const
bool has_instances() const
const PointCloud * get_pointcloud() const
const Mesh * get_mesh() const
Vector< GeometryComponent::Type > gather_component_types(bool include_instances, bool ignore_empty) const