Blender V5.0
blender::nodes::node_geo_extrude_mesh_cc Namespace Reference

Classes

struct  AttributeOutputs

Typedefs

using IDsByDomain = std::array<Vector<StringRef>, ATTR_DOMAIN_NUM>

Functions

static void node_declare (NodeDeclarationBuilder &b)
static void node_layout (uiLayout *layout, bContext *, PointerRNA *ptr)
static void node_init (bNodeTree *, bNode *node)
static void save_selection_as_attribute (MutableAttributeAccessor attributes, const StringRef id, const AttrDomain domain, const IndexMask &selection)
static void remove_non_propagated_attributes (MutableAttributeAccessor attributes, const AttributeFilter &attribute_filter)
static void remove_unsupported_vert_data (Mesh &mesh)
static void remove_unsupported_corner_data (Mesh &mesh)
static void expand_mesh (Mesh &mesh, const int vert_expand, const int edge_expand, const int face_expand, const int loop_expand)
static CustomDatamesh_custom_data_for_domain (Mesh &mesh, const AttrDomain domain)
static std::optional< MutableSpan< int > > get_orig_index_layer (Mesh &mesh, const AttrDomain domain)
template<typename T>
void copy_with_mixing (const Span< T > src, const GroupedSpan< int > src_groups, const IndexMask &selection, MutableSpan< T > dst)
static void copy_with_mixing (const GSpan src, const GroupedSpan< int > src_groups, const IndexMask &selection, GMutableSpan dst)
template<typename T>
void copy_with_mixing (const Span< T > src, const GroupedSpan< int > src_groups, const Span< int > selection, MutableSpan< T > dst)
static void copy_with_mixing (const GSpan src, const GroupedSpan< int > src_groups, const Span< int > selection, GMutableSpan dst)
static IDsByDomain attribute_ids_by_domain (const AttributeAccessor attributes, const Set< StringRef > &skip)
static bool is_empty_domain (const AttributeAccessor attributes, const Set< StringRef > &skip, const AttrDomain domain)
static void gather_attributes (MutableAttributeAccessor attributes, const Span< StringRef > ids, const Span< int > indices, const IndexRange new_range)
static void gather_attributes (MutableAttributeAccessor attributes, const Span< StringRef > ids, const IndexMask &indices, const IndexRange new_range)
static void gather_vert_attributes (Mesh &mesh, const Span< StringRef > ids, const Span< int > indices, const IndexRange new_range)
static void gather_vert_attributes (Mesh &mesh, const Span< StringRef > ids, const IndexMask &indices, const IndexRange new_range)
static void extrude_mesh_vertices (Mesh &mesh, const Field< bool > &selection_field, const Field< float3 > &offset_field, const AttributeOutputs &attribute_outputs, const AttributeFilter &attribute_filter)
static void fill_quad_consistent_direction (const Span< int > other_face_verts, const Span< int > other_face_edges, MutableSpan< int > new_corner_verts, MutableSpan< int > new_corner_edges, const int vert_connected_to_face_1, const int vert_connected_to_face_2, const int vert_across_from_face_1, const int vert_across_from_face_2, const int edge_connected_to_face, const int connecting_edge_1, const int edge_across_from_face, const int connecting_edge_2)
static GroupedSpan< int > build_vert_to_edge_map (const Span< int2 > edges, const IndexMask &edge_mask, const int verts_num, Array< int > &r_offsets, Array< int > &r_indices)
static void tag_mesh_added_faces (Mesh &mesh)
static void extrude_mesh_edges (Mesh &mesh, const Field< bool > &selection_field, const Field< float3 > &offset_field, const AttributeOutputs &attribute_outputs, const AttributeFilter &attribute_filter)
static VectorSet< int > vert_indices_from_edges (const Mesh &mesh, const Span< int > edge_indices)
static void extrude_mesh_face_regions (Mesh &mesh, const Field< bool > &selection_field, const Field< float3 > &offset_field, const AttributeOutputs &attribute_outputs, const AttributeFilter &attribute_filter)
static void extrude_individual_mesh_faces (Mesh &mesh, const Field< bool > &selection_field, const Field< float3 > &offset_field, const AttributeOutputs &attribute_outputs, const AttributeFilter &attribute_filter)
static void node_geo_exec (GeoNodeExecParams params)
static void node_rna (StructRNA *srna)
static void node_register ()

Typedef Documentation

◆ IDsByDomain

Function Documentation

◆ attribute_ids_by_domain()

◆ build_vert_to_edge_map()

◆ copy_with_mixing() [1/4]

void blender::nodes::node_geo_extrude_mesh_cc::copy_with_mixing ( const GSpan src,
const GroupedSpan< int > src_groups,
const IndexMask & selection,
GMutableSpan dst )
static

◆ copy_with_mixing() [2/4]

void blender::nodes::node_geo_extrude_mesh_cc::copy_with_mixing ( const GSpan src,
const GroupedSpan< int > src_groups,
const Span< int > selection,
GMutableSpan dst )
static

