class Loader
{
public:
Loader();
Initialize(baseDocument);
private:
var basicDocument;
GetDataSize(path);
}
struct LoaderObj
{
var path;
var x;
var y;
var z;
LoaderObj(path,x,y,z);
}
LoaderObj::LoaderObj(ppath,px,py,pz)
{
// Construct
path = ppath;
x = px;
y = py;
z = pz;
}
Loader::Loader(){}
Loader::Initialize(baseDocument)
{
basicDocument = baseDocument;
println("Loading Objects");
var LookUpFile = GeGetStartupPath();
LookUpFile->AddLast("objects.txt");
var modelStructArray = new(array,int(GetDataSize("objects.txt")));
var file = new(BaseFile);
file->Open(LookUpFile, GE_READ);
var mode = 1; //mode für struct lesen 1 steht für pfad, 2 ist x, 3 y, 4z etc.
var currentPath = "";
var currentX = "";
var currentY = "";
var currentZ = "";
var i = 0; //Pseudo Zählschleife für die Objektstrukturen
while(file->GetPosition()<file->GetLength())
{
var currentChar = file->ReadString(1);
if(currentChar=="?")
{
if(mode>3) //nächstes Object
{
//alles wegspeichern
var temp = new(LoaderObj,currentPath,currentX,currentY,currentZ);
modelStructArray[i] = temp;
mode=1;
i++;
currentPath = "";
currentX = "";
currentY = "";
currentZ = "";
}
else
{
mode++;
}
}
else
{
switch(mode)
{
case 1 : currentPath = stradd(currentPath,currentChar); break;
case 2 : currentX = stradd(currentX,currentChar); break;
case 3 : currentY = stradd(currentY,currentChar); break;
case 4 : currentZ = stradd(currentZ,currentChar); break;
}
}
}
//Modelle ins aktuelle Project laden
for (i=0; i<sizeof(modelStructArray); i++)
{
var filename = GeGetStartupPath();
filename->SetFullString(tostring(modelStructArray[i]->path));
if(LoadDocument(filename))
{
println("import ",stradd(modelStructArray[i]->path,"|",modelStructArray[i]->x,"|",modelStructArray[i]->y,"|",modelStructArray[i]->z));
//das aktuelle Dokument ist das geladene File
var currentDoc = GetActiveDocument()->GetFirstObject()->GetClone(CL_NO_BITS);
basicDocument->InsertObject(currentDoc,NULL,NULL);
currentDoc->SetPosition(vector(evaluate(modelStructArray[i]->x),evaluate(modelStructArray[i]->y),evaluate(modelStructArray[i]->z)));
KillDocument(GetActiveDocument());
}
else
{
println("no import possible");
}
}
}
Loader::GetDataSize(path)
{
//file einmal durchlaufen und gucken, wie viele Modelle drin sein könnten um
//dementsprechend ein array zu erstellen :-S
var LookUpFile = GeGetStartupPath();
var MarkCount = 0;
LookUpFile->AddLast(path);
var file = new(BaseFile);
file->Open(LookUpFile, GE_READ);
while(file->GetPosition()<file->GetLength())
{
var currentChar = file->ReadString(1);
if(currentChar=="?")
{
MarkCount++;
}
}
//return / die anzahl der Parameter, die man so hat
return (MarkCount + 1/*wegen dem ersten Fragezeichen, was ja nich mit drin ist*/) / 4;
}