24 b.add_output<
decl::Bool>(
N_(
"Intersecting Edges")).field_source();
29 uiItemR(layout,
ptr,
"operation", 0,
"", ICON_NONE);
67 const bool use_self =
params.get_input<
bool>(
"Self Intersection");
68 const bool hole_tolerant =
params.get_input<
bool>(
"Hole Tolerant");
83 if (mesh_in_a !=
nullptr) {
84 meshes.append(mesh_in_a);
85 transforms.
append(
nullptr);
89 material_remaps.
append({});
97 for (
const GeometrySet &geometry_set : geometry_sets) {
102 const Mesh *
mesh = set_group.geometry_set.get_mesh_for_read();
103 if (
mesh !=
nullptr) {
110 const Mesh *
mesh = set_group.geometry_set.get_mesh_for_read();
111 if (
mesh !=
nullptr) {
121 const Mesh *mesh_in = set_group.geometry_set.get_mesh_for_read();
122 if (mesh_in !=
nullptr) {
123 meshes.append_n_times(mesh_in, set_group.transforms.
size());
124 for (
const int i : set_group.transforms.index_range()) {
125 transforms.
append(set_group.transforms.begin() + i);
131 if (
params.output_is_required(
"Intersecting Edges")) {
146 params.set_default_remaining_outputs();
161 selection.
span.fill(
false);
162 for (
const int i : intersecting_edges) {
163 selection.
span[i] =
true;
168 "Intersecting Edges",
169 AnonymousAttributeFieldInput::Create<bool>(
175 params.error_message_add(NodeWarningType::Error,
176 TIP_(
"Disabled, Blender was compiled without GMP"));
177 params.set_default_remaining_outputs();
@ GEO_COMPONENT_TYPE_MESH
void nodeSetSocketAvailability(struct bNodeTree *ntree, struct bNodeSocket *sock, bool is_available)
void node_type_init(struct bNodeType *ntype, void(*initfunc)(struct bNodeTree *ntree, struct bNode *node))
#define GEO_NODE_MESH_BOOLEAN
#define NODE_CLASS_GEOMETRY
void nodeRegisterType(struct bNodeType *ntype)
GeometryNodeBooleanOperation
@ GEO_NODE_BOOLEAN_DIFFERENCE
@ GEO_NODE_BOOLEAN_INTERSECT
void uiItemR(uiLayout *layout, struct PointerRNA *ptr, const char *propname, int flag, const char *name, int icon)
constexpr void copy_from(Span< T > values)
void append(const T &value)
GSpanAttributeWriter lookup_or_add_for_write_only_span(const AttributeIDRef &attribute_id, const eAttrDomain domain, const eCustomDataType data_type)
smooth(Type::VEC4, "color_mul") .smooth(Type gpFillTexture gpSceneDepthTexture materials[GPENCIL_MATERIAL_BUFFER_LEN]
void *(* MEM_malloc_arrayN)(size_t len, size_t size, const char *str)
void geometry_set_gather_instances(const GeometrySet &geometry_set, Vector< GeometryInstanceGroup > &r_instance_groups)
MutableAttributeAccessor mesh_attributes_for_write(Mesh &mesh)
OwnedAnonymousAttributeID< true > StrongAnonymousAttributeID
Mesh * direct_mesh_boolean(Span< const Mesh * > meshes, Span< const float4x4 * > transforms, const float4x4 &target_transform, Span< Array< short >> material_remaps, bool use_self, bool hole_tolerant, int boolean_mode, Vector< int > *r_intersecting_edges)
static void node_layout(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
static void node_update(bNodeTree *ntree, bNode *node)
static void node_geo_exec(GeoNodeExecParams params)
static void node_init(bNodeTree *UNUSED(tree), bNode *node)
static void node_declare(NodeDeclarationBuilder &b)
static const pxr::TfToken b("b", pxr::TfToken::Immortal)
static void node_init(const struct bContext *C, bNodeTree *ntree, bNode *node)
void register_node_type_geo_boolean()
void geo_node_type_base(bNodeType *ntype, int type, const char *name, short nclass)
SocketIndexByIdentifierMap * map
void node_sock_label(bNodeSocket *sock, const char *name)
static GeometrySet create_with_mesh(Mesh *mesh, GeometryOwnershipType ownership=GeometryOwnershipType::Owned)
const Mesh * get_mesh_for_read() const
struct bNodeSocket * next
NodeGeometryExecFunction geometry_node_execute
void(* updatefunc)(struct bNodeTree *ntree, struct bNode *node)
void(* draw_buttons)(struct uiLayout *, struct bContext *C, struct PointerRNA *ptr)
NodeDeclareFunction declare
MutableVArraySpan< T > span
static float4x4 identity()
StrongAnonymousAttributeID intersecting_edges_id