//==== Load Active Geom Output ====//
void ManageGeomScreen::LoadActiveGeomOutput()
{
    vector< string > activeVec = m_VehiclePtr->GetActiveGeomVec();
    if ( activeVec.size() == 0 )
    {
        m_GeomUI->activeGeomInput->value( m_VehiclePtr->GetName().c_str() );
    }
    else if ( activeVec.size() == 1 )
    {
        Geom* gptr = m_VehiclePtr->FindGeom( activeVec[0] );
        if ( gptr )
        {
            m_GeomUI->activeGeomInput->value( gptr->GetName().c_str() );
        }
    }
    else
    {
        m_GeomUI->activeGeomInput->value( "<multiple>" );
    }
}
bool CfdMeshScreen::Update()
{
    int i;

    LoadSetChoice();

    CfdMeshMgr.UpdateSourcesAndWakes();
    CfdMeshMgr.UpdateDomain();

    //==== Base Len ====//

    m_BodyEdgeSizeSlider.Update( CfdMeshMgr.GetGridDensityPtr()->m_BaseLen.GetID() );
    m_MinEdgeSizeSlider.Update( CfdMeshMgr.GetGridDensityPtr()->m_MinLen.GetID() );
    m_MaxGapSizeSlider.Update( CfdMeshMgr.GetGridDensityPtr()->m_MaxGap.GetID() );
    m_NumCircSegmentSlider.Update( CfdMeshMgr.GetGridDensityPtr()->m_NCircSeg.GetID() );
    m_GrowRatioSlider.Update( CfdMeshMgr.GetGridDensityPtr()->m_GrowRatio.GetID() );
    m_IntersectSubSurfsButton.Update( CfdMeshMgr.GetCfdSettingsPtr()->m_IntersectSubSurfs.GetID() );

    m_FarXScaleSlider.Update( CfdMeshMgr.GetCfdSettingsPtr()->m_FarXScale.GetID() );
    m_FarYScaleSlider.Update( CfdMeshMgr.GetCfdSettingsPtr()->m_FarYScale.GetID() );
    m_FarZScaleSlider.Update( CfdMeshMgr.GetCfdSettingsPtr()->m_FarZScale.GetID() );


//  char xstr[255];
//  char ystr[255];
//  char zstr[255];
//  sprintf( xstr, "%0.4f", CfdMeshMgr.GetFarLength() );
//  sprintf( ystr, "%0.4f", CfdMeshMgr.GetFarWidth() );
//  sprintf( zstr, "%0.4f", CfdMeshMgr.GetFarHeight() );
//  m_CfdMeshUI->farXScaleAbsInput->value(xstr);
//  m_CfdMeshUI->farYScaleAbsInput->value(ystr);
//  m_CfdMeshUI->farZScaleAbsInput->value(zstr);


    m_FarXLocationSlider.Update( CfdMeshMgr.GetCfdSettingsPtr()->m_FarXLocation.GetID() );
    m_FarYLocationSlider.Update( CfdMeshMgr.GetCfdSettingsPtr()->m_FarYLocation.GetID() );
    m_FarZLocationSlider.Update( CfdMeshMgr.GetCfdSettingsPtr()->m_FarZLocation.GetID() );

    m_FarEdgeLengthSlider.Update( CfdMeshMgr.GetGridDensityPtr()->m_FarMaxLen.GetID() );
    m_FarGapSizeSlider.Update( CfdMeshMgr.GetGridDensityPtr()->m_FarMaxGap.GetID() );
    m_FarCircSegmentSlider.Update( CfdMeshMgr.GetGridDensityPtr()->m_FarNCircSeg.GetID() );

    m_WakeScaleSlider.Update( CfdMeshMgr.GetCfdSettingsPtr()->m_WakeScale.GetID() );
    m_WakeAngleSlider.Update( CfdMeshMgr.GetCfdSettingsPtr()->m_WakeAngle.GetID() );

    //==== Load Geom Choice ====//
    m_GeomVec = m_Vehicle->GetGeomVec();

    m_CfdMeshUI->compChoice->clear();
    m_CfdMeshUI->surfChoice->clear();
    m_CfdMeshUI->wakeCompChoice->clear();
    m_CfdMeshUI->farCompChoice->clear();
    map< string, int > compIDMap;
    map< string, int > wingCompIDMap;
    m_WingGeomVec.clear();

    int iwing = 0;
    for ( i = 0 ; i < ( int )m_GeomVec.size() ; i++ )
    {
        char str[256];
        Geom* g = m_Vehicle->FindGeom( m_GeomVec[i] );
        if ( g )
        {
            sprintf( str, "%d_%s", i, g->GetName().c_str() );
            m_CfdMeshUI->compChoice->add( str );
            if( g->HasWingTypeSurfs() )
            {
                m_CfdMeshUI->wakeCompChoice->add( str );
                wingCompIDMap[ m_GeomVec[i] ] = iwing;
                m_WingGeomVec.push_back( m_GeomVec[i] );
                iwing ++;
            }
            m_CfdMeshUI->farCompChoice->add( str );
            compIDMap[ m_GeomVec[i] ] = i;
        }
    }

    string currSourceGeomID = CfdMeshMgr.GetCurrSourceGeomID();
    if( currSourceGeomID.length() == 0 && m_GeomVec.size() > 0 )
    {
        // Handle case default case.
        currSourceGeomID = m_GeomVec[0];
        CfdMeshMgr.SetCurrSourceGeomID( currSourceGeomID );
    }
    Geom* currGeom = m_Vehicle->FindGeom( currSourceGeomID );
    m_CfdMeshUI->compChoice->value( compIDMap[ currSourceGeomID ] );

    string wakeGeomID = CfdMeshMgr.GetWakeGeomID();
    if( wakeGeomID.length() == 0 && m_WingGeomVec.size() > 0 )
    {
        // Handle case default case.
        wakeGeomID = m_WingGeomVec[0];
        CfdMeshMgr.SetWakeGeomID( wakeGeomID );
    }
    Geom* wakeGeom = m_Vehicle->FindGeom( wakeGeomID );
    m_CfdMeshUI->wakeCompChoice->value( wingCompIDMap[ wakeGeomID ] );

    string farGeomID = CfdMeshMgr.GetCfdSettingsPtr()->GetFarGeomID();
    if( farGeomID.length() == 0 && m_GeomVec.size() > 0 )
    {
        // Handle case default case.
        farGeomID = m_GeomVec[0];
        CfdMeshMgr.GetCfdSettingsPtr()->SetFarGeomID( farGeomID );
    }
    m_CfdMeshUI->farCompChoice->value( compIDMap[ farGeomID ] );

    BaseSource* source = CfdMeshMgr.GetCurrSource();

    if ( source )
    {
        m_LengthSlider.Activate();
        m_RadiusSlider.Activate();
        m_CfdMeshUI->SourceNameInput->activate();

        m_LengthSlider.Update( source->m_Len.GetID() );
        m_RadiusSlider.Update( source->m_Rad.GetID() );

        m_CfdMeshUI->SourceNameInput->value( source->GetName().c_str() );

        if ( source->GetType() == vsp::POINT_SOURCE )
        {
            m_U1Slider.Activate();
            m_W1Slider.Activate();

            PointSource* ps = ( PointSource* )source;

            m_U1Slider.Update( ps->m_ULoc.GetID() );
            m_W1Slider.Update( ps->m_WLoc.GetID() );

            m_CfdMeshUI->EditSourceTitle->label( "Edit Point Source" );

            m_Length2Slider.Deactivate();
            m_Radius2Slider.Deactivate();
            m_U2Slider.Deactivate();
            m_W2Slider.Deactivate();
        }
        else if ( source->GetType() == vsp::LINE_SOURCE )
        {
            m_Length2Slider.Activate();
            m_Radius2Slider.Activate();
            m_U1Slider.Activate();
            m_W1Slider.Activate();
            m_U2Slider.Activate();
            m_W2Slider.Activate();

            LineSource* ps = ( LineSource* )source;

            m_U1Slider.Update( ps->m_ULoc1.GetID() );
            m_W1Slider.Update( ps->m_WLoc1.GetID() );

            m_U2Slider.Update( ps->m_ULoc2.GetID() );
            m_W2Slider.Update( ps->m_WLoc2.GetID() );

            m_Length2Slider.Update( ps->m_Len2.GetID() );
            m_Radius2Slider.Update( ps->m_Rad2.GetID() );

            m_CfdMeshUI->EditSourceTitle->label( "Edit Line Source" );
        }
        else if ( source->GetType() == vsp::BOX_SOURCE )
        {
            m_U1Slider.Activate();
            m_W1Slider.Activate();
            m_U2Slider.Activate();
            m_W2Slider.Activate();

            BoxSource* ps = ( BoxSource* )source;

            m_U1Slider.Update( ps->m_ULoc1.GetID() );
            m_W1Slider.Update( ps->m_WLoc1.GetID() );

            m_U2Slider.Update( ps->m_ULoc2.GetID() );
            m_W2Slider.Update( ps->m_WLoc2.GetID() );

            m_CfdMeshUI->EditSourceTitle->label( "Edit Box Source" );

            m_Length2Slider.Deactivate();
            m_Radius2Slider.Deactivate();
        }
    }
    else
    {
        m_LengthSlider.Deactivate();
        m_RadiusSlider.Deactivate();
        m_Length2Slider.Deactivate();
        m_Radius2Slider.Deactivate();
        m_U1Slider.Deactivate();
        m_W1Slider.Deactivate();
        m_U2Slider.Deactivate();
        m_W2Slider.Deactivate();
        m_CfdMeshUI->SourceNameInput->deactivate();
        m_CfdMeshUI->EditSourceTitle->label( "" );
    }

    //==== Load Up Source Browser ====//
    int currSourceID = -1;

    m_CfdMeshUI->sourceBrowser->clear();

    if( currGeom )
    {
        vector< BaseSource* > sVec = currGeom->GetCfdMeshMainSourceVec();
        for ( i = 0 ; i < ( int )sVec.size() ; i++ )
        {
            if ( source == sVec[i] )
            {
                currSourceID = i;
            }
            m_CfdMeshUI->sourceBrowser->add( sVec[i]->GetName().c_str() );
        }
        if ( currSourceID >= 0 && currSourceID < ( int )sVec.size() )
        {
            m_CfdMeshUI->sourceBrowser->select( currSourceID + 1 );
        }

        int nmain = currGeom->GetNumMainSurfs();
        for ( i = 0; i < nmain; i++ )
        {
            char str[256];
            sprintf( str, "Surf_%d", i );
            m_CfdMeshUI->surfChoice->add( str );
        }
        int currMainSurfID = CfdMeshMgr.GetCurrMainSurfIndx();
        if( currMainSurfID >= 0 && currMainSurfID < nmain )
        {
            m_CfdMeshUI->surfChoice->value( currMainSurfID );
        }
    }

    m_DrawMeshButton.Update( CfdMeshMgr.GetCfdSettingsPtr()->m_DrawMeshFlag.GetID() );
    m_DrawSourceButton.Update( CfdMeshMgr.GetCfdSettingsPtr()->m_DrawSourceFlag.GetID() );
    m_DrawFarButton.Update( CfdMeshMgr.GetCfdSettingsPtr()->m_DrawFarFlag.GetID() );
    m_DrawFarPreButton.Update( CfdMeshMgr.GetCfdSettingsPtr()->m_DrawFarPreFlag.GetID() );
    m_DrawBadButton.Update( CfdMeshMgr.GetCfdSettingsPtr()->m_DrawBadFlag.GetID() );
    m_DrawSymmButton.Update( CfdMeshMgr.GetCfdSettingsPtr()->m_DrawSymmFlag.GetID() );
    m_DrawWakeButton.Update( CfdMeshMgr.GetCfdSettingsPtr()->m_DrawWakeFlag.GetID() );
    m_DrawTagsButton.Update( CfdMeshMgr.GetCfdSettingsPtr()->m_ColorTagsFlag.GetID() );

    if ( CfdMeshMgr.GetCfdSettingsPtr()->GetHalfMeshFlag() )
    {
        m_CfdMeshUI->halfMeshButton->value( 1 );
    }
    else
    {
        m_CfdMeshUI->halfMeshButton->value( 0 );
    }

    if ( CfdMeshMgr.GetGridDensityPtr()->GetRigorLimit() )
    {
        m_CfdMeshUI->rigorLimitButton->value( 1 );
    }
    else
    {
        m_CfdMeshUI->rigorLimitButton->value( 0 );
    }

    string datname = CfdMeshMgr.GetCfdSettingsPtr()->GetExportFileName( vsp::CFD_DAT_FILE_NAME );
    m_CfdMeshUI->datName->value( truncateFileName( datname, 40 ).c_str() );
    string keyname = CfdMeshMgr.GetCfdSettingsPtr()->GetExportFileName( vsp::CFD_KEY_FILE_NAME );
    m_CfdMeshUI->keyName->value( truncateFileName( keyname, 40 ).c_str() );
    string objname = CfdMeshMgr.GetCfdSettingsPtr()->GetExportFileName( vsp::CFD_OBJ_FILE_NAME );
    m_CfdMeshUI->objName->value( truncateFileName( objname, 40 ).c_str() );
    string polyname = CfdMeshMgr.GetCfdSettingsPtr()->GetExportFileName( vsp::CFD_POLY_FILE_NAME );
    m_CfdMeshUI->polyName->value( truncateFileName( polyname, 40 ).c_str() );
    string stlname = CfdMeshMgr.GetCfdSettingsPtr()->GetExportFileName( vsp::CFD_STL_FILE_NAME );
    m_CfdMeshUI->stlName->value( truncateFileName( stlname, 40 ).c_str() );
    string triname = CfdMeshMgr.GetCfdSettingsPtr()->GetExportFileName( vsp::CFD_TRI_FILE_NAME );
    m_CfdMeshUI->triName->value( truncateFileName( triname, 40 ).c_str() );
    string gmshname = CfdMeshMgr.GetCfdSettingsPtr()->GetExportFileName( vsp::CFD_GMSH_FILE_NAME );
    m_CfdMeshUI->gmshName->value( truncateFileName( gmshname, 40 ).c_str() );
    string srfname = CfdMeshMgr.GetCfdSettingsPtr()->GetExportFileName( vsp::CFD_SRF_FILE_NAME );
    m_CfdMeshUI->srfName->value( truncateFileName( srfname, 40 ).c_str() );
    string tkeyname = CfdMeshMgr.GetCfdSettingsPtr()->GetExportFileName( vsp::CFD_TKEY_FILE_NAME );
    m_CfdMeshUI->tkeyName->value( truncateFileName( tkeyname, 40).c_str() );

    //==== Export Flags ====//

    m_DatToggleButton.Update( CfdMeshMgr.GetCfdSettingsPtr()->GetExportFileFlag( vsp::CFD_DAT_FILE_NAME )->GetID() );
    m_KeyToggleButton.Update( CfdMeshMgr.GetCfdSettingsPtr()->GetExportFileFlag( vsp::CFD_KEY_FILE_NAME )->GetID() );
    m_ObjToggleButton.Update( CfdMeshMgr.GetCfdSettingsPtr()->GetExportFileFlag( vsp::CFD_OBJ_FILE_NAME )->GetID() );
    m_PolyToggleButton.Update( CfdMeshMgr.GetCfdSettingsPtr()->GetExportFileFlag( vsp::CFD_POLY_FILE_NAME )->GetID() );
    m_StlToggleButton.Update( CfdMeshMgr.GetCfdSettingsPtr()->GetExportFileFlag( vsp::CFD_STL_FILE_NAME )->GetID() );
    m_StlMultiSolidToggleButton.Update( m_Vehicle->m_STLMultiSolid.GetID() );
    m_TriToggleButton.Update( CfdMeshMgr.GetCfdSettingsPtr()->GetExportFileFlag( vsp::CFD_TRI_FILE_NAME )->GetID() );
    m_GmshToggleButton.Update( CfdMeshMgr.GetCfdSettingsPtr()->GetExportFileFlag( vsp::CFD_GMSH_FILE_NAME )->GetID() );
    m_SrfToggleButton.Update( CfdMeshMgr.GetCfdSettingsPtr()->GetExportFileFlag( vsp::CFD_SRF_FILE_NAME )->GetID() );
    m_TkeyToggleButton.Update( CfdMeshMgr.GetCfdSettingsPtr()->GetExportFileFlag( vsp::CFD_TKEY_FILE_NAME)->GetID() );

    //==== Wake Flag ====//
    if( wakeGeom )
    {
        if ( wakeGeom->GetWakeActiveFlag() )
        {
            m_CfdMeshUI->addWakeButton->value( 1 );
        }
        else
        {
            m_CfdMeshUI->addWakeButton->value( 0 );
        }
    }

    //=== Domain tab GUI active areas ===//
    if ( CfdMeshMgr.GetCfdSettingsPtr()->GetFarMeshFlag() )
    {
        m_CfdMeshUI->farParametersGroup->activate();

        if( CfdMeshMgr.GetCfdSettingsPtr()->GetFarCompFlag() )
        {
            m_CfdMeshUI->farBoxGroup->deactivate();
            m_CfdMeshUI->farCompGroup->activate();
        }
        else
        {
            m_CfdMeshUI->farBoxGroup->activate();
            m_CfdMeshUI->farCompGroup->deactivate();

            if( CfdMeshMgr.GetCfdSettingsPtr()->GetFarManLocFlag() )
            {
                m_CfdMeshUI->farXYZLocationGroup->activate();
            }
            else
            {
                m_CfdMeshUI->farXYZLocationGroup->deactivate();
            }
        }
    }
    else
    {
        m_CfdMeshUI->farParametersGroup->deactivate();
    }

    //=== Domain tab GUI radio & highlight buttons ===//
    if( CfdMeshMgr.GetCfdSettingsPtr()->GetFarMeshFlag() )
    {
        m_CfdMeshUI->farMeshButton->value( 1 );
    }
    else
    {
        m_CfdMeshUI->farMeshButton->value( 0 );
    }

    if( CfdMeshMgr.GetCfdSettingsPtr()->GetFarCompFlag() )
    {
        m_CfdMeshUI->farComponentGenButton->setonly();
    }
    else
    {
        m_CfdMeshUI->farBoxGenButton->setonly();
    }

    if( CfdMeshMgr.GetCfdSettingsPtr()->GetFarAbsSizeFlag() )
    {
        m_CfdMeshUI->farAbsSizeButton->value( 1 );
        m_CfdMeshUI->farRelSizeButton->value( 0 );
    }
    else
    {
        m_CfdMeshUI->farAbsSizeButton->value( 0 );
        m_CfdMeshUI->farRelSizeButton->value( 1 );
    }

    if( CfdMeshMgr.GetCfdSettingsPtr()->GetFarManLocFlag() )
    {
        m_CfdMeshUI->farManLocButton->value( 1 );
        m_CfdMeshUI->farCenLocButton->value( 0 );
    }
    else
    {
        m_CfdMeshUI->farManLocButton->value( 0 );
        m_CfdMeshUI->farCenLocButton->value( 1 );
    }

    return false;
}
Beispiel #3
0
bool FitModelScreen::Update()
{
    int i;
    int index;
    char str[256];

    // Update the number of selected points.
    sprintf( str, "%d", FitModelMgr.GetNumSelected() );
    m_NSelOutput.Update( str );

    m_TargetGeomPicker.Update();

    m_UToggleGroup.Update( FitModelMgr.m_UType.GetID() );
    m_USlider.Update( FitModelMgr.m_UTargetPt.GetID() );

    m_WToggleGroup.Update( FitModelMgr.m_WType.GetID() );
    m_WSlider.Update( FitModelMgr.m_WTargetPt.GetID() );

    m_SelOneButton.Update( FitModelMgr.m_SelectOneFlag.GetID() );
    m_SelBoxButton.Update( FitModelMgr.m_SelectBoxFlag.GetID() );

    // Update Fixed target point browser
    m_TargetPtBrowser->clear();

    static int ptwidths[] = { 75, 35, 35, 35, 35, 37, 35, 38 }; // widths for each column
    m_TargetPtBrowser->column_widths( ptwidths );    // assign array to widget
    m_TargetPtBrowser->column_char( ':' );         // use : as the column character

    sprintf( str, "@[email protected]:@b@[email protected]:@b@[email protected]:@b@[email protected]:@b@[email protected]:@b@[email protected]:@b@[email protected]:@b@[email protected]" );
    m_TargetPtBrowser->add( str );

    int num_fix = FitModelMgr.GetNumTargetPt();
    for ( i = 0 ; i < num_fix ; i++ )
    {
        TargetPt* tpt = FitModelMgr.GetTargetPt( i );
        if( tpt )
        {
            Geom* g = VehicleMgr.GetVehicle()->FindGeom( tpt->GetMatchGeom() );
            if( g )
            {
                char *fix = "fix";
                char *free = "free";

                char *ut;
                char *wt;

                if( tpt->GetUType() == TargetPt::FIXED )
                {
                    ut = fix;
                }
                else
                {
                    ut = free;
                }

                if( tpt->GetWType() == TargetPt::FIXED )
                {
                    wt = fix;
                }
                else
                {
                    wt = free;
                }


                sprintf( str, "%s:%4.2f:%4.2f:%4.2f:%4.2f:%s:%4.2f:%s", g->GetName().c_str(), tpt->GetPt().x(), tpt->GetPt().y(), tpt->GetPt().z(), tpt->GetUW().x(), ut, tpt->GetUW().y(), wt );
                m_TargetPtBrowser->add( str );
            }
        }
    }

    index = FitModelMgr.GetCurrTargetPtIndex();
    if ( index >= 0 && index < num_fix )
    {
        m_TargetPtBrowser->select( index + 2 );
    }

    sprintf( str, "%d", num_fix );
    m_NTgtOutput.Update( str );

    // Check that all Parms exist.  Needed in case a Geom with DesVars is
    // deleted.
    FitModelMgr.CheckVars();

    // Re-sort DesVars.  Needed in case a Geom's name is changed.
    if ( !FitModelMgr.SortVars() )
    {
        RebuildAdjustTab();
    }

    //==== Update Parm Picker ====//
    m_ParmPicker.Update();

    //==== Update Parm Tree Picker ====//
    m_ParmTreePicker.Update( FitModelMgr.GetVarVec() );

    //==== Update Parm Browser ====//
    varBrowser->clear();

    static int widths[] = { 75, 75, 90 }; // widths for each column
    varBrowser->column_widths( widths );    // assign array to widget
    varBrowser->column_char( ':' );         // use : as the column character

    sprintf( str, "@[email protected]_A:@[email protected]:@[email protected]" );
    varBrowser->add( str );

    int num_vars = FitModelMgr.GetNumVars();
    for ( i = 0 ; i < num_vars ; i++ )
    {
        string c_name, g_name, p_name;
        ParmMgr.GetNames( FitModelMgr.GetVar( i ), c_name, g_name, p_name );

        sprintf( str, "%s:%s:%s", c_name.c_str(), g_name.c_str(), p_name.c_str() );
        varBrowser->add( str );
    }

    index = FitModelMgr.GetCurrVarIndex();
    if ( index >= 0 && index < num_vars )
    {
        varBrowser->select( index + 2 );
    }

    sprintf( str, "%d", num_vars );
    m_NVarOutput.Update( str );

    // Parameter GUI got out of sync.  Probably from File->New or similar.
    if ( m_NVarLast != num_vars )
    {
        RebuildAdjustTab();
    }

    //==== Update Parm Adjust Tab ====//
    for ( int i = 0 ; i < num_vars ; i++ )
    {
        m_ParmSliderVec[i].Update( FitModelMgr.GetVar( i ) );
    }

    FitModelMgr.UpdateNumOptVars();
    sprintf( str, "%d", FitModelMgr.GetNumOptVars() );
    m_DOFOutput.Update( str );
    sprintf( str, "%d", num_fix * 3 );
    m_CondOutput.Update( str );

    m_DistOutput.Update( std::to_string( static_cast<long double> (FitModelMgr.m_DistMetric) ) );

    //===== Save/Load =====//
    m_SaveOutput.Update( truncateFileName( FitModelMgr.GetSaveFitFileName(), 40 ) );
    m_LoadOutput.Update( truncateFileName( FitModelMgr.GetLoadFitFileName(), 40 ) );

    if ( m_SaveOutput.GetString() == "" )
    {
        m_Save.Deactivate();
    }
    else
    {
        m_Save.Activate();
    }
    if ( m_LoadOutput.GetString() == "" )
    {
        m_Load.Deactivate();
    }
    else
    {
        m_Load.Activate();
    }

    m_FLTK_Window->redraw();

    return false;
}
//==== Load Geom Browser ====//
void ManageGeomScreen::LoadBrowser()
{

    //==== Save List of Selected Geoms ====//
    vector< string > activeVec = m_VehiclePtr->GetActiveGeomVec();

    m_LastTopLine = m_GeomUI->geomBrowser->topline();

    //==== Display Vehicle Name ====//
    m_GeomUI->geomBrowser->clear();
    m_GeomUI->geomBrowser->add( m_VehiclePtr->GetName().c_str() );

    //==== Get Geoms To Display ====//
    m_DisplayedGeomVec = m_VehiclePtr->GetGeomVec( true );

    //==== Step Thru Comps ====//
    for ( int i = 0 ; i < ( int )m_DisplayedGeomVec.size() ; i++ )
    {
        Geom* gPtr = m_VehiclePtr->FindGeom( m_DisplayedGeomVec[i] );
        if ( gPtr )
        {
            string str;
            //==== Check if Parent is Selected ====//
            if ( IsParentSelected( m_DisplayedGeomVec[i], activeVec ) )
            {
                str.append( "@b@." );
            }

            int numindents = gPtr->CountParents( 0 );
            for ( int j = 0 ; j < numindents ; j++ )
            {
                str.append( "--" );
            }

            if ( gPtr->m_TransAttachFlag() == GeomXForm::ATTACH_TRANS_NONE &&
                    gPtr->m_RotAttachFlag() == GeomXForm::ATTACH_ROT_NONE )
            {
                str.append( "> " );
            }
            else
            {
                str.append( "^ " );
            }

            if ( !gPtr->m_GuiDraw.GetDisplayChildrenFlag() )
            {
                str.append( "(+) " );
            }

            str.append( gPtr->GetName() );

            if ( gPtr->m_GuiDraw.GetNoShowFlag() )
            {
                str.append( "(no show)" );
            }

            m_GeomUI->geomBrowser->add( str.c_str() );
        }
    }

    //==== Restore List of Selected Geoms ====//
    for ( int i = 0 ; i < ( int )activeVec.size() ; i++ )
    {
        SelectGeomBrowser( activeVec[i] );
    }
}
Beispiel #5
0
bool VSPAEROScreen::Update()
{
    Vehicle *veh = VehicleMgr.GetVehicle();

    VSPAEROMgr.Update();

    if( veh )
    {
        //check if the degenfile name has changed
        string t_ModelNameBase = VSPAEROMgr.m_ModelNameBase;  //m_ModelNameBase is built from calling veh->getExportFileName();
        if( !t_ModelNameBase.empty() && strcmp( m_ModelNameBasePrevious.c_str(), t_ModelNameBase.c_str() ) != 0 )
        {
            ReadSetup();
        }
        m_ModelNameBasePrevious = t_ModelNameBase;

        // Reference Wing Choice
        //    find & list all Wing type geometries
        vector <string> geomVec = veh->GetGeomVec();

        m_RefWingChoice.ClearItems();
        m_WingGeomVec.clear();
        map <string, int> WingCompIDMap;
        int iwing = 0;
        for ( int i = 0 ; i < ( int )geomVec.size() ; i++ )
        {
            char str[256];
            Geom* g = veh->FindGeom( geomVec[i] );
            if ( g )
            {
                sprintf( str, "%d_%s", i, g->GetName().c_str() );

                if( g->GetType().m_Type == MS_WING_GEOM_TYPE )
                {
                    m_RefWingChoice.AddItem( str );
                    WingCompIDMap[ geomVec[i] ] = iwing;
                    m_WingGeomVec.push_back( geomVec[i] );
                    iwing ++;
                }
            }
        }
        m_RefWingChoice.UpdateItems();
        //    Update selected value
        string refGeomID = VSPAEROMgr.m_RefGeomID;
        if( refGeomID.length() == 0 && m_WingGeomVec.size() > 0 )
        {
            // Handle case default case.
            refGeomID = m_WingGeomVec[0];
            VSPAEROMgr.m_RefGeomID = refGeomID;
            // Re-trigger reference quantity update with default component.
            VSPAEROMgr.Update();
        }
        m_RefWingChoice.SetVal( WingCompIDMap[ refGeomID ] );


        // Update available set choices
        m_GeomSetChoice.ClearItems();
        m_CGSetChoice.ClearItems();

        vector <string> setVec = veh->GetSetNameVec();
        for ( int iSet = 0; iSet < setVec.size(); iSet++ )
        {
            m_GeomSetChoice.AddItem( setVec[iSet] );
            m_CGSetChoice.AddItem( setVec[iSet] );
        }
        m_GeomSetChoice.UpdateItems();
        m_CGSetChoice.UpdateItems();

        m_GeomSetChoice.SetVal( VSPAEROMgr.m_GeomSet() );
        m_CGSetChoice.SetVal( VSPAEROMgr.m_CGGeomSet() );


        // Case Setup
        m_AeroMethodToggleGroup.Update( VSPAEROMgr.m_AnalysisMethod.GetID() );
        switch ( VSPAEROMgr.m_AnalysisMethod.Get() )
        {
        case vsp::VSPAERO_ANALYSIS_METHOD::VORTEX_LATTICE:

            m_DegenFileName.Activate();
            m_DegenFileButton.Activate();

            m_CompGeomFileName.Deactivate();
            m_CompGeomFileButton.Deactivate();

            break;

        case vsp::VSPAERO_ANALYSIS_METHOD::PANEL:

            m_DegenFileName.Deactivate();
            m_DegenFileButton.Deactivate();

            m_CompGeomFileName.Activate();
            m_CompGeomFileButton.Activate();

            break;

        default:
            //do nothing; this should not be reachable
            break;
        }

        m_DegenFileName.Update( veh->getExportFileName( vsp::DEGEN_GEOM_CSV_TYPE ) );
        m_CompGeomFileName.Update( veh->getExportFileName( vsp::VSPAERO_PANEL_TRI_TYPE ) );

        m_NCPUSlider.Update( VSPAEROMgr.m_NCPU.GetID() );
        m_StabilityCalcToggle.Update( VSPAEROMgr.m_StabilityCalcFlag.GetID() );
        m_BatchCalculationToggle.Update( VSPAEROMgr.m_BatchModeFlag.GetID() );
        //printf("m_SolverProcess.m_ThreadID = %lu\n", m_SolverProcess.m_ThreadID);
        if( m_SolverThreadIsRunning )
        {
            m_ComputeGeometryButton.Deactivate();
        }
        else
        {
            m_ComputeGeometryButton.Activate();
        }


        // Wake Options
        m_WakeNumIterSlider.Update( VSPAEROMgr.m_WakeNumIter.GetID() );
        m_WakeAvgStartIterSlider.Update( VSPAEROMgr.m_WakeAvgStartIter.GetID() );
        m_WakeSkipUntilIterSlider.Update( VSPAEROMgr.m_WakeSkipUntilIter.GetID() );


        // Reference Quantities
        m_RefToggle.Update( VSPAEROMgr.m_RefFlag.GetID() );
        m_SrefSlider.Update( VSPAEROMgr.m_Sref.GetID() );
        m_brefSlider.Update( VSPAEROMgr.m_bref.GetID() );
        m_crefSlider.Update( VSPAEROMgr.m_cref.GetID() );


        // CG Position
        m_NumSliceSlider.Update( VSPAEROMgr.m_NumMassSlice.GetID() );
        m_XcgSlider.Update( VSPAEROMgr.m_Xcg.GetID() );
        m_YcgSlider.Update( VSPAEROMgr.m_Ycg.GetID() );
        m_ZcgSlider.Update( VSPAEROMgr.m_Zcg.GetID() );


        // Flow Condition
        // Alpha
        m_AlphaStartInput.Update( VSPAEROMgr.m_AlphaStart.GetID() );
        m_AlphaEndInput.Update( VSPAEROMgr.m_AlphaEnd.GetID() );
        m_AlphaNptsInput.Update( VSPAEROMgr.m_AlphaNpts.GetID() );
        if ( VSPAEROMgr.m_AlphaNpts.Get() == 1 )
        {
            m_AlphaEndInput.Deactivate();
        }
        else if ( VSPAEROMgr.m_AlphaNpts.Get() > 1 )
        {
            m_AlphaEndInput.Activate();
        }
        // Beta
        m_BetaStartInput.Update( VSPAEROMgr.m_BetaStart.GetID() );
        m_BetaEndInput.Update( VSPAEROMgr.m_BetaEnd.GetID() );
        m_BetaNptsInput.Update( VSPAEROMgr.m_BetaNpts.GetID() );
        if ( VSPAEROMgr.m_BetaNpts.Get() == 1 )
        {
            m_BetaEndInput.Deactivate();
        }
        else if ( VSPAEROMgr.m_BetaNpts.Get() > 1 )
        {
            m_BetaEndInput.Activate();
        }
        // Mach
        m_MachStartInput.Update( VSPAEROMgr.m_MachStart.GetID() );
        m_MachEndInput.Update( VSPAEROMgr.m_MachEnd.GetID() );
        m_MachNptsInput.Update( VSPAEROMgr.m_MachNpts.GetID() );
        if ( VSPAEROMgr.m_MachNpts.Get() == 1 )
        {
            m_MachEndInput.Deactivate();
        }
        else if ( VSPAEROMgr.m_MachNpts.Get() > 1 )
        {
            m_MachEndInput.Activate();
        }

        // Create Setup Button
        if( veh->GetVSPAEROCmd().empty()             ||
                !FileExist( VSPAEROMgr.m_DegenFileFull ) ||
                m_SolverThreadIsRunning                  ||
                m_SolverSetupThreadIsRunning             ||
                ( ( VSPAEROMgr.m_AnalysisMethod.Get() == vsp::VSPAERO_ANALYSIS_METHOD::PANEL ) && ( !FileExist( VSPAEROMgr.m_CompGeomFileFull ) ) ) )
        {
            m_SetupButton.Deactivate();
        }
        else
        {
            m_SetupButton.Activate();
        }
        // Kill Solver Setup Button
        if( m_SolverSetupThreadIsRunning )
        {
            m_KillSolverSetupButton.Activate();
        }
        else
        {
            m_KillSolverSetupButton.Deactivate();
        }

        // Setup Text Display
        m_SetupDividerBox->copy_label( std::string( "Setup File: " + GetFilename( VSPAEROMgr.m_SetupFile ) ).c_str() );
        // Read Setup Button
        if( !FileExist( VSPAEROMgr.m_SetupFile ) )
        {
            m_ReadSetup.Deactivate();
        }
        else
        {
            m_ReadSetup.Activate();
        }
        // Save Setup Button
        if( veh->GetVSPAEROCmd().empty() || m_SolverThreadIsRunning || m_SolverSetupThreadIsRunning )
        {
            m_SaveSetup.Deactivate();
        }
        else
        {
            m_SaveSetup.Activate();
        }

        // Solver Button
        if( veh->GetVSPAEROCmd().empty()             ||
                !FileExist( VSPAEROMgr.m_DegenFileFull ) ||
                !FileExist( VSPAEROMgr.m_SetupFile )     ||
                m_SolverThreadIsRunning                  ||
                ( VSPAEROMgr.m_AnalysisMethod.Get() == vsp::VSPAERO_ANALYSIS_METHOD::PANEL && !FileExist( VSPAEROMgr.m_CompGeomFileFull ) ) )
        {
            m_SolverButton.Deactivate();
        }
        else
        {
            m_SolverButton.Activate();
        }
        // Kill Solver Button
        if( m_SolverThreadIsRunning )
        {
            m_KillSolverButton.Activate();
        }
        else
        {
            m_KillSolverButton.Deactivate();
        }

        // Plot Window Button
        if( veh->GetVSPAEROCmd().empty()             ||
                !FileExist( VSPAEROMgr.m_DegenFileFull ) ||
                !FileExist( VSPAEROMgr.m_SetupFile )     ||
                ( VSPAEROMgr.m_AnalysisMethod.Get() == vsp::VSPAERO_ANALYSIS_METHOD::PANEL && !FileExist( VSPAEROMgr.m_CompGeomFileFull ) ) )
        {
            m_PlotButton.Deactivate();
        }
        else
        {
            m_PlotButton.Activate();
        }

        // Viewer Button
        if( veh->GetVIEWERCmd().empty() || m_SolverThreadIsRunning || m_ViewerProcess.IsRunning() || !FileExist( VSPAEROMgr.m_AdbFile ) )
        {
            m_ViewerButton.Deactivate();
        }
        else
        {
            m_ViewerButton.Activate();
        }

        // Export Button
        if ( ResultsMgr.GetNumResults( "VSPAERO_Wrapper" ) == 0 )
        {
            m_ExportResultsToCsvButton.Deactivate();
        }
        else
        {
            m_ExportResultsToCsvButton.Activate();
        }

    }

    m_FLTK_Window->redraw();

    return false;
}