From b744c948198b9d4f9f21dcdd936d9b4d2dce190d Mon Sep 17 00:00:00 2001 From: Samer Ayadi Date: Mon, 3 Aug 2026 15:32:54 +0200 Subject: [PATCH] Add Etage-Typ-Unterstuetzung zu test_mubea.lsp + Testfall fuer Objekt 0061 mubea:build-vario(-one) liest jetzt ein optionales "typ"-Feld ("standard" Default, "etage") und dispatcht auf berechne-etage/etage-foerderanlage- einfuegen bzw. vf-block-erstellen mit dem passenden Typ. Neuer Testfall VF_Mubea_Etage_0061 bildet Objekt-ID 0061 aus Mubea_Quali.dxf nach (deltaL=12790, deltaH=0, seite=links, Winkel=9, L_GF1=1602.4). Co-Authored-By: Claude Sonnet 5 --- tests/test_mubea.lsp | 33 +++++++++++++++++++++++---------- tests/testdata/mubea.json | 15 +++++++++++++++ 2 files changed, 38 insertions(+), 10 deletions(-) diff --git a/tests/test_mubea.lsp b/tests/test_mubea.lsp index b953429..5aaa465 100644 --- a/tests/test_mubea.lsp +++ b/tests/test_mubea.lsp @@ -3,9 +3,12 @@ ;; ;; Liest tests/testdata/mubea.json und baut in EINER Zeichnung: ;; - Kreisel (Eintraege mit "id", Block KREISEL_*) via kreisel-insert-script -;; - Vario (test_id "VF_*") Block VF_* via variofoerderer-einfuegen +;; - Vario (test_id "VF_*") Block VF_* via variofoerderer-einfuegen/ +;; etage-foerderanlage-einfuegen ;; + vf-block-erstellen ;; (deltaL/L_VF werden fuer winkel+deltaH geloest, L_GF Split 500/4230; +;; optionales "typ": "standard" (Default) oder "etage" waehlt den +;; Foerderanlagen-Typ (siehe vf_standard.lsp/vf_etage.lsp); ;; "anzahl"/"delta_y"/"delta_x" wie bei Gefaelle: Template->mehrere ;; Foerderer mit fortlaufend suffixiertem test_id, _01.._anzahl) ;; - Gefaelle (test_id "GF_*", Modus 1) Block GF_* via gefaellestrecke-einfuegen @@ -111,17 +114,21 @@ ;; erzwingen in test_foerderer.lsp), statt den automatisch kleinsten ;; gueltigen Winkel zu nehmen. L_GF1 aus JSON ist der Vorlauf-Zielwert; ;; L_GF2 (Nachlauf) ist der Rest (L_GF_gesamt - L_GF1). -(defun mubea:build-vario-one (tid richtung deltaL deltaH winkel-soll gf1-ziel seite hz +(defun mubea:build-vario-one (tid typ richtung deltaL deltaH winkel-soll gf1-ziel seite hz startpunkt / ergebnis winkel-treffer best-winkel L_GF L_VF gf1 gf2 hoehe-bis lastEnt ent vf-nummer) (if (or (null seite) (= seite "")) (setq seite "links")) + (if (or (null typ) (= typ "")) (setq typ "standard")) (if (null hz) (setq hz 0.0) (setq hz (float hz))) - (princ (strcat "\n [VARIO] " tid " -> deltaL=" (rtos deltaL 2 0) + (princ (strcat "\n [VARIO] " tid " (" typ ") -> deltaL=" (rtos deltaL 2 0) " deltaH=" (rtos deltaH 2 0) " Winkel(soll)=" (if winkel-soll (itoa (fix winkel-soll)) "auto") " L_GF1-Ziel=" (rtos gf1-ziel 2 0))) - (setq ergebnis (berechne-alle-winkel deltaL deltaH richtung nil)) + (setq ergebnis + (if (= typ "etage") + (berechne-etage deltaL deltaH richtung seite) + (berechne-alle-winkel deltaL deltaH richtung nil))) (setq best-winkel (car ergebnis) L_GF (cadr ergebnis) L_VF (caddr ergebnis)) (if (numberp winkel-soll) (progn @@ -146,7 +153,9 @@ (setq hoehe-bis (if (= richtung "Auf") deltaH (- deltaH))) (setq lastEnt (vf-lastent-ohne-attribute)) - (variofoerderer-einfuegen deltaL deltaH richtung best-winkel gf1 gf2 L_VF startpunkt seite hz) + (if (= typ "etage") + (etage-foerderanlage-einfuegen deltaL deltaH richtung best-winkel gf1 gf2 L_VF startpunkt seite hz) + (variofoerderer-einfuegen deltaL deltaH richtung best-winkel gf1 gf2 L_VF startpunkt seite hz)) ;; Blocknummer wie in der Produktion ueber vf-next-number holen (NICHT fest ;; auf 1): vf-next-number ueberspringt bereits belegte VF_n-Nummern. Mit ;; einer festen 1 traf das _.-BLOCK des ZWEITEN Foerderers auf den schon @@ -154,7 +163,7 @@ ;; damit Basispunkt/Auswahlsatz der festen Antwortfolge, meldet "Eintrag ;; kann nicht erkannt werden" und der Befehl bleibt offen (Haenger). (setq vf-nummer (vf-next-number)) - (setq ent (vf-block-erstellen "standard" seite vf-nummer 0 0 hoehe-bis + (setq ent (vf-block-erstellen typ seite vf-nummer 0 0 hoehe-bis deltaH deltaL L_VF gf1 gf2 richtung best-winkel startpunkt lastEnt hz "0" "Schoenenberger Geruest")) (if (or (null ent) (/= (type ent) 'ENAME)) @@ -162,8 +171,11 @@ ;; SSG_VF_EDIT-XDATA schreiben (wie vfs-standard-dialog-berechnen- ;; einfuegen) - sonst erkennt VARIOFOERDERER_EDIT den Block beim ;; Doppelklick nicht als "per Dialog erstellt" und verweigert die - ;; Bearbeitung (vfs-edit-keine-xdata). - (if (and ent (= (type ent) 'ENAME)) (vfs-xdata-schreiben ent hz)) + ;; Bearbeitung (vfs-edit-keine-xdata). NUR fuer typ="standard": das + ;; XDATA-Schema markiert den Block hart als "standard" - bei einem + ;; Etage-Block wuerde ein spaeterer Doppelklick faelschlich versuchen, + ;; ihn als Standard-Typ neu aufzubauen. + (if (and ent (= (type ent) 'ENAME) (= typ "standard")) (vfs-xdata-schreiben ent hz)) (mubea:ent-json tid "vario" ent)) (progn (princ (strcat "\n FEHLER: deltaL=" (rtos deltaL 2 0) @@ -179,9 +191,10 @@ ;; bei genau einer Kopie bleibt der Template-Name erhalten (kompatibel zur ;; frueheren Einzelbenennung). ;; Rueckgabe: LISTE von Ergebnis-JSON-Strings (eine je Kopie). -(defun mubea:build-vario (e / tid0 richtung deltaL deltaH winkel-soll gf1-ziel seite hz +(defun mubea:build-vario (e / tid0 typ richtung deltaL deltaH winkel-soll gf1-ziel seite hz start0 anzahl dy dx i off nr tid startpunkt ergebnisse) (setq tid0 (ssg-val e "test_id") + typ (ssg-val e "typ") richtung (ssg-val e "richtung") deltaL (float (ssg-val e "deltaL")) deltaH (float (ssg-val e "deltaH")) @@ -207,7 +220,7 @@ tid0)) (setq startpunkt (list (+ (car start0) (* dx off)) (+ (cadr start0) (* dy off)) (caddr start0))) (setq ergebnisse - (cons (mubea:build-vario-one tid richtung deltaL deltaH winkel-soll gf1-ziel seite hz startpunkt) + (cons (mubea:build-vario-one tid typ richtung deltaL deltaH winkel-soll gf1-ziel seite hz startpunkt) ergebnisse)) (setq i (1+ i)) ) diff --git a/tests/testdata/mubea.json b/tests/testdata/mubea.json index 6a99be2..2f7f8ef 100644 --- a/tests/testdata/mubea.json +++ b/tests/testdata/mubea.json @@ -161,6 +161,21 @@ "rotation": 180, "assigned_to": "VF_Schnitt_C" }, + { + "test_id": "VF_Mubea_Etage_0061", + "typ": "etage", + "richtung": "Auf", + "deltaL": 12790, + "deltaH": 0, + "seite": "links", + "winkel": 9, + "L_GF1": 1602.4, + "hz": 270.0, + "x": -400, + "y": 147.615, + "z": 1467, + "comment": "Nachbau von Objekt ID 0061 (Block VF_5) aus Mubea_Quali.dxf per Etage-VarioFoerderer (FOERDERANLAGE Typ 2 / Werteingabe). Original-Attribute: DELTA_L=12790mm, DELTA_H=0mm, SEITE_AS/ES=links, MOTORSEITE=rechts (Default), Winkel=9°, L_GF=1602,1602mm, L_VF=4535mm, ANZAHL_SEPARATOR=2. hz=270 reproduziert die im Original beobachtete Baurichtung (-Y lokal); die zusaetzliche 180°-Rotation der finalen INSERT im Original duerfte eine manuelle Nachplatzierung in der Gesamtzeichnung sein, nicht Teil der parametrischen Erzeugung." + }, { "test_id": "GF_Mubea", "modus": 1,