Koordinaten aus einer DXF-Datei auslesen (VB 2015)

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von Jaask0.

    Kannst du mal eine solche Datei mit beilegen, dass man sich das Schema anschauen kann, wie diese Informationen gespeichert werden?
    Werden die Informationen überhaupt in Klartext gespeichert?

    MfG Tim

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Fortender“ ()

    @Fortender Hier mal eine DXF-Datei, die ich vom letzten Projektchen habe. Und ja; alles Klartext. Hier noch die Doku.
    Dann haben wir hier noch einen schönen Artikel auf CodeProject.
    Und hier ein fertiges Projekt, das genau das zu können scheint, was du suchst.
    Auf StackOverflow gibt's diese Antworten zu dem Problem.
    Alles in allem: Genug Material, um loslegen zu können. Viel Spass. ;)
    Ich habe auch eine DXF-Datei angehängt (simples Rechteck).
    Den Artikel auf CodeProject habe ich schon gefunden :D
    Nur leider kann meine Kontur (also das Rechteck) nicht angezeigt werden.

    Mit dem ".net dxf Reader" konnte ich jetzt auf die schnelle nichts anfangen muss ich mir morgen noch mal genauer ansehen. :whistling:

    Danke für die ganzen Links :thumbsup:
    Dateien
    So ich habe mich kurz in die DXF-Eigenschaften eingelesen und konnte die Kontur per Handzeichnen.
    D.h. ich könnte theoretisch die verschiedenen Koordinaten auslesen.
    Jetzt kommt das aber:
    Ganz am Anfang werden die Kreise angezeigt und dann kommen die Linen kreuz und quer (wahrscheinlich wie man es gezeichnet hat).
    Ich hätte aber gern die Koordinaten alle nacheinander (also von links nach rechts).

    Meine Überlegung wäre die X-Koordinaten zu sortieren (X- nach X+).

    Tipps :rolleyes: ?

    Gruß
    nur so als Feedback zu deiner Fragestellung: Ich hab kein Plan, von was du redest ?(
    Unter "die Kontur per Handzeichnen" kann ich mir nix vorstellen - welche Kontur? und benutzst du Bleistift oder Kugelschreiber?

    Auch deine Eingangsfrage ist vollkommen geheimnisvoll:

    Jaask0 schrieb:

    X-, Y- und Z-Koordinaten auslesen und diese dann ausgeben
    Ja, wenn dfx einfach Klartext ist, dann kannste das ja mit File.ReadAllText() in einen String einlesen und als Messagebox ausgeben - gibts dabei ein Problem, und wennja welches?
    Okay sorry :D

    Folgendes:
    Hier mal ein Beispiel einer Linie:

    Quellcode

    1. AcDbLine
    2. AcDbLine
    3. 10 (X-Start)
    4. 100
    5. 20(Y-Start)
    6. 0
    7. 30(Z-Start)
    8. 0.0
    9. 11(X-Ende)
    10. 0
    11. 21(Y-Ende)
    12. 0
    13. 31(Z-Ende)
    14. 0.0


    Wenn ich diese Punkte in ein Diagramm eintrage und den "Startpunkt" mit dem "Endpunkt" verbinde habe ich genau diese Linie.
    Jetzt besteht die DXF-Datei (Rechteck) aus 4 Linien.
    Ich möchte jetzt die "Startpunkte" sowie "Endpunkte" nach der Reihenfolge A, B, C, D ausgeben (wie auf dem angehängten Bild).

    Wenn ich die DXF einfach auslese ohne zu sortieren dann würde ich erst die Line B, dann A, D und zum Schluss C zeichnen.

    Mit dem Einlesen gibt es kein Problem. Eher mit dem Ausgeben, aber ich weiß nicht wie ich es angehen soll :/
    Bilder
    • Rechteck.jpg

      4,15 kB, 298×162, 140 mal angesehen

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Jaask0“ ()

    komisch - jetzt hab ich mir mal die angehängte dfx angeguckt, die ist iwie ganz anders aufgebaut.
    Da machts nicht viel Spass, Lösungen für zu entwerfen, und hinterher kommt raus, dass die Vorraussetzungen ganz anders waren.

    Generell scheint malwieder das Problem zu sein, dass man zwar weiß, wie auslesen, aber keinen Plan hat, wohin.
    Ein Auslesen ist ja immer auch ein Einlesen, nämlich in eine andere Datenstruktur.
    Denkbar wäre hier malwieder ein typisiertes Dataset, damit kann man recht leicht zB 3-dimensionale Polygon-Datensätze definieren.
    Oder auch 3D-Rechtecke, Linien, Kreise, whatever.
    Man kanns auch anders anfassen, aber wenn man mit typDataset drauf losgeht, kriegt man eine primitive Ausgabe-Form quasi geschenkt, indem man die Datensätze sich im Datagridview in tabellenform anzeigen lassen kann. Egal, wie du's letztlich ausserdem noch anzeigen willst - die Tabellenform ist auf jeden Fall unerhört nützlich.

    Also wenn du mir eine oder mehrere realistische dfx-Dateien lieferst, kann ich eine Anzeige basteln mit Datensätze, die jeweils x1, y1, z1, x2, y2, z2 enthalten und tabellarisch anzeigen.
    Wenn dir das zusagt, musste aber im Anschluss dich in die typDataset-Technologie einarbeiten, sonst verstehste ja nix von dem, was ich dir bastel.

    Die andere Möglichkeit besteht im Basteln eigener Klassen, das ist primitiver, aufwändiger, bietet weniger Möglichkeiten, ist aber dafür zunächstmal einfacher zu verstehen.
    Nur habich keine Lust, was dazu zu basteln und so weit zu entwickeln, dass die Objekte ebenfalls im DatagridView zur Anzeige kommen.
    Danke für die Hilfe, jedoch möchte ich es gerne mit einer Arraylist lösen.
    Ich habe alle Punkte ausgelesen (also Startpunkt X und Y sowie Endpunkt X und Y von der Linie) und derzeit in 4 Arraylisten gespiechert.

    Quellcode

    1. Public PunktX1 As New List(Of Single)
    2. Public PunktY1 As New List(Of Single)
    3. Public PunktX2 As New List(Of Single)
    4. Public PunktY2 As New List(Of Single)

    Jetzt muss ich PunktX1 sortieren und die anderen Punkte sollten mitziehen.
    D.h. wenn die PunktX1(3) an die Stelle PunktX1(1) wandert soll es genauso bei den anderen Punkten geschehen.
    Hier ein kleines Beispiel:

    Quellcode

    1. Vor der Sortierung --> nach der Sortierung
    2. PunktX1 = { 30, 20, 40, 10 } --> PunktX1 = { 10, 20, 30, 40 }
    3. PunktY1 = { 0, 15, 20, 5 } --> PunktY1 = { 5, 15, 0, 20 }
    4. PunktX2 = { 180, 100, 130, 50 } --> PunktX2 = { 50, 100, 180, 130 }
    5. PunktY2 = { 20, 50, 30, -10 } --> PunktY2 = { -10, 50, 20, 30 }


    Da muss ich noch probieren ob es eine Möglichkeit gibt.

    Aber Danke euch :thumbup:

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Jaask0“ ()

    Jaask0 schrieb:

    Jetzt muss ich PunktX1 sortieren und die anderen Punkte sollten mitziehen.
    Tja, wenn du dich auf typisiertes Dataset eingelassen hättest - da würdest du jetzt im DatagridView einfach auf die PunktX1 - Spalte klicksen, und es wäre genau so sortiert, wie du es haben willst.

    Aber du willst es ja lieber mit einer ArrayList lösen - viel Spass :evil:



    Übrigens dein Code zeigt keine ArrayLists, sondern List(Of Single) - das ist ein gewichtiger Unterschied, denn ArrayList ist seit 2005 eine "deprecated" Klasse, d.h. bedient nur noch "Altlasten", und sollte in neuem Code nie mehr benutzt werden.



    @Parmaster: evtl. will er den am weitesten links liegenden Punkt ermitteln - vlt. um ein Koordinatensystem so zu dimensionieren, dass alle Punkte reinpassen.
    Wobei - sone Dimensionierung könnte man anders viel sinnreicher anfassen - also wieder mal zeigt sich, wie nützlich es wäre, wenn man als Fragesteller einfach mal erklären täte, was man eiglich machen will, und v.a. wozu.
    Allein dass man als Antworter sich nicht so viel und sinnlos den Kopf zerbrechen bräuchte.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „ErfinderDesRades“ ()

    @Parmaster: Ich möchte es sortieren weil ich die Koordinaten aus dem X- ins X+ benötige für mein Vorhaben.
    D.h. ich möchte alle Linien in einem Zug. Aus der DXF-Datei bekomme ich es "kreuz und quer".

    @ErfinderDesRades: Klar gibt es hier mehrere Möglichkeiten. Jedoch möchte ich nicht, dass der Anwender auf eine Spalte im Gridview klicken muss.
    Es soll alles im Hintergrund passieren. Nimm es mir nicht böse, aber ich bevorzuge die List (of Single), da ich besser mit den Werten arbeiten kann :) .

    Tut mir leid, ich kenne noch aus der Schule den Begriff ArrayList, die neue Variante (List (of ...)) kenne ich erst seit kurzem von diesem Forum :rolleyes: .

    Klar könnte ich die komplette Aufgabestellung erklären, jedoch müsste ich einen Roman verfassen :D

    Ich möchte mich entschuldigen, falls ich jemanden verärgert habe :/ .

    PS: Es funktioniert mit List(of Single). Es war umständlich, tut aber was es soll :thumbsup: