Files
s.ayadi bbc9e9b9f9 [FEAT] Werkzeuge zum Auslesen fremder Zeichnungen und der VF-Eingabe-Journale
Grundlage fuer reproduzierbare Nachbau-Testfaelle aus echten Projekt-
zeichnungen (HundM05).

- lib/vf_journal_export.py (neu): liest die Eingabe-Journale der VF_n-Bloecke
  aus der XDATA (App SSG_VF_EDIT, Marker "linienzug") und schreibt sie als
  Frage-Antwort-Protokoll im Schema von tests/testdata/linienzug_tests.json -
  Gegenstueck zu vfl-entry->string, ohne ezdxf (reine Gruppencode-Lesung).
  Optional --csv fuer Strecken-ID und Erwartungswerte je Kette.
- lib/extract_polylines.py (neu): LWPOLYLINE-Objekte als JSON, inkl.
  OCS->Welt-Umrechnung fuer gekippte Ebenen (Handles, Segment-/Gesamtlaengen).
- lib/dxf_scan_components.py: erkennt jetzt zusaetzlich, ob ein Block ein
  2D-Schema oder ein 3D-Modell ist (TYPEN_3D, ist_3d_block/darstellung_von) -
  eine Anlagenzeichnung enthaelt beides. Dazu Sensor-Erfassung,
  Zwillings-Zusammenfuehrung und Hoehenschaetzung aus der Umgebung.
- lib/dxf_abbild.py: gibt die erkannte Darstellung je Element mit aus.
- tests/test_vf_journal_grammatik.py (neu): prueft den Journal-Dekoder gegen
  handgebaute Journale - ohne CAD und ohne die grosse DXF. Deckt die zwei
  Zweige ab, die in den echten Ketten nicht vorkommen: Glied "Linie-VF" und
  eine VF-Einheit mit gewinkeltem Erstkoerper (dort fragt vfl-vf-einheit
  KEINE Separator-/Endpunkt-Fragen vorab, anders als beim horizontalen).
- data/polylines.md, tests/testdata/hundm05_linienzug_polylines.json:
  ausgewertete Streckenzuege der Quellzeichnung.
- .gitignore: die Quellzeichnungen selbst (data/polylines.dxf 124 MB,
  data/polylines.dwg, tests/HM5.dwg) bleiben draussen - eingecheckt ist die
  Auswertung, nicht die Zeichnung.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-03 10:13:56 +02:00

5.3 KiB

Polylinien aus data/polylines.dxf

Quelle: data/polylines.dxf (ASCII-DXF, AC1032 / AutoCAD 2018, ca. 143 MB). Die Datei enthaelt genau 5 LWPOLYLINE-Objekte, alle auf Layer Z-6, alle direkt am Anfang der ENTITIES-Sektion (ab Zeile 159094). In der BLOCKS-Sektion liegen keine Polylinien.

Alle Polylinien sind offen (Gruppencode 70 = 0) und haben keine Bulges (kein Gruppencode 42), sind also reine Streckenzuege.

Die Spalte Laenge gibt jeweils die Strecke vom vorhergehenden zum aktuellen Punkt an (Segmentlaenge). Da OCS ein orthonormales System ist, entspricht die in der Polylinien-Ebene gemessene Laenge der echten 3D-Laenge im Weltsystem.


Polylinie 1 - Handle CA

Feld Wert
Handle (5) CA
Layer (8) Z-6
Stuetzpunkte (90) 5
Geschlossen (70) 0 (offen)
Elevation (38) -271.758876
Extrusion (210/220/230) -1.3674923e-07 / -0.043577812 / -0.999050036

Achtung: Die Extrusionsrichtung ist nicht (0,0,1). Die Gruppencodes 10/20 sind daher OCS-Koordinaten, keine Weltkoordinaten. Beide Darstellungen sind unten aufgefuehrt.

OCS-Koordinaten (Rohwerte 10/20)

Nr. X Y Laenge zum Vorgaenger
1 8610.178314 -1646.791925 -
2 8608.179544 -6230.251177 4583.4597
3 9758.166544 -6230.250709 1149.9870
4 9758.180524 -5392.918048 837.3327
5 9758.945042 -1661.656105 3731.2620
Gesamtlaenge 10302.0414

Weltkoordinaten (aus OCS umgerechnet, Arbitrary-Axis-Algorithmus)

