Procedendo mi è venuto in mente un metodo diverso:
dato che l'imortazione tratta gli stessi oggetti(materiali , shell , luci, vertici ,facce ecc..)in maniera diversa(un file 3ds è diverso da un file maya) ho pensato di procedere cosi:
codice:
Class C3ds:Creader
{
bool nextShell()
{
if(fineimportazioneshell)
return false;
else
return true
}
void importShell(CString shellid,CString material ecc...)
{
estraggo dal file con il procedimento che piu mi aggrada la shell corrente
}
}
e una classe generale per tutti i formati con incapsulata una variabile CReader(pApi) specifica dell importatore scelto
codice:
Class CImportFile
{
for (pApi->nextSHell)
{
CString strShellid,strMaterial;
pApi->ImportSHell(&shellid,&material)
{
inserisco nella mia classe poligono la shell , il materiale ecc...
}
}
pApi->ImportMaterial()
}
In questo modo una volta che si sceglie il tipo di file da importare si lascia la logica all implementazione del creader(C3ds,cMaya ecc...)
Il problema ed è quello per cui sto postando è che questa logica si presta bene all'importazione dati da un database , in cui posso sapere in maniera semplice il numero di oggetti da importare e il "titrare fuori i dati" per quel tipo di oggetti .
In un file come ad es. 3ds la logica del tirare fuori i dati è un po piu complessa , il file deve essere attraversato tutto per leggere i dati e il tornare indietro mi sembra una brutta pratica.
Potrei usare degli array per memorizzare i vari tipi di oggetto in maniera grezza e poi raffinare l'estrazione nel Creader.
insomma , mi sembra che il mio metodo mal si presti ai file sequenziali.
Voi cosa mi consigliate?