3 #include <gtest/gtest.h>
14 TEST(TesseractGeometryUnit, Instantiation)
16 std::shared_ptr<const tesseract_common::VectorVector3d> vertices =
17 std::make_shared<const tesseract_common::VectorVector3d>();
18 std::shared_ptr<const Eigen::VectorXi> faces = std::make_shared<const Eigen::VectorXi>();
20 auto box = std::make_shared<tesseract_geometry::Box>(1, 1, 1);
21 auto cone = std::make_shared<tesseract_geometry::Cone>(1, 1);
22 auto cylinder = std::make_shared<tesseract_geometry::Cylinder>(1, 1);
23 auto capsule = std::make_shared<tesseract_geometry::Capsule>(1, 1);
24 auto plane = std::make_shared<tesseract_geometry::Plane>(1, 1, 1, 1);
25 auto sphere = std::make_shared<tesseract_geometry::Sphere>(1);
26 auto convex_mesh = std::make_shared<tesseract_geometry::ConvexMesh>(vertices, faces);
27 auto mesh = std::make_shared<tesseract_geometry::Mesh>(vertices, faces);
28 auto sdf_mesh = std::make_shared<tesseract_geometry::SDFMesh>(vertices, faces);
31 std::make_shared<tesseract_geometry::CompoundMesh>(std::vector<std::shared_ptr<tesseract_geometry::PolygonMesh>>{
32 std::make_shared<tesseract_geometry::Mesh>(vertices, faces),
33 std::make_shared<tesseract_geometry::Mesh>(vertices, faces) });
46 std::vector<point> points;
55 TEST(TesseractGeometryUnit, Box)
58 auto geom = std::make_shared<T>(1, 1, 1);
59 EXPECT_NEAR(geom->getX(), 1, 1e-5);
60 EXPECT_NEAR(geom->getY(), 1, 1e-5);
61 EXPECT_NEAR(geom->getZ(), 1, 1e-5);
63 EXPECT_FALSE(geom->getUUID().is_nil());
65 auto geom_clone = geom->clone();
66 EXPECT_NEAR(std::static_pointer_cast<T>(geom_clone)->getX(), 1, 1e-5);
67 EXPECT_NEAR(std::static_pointer_cast<T>(geom_clone)->getY(), 1, 1e-5);
68 EXPECT_NEAR(std::static_pointer_cast<T>(geom_clone)->getZ(), 1, 1e-5);
70 EXPECT_FALSE(geom_clone->getUUID().is_nil());
71 EXPECT_NE(geom_clone->getUUID(), geom->getUUID());
73 geom->setUUID(geom_clone->getUUID());
74 EXPECT_EQ(geom_clone->getUUID(), geom->getUUID());
84 TEST(TesseractGeometryUnit, Cone)
87 auto geom = std::make_shared<T>(1, 1);
88 EXPECT_NEAR(geom->getRadius(), 1, 1e-5);
89 EXPECT_NEAR(geom->getLength(), 1, 1e-5);
91 EXPECT_FALSE(geom->getUUID().is_nil());
93 auto geom_clone = geom->clone();
94 EXPECT_NEAR(std::static_pointer_cast<T>(geom_clone)->getRadius(), 1, 1e-5);
95 EXPECT_NEAR(std::static_pointer_cast<T>(geom_clone)->getLength(), 1, 1e-5);
97 EXPECT_FALSE(geom_clone->getUUID().is_nil());
98 EXPECT_NE(geom_clone->getUUID(), geom->getUUID());
100 geom->setUUID(geom_clone->getUUID());
101 EXPECT_EQ(geom_clone->getUUID(), geom->getUUID());
109 TEST(TesseractGeometryUnit, Cylinder)
112 auto geom = std::make_shared<T>(1, 1);
113 EXPECT_NEAR(geom->getRadius(), 1, 1e-5);
114 EXPECT_NEAR(geom->getLength(), 1, 1e-5);
116 EXPECT_FALSE(geom->getUUID().is_nil());
118 auto geom_clone = geom->clone();
119 EXPECT_NEAR(std::static_pointer_cast<T>(geom_clone)->getRadius(), 1, 1e-5);
120 EXPECT_NEAR(std::static_pointer_cast<T>(geom_clone)->getLength(), 1, 1e-5);
122 EXPECT_FALSE(geom_clone->getUUID().is_nil());
123 EXPECT_NE(geom_clone->getUUID(), geom->getUUID());
125 geom->setUUID(geom_clone->getUUID());
126 EXPECT_EQ(geom_clone->getUUID(), geom->getUUID());
134 TEST(TesseractGeometryUnit, Capsule)
137 auto geom = std::make_shared<T>(1, 1);
138 EXPECT_NEAR(geom->getRadius(), 1, 1e-5);
139 EXPECT_NEAR(geom->getLength(), 1, 1e-5);
141 EXPECT_FALSE(geom->getUUID().is_nil());
143 auto geom_clone = geom->clone();
144 EXPECT_NEAR(std::static_pointer_cast<T>(geom_clone)->getRadius(), 1, 1e-5);
145 EXPECT_NEAR(std::static_pointer_cast<T>(geom_clone)->getLength(), 1, 1e-5);
147 EXPECT_FALSE(geom_clone->getUUID().is_nil());
148 EXPECT_NE(geom_clone->getUUID(), geom->getUUID());
150 geom->setUUID(geom_clone->getUUID());
151 EXPECT_EQ(geom_clone->getUUID(), geom->getUUID());
159 TEST(TesseractGeometryUnit, Sphere)
162 auto geom = std::make_shared<T>(1);
163 EXPECT_NEAR(geom->getRadius(), 1, 1e-5);
165 EXPECT_FALSE(geom->getUUID().is_nil());
167 auto geom_clone = geom->clone();
168 EXPECT_NEAR(std::static_pointer_cast<T>(geom_clone)->getRadius(), 1, 1e-5);
170 EXPECT_FALSE(geom_clone->getUUID().is_nil());
171 EXPECT_NE(geom_clone->getUUID(), geom->getUUID());
173 geom->setUUID(geom_clone->getUUID());
174 EXPECT_EQ(geom_clone->getUUID(), geom->getUUID());
181 TEST(TesseractGeometryUnit, Plane)
184 auto geom = std::make_shared<T>(1, 1, 1, 1);
185 EXPECT_NEAR(geom->getA(), 1, 1e-5);
186 EXPECT_NEAR(geom->getB(), 1, 1e-5);
187 EXPECT_NEAR(geom->getC(), 1, 1e-5);
188 EXPECT_NEAR(geom->getD(), 1, 1e-5);
190 EXPECT_FALSE(geom->getUUID().is_nil());
192 auto geom_clone = geom->clone();
193 EXPECT_NEAR(std::static_pointer_cast<T>(geom_clone)->getA(), 1, 1e-5);
194 EXPECT_NEAR(std::static_pointer_cast<T>(geom_clone)->getB(), 1, 1e-5);
195 EXPECT_NEAR(std::static_pointer_cast<T>(geom_clone)->getC(), 1, 1e-5);
196 EXPECT_NEAR(std::static_pointer_cast<T>(geom_clone)->getD(), 1, 1e-5);
198 EXPECT_FALSE(geom_clone->getUUID().is_nil());
199 EXPECT_NE(geom_clone->getUUID(), geom->getUUID());
201 geom->setUUID(geom_clone->getUUID());
202 EXPECT_EQ(geom_clone->getUUID(), geom->getUUID());
212 TEST(TesseractGeometryUnit, PolygonMesh)
214 auto vertices = std::make_shared<tesseract_common::VectorVector3d>();
215 vertices->emplace_back(1, 1, 0);
216 vertices->emplace_back(1, -1, 0);
217 vertices->emplace_back(-1, -1, 0);
218 vertices->emplace_back(1, -1, 0);
220 auto faces = std::make_shared<Eigen::VectorXi>();
229 auto geom = std::make_shared<T>(vertices, faces);
230 EXPECT_TRUE(geom->getVertices() !=
nullptr);
231 EXPECT_TRUE(geom->getFaces() !=
nullptr);
232 EXPECT_TRUE(geom->getVertexCount() == 4);
233 EXPECT_TRUE(geom->getFaceCount() == 1);
235 EXPECT_FALSE(geom->getUUID().is_nil());
237 auto geom_clone = geom->clone();
238 EXPECT_TRUE(std::static_pointer_cast<T>(geom_clone)->getVertices() !=
nullptr);
239 EXPECT_TRUE(std::static_pointer_cast<T>(geom_clone)->getFaces() !=
nullptr);
240 EXPECT_TRUE(std::static_pointer_cast<T>(geom_clone)->getVertexCount() == 4);
241 EXPECT_TRUE(std::static_pointer_cast<T>(geom_clone)->getFaceCount() == 1);
243 EXPECT_FALSE(geom_clone->getUUID().is_nil());
244 EXPECT_NE(geom_clone->getUUID(), geom->getUUID());
246 geom->setUUID(geom_clone->getUUID());
247 EXPECT_EQ(geom_clone->getUUID(), geom->getUUID());
254 std::make_shared<Eigen::VectorXi>())));
257 TEST(TesseractGeometryUnit, ConvexMesh)
259 auto vertices = std::make_shared<tesseract_common::VectorVector3d>();
260 vertices->emplace_back(1, 1, 0);
261 vertices->emplace_back(1, -1, 0);
262 vertices->emplace_back(-1, -1, 0);
263 vertices->emplace_back(1, -1, 0);
265 auto faces = std::make_shared<Eigen::VectorXi>();
274 auto geom = std::make_shared<T>(vertices, faces);
275 EXPECT_TRUE(geom->getVertices() !=
nullptr);
276 EXPECT_TRUE(geom->getFaces() !=
nullptr);
277 EXPECT_TRUE(geom->getVertexCount() == 4);
278 EXPECT_TRUE(geom->getFaceCount() == 1);
280 EXPECT_EQ(geom->getCreationMethod(), tesseract_geometry::ConvexMesh::CreationMethod::DEFAULT);
281 geom->setCreationMethod(tesseract_geometry::ConvexMesh::CreationMethod::CONVERTED);
282 EXPECT_EQ(geom->getCreationMethod(), tesseract_geometry::ConvexMesh::CreationMethod::CONVERTED);
283 EXPECT_FALSE(geom->getUUID().is_nil());
285 auto geom_clone = geom->clone();
286 EXPECT_TRUE(std::static_pointer_cast<T>(geom_clone)->getVertices() !=
nullptr);
287 EXPECT_TRUE(std::static_pointer_cast<T>(geom_clone)->getFaces() !=
nullptr);
288 EXPECT_TRUE(std::static_pointer_cast<T>(geom_clone)->getVertexCount() == 4);
289 EXPECT_TRUE(std::static_pointer_cast<T>(geom_clone)->getFaceCount() == 1);
291 EXPECT_EQ(geom->getCreationMethod(), tesseract_geometry::ConvexMesh::CreationMethod::CONVERTED);
292 EXPECT_FALSE(geom_clone->getUUID().is_nil());
293 EXPECT_NE(geom_clone->getUUID(), geom->getUUID());
295 geom->setUUID(geom_clone->getUUID());
296 EXPECT_EQ(geom_clone->getUUID(), geom->getUUID());
303 std::make_shared<Eigen::VectorXi>())));
306 TEST(TesseractGeometryUnit, CompoundConvexMesh)
308 auto vertices = std::make_shared<tesseract_common::VectorVector3d>();
309 vertices->emplace_back(1, 1, 0);
310 vertices->emplace_back(1, -1, 0);
311 vertices->emplace_back(-1, -1, 0);
312 vertices->emplace_back(1, -1, 0);
314 auto faces = std::make_shared<Eigen::VectorXi>();
323 auto sub_geom = std::make_shared<T>(vertices, faces);
324 EXPECT_TRUE(sub_geom->getVertices() !=
nullptr);
325 EXPECT_TRUE(sub_geom->getFaces() !=
nullptr);
326 EXPECT_TRUE(sub_geom->getVertexCount() == 4);
327 EXPECT_TRUE(sub_geom->getFaceCount() == 1);
329 EXPECT_FALSE(sub_geom->getUUID().is_nil());
331 std::vector<tesseract_geometry::PolygonMesh::Ptr> poly_meshes;
332 poly_meshes.push_back(sub_geom);
333 poly_meshes.push_back(sub_geom);
334 poly_meshes.push_back(sub_geom);
336 auto geom = std::make_shared<tesseract_geometry::CompoundMesh>(poly_meshes);
337 EXPECT_EQ(geom->getMeshes().size(), 3);
338 EXPECT_EQ(geom->getResource(), geom->getMeshes().front()->getResource());
342 auto geom_clone = std::static_pointer_cast<tesseract_geometry::CompoundMesh>(geom->clone());
343 EXPECT_EQ(geom_clone->getMeshes().size(), 3);
344 EXPECT_EQ(geom_clone->getResource(), geom->getMeshes().front()->getResource());
348 EXPECT_FALSE(geom_clone->getUUID().is_nil());
349 EXPECT_NE(geom_clone->getUUID(), geom->getUUID());
351 geom->setUUID(geom_clone->getUUID());
352 EXPECT_EQ(geom_clone->getUUID(), geom->getUUID());
359 std::vector<tesseract_geometry::ConvexMesh::Ptr> convex_meshes;
360 convex_meshes.push_back(sub_geom);
361 convex_meshes.push_back(sub_geom);
362 convex_meshes.push_back(sub_geom);
364 auto geom = std::make_shared<tesseract_geometry::CompoundMesh>(convex_meshes);
365 EXPECT_EQ(geom->getMeshes().size(), 3);
366 EXPECT_EQ(geom->getResource(), geom->getMeshes().front()->getResource());
372 auto vertices = std::make_shared<tesseract_common::VectorVector3d>();
373 vertices->emplace_back(1, 1, 0);
374 vertices->emplace_back(1, -1, 0);
375 vertices->emplace_back(-1, -1, 0);
376 vertices->emplace_back(1, -1, 0);
378 auto faces = std::make_shared<Eigen::VectorXi>();
391 auto sub_geom = std::make_shared<T>(vertices, faces);
392 EXPECT_TRUE(sub_geom->getVertices() !=
nullptr);
393 EXPECT_TRUE(sub_geom->getFaces() !=
nullptr);
394 EXPECT_TRUE(sub_geom->getVertexCount() == 4);
395 EXPECT_TRUE(sub_geom->getFaceCount() == 2);
397 EXPECT_FALSE(geom->getUUID().is_nil());
399 std::vector<tesseract_geometry::SDFMesh::Ptr> sdf_meshes;
400 sdf_meshes.push_back(sub_geom);
401 sdf_meshes.push_back(sub_geom);
402 sdf_meshes.push_back(sub_geom);
404 auto geom = std::make_shared<tesseract_geometry::CompoundMesh>(sdf_meshes);
405 EXPECT_EQ(geom->getMeshes().size(), 3);
406 EXPECT_EQ(geom->getResource(), geom->getMeshes().front()->getResource());
412 auto vertices = std::make_shared<tesseract_common::VectorVector3d>();
413 vertices->emplace_back(1, 1, 0);
414 vertices->emplace_back(1, -1, 0);
415 vertices->emplace_back(-1, -1, 0);
416 vertices->emplace_back(1, -1, 0);
418 auto faces = std::make_shared<Eigen::VectorXi>();
431 auto sub_geom = std::make_shared<T>(vertices, faces);
432 EXPECT_TRUE(sub_geom->getVertices() !=
nullptr);
433 EXPECT_TRUE(sub_geom->getFaces() !=
nullptr);
434 EXPECT_TRUE(sub_geom->getVertexCount() == 4);
435 EXPECT_TRUE(sub_geom->getFaceCount() == 2);
437 EXPECT_FALSE(geom->getUUID().is_nil());
439 std::vector<tesseract_geometry::Mesh::Ptr> meshes;
440 meshes.push_back(sub_geom);
441 meshes.push_back(sub_geom);
442 meshes.push_back(sub_geom);
444 auto geom = std::make_shared<tesseract_geometry::CompoundMesh>(meshes);
445 EXPECT_EQ(geom->getMeshes().size(), 3);
446 EXPECT_EQ(geom->getResource(), geom->getMeshes().front()->getResource());
452 TEST(TesseractGeometryUnit, Mesh)
454 auto vertices = std::make_shared<tesseract_common::VectorVector3d>();
455 vertices->emplace_back(1, 1, 0);
456 vertices->emplace_back(1, -1, 0);
457 vertices->emplace_back(-1, -1, 0);
458 vertices->emplace_back(1, -1, 0);
460 auto faces = std::make_shared<Eigen::VectorXi>();
475 auto geom = std::make_shared<T>(vertices, faces);
476 EXPECT_TRUE(geom->getVertices() !=
nullptr);
477 EXPECT_TRUE(geom->getFaces() !=
nullptr);
478 EXPECT_TRUE(geom->getVertexCount() == 4);
479 EXPECT_TRUE(geom->getFaceCount() == 2);
480 EXPECT_TRUE(geom->getMaterial() ==
nullptr);
482 EXPECT_FALSE(geom->getUUID().is_nil());
484 auto geom_clone = geom->clone();
485 EXPECT_TRUE(std::static_pointer_cast<T>(geom_clone)->getVertices() !=
nullptr);
486 EXPECT_TRUE(std::static_pointer_cast<T>(geom_clone)->getFaces() !=
nullptr);
487 EXPECT_TRUE(std::static_pointer_cast<T>(geom_clone)->getVertexCount() == 4);
488 EXPECT_TRUE(std::static_pointer_cast<T>(geom_clone)->getFaceCount() == 2);
489 EXPECT_TRUE(std::static_pointer_cast<T>(geom_clone)->getMaterial() ==
nullptr);
491 EXPECT_FALSE(geom_clone->getUUID().is_nil());
492 EXPECT_NE(geom_clone->getUUID(), geom->getUUID());
494 geom->setUUID(geom_clone->getUUID());
495 EXPECT_EQ(geom_clone->getUUID(), geom->getUUID());
502 std::make_shared<Eigen::VectorXi>())));
506 auto mat = std::make_shared<tesseract_geometry::MeshMaterial>();
507 auto geom = std::make_shared<T>(vertices, faces,
nullptr, Eigen::Vector3d(1, 1, 1),
nullptr,
nullptr, mat);
508 EXPECT_TRUE(geom->getVertices() !=
nullptr);
509 EXPECT_TRUE(geom->getFaces() !=
nullptr);
510 EXPECT_TRUE(geom->getVertexCount() == 4);
511 EXPECT_TRUE(geom->getFaceCount() == 2);
512 EXPECT_TRUE(geom->getMaterial() !=
nullptr);
514 EXPECT_FALSE(geom->getUUID().is_nil());
516 auto geom_clone = geom->clone();
517 EXPECT_TRUE(std::static_pointer_cast<T>(geom_clone)->getVertices() !=
nullptr);
518 EXPECT_TRUE(std::static_pointer_cast<T>(geom_clone)->getFaces() !=
nullptr);
519 EXPECT_TRUE(std::static_pointer_cast<T>(geom_clone)->getVertexCount() == 4);
520 EXPECT_TRUE(std::static_pointer_cast<T>(geom_clone)->getFaceCount() == 2);
521 EXPECT_TRUE(std::static_pointer_cast<T>(geom_clone)->getMaterial() !=
nullptr);
523 EXPECT_FALSE(geom_clone->getUUID().is_nil());
524 EXPECT_NE(geom_clone->getUUID(), geom->getUUID());
526 geom->setUUID(geom_clone->getUUID());
527 EXPECT_EQ(geom_clone->getUUID(), geom->getUUID());
534 std::make_shared<Eigen::VectorXi>())));
538 TEST(TesseractGeometryUnit, CompoundMesh)
540 auto vertices = std::make_shared<tesseract_common::VectorVector3d>();
541 vertices->emplace_back(1, 1, 0);
542 vertices->emplace_back(1, -1, 0);
543 vertices->emplace_back(-1, -1, 0);
544 vertices->emplace_back(1, -1, 0);
546 auto faces = std::make_shared<Eigen::VectorXi>();
560 auto sub_geom = std::make_shared<T>(vertices, faces);
561 EXPECT_TRUE(sub_geom->getVertices() !=
nullptr);
562 EXPECT_TRUE(sub_geom->getFaces() !=
nullptr);
563 EXPECT_TRUE(sub_geom->getVertexCount() == 4);
564 EXPECT_TRUE(sub_geom->getFaceCount() == 2);
565 EXPECT_TRUE(sub_geom->getMaterial() ==
nullptr);
567 EXPECT_FALSE(sub_geom->getUUID().is_nil());
569 std::vector<tesseract_geometry::PolygonMesh::Ptr> meshes;
570 meshes.push_back(sub_geom);
571 meshes.push_back(sub_geom);
572 meshes.push_back(sub_geom);
574 auto geom = std::make_shared<tesseract_geometry::CompoundMesh>(meshes);
575 EXPECT_EQ(geom->getMeshes().size(), 3);
576 EXPECT_EQ(geom->getResource(), geom->getMeshes().front()->getResource());
579 EXPECT_FALSE(geom->getUUID().is_nil());
581 auto geom_clone = std::static_pointer_cast<tesseract_geometry::CompoundMesh>(geom->clone());
582 EXPECT_EQ(geom_clone->getMeshes().size(), 3);
583 EXPECT_EQ(geom_clone->getResource(), geom->getMeshes().front()->getResource());
587 EXPECT_FALSE(geom_clone->getUUID().is_nil());
588 EXPECT_NE(geom_clone->getUUID(), geom->getUUID());
590 geom->setUUID(geom_clone->getUUID());
591 EXPECT_EQ(geom_clone->getUUID(), geom->getUUID());
595 meshes.push_back(sub_geom);
596 EXPECT_ANY_THROW(std::make_shared<tesseract_geometry::CompoundMesh>(meshes));
602 meshes.push_back(sub_geom);
606 TEST(TesseractGeometryUnit, SDFMesh)
608 auto vertices = std::make_shared<tesseract_common::VectorVector3d>();
609 vertices->emplace_back(1, 1, 0);
610 vertices->emplace_back(1, -1, 0);
611 vertices->emplace_back(-1, -1, 0);
612 vertices->emplace_back(1, -1, 0);
614 auto faces = std::make_shared<Eigen::VectorXi>();
627 auto geom = std::make_shared<T>(vertices, faces);
628 EXPECT_TRUE(geom->getVertices() !=
nullptr);
629 EXPECT_TRUE(geom->getFaces() !=
nullptr);
630 EXPECT_TRUE(geom->getVertexCount() == 4);
631 EXPECT_TRUE(geom->getFaceCount() == 2);
633 EXPECT_FALSE(geom->getUUID().is_nil());
635 auto geom_clone = geom->clone();
636 EXPECT_TRUE(std::static_pointer_cast<T>(geom_clone)->getVertices() !=
nullptr);
637 EXPECT_TRUE(std::static_pointer_cast<T>(geom_clone)->getFaces() !=
nullptr);
638 EXPECT_TRUE(std::static_pointer_cast<T>(geom_clone)->getVertexCount() == 4);
639 EXPECT_TRUE(std::static_pointer_cast<T>(geom_clone)->getFaceCount() == 2);
641 EXPECT_FALSE(geom_clone->getUUID().is_nil());
642 EXPECT_NE(geom_clone->getUUID(), geom->getUUID());
644 geom->setUUID(geom_clone->getUUID());
645 EXPECT_EQ(geom_clone->getUUID(), geom->getUUID());
652 std::make_shared<Eigen::VectorXi>())));
655 TEST(TesseractGeometryUnit, Octree)
662 EXPECT_TRUE(geom->getOctree() !=
nullptr);
665 EXPECT_FALSE(geom->getUUID().is_nil());
667 auto geom_clone = geom->clone();
668 EXPECT_TRUE(std::static_pointer_cast<T>(geom_clone)->getOctree() !=
nullptr);
671 EXPECT_FALSE(geom_clone->getUUID().is_nil());
672 EXPECT_NE(geom_clone->getUUID(), geom->getUUID());
674 geom->setUUID(geom_clone->getUUID());
675 EXPECT_EQ(geom_clone->getUUID(), geom->getUUID());
681 TEST(TesseractGeometryUnit, LoadMeshUnit)
686 std::string mesh_file = locator.
locateResource(
"package://tesseract_support/meshes/sphere_p25m.stl")->getFilePath();
687 std::vector<Mesh::Ptr> meshes = createMeshFromPath<Mesh>(mesh_file);
688 EXPECT_TRUE(meshes.size() == 1);
689 EXPECT_TRUE(meshes[0]->getFaceCount() == 80);
690 EXPECT_TRUE(meshes[0]->getVertexCount() == 42);
692 mesh_file = locator.
locateResource(
"package://tesseract_support/meshes/sphere_p25m.ply")->getFilePath();
693 meshes = createMeshFromPath<Mesh>(mesh_file);
694 EXPECT_TRUE(meshes.size() == 1);
695 EXPECT_TRUE(meshes[0]->getFaceCount() == 80);
696 EXPECT_TRUE(meshes[0]->getVertexCount() == 42);
698 mesh_file = locator.
locateResource(
"package://tesseract_support/meshes/sphere_p25m.dae")->getFilePath();
699 meshes = createMeshFromPath<Mesh>(mesh_file);
700 EXPECT_TRUE(meshes.size() == 2);
701 EXPECT_TRUE(meshes[0]->getFaceCount() == 80);
702 EXPECT_TRUE(meshes[0]->getVertexCount() == 42);
703 EXPECT_TRUE(meshes[1]->getFaceCount() == 80);
704 EXPECT_TRUE(meshes[1]->getVertexCount() == 42);
706 mesh_file = locator.
locateResource(
"package://tesseract_support/meshes/sphere_p25m.dae")->getFilePath();
707 meshes = createMeshFromPath<Mesh>(mesh_file, Eigen::Vector3d(1, 1, 1),
false,
true);
708 EXPECT_TRUE(meshes.size() == 1);
709 EXPECT_TRUE(meshes[0]->getFaceCount() == 2 * 80);
710 EXPECT_TRUE(meshes[0]->getVertexCount() == 2 * 42);
712 mesh_file = locator.
locateResource(
"package://tesseract_support/meshes/box_2m.ply")->getFilePath();
713 meshes = createMeshFromPath<Mesh>(mesh_file, Eigen::Vector3d(1, 1, 1),
true,
true);
714 EXPECT_TRUE(meshes.size() == 1);
715 EXPECT_TRUE(meshes[0]->getFaceCount() == 12);
716 EXPECT_TRUE(meshes[0]->getVertexCount() == 8);
718 mesh_file = locator.
locateResource(
"package://tesseract_support/meshes/box_2m.ply")->getFilePath();
719 meshes = createMeshFromPath<Mesh>(mesh_file, Eigen::Vector3d(1, 1, 1),
true,
true);
720 EXPECT_TRUE(meshes.size() == 1);
721 EXPECT_TRUE(meshes[0]->getFaceCount() == 12);
722 EXPECT_TRUE(meshes[0]->getVertexCount() == 8);
724 mesh_file = locator.
locateResource(
"package://tesseract_support/meshes/box_2m.ply")->getFilePath();
725 std::vector<ConvexMesh::Ptr> convex_meshes =
726 createMeshFromPath<ConvexMesh>(mesh_file, Eigen::Vector3d(1, 1, 1),
false,
false);
727 EXPECT_TRUE(convex_meshes.size() == 1);
728 EXPECT_TRUE(convex_meshes[0]->getFaceCount() == 6);
729 EXPECT_TRUE(convex_meshes[0]->getVertexCount() == 8);
732 #ifdef TESSERACT_ASSIMP_USE_PBRMATERIAL
734 TEST(TesseractGeometryUnit, LoadMeshWithMaterialGltf2Unit)
739 std::string mesh_file =
740 locator.
locateResource(
"package://tesseract_support/meshes/tesseract_material_mesh.glb")->getFilePath();
741 std::vector<Mesh::Ptr> meshes =
742 createMeshFromPath<Mesh>(mesh_file, Eigen::Vector3d(1, 1, 1),
true,
true,
true,
true,
true);
743 ASSERT_TRUE(meshes.size() == 4);
745 auto& mesh0 = meshes[0];
746 auto& mesh1 = meshes[1];
747 auto& mesh2 = meshes[2];
748 auto& mesh3 = meshes[3];
750 EXPECT_EQ(mesh0->getFaceCount(), 34);
751 EXPECT_EQ(mesh0->getVertexCount(), 68);
752 EXPECT_EQ(mesh1->getFaceCount(), 15);
753 EXPECT_EQ(mesh1->getVertexCount(), 17);
754 EXPECT_EQ(mesh2->getFaceCount(), 15);
755 EXPECT_EQ(mesh2->getVertexCount(), 17);
756 EXPECT_EQ(mesh3->getFaceCount(), 2);
757 EXPECT_EQ(mesh3->getVertexCount(), 4);
759 auto mesh0_normals = mesh0->getNormals();
760 ASSERT_TRUE(mesh0_normals !=
nullptr);
761 EXPECT_EQ(mesh0_normals->size(), 68);
762 auto mesh1_normals = mesh1->getNormals();
763 ASSERT_TRUE(mesh1_normals !=
nullptr);
764 EXPECT_EQ(mesh1_normals->size(), 17);
765 auto mesh2_normals = mesh2->getNormals();
766 ASSERT_TRUE(mesh2_normals !=
nullptr);
767 EXPECT_EQ(mesh2_normals->size(), 17);
768 auto mesh3_normals = mesh3->getNormals();
769 ASSERT_TRUE(mesh3_normals !=
nullptr);
770 EXPECT_EQ(mesh3_normals->size(), 4);
772 auto mesh0_material = mesh0->getMaterial();
773 EXPECT_TRUE(mesh0_material->getBaseColorFactor().isApprox(Eigen::Vector4d(0.7, 0.7, 0.7, 1), 0.01));
774 EXPECT_NEAR(mesh0_material->getMetallicFactor(), 0.0, 0.01);
775 EXPECT_NEAR(mesh0_material->getRoughnessFactor(), 0.5, 0.01);
776 EXPECT_TRUE(mesh0_material->getEmissiveFactor().isApprox(Eigen::Vector4d(0, 0, 0, 1), 0.01));
778 auto mesh1_material = mesh1->getMaterial();
779 EXPECT_TRUE(mesh1_material->getBaseColorFactor().isApprox(Eigen::Vector4d(0.8, 0, 0, 1), 0.01));
780 EXPECT_NEAR(mesh1_material->getMetallicFactor(), 0.8, 0.01);
781 EXPECT_NEAR(mesh1_material->getRoughnessFactor(), 0.1, 0.01);
782 EXPECT_TRUE(mesh1_material->getEmissiveFactor().isApprox(Eigen::Vector4d(0, 0, 0, 1), 0.01));
784 auto mesh2_material = mesh2->getMaterial();
785 EXPECT_TRUE(mesh2_material->getBaseColorFactor().isApprox(Eigen::Vector4d(0.05, 0.8, 0.05, 1), 0.01));
786 EXPECT_NEAR(mesh2_material->getMetallicFactor(), 0.9, 0.01);
787 EXPECT_NEAR(mesh2_material->getRoughnessFactor(), 0.7, 0.01);
788 EXPECT_TRUE(mesh2_material->getEmissiveFactor().isApprox(Eigen::Vector4d(0.1, 0.1, 0.5, 1), 0.01));
790 auto mesh3_material = mesh3->getMaterial();
791 EXPECT_TRUE(mesh3_material->getBaseColorFactor().isApprox(Eigen::Vector4d(1, 1, 1, 1), 0.01));
792 EXPECT_NEAR(mesh3_material->getMetallicFactor(), 0, 0.01);
793 EXPECT_NEAR(mesh3_material->getRoughnessFactor(), 0.5, 0.01);
794 EXPECT_TRUE(mesh3_material->getEmissiveFactor().isApprox(Eigen::Vector4d(0, 0, 0, 1), 0.01));
796 EXPECT_TRUE(mesh0->getTextures() ==
nullptr);
797 EXPECT_TRUE(mesh1->getTextures() ==
nullptr);
798 EXPECT_TRUE(mesh2->getTextures() ==
nullptr);
800 ASSERT_TRUE(mesh3->getTextures() !=
nullptr);
801 ASSERT_EQ(mesh3->getTextures()->size(), 1);
803 auto texture = mesh3->getTextures()->at(0);
804 EXPECT_EQ(texture->getTextureImage()->getResourceContents().size(), 38212);
805 EXPECT_EQ(texture->getUVs()->size(), 4);
809 int main(
int argc,
char** argv)
811 testing::InitGoogleTest(&argc, argv);
813 return RUN_ALL_TESTS();