Blender V4.3
ply_export_header.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
10
11#include "IO_ply.hh"
12#include "ply_data.hh"
13#include "ply_export_header.hh"
14#include "ply_file_buffer.hh"
15
16namespace blender::io::ply {
17
19 const PlyData &ply_data,
20 const PLYExportParams &export_params)
21{
22 buffer.write_string("ply");
23
24 StringRef format = export_params.ascii_format ? "ascii" : "binary_little_endian";
25 buffer.write_string("format " + format + " 1.0");
26
28 buffer.write_string("comment Created in Blender version " + version);
29
30 buffer.write_header_element("vertex", int32_t(ply_data.vertices.size()));
31 buffer.write_header_scalar_property("float", "x");
32 buffer.write_header_scalar_property("float", "y");
33 buffer.write_header_scalar_property("float", "z");
34
35 if (!ply_data.vertex_normals.is_empty()) {
36 buffer.write_header_scalar_property("float", "nx");
37 buffer.write_header_scalar_property("float", "ny");
38 buffer.write_header_scalar_property("float", "nz");
39 }
40
41 if (!ply_data.vertex_colors.is_empty()) {
42 buffer.write_header_scalar_property("uchar", "red");
43 buffer.write_header_scalar_property("uchar", "green");
44 buffer.write_header_scalar_property("uchar", "blue");
45 buffer.write_header_scalar_property("uchar", "alpha");
46 }
47
48 if (!ply_data.uv_coordinates.is_empty()) {
49 buffer.write_header_scalar_property("float", "s");
50 buffer.write_header_scalar_property("float", "t");
51 }
52
53 for (const PlyCustomAttribute &attr : ply_data.vertex_custom_attr) {
54 buffer.write_header_scalar_property("float", attr.name);
55 }
56
57 if (!ply_data.face_sizes.is_empty()) {
58 buffer.write_header_element("face", int(ply_data.face_sizes.size()));
59 buffer.write_header_list_property("uchar", "uint", "vertex_indices");
60 }
61
62 if (!ply_data.edges.is_empty()) {
63 buffer.write_header_element("edge", int(ply_data.edges.size()));
64 buffer.write_header_scalar_property("int", "vertex1");
65 buffer.write_header_scalar_property("int", "vertex2");
66 }
67
68 buffer.write_string("end_header");
69 buffer.write_to_file();
70}
71
72} // namespace blender::io::ply
const char * BKE_blender_version_string(void)
Definition blender.cc:139
int64_t size() const
bool is_empty() const
void write_header_scalar_property(StringRef dataType, StringRef name)
void write_header_list_property(StringRef countType, StringRef dataType, StringRef name)
void write_header_element(StringRef name, int count)
format
void write_header(FileBuffer &buffer, const PlyData &ply_data, const PLYExportParams &export_params)
signed int int32_t
Definition stdint.h:77
bool ascii_format
Definition IO_ply.hh:37
Vector< float3 > vertices
Definition ply_data.hh:29
Vector< float4 > vertex_colors
Definition ply_data.hh:31
Vector< float3 > vertex_normals
Definition ply_data.hh:30
Vector< std::pair< int, int > > edges
Definition ply_data.hh:33
Vector< PlyCustomAttribute > vertex_custom_attr
Definition ply_data.hh:32
Vector< float2 > uv_coordinates
Definition ply_data.hh:36
Vector< uint32_t > face_sizes
Definition ply_data.hh:35