examples/eVolve/config.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include "config.h"
00019
00020 using namespace std;
00021
00022 namespace eVolve
00023 {
00024
00025 Config::Config( eq::base::RefPtr< eq::Server > parent )
00026 : eq::Config( parent )
00027 , _spinX( 5 )
00028 , _spinY( 5 )
00029 {
00030 }
00031
00032 Config::~Config()
00033 {
00034 }
00035
00036 bool Config::init()
00037 {
00038
00039 _frameData.data.ortho = _initData.getOrtho();
00040 registerObject( &_frameData );
00041 _initData.setFrameDataID( _frameData.getID( ));
00042
00043 registerObject( &_initData );
00044
00045
00046 if( !eq::Config::init( _initData.getID( )))
00047 return false;
00048
00049 return true;
00050 }
00051
00052 bool Config::exit()
00053 {
00054 const bool ret = eq::Config::exit();
00055
00056 _initData.setFrameDataID( EQ_ID_INVALID );
00057 deregisterObject( &_initData );
00058 deregisterObject( &_frameData );
00059
00060 return ret;
00061 }
00062
00063 uint32_t Config::startFrame()
00064 {
00065
00066 _frameData.data.rotation.pre_rotate_x( -0.001f * _spinX );
00067 _frameData.data.rotation.pre_rotate_y( -0.001f * _spinY );
00068 const uint32_t version = _frameData.commit();
00069
00070 return eq::Config::startFrame( version );
00071 }
00072
00073 bool Config::handleEvent( const eq::ConfigEvent* event )
00074 {
00075 switch( event->data.type )
00076 {
00077 case eq::Event::KEY_PRESS:
00078 switch( event->data.keyPress.key )
00079 {
00080 case 'r':
00081 case 'R':
00082 case ' ':
00083 _spinX = 0;
00084 _spinY = 0;
00085 _frameData.reset();
00086 return true;
00087
00088 case 'o':
00089 case 'O':
00090 _frameData.data.ortho = !_frameData.data.ortho;
00091 return true;
00092
00093 case 's':
00094 case 'S':
00095 _frameData.data.statistics = !_frameData.data.statistics;
00096 return true;
00097
00098 default:
00099 break;
00100 }
00101 break;
00102
00103 case eq::Event::POINTER_BUTTON_RELEASE:
00104 if( event->data.pointerButtonRelease.buttons == eq::PTR_BUTTON_NONE
00105 && event->data.pointerButtonRelease.button == eq::PTR_BUTTON1 )
00106 {
00107 _spinX = event->data.pointerButtonRelease.dx;
00108 _spinY = event->data.pointerButtonRelease.dy;
00109 }
00110 return true;
00111
00112 case eq::Event::POINTER_MOTION:
00113 if( event->data.pointerMotion.buttons == eq::PTR_BUTTON_NONE )
00114 return true;
00115
00116 if( event->data.pointerMotion.buttons == eq::PTR_BUTTON1 )
00117 {
00118 _spinX = 0;
00119 _spinY = 0;
00120
00121 _frameData.data.rotation.pre_rotate_x(
00122 -0.005f * event->data.pointerMotion.dx );
00123 _frameData.data.rotation.pre_rotate_y(
00124 -0.005f * event->data.pointerMotion.dy );
00125 }
00126 else if( event->data.pointerMotion.buttons == eq::PTR_BUTTON2 ||
00127 event->data.pointerMotion.buttons == ( eq::PTR_BUTTON1 |
00128 eq::PTR_BUTTON3 ))
00129 {
00130 _frameData.data.translation.z() +=
00131 .005f * event->data.pointerMotion.dy;
00132 }
00133 else if( event->data.pointerMotion.buttons == eq::PTR_BUTTON3 )
00134 {
00135 _frameData.data.translation.x() +=
00136 .0005f * event->data.pointerMotion.dx;
00137 _frameData.data.translation.y() -=
00138 .0005f * event->data.pointerMotion.dy;
00139 }
00140 return true;
00141
00142 default:
00143 break;
00144 }
00145 return eq::Config::handleEvent( event );
00146 }
00147 }