From 0ba70e946f0be8b3dc7eb33e266068eeec27df6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20M=C3=B6bius?= Date: Tue, 27 Nov 2018 12:01:42 +0100 Subject: [PATCH 1/3] Added Unittest to check OBJ Reader Writer Issue refs --- src/Unittests/unittests_read_write_OBJ.cc | 83 +++++++++++++++++++++++ 1 file changed, 83 insertions(+) diff --git a/src/Unittests/unittests_read_write_OBJ.cc b/src/Unittests/unittests_read_write_OBJ.cc index 6d6019fe..800ae656 100644 --- a/src/Unittests/unittests_read_write_OBJ.cc +++ b/src/Unittests/unittests_read_write_OBJ.cc @@ -499,4 +499,87 @@ TEST_F(OpenMeshReadWriteOBJ, ReadWriteReadSimpleOBJ) { EXPECT_EQ(1, mesh2.normal(mesh2.vertex_handle(7))[2] ) << "Wrong vertex normal at vertex 7 component 2"; } + + +TEST_F(OpenMeshReadWriteOBJ, FaceTexCoordTest) { + + mesh_.clear(); + mesh_.request_vertex_normals(); + mesh_.request_halfedge_texcoords2D(); + + // Add some vertices + Mesh::VertexHandle vhandle[5]; + + vhandle[0] = mesh_.add_vertex(Mesh::Point(0, 0, 0)); + vhandle[1] = mesh_.add_vertex(Mesh::Point(0, 1, 0)); + vhandle[2] = mesh_.add_vertex(Mesh::Point(1, 1, 0)); + + // Add one face + std::vector face_vhandles; + + face_vhandles.push_back(vhandle[2]); + face_vhandles.push_back(vhandle[1]); + face_vhandles.push_back(vhandle[0]); + + Mesh::FaceHandle fh = mesh_.add_face(face_vhandles); + + // 1 --- 2 + // | / + // | / + // | / + // 0 + + mesh_.set_normal(vhandle[0] , Mesh::Normal(1,0,0)); + mesh_.set_normal(vhandle[1] , Mesh::Normal(0,1,0)); + mesh_.set_normal(vhandle[2] , Mesh::Normal(0,0,1)); + + + float u = 8.0f; + for ( auto he : mesh_.halfedges() ) { + + mesh_.set_texcoord2D(he,Mesh::TexCoord2D(u,u)); + u += 1.0; + } + + u = 0.0f; + + for ( auto fh : mesh_.fh_range(fh) ) + { + + mesh_.set_texcoord2D(fh,Mesh::TexCoord2D(u,u)); + u += 1.0f; + } + + + + OpenMesh::IO::Options wopt; + wopt += OpenMesh::IO::Options::VertexNormal; + wopt += OpenMesh::IO::Options::FaceTexCoord; + + bool ok = OpenMesh::IO::write_mesh(mesh_, "OpenMeshReadWriteOBJ_FaceTexCoordTest.obj", wopt); + + EXPECT_TRUE(ok) << "Unable to write OpenMeshReadWriteOBJ_FaceTexCoordTest.obj"; + + mesh_.clear(); + + + OpenMesh::IO::Options ropt; + + ropt += OpenMesh::IO::Options::FaceTexCoord; + + mesh_.request_vertex_normals(); + mesh_.request_face_normals(); + mesh_.request_halfedge_texcoords2D(); + + ok = OpenMesh::IO::read_mesh(mesh_, "OpenMeshReadWriteOBJ_FaceTexCoordTest.obj", ropt); + + EXPECT_TRUE(ok) << "Unable to read back OpenMeshReadWriteOBJ_FaceTexCoordTest.obj"; + +} + + + + + + } From b91ba15e417b14021bada1866a479fe07b0fad2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20M=C3=B6bius?= Date: Tue, 27 Nov 2018 12:02:18 +0100 Subject: [PATCH 2/3] Added Unittest to check OBJ Reader Writer Issue refs #60 --- src/Unittests/unittests_read_write_OBJ.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Unittests/unittests_read_write_OBJ.cc b/src/Unittests/unittests_read_write_OBJ.cc index 800ae656..c2f4fdf0 100644 --- a/src/Unittests/unittests_read_write_OBJ.cc +++ b/src/Unittests/unittests_read_write_OBJ.cc @@ -541,6 +541,7 @@ TEST_F(OpenMeshReadWriteOBJ, FaceTexCoordTest) { u += 1.0; } + u = 0.0f; for ( auto fh : mesh_.fh_range(fh) ) From 56dc45f047e936dfa57acfb1886a2a320b4af098 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20M=C3=B6bius?= Date: Tue, 27 Nov 2018 14:34:35 +0100 Subject: [PATCH 3/3] =?UTF-8?q?Fix=20PLY=20Reader=20hang=20when=20reading?= =?UTF-8?q?=20directly=20from=20istream=20(Thanks=20to=20Paul=20Lor=C3=A9?= =?UTF-8?q?=20for=20the=20patch)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit closes #46 --- Doc/changelog.docu | 1 + src/OpenMesh/Core/IO/reader/PLYReader.cc | 20 ++++++++------------ 2 files changed, 9 insertions(+), 12 deletions(-) diff --git a/Doc/changelog.docu b/Doc/changelog.docu index a68a7daf..fe44af41 100644 --- a/Doc/changelog.docu +++ b/Doc/changelog.docu @@ -18,6 +18,7 @@
  • PLY Reader: Allowing the PLY reader to read custom face ( Thanks to morgan Leborgne for the patch)
  • PLY Reader: Fixed endless loop on unknown property list type
  • +
  • PLY Reader: Fix hang when reading directly from istream (Thanks to Paul LorĂ© for the patch)
  • OM Writer/Reader: Update file format version to 2.0. Older files can still be read, but older OpenMesh versions cannot read new format.
  • OM Writer/Reader: Fixed inconsistent writing/reading of edge properties
  • OM Writer/Reader: Add option to store status
  • diff --git a/src/OpenMesh/Core/IO/reader/PLYReader.cc b/src/OpenMesh/Core/IO/reader/PLYReader.cc index 37e605a7..33718ff5 100644 --- a/src/OpenMesh/Core/IO/reader/PLYReader.cc +++ b/src/OpenMesh/Core/IO/reader/PLYReader.cc @@ -135,6 +135,14 @@ bool _PLYReader_::read(std::istream& _in, BaseImporter& _bi, Options& _opt) { return false; } + // Reparse the header + if (!can_u_read(_in)) { + omerr() << "[PLYReader] : Unable to parse header\n"; + return false; + } + + + // filter relevant options for reading bool swap = _opt.check(Options::Swap); @@ -281,12 +289,6 @@ void _PLYReader_::readCustomProperty(std::istream& _in, BaseImporter& _bi, Handl bool _PLYReader_::read_ascii(std::istream& _in, BaseImporter& _bi, const Options& _opt) const { - // Reparse the header - if (!can_u_read(_in)) { - omerr() << "[PLYReader] : Unable to parse header\n"; - return false; - } - unsigned int i, j, k, l, idx; unsigned int nV; OpenMesh::Vec3f v, n; @@ -507,12 +509,6 @@ bool _PLYReader_::read_ascii(std::istream& _in, BaseImporter& _bi, const Options bool _PLYReader_::read_binary(std::istream& _in, BaseImporter& _bi, bool /*_swap*/, const Options& _opt) const { - // Reparse the header - if (!can_u_read(_in)) { - omerr() << "[PLYReader] : Unable to parse header\n"; - return false; - } - OpenMesh::Vec3f v, n; // Vertex OpenMesh::Vec2f t; // TexCoords BaseImporter::VHandles vhandles;