Nr. X Y Z Laenge zum Vorgaenger
1 8610.1835 1657.0432 199.7371 -
2 8608.1991 6236.1483 0.0000 4583.4597
3 9758.1861 6236.1442 0.0000 1149.9870
4 9758.1975 5399.6070 36.4891 837.3327
5 9758.9503 1671.8896 199.0894 3731.2620
Gesamtlaenge 10302.0414

Polylinie 2 - Handle CD

Feld Wert
Handle (5) CD
Layer (8) Z-6
Stuetzpunkte (90) 6
Geschlossen (70) 0 (offen)
Elevation (38) 199.737126
Extrusion (210/220/230) Standard (0/0/1)

Koordinaten (10/20, entsprechen den Weltkoordinaten X/Y)

Nr. X Y Laenge zum Vorgaenger
1 4927.055794 1205.360995 -
2 4932.562971 7060.201678 5854.8433
3 7106.355038 7060.201678 2173.7921
4 7106.138574 4645.514574 2414.6871
5 6201.192989 4645.514574 904.9456
6 6176.269578 1205.360995 3440.2439
Gesamtlaenge 14788.5119

Polylinie 3 - Handle FB

Feld Wert
Handle (5) FB
Layer (8) Z-6
Stuetzpunkte (90) 5
Geschlossen (70) 0 (offen)
Elevation (38) 2366.737126
Extrusion (210/220/230) Standard (0/0/1)

Koordinaten (10/20, entsprechen den Weltkoordinaten X/Y)

Nr. X Y Laenge zum Vorgaenger
1 12891.792045 1205.360995 -
2 12908.891320 6244.648400 5039.3164
3 12908.891320 6244.648400 0.0000
4 13904.931447 6244.648400 996.0401
5 13898.258832 1695.891177 4548.7621
Gesamtlaenge 10584.1187

Polylinie 4 - Handle 12B

Feld Wert
Handle (5) 12B
Layer (8) Z-6
Stuetzpunkte (90) 5
Geschlossen (70) 0 (offen)
Elevation (38) 2266.737126
Extrusion (210/220/230) Standard (0/0/1)

Koordinaten (10/20, entsprechen den Weltkoordinaten X/Y)

Nr. X Y Laenge zum Vorgaenger
1 17198.353387 1205.360995 -
2 17215.452662 6244.648400 5039.3164
3 17215.452662 6244.648400 0.0000
4 18211.492790 6244.648400 996.0401
5 18204.820174 1695.891177 4548.7621
Gesamtlaenge 10584.1187

Polylinie 5 - Handle 15A

Feld Wert
Handle (5) 15A
Layer (8) Z-6
Stuetzpunkte (90) 5
Geschlossen (70) 0 (offen)
Elevation (38) 2266.737126
Extrusion (210/220/230) Standard (0/0/1)

Koordinaten (10/20, entsprechen den Weltkoordinaten X/Y)

Nr. X Y Laenge zum Vorgaenger
1 21480.091053 1205.360995 -
2 21497.190328 6244.648400 5039.3164
3 21497.190328 6244.648400 0.0000
4 22493.230455 6244.648400 996.0401
5 22486.557840 1695.891177 4548.7621
Gesamtlaenge 10584.1187

Zusammenfassung

Nr. Handle Stuetzpunkte Gesamtlaenge kuerzestes Segment laengstes Segment
1 CA 5 10302.0414 837.3327 4583.4597
2 CD 6 14788.5119 904.9456 5854.8433
3 FB 5 10584.1187 0.0000 5039.3164
4 12B 5 10584.1187 0.0000 5039.3164
5 15A 5 10584.1187 0.0000 5039.3164

Auffaelligkeiten

  • Polylinie 1 (CA) liegt in einer gekippten Ebene (Extrusion ca. 2.5 Grad gegen die Z-Achse) und ist die einzige mit OCS-Koordinaten.
  • Die Polylinien 3 (FB), 4 (12B) und 5 (15A) sind formgleich und nur in X versetzt (Versatz ca. 4306.56 bzw. 4281.74).
  • In den Polylinien 3, 4 und 5 ist jeweils Punkt 3 ein Duplikat von Punkt 2 (Segmentlaenge 0.0000). Falls diese Daten weiterverarbeitet werden, sollten die Nullsegmente vorher entfernt werden.