ciao.
Ho un xml con dei dati gerarchici di nodi , e ho un api che mi permette di scorrere questi nodi
ad es:
domNodes = m_CurrentNode->getNode_array();
m_currentNode è una variabile del nodo corrente dell' api e getNode_array una funzione dell'api.
Io ho creato una funzione per creare pari passo la stessa gerarchia pero con un grafo di oggetti di un altra api ,(serve per uno scenegraph di un applicazione grafica in cui i nodi vanno in un grafo detto appunto scenegraph per vari motivi)

la segunete funzione:

codice:
bool CColladaReaderTriangles::NextSceneNode(int nType, Wm4::NodePtr* pkNodeParent, Wm4::NodePtr* pkNode, Wm4::NodePtr* pkNodeOut, Transformation& T)
{

	int nSkin = 0;
	if(nType == IMPORTER_COLLADA_SKINNED_MESH)
		nSkin = 1;
	if(m_ListNode.size() <= nSkin)
		return false;

	domNode_Array domNodes ;

	int i=0;
	while(m_ListNode.size()){
	
		m_CurrentNode = m_ListNode.front();
		pkNodeParent = m_ListNodeScene.front();
		
		if(!IsNodeVisited(m_CurrentNode))
		{
			pkNodeOut = new NodePtr();
			*pkNodeOut = new Node();
			(*pkNodeOut)->SetName(m_CurrentNode->getId());
			*pkNode = *pkNodeOut;
			GetMatrixComponent(m_CurrentNode, T);
			
			(*pkNodeParent)->AttachChild(*pkNodeOut);
			
			m_ListNode.pop_front();
			m_ListNodeScene.pop_front();
		
			m_ListNode.push_front(m_CurrentNode);
			m_ListNodeScene.push_front(pkNodeOut);
			
			
			return true;		
		}
		domNodes = m_CurrentNode->getNode_array();

		for(int i = 0; i< domNodes.getCount();i++)
			if(!IsNodeVisited(domNodes.get(i)) )
			{
				m_CurrentNode = domNodes.get(i);
				pkNodeOut = new NodePtr();
				*pkNodeOut = new Node();
				(*pkNodeOut)->SetName(m_CurrentNode->getId());
				
				*pkNode = *pkNodeOut;
				GetMatrixComponent(m_CurrentNode, T);
				
				string str=(*pkNodeParent)->GetName();
				(*pkNodeParent)->AttachChild(*pkNodeOut);
	
				m_ListNode.push_front(m_CurrentNode);
				m_ListNodeScene.push_front(pkNodeOut);

				if ( i >domNodes.getCount())
				{
					m_ListNode.pop_front();
					m_ListNodeScene.pop_front();
			
				}
				return true;
			}	else{}	

			m_ListNode.pop_front();
			m_ListNodeScene.pop_front();
			
	}

	return false;
}
viene richiamata all interno di un while: in piu passi ,per creare passo passo la struttura e utilizzare i parametri che "escono" dalla funzione per "riempirli"
[code]
NextSceneNode(int nType, Wm4::NodePtr* pkNodeParent, Wm4::NodePtr* pkNode, Wm4::NodePtr* pkNodeOut, Transformation& T)
//carico i nodi per il primo passo
LoadMesh(pkNodeOut)//riempie dei vector con i dati della mesh

(*pkNodeCurrent)->Local.SetTranslate(T.GetTranslate());// il problema è qui;
(*pkNodeCurrent)->Local.SetMatrix(T.GetMatrix());//il problema è qui

[code]

quando assegno a (*pkNodeCurrent)->Local.SetTranslate(T.GetTranslate());// la translazione letta anch' essa dalla funzione base i dati sono corretti , tutto è ok , solo che pkNodeCurrent viene ripassato alla funzione dal while e viene quindi sovrascritta(e perdo quindi tutti i dati che erano stati settati fuori dalla funzione).

So che potrei fare una copia bit per bit della var T , ma volevo chiedere a voi come è maglio fare , magari ho commesso molti errori e c'è un modo piu semplice.
Chiedo a voi .
Ciao.