From b459fb4a25aec1dc8284518eee64c3c1aec7185f Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Wed, 28 Apr 2010 18:52:58 +0000 Subject: [PATCH] Added support for passing in an options string to control the orientation of the generated graph --- src/osgPlugins/dot/BaseDotVisitor.cpp | 34 +++++++++++++++++++++++--- src/osgPlugins/dot/BaseDotVisitor.h | 7 ++++++ src/osgPlugins/dot/ReaderWriterDOT.cpp | 4 ++- 3 files changed, 41 insertions(+), 4 deletions(-) diff --git a/src/osgPlugins/dot/BaseDotVisitor.cpp b/src/osgPlugins/dot/BaseDotVisitor.cpp index 9b0c2236d..58b5cc67f 100644 --- a/src/osgPlugins/dot/BaseDotVisitor.cpp +++ b/src/osgPlugins/dot/BaseDotVisitor.cpp @@ -18,23 +18,51 @@ #include #include #include +#include using namespace osg; namespace osgDot { - BaseDotVisitor::BaseDotVisitor() { + BaseDotVisitor::BaseDotVisitor() + { + _rankdir = "rankdir = LR;"; } BaseDotVisitor::~BaseDotVisitor() { } - bool BaseDotVisitor::run( osg::Node& root, std::ostream* fout ) { + void BaseDotVisitor::setOptions(const osgDB::Options* options) + { + _options = const_cast(options); + OSG_INFO<<"BaseDotVisitor::setOptions("<getOptionString().empty())) + { + + std::string optionString = _options->getOptionString(); + + OSG_INFO<<" BaseDotVisitor::optionString ("< #include +#include + namespace osgDot { class BaseDotVisitor : public osg::NodeVisitor { @@ -37,6 +39,8 @@ namespace osgDot { virtual ~BaseDotVisitor(); + void setOptions(const osgDB::Options* options); + bool run( osg::Node& root, std::ostream* ostream ); virtual void apply(osg::Node& node); @@ -61,6 +65,9 @@ namespace osgDot { virtual void handle(osg::Geode& geode, osg::Drawable& drawable, int parentID, int childID); virtual void handle(osg::Drawable& drawable, osg::StateSet& stateset, int parentID, int childID ); + osg::ref_ptr _options; + + std::string _rankdir; std::stringstream _nodes; std::stringstream _edges; diff --git a/src/osgPlugins/dot/ReaderWriterDOT.cpp b/src/osgPlugins/dot/ReaderWriterDOT.cpp index 1382bfc84..675514b55 100644 --- a/src/osgPlugins/dot/ReaderWriterDOT.cpp +++ b/src/osgPlugins/dot/ReaderWriterDOT.cpp @@ -34,8 +34,10 @@ class ReaderWriterDOT : public osgDB::ReaderWriter { return WriteResult(WriteResult::ERROR_IN_WRITING_FILE); } - virtual WriteResult writeNode(const osg::Node& node,std::ostream& fout,const Options* options = NULL) const { + virtual WriteResult writeNode(const osg::Node& node,std::ostream& fout,const Options* options = NULL) const + { osgDot::SimpleDotVisitor sdv; + sdv.setOptions(options); sdv.run( *const_cast( &node ), &fout ); return WriteResult(WriteResult::FILE_SAVED); }