Permalink
Browse files

Cleaned up event handler and namespaces in prep for integrating keyst…

…one functionality into osgViewer
  • Loading branch information...
osg-training-guest committed May 7, 2013
1 parent 73193cc commit 6da297da8bd52ba877d90804b617b44ae0b2a90e
Showing with 106 additions and 98 deletions.
  1. +106 −98 examples/osgkeystone/osgkeystone.cpp
@@ -30,7 +30,10 @@
#include <osgViewer/ViewerEventHandlers>
-class Keystone : public osg::Referenced
+namespace osg
+{
+
+class Keystone : public osg::Object
{
public:
Keystone():
@@ -41,6 +44,16 @@ class Keystone : public osg::Referenced
top_left(-1.0,1.0),
top_right(1.0,1.0) {}
+ Keystone(const Keystone& rhs, const osg::CopyOp&):
+ keystoneEditingEnabled(rhs.keystoneEditingEnabled),
+ gridColour(rhs.gridColour),
+ bottom_left(rhs.bottom_left),
+ bottom_right(rhs.bottom_right),
+ top_left(rhs.top_left),
+ top_right(rhs.top_right) {}
+
+ META_Object(osg, Keystone)
+
void reset()
{
bottom_left.set(-1.0,-1.0);
@@ -89,15 +102,22 @@ class Keystone : public osg::Referenced
br = osg::Vec3(screenWidth*0.5*bottom_right.x(), screenHeight*0.5*bottom_right.y(), -screenDistance)*r_right*r_bottom;
bl = osg::Vec3(screenWidth*0.5*bottom_left.x(), screenHeight*0.5*bottom_left.y(), -screenDistance)*r_left*r_bottom;
}
+
+protected:
+
+ virtual ~Keystone() {}
+
+
};
+}
class KeystoneHandler : public osgGA::GUIEventHandler
{
public:
- KeystoneHandler(Keystone* keystone);
+ KeystoneHandler(osg::Keystone* keystone);
~KeystoneHandler() {}
@@ -127,30 +147,30 @@ class KeystoneHandler : public osgGA::GUIEventHandler
protected:
- osg::ref_ptr<Keystone> _keystone;
+ osg::ref_ptr<osg::Keystone> _keystone;
- osg::Vec2d _defaultIncrement;
- osg::Vec2d _ctrlIncrement;
- osg::Vec2d _shiftIncrement;
- osg::Vec2d _keyIncrement;
+ osg::Vec2d _defaultIncrement;
+ osg::Vec2d _ctrlIncrement;
+ osg::Vec2d _shiftIncrement;
+ osg::Vec2d _keyIncrement;
- osg::Vec2d _startPosition;
- osg::ref_ptr<Keystone> _startControlPoints;
+ osg::Vec2d _startPosition;
+ osg::ref_ptr<osg::Keystone> _startControlPoints;
- Region _selectedRegion;
- osg::ref_ptr<Keystone> _currentControlPoints;
+ Region _selectedRegion;
+ osg::ref_ptr<osg::Keystone> _currentControlPoints;
};
-KeystoneHandler::KeystoneHandler(Keystone* keystone):
+KeystoneHandler::KeystoneHandler(osg::Keystone* keystone):
_keystone(keystone),
_defaultIncrement(0.0,0.0),
_ctrlIncrement(1.0,1.0),
_shiftIncrement(0.1,0.1),
_keyIncrement(0.005, 0.005),
_selectedRegion(NONE_SELECTED)
{
- _startControlPoints = new Keystone;
+ _startControlPoints = new osg::Keystone;
_currentControlPoints = keystone; //new Keystone;
}
@@ -239,6 +259,15 @@ bool KeystoneHandler::handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionA
if (!viewport) return false;
+ if (ea.getEventType()==osgGA::GUIEventAdapter::KEYDOWN)
+ {
+ if (ea.getUnmodifiedKey()=='g' && (ea.getModKeyMask()==osgGA::GUIEventAdapter::MODKEY_LEFT_CTRL || ea.getModKeyMask()==osgGA::GUIEventAdapter::MODKEY_RIGHT_CTRL))
+ {
+ setKeystoneEditingEnabled(!getKeystoneEditingEnabled());
+ return true;
+ }
+ }
+
bool haveCameraMatch = false;
float x = ea.getXnormalized();
float y = ea.getYnormalized();
@@ -254,103 +283,82 @@ bool KeystoneHandler::handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionA
}
}
-
- if (!haveCameraMatch) return false;
+ if (!haveCameraMatch || !getKeystoneEditingEnabled()) return false;
switch(ea.getEventType())
{
case(osgGA::GUIEventAdapter::PUSH):
{
- if (getKeystoneEditingEnabled())
+ osg::Vec2d scale = incrementScale(ea);
+ if (scale.length2()!=0.0)
{
- osg::Vec2d scale = incrementScale(ea);
- if (scale.length2()!=0.0)
- {
- _selectedRegion = computeRegion(ea);
- (*_startControlPoints) = (*_currentControlPoints);
- _startPosition.set(x,y);
- }
- else
- {
- _selectedRegion = NONE_SELECTED;
- }
+ _selectedRegion = computeRegion(ea);
+ (*_startControlPoints) = (*_currentControlPoints);
+ _startPosition.set(x,y);
+ }
+ else
+ {
+ _selectedRegion = NONE_SELECTED;
}
return false;
}
case(osgGA::GUIEventAdapter::DRAG):
{
- if (getKeystoneEditingEnabled())
+ if (_selectedRegion!=NONE_SELECTED)
{
- if (_selectedRegion!=NONE_SELECTED)
- {
- (*_currentControlPoints) = (*_startControlPoints);
- osg::Vec2d currentPosition(x, y);
- osg::Vec2d delta(currentPosition-_startPosition);
- osg::Vec2d scale = incrementScale(ea);
- move(_selectedRegion, osg::Vec2d(delta.x()*scale.x(), delta.y()*scale.y()) );
- return true;
- }
+ (*_currentControlPoints) = (*_startControlPoints);
+ osg::Vec2d currentPosition(x, y);
+ osg::Vec2d delta(currentPosition-_startPosition);
+ osg::Vec2d scale = incrementScale(ea);
+ move(_selectedRegion, osg::Vec2d(delta.x()*scale.x(), delta.y()*scale.y()) );
+ return true;
}
return false;
}
case(osgGA::GUIEventAdapter::RELEASE):
{
- if (getKeystoneEditingEnabled())
- {
- _selectedRegion = NONE_SELECTED;
- }
+ _selectedRegion = NONE_SELECTED;
return false;
}
case(osgGA::GUIEventAdapter::KEYDOWN):
{
- if (getKeystoneEditingEnabled())
+ if (ea.getKey()=='r')
{
- if (ea.getUnmodifiedKey()=='g' && (ea.getModKeyMask()==osgGA::GUIEventAdapter::MODKEY_LEFT_CTRL || ea.getModKeyMask()==osgGA::GUIEventAdapter::MODKEY_RIGHT_CTRL))
- {
- setKeystoneEditingEnabled(false);
- }
- else if (ea.getKey()=='r')
- {
- _selectedRegion = NONE_SELECTED;
- _startControlPoints->reset();
- _currentControlPoints->reset();
- }
- else if (ea.getKey()==osgGA::GUIEventAdapter::KEY_Up)
- {
- move(computeRegion(ea), osg::Vec2d(0.0, _keyIncrement.y()*incrementScale(ea).y()) );
- }
- else if (ea.getKey()==osgGA::GUIEventAdapter::KEY_Down)
- {
- move(computeRegion(ea), osg::Vec2d(0.0, -_keyIncrement.y()*incrementScale(ea).y()) );
- }
- else if (ea.getKey()==osgGA::GUIEventAdapter::KEY_Left)
- {
- move(computeRegion(ea), osg::Vec2d(-_keyIncrement.x()*incrementScale(ea).x(), 0.0) );
- }
- else if (ea.getKey()==osgGA::GUIEventAdapter::KEY_Right)
- {
- move(computeRegion(ea), osg::Vec2d(_keyIncrement.x()*incrementScale(ea).x(), 0.0) );
- }
- else if (ea.getKey()==osgGA::GUIEventAdapter::KEY_KP_7 || ea.getKey()==osgGA::GUIEventAdapter::KEY_KP_Home)
- {
- _currentControlPoints->top_left.set(x, y);
- }
- else if (ea.getKey()==osgGA::GUIEventAdapter::KEY_KP_9 || ea.getKey()==osgGA::GUIEventAdapter::KEY_KP_Page_Up)
- {
- _currentControlPoints->top_right.set(x, y);
- }
- else if (ea.getKey()==osgGA::GUIEventAdapter::KEY_KP_3 || ea.getKey()==osgGA::GUIEventAdapter::KEY_KP_Page_Down)
- {
- _currentControlPoints->bottom_right.set(x, y);
- }
- else if (ea.getKey()==osgGA::GUIEventAdapter::KEY_KP_1 || ea.getKey()==osgGA::GUIEventAdapter::KEY_KP_End)
- {
- _currentControlPoints->bottom_left.set(x, y);
- }
+ _selectedRegion = NONE_SELECTED;
+ _startControlPoints->reset();
+ _currentControlPoints->reset();
+ }
+ else if (ea.getKey()==osgGA::GUIEventAdapter::KEY_Up)
+ {
+ move(computeRegion(ea), osg::Vec2d(0.0, _keyIncrement.y()*incrementScale(ea).y()) );
+ }
+ else if (ea.getKey()==osgGA::GUIEventAdapter::KEY_Down)
+ {
+ move(computeRegion(ea), osg::Vec2d(0.0, -_keyIncrement.y()*incrementScale(ea).y()) );
+ }
+ else if (ea.getKey()==osgGA::GUIEventAdapter::KEY_Left)
+ {
+ move(computeRegion(ea), osg::Vec2d(-_keyIncrement.x()*incrementScale(ea).x(), 0.0) );
+ }
+ else if (ea.getKey()==osgGA::GUIEventAdapter::KEY_Right)
+ {
+ move(computeRegion(ea), osg::Vec2d(_keyIncrement.x()*incrementScale(ea).x(), 0.0) );
+ }
+ else if (ea.getKey()==osgGA::GUIEventAdapter::KEY_KP_7 || ea.getKey()==osgGA::GUIEventAdapter::KEY_KP_Home)
+ {
+ _currentControlPoints->top_left.set(x, y);
+ }
+ else if (ea.getKey()==osgGA::GUIEventAdapter::KEY_KP_9 || ea.getKey()==osgGA::GUIEventAdapter::KEY_KP_Page_Up)
+ {
+ _currentControlPoints->top_right.set(x, y);
+ }
+ else if (ea.getKey()==osgGA::GUIEventAdapter::KEY_KP_3 || ea.getKey()==osgGA::GUIEventAdapter::KEY_KP_Page_Down)
+ {
+ _currentControlPoints->bottom_right.set(x, y);
}
- else if (ea.getUnmodifiedKey()=='g' && (ea.getModKeyMask()==osgGA::GUIEventAdapter::MODKEY_LEFT_CTRL || ea.getModKeyMask()==osgGA::GUIEventAdapter::MODKEY_RIGHT_CTRL))
+ else if (ea.getKey()==osgGA::GUIEventAdapter::KEY_KP_1 || ea.getKey()==osgGA::GUIEventAdapter::KEY_KP_End)
{
- setKeystoneEditingEnabled(true);
+ _currentControlPoints->bottom_left.set(x, y);
}
return false;
}
@@ -360,7 +368,7 @@ bool KeystoneHandler::handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionA
}
struct KeystoneCullCallback : public osg::Drawable::CullCallback
{
- KeystoneCullCallback(Keystone* keystone=0):_keystone(keystone) {}
+ KeystoneCullCallback(osg::Keystone* keystone=0):_keystone(keystone) {}
KeystoneCullCallback(const KeystoneCullCallback&, const osg::CopyOp&) {}
META_Object(osg,KeystoneCullCallback);
@@ -371,13 +379,13 @@ struct KeystoneCullCallback : public osg::Drawable::CullCallback
return _keystone.valid() ? !_keystone->keystoneEditingEnabled : true;
}
- osg::ref_ptr<Keystone> _keystone;
+ osg::ref_ptr<osg::Keystone> _keystone;
};
struct KeystoneUpdateCallback : public osg::Drawable::UpdateCallback
{
- KeystoneUpdateCallback(Keystone* keystone=0):_keystone(keystone) {}
+ KeystoneUpdateCallback(osg::Keystone* keystone=0):_keystone(keystone) {}
KeystoneUpdateCallback(const KeystoneUpdateCallback&, const osg::CopyOp&) {}
META_Object(osg,KeystoneUpdateCallback);
@@ -414,11 +422,11 @@ struct KeystoneUpdateCallback : public osg::Drawable::UpdateCallback
geometry->dirtyBound();
}
- osg::ref_ptr<Keystone> _keystone;
+ osg::ref_ptr<osg::Keystone> _keystone;
};
-osg::Geode* createKeystoneDistortionMesh(Keystone* keystone)
+osg::Geode* createKeystoneDistortionMesh(osg::Keystone* keystone)
{
osg::ref_ptr<osg::Geode> geode = new osg::Geode;
@@ -483,7 +491,7 @@ osg::Geode* createKeystoneDistortionMesh(Keystone* keystone)
return geode.release();
}
-osg::Node* createGrid(Keystone* keystone, const osg::Vec4& colour)
+osg::Node* createGrid(osg::Keystone* keystone, const osg::Vec4& colour)
{
osg::ref_ptr<osg::Geode> geode = new osg::Geode;
@@ -623,7 +631,7 @@ osg::Camera* assignKeystoneRenderToTextureCamera(osgViewer::View* view, osg::Gra
return camera.release();
}
-osg::Camera* assignKeystoneDistortionCamera(osgViewer::View* view, osg::DisplaySettings* ds, osg::GraphicsContext* gc, int x, int y, int width, int height, GLenum buffer, osg::Texture* texture, Keystone* keystone)
+osg::Camera* assignKeystoneDistortionCamera(osgViewer::View* view, osg::DisplaySettings* ds, osg::GraphicsContext* gc, int x, int y, int width, int height, GLenum buffer, osg::Texture* texture, osg::Keystone* keystone)
{
double screenDistance = ds->getScreenDistance();
double screenWidth = ds->getScreenWidth();
@@ -845,7 +853,7 @@ void setUpViewForStereo(osgViewer::View* view, osg::DisplaySettings* ds)
ds->setUseSceneViewForStereoHint(false);
- osg::ref_ptr<Keystone> keystone = new Keystone;
+ osg::ref_ptr<osg::Keystone> keystone = new osg::Keystone;
// set up view's main camera
@@ -1114,7 +1122,7 @@ void setUpViewForStereo(osgViewer::View* view, osg::DisplaySettings* ds)
left_keystone_camera->addEventCallback(new KeystoneHandler(keystone.get()));
- osg::ref_ptr<Keystone> right_keystone = new Keystone;
+ osg::ref_ptr<osg::Keystone> right_keystone = new osg::Keystone;
right_keystone->gridColour.set(0.0f,1.0f,0.0,1.0);
// create Keystone right distortion camera
@@ -1207,7 +1215,7 @@ void setUpViewForStereo(osgViewer::View* view, osg::DisplaySettings* ds)
left_keystone_camera->addEventCallback(new KeystoneHandler(keystone.get()));
- osg::ref_ptr<Keystone> right_keystone = new Keystone;
+ osg::ref_ptr<osg::Keystone> right_keystone = new osg::Keystone;
right_keystone->gridColour.set(0.0f,1.0f,0.0,1.0);
// create Keystone right distortion camera
@@ -1399,7 +1407,7 @@ void setUpViewForStereo(osgViewer::View* view, osg::DisplaySettings* ds)
}
-void setUpViewForKeystone(osgViewer::View* view, Keystone* keystone)
+void setUpViewForKeystone(osgViewer::View* view, osg::Keystone* keystone)
{
int screenNum = 0;
@@ -1501,7 +1509,7 @@ int main( int argc, char **argv )
}
else
{
- setUpViewForKeystone(&viewer, new Keystone);
+ setUpViewForKeystone(&viewer, new osg::Keystone);
}
viewer.realize();

0 comments on commit 6da297d

Please sign in to comment.