Files
dxfmakros/Lisp/vf_konstanten.lsp
T
m.stangl 3a0caadbb5 [REFACTOR] VF-Linienzug: GF-Bogen/Vario-Kurve-Winkel zentral aus *vfk-gf-bogen-winkel*
Statt das '(30 60 90)-Literal an ~12 Stellen in vf_linienzug zu wiederholen
(Schema, schema-feld-pruefen, Live-Menue GF-Bogen + Vario-Kurve, Slice-Reader,
beide Edit-Dialoge), verweisen jetzt alle auf die EINMALIGE zentrale Definition
*vfk-gf-bogen-winkel* in vf_konstanten.lsp (war dort schon vorhanden, wurde aber
nirgends genutzt).

Kein Config-Eintrag (bewusst nicht in component_defaults.json): die Winkel sind
an die vorhandenen DWG-Bloecke gebunden, eine Config waere nur halb verdrahtet.
vf_konstanten ist zentrale Quelle; vf_linienzug hat einen Fallback, falls die
Datei nicht geladen wurde. Werte unveraendert (30/60/90), Journal/Blocknamen
kompatibel.

Paren-Balance geprueft.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-08-29 10:32:42 +02:00

264 lines
14 KiB
Plaintext

;; ============================================================
;; VF_KONSTANTEN - Zentrale Sammlung aller Laengen-/Winkel-/Toleranz-
;; Magic-Numbers aus vf_core.lsp, vf_standard.lsp, vf_etage.lsp,
;; vf_linienzug.lsp
;; ============================================================
;; ZWECK dieser Datei: Nachschlagewerk + Grundlage fuer eine schrittweise
;; Migration - NICHT (noch) die aktive Quelle der Werte. Die vier vf_*.lsp-
;; Module verwenden ihre Werte weiterhin direkt (eigene *vfl-*/*vfs-*/
;; FESTE_*-Variablen bzw. rohe Literale, teils ueber ssg-cfg-or). Aendert
;; sich ein Wert hier, hat das AKTUELL KEINE Wirkung auf den Bauablauf -
;; die entsprechende Stelle im jeweiligen Modul muss weiterhin dort separat
;; angepasst werden. Diese Datei macht nur sichtbar, WELCHE Werte es gibt,
;; wo sie herkommen und wo sie (noch) dupliziert sind.
;;
;; Migrationsidee (spaeter, schrittweise, EIN Modul nach dem anderen):
;; einzelne Aufrufstellen von rohem Literal auf *vfk-*-Konstante umstellen,
;; mit Test in BricsCAD nach jedem Modul. Bei den bereits ueber ssg-cfg-or
;; konfigurierbaren Werten (gefaelle_winkel, bogen_winkel, feste_horizontal,
;; staustrecke_basis, separator_block_dx/dz, station_block_dx/dz,
;; skalierung_basis) bleibt die Config-Anbindung die fuehrende Quelle -
;; *vfk-*-Konstanten hier sind dafuer nur Fallback/Dokumentation, siehe
;; jeweiliger Kommentar.
;;
;; Geladen von vf_core.lsp VOR vf_standard/vf_etage/vf_linienzug (siehe
;; dortige Ladereihenfolge, dieselbe Guard-Systematik wie in den anderen
;; vf_*.lsp-Dateien: atoms-family-Check verhindert Doppel-Laden).
;; ============================================================
(if (not (car (atoms-family 1 '("VF-TYP-REGISTRIEREN"))))
(progn
;; Pfad zentral ueber ssg_core (ssg-lisp-verzeichnis), mit Inline-Fallback
;; falls ssg_core hier noch nicht geladen ist.
(setq *vf-konst-core-pfad*
(if (car (atoms-family 1 '("SSG-LISP-VERZEICHNIS")))
(ssg-lisp-verzeichnis)
(cond
((getenv "DXFM_LISP") (vl-string-translate "\\" "/" (getenv "DXFM_LISP")))
((and (boundp '*ssg-lisp-pfad*) *ssg-lisp-pfad*) *ssg-lisp-pfad*)
(t nil))))
(if *vf-konst-core-pfad*
(load (strcat *vf-konst-core-pfad* "/vf_core.lsp"))
(princ "\n[WARNUNG] vf_konstanten.lsp: DXFM_LISP/ssg-lisp-pfad nicht gesetzt.")
)
)
)
;; ============================================================
;; TEIL 1: WINKEL (Grad)
;; ============================================================
;; Basis-Neigungswinkel jeder Gefaellestrecke (GF) - AKTIVE Quelle bleibt
;; (ssg-cfg-or "vario" "gefaelle_winkel" 3), an >15 Stellen korrekt darueber
;; bezogen. ABER an mindestens 12 weiteren Stellen als rohes 3.0/3-Literal
;; dupliziert, OHNE Bezug zur Config (vf_standard.lsp Z.309/412;
;; vf_etage.lsp Z.449-450/479/654ff/793; vf_linienzug.lsp Z.1071/1554/2873/
;; 3394/4159/4273/4278) - eine Aenderung des Winkels ueber Config wuerde
;; diese Stellen NICHT mitziehen.
(if (null *vfk-gefaelle-winkel*) (setq *vfk-gefaelle-winkel* 3.0))
;; Toleranzband (Grad) um *vfk-gefaelle-winkel*: liegt der natuerliche
;; Neigungswinkel eines fallenden Segments innerhalb Toleranz, gilt es als
;; reine Gefaellestrecke statt VF. Bereits als *vfl-gf-winkel-toleranz* in
;; vf_linienzug.lsp benannt (Wert 0.5) - hier nur gespiegelt/dokumentiert.
(if (null *vfk-gf-winkel-toleranz*) (setq *vfk-gf-winkel-toleranz* 0.5))
;; Diskrete Bogenwinkel-Tabelle fuer VF-Boegen (auf/ab). AKTIVE Quelle in
;; vf_standard.lsp/vf_linienzug.lsp: (ssg-cfg-or "vario" "bogen_winkel" ...)
;; mit demselben Fallback. INKONSISTENZ: in vf_etage.lsp (Zeile ~447) fest
;; verdrahtet OHNE Config-Anbindung - eine Config-Aenderung wuerde dort
;; nicht greifen.
(if (null *vfk-bogen-winkel*) (setq *vfk-bogen-winkel* '(3 6 9 12 15 18 21 27 33 39 45 51)))
;; GF-Bogen-Winkel (horizontale Kurve): 30/60/90 Grad. AKTIVE, EINMALIGE Quelle
;; fuer die Winkel-Menues/Schema/Slice/Edit im VF-Linienzug (vf_linienzug.lsp
;; referenziert *vfk-gf-bogen-winkel* statt eigener '(30 60 90)-Literale) - gilt
;; auch fuer die Vario-Kurve (gleiche drei Winkel). Blocknamen
;; "Gefaellebogen_<seite>_<winkel>_R500" / "Vario_Kurve_<seite>_<winkel>_TEF_*"
;; leiten sich direkt aus diesen Werten ab. Kein Config-Bezug (bewusst: an die
;; vorhandenen DWG-Bloecke gebunden). vf_linienzug hat einen eigenen Fallback,
;; falls diese Datei nicht geladen wurde.
(if (null *vfk-gf-bogen-winkel*) (setq *vfk-gf-bogen-winkel* '(30 60 90)))
;; Etage-Typ: Schwenkwinkel der Ein-/Auslauf-Schraegsektion. Bereits als
;; ETAGE_HZ_WINKEL in vf_etage.lsp benannt (Wert 30, Kommentar "war frueher
;; 60") - hier nur gespiegelt.
(if (null *vfk-etage-hz-winkel*) (setq *vfk-etage-hz-winkel* 30.0))
;; Eckwinkel-Toleranz bei der automatischen Pfad-Klassifizierung (Modus 3,
;; vf-linienzug-modus3 -> vfl2-pruefe-eckwinkel). Rohes Literal in
;; vf_linienzug.lsp Zeile ~3386, keine Konstante bisher.
(if (null *vfk-eckwinkel-toleranz*) (setq *vfk-eckwinkel-toleranz* 5.0))
;; Schwellwert (Grad), ab dem ein Frame noch als "flach" (~0 Grad) gilt.
;; Rohes Literal in vfl-frame-flach-p (vf_linienzug.lsp), keine Konstante.
(if (null *vfk-frame-flach-toleranz*) (setq *vfk-frame-flach-toleranz* 1.5))
;; ============================================================
;; TEIL 2: HORIZONTALE BUDGETS (mm) - Umlenk-/Motorstation + Separatoren
;; ============================================================
;; ACHTUNG: vier verschiedene, NICHT austauschbare Werte fuer "horizontales
;; Budget der festen Elemente einer VF-Einheit", je nach Kontext - das ist
;; die verwirrendste Stelle im ganzen Modul-Satz:
;; - Standard-VF (2 Separatoren, Ein+Aus): FESTE_HORIZONTAL = 1600
;; (vf_standard.lsp Z.38, ssg-cfg-or "vario" "feste_horizontal" 1600)
;; - Linienzug-VF (1 Separator, nur Einlauf): *vfl-feste-horizontal* = 1300
;; (vf_linienzug.lsp Z.63)
;; - Etage-VF (mittlere Sektion): FESTE_ETAGE_MITTE = 1000
;; (vf_etage.lsp Z.41)
;; - Linienzug-Kettenende/Body-Abschluss (nur Motor+1 Separator, KEIN
;; Umlenk-Anteil): 800 als rohes Literal an >10 Stellen in
;; vf_linienzug.lsp (vfl-body-zerlegung, vfl3-waehle-winkel, ...)
;; Diese vier NICHT vereinheitlichen ohne sorgfaeltige Pruefung - sie
;; entstehen aus unterschiedlicher Bauteil-Zusammensetzung (siehe jeweiliger
;; Kommentar im Modul), keine Kopiergleichheit.
(if (null *vfk-feste-horizontal-standard*) (setq *vfk-feste-horizontal-standard* 1600.0))
(if (null *vfk-feste-horizontal-linienzug*) (setq *vfk-feste-horizontal-linienzug* 1300.0))
(if (null *vfk-feste-horizontal-etage*) (setq *vfk-feste-horizontal-etage* 1000.0))
(if (null *vfk-feste-horizontal-kettenende*) (setq *vfk-feste-horizontal-kettenende* 800.0))
;; Umlenk-/Motorstation-Fussabdruck (mm), je EINE Station. AKTIVE Quelle in
;; vf_standard.lsp: (ssg-cfg-or "vario" "station_block_dx" 500). In
;; vf_etage.lsp/vf_linienzug.lsp ueberwiegend als rohes 500/500.0-Literal
;; direkt in Formeln/Blockaufrufen dupliziert (>10 Fundstellen), OHNE
;; Config-Bezug.
(if (null *vfk-stations-laenge*) (setq *vfk-stations-laenge* 500.0))
;; Separator-Laenge (mm). AKTIVE Quelle in vf_standard.lsp: (ssg-cfg-or
;; "vario" "separator_block_dx" 300). In vf_etage.lsp/vf_linienzug.lsp
;; ueberwiegend als rohes 300/300.0-Literal dupliziert (Blockname
;; "Staustrecke_Separator_SP_300_mm" traegt den Wert zusaetzlich im String).
(if (null *vfk-separator-laenge*) (setq *vfk-separator-laenge* 300.0))
;; Mindestlaenge (mm) fuer eine VF-Einheit (Umlenk+Motor = 2x
;; *vfk-stations-laenge*). Rohes 1000.0-Literal an 7 Stellen in
;; vf_linienzug.lsp dupliziert (vfl-vf-entscheidung, vfl-vf-machbar-p,
;; vfl-segment-entscheidung, vf-linienzug-modus mehrfach).
(if (null *vfk-vf-mindestlaenge*) (setq *vfk-vf-mindestlaenge* 1000.0))
;; Mindestlaenge (mm) am Linienzug-Kettenende-Abschluss (nur Motor+
;; Separator, kein Umlenk-Anteil - siehe *vfk-feste-horizontal-kettenende*).
;; Rohes 800.0-Literal, identisch zum Budget-Wert selbst.
(if (null *vfk-kettenende-mindestlaenge*) (setq *vfk-kettenende-mindestlaenge* 800.0))
;; Mindestlaenge (mm) fuer die 3-Grad-GF-Anschlussstrecke (GF1 am Einlauf
;; einer VF-Einheit). Bereits als *vfl-gf-min-laenge* in vf_linienzug.lsp
;; benannt (Wert 400.0) - hier nur gespiegelt. In vf_linienzug.lsp Zeile
;; ~4143 zusaetzlich als rohes 400.0-Literal dupliziert (br-gf1), ohne
;; Bezug auf *vfl-gf-min-laenge*.
(if (null *vfk-gf-anschluss-mindestlaenge*) (setq *vfk-gf-anschluss-mindestlaenge* 400.0))
;; ============================================================
;; TEIL 3: STRECKENLAENGEN-GRENZWERTE (mm)
;; ============================================================
;; Foerderer-Maximallaenge (Linienzug-Einzelsegment beim Picken). Rohes
;; 25000.0-Literal in vfl-neue-linie-messen (vf_linienzug.lsp), keine
;; Konstante bisher.
(if (null *vfk-segment-maximallaenge*) (setq *vfk-segment-maximallaenge* 25000.0))
;; 20-Meter-Regel (Warnschwelle Gesamtlaenge seit letzter Umlenkstation,
;; siehe Prinzipien-Dok Abschnitt 7). Rohes 20000.0-Literal in
;; vfl-20m-check (vf_linienzug.lsp), keine Konstante bisher.
(if (null *vfk-motorabstand-warnung*) (setq *vfk-motorabstand-warnung* 20000.0))
;; Unterer Clamp-Wert (mm) fuer diverse Restlaengen-Berechnungen
;; ("max 100.0 ..."), verhindert negative/entartete Kurzstrecken. Rohes
;; 100.0-Literal an >10 Stellen in vf_linienzug.lsp dupliziert
;; (vfl-baue-horizontal-koerper, vf-linienzug-modus3-Umfeld, ...).
(if (null *vfk-restlaenge-min-clamp*) (setq *vfk-restlaenge-min-clamp* 100.0))
;; Unterer Clamp-Wert (mm) fuer die variable Auslauf-Staustrecke im
;; Etage-Typ ("Schutz gegen negative/zu kurze GF"). Rohes 50.0-Literal in
;; etage-foerderanlage-einfuegen (vf_etage.lsp Zeile ~800).
(if (null *vfk-etage-auslauf-min-clamp*) (setq *vfk-etage-auslauf-min-clamp* 50.0))
;; ============================================================
;; TEIL 4: FALLBACK-VERSATZWERTE (mm) - AS-/ES-/Gefaellebogen-Masse, falls
;; die Blockdefinition/das Koordinatensystem nicht extrahierbar ist
;; ============================================================
;; Diese Werte sind EMPIRISCH aus den realen Blockmassen abgeleitet und
;; sollten bei einer Aenderung der zugrundeliegenden DWG-Bloecke ebenfalls
;; neu vermessen werden - keine "sauberen" Rundwerte.
;; AS-/ES-Element-Fallback-Versatz (dx, mm), Standard-Typ (90 Grad) und
;; Linienzug. Rohes 576.0-Literal an mehreren Stellen in vf_linienzug.lsp
;; dupliziert (Zeile ~3393/4030/4031: "(if aus-dx aus-dx 576.0)" bzw.
;; ein-dx-Aequivalent).
(if (null *vfk-as-es-fallback-dx*) (setq *vfk-as-es-fallback-dx* 576.0))
;; Etage-Typ (30 Grad): eigene Fallback-Masse fuer AS_Element_30 (dx/dz,
;; vf_etage.lsp Zeile ~90/96) und ES_Element_30 (Zeile ~124/130) - NICHT
;; identisch zu *vfk-as-es-fallback-dx* (anderer Blocktyp/Winkel).
(if (null *vfk-etage-as-fallback-dx*) (setq *vfk-etage-as-fallback-dx* 525.8))
(if (null *vfk-etage-as-fallback-dz*) (setq *vfk-etage-as-fallback-dz* -72.9))
(if (null *vfk-etage-es-fallback-dx*) (setq *vfk-etage-es-fallback-dx* 576.2))
(if (null *vfk-etage-es-fallback-dz*) (setq *vfk-etage-es-fallback-dz* -54.6))
;; Etage-Typ: Fallback-Versatz (dz, mm) fuer Gefaellebogen links/rechts,
;; falls Block/KS nicht extrahierbar (vf_etage.lsp Zeile ~156-195).
(if (null *vfk-etage-gefaellebogen-fallback-dz*) (setq *vfk-etage-gefaellebogen-fallback-dz* -10.0))
;; ============================================================
;; TEIL 5: BESCHRIFTUNG / TEXT (mm)
;; ============================================================
;; Texthoehe (mm) des sichtbaren ATTDEF/TEXT-Labels (vf-make-label,
;; vf_core.lsp Zeile ~1073). Rohes Literal, keine Konstante bisher.
(if (null *vfk-label-texthoehe*) (setq *vfk-label-texthoehe* 100.0))
;; Texthoehe (mm) der unsichtbaren ATTDEFs (vf-block-erstellen,
;; vf_core.lsp Zeile ~1125). Rohes Literal, keine Konstante bisher.
(if (null *vfk-attdef-texthoehe*) (setq *vfk-attdef-texthoehe* 50.0))
;; Y-Versatz (mm) zwischen aufeinanderfolgenden ATTDEF-Zeilen
;; (vf_core.lsp Zeile ~1131). Rohes Literal, keine Konstante bisher.
(if (null *vfk-attdef-zeilenabstand*) (setq *vfk-attdef-zeilenabstand* 100.0))
;; Beschriftungsversatz (mm) senkrecht zur Fahrtrichtung (vf-make-label,
;; vf_core.lsp Zeile ~1059-1060). Rohes 200.0-Literal.
(if (null *vfk-label-versatz*) (setq *vfk-label-versatz* 200.0))
;; ============================================================
;; TEIL 6: SONSTIGE
;; ============================================================
;; mm -> m Umrechnungsfaktor fuer die Montagehoehe-Mittelwertbildung
;; ("(/ (+ hoehe-von hoehe-bis) 2000.0)" = Mittelwert zweier mm-Werte,
;; direkt in m). Kommt identisch in vf_core.lsp Zeile ~1154 UND
;; vf_linienzug.lsp Zeile ~2258/4742 vor - inhaltlich einfach 1000.0*2,
;; aber nirgends so ausgedrueckt.
(if (null *vfk-mm-je-m*) (setq *vfk-mm-je-m* 1000.0))
;; Skalierungsbasis (mm) fuer insert-inclined-scaled-block. AKTIVE Quelle:
;; (ssg-cfg-or "vario" "skalierung_basis" 1000.0), vf_core.lsp Zeile ~821.
;; Hier nur gespiegelt/dokumentiert.
(if (null *vfk-skalierungsbasis*) (setq *vfk-skalierungsbasis* 1000.0))
;; Toleranzband (mm) der automatischen Ketten-Nachbarschaftserkennung
;; (Vario_Kette_Merge). Bereits als *vfl-kette-tol-eng*/*vfl-kette-tol-weit*
;; in vf_linienzug.lsp benannt (Werte 2.0/100.0) - hier nur gespiegelt.
(if (null *vfk-kette-tol-eng*) (setq *vfk-kette-tol-eng* 2.0))
(if (null *vfk-kette-tol-weit*) (setq *vfk-kette-tol-weit* 100.0))
;; Diagnose-Schwellwert (mm): ab wann ein Anschlussabstand beim
;; Ketten-Verfolgen als "spuerbar, aber noch sauber" gilt (vfl-kette-
;; verfolgen, vf_linienzug.lsp Zeile ~4617). Rohes 0.5-Literal.
(if (null *vfk-kette-anschluss-warnung*) (setq *vfk-kette-anschluss-warnung* 0.5))
;; Warnschwelle (Grad): Vario-Winkel oberhalb des Maximums der
;; Bogenwinkel-Tabelle (Modus 3, vf-linienzug-modus3 Zeile ~4018). Rohes
;; 51.0-Literal, dupliziert das Maximum von *vfk-bogen-winkel*.
(if (null *vfk-vario-winkel-max*) (setq *vfk-vario-winkel-max* 51.0))
;; Empirischer Korrekturfaktor (mm) fuer die Bruecken-Hoehenberechnung in
;; Modus 3 (vf-linienzug-modus3, "dH-adj", vf_linienzug.lsp Zeile ~4162).
;; UNKOMMENTIERTE Herleitung im Original - nur "Motor + auf_3/ab_3"-Notiz.
;; Bei Gelegenheit pruefen/nachvollziehen, ob sich der Wert geometrisch
;; herleiten laesst statt empirisch fixiert zu bleiben.
(if (null *vfk-bruecke-korrektur*) (setq *vfk-bruecke-korrektur* 10.48))
(setq *vfk-konstanten-geladen* t)
(princ "\nvf_konstanten geladen.")
(princ)