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 KUGEL

    In 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 vorkommt

    close 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 werden

    Je 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 🙂


Anmelden zum Antworten