//==== Constructor ====// StackGeom::StackGeom( Vehicle* vehicle_ptr ) : GeomXSec( vehicle_ptr ) { m_Name = "StackGeom"; m_Type.m_Name = "Stack"; m_Type.m_Type = STACK_GEOM_TYPE; m_Closed = false; m_XSecSurf.SetParentContainer( GetID() ); m_XSecSurf.SetBasicOrientation( X_DIR, Y_DIR, XS_SHIFT_MID, false ); m_OrderPolicy.Init( "OrderPolicy", "Design", this, STACK_FREE, STACK_FREE, NUM_STACK_POLICY - 1 ); m_OrderPolicy.SetDescript( "XSec ordering policy for stack" ); //==== Init Parms ====// m_TessU = 16; m_TessW = 17; m_TessW.SetMultShift( 8, 1 ); m_ActiveXSec = 0; m_XSecSurf.SetXSecType( XSEC_STACK ); m_XSecSurf.AddXSec( XS_POINT ); m_XSecSurf.AddXSec( XS_ELLIPSE ); m_XSecSurf.AddXSec( XS_ELLIPSE ); m_XSecSurf.AddXSec( XS_ELLIPSE ); m_XSecSurf.AddXSec( XS_POINT ); int j; StackXSec* xs; j = 0; xs = ( StackXSec* ) m_XSecSurf.FindXSec( j ); xs->SetGroupDisplaySuffix( j ); xs->m_XDelta = 0.0; xs->m_TopLAngle = 45.0; xs->m_TopLStrength = 0.75; xs->m_RightLAngle = 45.0; xs->m_RightLStrength = 0.75; ++j; xs = ( StackXSec* ) m_XSecSurf.FindXSec( j ); xs->SetGroupDisplaySuffix( j ); xs->m_XDelta = 1.0; dynamic_cast<EllipseXSec *>( xs->GetXSecCurve() )->SetWidthHeight( 3.0, 2.5 ); ++j; xs = ( StackXSec* ) m_XSecSurf.FindXSec( j ); xs->SetGroupDisplaySuffix( j ); xs->m_XDelta = 2.0; dynamic_cast<EllipseXSec *>( xs->GetXSecCurve() )->SetWidthHeight( 3.0, 2.5 ); ++j; xs = ( StackXSec* ) m_XSecSurf.FindXSec( j ); xs->SetGroupDisplaySuffix( j ); xs->m_XDelta = 1.0; dynamic_cast<EllipseXSec *>( xs->GetXSecCurve() )->SetWidthHeight( 3.0, 2.5 ); ++j; xs = ( StackXSec* ) m_XSecSurf.FindXSec( j ); xs->SetGroupDisplaySuffix( j ); xs->m_XDelta = 0.5; xs->m_TopLAngle = -45.0; xs->m_TopLStrength = 0.75; xs->m_RightLAngle = -45.0; xs->m_RightLStrength = 0.75; }
//==== Update Pod Screen ====// bool StackScreen::Update() { assert( m_ScreenMgr ); Geom* geom_ptr = m_ScreenMgr->GetCurrGeom(); if ( !geom_ptr || geom_ptr->GetType().m_Type != STACK_GEOM_TYPE ) { Hide(); return false; } SkinScreen::Update(); m_NumUSlider.Deactivate(); StackGeom* stackgeom_ptr = dynamic_cast< StackGeom* >( geom_ptr ); assert( stackgeom_ptr ); m_DesignPolicyChoice.Update( stackgeom_ptr->m_OrderPolicy.GetID() ); //==== XSec Index Display ===// int xsid = stackgeom_ptr->GetActiveXSecIndex(); m_XSecIndexSelector.SetIndex( xsid ); StackXSec* xs = ( StackXSec* ) stackgeom_ptr->GetXSec( xsid ); if ( xs ) { bool firstxs = xsid == 0; bool lastxs = xsid == ( stackgeom_ptr->GetXSecSurf( 0 )->NumXSec() - 1 ); bool nextlastxs = xsid == ( stackgeom_ptr->GetXSecSurf( 0 )->NumXSec() - 2 ); m_SectUTessSlider.Update( xs->m_SectTessU.GetID() ); m_XSecXDeltaSlider.Update( xs->m_XDelta.GetID() ); m_XSecYDeltaSlider.Update( xs->m_YDelta.GetID() ); m_XSecZDeltaSlider.Update( xs->m_ZDelta.GetID() ); m_XSecXRotSlider.Update( xs->m_XRotate.GetID() ); m_XSecYRotSlider.Update( xs->m_YRotate.GetID() ); m_XSecZRotSlider.Update( xs->m_ZRotate.GetID() ); if ( firstxs ) { m_SectUTessSlider.Deactivate(); m_XSecXDeltaSlider.Deactivate(); m_XSecYDeltaSlider.Deactivate(); m_XSecZDeltaSlider.Deactivate(); m_XSecXRotSlider.Deactivate(); m_XSecYRotSlider.Deactivate(); m_XSecZRotSlider.Deactivate(); } else { m_SectUTessSlider.Activate(); m_XSecXDeltaSlider.Activate(); m_XSecYDeltaSlider.Activate(); m_XSecZDeltaSlider.Activate(); m_XSecXRotSlider.Activate(); m_XSecYRotSlider.Activate(); m_XSecZRotSlider.Activate(); } if ( lastxs && stackgeom_ptr->m_OrderPolicy() == StackGeom::STACK_LOOP) { m_XSecXDeltaSlider.Deactivate(); m_XSecYDeltaSlider.Deactivate(); m_XSecZDeltaSlider.Deactivate(); m_XSecXRotSlider.Deactivate(); m_XSecYRotSlider.Deactivate(); m_XSecZRotSlider.Deactivate(); } XSecCurve* xsc = xs->GetXSecCurve(); if ( xsc ) { m_XSecTypeChoice.SetVal( xsc->GetType() ); if ( xsc->GetType() == XS_POINT ) { DisplayGroup( NULL ); } else if ( xsc->GetType() == XS_SUPER_ELLIPSE ) { DisplayGroup( &m_SuperGroup ); SuperXSec* super_xs = dynamic_cast< SuperXSec* >( xsc ); assert( super_xs ); m_SuperHeightSlider.Update( super_xs->m_Height.GetID() ); m_SuperWidthSlider.Update( super_xs->m_Width.GetID() ); m_SuperMSlider.Update( super_xs->m_M.GetID() ); m_SuperNSlider.Update( super_xs->m_N.GetID() ); } else if ( xsc->GetType() == XS_CIRCLE ) { DisplayGroup( &m_CircleGroup ); CircleXSec* circle_xs = dynamic_cast< CircleXSec* >( xsc ); assert( circle_xs ); m_DiameterSlider.Update( circle_xs->m_Diameter.GetID() ); } else if ( xsc->GetType() == XS_ELLIPSE ) { DisplayGroup( & m_EllipseGroup ); EllipseXSec* ellipse_xs = dynamic_cast< EllipseXSec* >( xsc ); m_EllipseHeightSlider.Update( ellipse_xs->m_Height.GetID() ); m_EllipseWidthSlider.Update( ellipse_xs->m_Width.GetID() ); } else if ( xsc->GetType() == XS_ROUNDED_RECTANGLE ) { DisplayGroup( & m_RoundedRectGroup ); RoundedRectXSec* rect_xs = dynamic_cast< RoundedRectXSec* >( xsc ); assert( rect_xs ); m_RRHeightSlider.Update( rect_xs->m_Height.GetID() ); m_RRWidthSlider.Update( rect_xs->m_Width.GetID() ); m_RRRadiusSlider.Update( rect_xs->m_Radius.GetID() ); } else if ( xsc->GetType() == XS_GENERAL_FUSE ) { DisplayGroup( &m_GenGroup ); GeneralFuseXSec* gen_xs = dynamic_cast< GeneralFuseXSec* >( xsc ); assert( gen_xs ); m_GenHeightSlider.Update( gen_xs->m_Height.GetID() ); m_GenWidthSlider.Update( gen_xs->m_Width.GetID() ); m_GenMaxWidthLocSlider.Update( gen_xs->m_MaxWidthLoc.GetID() ); m_GenCornerRadSlider.Update( gen_xs->m_CornerRad.GetID() ); m_GenTopTanAngleSlider.Update( gen_xs->m_TopTanAngle.GetID() ); m_GenBotTanAngleSlider.Update( gen_xs->m_BotTanAngle.GetID() ); m_GenTopStrSlider.Update( gen_xs->m_TopStr.GetID() ); m_GenBotStrSlider.Update( gen_xs->m_BotStr.GetID() ); m_GenUpStrSlider.Update( gen_xs->m_UpStr.GetID() ); m_GenLowStrSlider.Update( gen_xs->m_LowStr.GetID() ); } else if ( xsc->GetType() == XS_FOUR_SERIES ) { DisplayGroup( &m_FourSeriesGroup ); FourSeries* fs_xs = dynamic_cast< FourSeries* >( xsc ); assert( fs_xs ); m_FourChordSlider.Update( fs_xs->m_Chord.GetID() ); m_FourThickChordSlider.Update( fs_xs->m_ThickChord.GetID() ); m_FourCamberSlider.Update( fs_xs->m_Camber.GetID() ); m_FourCamberLocSlider.Update( fs_xs->m_CamberLoc.GetID() ); m_FourInvertButton.Update( fs_xs->m_Invert.GetID() ); m_FourNameOutput.Update( fs_xs->GetAirfoilName() ); } else if ( xsc->GetType() == XS_SIX_SERIES ) { DisplayGroup( &m_SixSeriesGroup ); SixSeries* ss_xs = dynamic_cast< SixSeries* >( xsc ); assert( ss_xs ); m_SixChordSlider.Update( ss_xs->m_Chord.GetID() ); m_SixThickChordSlider.Update( ss_xs->m_ThickChord.GetID() ); m_SixIdealClSlider.Update( ss_xs->m_IdealCl.GetID() ); m_SixASlider.Update( ss_xs->m_A.GetID() ); m_SixInvertButton.Update( ss_xs->m_Invert.GetID() ); m_SixNameOutput.Update( ss_xs->GetAirfoilName() ); m_SixSeriesChoice.Update( ss_xs->m_Series.GetID() ); } else if ( xsc->GetType() == XS_BICONVEX ) { DisplayGroup( &m_BiconvexGroup ); Biconvex* bi_xs = dynamic_cast< Biconvex* >( xsc ); assert( bi_xs ); m_BiconvexChordSlider.Update( bi_xs->m_Chord.GetID() ); m_BiconvexThickChordSlider.Update( bi_xs->m_ThickChord.GetID() ); } else if ( xsc->GetType() == XS_WEDGE ) { DisplayGroup( &m_WedgeGroup ); Wedge* we_xs = dynamic_cast< Wedge* >( xsc ); assert( we_xs ); m_WedgeChordSlider.Update( we_xs->m_Chord.GetID() ); m_WedgeThickChordSlider.Update( we_xs->m_ThickChord.GetID() ); m_WedgeThickLocSlider.Update( we_xs->m_ThickLoc.GetID() ); } else if ( xsc->GetType() == XS_FILE_FUSE ) { DisplayGroup( &m_FuseFileGroup ); FileXSec* file_xs = dynamic_cast< FileXSec* >( xsc ); assert( file_xs ); m_FileHeightSlider.Update( file_xs->m_Height.GetID() ); m_FileWidthSlider.Update( file_xs->m_Width.GetID() ); } else if ( xsc->GetType() == XS_FILE_AIRFOIL ) { DisplayGroup( &m_AfFileGroup ); FileAirfoil* affile_xs = dynamic_cast< FileAirfoil* >( xsc ); assert( affile_xs ); m_AfFileChordSlider.Update( affile_xs->m_Chord.GetID() ); m_AfFileInvertButton.Update( affile_xs->m_Invert.GetID() ); m_AfFileNameOutput.Update( affile_xs->GetAirfoilName() ); } } } return true; }