Ldraw Loader Linetype1 Rekursiv? Objektorientiert?
-
Hallo,
schreibe gerade einen Loader für die Ldraw files
hab ne Klasse Brick, in der ich 5 Structs habe, und Koordinaten speichere
für die verschiedenen Linetypesder Linetype 1 macht mir blos zu schaffen
Er beinhaltet Koordinaten für ein Subfile das wiederum die 5 Linetypes
enthält//Linetype 1 ist so aufgebaut
// 1 <colour> x y z a b c d e f g h i <file>hat das von euch jemand schon mal gemacht?
wie löse ich das am Besten in einer Funktion oder Rekursion?Rekursiv(Methode Load File in Klasse Object beim Linetype 1 einfach nochmal aufrufen?
mit Übergabe vom Subfile? wie weis ich dann zu welchem File die
richtigen Koordinaten gehören? )wäre es am Besten eine Klasse File und eine Klasse Objekt
zu modelieren? wie unterscheide ich zwischen Sub und normalem File?
in meinen Koordinatenmuss ich eine Baumstruktur bilden?
ginge es bei den Structs ein 2 Dimensionales Array zu Bilden
z.b. 1.Dim FileNummer 2. Dimension Anzahl Lines?habs mal so aufgebaut
class Object { private: struct LineType1 { // 1 <colour> x y z a b c d e f g h i <file> unsigned int LineType; unsigned int Color; unsigned int anzahl; GLfloat x,y,z,a,b,c,d,e,f,g,h,i; string subfile; }; struct LineType2 { unsigned char LineType; unsigned char Color; unsigned char anzahl; float x1,y1,z1, x2,y2,z2; }; struct LineType3 { unsigned char LineType; unsigned char Color; unsigned char anzahl; float x1,y1,z1, x2,y2,z2, x3,y3,z3; }; struct LineType4 { unsigned char LineType; unsigned int Color; unsigned char anzahl; GLfloat x1,y1,z1, x2,y2,z2, x3,y3,z3, x4,y4,z4; }; LineType1 lt1[300]; LineType2 lt2[300]; LineType3 lt3[300]; LineType4 lt4[300]; public: Object(){}; ~Object(){}; void load (/*ifstream Quelldatei*/) {Fragen über Fragen
Gruß Matthias
-
Also, wenn du weisst, was in den Files steht, brauchst du ja nicht gross eine Rekursion zu machen. Sofern die Subfiles ja nicht schon wieder (unbestimmt viele) Subfiles haben können, dann liest du einfach da erste File ein, weisst nachher, wie viel Subfiles es hat und kannst dann dem entsprechend einlesen.
Wenn du aber eine Unbestimmte Anzahl Subfiles hast, die wieder Subfiles haben usw. Dann kommst du kaum um Rekursion rum und brauchst (am ehesten ) eine schöne Klasse, um so ein Objekt darzustellen.
In Code also in etwa so:
class file { ... std::vector<file> subfiles; public: void load (std::string); };Dann fängst du einfach mal bei dem ersten Objekt an, und dann füllst du den vector, wo du dann auch wieder load aufrufst, dann geht das alles bis hinunter.
Hoffe, dass das in etwa das war, was du suchst.

-
Hi,
danke für die Antwort!
Die Subfiles haben unbestimmt viele neue Subfiles!also in der Klasse File dann die 5 Structs?
In der Klasse Objekt dann ein Array vom Typ File
wo dann die Koordinaten am Ende drinstehen?wie rufe ich vom Subfile ein neues Subfile aus?
einfach in der Methode Load nochmal Load ausführen?
benötige ich einen Stack oder einen Vector um die Subfiles zu verwaltenwas tun wenn ein Subfile schon mal geladen ist?
es würde sich ja dann nur die Matrixtransformation und Skalierung ändern!
Gruß Matthias
-
Also ich würde das mal so machen, dass ich einfach alles in ein File schreiben würde (Textbassiert) und dann hald je nachdem das noch nachfolgend speichern.
file1 daten file1 daten subfile daten subfile daten subsubfile ... file2 daten file2Wenn du jeweils weisst, wie viele nachher kommen, dann ist das kein Problem das so abzuspeichern.
-
das ist eben unbestimmt...
-
MatthiasA schrieb:
das ist eben unbestimmt...
Dann kannst du es eben nicht einlesen.

Ich weiss jetzt ja nicht, was das für ein Format ist, aber du kannst ja zuerst die Daten des Files angeben und dann gibts du an, wie viele Subfiles kommen, dann kannst du weitermachen. Bei der Ausgabe der Files weisst du ja, wie viele das vorhanden sind und kannst dementsprechend die Infos liefern, die nötig sind, um richtig zu speichern.Um das mal an meinem Beispiel zu zeigen:
file1 1 daten file1 2 // 2 subfiles; erstes einlesen, dann kommt nichts mehr daten subfile 0 // 0 subfiles daten subfile 1 // 1 subfile, also nächste element einfügen und laden daten subsubfile 0 //wieder 0 subfiles ... file2 1 daten file2 0 // 0 subfiles
-
ich komme weiter
thx