26 data.vertices.size(), data.edges.size(), data.face_sizes.size(), data.face_vertices.size());
28 mesh->vert_positions_for_write().copy_from(data.vertices);
32 if (!data.edges.is_empty()) {
34 for (
const int i : data.edges.index_range()) {
37 if (v1 >= mesh->verts_num) {
38 fprintf(stderr,
"Invalid PLY vertex index in edge %i/1: %d\n", i, v1);
41 if (
v2 >= mesh->verts_num) {
42 fprintf(stderr,
"Invalid PLY vertex index in edge %i/2: %d\n", i,
v2);
50 if (!data.face_sizes.is_empty()) {
56 for (
const int i : data.face_sizes.index_range()) {
58 face_offsets[i] = offset;
59 for (
int j = 0; j <
size; j++) {
60 uint32_t v = data.face_vertices[offset + j];
61 if (
v >= mesh->verts_num) {
62 fprintf(stderr,
"Invalid PLY vertex index in face %i loop %i: %u\n", i, j,
v);
65 corner_verts[offset + j] = data.face_vertices[offset + j];
78 for (
const int i : data.vertex_colors.index_range()) {
83 for (
const int i : data.vertex_colors.index_range()) {
84 copy_v4_v4(colors.span[i], data.vertex_colors[i]);
93 if (!data.uv_coordinates.is_empty()) {
96 for (
const int i : data.face_vertices.index_range()) {
97 uv_map.
span[i] = data.uv_coordinates[data.face_vertices[i]];
104 bool set_custom_normals_for_verts =
false;
105 if (!data.vertex_normals.is_empty()) {
106 if (!data.face_sizes.is_empty()) {
109 set_custom_normals_for_verts =
true;
111 else if (
params.import_attributes) {
125 if (
params.import_attributes && !data.vertex_custom_attr.is_empty()) {
127 attributes.add<
float>(attr.name,
138 bool verbose_validate =
false;
140 verbose_validate =
true;
145 if (set_custom_normals_for_verts) {
147 mesh,
reinterpret_cast<float(*)[3]
>(data.vertex_normals.data()));
153 *mesh,
IndexMask(mesh->verts_num), 0.0001f);