void Config::_switchLayout( int32_t increment ) { if( !_currentCanvas ) return; _frameData.setCurrentViewID( eq::UUID( )); int64_t index = _currentCanvas->getActiveLayoutIndex() + increment; const eq::Layouts& layouts = _currentCanvas->getLayouts(); LBASSERT( !layouts.empty( )); index = ( index % layouts.size( )); _currentCanvas->useLayout( uint32_t( index )); const eq::Layout* layout = layouts[index]; std::ostringstream stream; stream << "Layout "; if( layout ) { const std::string& name = layout->getName(); if( name.empty( )) stream << index; else stream << name; } else stream << "NONE"; stream << " active"; _setMessage( stream.str( )); }
bool Config::init() { if( !_animation.isValid( )) _animation.loadAnimation( _initData.getPathFilename( )); // init distributed objects if( !_initData.useColor( )) _frameData.setColorMode( COLOR_WHITE ); _frameData.setRenderMode( _initData.getRenderMode( )); registerObject( &_frameData ); _frameData.setAutoObsolete( getLatency( )); _initData.setFrameDataID( _frameData.getID( )); registerObject( &_initData ); // init config if( !eq::Config::init( _initData.getID( ))) { _deregisterData(); return false; } _loadModels(); _registerModels(); const eq::Canvases& canvases = getCanvases(); if( canvases.empty( )) _currentCanvas = 0; else _currentCanvas = canvases.front(); _setMessage( "Welcome to eqPly\nPress F1 for help" ); return true; }
void Config::_switchModel() { if( _modelDist.empty( )) // no models return; // current model of current view View* view = _getCurrentView(); const eq::uint128_t& currentID = view ? view->getModelID() : _frameData.getModelID(); // next model ModelDistsCIter i; for( i = _modelDist.begin(); i != _modelDist.end(); ++i ) { if( (*i)->getID() != currentID ) continue; ++i; break; } if( i == _modelDist.end( )) i = _modelDist.begin(); // wrap around // set identifier on view or frame data (default model) const eq::uint128_t& modelID = (*i)->getID(); if( view ) view->setModelID( modelID ); else _frameData.setModelID( modelID ); if( view ) { const Model* model = getModel( modelID ); _setMessage( "Using " + lunchbox::getFilename( model->getName( ))); } }
bool Config::init() { // init distributed objects LBCHECK(registerObject(&_frameData)); _frameData.setOrtho(_initData.getOrtho()); _initData.setFrameDataID(_frameData.getID()); _frameData.setAutoObsolete(getLatency()); LBCHECK(registerObject(&_initData)); // init config if (!eq::Config::init(_initData.getID())) { _deregisterData(); return false; } const eq::Canvases& canvases = getCanvases(); if (canvases.empty()) _currentCanvas = 0; else _currentCanvas = canvases.front(); _setMessage("Welcome to eVolve\nPress F1 for help"); return true; }
void Config::_switchViewMode() { View* view = _getCurrentView(); if( !view ) return; const eq::View::Mode mode = view->getMode(); if( mode == eq::View::MODE_MONO ) { view->changeMode( eq::View::MODE_STEREO ); _setMessage( "Switched to stereoscopic rendering" ); } else { view->changeMode( eq::View::MODE_MONO ); _setMessage( "Switched to monoscopic rendering" ); } }
void Config::_setFocusMode( const eq::FocusMode mode ) { const eq::Observers& observers = getObservers(); for( eq::ObserversCIter i = observers.begin(); i != observers.end(); ++i ) (*i)->setFocusMode( mode ); std::ostringstream stream; stream << "Set focus mode to " << mode; _setMessage( stream.str( )); }
bool Config::init() { if( !_animation.isValid( )) _animation.loadAnimation( _initData.getPathFilename( )); // init distributed objects if( !_initData.useColor( )) _frameData.setColorMode( COLOR_WHITE ); _frameData.setRenderMode( _initData.getRenderMode( )); registerObject( &_frameData ); _frameData.setAutoObsolete( getLatency( )); _initData.setFrameDataID( _frameData.getID( )); registerObject( &_initData ); // init config if( !eq::Config::init( _initData.getID( ))) { _deregisterData(); return false; } _loadModels(); _registerModels(); // init tracker if( !_initData.getTrackerPort().empty( )) { if( !_tracker.init( _initData.getTrackerPort() )) LBWARN << "Failed to initialize tracker" << std::endl; else { // Set up position of tracking system wrt world space // Note: this depends on the physical installation. eq::Matrix4f m( eq::Matrix4f::IDENTITY ); m.scale( 1.f, 1.f, -1.f ); _tracker.setWorldToEmitter( m ); m = eq::Matrix4f::IDENTITY; m.rotate_z( -M_PI_2 ); _tracker.setSensorToObject( m ); LBINFO << "Tracker initialized" << std::endl; } } const eq::Canvases& canvases = getCanvases(); if( canvases.empty( )) _currentCanvas = 0; else _currentCanvas = canvases.front(); _setMessage( "Welcome to eqPly\nPress F1 for help" ); return true; }
void Config::_changeFocusDistance( const float delta ) { const eq::Observers& observers = getObservers(); for( eq::ObserversCIter i = observers.begin(); i != observers.end(); ++i ) { eq::Observer* observer = *i; observer->setFocusDistance( observer->getFocusDistance() + delta ); std::ostringstream stream; stream << "Set focus distance to " << observer->getFocusDistance(); _setMessage( stream.str( )); } }
void Config::_adjustEyeBase( const float delta ) { const eq::Observers& observers = getObservers(); for( eq::ObserversCIter i = observers.begin(); i != observers.end(); ++i ) { eq::Observer* observer = *i; observer->setEyeBase( observer->getEyeBase() + delta ); std::ostringstream stream; stream << "Set eye base to " << observer->getEyeBase(); _setMessage( stream.str( )); } }
void Config::_adjustModelScale( const float factor ) { View* view = _getCurrentView(); if( !view ) return; const float current = view->getModelUnit() * factor; if( current > std::numeric_limits<float>::epsilon( )) view->setModelUnit( current ); std::ostringstream stream; stream << "Set model unit to " << view->getModelUnit(); _setMessage( stream.str( )); }
// Note: real applications would use one tracking device per observer void Config::_setHeadMatrix( const eq::Matrix4f& matrix ) { const eq::Observers& observers = getObservers(); for( eq::ObserversCIter i = observers.begin(); i != observers.end(); ++i ) { (*i)->setHeadMatrix( matrix ); } eq::Vector3f trans; matrix.get_translation( trans ); std::ostringstream stream; stream << "Observer at " << trans; _setMessage( stream.str( )); }
void Config::_adjustResistance( const int delta ) { View* view = _getCurrentView(); if( !view ) return; eq::Vector2i size = view->getEqualizer().getResistance2i(); size += delta; size.x() = LB_MAX( size.x(), 0 ); size.y() = LB_MAX( size.y(), 0 ); std::ostringstream stream; stream << "Set load equalizer resistance to " << size; _setMessage( stream.str( )); view->getEqualizer().setResistance( size ); }
eq::admin::ServerPtr Config::_getAdminServer() { // Debug: _closeAdminServer(); if( _admin.isValid() && _admin->isConnected( )) return _admin; eq::admin::init( 0, 0 ); eq::admin::ClientPtr client = new eq::admin::Client; if( !client->initLocal( 0, 0 )) { _setMessage( "Can't init admin client" ); eq::admin::exit(); } _admin = new eq::admin::Server; if( !client->connectServer( _admin )) { _setMessage( "Can't open connection to administrate server" ); client->exitLocal(); _admin = 0; eq::admin::exit(); } return _admin; }
void Config::_adjustEyeBase( const float delta ) { const eq::Observers& observers = getObservers(); for( eq::ObserversCIter i = observers.begin(); i != observers.end(); ++i ) { eq::Observer* observer = *i; observer->setEyePosition( eq::EYE_LEFT, observer->getEyePosition( eq::EYE_LEFT ) + eq::Vector3f( -delta, 0.f, 0.f )); observer->setEyePosition( eq::EYE_RIGHT, observer->getEyePosition( eq::EYE_RIGHT ) + eq::Vector3f( delta, 0.f, 0.f )); std::ostringstream stream; stream << "Set eyes to " << observer->getEyePosition( eq::EYE_LEFT ) << ", " << observer->getEyePosition( eq::EYE_RIGHT ); _setMessage( stream.str( )); } }