bbc9e9b9f9
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>
172 lines
5.3 KiB
Markdown
172 lines
5.3 KiB
Markdown
# 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.
|