From Cory Riddell, "I added an _allowThrow bool and get / set accessors to

TrackballManipulator. The purpose of this is to disable throwing when
you release the mouse button while moving the mouse. The default
settings is true (ie, allow throw). The two source files are attached.
"
This commit is contained in:
Robert Osfield 2009-04-09 14:31:15 +00:00
parent fddaaf0d00
commit 4f72be65dc
2 changed files with 10 additions and 2 deletions

View File

@ -108,6 +108,12 @@ class OSGGA_EXPORT TrackballManipulator : public MatrixManipulator
/** Get the size of the trackball. */ /** Get the size of the trackball. */
float getTrackballSize() const { return _trackballSize; } float getTrackballSize() const { return _trackballSize; }
/** Set the 'allow throw' flag. Releasing the mouse button while moving the camera results in a throw. */
void setAllowThrow(bool allowThrow) { _allowThrow = allowThrow; }
/** Returns true if the camera can be thrown, false otherwise. This defaults to true. */
bool getAllowThrow() const { return _allowThrow; }
protected: protected:
virtual ~TrackballManipulator(); virtual ~TrackballManipulator();
@ -140,6 +146,7 @@ class OSGGA_EXPORT TrackballManipulator : public MatrixManipulator
double _modelScale; double _modelScale;
double _minimumZoomScale; double _minimumZoomScale;
bool _allowThrow;
bool _thrown; bool _thrown;
osg::Vec3d _center; osg::Vec3d _center;

View File

@ -10,6 +10,7 @@ TrackballManipulator::TrackballManipulator()
{ {
_modelScale = 0.01f; _modelScale = 0.01f;
_minimumZoomScale = 0.05f; _minimumZoomScale = 0.05f;
_allowThrow = true;
_thrown = false; _thrown = false;
_distance = 1.0f; _distance = 1.0f;
@ -80,7 +81,7 @@ bool TrackballManipulator::handle(const GUIEventAdapter& ea,GUIActionAdapter& us
switch(ea.getEventType()) switch(ea.getEventType())
{ {
case(GUIEventAdapter::FRAME): case(GUIEventAdapter::FRAME):
if (_thrown) if (_thrown && _allowThrow)
{ {
if (calcMovement()) us.requestRedraw(); if (calcMovement()) us.requestRedraw();
} }
@ -117,7 +118,7 @@ bool TrackballManipulator::handle(const GUIEventAdapter& ea,GUIActionAdapter& us
{ {
us.requestRedraw(); us.requestRedraw();
us.requestContinuousUpdate(true); us.requestContinuousUpdate(true);
_thrown = true; _thrown = _allowThrow;
} }
} }
else else