Previously, we haven't added this because there were plans to use these declarations at a higher abstraction level where one declaration potentially contains more than one socket. This hasn't happened yet, and we are also using other ways to achieve dynamic socket amounts (using dynamic declarations). Therefore, it is reasonable to simplify the code by storing the integer socket type in the declaration directly. Pull Request: https://projects.blender.org/blender/blender/pulls/119691
46 lines
1.3 KiB
C++
46 lines
1.3 KiB
C++
/* SPDX-FileCopyrightText: 2023 Blender Authors
|
|
*
|
|
* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
|
|
#pragma once
|
|
|
|
#include "BKE_geometry_set.hh"
|
|
|
|
#include "NOD_socket_declarations.hh"
|
|
|
|
namespace blender::nodes::decl {
|
|
|
|
class GeometryBuilder;
|
|
|
|
class Geometry : public SocketDeclaration {
|
|
private:
|
|
blender::Vector<bke::GeometryComponent::Type> supported_types_;
|
|
bool only_realized_data_ = false;
|
|
bool only_instances_ = false;
|
|
|
|
friend GeometryBuilder;
|
|
|
|
public:
|
|
static constexpr eNodeSocketDatatype static_socket_type = SOCK_GEOMETRY;
|
|
|
|
using Builder = GeometryBuilder;
|
|
|
|
bNodeSocket &build(bNodeTree &ntree, bNode &node) const override;
|
|
bool matches(const bNodeSocket &socket) const override;
|
|
bool can_connect(const bNodeSocket &socket) const override;
|
|
|
|
Span<bke::GeometryComponent::Type> supported_types() const;
|
|
bool only_realized_data() const;
|
|
bool only_instances() const;
|
|
};
|
|
|
|
class GeometryBuilder : public SocketDeclarationBuilder<Geometry> {
|
|
public:
|
|
GeometryBuilder &supported_type(bke::GeometryComponent::Type supported_type);
|
|
GeometryBuilder &supported_type(blender::Vector<bke::GeometryComponent::Type> supported_types);
|
|
GeometryBuilder &only_realized_data(bool value = true);
|
|
GeometryBuilder &only_instances(bool value = true);
|
|
};
|
|
|
|
} // namespace blender::nodes::decl
|