28const MultiValueMap<bke::GeometryComponent::Type, bke::AttrDomain> &
36 GeometryComponent::Type::Mesh,
37 {AttrDomain::Point, AttrDomain::Edge, AttrDomain::Face});
38 supported_types_and_domains.
add(GeometryComponent::Type::Curve, AttrDomain::Curve);
39 supported_types_and_domains.
add(GeometryComponent::Type::PointCloud, AttrDomain::Point);
40 supported_types_and_domains.
add(GeometryComponent::Type::Instance, AttrDomain::Instance);
41 return supported_types_and_domains;
43 return supported_types_and_domains;
55 if (iter.
domain != domain) {
72 for (const int new_i : range) {
73 const int old_i = old_by_new_map[new_i];
74 array_utils::copy(src.slice(src_offsets[old_i]), dst.span.slice(dst_offsets[new_i]));
86 for (const int64_t i : range) {
87 data[permutation[i]] = i;
121 &dst_mesh.
runtime->face_offsets_sharing_info);
123 src_mesh.
runtime->face_offsets_sharing_info,
125 &dst_mesh.
runtime->face_offsets_sharing_info);
137 src_mesh.edges().cast<
int>(),
138 dst_mesh.edges_for_write().cast<
int>());
142 new_by_old_map.as_span(), src_mesh.corner_verts(), dst_mesh.corner_verts_for_write());
173 &dst_mesh.
runtime->face_offsets_sharing_info);
175 src_mesh.
runtime->face_offsets_sharing_info,
177 &dst_mesh.
runtime->face_offsets_sharing_info);
189 new_by_old_map.as_span(), src_mesh.corner_edges(), dst_mesh.corner_edges_for_write());
219 const Span<int> old_offsets = src_mesh.face_offsets();
251 dst_mesh.tag_positions_changed();
252 dst_mesh.tag_topology_changed();
265 dst_pointcloud.attributes_for_write());
266 dst_pointcloud.tag_positions_changed();
267 dst_pointcloud.tag_radii_changed();
345 return dst_pointcloud;
366 src_curve_geometry, old_by_new_map, attribute_filter);
376 return dst_instances;
390 *src_mesh_component->get(), old_by_new_map, domain, attribute_filter);
397 *src_points_component->get(), old_by_new_map, attribute_filter);
404 *src_curves_component->get(), old_by_new_map, attribute_filter);
411 *src_instances_component->get(), old_by_new_map, attribute_filter);
Low-level operations for curves.
Low-level operations for curves.
void BKE_mesh_copy_parameters_for_eval(Mesh *me_dst, const Mesh *me_src)
General operations for point clouds.
#define BLI_assert_unreachable()
BMesh const char void * data
static IndexMask from_indices(Span< T > indices, IndexMaskMemory &memory)
void add_multiple(const Key &key, Span< Value > values)
void add(const Key &key, const Value &value)
constexpr Span< T > as_span() const
constexpr int64_t size() const
constexpr IndexRange index_range() const
void foreach_attribute(const FunctionRef< void(const AttributeIter &)> fn) const
GAttributeReader get() const
MutableAttributeAccessor attributes_for_write()
void nurbs_custom_knots_update_size()
Span< int > offsets() const
void tag_topology_changed()
AttributeAccessor attributes() const
MutableSpan< int > offsets_for_write()
bool nurbs_has_custom_knots() const
virtual bool is_empty() const
int add_reference(const InstanceReference &reference)
Span< float4x4 > transforms() const
Span< InstanceReference > references() const
void resize(int capacity)
bke::MutableAttributeAccessor attributes_for_write()
bke::AttributeAccessor attributes() const
int instances_num() const
MutableSpan< float4x4 > transforms_for_write()
bool add(const StringRef attribute_id, const AttrDomain domain, const AttrType data_type, const AttributeInit &initializer)
GSpanAttributeWriter lookup_or_add_for_write_only_span(StringRef attribute_id, AttrDomain domain, AttrType data_type)
void gather(const GVArray &src, const IndexMask &indices, GMutableSpan dst, int64_t grain_size=4096)
void gather_custom_knots(const bke::CurvesGeometry &src, const IndexMask &src_curves, int dst_curve_offset, bke::CurvesGeometry &dst)
ImplicitSharingPtr< GeometryComponent > GeometryComponentPtr
void copy_attributes(const AttributeAccessor src_attributes, AttrDomain src_domain, AttrDomain dst_domain, const AttributeFilter &attribute_filter, MutableAttributeAccessor dst_attributes)
void gather_attributes(AttributeAccessor src_attributes, AttrDomain src_domain, AttrDomain dst_domain, const AttributeFilter &attribute_filter, const IndexMask &selection, MutableAttributeAccessor dst_attributes)
auto attribute_filter_with_skip_ref(AttributeFilter filter, const Span< StringRef > skip)
CurvesGeometry curves_new_no_attributes(int point_num, int curve_num)
Mesh * mesh_new_no_attributes(int verts_num, int edges_num, int faces_num, int corners_num)
PointCloud * pointcloud_new_no_attributes(int totpoint)
Curves * curves_new_nomain(int points_num, int curves_num)
static void reorder_attributes_group_to_group(const bke::AttributeAccessor src_attributes, const bke::AttrDomain domain, const OffsetIndices< int > src_offsets, const OffsetIndices< int > dst_offsets, const Span< int > old_by_new_map, const bke::AttributeFilter &attribute_filter, bke::MutableAttributeAccessor dst_attributes)
static void copy_and_reorder_instaces(const bke::Instances &src_instances, const Span< int > old_by_new_map, const bke::AttributeFilter &attribute_filter, bke::Instances &dst_instances)
static Array< int > invert_permutation(const Span< int > permutation)
Mesh * reorder_mesh(const Mesh &src_mesh, Span< int > old_by_new_map, bke::AttrDomain domain, const bke::AttributeFilter &attribute_filter)
PointCloud * reorder_points(const PointCloud &src_pointcloud, Span< int > old_by_new_map, const bke::AttributeFilter &attribute_filter)
static void copy_and_reorder_points(const PointCloud &src_pointcloud, const Span< int > old_by_new_map, const bke::AttributeFilter &attribute_filter, PointCloud &dst_pointcloud)
static void copy_and_reorder_curves(const bke::CurvesGeometry &src_curves, const Span< int > old_by_new_map, const bke::AttributeFilter &attribute_filter, bke::CurvesGeometry &dst_curves)
static void copy_and_reorder_mesh_verts(const Mesh &src_mesh, const Span< int > old_by_new_map, const bke::AttributeFilter &attribute_filter, Mesh &dst_mesh)
bke::CurvesGeometry reorder_curves_geometry(const bke::CurvesGeometry &src_curves, Span< int > old_by_new_map, const bke::AttributeFilter &attribute_filter)
const MultiValueMap< bke::GeometryComponent::Type, bke::AttrDomain > & components_supported_reordering()
static void copy_and_reorder_mesh_faces(const Mesh &src_mesh, const Span< int > old_by_new_map, const bke::AttributeFilter &attribute_filter, Mesh &dst_mesh)
static void copy_and_reorder_mesh_edges(const Mesh &src_mesh, const Span< int > old_by_new_map, const bke::AttributeFilter &attribute_filter, Mesh &dst_mesh)
bke::GeometryComponentPtr reordered_component(const bke::GeometryComponent &src_component, Span< int > old_by_new_map, bke::AttrDomain domain, const bke::AttributeFilter &attribute_filter)
bke::Instances * reorder_instaces(const bke::Instances &src_instances, Span< int > old_by_new_map, const bke::AttributeFilter &attribute_filter)
static void copy_and_reorder_mesh(const Mesh &src_mesh, const Span< int > old_by_new_map, const bke::AttrDomain domain, const bke::AttributeFilter &attribute_filter, Mesh &dst_mesh)
Curves * reorder_curves(const Curves &src_curves, Span< int > old_by_new_map, const bke::AttributeFilter &attribute_filter)
void copy_shared_pointer(T *src_ptr, const ImplicitSharingInfo *src_sharing_info, T **r_dst_ptr, const ImplicitSharingInfo **r_dst_sharing_info)
void free_shared_data(T **data, const ImplicitSharingInfo **sharing_info)
OffsetIndices< int > accumulate_counts_to_offsets(MutableSpan< int > counts_to_offsets, int start_offset=0)
void gather_group_sizes(OffsetIndices< int > offsets, const IndexMask &mask, MutableSpan< int > sizes)
void parallel_for(const IndexRange range, const int64_t grain_size, const Function &function, const TaskSizeHints &size_hints=detail::TaskSizeHints_Static(1))
VecBase< int32_t, 2 > int2
ListBase vertex_group_names
MeshRuntimeHandle * runtime
int * face_offset_indices
bool allow_skip(const StringRef name) const