Datei durchsuchen
-
Hallo zusammen!
Hier ist mein Problem:
Ich möchte aus einer sog *.stl Datei Daten auslesen.
Die Datei kann folgendermaßen aussehen:solid KUGEL
facet normal -9.895664e-01 -1.422782e-01 -2.269740e-02
outer loop
vertex -4.797465e+01 -1.408663e+01 -3.450229e-15
vertex -4.829629e+01 -1.242608e+01 3.613960e+00
vertex -5.000000e+01 -3.061617e-15 0.000000e+00
endloop
endfacet
facet normal -9.912700e-01 -1.200656e-01 5.448027e-02
outer loop
vertex -4.829629e+01 -1.090258e+01 6.971515e+00
vertex -5.000000e+01 -3.061617e-15 0.000000e+00
vertex -4.829629e+01 -1.242608e+01 3.613960e+00
endloop
endfacet
facet normal -9.895789e-01 -1.422800e-01 2.213480e-02
outer loop
vertex -4.829629e+01 -1.241675e+01 -3.645888e+00
vertex -4.797465e+01 -1.408663e+01 -3.450229e-15
vertex -5.000000e+01 -3.061617e-15 0.000000e+00
endloop
endfacet
facet normal -9.912700e-01 -9.982869e-02 8.612836e-02
outer loop
vertex -4.829629e+01 -8.494057e+00 9.763157e+00
vertex -5.000000e+01 -3.061617e-15 0.000000e+00
vertex -4.829629e+01 -1.090258e+01 6.971515e+00
endloop
endfacet
.
.
.
.
endsolid KUGELIn diesem Format werden die Oberflächen von 3D Objekten als Dreiecksfacetten kodiert.
Für mein Programm benötige ich die Anzahl der Schlüsselwörter "vertex", mit der ich dann ein array von structs allozieren kann.
dann sollen die Koordinaten der Eckpunkte (die floats hinter "vertex" sind die
x,y,z,-Koordinaten der Eckpunkte) in die ensprechenden Positionen in der struct ausgelesen werden:entity[i].vertex1.x entity[i].vertex1.y usw.
Hier ist die Struktur:
struct point{ double x; double y; double z; }vertex1, vertex2, vertex3, intersection1, intersection2; typedef struct datastructure{ point vertex1; point vertex2; point vertex3; point intersection1; point intersection2; int checkvalue; }data; data* entity; entity = (data*)calloc(NumberOfTriangels, sizeof(data));
Da ich nicht besonders viel Erfahrung mit Dateioperationen habe, wäre ich für Denkanstöße und Wegweiser in die richtige Richtung sehr dankbar!
-
martin2 schrieb:
Hier ist die Struktur:
struct point{ double x; double y; double z; }vertex1, vertex2, vertex3, intersection1, intersection2; // 1. typedef struct datastructure{ point vertex1; point vertex2; point vertex3; point intersection1; point intersection2; int checkvalue; }data; data* entity; entity = (data*)calloc(NumberOfTriangels, sizeof(data));
Hat das einen Grund, warum du 5 Instanzen der ersten Struktur anlegst (-> .1), die zufälligerweise genauso heißen, wie die member der 2. Struktur?
Noch ein Tip: Benenne Strukturen mit Gropßbuchstaben am Anfang (oder komplett groß - was ich persönlich nicht so schön finde) und deren Instanzen mit Kleinbuchstabgen
zu deinem eigendlichen Problem.
fopen um datei zu öffnen
fgets zum zeilenweisen einlesen
strstr zum testen, ob "vertex" in der zeile vorkommtclose zum schließen
-
Erstmal Danke!
strstr ist die Funktion nach der ich gesucht habe.
Und was die Instanzierungen angeht, das geht natürlich so:
struct point{ double x; double y; double z; }; typedef struct datastructure{ point vertex1; point vertex2; point vertex3; point intersection1; point intersection2; int checkvalue; }data; data* entity; entity = (data*)calloc(NumberOfTriangels, sizeof(data));
Das waren noch Artefakte vom herumprobieren...peinlich.
Sowas passiert eben, wenn man mitten in der Nacht Programmiert.
-
Für mein Programm benötige ich die Anzahl der Schlüsselwörter mit der ich dann ein array allozieren kann.
dann sollen die Koordinaten der Eckpunkte ausgelesen werdenJe nachdem wie umfangreich deine Meshes sind, moechtest Du evtl dynamische Datenstrukturen verwenden um die Datei nicht zweimal parsen oder im Speicher halten zu muessen.
"datastructure" ist eine hervorragende Bezeichnung fuer eine Datenstruktur