Hilfe bei Projekt: Programmierung VDA-Flächenschnittstelle



  • Na gut, war wohl ein schlechter Start meinerseits.
    Also das erste Problem an dem ich gerade hänge, ist das Verstehen des Aufbaus der .vda Datei. Ich habe mir diese durch das CAD-Programm Creo 3.0 beispielhaft erstellt. Ein Würfel mit Kantenlänge 200 spuckt einen Code in diesem Format aus:

    ********************************************************************** 00001200
    WUERFEL = BEGINSET 00001210
    SU1 = SURF / 1,1,-2.6416E3,2.6416E3,-2.6416E3,2.6416E3,2,2,-2.6416E3, 00001220
    0.,5.2832E3,0.,0.,0.,0.,0.,2.6416E3,-5.2832E3,0.,0. 00001230
    CU1 = CURVE / 1,0.,1.,2,-2.54E3,0.,0.,0.,-2.54E3,5.08E3 00001240
    CU2 = CURVE / 1,0.,1.,2,2.54E3,-5.08E3,0.,0.,-2.54E3,0. 00001250
    CU3 = CURVE / 1,0.,1.,2,2.54E3,0.,0.,0.,2.54E3,-5.08E3 00001260
    CU4 = CURVE / 1,0.,1.,2,-2.54E3,5.08E3,0.,0.,2.54E3,0. 00001270
    CO1 = CONS /SU1,CU1,1.,0.,1,0.,1.,2,-2.54E3,5.08E3,-2.54E3,0. 00001280
    CO2 = CONS /SU1,CU2,1.,0.,1,0.,1.,2,2.54E3,0.,-2.54E3,5.08E3 00001290
    CO3 = CONS /SU1,CU3,1.,0.,1,0.,1.,2,2.54E3,-5.08E3,2.54E3,0. 00001300
    CO4 = CONS /SU1,CU4,1.,0.,1,0.,1.,2,-2.54E3,0.,2.54E3,-5.08E3 00001310
    FA1 = FACE /SU1,1,4,CO1,0.,1.,CO2,0.,1.,CO3,0.,1.,CO4,0.,1. 00001320
    SU2 = SURF / 1,1,-1.016E2,5.1816E3,-1.016E2,5.1816E3,2,2,-2.54E3,0.,0., 00001330
    0.,-1.016E2,0.,5.2832E3,0.,-2.6416E3,5.2832E3,0.,0. 00001340
    CU5 = CURVE / 1,0.,1.,2,-2.54E3,0.,0.,5.08E3,-2.54E3,0. 00001350
    CU6 = CURVE / 1,0.,1.,2,-2.54E3,0.,5.08E3,0.,-2.54E3,5.08E3 00001360
    CU7 = CURVE / 1,0.,1.,2,-2.54E3,0.,0.,5.08E3,2.54E3,0. 00001370
    CO5 = CONS /SU2,CU1,1.,0.,1,0.,1.,2,5.08E3,-5.08E3,0.,0. 00001380
    CO6 = CONS /SU2,CU5,0.,1.,1,0.,1.,2,0.,0.,0.,5.08E3 00001390
    CO7 = CONS /SU2,CU6,0.,1.,1,0.,1.,2,0.,5.08E3,5.08E3,0. 00001400
    CO8 = CONS /SU2,CU7,1.,0.,1,0.,1.,2,5.08E3,0.,5.08E3,-5.08E3 00001410
    FA2 = FACE /SU2,1,4,CO5,0.,1.,CO6,0.,1.,CO7,0.,1.,CO8,0.,1. 00001420
    SU3 = SURF / 1,1,-1.016E2,5.1816E3,-1.016E2,5.1816E3,2,2,2.6416E3, 00001430
    -5.2832E3,0.,0.,-1.016E2,0.,5.2832E3,0.,-2.54E3,0.,0.,0. 00001440
    CU8 = CURVE / 1,0.,1.,2,2.54E3,0.,0.,5.08E3,-2.54E3,0. 00001450

    .
    .
    .
    .
    .
    .



  • "Ein Würfel mit Kantenlänge 200 spuckt einen Code in diesem Format aus:..."

    und deine Frage ist?

    nur so als Tip zu Kommunikation:
    -wir sprechen von der Programmiersprache C oder doch was anderes?
    -hast du schon alle Resourcen (Internet) bezüglich des VDA-Formats durch?
    -hast du einen Beschreibung des Formates vorliegen?
    -findest du alle Details deines Export-Beispiel in der Doku

    was ist dir dann unverständlich?



  • Yannick92 schrieb:

    Entwickeln Sie bitte ein Windows-Programm, das mindestens Folgendes leistet:

    Ich finde das etwas komisch... Ist es eine Aufforderung deinerseits an uns, dir zu helfen? Oder ist es die Aufgabe, die du bekommen hast? Die Formulierung hört sich sehr nach "Hausaufgabe" an, dafür ist das Projekt aber zu umfangreich.



  • Gast3 schrieb:

    "Ein Würfel mit Kantenlänge 200 spuckt einen Code in diesem Format aus:..."

    und deine Frage ist?

    nur so als Tip zu Kommunikation:
    -wir sprechen von der Programmiersprache C oder doch was anderes?
    -hast du schon alle Resourcen (Internet) bezüglich des VDA-Formats durch?
    -hast du einen Beschreibung des Formates vorliegen?
    -findest du alle Details deines Export-Beispiel in der Doku

    was ist dir dann unverständlich?

    -Ja wir sprechen von der Programmiersprache C

    -habe nach langer Suche endlich eine Beschreibung des VDA-Formats gefunden:ftp://transcat-plm.com/tcsoft/vdafsV5_1111/doc_german/manual.pdf (ab Seite 45)

    Die Windows Benutzeroberfläche usw. steht. Es geht mir jetzt nur darum einen Code zu entwickeln, der die VDA-Dateien öffnet, analysiert und die einzelnen Linien, Punkte, usw. darstellt. Hierbei tu ich mich sehr schwer, da ich ein C-Anfänger bin.



  • Ohne das Format im Detail zu kennen, ist der Aufbau doch eigentlich schnell ersichtlich:

    Abk+laufende Nummer
    =
    Form    ; SURF: Ebene, CURVE Kurve, CONS Kurve auf Ebene, FACE Oberfläche, ...
    /
    optionale Beschreibung, Bezugselemente (Abk+laufende Nummer)
    Geometriedaten, Anzahl und Bedeutung abhängig von der Form
    

    Bei der Gesamtaufgabe, die dir gestellt wurde (von wem eigentlich?), sollten die ersten vier Punkte relativ schnell abgearbeitet sein.

    Die Darstellung (Punkt 6 & 7) mit Skalierung und Rotation erfordert Dinge, die über die Sprache C hinaus gehen, im Idealfall nutzt du Bibliotheken, die dir vieles abnehmen, im schlechtesten Fall erstellst du betriebssystemabhängig ein Fenster und führst die nötigen Transformationen selber durch.

    Punkt 8 dürfte dann doch ein relativ simpler Abschluss sein, wenn der genaue Aufbau der vda-Datei bekannt ist.

    Ich kenne deinen Kenntnisstand nicht und weiß nicht, wieviel Zeit du dafür hast. Aber selbst ein Profi, der auf geeignete Bibliotheken zurückgreifen kann, macht das nicht mal eben in der Mittagspause (gerade in C, ohne ++ oder #).
    Der Teufel steckt wie immer im Detail...



  • fasfa schrieb:

    Ohne das Format im Detail zu kennen, ist der Aufbau doch eigentlich schnell ersichtlich:

    Abk+laufende Nummer
    =
    Form    ; SURF: Ebene, CURVE Kurve, CONS Kurve auf Ebene, FACE Oberfläche, ...
    /
    optionale Beschreibung, Bezugselemente (Abk+laufende Nummer)
    Geometriedaten, Anzahl und Bedeutung abhängig von der Form
    

    Bei der Gesamtaufgabe, die dir gestellt wurde (von wem eigentlich?), sollten die ersten vier Punkte relativ schnell abgearbeitet sein.

    Die Darstellung (Punkt 6 & 7) mit Skalierung und Rotation erfordert Dinge, die über die Sprache C hinaus gehen, im Idealfall nutzt du Bibliotheken, die dir vieles abnehmen, im schlechtesten Fall erstellst du betriebssystemabhängig ein Fenster und führst die nötigen Transformationen selber durch.

    Punkt 8 dürfte dann doch ein relativ simpler Abschluss sein, wenn der genaue Aufbau der vda-Datei bekannt ist.

    Ich kenne deinen Kenntnisstand nicht und weiß nicht, wieviel Zeit du dafür hast. Aber selbst ein Profi, der auf geeignete Bibliotheken zurückgreifen kann, macht das nicht mal eben in der Mittagspause (gerade in C, ohne ++ oder #).
    Der Teufel steckt wie immer im Detail...

    Vielen Dank erstmal!
    Die Aufgabe stammt von meinem Hochschul-Professor.
    Ich wäre schon froh, wenn ich die ersten vier Punkte erledigt bekommen würde. Es müssen nicht zwingend alle Punkte erfüllt werden. (Bitte um Hilfe hierbei)
    Ich habe insgesamt noch 10 volle Tage Zeit, aber tue mich trotzdem ziemlich schwer aufgrund meines niedrigen Wissens.



  • Das ist auch gar nicht einfach... Was ist denn das für eine Aufgabe?

    Ich glaub jetzt auch nicht, dass es da viele Hilfsbibliotheken für VDA Zeugs gibt. Zum einen brauchst schon mal einen Parser, um das Format einzulesen. Das is schon gewisser Aufwand.
    Und dann müsstest du das ja auch irgendwie darstellen. Das ist ein Punkt wo ich mich selber zugegebenermaßen nicht so gut auskenne. Ich wüsste jetzt aber nicht, welche Bibliotheken dir dabei helfen, das zu rendern. Wenn ich nichts übersehen habe, müsstest du aus den ganzen Geometriedaten selber sowas wie ein Mesh erzeugen, damit du das z.B. mit OpenGl rendern kannst. Ohne entsprechende Hilfsbibliotheken (und ich kenn keine) würd ich davon ausgehen, dass da 10 Tage überhaupt nicht reichen, selbst wenn man sich auskennt. Und erst recht nicht mit C.



  • Achso, wenn dir die ersten vier Punkte reichen, dann ist die Darstellung nicht dabei. Dann musst "nur" den Parser schreiben. Wenn er weiter nichts analysieren und nur die Anzahl ausgeben soll, dann ist der Aufwand vertretbar.



  • Dann versuche ich mich erstmal an dem einlesen der Datei und der Analyse dieser.
    Falls jemand Tips hat, gerne helfen:)



  • Naja, das ist z.B. eine brauchbare Beschreibung, wie man einen Parser/Interpreter richtig angeht:

    https://www.c-plusplus.net/forum/268247



  • Mechanics schrieb:

    Ich glaub jetzt auch nicht, dass es da viele Hilfsbibliotheken für VDA Zeugs gibt.

    Falls sich das auf meine Antwort beziehen sollte: Ich habe eben 3D-Bibliotheken gemeint, denen man einfach die entsprechend transformierte Welt-Matrix übergibt und die anschließend die komplette 3D->2D-Transformation und Darstellung (Punkte, Ebenen, Linien) durchführen.
    Das ist schon eine gewaltige Vereinfachung, ohne diese und nur mit der GDI ist zusätzlich zur Programmiererfahrung auch ein gehöriges Maß an Mathekenntnissen erforderlich.
    Und warum sollte man solche optionalen Aufgaben nicht stellen? Je nach Studiengang gibt es Leute, die sich zuvor mit diesen Dingen beschäftigt haben, die also zuvor (kleine) 3D-Anwendungen programmiert haben. Außerdem sprach Yannick davon, dass die Benutzerobfläche vorgegeben ist, wahrscheinlich ist auch, dass wesentliche Elemente zum Lösen der Punkte 5-7 ebenfalls vorhanden sind.

    Den Link zu dem wirklich guten Artikel halte ich allerdings für übertrieben. Die Textdatei ist computergeneriert mit immer gleichem Aufbau. Fehler in der Datei würde ich zumindest in der ersten Version des Programms ausschließen.

    Also bliebe das Einlesen einer Datei, deren Aufbau nur wenig über den einer csv-Datei hinausgeht, und noch das Schreiben einer vda-Datei (die Dokus beider Dateiformate sind mit Sicherheit entweder bei den Programmierunterlagen dabei oder online abrufbar).
    10 (jetzt 9) Tage? Machbar.



  • fasfa schrieb:

    Falls sich das auf meine Antwort beziehen sollte

    Nein, ich dachte daran, dass es für bekanntere Formate wahrscheinlich schon Bibliotheken gibt, mit denen man sie einlesen könnte. Aber für irgendwelche VDA Formate ist mir sowas noch nie untergekommen.

    fasfa schrieb:

    denen man einfach die entsprechend transformierte Welt-Matrix übergibt und die anschließend die komplette 3D->2D-Transformation und Darstellung (Punkte, Ebenen, Linien) durchführen.

    3D -> 2D Transformation ist denk ich uninteressant. OpenGl ist auch nicht weiter kompliziert, das könnte man auch einfach hernehmen und direkt im 3D arbeiten. Nur beschreibt dieses VDA Format Oberflächenmodelle, und ein Oberflächenmodell in ein Dreiecksnetz zu konvertieren ist denk ich überhaupt nicht einfach. Oder kennst du da etwas?

    Ansonsten geb ich dir recht, so kompliziert muss man den Parser dafür vermutlich nicht aufbauen, vielleicht reicht hier auch etwas einfacheres.



  • Also das Einlesen der Datei über die Auswahl in der Menüleister und einer anschließenden Suche über die Windows-Suchfunktion funktioniert schon mal. Morgen mache ich mich an den Parser. Ich versuche mich erstmal an einem einfacheren.

    Es soll ja immerhin "nur" herausgelesen werden, wieviel Punkte, Linien, Kurven, usw. vorhanden sind.

    Werde mich morgen nochmal melden.

    Vielen Dank für die Hilfe!!
    Schönen Abend noch.


Anmelden zum Antworten