OpenSceneGraph/include/osgManipulator/CommandManager
Robert Osfield 2525bb5d06 Completed refactor of osgManipulator, key changes are:
Selection is now just a typedef of osg::MatrixTransform, and is deprecated

   CommandManager is shell class that just sets values directly on Dragger, and is deprecated

   Dragger now has list of DraggerCallback that takes over the roll of tracking changes to the Dragger, and
   allows users to track the dragger in any way they wish.

   Dragger now has a convinience method making MatrixTransforms track a dragger.

   Selection and CommandManager are no longer required for use of osgManipulator and are kept around for backwards compatibility.
2009-07-01 14:01:09 +00:00

84 lines
2.6 KiB
C++

/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2006 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.
*/
//osgManipulator - Copyright (C) 2007 Fugro-Jason B.V.
#ifndef OSGMANIPULATOR_COMMANDMANAGER
#define OSGMANIPULATOR_COMMANDMANAGER 1
#include <osgManipulator/Dragger>
#include <osgManipulator/Selection>
#include <osgManipulator/Constraint>
namespace osgManipulator {
/**
* Deprecated.
* CommandManager class is now no longer required as Dragger now matains all references to Constraints and Selections (now just generic MatrixTransforms).
* To replace CommandManager usage simple replace cmdMgr->connect(*dragger, *selection) with dragger->addTransformUpdating(selection) and
* cmdMgr->connect(*dragger, *selection) with dragger->addConstaint(constraint).
*/
class CommandManager : public osg::Referenced
{
public:
CommandManager();
bool connect(Dragger& dragger, Selection& selection)
{
dragger.addTransformUpdating(&selection);
return true;
}
bool connect(Dragger& dragger, Constraint& constraint)
{
dragger.addConstraint(&constraint);
return true;
}
bool disconnect(Dragger& dragger)
{
dragger.getConstraints().clear();
dragger.getDraggerCallbacks().clear();
return true;
}
typedef std::list< osg::ref_ptr<Selection> > Selections;
Selections getConnectedSelections(Dragger& dragger)
{
Selections selections;
for(Dragger::DraggerCallbacks::iterator itr = dragger.getDraggerCallbacks().begin();
itr != dragger.getDraggerCallbacks().end();
++itr)
{
DraggerCallback* dc = itr->get();
DraggerTransformCallback* dtc = dynamic_cast<DraggerTransformCallback*>(dc);
if (dtc && dtc->getTransform()) selections.push_back(dtc->getTransform());
}
return selections;
}
protected:
virtual ~CommandManager();
};
}
#endif