Exemple #1
0
void Log::logDirect(LogLevel level, const char *file, int line, const QString &msg)
{
    if (!canLog(level)) {
        return;
    }

    char prettyFile[40]; // truncated file name
    truncateFileName(prettyFile, 40, file);

    QString header  = "%1 | %2 | %3 | %4\n";
    QString logLine = header.arg(levelToString(level)).arg(prettyFile).arg(line, 4).arg(msg);
    this->write(logLine);

    if (level == LogLevel::Fatal) {
        abort();
    }
}
// Callback for all other GUI Devices
void ManageBackgroundScreen::GuiDeviceCallBack( GuiDevice* device )
{
    assert( m_ScreenMgr );

    MainVSPScreen* main = dynamic_cast<MainVSPScreen*>( m_ScreenMgr->GetScreen( m_ScreenMgr->VSP_MAIN_SCREEN ) );
    if( !main )
    {
        return;
    }

    VSPGUI::VspGlWindow * glwin = main->GetGLWindow();

    VSPGraphic::Viewport * viewport = glwin->getGraphicEngine()->getDisplay()->getViewport();
    if( !viewport )
    {
        return;
    }

    if ( device == &m_Color )
    {
        m_Color.GetFlButton()->value( 1 );
        m_Image.GetFlButton()->value( 0 );
        viewport->getBackground()->removeImage();
        viewport->getBackground()->setBackgroundMode( VSPGraphic::Common::VSP_BACKGROUND_COLOR );
    }
    else if ( device == &m_Image )
    {
        m_Color.GetFlButton()->value( 0 );
        m_Image.GetFlButton()->value( 1 );
        viewport->getBackground()->setBackgroundMode( VSPGraphic::Common::VSP_BACKGROUND_IMAGE );

        if ( m_ImageFile.compare( "" ) != 0 )
        {
            viewport->getBackground()->attachImage( VSPGraphic::GlobalTextureRepo()->get2DTexture( m_ImageFile.c_str() ) );
        }
    }
    else if ( device == &m_FileSelect )
    {
        std::string fileName = m_ScreenMgr->GetSelectFileScreen()->FileChooser(
                "Select Image File", "*.{jpg,png,tga,bmp,gif}", false );

        if( !fileName.empty() )
        {
            viewport->getBackground()->removeImage();
            viewport->getBackground()->attachImage( VSPGraphic::GlobalTextureRepo()->get2DTexture( fileName.c_str() ) );
            m_ImageFile = fileName;
            m_FileOutput.Update( truncateFileName( fileName, 40 ).c_str() );
        }
    }
    else if ( device == &m_PreserveAspect )
    {
        if ( m_PreserveAspect.GetFlButton()->value() == 1 )
        {
            viewport->getBackground()->preserveAR( true );
        }
        else
        {
            viewport->getBackground()->preserveAR( false );
        }
    }
    else if ( device == &m_ResetDefaults )
    {
        viewport->getBackground()->reset();
        colorChooser->rgb( viewport->getBackground()->getRed(), viewport->getBackground()->getGreen(),
                           viewport->getBackground()->getBlue() );
        m_FileOutput.Update("");
        m_ImageFile = "";

        //Reset Scale & Offset
        m_WidthScaleValue.Set( viewport->getBackground()->getScaleW() );
        m_HeightScaleValue.Set( viewport->getBackground()->getScaleH() );

        m_XOffsetValue.Set( viewport->getBackground()->getOffsetX() );
        m_YOffsetValue.Set( viewport->getBackground()->getOffsetY() );
    }

    m_ScreenMgr->SetUpdateFlag( true );
}
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;
}
Exemple #4
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;
}
void FeaStructScreen::update()
{
	char str[256];

	//==== Default Elem Size ====//
	m_DefEdgeSlider->SetVal( feaMeshMgrPtr->GetDefElemSize() );
	m_DefEdgeSlider->UpdateGui();

	m_ThickScaleSlider->SetVal( feaMeshMgrPtr->GetThickScale() );
	m_ThickScaleSlider->UpdateGui();

	//==== SectID ====//
	sprintf( str, "        %d ", feaMeshMgrPtr->GetCurrSectID() );
	feaStructUI->sectIDInput->value(str);

	//==== Spar Rib ID ====//
	sprintf( str, "        %d ", feaMeshMgrPtr->GetCurrSparID() );
	if ( feaMeshMgrPtr->GetNumSpars() == 0 )		
		sprintf( str, " " );
	feaStructUI->sparIDInput->value(str);

	sprintf( str, "        %d ", feaMeshMgrPtr->GetCurrRibID() );
	if ( feaMeshMgrPtr->GetNumRibs() == 0 )		
		sprintf( str, " " );
	feaStructUI->ribIDInput->value(str);

	FeaRib* rib = feaMeshMgrPtr->GetCurrRib();
	if ( rib )
	{
		feaStructUI->ribEditGroup->show();
		m_RibThickSlider->SetVal( rib->m_Thick );
		m_RibThickSlider->UpdateGui();

		m_RibDensitySlider->SetVal( rib->GetDensity() );
		m_RibDensitySlider->UpdateGui();

		m_RibPosSlider->SetVal( rib->m_PerSpan );
		m_RibPosSlider->UpdateGui();

		m_RibSweepSlider->SetVal( rib->m_Sweep );
		m_RibSweepSlider->UpdateGui();

		if ( rib->m_AbsSweepFlag )
		{
			feaStructUI->ribSweepAbsButton->value(1);
			feaStructUI->ribSweepRelButton->value(0);
		}
		else
		{
			feaStructUI->ribSweepAbsButton->value(0);
			feaStructUI->ribSweepRelButton->value(1);
		}
		if ( rib->m_TrimFlag )
			feaStructUI->trimRibButton->value(1);
		else
			feaStructUI->trimRibButton->value(0);
	}
	else
	{
		feaStructUI->ribEditGroup->hide();
	}


	FeaSpar* spar = feaMeshMgrPtr->GetCurrSpar();
	if ( spar )
	{
		feaStructUI->sparEditGroup->show();
		m_SparThickSlider->SetVal( spar->m_Thick );
		m_SparThickSlider->UpdateGui();

		m_SparDensitySlider->SetVal( spar->GetDensity() );
		m_SparDensitySlider->UpdateGui();

		m_SparPosSlider->SetVal( spar->m_PerChord );
		m_SparPosSlider->UpdateGui();

		m_SparSweepSlider->SetVal( spar->m_Sweep );
		m_SparSweepSlider->UpdateGui();

		if ( spar->m_AbsSweepFlag )
		{
			feaStructUI->sparSweepAbsButton->value(1);
			feaStructUI->sparSweepRelButton->value(0);
		}
		else
		{
			feaStructUI->sparSweepAbsButton->value(0);
			feaStructUI->sparSweepRelButton->value(1);
		}
		if ( spar->m_TrimFlag )
			feaStructUI->trimSparButton->value(1);
		else
			feaStructUI->trimSparButton->value(0);
	}
	else
	{
		feaStructUI->sparEditGroup->hide();
	}

	//===== Upper Skin ====//
	FeaSkin* upskin = feaMeshMgrPtr->GetCurrUpperSkin();
	if ( upskin && upskin->GetExportFlag() )
	{
		feaStructUI->upperSkinEditGroup->show();
		feaStructUI->upSkinExportNoButton->value(0);
		feaStructUI->upSkinExportYesButton->value(1);

		m_UpDefThickSlider->SetVal( upskin->GetDefaultThick() );
		m_UpDefThickSlider->UpdateGui();

		m_UpDensitySlider->SetVal( upskin->GetDensity() );
		m_UpDensitySlider->UpdateGui();

		FeaSpliceLine* sl = upskin->GetCurrSpliceLine();
		if ( sl )
		{
			m_UpSpliceLineLocSlider->SetVal( sl->m_PerSpan );
			m_UpSpliceLineLocSlider->UpdateGui();

			FeaSplice* splice = sl->GetEditSplice();
			if ( splice )
			{
				m_UpSpliceLocSlider->SetVal( splice->m_Pos );
				m_UpSpliceLocSlider->UpdateGui();
				m_UpSpliceThickSlider->SetVal( splice->m_Thick );
				m_UpSpliceThickSlider->UpdateGui();
			}
		}
	
		//==== Splice Line ID ====//
		sprintf( str, "        %d ", upskin->GetCurrSpliceLineID() );
		if ( (int)upskin->m_SpliceLineVec.size() == 0 )		
			sprintf( str, " " );
		feaStructUI->upSpliceLineIDInput->value(str);
	}
	else
	{
		feaStructUI->upperSkinEditGroup->hide();
		feaStructUI->upSkinExportNoButton->value(1);
		feaStructUI->upSkinExportYesButton->value(0);
		feaStructUI->upSpliceLineIDInput->value("");
	}

	m_UpSkinGLWin->setDrawBase( NULL );
	if ( upskin )
	{
		FeaSpliceLine* sl = upskin->GetCurrSpliceLine();
		if ( sl )
		{
			m_UpSkinGLWin->setDrawBase( sl );

			if ( sl->GetMode() == FeaSpliceLine::ADD_MODE )
				feaStructUI->upSkinAddSpliceButton->value(1);
			else
				feaStructUI->upSkinAddSpliceButton->value(0);
				
			if ( sl->GetMode() == FeaSpliceLine::DEL_MODE )
				feaStructUI->upSkinDelSpliceButton->value(1);
			else
				feaStructUI->upSkinDelSpliceButton->value(0);
		}
	}
	m_UpSkinGLWin->redraw();

	//===== Lower Skin ====//
	FeaSkin* lowskin = feaMeshMgrPtr->GetCurrLowerSkin();
	if ( lowskin && lowskin->GetExportFlag() )
	{
		feaStructUI->lowerSkinEditGroup->show();
		feaStructUI->lowSkinExportNoButton->value(0);
		feaStructUI->lowSkinExportYesButton->value(1);

		m_LowDefThickSlider->SetVal( lowskin->GetDefaultThick() );
		m_LowDefThickSlider->UpdateGui();

		m_LowDensitySlider->SetVal( lowskin->GetDensity() );
		m_LowDensitySlider->UpdateGui();

		FeaSpliceLine* sl = lowskin->GetCurrSpliceLine();
		if ( sl )
		{
			m_LowSpliceLineLocSlider->SetVal( sl->m_PerSpan );
			m_LowSpliceLineLocSlider->UpdateGui();

			FeaSplice* splice = sl->GetEditSplice();
			if ( splice )
			{
				m_LowSpliceLocSlider->SetVal( splice->m_Pos );
				m_LowSpliceLocSlider->UpdateGui();
				m_LowSpliceThickSlider->SetVal( splice->m_Thick );
				m_LowSpliceThickSlider->UpdateGui();
			}
		}
	
		//==== Splice Line ID ====//
		sprintf( str, "        %d ", lowskin->GetCurrSpliceLineID() );
		if ( (int)lowskin->m_SpliceLineVec.size() == 0 )		
			sprintf( str, " " );
		feaStructUI->lowSpliceLineIDInput->value(str);
	}
	else
	{
		feaStructUI->lowerSkinEditGroup->hide();
		feaStructUI->lowSkinExportNoButton->value(1);
		feaStructUI->lowSkinExportYesButton->value(0);
		feaStructUI->lowSpliceLineIDInput->value("");
	}

	m_LowSkinGLWin->setDrawBase( NULL );
	if ( lowskin )
	{
		FeaSpliceLine* sl = lowskin->GetCurrSpliceLine();
		if ( sl )
		{
			m_LowSkinGLWin->setDrawBase( sl );

			if ( sl->GetMode() == FeaSpliceLine::ADD_MODE )
				feaStructUI->lowSkinAddSpliceButton->value(1);
			else
				feaStructUI->lowSkinAddSpliceButton->value(0);
				
			if ( sl->GetMode() == FeaSpliceLine::DEL_MODE )
				feaStructUI->lowSkinDelSpliceButton->value(1);
			else
				feaStructUI->lowSkinDelSpliceButton->value(0);
		}
	}
	m_LowSkinGLWin->redraw();


	//==== Point Mass ====//
	FeaPointMass* pmass = feaMeshMgrPtr->GetCurrPointMass();
	if ( pmass )
	{
		feaStructUI->ptMassEditGroup->show();
		m_pmXPosSlider->SetVal( pmass->m_Pos.x() );
		m_pmYPosSlider->SetVal( pmass->m_Pos.y() );
		m_pmZPosSlider->SetVal( pmass->m_Pos.z() );
		m_pmXPosSlider->UpdateGui();
		m_pmYPosSlider->UpdateGui();
		m_pmZPosSlider->UpdateGui();

		//==== Point Mass ID ====//
		sprintf( str, "        %d ", feaMeshMgrPtr->GetCurrPointMassID() );
		if ( feaMeshMgrPtr->GetNumPointMasses() == 0 )		
			sprintf( str, " " );
		feaStructUI->ptMassIDInput->value(str);

		sprintf( str, "%f", pmass->m_AttachPos.x() );
		feaStructUI->XAttachInput->value( str );
		sprintf( str, "%f", pmass->m_AttachPos.y() );
		feaStructUI->YAttachInput->value( str );
		sprintf( str, "%f", pmass->m_AttachPos.z() );
		feaStructUI->ZAttachInput->value( str );
	}
	else
	{
		feaStructUI->ptMassEditGroup->hide();
		feaStructUI->ptMassIDInput->value("");
	}

	if ( feaMeshMgrPtr->GetDrawAttachPointsFlag() )
		feaStructUI->moveAttachPointButton->value( 1 );
	else
		feaStructUI->moveAttachPointButton->value( 0 );

	Stringc massname = feaMeshMgrPtr->GetFeaExportFileName( FeaMeshMgr::MASS_FILE_NAME );
	feaStructUI->massName->value( truncateFileName(massname, 40 ) );
	Stringc nastranname = feaMeshMgrPtr->GetFeaExportFileName( FeaMeshMgr::NASTRAN_FILE_NAME );
	feaStructUI->nastranName->value( truncateFileName(nastranname, 40 ) );
	Stringc geomname = feaMeshMgrPtr->GetFeaExportFileName( FeaMeshMgr::GEOM_FILE_NAME );
	feaStructUI->geomName->value( truncateFileName(geomname, 40 ) );
	Stringc thickname = feaMeshMgrPtr->GetFeaExportFileName( FeaMeshMgr::THICK_FILE_NAME );
	feaStructUI->thickName->value( truncateFileName(thickname, 40 ) );
	Stringc stlname = feaMeshMgrPtr->GetFeaExportFileName( FeaMeshMgr::STL_FEA_NAME );
	feaStructUI->stlName->value( truncateFileName(stlname, 40 ) );

}