diff --git a/Lisp/vf_spec.lsp b/Lisp/vf_spec.lsp index 3e1f5c7..23731c8 100644 --- a/Lisp/vf_spec.lsp +++ b/Lisp/vf_spec.lsp @@ -234,6 +234,21 @@ (setq v (ssg-val quelle "winkel_idx")) (if v (vsp-ganz v "winkel_idx"))) +;; Ziel-Hoehe fuer den GF1-Einlauf einer mit "Horizontal-VF" eroeffneten +;; VF-Einheit (vfl-prompt-hoehe-eingang-gf1). Optional, weil die Frage NUR +;; kommt, wenn der Eingang komplett neu gebaut wird - das ist der Fall, den +;; vfl-eingang-modus-bestimmen mit nil beantwortet: echter Kettenanfang MIT +;; AS-Element bzw. Anschluss an eine fertige VF-Einheit ("letzter-typ"="VF"), +;; und am Kettenanfang OHNE AS auch dann, wenn der KS_AUS-Scan die GF-Familie +;; erkennt oder der Nutzer die 3-Optionen-Rueckfrage mit "2" beantwortet. +;; Folgt die Sektion dagegen auf GF/Separator/Vario-Kurve, gibt es kein neues +;; GF1 und damit keine Frage - dann fehlt das Feld. Ob der Fall ansteht, haengt +;; am Zustand der Zeichnung und kann hier nicht berechnet werden; die Spec sagt +;; es, geraten wird nichts. +(defun vsp-eingang-hoehe (quelle / v) + (setq v (ssg-val quelle "eingang_hoehe")) + (if v (vsp-zahl "REAL" v "eingang_hoehe"))) + (defun vsp-praeambel (kopf / punkt) (setq *vsp-wo* "start") (setq punkt (ssg-val kopf "start_punkt")) @@ -360,6 +375,7 @@ ((= label "Horizontal-VF") (vsp-linie sek) + (vsp-eingang-hoehe sek) (vsp-vf-einheit sek subs T)) ((= label "Linie") @@ -394,8 +410,14 @@ ;; der flachen Queue liegt sie aber IMMER an derselben Position: direkt nach ;; den Werten des Vorgaenger-Knotens. Darum genau EIN Code je sub. (defun vsp-vf-einheit (sek subs erst-hor / n i wahl letzter ende) - (vsp-code-raus *vsp-tab-verteilung* (ssg-val sek "gf_verteilung") - "gf_verteilung") + ;; GF-Verteilung: beim horizontalen Erstkoerper wird sie NICHT gefragt - die + ;; Aufrufstelle in vf-linienzug-modus gibt "2" (alles am Einlauf) fest vor + ;; (vfl-vf-einheit-abschluss, Argument gf-verteilung-fest), weil L_GF dort nur + ;; der strukturelle Mindest-Eingang ist. Ein "gf_verteilung"-Feld an einer + ;; Horizontal-VF-Sektion bleibt darum wirkungslos (alte Specs tragen es noch). + (if (not erst-hor) + (vsp-code-raus *vsp-tab-verteilung* (ssg-val sek "gf_verteilung") + "gf_verteilung")) (if erst-hor (progn (vsp-raus "STR" (vsp-ja-code (ssg-val sek "vf_sep_vor"))) @@ -425,6 +447,15 @@ " aber noch weitere subs"))) (vsp-code-raus *vsp-tab-endpunkt* "kettenende" "sub") (vsp-raus "STR" (vsp-ja-code (ssg-val sub "es"))) + ;; Mit ES: Winkel+Seite werden SCHON HIER erfragt (vfl-frage-es-seite, + ;; inkl. eigenem STEP-Marker) und nicht erst im Abschluss - sie + ;; bestimmen den ES-Fussabdruck, der in die Streckenzerlegung eingeht. + ;; Darum stehen sie am sub und nicht in einer eigenen ES-Sektion. + (if (vsp-ja-p (ssg-val sub "es")) + (progn + (vsp-raus "STEP" "ES") + (vsp-wert-str (ssg-val sub "es_winkel") "es_winkel") + (vsp-code-raus *vsp-tab-seite* (ssg-val sub "es_seite") "es_seite"))) (vsp-linie sub) (vsp-zahl "REAL" (ssg-val sub "hoehe") "hoehe") (vsp-winkel-idx sub)) diff --git a/tests/testdata/hundm05.json b/tests/testdata/hundm05.json index 230ed69..f4675f0 100644 --- a/tests/testdata/hundm05.json +++ b/tests/testdata/hundm05.json @@ -94,37 +94,28 @@ { "spec_id": "VF_hundm05_LZ_02", "modus": 1, - "start_punkt": [8572.181, 1226.825, 2154.0], + "start_punkt": [9570.86433958955, 1167.499104795102, 2154.0], "start_hoehe": 2154.0, "as": 1, "as_winkel": "90", "as_seite": "links", - "beschreibung": "Linienzug (Modus 1), Start Z2154: GF-Linie 3149 mm / 3 Grad -> Horizontal-VF 1575 mm -> Vario-Kurve 90 rechts innen -> Vario-Kurve 90 rechts innen -> Linie bis Kettenende 1153 mm auf Z2154 -> ES 90 links", - "sivas_id": "0019", - "sivas_bezeichnung": "VarioFoerderer :5", - "planquadrat": "D/1", - "block": "VF_46", - "dxf_handle": "EFD4", - "quelle": "INSERT EFD4 (Block VF_46) in polylines.dxf, XDATA-App SSG_VF_EDIT, Marker linienzug; im Journal aufgezeichneter Kettenstart: [17201.778323, 1205.360995, 2100.000000]; korrigiert per HundM05.dxf (sps_skel) - Startpunkt war faelschlich auf [8571.95068, 1276.061424, 2494.930831] aufgezeichnet (Anschluss an Kreisel hatte Luecke)" - }, - { - "glied": "Linie-GF", - "nr": 1, - "dl": 3149.399248, - "hz": 90.0, - "gefaelle": "winkel", - "winkel": 3.0, - "ende": "nein" + "beschreibung": "Linienzug (Modus 1), Start Z2154: AS 90 links -> Horizontal-VF 5855 mm (GF1-Einlauf auf Z1800, voller Eingang) -> Vario-Kurve 90 rechts innen -> Horizontaler Foerderer 457 mm -> Vario-Kurve 90 rechts innen -> Motorstation + Kettenende 5855 mm zurueck auf Z2154 (Winkelwahl Index 3 = 18 Grad) -> ES 90 links", + "sivas_id": "0034", + "sivas_bezeichnung": "ILS 2.0 Strecke", + "planquadrat": "D/1-E/4", + "block": "VF_1", + "dxf_handle": "119B", + "quelle": "Uebersetzt aus tests/testdata/linienzug_tests.json (aufgezeichneter BricsCAD-Lauf, gleicher Block VF_1), Startpunkt auf die reale DXF-Position dieser Instanz gesetzt: INSERT 119B (Block VF_1) in results/test_hundM05.dxf; Sivas-Id/Planquadrat aus results/export.csv (TeileId 0034); ersetzt die alte, per sub=auf-ab behelfsmaessig nachgebaute Fassung" }, { "glied": "Horizontal-VF", - "nr": 2, - "dl": 1574.912802, - "gf_verteilung": "einlauf", + "nr": 1, + "dl": 5854.769733, + "hz": 90.0, + "eingang_hoehe": 1800.0, "vf_sep_vor": 0, "vf_sep_nach": 0, - "vf_ende": "nein", - "vf_separator": 0 + "vf_ende": "automatisch" }, { "sub": "vario-kurve", @@ -134,7 +125,7 @@ }, { "sub": "horizontal", - "dl": 338.966171, + "dl": 457.481366, "sep_vor": 0, "sep_nach": 0 }, @@ -145,67 +136,39 @@ "variante": "innen" }, { - "sub": "auf-ab", - "dl": 4528.583638, - "hoehe": 2335.0, - "winkel_idx": 4 - }, - { - "sub": "horizontal", - "dl": 1443.864872, - "sep_vor": 0, - "sep_nach": 0 - }, - { - "sub": "motorstation" - }, - { - "glied": "Linie", - "nr": 3, - "dl": 1153.407829, + "sub": "kettenende", + "es": 1, + "es_winkel": "90", + "es_seite": "links", + "dl": 5854.769733, "hoehe": 2154.0, - "segment_typ": "GF" - }, - { - "glied": "ES", - "nr": 4, - "winkel": "90", - "seite": "links" + "winkel_idx": 3 }, { "spec_id": "VF_hundm05_LZ_03", "modus": 1, - "start_punkt": [12916.988, 1237.971, 2154.0], + "start_punkt": [13648.0372507632, 1168.039702925621, 2154.0], "start_hoehe": 2154.0, "as": 1, "as_winkel": "90", "as_seite": "links", - "beschreibung": "Linienzug (Modus 1), Start Z2154: GF-Linie 3149 mm / 3 Grad -> Horizontal-VF 1575 mm -> Vario-Kurve 90 rechts innen -> Vario-Kurve 90 rechts innen -> Linie bis Kettenende 1153 mm auf Z2154 -> ES 90 links", - "sivas_id": "0018", - "sivas_bezeichnung": "VarioFoerderer :4", - "planquadrat": "F/1", - "block": "VF_46", - "dxf_handle": "FA5A", - "quelle": "INSERT FA5A (Block VF_46) in polylines.dxf, XDATA-App SSG_VF_EDIT, Marker linienzug; im Journal aufgezeichneter Kettenstart: [17201.778323, 1205.360995, 2100.000000]; korrigiert per HundM05.dxf (sps_skel) - Startpunkt war faelschlich auf [12916.465798, 1276.061424, 2494.930831] aufgezeichnet (Anschluss an Kreisel hatte Luecke)" - }, - { - "glied": "Linie-GF", - "nr": 1, - "dl": 3149.399248, - "hz": 90.0, - "gefaelle": "winkel", - "winkel": 3.0, - "ende": "nein" + "beschreibung": "Linienzug (Modus 1), Start Z2154: AS 90 links -> Horizontal-VF 5855 mm (GF1-Einlauf auf Z1800, voller Eingang) -> Vario-Kurve 90 rechts innen -> Horizontaler Foerderer 457 mm -> Vario-Kurve 90 rechts innen -> Motorstation + Kettenende 5855 mm zurueck auf Z2154 (Winkelwahl Index 3 = 18 Grad) -> ES 90 links", + "sivas_id": "0033", + "sivas_bezeichnung": "ILS 2.0 Strecke", + "planquadrat": "F/1-H/4", + "block": "VF_1", + "dxf_handle": "12A9", + "quelle": "Uebersetzt aus tests/testdata/linienzug_tests.json (aufgezeichneter BricsCAD-Lauf, gleicher Block VF_1), Startpunkt auf die reale DXF-Position dieser Instanz gesetzt: INSERT 12A9 (Block VF_1) in results/test_hundM05.dxf; Sivas-Id/Planquadrat aus results/export.csv (TeileId 0033); ersetzt die alte, per sub=auf-ab behelfsmaessig nachgebaute Fassung" }, { "glied": "Horizontal-VF", - "nr": 2, - "dl": 1574.912802, - "gf_verteilung": "einlauf", + "nr": 1, + "dl": 5854.769733, + "hz": 90.0, + "eingang_hoehe": 1800.0, "vf_sep_vor": 0, "vf_sep_nach": 0, - "vf_ende": "nein", - "vf_separator": 0 + "vf_ende": "automatisch" }, { "sub": "vario-kurve", @@ -215,7 +178,7 @@ }, { "sub": "horizontal", - "dl": 338.966171, + "dl": 457.481366, "sep_vor": 0, "sep_nach": 0 }, @@ -226,67 +189,39 @@ "variante": "innen" }, { - "sub": "auf-ab", - "dl": 4528.583638, - "hoehe": 2335.0, - "winkel_idx": 4 - }, - { - "sub": "horizontal", - "dl": 1443.864872, - "sep_vor": 0, - "sep_nach": 0 - }, - { - "sub": "motorstation" - }, - { - "glied": "Linie", - "nr": 3, - "dl": 1153.407829, + "sub": "kettenende", + "es": 1, + "es_winkel": "90", + "es_seite": "links", + "dl": 5854.769733, "hoehe": 2154.0, - "segment_typ": "GF" - }, - { - "glied": "ES", - "nr": 4, - "winkel": "90", - "seite": "links" + "winkel_idx": 3 }, { "spec_id": "VF_hundm05_LZ_04", "modus": 1, - "start_punkt": [17201.778323, 1205.360995, 2154.0], + "start_punkt": [17815.98017615211, 1168.495370013883, 2154.0], "start_hoehe": 2154.0, "as": 1, "as_winkel": "90", "as_seite": "links", - "beschreibung": "Linienzug (Modus 1), Start Z2154: GF-Linie 3149 mm / 3 Grad -> Horizontal-VF 1575 mm -> Vario-Kurve 90 rechts innen -> Vario-Kurve 90 rechts innen -> Linie bis Kettenende 1153 mm auf Z2154 -> ES 90 links", - "sivas_id": "0020", - "sivas_bezeichnung": "VarioFoerderer :6", - "planquadrat": "H/1", - "block": "VF_46", - "dxf_handle": "E498", - "quelle": "INSERT E498 (Block VF_46) in polylines.dxf, XDATA-App SSG_VF_EDIT, Marker linienzug; im Journal aufgezeichneter Kettenstart: [17201.778323, 1205.360995, 2100.000000]" - }, - { - "glied": "Linie-GF", - "nr": 1, - "dl": 3149.399248, - "hz": 90.0, - "gefaelle": "winkel", - "winkel": 3.0, - "ende": "nein" + "beschreibung": "Linienzug (Modus 1), Start Z2154: AS 90 links -> Horizontal-VF 5855 mm (GF1-Einlauf auf Z1800, voller Eingang) -> Vario-Kurve 90 rechts innen -> Horizontaler Foerderer 457 mm -> Vario-Kurve 90 rechts innen -> Motorstation + Kettenende 5855 mm zurueck auf Z2154 (Winkelwahl Index 3 = 18 Grad) -> ES 90 links", + "sivas_id": "0032", + "sivas_bezeichnung": "ILS 2.0 Strecke", + "planquadrat": "H/1-J/4", + "block": "VF_1", + "dxf_handle": "12D0", + "quelle": "Uebersetzt aus tests/testdata/linienzug_tests.json (aufgezeichneter BricsCAD-Lauf, gleicher Block VF_1), Startpunkt auf die reale DXF-Position dieser Instanz gesetzt: INSERT 12D0 (Block VF_1) in results/test_hundM05.dxf; Sivas-Id/Planquadrat aus results/export.csv (TeileId 0032); ersetzt die alte, per sub=auf-ab behelfsmaessig nachgebaute Fassung" }, { "glied": "Horizontal-VF", - "nr": 2, - "dl": 1574.912802, - "gf_verteilung": "einlauf", + "nr": 1, + "dl": 5854.769733, + "hz": 90.0, + "eingang_hoehe": 1800.0, "vf_sep_vor": 0, "vf_sep_nach": 0, - "vf_ende": "nein", - "vf_separator": 0 + "vf_ende": "automatisch" }, { "sub": "vario-kurve", @@ -296,7 +231,7 @@ }, { "sub": "horizontal", - "dl": 338.966171, + "dl": 457.481366, "sep_vor": 0, "sep_nach": 0 }, @@ -307,67 +242,39 @@ "variante": "innen" }, { - "sub": "auf-ab", - "dl": 4528.583638, - "hoehe": 2335.0, - "winkel_idx": 4 - }, - { - "sub": "horizontal", - "dl": 1443.864872, - "sep_vor": 0, - "sep_nach": 0 - }, - { - "sub": "motorstation" - }, - { - "glied": "Linie", - "nr": 3, - "dl": 1153.407829, + "sub": "kettenende", + "es": 1, + "es_winkel": "90", + "es_seite": "links", + "dl": 5854.769733, "hoehe": 2154.0, - "segment_typ": "GF" - }, - { - "glied": "ES", - "nr": 4, - "winkel": "90", - "seite": "links" + "winkel_idx": 3 }, { "spec_id": "VF_hundm05_LZ_05", "modus": 1, - "start_punkt": [21491.319, 1213.582, 2154.0], + "start_punkt": [21590.18692053851, 1167.376346082522, 2154.0], "start_hoehe": 2154.0, "as": 1, "as_winkel": "90", "as_seite": "links", - "beschreibung": "Linienzug (Modus 1), Start Z2154: GF-Linie 3149 mm / 3 Grad -> Horizontal-VF 1575 mm -> Vario-Kurve 90 rechts innen -> Vario-Kurve 90 rechts innen -> Linie bis Kettenende 1153 mm auf Z2154 -> ES 90 links", - "sivas_id": "0008", - "sivas_bezeichnung": "VarioFoerderer :3", - "planquadrat": "J/1", - "block": "VF_46", - "dxf_handle": "104E0", - "quelle": "INSERT 104E0 (Block VF_46) in polylines.dxf, XDATA-App SSG_VF_EDIT, Marker linienzug; im Journal aufgezeichneter Kettenstart: [17201.778323, 1205.360995, 2100.000000]; korrigiert per HundM05.dxf (sps_skel) - Startpunkt war faelschlich auf [21490.273781, 1195.739767, 2494.930831] aufgezeichnet" - }, - { - "glied": "Linie-GF", - "nr": 1, - "dl": 3149.399248, - "hz": 90.0, - "gefaelle": "winkel", - "winkel": 3.0, - "ende": "nein" + "beschreibung": "Linienzug (Modus 1), Start Z2154: AS 90 links -> Horizontal-VF 5855 mm (GF1-Einlauf auf Z1800, voller Eingang) -> Vario-Kurve 90 rechts innen -> Horizontaler Foerderer 457 mm -> Vario-Kurve 90 rechts innen -> Motorstation + Kettenende 5855 mm zurueck auf Z2154 (Winkelwahl Index 3 = 18 Grad) -> ES 90 links", + "sivas_id": "0001", + "sivas_bezeichnung": "ILS 2.0 Strecke", + "planquadrat": "J/1-K/4", + "block": "VF_1", + "dxf_handle": "12F7", + "quelle": "Uebersetzt aus tests/testdata/linienzug_tests.json (aufgezeichneter BricsCAD-Lauf, gleicher Block VF_1), Startpunkt auf die reale DXF-Position dieser Instanz gesetzt: INSERT 12F7 (Block VF_1) in results/test_hundM05.dxf; Sivas-Id/Planquadrat aus results/export.csv (TeileId 0001); ersetzt die alte, per sub=auf-ab behelfsmaessig nachgebaute Fassung" }, { "glied": "Horizontal-VF", - "nr": 2, - "dl": 1574.912802, - "gf_verteilung": "einlauf", + "nr": 1, + "dl": 5854.769733, + "hz": 90.0, + "eingang_hoehe": 1800.0, "vf_sep_vor": 0, "vf_sep_nach": 0, - "vf_ende": "nein", - "vf_separator": 0 + "vf_ende": "automatisch" }, { "sub": "vario-kurve", @@ -377,7 +284,7 @@ }, { "sub": "horizontal", - "dl": 338.966171, + "dl": 457.481366, "sep_vor": 0, "sep_nach": 0 }, @@ -388,32 +295,13 @@ "variante": "innen" }, { - "sub": "auf-ab", - "dl": 4528.583638, - "hoehe": 2335.0, - "winkel_idx": 4 - }, - { - "sub": "horizontal", - "dl": 1443.864872, - "sep_vor": 0, - "sep_nach": 0 - }, - { - "sub": "motorstation" - }, - { - "glied": "Linie", - "nr": 3, - "dl": 1153.407829, + "sub": "kettenende", + "es": 1, + "es_winkel": "90", + "es_seite": "links", + "dl": 5854.769733, "hoehe": 2154.0, - "segment_typ": "GF" - }, - { - "glied": "ES", - "nr": 4, - "winkel": "90", - "seite": "links" + "winkel_idx": 3 }, { "id": "KR_Kreuz_Q2_90Grad",