Esempio n. 1
0
void VspCurve::GetBoundingBox( BndBox &bb ) const
{
	curve_bounding_box_type bbx;
    vec3d v3min, v3max;

    m_Curve.get_bounding_box( bbx );
    v3min.set_xyz( bbx.get_min().x(), bbx.get_min().y(), bbx.get_min().z() );
    v3max.set_xyz( bbx.get_max().x(), bbx.get_max().y(), bbx.get_max().z() );
    bb.Reset();
    bb.Update( v3min );
    bb.Update( v3max );
}
Esempio n. 2
0
void SVGOptionsScreen::GetScale( int write_set )
{
    bool foundgeom = false;

    Vehicle *veh = VehicleMgr.GetVehicle();

    vector< Geom* > geom_vec = veh->FindGeomVec( veh->GetGeomVec( false ) );
    BndBox svgbox;
    for ( int i = 0 ; i < ( int )geom_vec.size() ; i++ )
    {
        if ( geom_vec[i]->GetSetFlag( write_set ) )
        {
            svgbox.Update( geom_vec[i]->GetBndBox() );
            foundgeom = true;
        }
    }

    if ( !foundgeom )
    {
        veh->m_Scale.Set( 0 ); // Set to 0 if no geoms are in the set
        return;
    }

    double length = svgbox.DiagDist();
    double convert_scale;

    if ( length >= 1.0 )
    {
        convert_scale = floor2scale( length, pow( 10.0, mag( length ) ) );
    }
    else
    {
        convert_scale = floor2scale( length, pow( 10.0, mag( length ) - 1 ) );
    }

    veh->m_Scale.Set( convert_scale );
}
Esempio n. 3
0
void MainVSPScreen::ActionCB( void * data )
{
    if ( !m_GlWin || !m_FLTK_Window || !m_ScreenMgr )
        return;

    if ( data == &m_NewMenuItem )
    {
        VehicleMgr.GetVehicle()->Renew();

        SetFileLabel( VehicleMgr.GetVehicle()->GetVSP3FileName() );
        m_GlWin->getGraphicEngine()->getDisplay()->setCOR( 0.0, 0.0, 0.0 );
    }
    else if ( data == &m_OpenMenuItem )
    {
        string openfile = m_ScreenMgr->GetSelectFileScreen()->FileChooser( "Open VSP File", "*.vsp3" );
        if ( openfile.compare( "" ) != 0 )
        {
            VehicleMgr.GetVehicle()->Renew();
            VehicleMgr.GetVehicle()->SetVSP3FileName( openfile );
            VehicleMgr.GetVehicle()->ReadXMLFile( openfile );

            SetFileLabel( openfile );

            BndBox bbox = VehicleMgr.GetVehicle()->GetBndBox();
            vec3d p = bbox.GetCenter();
            m_GlWin->getGraphicEngine()->getDisplay()->setCOR( (float)-p.x(), (float)-p.y(), (float)-p.z() );
        }
    }
    else if ( data == &m_SaveMenuItem )
    {
        string savefile = VehicleMgr.GetVehicle()->GetVSP3FileName();

        if ( savefile.compare( "Unnamed.vsp3" ) == 0 )
        {
            savefile = m_ScreenMgr->GetSelectFileScreen()->FileChooser( "Save VSP File", "*.vsp3" );
        }

        if ( savefile.compare( "" ) != 0 )
        {
            VehicleMgr.GetVehicle()->SetVSP3FileName( savefile );
            VehicleMgr.GetVehicle()->WriteXMLFile( savefile, vsp::SET_ALL );

            SetFileLabel( savefile );
        }
    }
    else if ( data == &m_SaveAsMenuItem )
    {
        string savefile = m_ScreenMgr->GetSelectFileScreen()->FileChooser( "Save VSP File As", "*.vsp3" );
        if ( savefile.compare( "" ) != 0 )
        {
            VehicleMgr.GetVehicle()->SetVSP3FileName( savefile );
            VehicleMgr.GetVehicle()->WriteXMLFile( savefile, vsp::SET_ALL );

            SetFileLabel( savefile );
        }
    }
    else if ( data == &m_SaveSetMenuItem )
    {
        int set = m_ScreenMgr->GetPickSetScreen()->PickSet( "Pick Save Set" );

        if( set >= 0 )
        {
            string savefile = m_ScreenMgr->GetSelectFileScreen()->FileChooser( "Save VSP Set File As", "*.vsp3" );
            if ( savefile.compare( "" ) != 0 )
            {
                VehicleMgr.GetVehicle()->WriteXMLFile( savefile, set );
            }
        }
    }
    else if ( data == &m_InsertMenuItem )
    {
        string openfile = m_ScreenMgr->GetSelectFileScreen()->FileChooser( "Insert VSP File", "*.vsp3" );
        if ( openfile.compare( "" ) != 0 )
        {
            VehicleMgr.GetVehicle()->ReadXMLFileGeomsOnly( openfile );
        }
    }
    // else if ( data == &m_SetTempDirMenuItem )
    // {
    // }
    else if ( data == &m_RunScriptMenuItem )
    {
        string scriptfile = m_ScreenMgr->GetSelectFileScreen()->FileChooser( "Script File To Run", "*.vspscript" );
        if ( scriptfile.compare( "" ) != 0 )
        {
            VehicleMgr.GetVehicle()->RunScript( scriptfile );
        }
    }
    else if ( data == &m_ExitMenuItem )
    {
        ExitVSP();
    }
    else if ( data == &m_UndoMenuItem )
    {
        VehicleMgr.GetVehicle()->UnDo();
    }
    else if ( data == &m_CutMenuItem )
    {
        VehicleMgr.GetVehicle()->CutActiveGeomVec();
    }
    else if ( data == &m_CopyMenuItem )
    {
        VehicleMgr.GetVehicle()->CopyActiveGeomVec();
    }
    else if ( data == &m_PasteMenuItem )
    {
        VehicleMgr.GetVehicle()->PasteClipboard();
    }
    else if ( data == &m_DeleteMenuItem )
    {
        VehicleMgr.GetVehicle()->DeleteActiveGeomVec();
    }
    else if ( data == &m_SelAllMenuItem )
    {
        VehicleMgr.GetVehicle()->SetActiveGeomVec( VehicleMgr.GetVehicle()->GetGeomVec() );
    }
    else if ( data == &m_PickMenuItem )
    {
        ManageGeomScreen * geomScreen = NULL;
        geomScreen = dynamic_cast<ManageGeomScreen *>
        ( m_ScreenMgr->GetScreen( ScreenMgr::VSP_MANAGE_GEOM_SCREEN ) );
        if( geomScreen )
        {
            geomScreen->TriggerPickSwitch();
        }
    }
    else if ( data == &m_OneMenuItem )
    {
        m_GlWin->setWindowLayout( 1, 1 );
    }
    else if ( data == &m_FourMenuItem )
    {
        m_GlWin->setWindowLayout( 2, 2 );
    }
    else if ( data == &m_TwoHMenuItem )
    {
        m_GlWin->setWindowLayout( 1, 2 );
    }
    else if ( data == &m_TwoVMenuItem )
    {
        m_GlWin->setWindowLayout( 2, 1 );
    }
    else if ( data == &m_AxisMenuItem )
    {
        m_ShowXYZArrow = !m_ShowXYZArrow;
        m_GlWin->getGraphicEngine()->getDisplay()->getLayoutMgr()->getViewport()->showXYZArrows( m_ShowXYZArrow );
    }
    else if ( data == &m_TopMenuItem )
    {
        m_GlWin->setView( VSPGraphic::Common::VSP_CAM_TOP );
        ManageViewScreen * viewScreen = NULL;
        viewScreen = dynamic_cast< ManageViewScreen* >
        ( m_ScreenMgr->GetScreen( ScreenMgr::VSP_VIEW_SCREEN ) );

        if( viewScreen )
        {
            if ( viewScreen->IsShown() )
            {
                viewScreen->UpdateCOR();
                viewScreen->UpdatePan();
                viewScreen->UpdateRotations();
            }
        }
    }
    else if ( data == &m_FrontMenuItem )
    {
        m_GlWin->setView( VSPGraphic::Common::VSP_CAM_FRONT );
        ManageViewScreen * viewScreen = NULL;
        viewScreen = dynamic_cast< ManageViewScreen* >
        ( m_ScreenMgr->GetScreen( ScreenMgr::VSP_VIEW_SCREEN ) );

        if( viewScreen )
        {
            if ( viewScreen->IsShown() )
            {
                viewScreen->UpdateCOR();
                viewScreen->UpdatePan();
                viewScreen->UpdateRotations();
            }
        }
    }
    else if ( data == &m_LeftSideMenuItem )
    {
        m_GlWin->setView( VSPGraphic::Common::VSP_CAM_LEFT );
        ManageViewScreen * viewScreen = NULL;
        viewScreen = dynamic_cast< ManageViewScreen* >
        ( m_ScreenMgr->GetScreen( ScreenMgr::VSP_VIEW_SCREEN ) );

        if( viewScreen )
        {
            if ( viewScreen->IsShown() )
            {
                viewScreen->UpdateCOR();
                viewScreen->UpdatePan();
                viewScreen->UpdateRotations();
            }
        }
    }
    else if ( data == &m_LeftIsoMenuItem )
    {
        m_GlWin->setView( VSPGraphic::Common::VSP_CAM_LEFT_ISO );
        ManageViewScreen * viewScreen = NULL;
        viewScreen = dynamic_cast< ManageViewScreen* >
        ( m_ScreenMgr->GetScreen( ScreenMgr::VSP_VIEW_SCREEN ) );

        if( viewScreen )
        {
            if ( viewScreen->IsShown() )
            {
                viewScreen->UpdateCOR();
                viewScreen->UpdatePan();
                viewScreen->UpdateRotations();
            }
        }
    }
    else if ( data == &m_BottomMenuItem )
    {
        m_GlWin->setView( VSPGraphic::Common::VSP_CAM_BOTTOM );
        ManageViewScreen * viewScreen = NULL;
        viewScreen = dynamic_cast< ManageViewScreen* >
        ( m_ScreenMgr->GetScreen( ScreenMgr::VSP_VIEW_SCREEN ) );

        if( viewScreen )
        {
            if ( viewScreen->IsShown() )
            {
                viewScreen->UpdateCOR();
                viewScreen->UpdatePan();
                viewScreen->UpdateRotations();
            }
        }
    }
    else if ( data == &m_RearMenuItem )
    {
        m_GlWin->setView( VSPGraphic::Common::VSP_CAM_REAR );
        ManageViewScreen * viewScreen = NULL;
        viewScreen = dynamic_cast< ManageViewScreen* >
        ( m_ScreenMgr->GetScreen( ScreenMgr::VSP_VIEW_SCREEN ) );

        if( viewScreen )
        {
            if ( viewScreen->IsShown() )
            {
                viewScreen->UpdateCOR();
                viewScreen->UpdatePan();
                viewScreen->UpdateRotations();
            }
        }
    }
    else if ( data == &m_RightSideMenuItem )
    {
        m_GlWin->setView( VSPGraphic::Common::VSP_CAM_RIGHT );
        ManageViewScreen * viewScreen = NULL;
        viewScreen = dynamic_cast< ManageViewScreen* >
        ( m_ScreenMgr->GetScreen( ScreenMgr::VSP_VIEW_SCREEN ) );

        if( viewScreen )
        {
            if ( viewScreen->IsShown() )
            {
                viewScreen->UpdateCOR();
                viewScreen->UpdatePan();
                viewScreen->UpdateRotations();
            }
        }
    }
    else if ( data == &m_RightIsoMenuItem )
    {
        m_GlWin->setView( VSPGraphic::Common::VSP_CAM_RIGHT_ISO );
        ManageViewScreen * viewScreen = NULL;
        viewScreen = dynamic_cast< ManageViewScreen* >
        ( m_ScreenMgr->GetScreen( ScreenMgr::VSP_VIEW_SCREEN ) );

        if( viewScreen )
        {
            if ( viewScreen->IsShown() )
            {
                viewScreen->UpdateCOR();
                viewScreen->UpdatePan();
                viewScreen->UpdateRotations();
            }
        }
    }
    else if ( data == &m_CenterMenuItem )
    {
        m_GlWin->setView( VSPGraphic::Common::VSP_CAM_CENTER );

        ManageViewScreen * viewScreen = NULL;
        viewScreen = dynamic_cast< ManageViewScreen* >
        ( m_ScreenMgr->GetScreen( ScreenMgr::VSP_VIEW_SCREEN ) );

        if( viewScreen )
        {
            if ( viewScreen->IsShown() )
            {
                viewScreen->UpdateCOR();
                viewScreen->UpdatePan();
            }
        }
    }
    else if ( data == &m_SetCORMenuItem )
    {
        ManageCORScreen * corScreen = NULL;
        corScreen = dynamic_cast<ManageCORScreen *>
        ( m_ScreenMgr->GetScreen( ScreenMgr::VSP_COR_SCREEN ) );
        if( corScreen )
        {
            corScreen->EnableSelection();
        }
    }
    else if ( data == &m_FitViewMenuItem )
    {
        BndBox bbox;

        if ( VehicleMgr.GetVehicle()->GetVisibleBndBox( bbox ) ) // Check for any visible objects
        {
            vec3d p = bbox.GetCenter();
            double d = bbox.DiagDist();
            int wid = m_GlWin->pixel_w();
            int ht = m_GlWin->pixel_h();

            float z = d * ( wid < ht ? 1.f / wid : 1.f / ht );

            m_GlWin->getGraphicEngine()->getDisplay()->setCOR( -p.x(), -p.y(), -p.z() );
            m_GlWin->getGraphicEngine()->getDisplay()->relativePan( 0.0f, 0.0f );
            m_GlWin->getGraphicEngine()->getDisplay()->getCamera()->relativeZoom( z );

            ManageViewScreen * viewScreen = NULL;
            viewScreen = dynamic_cast< ManageViewScreen* >
            ( m_ScreenMgr->GetScreen( ScreenMgr::VSP_VIEW_SCREEN ) );

            if ( viewScreen->IsShown() )
            {
                viewScreen->UpdateCOR();
                viewScreen->UpdatePan();
                viewScreen->UpdateZoom();
            }
        }
    }
    // else if ( m_AntialiasMenuItem )
    // {
    // }

    m_ScreenMgr->SetUpdateFlag( true );
}