Developer Documentation
Loading...
Searching...
No Matches
unittests_read_write_STL.cc
1
2#include <gtest/gtest.h>
3#include <Unittests/unittests_common.hh>
4
5
6namespace {
7
8class OpenMeshReadWriteSTL : public OpenMeshBase {
9
10 protected:
11
12 // This function is called before each test is run
13 virtual void SetUp() {
14
15 // Do some initial stuff with the member data here...
16 }
17
18 // This function is called after all tests are through
19 virtual void TearDown() {
20
21 // Do some final stuff with the member data here...
22 }
23
24 // Member already defined in OpenMeshBase
25 //Mesh mesh_;
26};
27
28/*
29 * ====================================================================
30 * Define tests below
31 * ====================================================================
32 */
33
34/*
35 * Just load a simple mesh file in stla format and count whether
36 * the right number of entities has been loaded.
37 */
38TEST_F(OpenMeshReadWriteSTL, LoadSimpleSTLFile) {
39
40 mesh_.clear();
41
42 bool ok = OpenMesh::IO::read_mesh(mesh_, "cube1.stl");
43
44 EXPECT_TRUE(ok);
45
46 EXPECT_EQ(7526u , mesh_.n_vertices()) << "The number of loaded vertices is not correct!";
47 EXPECT_EQ(22572u , mesh_.n_edges()) << "The number of loaded edges is not correct!";
48 EXPECT_EQ(15048u , mesh_.n_faces()) << "The number of loaded faces is not correct!";
49}
50
51
52/*
53 * Just load a simple mesh file in stla format and count whether
54 * the right number of entities has been loaded. Also check facet normals.
55 */
56TEST_F(OpenMeshReadWriteSTL, LoadSimpleSTLFileWithNormals) {
57
58 mesh_.clear();
59 mesh_.request_face_normals();
60
63
64 bool ok = OpenMesh::IO::read_mesh(mesh_, "cube1.stl", opt);
65
66 EXPECT_TRUE(ok);
67
68 EXPECT_TRUE(opt.face_has_normal());
69 EXPECT_FALSE(opt.vertex_has_normal());
70
71 EXPECT_NEAR(-0.038545f, mesh_.normal(mesh_.face_handle(0))[0], 0.0001 ) << "Wrong face normal at face 0 component 0";
72 EXPECT_NEAR(-0.004330f, mesh_.normal(mesh_.face_handle(0))[1], 0.0001 ) << "Wrong face normal at face 0 component 1";
73 EXPECT_NEAR(0.999247f, mesh_.normal(mesh_.face_handle(0))[2], 0.0001 ) << "Wrong face normal at face 0 component 2";
74
75 EXPECT_EQ(7526u , mesh_.n_vertices()) << "The number of loaded vertices is not correct!";
76 EXPECT_EQ(22572u , mesh_.n_edges()) << "The number of loaded edges is not correct!";
77 EXPECT_EQ(15048u , mesh_.n_faces()) << "The number of loaded faces is not correct!";
78
79 mesh_.release_face_normals();
80}
81
82
83/*
84 * Just load a simple mesh file in stlb format and count whether
85 * the right number of entities has been loaded.
86 */
87TEST_F(OpenMeshReadWriteSTL, LoadSimpleSTLBinaryFile) {
88
89 mesh_.clear();
90
91 bool ok = OpenMesh::IO::read_mesh(mesh_, "cube1Binary.stl");
92
93 EXPECT_TRUE(ok);
94
95 EXPECT_EQ(7526u , mesh_.n_vertices()) << "The number of loaded vertices is not correct!";
96 EXPECT_EQ(22572u , mesh_.n_edges()) << "The number of loaded edges is not correct!";
97 EXPECT_EQ(15048u , mesh_.n_faces()) << "The number of loaded faces is not correct!";
98}
99
100
101/*
102 * Just load a simple mesh file in stlb format and count whether
103 * the right number of entities has been loaded. Also check facet normals.
104 */
105TEST_F(OpenMeshReadWriteSTL, LoadSimpleSTLBinaryFileWithNormals) {
106
107 mesh_.clear();
108 mesh_.request_face_normals();
109
113
114 bool ok = OpenMesh::IO::read_mesh(mesh_, "cube1Binary.stl", opt);
115
116 EXPECT_TRUE(ok);
117
118 EXPECT_TRUE(opt.is_binary());
119 EXPECT_TRUE(opt.face_has_normal());
120 EXPECT_FALSE(opt.vertex_has_normal());
121
122 EXPECT_NEAR(-0.038545f, mesh_.normal(mesh_.face_handle(0))[0], 0.0001 ) << "Wrong face normal at face 0 component 0";
123 EXPECT_NEAR(-0.004330f, mesh_.normal(mesh_.face_handle(0))[1], 0.0001 ) << "Wrong face normal at face 0 component 1";
124 EXPECT_NEAR(0.999247f, mesh_.normal(mesh_.face_handle(0))[2], 0.0001 ) << "Wrong face normal at face 0 component 2";
125
126 EXPECT_EQ(7526u , mesh_.n_vertices()) << "The number of loaded vertices is not correct!";
127 EXPECT_EQ(22572u , mesh_.n_edges()) << "The number of loaded edges is not correct!";
128 EXPECT_EQ(15048u , mesh_.n_faces()) << "The number of loaded faces is not correct!";
129
130 mesh_.release_face_normals();
131}
132
133/*
134 * Read and Write stl binary file
135 */
136TEST_F(OpenMeshReadWriteSTL, ReadWriteSimpleSTLBinaryFile) {
137
138 mesh_.clear();
139
142
143 bool ok = OpenMesh::IO::read_mesh(mesh_, "cube1Binary.stl");
144
145 EXPECT_TRUE(ok);
146
147 const char* filename = "cube1Binary_openmeshWriteTestFile.stl";
148
149 ok = OpenMesh::IO::write_mesh(mesh_, filename, opt);
150
151 EXPECT_TRUE(ok);
152
153 ok = OpenMesh::IO::read_mesh(mesh_, filename, opt);
154
155 EXPECT_TRUE(ok);
156
157 EXPECT_EQ(7526u , mesh_.n_vertices()) << "The number of loaded vertices is not correct!";
158 EXPECT_EQ(22572u , mesh_.n_edges()) << "The number of loaded edges is not correct!";
159 EXPECT_EQ(15048u , mesh_.n_faces()) << "The number of loaded faces is not correct!";
160
161 remove(filename);
162}
163
164/*
165 * Just load a simple mesh file in stlb format rewrite and load it again and count whether
166 * the right number of entities has been loaded. Also check facet normals.
167 */
168TEST_F(OpenMeshReadWriteSTL, ReadWriteSimpleSTLBinaryFileWithNormals) {
169
170 mesh_.clear();
171 mesh_.request_face_normals();
172
176
177 bool ok = OpenMesh::IO::read_mesh(mesh_, "cube1Binary.stl", opt);
178
179 EXPECT_TRUE(ok);
180
181 const char* filename = "cube1BinaryNormal_openmeshWriteTestFile.stl";
182
183 ok = OpenMesh::IO::write_mesh(mesh_, filename, opt);
184
185 EXPECT_TRUE(ok);
186
187 ok = OpenMesh::IO::read_mesh(mesh_, filename, opt);
188
189 EXPECT_TRUE(ok);
190
191 EXPECT_TRUE(opt.is_binary());
192 EXPECT_TRUE(opt.face_has_normal());
193 EXPECT_FALSE(opt.vertex_has_normal());
194
195 EXPECT_NEAR(-0.038545f, mesh_.normal(mesh_.face_handle(0))[0], 0.0001 ) << "Wrong face normal at face 0 component 0";
196 EXPECT_NEAR(-0.004330f, mesh_.normal(mesh_.face_handle(0))[1], 0.0001 ) << "Wrong face normal at face 0 component 1";
197 EXPECT_NEAR(0.999247f, mesh_.normal(mesh_.face_handle(0))[2], 0.0001 ) << "Wrong face normal at face 0 component 2";
198
199 EXPECT_EQ(7526u , mesh_.n_vertices()) << "The number of loaded vertices is not correct!";
200 EXPECT_EQ(22572u , mesh_.n_edges()) << "The number of loaded edges is not correct!";
201 EXPECT_EQ(15048u , mesh_.n_faces()) << "The number of loaded faces is not correct!";
202
203 mesh_.release_face_normals();
204 remove(filename);
205}
206
207/*
208 * Just load a simple mesh file in stlb format rewrite and load it again and count whether
209 * the right number of entities has been loaded. Also check facet normals.
210 */
211TEST_F(OpenMeshReadWriteSTL, ReadWriteSimpleSTLAsciiFileWithNormals) {
212
213 mesh_.clear();
214 mesh_.request_face_normals();
215
218
219 bool ok = OpenMesh::IO::read_mesh(mesh_, "cube1Binary.stl", opt);
220
221 EXPECT_TRUE(ok);
222 opt.clear();
224 const char* filename = "cube1Normal_openmeshWriteTestFile.stl";
225
226 ok = OpenMesh::IO::write_mesh(mesh_, filename, opt);
227
228 EXPECT_TRUE(ok);
229
230 opt.clear();
232 ok = OpenMesh::IO::read_mesh(mesh_, filename, opt);
233
234 EXPECT_TRUE(ok);
235
236 EXPECT_FALSE(opt.is_binary());
237 EXPECT_TRUE(opt.face_has_normal());
238 EXPECT_FALSE(opt.vertex_has_normal());
239
240 EXPECT_NEAR(-0.038545f, mesh_.normal(mesh_.face_handle(0))[0], 0.0001 ) << "Wrong face normal at face 0 component 0";
241 EXPECT_NEAR(-0.004330f, mesh_.normal(mesh_.face_handle(0))[1], 0.0001 ) << "Wrong face normal at face 0 component 1";
242 EXPECT_NEAR(0.999247f, mesh_.normal(mesh_.face_handle(0))[2], 0.0001 ) << "Wrong face normal at face 0 component 2";
243
244 EXPECT_EQ(7526u , mesh_.n_vertices()) << "The number of loaded vertices is not correct!";
245 EXPECT_EQ(22572u , mesh_.n_edges()) << "The number of loaded edges is not correct!";
246 EXPECT_EQ(15048u , mesh_.n_faces()) << "The number of loaded faces is not correct!";
247
248 mesh_.release_face_normals();
249 remove(filename);
250}
251
252
253}
Set options for reader/writer modules.
Definition Options.hh:92
void clear(void)
Clear all bits.
Definition Options.hh:143
@ FaceNormal
Has (r) / store (w) face normals.
Definition Options.hh:109
@ Binary
Set binary mode for r/w.
Definition Options.hh:101
bool write_mesh(const Mesh &_mesh, const std::string &_filename, Options _opt=Options::Default, std::streamsize _precision=6)
Write a mesh to the file _filename.
Definition MeshIO.hh:190
bool read_mesh(Mesh &_mesh, const std::string &_filename)
Read a mesh from file _filename.
Definition MeshIO.hh:95