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.