31 std::shuffle(
data.begin(),
data.end(), std::default_random_engine(
seed));
77 for (
const int old_i : new_by_old_map.
index_range()) {
78 const int new_i = new_by_old_map[old_i];
90 if (attr.
domain() != domain) {
96 const auto &
data = std::get<bke::Attribute::ArrayData>(attr.
data());
121 for (
int &
v : mesh->edges_for_write().cast<
int>()) {
122 v = new_by_old_map[
v];
124 for (
int &
v : mesh->corner_verts_for_write()) {
125 v = new_by_old_map[
v];
128 mesh->tag_topology_changed();
142 for (
int &
e : mesh->corner_edges_for_write()) {
143 e = new_by_old_map[
e];
146 mesh->tag_topology_changed();
154 for (
const int new_i : old_offsets.
index_range()) {
155 const int old_i = old_by_new_map[new_i];
156 new_offsets[new_i + 1] = new_offsets[new_i] + old_offsets[old_i].
size();
166 const int elements_num = new_offsets.
total_size();
167 const int groups_num = new_by_old_map.
size();
170 for (
const int old_i :
IndexRange(groups_num)) {
171 const int new_i = new_by_old_map[old_i];
172 const IndexRange old_range = old_offsets[old_i];
173 const IndexRange new_range = new_offsets[new_i];
187 const int groups_num = new_by_old_map.
size();
189 if (attr.
domain() != domain) {
195 const auto &
data = std::get<bke::Attribute::ArrayData>(attr.
data());
199 for (
const int old_i : range) {
200 const int new_i = new_by_old_map[old_i];
201 const IndexRange old_range = old_offsets[old_i];
202 const IndexRange new_range = new_offsets[new_i];
237 mesh->face_offsets_for_write().copy_from(new_face_offsets);
239 mesh->tag_topology_changed();
253 pointcloud->tag_positions_changed();
254 pointcloud->tag_radii_changed();
276 curves->
point_data, old_points_by_curve, new_points_by_curve, new_by_old_map);
313 return G.randomize_geometry_element_order;
Low-level operations for curves.
CustomData interface, see also DNA_customdata_types.h.
void CustomData_free(CustomData *data)
void CustomData_init_layout_from(const CustomData *source, CustomData *dest, eCustomDataMask mask, eCDAllocType alloctype, int totelem)
void CustomData_copy_data(const CustomData *source, CustomData *dest, int source_index, int dest_index, int count)
#define POINTER_OFFSET(v, ofs)
BMesh const char void * data
ATTR_WARN_UNUSED_RESULT const BMVert const BMEdge * e
ATTR_WARN_UNUSED_RESULT const BMVert * v
static unsigned long seed
constexpr void copy_from(Span< T > values) const
Span< T > as_span() const
void copy_construct_n(const void *src, void *dst, int64_t n) const
constexpr int64_t size() const
constexpr int64_t start() const
constexpr int64_t size() const
constexpr IndexRange index_range() const
void foreach(FunctionRef< void(Attribute &)> fn)
AttrStorageType storage_type() const
const DataVariant & data() const
AttrDomain domain() const
void assign_data(DataVariant &&data)
AttrType data_type() const
OffsetIndices< int > points_by_curve() const
void tag_topology_changed()
MutableSpan< int > offsets_for_write()
int instances_num() const
bke::AttributeStorage & attribute_storage()
IndexRange index_range() const
float length(VecOp< float, D >) RET
void gather(GSpan src, Span< int > map, GMutableSpan dst)
const CPPType & attribute_type_to_cpp_type(AttrType type)
void debug_randomize_edge_order(Mesh *mesh)
static Array< int > invert_permutation(const Span< int > permutation)
static void reorder_attribute_domain(bke::AttributeStorage &data, const bke::AttrDomain domain, const Span< int > new_by_old_map)
static void reorder_customdata_groups(CustomData &data, const OffsetIndices< int > old_offsets, const OffsetIndices< int > new_offsets, const Span< int > new_by_old_map)
bool use_debug_randomization()
static int seed_from_curves(const bke::CurvesGeometry &curves)
void debug_randomize_mesh_order(Mesh *mesh)
void debug_randomize_curve_order(bke::CurvesGeometry *curves)
static void reorder_attribute_groups(bke::AttributeStorage &storage, const bke::AttrDomain domain, const OffsetIndices< int > old_offsets, const OffsetIndices< int > new_offsets, const Span< int > new_by_old_map)
static Array< int > make_new_offset_indices(const OffsetIndices< int > old_offsets, const Span< int > old_by_new_map)
static int seed_from_pointcloud(const PointCloud &pointcloud)
void debug_randomize_vert_order(Mesh *mesh)
static Array< int > get_permutation(const int length, const int seed)
void debug_randomize_face_order(Mesh *mesh)
static void reorder_customdata(CustomData &data, const Span< int > new_by_old_map)
void debug_randomize_point_order(PointCloud *pointcloud)
static int seed_from_mesh(const Mesh &mesh)
static int seed_from_instances(const bke::Instances &instances)
void debug_randomize_instance_order(bke::Instances *instances)
void parallel_for(const IndexRange range, const int64_t grain_size, const Function &function, const TaskSizeHints &size_hints=detail::TaskSizeHints_Static(1))
struct AttributeStorage attribute_storage
struct AttributeStorage attribute_storage
static ArrayData from_uninitialized(const CPPType &type, int64_t domain_size)
static ArrayData from_constructed(const CPPType &type, int64_t domain_size)