示例#1
0
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( ));
}
示例#2
0
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;
}
示例#3
0
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( )));
    }
}
示例#4
0
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;
}
示例#5
0
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" );
    }
}
示例#6
0
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( ));
}
示例#7
0
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;
}
示例#8
0
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( ));
    }
}
示例#9
0
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( ));
    }
}
示例#10
0
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( ));
}
示例#11
0
// 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( ));
}
示例#12
0
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 );
}
示例#13
0
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;
}
示例#14
0
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( ));
    }
}