Originariamente inviato da shodan
Una cosa del genere insomma (consideralo pseudo codice anche se non lo è)
codice:
void check_nodes(const Node& nd) {
if (nd.hasChildNodes()) {
NodeList ndlist = nd.getChildNodes();
for (long sz=0; sz<ndlist.getLength(); ++sz) {
Node znd = ndlist.getItem(sz);
wcout << znd.getNodeType()<< endl;
check_nodes(znd);
}
}
}
Ho un problema,si puo' trasformare questa funzione ricorsiva in una funzione non ricorsiva?
Perchè ho una classe Cimporter e una classe CColladaReader.
La classe Cimporter è una classe generica di importzione , che non dipende dalla classe ccolladareader , l'ho resa generica per poterla utilizzare su vari tipi di importazione , ad es .3ds(3dstudio) o x.
Nlla classe Cimporter tutto ha una logica del tipo:
codice:
void CImporter::ImportVertex()
{
//chiamo la funzione di reset dei vertici
m_pApi->VertexReset();
float x,y,z;
//finchè il reader mi restituisce true ho un vertice da importare
//esco quando non ci sono piu' vertici
for(int index = 0;m_pApi->NextVertex();index++)
{
if(m_pApi->ImportVertex(&x,&y,&z))
{
Vertex* v = new Vertex();
v->_x = x;
v->_y = y;
v->_z = z;
v->_nx = 0.;
v->_ny = 0.;
v->_nz = 0.;
m_CurrMeshVertexes.push_back(v);
}
}
}
dove m_pApi è una classe specifica dell'importatore incapsulata che ad es puo' essere Ccolladareader o C3dsreader ed è la classe che fa il lavoro di importazione grezzo dipendente dal tipo di file.Inizializzandp semplicemente la classe m_pApi ad una classe C3dsreader o Ccolladareader cambio il tipo di importazione mentre Cimporter rimane la stessa.
Ora:
Nei file 3d bisogna in genere ciclare lo scene graph che descrive l'oggetto e andare ad importare la geometria,il materiale e la posizione per ogni nodo di questo.
Vorrei utilizzare una struttura del tipo:
codice:
m_pApi->VertexReset();
for(int index = 0;m_pApi->NextVertex();index++)
{
if(m_pApi->ImportVertex(&x,&y,&z))
{
}
}
ma per ciclare i nodi nello scene graph ho una funzione ricorsiva , che non so controlare dalla logica di importazione(Cimporter) , è per questo che chiedo se è possibile rendere la funzione ricorsiva una fuunzione normale.
Grazie.
Grazie.