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 }
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; } } } } }