diff --git a/source/RobotAPI/components/ArViz/Coin/VisualizationObject.cpp b/source/RobotAPI/components/ArViz/Coin/VisualizationObject.cpp index 10a8bf4858baf5806efc51318a582e457e260e35..f2b0693bb01368a044e89ddb4633ec2b9b7d1862 100644 --- a/source/RobotAPI/components/ArViz/Coin/VisualizationObject.cpp +++ b/source/RobotAPI/components/ArViz/Coin/VisualizationObject.cpp @@ -11,6 +11,7 @@ #include <VirtualRobot/XML/RobotIO.h> #include <VirtualRobot/XML/ObjectIO.h> #include <VirtualRobot/Visualization/CoinVisualization/CoinVisualization.h> +#include <VirtualRobot/Import/MeshImport/AssimpReader.h> #include <SimoxUtility/algorithm/string/string_tools.h> @@ -79,18 +80,30 @@ namespace armarx::viz::coin { ARMARX_INFO << "Loading object from " << fullFilename; - if (simox::alg::ends_with(fullFilename, ".wrl")) + std::filesystem::path path{fullFilename}; + const std::string ext = simox::alg::to_lower(path.extension()); + + if (ext == ".wrl" || ext == ".iv") { VirtualRobot::VisualizationFactoryPtr factory = VirtualRobot::VisualizationFactory::fromName("inventor", NULL); VirtualRobot::VisualizationNodePtr vis = factory->getVisualizationFromFile(fullFilename); result = VirtualRobot::ManipulationObjectPtr(new VirtualRobot::ManipulationObject(filename, vis)); - } - else + else if (ext == ".xml") { result = VirtualRobot::ObjectIO::loadManipulationObject(fullFilename); } + else if (VirtualRobot::AssimpReader::can_load(fullFilename)) + { + const auto& tri = VirtualRobot::AssimpReader{}.readFileAsTriMesh(fullFilename); + result = VirtualRobot::ManipulationObjectPtr(new VirtualRobot::ManipulationObject(filename, tri)); + } + else + { + ARMARX_WARNING << "Could not load object from file: " << fullFilename + << "\nunknown extension '" << ext << "'"; + } } catch (std::exception const& ex) {