codice:
void CSketchupReader::SceneNodeReset(CNodeImporter* pNode, ISkpEntityProvider* pEntityProvider, bool bInit)
{
	vector<ISkpEntityProvider*>* pProvChild = new vector<ISkpEntityProvider*>();
		
	if(bInit){

		HRESULT hr = m_doc->QueryInterface(&pEntityProvider);
		long nElem = 0;
		CComPtr<ISkpComponentInstances> pInstances = NULL;
		pEntityProvider->get_ComponentInstances(&pInstances);

		pInstances->get_Count(&nElem);
		
		for(int i = 0; i < nElem; i++){
		
			CComPtr<ISkpComponentInstance> pInstance = NULL;
			hr = pInstances->get_Item(i, &pInstance.p);

			CComPtr<ISkpComponentDefinition> pDef;
			pInstance->get_ComponentDefinition(&pDef);
        
			ISkpEntityProvider * pProvider = NULL;
			pDef->QueryInterface(__uuidof(ISkpEntityProvider), (void**) &pProvider);
		
			CNodeImporter* pNodeChild = GetChildNodeImporter(pEntityProvider,i);
			
			pProvChild->push_back(pEntityProvider);
		
		}
	}
	if(!bInit){
		pProvChild = GetChildNodes(pEntityProvider);
	}
	
	for ( int i = 0; i < pProvChild->size(); i++)
	{
		pEntityProvider = (*pProvChild)[i];
		if(GetChildNodes(pEntityProvider)->empty()){	
			CNodeImporter* pNodeChild = GetChildNodeImporter(pEntityProvider,i);
			pNode->Insert(pNodeChild);
			
		}	
		else{
			CNodeImporter* pNodeChild = GetChildNodeImporter((*pProvChild)[i],i);
			pNode->Insert(pNodeChild);	
			pNode = pNodeChild;
			SceneNodeReset(pNode, (*pProvChild)[i], false); // ----->>>problema
			
		}
	}
}

questa è la funzione incriminata.
il problema è col parametro pNode che deve sempre essere il padre del nodo che andro' ad aggiungere , in modo da formare un albero uguale a quello delle istanze.
ho il seguente semplice albero:


->nodo1 ->nodo2
->nodo3

all'inizio è corretto , entro in questa funzione:
codice:
else{
			CNodeImporter* pNodeChild = GetChildNodeImporter((*pProvChild)[i],i);
			pNode->Insert(pNodeChild);	
			pNode = pNodeChild;
			SceneNodeReset(pNode, (*pProvChild)[i], false); // ----->>>problema
			
		}
perchè ho un nodo con figli ,
poi passa qui erchè nodo2 non ha figli :
codice:
if(GetChildNodes(pEntityProvider)->empty()){	
			CNodeImporter* pNodeChild = GetChildNodeImporter(pEntityProvider,i);
			pNode->Insert(pNodeChild);
			
		}
e aggiunge correttamente a nodo1 nodo2 , poi pero' sbaglio , perchè in questa chiamata a funzione:
codice:
SceneNodeReset(pNode, (*pProvChild)[i], false);
                             |->pnode era pnode1 e ritorna pnode1
solo che dovrei aggiungerlo alla root node3 mentre va a finire che lo aggiungo a node1.
ho provato e riprovato una soluzione ma non ci salto fuori.
ciao.