bool ParmLinkMgr::LinkAllGroup() { Parm* pA = m_WorkingParmLink.GetParmA(); Parm* pB = m_WorkingParmLink.GetParmB(); if ( pA->get_geom_base() == pB->get_geom_base() ) return false; string gnameA = string( pA->get_group_name().get_char_star() ); string gnameB = string( pB->get_group_name().get_char_star() ); vector< Parm* > parmAVec = GetParmVec( pA->get_geom_base(), gnameA ); vector< Parm* > parmBVec = GetParmVec( pB->get_geom_base(), gnameB ); for ( int k = 0 ; k < (int)parmAVec.size() ; k++ ) { for ( int n = 0 ; n < (int)parmBVec.size() ; n++ ) { Parm* parmA = parmAVec[k]; Parm* parmB = parmBVec[n]; if ( parmA->get_name() == parmB->get_name() ) { AddLink( parmA, parmB ); } } } return true; }
void ParmLinkMgr::SwapGeom( Geom* gOld, Geom* gNew ) { for ( int i = 0 ; i < (int)m_ParmLinkVec.size() ; i++ ) { Parm* pA = m_ParmLinkVec[i]->GetParmA(); if ( pA->get_geom_base() == gOld ) { Stringc group_name = pA->get_group_name(); Stringc parm_name = pA->get_name(); Parm* p = FindParm( gNew, group_name, parm_name ); if ( p ) m_ParmLinkVec[i]->SetParmA( p ); } Parm* pB = m_ParmLinkVec[i]->GetParmB(); if ( pB->get_geom_base() == gOld ) { Stringc group_name = pB->get_group_name(); Stringc parm_name = pB->get_name(); Parm* p = FindParm( gNew, group_name, parm_name ); if ( p ) m_ParmLinkVec[i]->SetParmB( p ); } m_ParmLinkVec[i]->GetParmA()->set_linked_flag( true ); m_ParmLinkVec[i]->GetParmB()->set_linked_flag( true ); } }
void ParmLinkMgr::LoadAllParms() { //==== Clear All Existing Parms ====// map< GeomBase*, map< string, vector< Parm* > > >::iterator g; map< string, vector<Parm*> >::iterator itr; for ( g = m_ParmMap.begin() ; g != m_ParmMap.end() ; g++ ) { for ( itr = g->second.begin() ; itr != g->second.end() ; itr++ ) { itr->second.clear(); } g->second.clear(); } m_ParmMap.clear(); if ( aircraftPtr == NULL ) return; //==== Loop Thru All Geoms ====// vector< Geom* > geomVec = aircraftPtr->getGeomVec(); geomVec.push_back( aircraftPtr->getUserGeom() ); for ( int i = 0 ; i < (int)geomVec.size() ; i++ ) { vector < Parm* > parmVec; geomVec[i]->LoadLinkableParms( parmVec ); for ( int j = 0 ; j < (int)parmVec.size() ; j++ ) { Parm* p = parmVec[j]; p->set_linked_flag( false ); Register( p, p->get_geom_base(), p->get_group_name().get_char_star() ); } } }
void ParmLinkScreen::update() { int i; char str[256]; ParmLink* currLink = parmLinkMgrPtr->GetCurrParmLink(); if ( currLink->GetParmA() == NULL || currLink->GetParmB() == NULL ) currLink = parmLinkMgrPtr->ResetWorkingParmLink(); //==== Geom Names A ====// parmLinkUI->compAChoice->clear(); vector< string > geomNameVecA; int indA = parmLinkMgrPtr->GetCurrGeomNameVec( currLink->GetParmA(), geomNameVecA ); for ( i = 0 ; i < (int)geomNameVecA.size() ; i++ ) { sprintf( str, "%d-%s", i, geomNameVecA[i].c_str() ); parmLinkUI->compAChoice->add( str ); } //parmLinkUI->compAChoice->add( geomNameVecA[i].c_str() ); parmLinkUI->compAChoice->value( indA ); //==== Group Names A ====// parmLinkUI->groupAChoice->clear(); vector< string > groupNameVecA; indA = parmLinkMgrPtr->GetCurrGroupNameVec( currLink->GetParmA(), groupNameVecA ); for ( i = 0 ; i < (int)groupNameVecA.size() ; i++ ) parmLinkUI->groupAChoice->add( groupNameVecA[i].c_str() ); parmLinkUI->groupAChoice->value( indA ); //==== Parm Names A =====// parmLinkUI->parmAChoice->clear(); vector< string > parmNameVecA; indA = parmLinkMgrPtr->GetCurrParmNameVec( currLink->GetParmA(), parmNameVecA ); for ( i = 0 ; i < (int)parmNameVecA.size() ; i++ ) parmLinkUI->parmAChoice->add( parmNameVecA[i].c_str() ); parmLinkUI->parmAChoice->value( indA ); //==== Geom Names B ====// parmLinkUI->compBChoice->clear(); vector< string > geomNameVecB; int indB = parmLinkMgrPtr->GetCurrGeomNameVec( currLink->GetParmB(), geomNameVecB ); for ( i = 0 ; i < (int)geomNameVecB.size() ; i++ ) { sprintf( str, "%d-%s", i, geomNameVecB[i].c_str() ); parmLinkUI->compBChoice->add( str ); } // parmLinkUI->compBChoice->add( geomNameVecB[i].c_str() ); parmLinkUI->compBChoice->value( indB ); //==== Group Names B ====// parmLinkUI->groupBChoice->clear(); vector< string > groupNameVecB; indB = parmLinkMgrPtr->GetCurrGroupNameVec( currLink->GetParmB(), groupNameVecB ); for ( i = 0 ; i < (int)groupNameVecB.size() ; i++ ) parmLinkUI->groupBChoice->add( groupNameVecB[i].c_str() ); parmLinkUI->groupBChoice->value( indB ); //==== Parm Names B =====// parmLinkUI->parmBChoice->clear(); vector< string > parmNameVecB; indB = parmLinkMgrPtr->GetCurrParmNameVec( currLink->GetParmB(), parmNameVecB ); for ( i = 0 ; i < (int)parmNameVecB.size() ; i++ ) parmLinkUI->parmBChoice->add( parmNameVecB[i].c_str() ); parmLinkUI->parmBChoice->value( indB ); //===== Update Offset ====// parmLinkUI->offsetButton->value(1); m_OffsetSlider->Activate(); if ( !currLink->GetOffsetFlag() ) { parmLinkUI->offsetButton->value(0); m_OffsetSlider->Deactivate(); } m_OffsetSlider->SetVal( currLink->GetOffset() ); m_OffsetSlider->UpdateGui(); //===== Update Scale ====// parmLinkUI->scaleButton->value(1); m_ScaleSlider->Activate(); if ( !currLink->GetScaleFlag() ) { parmLinkUI->scaleButton->value(0); m_ScaleSlider->Deactivate(); } m_ScaleSlider->SetVal( currLink->GetScale() ); m_ScaleSlider->UpdateGui(); //===== Update Lower Limit ====// parmLinkUI->lowerLimitButton->value(1); m_LowerLimitSlider->Activate(); if ( !currLink->GetLowerLimitFlag() ) { parmLinkUI->lowerLimitButton->value(0); m_LowerLimitSlider->Deactivate(); } m_LowerLimitSlider->SetVal( currLink->GetLowerLimit() ); m_LowerLimitSlider->UpdateGui(); //===== Update Upper Limit ====// parmLinkUI->upperLimitButton->value(1); m_UpperLimitSlider->Activate(); if ( !currLink->GetUpperLimitFlag() ) { parmLinkUI->upperLimitButton->value(0); m_UpperLimitSlider->Deactivate(); } m_UpperLimitSlider->SetVal( currLink->GetUpperLimit() ); m_UpperLimitSlider->UpdateGui(); //==== Update Link Browser ====// parmLinkUI->linkBrowser->clear(); static int widths[] = { 75,75,90,20,75,75,80,0 }; // widths for each column parmLinkUI->linkBrowser->column_widths(widths); // assign array to widget parmLinkUI->linkBrowser->column_char(':'); // use : as the column character sprintf( str, "@[email protected]_A:@[email protected]:@[email protected]:->:@[email protected]_B:@[email protected]:@[email protected]" ); parmLinkUI->linkBrowser->add( str ); vector< ParmLink* > parmLinkVec = parmLinkMgrPtr->GetParmLinkVec(); for ( i = 0 ; i < (int)parmLinkVec.size() ; i++ ) { Parm* pa = parmLinkVec[i]->GetParmA(); Parm* pb = parmLinkVec[i]->GetParmB(); sprintf( str, "%s:%s:%s:->:%s:%s:%s", pa->get_geom_base()->getName().get_char_star(), pa->get_group_name().get_char_star(), pa->get_name().get_char_star(), pb->get_geom_base()->getName().get_char_star(), pb->get_group_name().get_char_star(), pb->get_name().get_char_star() ); parmLinkUI->linkBrowser->add( str ); } int index = parmLinkMgrPtr->GetCurrParmLinkIndex(); if ( index >= 0 && index < (int)parmLinkVec.size() ) parmLinkUI->linkBrowser->select( index+2 ); parmLinkUI->UIWindow->redraw(); for ( int i = 0 ; i < (int)m_ParmButtonVec.size() ; i++ ) { m_ParmButtonVec[i]->update(); } }
void PHolderListMgr::WritePHolderListXDDM( char *newfile ) { xmlDocPtr doc = xmlNewDoc((const xmlChar *)"1.0"); xmlNodePtr model_node = xmlNewNode(NULL,(const xmlChar *)"Model"); xmlDocSetRootElement(doc, model_node); xmlSetProp( model_node, (const xmlChar *)"ID", (const xmlChar *)aircraftPtr->getFileName().get_char_star() ); xmlSetProp( model_node, (const xmlChar *)"Modeler", (const xmlChar *)"OpenVSP" ); xmlSetProp( model_node, (const xmlChar *)"Wrapper", (const xmlChar *)"wrap_vsp.csh" ); for ( int i = 0 ; i < (int)m_PHolderVec.size() ; i++ ) { Parm* p = m_PHolderVec[i]->getParm(); xmlNodePtr var_node; if( m_PHolderVec[i]->getDesType() == XDDM_VAR ) var_node = xmlNewChild( model_node, NULL, (const xmlChar *)"Variable", NULL ); else var_node = xmlNewChild( model_node, NULL, (const xmlChar *)"Constant", NULL ); char varname[255]; sprintf( varname, "%d:%s:%s:%s", ((Geom*)p->get_geom_base())->getPtrID(), p->get_geom_base()->getName().get_char_star(), p->get_group_name().get_char_star(), p->get_name().get_char_star() ); xmlSetProp( var_node, (const xmlChar *)"ID", (const xmlChar *)varname ); xmlSetDoubleProp( var_node, "Value", p->get() ); xmlSetDoubleProp( var_node, "Min", p->get_lower() ); xmlSetDoubleProp( var_node, "Max", p->get_upper() ); xmlSetProp( var_node, (const xmlChar *)"VSPVarName", (const xmlChar *)varname ); } //===== Save XML Tree and Free Doc =====// xmlSaveFormatFile((const char *)newfile, doc, 1); xmlFreeDoc( doc ); }
void PHolderListMgr::WritePHolderListDES( char *newfile ) { FILE *fp; fp = fopen( newfile, "w" ); fprintf( fp, "%d\n", (int)m_PHolderVec.size() ); for ( int i = 0 ; i < (int)m_PHolderVec.size() ; i++ ) { Parm *p = m_PHolderVec[i]->getParm(); fprintf( fp, "%d:%s:%s:%s: %g\n", ((Geom*)p->get_geom_base())->getPtrID(), p->get_geom_base()->getName().get_char_star(), p->get_group_name().get_char_star(), p->get_name().get_char_star(), p->get() ); } fclose( fp ); }