◆ copy_with_mixing() [3/4]

template<typename T>
void blender::nodes::node_geo_extrude_mesh_cc::copy_with_mixing ( const Span< T > src,
const GroupedSpan< int > src_groups,
const IndexMask & selection,
MutableSpan< T > dst )

◆ copy_with_mixing() [4/4]

template<typename T>
void blender::nodes::node_geo_extrude_mesh_cc::copy_with_mixing ( const Span< T > src,
const GroupedSpan< int > src_groups,
const Span< int > selection,
MutableSpan< T > dst )

◆ expand_mesh()

void blender::nodes::node_geo_extrude_mesh_cc::expand_mesh ( Mesh & mesh,
const int vert_expand,
const int edge_expand,
const int face_expand,
const int loop_expand )
static

◆ extrude_individual_mesh_faces()

void blender::nodes::node_geo_extrude_mesh_cc::extrude_individual_mesh_faces ( Mesh & mesh,
const Field< bool > & selection_field,
const Field< float3 > & offset_field,
const AttributeOutputs & attribute_outputs,
const AttributeFilter & attribute_filter )
static

◆ extrude_mesh_edges()

void blender::nodes::node_geo_extrude_mesh_cc::extrude_mesh_edges ( Mesh & mesh,
const Field< bool > & selection_field,
const Field< float3 > & offset_field,
const AttributeOutputs & attribute_outputs,
const AttributeFilter & attribute_filter )
static

Definition at line 553 of file node_geo_extrude_mesh.cc.

References blender::fn::FieldEvaluator::add(), blender::IndexRange::after(), attribute_ids_by_domain(), blender::bke::mesh::build_edge_to_face_map(), blender::index_mask::build_reverse_map(), build_vert_to_edge_map(), blender::bke::attribute_math::convert_to_static_type(), copy_with_mixing(), Mesh::corners_num, Mesh::edges_num, blender::fn::FieldEvaluator::evaluate(), expand_mesh(), extrude_mesh_edges(), faces, blender::offset_indices::fill_constant_group_size(), fill_quad_consistent_direction(), blender::bke::GSpanAttributeWriter::finish(), blender::Span< T >::first(), blender::index_mask::IndexMask::foreach_index(), blender::index_mask::IndexMask::foreach_index_optimized(), gather_attributes(), gather_vert_attributes(), blender::fn::FieldEvaluator::get_evaluated(), blender::fn::FieldEvaluator::get_evaluated_selection_as_mask(), i, blender::MutableSpan< T >::index_range(), blender::index_mask::IndexMask::is_empty(), is_empty_domain(), blender::VArrayCommon< T >::is_single(), blender::bke::MutableAttributeAccessor::lookup_for_write_span(), blender::Array< T, InlineBufferCapacity, Allocator >::reinitialize(), remove_non_propagated_attributes(), remove_unsupported_corner_data(), remove_unsupported_vert_data(), blender::fn::FieldEvaluator::set_selection(), blender::index_mask::IndexMask::size(), blender::IndexRange::size(), blender::offset_indices::OffsetIndices< T >::size(), blender::Span< T >::size(), blender::GMutableSpan::slice(), blender::MutableSpan< T >::slice(), blender::bke::GSpanAttributeWriter::span, blender::GMutableSpan::type(), blender::geometry::vert_selection_from_edge(), and Mesh::verts_num.

Referenced by extrude_mesh_edges(), and node_geo_exec().

◆ extrude_mesh_face_regions()

void blender::nodes::node_geo_extrude_mesh_cc::extrude_mesh_face_regions ( Mesh & mesh,
const Field< bool > & selection_field,
const Field< float3 > & offset_field,
const AttributeOutputs & attribute_outputs,
const AttributeFilter & attribute_filter )
static

Edges connected to one selected face are on the boundary of a region and will be duplicated into a "side face". Edges inside a region will be duplicated to leave any original faces unchanged.

Definition at line 832 of file node_geo_extrude_mesh.cc.

