Пример #1
0
void ParmLinkMgr::AddLink( Parm* pA, Parm* pB )
{
	//==== Make Sure Parm Are Not Already Linked ====//
	for ( int i = 0 ; i < (int)m_ParmLinkVec.size() ; i++ )
	{
		if ( m_ParmLinkVec[i]->GetParmA() == pA && 
			 m_ParmLinkVec[i]->GetParmB() == pB  )
		{
			return;
		}
	}

	ParmLink* pl = new ParmLink();

	pl->SetParmA( pA );
	pl->SetParmB( pB );
	pl->SetOffsetFlag( true );
	pl->SetOffset( pB->get() - pA->get() );
	pl->SetScaleFlag( false );
	pl->SetScale( 1.0 );

	pA->set_linked_flag( true );
	pB->set_linked_flag( true );

	m_ParmLinkVec.push_back( pl );
	m_CurrParmLinkIndex = (int)m_ParmLinkVec.size() - 1;

	m_ParmLinkMap[pl->GetParmA()].push_back( pl );
	ParmChanged( pl->GetParmA(), true );				// Trigger Update
}
Пример #2
0
void ParmLinkMgr::ReadLinks(xmlNodePtr root, vector< Geom* > & geomVec)
{
	vector< Geom* > gVec = geomVec;
	gVec.push_back( aircraftPtr->getUserGeom() );

	xmlNodePtr node_list = xmlGetNode( root, "ParmLink_List", 0 );
	if ( node_list  )
	{
		int num_links = xmlGetNumNames( node_list, "Link" );
		for ( int i = 0 ; i < num_links ; i++ )
		{
			xmlNodePtr link_node = xmlGetNode( node_list, "Link", i );
			if ( link_node )
			{
				int geomA_id = xmlFindInt( link_node, "GeomA", 0 );
				Stringc groupA_name = Stringc( xmlFindString( link_node, "GroupA", " " ) );
				Stringc parmA_name =  Stringc( xmlFindString( link_node, "ParmA", " " ) );

				Parm* parmA = FindParm( gVec, geomA_id, groupA_name, parmA_name );

				int geomB_id = xmlFindInt( link_node, "GeomB", 0 );
				Stringc groupB_name = Stringc( xmlFindString( link_node, "GroupB", " " ) );
				Stringc parmB_name = Stringc( xmlFindString( link_node, "ParmB", " " ) );

				Parm* parmB = FindParm( gVec, geomB_id, groupB_name, parmB_name );


				if ( parmA && parmB )
				{
					ParmLink* pl = new ParmLink();

					pl->SetParmA( parmA );
					pl->SetParmB( parmB );

					pl->SetOffsetFlag( !!xmlFindInt( link_node, "OffsetFlag", 0 ) );
					pl->SetOffset( xmlFindDouble( link_node, "Offset", 0.0 ) );
					pl->SetScaleFlag( !!xmlFindInt( link_node, "ScaleFlag", 0 ) );
					pl->SetScale( xmlFindDouble( link_node, "Scale", 1.0 ) );

					pl->SetLowerLimitFlag( !!xmlFindInt( link_node, "LowerLimitFlag", 0 ) );
					pl->SetLowerLimit( xmlFindDouble( link_node, "LowerLimit", 0.0 ) );
					pl->SetUpperLimitFlag( !!xmlFindInt( link_node, "UpperLimitFlag", 0 ) );
					pl->SetUpperLimit( xmlFindDouble( link_node, "UpperLimit", 0.0 ) );

					pl->GetParmA()->set_linked_flag( true );
					pl->GetParmB()->set_linked_flag( true );

					m_ParmLinkVec.push_back( pl );
					m_CurrParmLinkIndex = (int)m_ParmLinkVec.size() - 1;
				}
			}
		}
	}
}