From aef36300cce56f2a506423a282281fc2674c788f Mon Sep 17 00:00:00 2001 From: vahrenkamp <vahrenkamp@042f3d55-54a8-47e9-b7fb-15903f145c44> Date: Thu, 11 Oct 2012 09:04:50 +0000 Subject: [PATCH] Convenient methods git-svn-id: http://svn.code.sf.net/p/simox/code/trunk@327 042f3d55-54a8-47e9-b7fb-15903f145c44 --- VirtualRobot/Compression/CompressionBZip2.cpp | 2 +- .../CoinVisualizationFactory.cpp | 24 +++++++++++++++++++ .../CoinVisualizationFactory.h | 5 ++++ .../Visualization/VisualizationFactory.h | 1 + .../Workspace/WorkspaceRepresentation.cpp | 1 + VirtualRobot/XML/ObjectIO.cpp | 22 +++++++++++------ VirtualRobot/XML/ObjectIO.h | 10 ++++++++ VirtualRobot/XML/SceneIO.h | 4 ++-- 8 files changed, 59 insertions(+), 10 deletions(-) diff --git a/VirtualRobot/Compression/CompressionBZip2.cpp b/VirtualRobot/Compression/CompressionBZip2.cpp index 1d2f36d3f..cbdbbd8a3 100644 --- a/VirtualRobot/Compression/CompressionBZip2.cpp +++ b/VirtualRobot/Compression/CompressionBZip2.cpp @@ -4020,4 +4020,4 @@ bool CompressionBZip2::write(std::ostream *file, const char *value, int num) return file->good(); } -} // namespace \ No newline at end of file +} // namespace diff --git a/VirtualRobot/Visualization/CoinVisualization/CoinVisualizationFactory.cpp b/VirtualRobot/Visualization/CoinVisualization/CoinVisualizationFactory.cpp index 56728c73a..1e4987391 100644 --- a/VirtualRobot/Visualization/CoinVisualization/CoinVisualizationFactory.cpp +++ b/VirtualRobot/Visualization/CoinVisualization/CoinVisualizationFactory.cpp @@ -100,6 +100,30 @@ VisualizationNodePtr CoinVisualizationFactory::getVisualizationFromFile(const st return visualizationNode; } +VisualizationNodePtr CoinVisualizationFactory::getVisualizationFromFile(const std::ifstream& ifs, bool boundingBox) +{ + VisualizationNodePtr visualizationNode(new VisualizationNode); + + // passing an empty string to SoInput and trying to open it aborts the program + if (!ifs) + { + std::cerr << "Filestream not valid" << std::endl; + return visualizationNode; + } + + // try to open the given file + std::ostringstream oss; + oss << ifs.rdbuf(); + + if(!ifs && !ifs.eof()) + { + std::cerr << "Error reading filestream " << std::endl; + return visualizationNode; + } + std::string contents(oss.str()); + return getVisualizationFromString(contents); +} + /** * This method creates a VirtualRobot::CoinVisualizationNode from a given \p modelString. * An instance of VirtualRobot::VisualizationNode is returned in case of an occured error. diff --git a/VirtualRobot/Visualization/CoinVisualization/CoinVisualizationFactory.h b/VirtualRobot/Visualization/CoinVisualization/CoinVisualizationFactory.h index 4e18d11e5..35b1a4f22 100644 --- a/VirtualRobot/Visualization/CoinVisualization/CoinVisualizationFactory.h +++ b/VirtualRobot/Visualization/CoinVisualization/CoinVisualizationFactory.h @@ -41,6 +41,7 @@ #include <boost/shared_ptr.hpp> #include <string> +#include <fstream> namespace VirtualRobot { @@ -58,6 +59,7 @@ public: virtual ~CoinVisualizationFactory(); virtual VisualizationNodePtr getVisualizationFromFile(const std::string& filename, bool boundingBox = false); + virtual VisualizationNodePtr getVisualizationFromFile(const std::ifstream& ifs, bool boundingBox = false); virtual VisualizationNodePtr getVisualizationFromString(const std::string& modelString, bool boundingBox = false); virtual VisualizationNodePtr createBox(float width, float height, float depth, float colorR, float colorG, float colorB); virtual VisualizationNodePtr createLine(const Eigen::Vector3f &from, const Eigen::Vector3f &to, float width = 1.0f, float colorR = 0.5f, float colorG = 0.5f, float colorB = 0.5f); @@ -238,6 +240,9 @@ private: static SubClassRegistry registry; }; +typedef boost::shared_ptr<CoinVisualizationFactory> CoinVisualizationFactoryPtr; + + } // namespace VirtualRobot #endif // _VirtualRobot_CoinVisualizationFactory_h_ diff --git a/VirtualRobot/Visualization/VisualizationFactory.h b/VirtualRobot/Visualization/VisualizationFactory.h index 3bed0e11c..452440be9 100644 --- a/VirtualRobot/Visualization/VisualizationFactory.h +++ b/VirtualRobot/Visualization/VisualizationFactory.h @@ -59,6 +59,7 @@ public: virtual ~VisualizationFactory() {;} virtual VisualizationNodePtr getVisualizationFromFile(const std::string& filename, bool boundingBox = false){return VisualizationNodePtr();} + virtual VisualizationNodePtr getVisualizationFromFile(const std::ifstream& ifs, bool boundingBox = false){return VisualizationNodePtr();}; virtual VisualizationNodePtr createBox(float length, float height, float width, float colorR, float colorG, float colorB){return VisualizationNodePtr();} virtual VisualizationNodePtr createLine(const Eigen::Vector3f &from, const Eigen::Vector3f &to, float width = 1.0f, float colorR = 0.5f, float colorG = 0.5f, float colorB = 0.5f){return VisualizationNodePtr();} virtual VisualizationNodePtr createLine(const Eigen::Matrix4f &from, const Eigen::Matrix4f &to, float width = 1.0f, float colorR = 0.5f, float colorG = 0.5f, float colorB = 0.5f){return VisualizationNodePtr();} diff --git a/VirtualRobot/Workspace/WorkspaceRepresentation.cpp b/VirtualRobot/Workspace/WorkspaceRepresentation.cpp index 3ec212abb..0b30d5a07 100644 --- a/VirtualRobot/Workspace/WorkspaceRepresentation.cpp +++ b/VirtualRobot/Workspace/WorkspaceRepresentation.cpp @@ -204,6 +204,7 @@ void WorkspaceRepresentation::load(const std::string &filename) // first check if the current version is used if (version[0] != versionMajor || version[1] != versionMinor) { + cout << "File version: " << version[0] << "." << version[1] << endl; // now check if an older version is used THROW_VR_EXCEPTION_IF( (version[0] > 2) || diff --git a/VirtualRobot/XML/ObjectIO.cpp b/VirtualRobot/XML/ObjectIO.cpp index 17e4f00af..e6755ded9 100644 --- a/VirtualRobot/XML/ObjectIO.cpp +++ b/VirtualRobot/XML/ObjectIO.cpp @@ -27,19 +27,27 @@ VirtualRobot::ManipulationObjectPtr ObjectIO::loadManipulationObject( const std: std::ifstream in(xmlFile.c_str()); THROW_VR_EXCEPTION_IF (!in.is_open(),"Could not open XML file:" << xmlFile); - - std::stringstream buffer; - buffer << in.rdbuf(); - std::string objectXML(buffer.str()); + boost::filesystem::path filenameBaseComplete(xmlFile); boost::filesystem::path filenameBasePath = filenameBaseComplete.branch_path(); std::string basePath = filenameBasePath.string(); + VirtualRobot::ManipulationObjectPtr res = loadManipulationObject(in,basePath); + THROW_VR_EXCEPTION_IF (!res,"Error while parsing file " << xmlFile); + res->setFilename(xmlFile); + return res; +} - in.close(); +VirtualRobot::ManipulationObjectPtr ObjectIO::loadManipulationObject( const std::ifstream &xmlFile, const std::string &basePath /*= ""*/ ) +{ + // load file + THROW_VR_EXCEPTION_IF (!xmlFile.is_open(),"Could not open XML file"); + + std::stringstream buffer; + buffer << xmlFile.rdbuf(); + std::string objectXML(buffer.str()); VirtualRobot::ManipulationObjectPtr res = createManipulationObjectFromString(objectXML, basePath); - THROW_VR_EXCEPTION_IF (!res,"Error while parsing file " << xmlFile); - res->setFilename(xmlFile); + THROW_VR_EXCEPTION_IF (!res,"Error while parsing file."); return res; } diff --git a/VirtualRobot/XML/ObjectIO.h b/VirtualRobot/XML/ObjectIO.h index e1d737983..d537f703b 100644 --- a/VirtualRobot/XML/ObjectIO.h +++ b/VirtualRobot/XML/ObjectIO.h @@ -27,6 +27,8 @@ #include "BaseIO.h" #include "../Scene.h" +#include <fstream> + // using forward declarations here, so that the rapidXML header does not have to be parsed when this file is included namespace rapidxml { @@ -48,6 +50,14 @@ public: @return Returns an empty pointer, when file access failed. */ static ManipulationObjectPtr loadManipulationObject(const std::string &xmlFile); + + /*! + Load ManipulationObject from a file stream. + @param xmlFile The file stream + @param basePath If file tags are given, the base path for searching the object files can be specified. + @return Returns an empty pointer, when file access failed. + */ + static ManipulationObjectPtr loadManipulationObject(const std::ifstream &xmlFile, const std::string &basePath = ""); /*! Save ManipulationObject to file. diff --git a/VirtualRobot/XML/SceneIO.h b/VirtualRobot/XML/SceneIO.h index 933ad8da9..d6a8f9d98 100644 --- a/VirtualRobot/XML/SceneIO.h +++ b/VirtualRobot/XML/SceneIO.h @@ -43,14 +43,14 @@ public: /*! Load scene from file. - \param xmlFile The file + \param xmlFile The file. \return Returns an empty pointer, when file access failed. */ static ScenePtr loadScene(const std::string &xmlFile); /*! Save a scene to file. - \param s The scen to be saved. + \param s The scene to be saved. \param xmlFile The absolute filename. \return true on success. */ -- GitLab