Added Inventor plugin, submitted by Sean Spicer, Written by Vivek (c) Magic-Earth.
To compile in do a setenv/export USE_COIN or USE_INVENTOR.
This commit is contained in:
53
src/osgPlugins/Inventor/ShuttleCallback.cpp
Normal file
53
src/osgPlugins/Inventor/ShuttleCallback.cpp
Normal file
@@ -0,0 +1,53 @@
|
||||
#include <osg/MatrixTransform>
|
||||
|
||||
#include "ShuttleCallback.h"
|
||||
|
||||
ShuttleCallback::ShuttleCallback(const osg::Vec3& startPos,
|
||||
const osg::Vec3& endPos,
|
||||
float frequency)
|
||||
{
|
||||
_startPos = startPos;
|
||||
_endPos = endPos;
|
||||
_frequency = frequency;
|
||||
|
||||
_previousTraversalNumber = -1;
|
||||
_previousTime = -1.0;
|
||||
_angle = 0.0;
|
||||
}
|
||||
|
||||
void ShuttleCallback::operator() (osg::Node* node, osg::NodeVisitor* nv)
|
||||
{
|
||||
if (!nv)
|
||||
return;
|
||||
|
||||
osg::MatrixTransform* transform = dynamic_cast<osg::MatrixTransform*>(node);
|
||||
if (!transform)
|
||||
return;
|
||||
|
||||
const osg::FrameStamp* fs = nv->getFrameStamp();
|
||||
if (!fs)
|
||||
return;
|
||||
|
||||
// ensure that we do not operate on this node more than
|
||||
// once during this traversal. This is an issue since node
|
||||
// can be shared between multiple parents.
|
||||
if (nv->getTraversalNumber()!=_previousTraversalNumber)
|
||||
{
|
||||
double currentTime = fs->getReferenceTime();
|
||||
_angle += (currentTime - _previousTime) * 2 * M_PI * _frequency;
|
||||
|
||||
double frac = 0.5 + 0.5 * sin(_angle);
|
||||
|
||||
osg::Vec3 position = _startPos * (1.0 - frac) + _endPos * frac;
|
||||
|
||||
// update the specified transform
|
||||
transform->setMatrix(osg::Matrix::translate(position));
|
||||
|
||||
_previousTraversalNumber = nv->getTraversalNumber();
|
||||
_previousTime = currentTime;
|
||||
}
|
||||
|
||||
// must call any nested node callbacks and continue subgraph traversal.
|
||||
traverse(node,nv);
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user