Beispiel #1
0
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;
}
Beispiel #2
0
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 );
	}
}
Beispiel #3
0
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 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 );
}
Beispiel #5
0
void ParmLinkScreen::RemoveAllRefs( GeomBase* gPtr )
{
	vector< ParmButton* > tempVec;

	for ( int i = 0 ; i < (int)m_ParmButtonVec.size() ; i++ )
	{
		Parm* p =  m_ParmButtonVec[i]->get_parm_ptr();
		if ( p && p->get_geom_base() != gPtr )
			tempVec.push_back( m_ParmButtonVec[i] );
	}
	m_ParmButtonVec = tempVec;
}
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 );
}
Beispiel #7
0
bool ParmLinkMgr::LinkAllComp()
{
	Parm* pA =  m_WorkingParmLink.GetParmA();
	Parm* pB =  m_WorkingParmLink.GetParmB();

	if ( pA->get_geom_base() == pB->get_geom_base() )
		return false;

	//==== For All Parms in GeomA, Try to Find Match in GeomB and Link ====//
	vector< string > groupAVec = GetGroupNameVec( pA->get_geom_base() );
	vector< string > groupBVec = GetGroupNameVec( pB->get_geom_base() );

	for ( int i = 0 ; i < (int)groupAVec.size() ; i++ )
	{
		for ( int j = 0 ; j < (int)groupBVec.size() ; j++ )
		{
			if ( groupAVec[i].compare( groupBVec[j] ) == 0 )
			{
				vector< Parm* > parmAVec = GetParmVec( pA->get_geom_base(), groupAVec[i] );
				vector< Parm* > parmBVec = GetParmVec( pB->get_geom_base(), groupBVec[j] );

				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;
}
Beispiel #8
0
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();
	}
}