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 ); }
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 ); }
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 ); }