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 <noreply@anthropic.com>
This commit is contained in:
2026-08-03 15:32:54 +02:00
parent 45044cdcba
commit b744c94819
2 changed files with 38 additions and 10 deletions
+23 -10
View File
@@ -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))
)
+15
View File
@@ -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,