References blender::fn::FieldEvaluator::add(), blender::VectorSet< Key, InlineBufferCapacity, ProbingStrategy, Hash, IsEqual, Slot, Allocator >::add(), blender::VectorSet< Key, InlineBufferCapacity, ProbingStrategy, Hash, IsEqual, Slot, Allocator >::add_new(), blender::IndexRange::after(), blender::Vector< T, InlineBufferCapacity, Allocator >::append(), attribute_ids_by_domain(), blender::bke::mesh::build_edge_to_face_map(), build_vert_to_edge_map(), copy_with_mixing(), Mesh::edges_num, blender::fn::FieldEvaluator::evaluate(), expand_mesh(), extrude_mesh_face_regions(), faces, Mesh::faces_num, blender::offset_indices::fill_constant_group_size(), fill_quad_consistent_direction(), blender::bke::GSpanAttributeWriter::finish(), blender::index_mask::IndexMask::foreach_index(), IndexMask::from_indices(), blender::array_utils::gather(), blender::bke::attribute_math::gather(), gather_attributes(), gather_vert_attributes(), blender::fn::FieldEvaluator::get_evaluated(), blender::fn::FieldEvaluator::get_evaluated_selection_as_mask(), i, blender::VectorSet< Key, InlineBufferCapacity, ProbingStrategy, Hash, IsEqual, Slot, Allocator >::index_of(), blender::VectorSet< Key, InlineBufferCapacity, ProbingStrategy, Hash, IsEqual, Slot, Allocator >::index_of_try(), blender::MutableSpan< T >::index_range(), blender::Span< T >::index_range(), blender::VectorSet< Key, InlineBufferCapacity, ProbingStrategy, Hash, IsEqual, Slot, Allocator >::index_range(), blender::index_mask::IndexMask::is_empty(), blender::MutableSpan< T >::is_empty(), blender::VArrayCommon< T >::is_single(), blender::bke::MutableAttributeAccessor::lookup_for_write_span(), blender::threading::parallel_for(), blender::Array< T, InlineBufferCapacity, Allocator >::reinitialize(), remove_non_propagated_attributes(), remove_unsupported_corner_data(), remove_unsupported_vert_data(), blender::fn::FieldEvaluator::set_selection(), blender::IndexRange::size(), blender::offset_indices::OffsetIndices< T >::size(), blender::Span< T >::size(), blender::VectorSet< Key, InlineBufferCapacity, ProbingStrategy, Hash, IsEqual, Slot, Allocator >::size(), blender::GMutableSpan::slice(), blender::MutableSpan< T >::slice(), blender::Span< T >::slice(), blender::bke::GSpanAttributeWriter::span, blender::index_mask::IndexMask::to_bools(), vert_indices_from_edges(), blender::geometry::vert_selection_from_face(), and Mesh::verts_num.

Referenced by extrude_mesh_face_regions(), and node_geo_exec().

◆ extrude_mesh_vertices()

void blender::nodes::node_geo_extrude_mesh_cc::extrude_mesh_vertices ( Mesh & mesh,
const Field< bool > & selection_field,
const Field< float3 > & offset_field,
const AttributeOutputs & attribute_outputs,
const AttributeFilter & attribute_filter )
static

◆ fill_quad_consistent_direction()

void blender::nodes::node_geo_extrude_mesh_cc::fill_quad_consistent_direction ( const Span< int > other_face_verts,
const Span< int > other_face_edges,
MutableSpan< int > new_corner_verts,
MutableSpan< int > new_corner_edges,
const int vert_connected_to_face_1,
const int vert_connected_to_face_2,
const int vert_across_from_face_1,
const int vert_across_from_face_2,
const int edge_connected_to_face,
const int connecting_edge_1,
const int edge_across_from_face,
const int connecting_edge_2 )
static

◆ gather_attributes() [1/2]

◆ gather_attributes() [2/2]

◆ gather_vert_attributes() [1/2]

◆ gather_vert_attributes() [2/2]

◆ get_orig_index_layer()

std::optional< MutableSpan< int > > blender::nodes::node_geo_extrude_mesh_cc::get_orig_index_layer ( Mesh & mesh,
const AttrDomain domain )
static

◆ is_empty_domain()

◆ mesh_custom_data_for_domain()

CustomData & blender::nodes::node_geo_extrude_mesh_cc::mesh_custom_data_for_domain ( Mesh & mesh,
const AttrDomain domain )
static

◆ node_declare()

◆ node_geo_exec()

◆ node_init()

void blender::nodes::node_geo_extrude_mesh_cc::node_init ( bNodeTree * ,
bNode * node )
static

Definition at line 71 of file node_geo_extrude_mesh.cc.

References data, GEO_NODE_EXTRUDE_MESH_FACES, MEM_callocN(), and bNode::storage.

Referenced by node_register().

◆ node_layout()

void blender::nodes::node_geo_extrude_mesh_cc::node_layout ( uiLayout * layout,
bContext * ,
PointerRNA * ptr )
static

◆ node_register()

◆ node_rna()

void blender::nodes::node_geo_extrude_mesh_cc::node_rna ( StructRNA * srna)
static

◆ remove_non_propagated_attributes()

◆ remove_unsupported_corner_data()

void blender::nodes::node_geo_extrude_mesh_cc::remove_unsupported_corner_data ( Mesh & mesh)
static

◆ remove_unsupported_vert_data()

void blender::nodes::node_geo_extrude_mesh_cc::remove_unsupported_vert_data ( Mesh & mesh)
static

◆ save_selection_as_attribute()

◆ tag_mesh_added_faces()

void blender::nodes::node_geo_extrude_mesh_cc::tag_mesh_added_faces ( Mesh & mesh)
static

◆ vert_indices_from_edges()