3 #include <gtest/gtest.h>
4 #include <Eigen/Geometry>
16 std::string tmppkg = tmp +
"tmppkg";
17 if (!std::filesystem::is_directory(tmppkg) || !std::filesystem::exists(tmppkg))
19 std::filesystem::create_directory(tmppkg);
24 TEST(TesseractURDFUnit, parse_mesh)
27 const bool global_make_convex =
false;
28 const auto parse_mesh_fn =
35 R
"(<mesh filename="package://tesseract_support/meshes/sphere_p25m.stl" scale="1 2 1" extra="0 0 0"/>)";
36 std::vector<tesseract_geometry::PolygonMesh::Ptr> geom;
41 EXPECT_EQ(geom[0]->getVertexCount(), 240);
48 std::string str = R
"(<mesh filename="package://tesseract_support/meshes/sphere_p25m.stl"/>)";
49 std::vector<tesseract_geometry::PolygonMesh::Ptr> geom;
54 EXPECT_EQ(geom[0]->getVertexCount(), 240);
63 R
"(<mesh filename="package://tesseract_support/meshes/sphere_p25m.stl" tesseract:make_convex="false"/>)";
64 std::vector<tesseract_geometry::PolygonMesh::Ptr> geom;
69 EXPECT_EQ(geom[0]->getVertexCount(), 240);
78 R
"(<mesh filename="package://tesseract_support/meshes/sphere_p25m.stl" tesseract:make_convex="true"/>)";
79 std::vector<tesseract_geometry::PolygonMesh::Ptr> geom;
83 EXPECT_LE(geom[0]->getFaceCount(), 80);
84 EXPECT_LE(geom[0]->getVertexCount(), 240);
93 R
"(<mesh filename="package://tesseract_support/meshes/sphere_p25m.stl" tesseract:make_convex="foo"/>)";
94 std::vector<tesseract_geometry::PolygonMesh::Ptr> geom;
101 std::string str = R
"(<mesh filename="abc" scale="1 2 1"/>)";
102 std::vector<tesseract_geometry::PolygonMesh::Ptr> geom;
109 std::string str = R
"(<mesh filename="package://tesseract_support/meshes/sphere_p25m.stl" scale="1 a 1"/>)";
110 std::vector<tesseract_geometry::PolygonMesh::Ptr> geom;
117 std::string str = R
"(<mesh filename="package://tesseract_support/meshes/sphere_p25m.stl" scale="a 1 1"/>)";
118 std::vector<tesseract_geometry::PolygonMesh::Ptr> geom;
125 std::string str = R
"(<mesh filename="package://tesseract_support/meshes/sphere_p25m.stl" scale="1 1 a"/>)";
126 std::vector<tesseract_geometry::PolygonMesh::Ptr> geom;
133 std::string str = R
"(<mesh filename="package://tesseract_support/meshes/sphere_p25m.stl" scale="1 2 1 3"/>)";
134 std::vector<tesseract_geometry::PolygonMesh::Ptr> geom;
141 std::string str = R
"(<mesh scale="1 2 1"/>)";
142 std::vector<tesseract_geometry::PolygonMesh::Ptr> geom;
149 std::string str =
"<mesh />";
150 std::vector<tesseract_geometry::PolygonMesh::Ptr> geom;
157 TEST(TesseractURDFUnit, write_mesh)
161 Eigen::Vector3d(1, 0, 0),
162 Eigen::Vector3d(0, 1, 0) };
163 Eigen::VectorXi indices(4);
164 indices << 3, 0, 1, 2;
166 std::make_shared<tesseract_common::VectorVector3d>(vertices), std::make_shared<Eigen::VectorXi>(indices));
169 writeTest<tesseract_geometry::Mesh::Ptr>(
171 EXPECT_EQ(text, R
"(<mesh filename="package://tmppkg/mesh0.ply"/>)");
176 Eigen::Vector3d(1, 0, 0),
177 Eigen::Vector3d(0, 1, 0) };
178 Eigen::VectorXi indices(4);
179 indices << 3, 0, 1, 2;
181 std::make_shared<tesseract_common::VectorVector3d>(vertices), std::make_shared<Eigen::VectorXi>(indices));
184 writeTest<tesseract_geometry::Mesh::Ptr>(
193 writeTest<tesseract_geometry::Mesh::Ptr>(
199 TEST(TesseractURDFUnit, parse_convex_mesh)
202 const bool global_make_convex =
true;
203 const auto parse_mesh_fn =
209 std::string str = R
"(<mesh filename="package://tesseract_support/meshes/box_2m.ply" scale="1 2 1" extra="0 0 0"/>)";
210 std::vector<tesseract_geometry::PolygonMesh::Ptr> geom;
224 R
"(<mesh filename="package://tesseract_support/meshes/box_2m.ply" scale="1 2 1" extra="0 0 0" tesseract:make_convex="true"/>)";
225 std::vector<tesseract_geometry::PolygonMesh::Ptr> geom;
239 R
"(<mesh filename="package://tesseract_support/meshes/box_2m.ply" scale="1 2 1" extra="0 0 0" tesseract:make_convex="false"/>)";
240 std::vector<tesseract_geometry::PolygonMesh::Ptr> geom;
253 R
"(<mesh filename="package://tesseract_support/meshes/box_2m.ply" scale="1 2 1" tesseract:make_convex="true"/>)";
254 std::vector<tesseract_geometry::PolygonMesh::Ptr> geom;
265 R
"(<mesh filename="package://tesseract_support/meshes/box_box.dae" scale="1 2 1" tesseract:make_convex="true"/>)";
266 std::vector<tesseract_geometry::PolygonMesh::Ptr> geom;
273 std::string str = R
"(<mesh filename="package://tesseract_support/meshes/box_2m.ply"/>)";
274 std::vector<tesseract_geometry::PolygonMesh::Ptr> geom;
286 std::string str = R
"(<mesh filename="package://tesseract_support/meshes/box_2m.ply" scale="a 2 1" />)";
287 std::vector<tesseract_geometry::PolygonMesh::Ptr> geom;
294 std::string str = R
"(<mesh filename="package://tesseract_support/meshes/box_2m.ply" scale="1 a 1" />)";
295 std::vector<tesseract_geometry::PolygonMesh::Ptr> geom;
302 std::string str = R
"(<mesh filename="package://tesseract_support/meshes/box_2m.ply" scale="1 2 a" />)";
303 std::vector<tesseract_geometry::PolygonMesh::Ptr> geom;
310 std::string str = R
"(<mesh filename="package://tesseract_support/meshes/box_2m.ply" scale="-1 2 1" />)";
311 std::vector<tesseract_geometry::PolygonMesh::Ptr> geom;
318 std::string str = R
"(<mesh filename="package://tesseract_support/meshes/box_2m.ply" scale="1 -1 1" />)";
319 std::vector<tesseract_geometry::PolygonMesh::Ptr> geom;
326 std::string str = R
"(<mesh filename="package://tesseract_support/meshes/box_2m.ply" scale="1 2 -1" />)";
327 std::vector<tesseract_geometry::PolygonMesh::Ptr> geom;
334 std::string str = R
"(<mesh filename="abc" scale="1 2 1"/>)";
335 std::vector<tesseract_geometry::PolygonMesh::Ptr> geom;
342 std::string str = R
"(<mesh filename="package://tesseract_support/meshes/box_2m.ply" scale="1 a 1"/>)";
343 std::vector<tesseract_geometry::PolygonMesh::Ptr> geom;
350 std::string str = R
"(<mesh filename="package://tesseract_support/meshes/box_2m.ply" scale="1 2 1 3"/>)";
351 std::vector<tesseract_geometry::PolygonMesh::Ptr> geom;
358 std::string str = R
"(<mesh scale="1 2 1"/>)";
359 std::vector<tesseract_geometry::PolygonMesh::Ptr> geom;
366 std::string str =
"<mesh />";
367 std::vector<tesseract_geometry::PolygonMesh::Ptr> geom;
374 TEST(TesseractURDFUnit, write_convex_mesh)
379 Eigen::Vector3d(1, 0, 0),
380 Eigen::Vector3d(0, 1, 0) };
381 Eigen::VectorXi indices(4);
382 indices << 3, 0, 1, 2;
383 auto convex_mesh = std::make_shared<tesseract_geometry::ConvexMesh>(
384 std::make_shared<tesseract_common::VectorVector3d>(vertices), std::make_shared<Eigen::VectorXi>(indices));
391 writeTest<tesseract_geometry::ConvexMesh::Ptr>(
393 EXPECT_EQ(text, R
"(<mesh filename="package://tmppkg/convex0.ply" tesseract:make_convex="true"/>)");
399 Eigen::Vector3d(1, 0, 0),
400 Eigen::Vector3d(0, 1, 0) };
401 Eigen::VectorXi indices(4);
402 indices << 3, 0, 1, 2;
403 Eigen::Vector3d scale(0.5, 0.5, 0.5);
405 std::make_shared<tesseract_geometry::ConvexMesh>(std::make_shared<tesseract_common::VectorVector3d>(vertices),
406 std::make_shared<Eigen::VectorXi>(indices),
415 writeTest<tesseract_geometry::ConvexMesh::Ptr>(
418 R
"(<mesh filename="package://tmppkg/convex1.ply" scale="0.5 0.5 0.5" tesseract:make_convex="true"/>)");