From f2f6e6bb45530fbaf88aeee3f8952d420b846b1f Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Mon, 24 Oct 2005 10:51:50 +0000 Subject: [PATCH] Added beginnings of Programming Guide, and NodeTrackerCallback. --- VisualStudio/osg/osg.dsp | 8 ++ doc/ProgrammingGuide/ProgrammingGuide.odt | Bin 0 -> 22014 bytes include/osg/NodeTrackerCallback | 56 +++++++++ src/osg/GNUmakefile | 1 + src/osg/NodeTrackerCallback.cpp | 135 ++++++++++++++++++++++ 5 files changed, 200 insertions(+) create mode 100644 doc/ProgrammingGuide/ProgrammingGuide.odt create mode 100644 include/osg/NodeTrackerCallback create mode 100644 src/osg/NodeTrackerCallback.cpp diff --git a/VisualStudio/osg/osg.dsp b/VisualStudio/osg/osg.dsp index 8827cd670..95c186f3a 100755 --- a/VisualStudio/osg/osg.dsp +++ b/VisualStudio/osg/osg.dsp @@ -348,6 +348,10 @@ SOURCE=..\..\src\osg\NodeCallback.cpp # End Source File # Begin Source File +SOURCE=..\..\src\osg\NodeTrackerCallback.cpp +# End Source File +# Begin Source File + SOURCE=..\..\src\osg\NodeVisitor.cpp # End Source File # Begin Source File @@ -832,6 +836,10 @@ SOURCE=..\..\include\osg\NodeCallback # End Source File # Begin Source File +SOURCE=..\..\include\osg\NodeTrackerCallback +# End Source File +# Begin Source File + SOURCE=..\..\Include\Osg\NodeVisitor # End Source File # Begin Source File diff --git a/doc/ProgrammingGuide/ProgrammingGuide.odt b/doc/ProgrammingGuide/ProgrammingGuide.odt new file mode 100644 index 0000000000000000000000000000000000000000..4b09b9148a013445ca0f21ebdebbf6deb5713dee GIT binary patch literal 22014 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 literal 0 HcmV?d00001 diff --git a/include/osg/NodeTrackerCallback b/include/osg/NodeTrackerCallback new file mode 100644 index 000000000..389db15b1 --- /dev/null +++ b/include/osg/NodeTrackerCallback @@ -0,0 +1,56 @@ +/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2005 Robert Osfield + * + * This library is open source and may be redistributed and/or modified under + * the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or + * (at your option) any later version. The full license is in LICENSE file + * included with this distribution, and on the openscenegraph.org website. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * OpenSceneGraph Public License for more details. +*/ + +#ifndef OSG_NODETRACKERCALLBACK +#define OSG_NODETRACKERCALLBACK 1 + +#include +#include +#include + +namespace osg +{ + +class OSG_EXPORT NodeTrackerCallback : public NodeCallback +{ + public: + + + void setTrackNodePath(const osg::RefNodePath& nodePath) { _trackNodePath = nodePath; } + void setTrackNodePath(const osg::NodePath& nodePath) { _trackNodePath = nodePath; } + + osg::RefNodePath& getTrackNodePath() { return _trackNodePath; } + const osg::RefNodePath& getTrackNodePath() const { return _trackNodePath; } + + void setTrackNode(osg::Node* node); + osg::Node* getTrackNode() { return _trackNodePath.empty() ? 0 : _trackNodePath.back().get(); } + const osg::Node* getTrackNode() const { return _trackNodePath.empty() ? 0 : _trackNodePath.back().get(); } + + + /** Implements the callback. */ + virtual void operator()(Node* node, NodeVisitor* nv); + + /** update the node to track the nodepath.*/ + void update(osg::Node& node); + + inline bool validateNodePath() const; + + protected: + + osg::RefNodePath _trackNodePath; + +}; + +} + +#endif diff --git a/src/osg/GNUmakefile b/src/osg/GNUmakefile index 1b9f381ea..f145e0177 100644 --- a/src/osg/GNUmakefile +++ b/src/osg/GNUmakefile @@ -64,6 +64,7 @@ CXXFILES =\ MatrixTransform.cpp\ Multisample.cpp\ NodeCallback.cpp\ + NodeTrackerCallback.cpp\ Node.cpp\ NodeVisitor.cpp\ Notify.cpp\ diff --git a/src/osg/NodeTrackerCallback.cpp b/src/osg/NodeTrackerCallback.cpp new file mode 100644 index 000000000..3850c8138 --- /dev/null +++ b/src/osg/NodeTrackerCallback.cpp @@ -0,0 +1,135 @@ +/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2005 Robert Osfield + * + * This library is open source and may be redistributed and/or modified under + * the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or + * (at your option) any later version. The full license is in LICENSE file + * included with this distribution, and on the openscenegraph.org website. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * OpenSceneGraph Public License for more details. +*/ + +#include +#include +#include +#include +#include +#include +#include + +using namespace osg; + +class CollectParentPaths : public osg::NodeVisitor +{ +public: + CollectParentPaths() : + osg::NodeVisitor(osg::NodeVisitor::TRAVERSE_PARENTS) {} + + virtual void apply(osg::Node& node) + { + if (node.getNumParents()==0) + { + _nodePaths.push_back(getNodePath()); + } + traverse(node); + } + + osg::NodePath _nodePath; + typedef std::vector< osg::NodePath > NodePathList; + NodePathList _nodePaths; +}; + +class ApplyMatrixVisitor : public NodeVisitor +{ + public: + + ApplyMatrixVisitor(const osg::Matrix& matrix): + _matrix(matrix) {} + + virtual void apply(CameraNode& camera) + { + camera.setViewMatrix(_matrix); + } + + virtual void apply(CameraView& cv) + { + Quat rotation; + _matrix.get(rotation); + + cv.setPosition(_matrix.getTrans()); + cv.setAttitude(rotation); + } + + virtual void apply(MatrixTransform& mt) + { + mt.setMatrix(_matrix); + } + + virtual void apply(PositionAttitudeTransform& pat) + { + Quat rotation; + _matrix.get(rotation); + + pat.setPosition(_matrix.getTrans()); + pat.setAttitude(rotation); + } + + osg::Matrix _matrix; +}; + + +void NodeTrackerCallback::setTrackNode(osg::Node* node) +{ + if (!node) + { + osg::notify(osg::NOTICE)<<"NodeTrackerCallback::setTrackNode(Node*): Unable to set tracked node due to null Node*"<accept(cpp); + + if (!cpp._nodePaths.empty()) + { + osg::notify(osg::INFO)<<"NodeTrackerCallback::setTrackNode(Node*): Path set"<getVisitorType()==NodeVisitor::UPDATE_VISITOR) + { + update(*node); + } + + traverse(node,nv); +} + +void NodeTrackerCallback::update(osg::Node& node) +{ + ApplyMatrixVisitor applyMatrix(computeWorldToLocal(_trackNodePath)); + node.accept(applyMatrix); +} + +bool NodeTrackerCallback::validateNodePath() const +{ + if (!_trackNodePath.valid()) + { + if (_trackNodePath.empty()) + { + osg::notify(osg::NOTICE)<<"Warning: tracked node path has been invalidated by changes in the scene graph."<(this); + non_const_this->_trackNodePath.clear(); + } + return false; + } + return true; +} +