;; ============================================================ ;; 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: zentrale, aktive Quelle der Magic-Numbers aus dem ;; VarioFoerderer-Cluster. Die weit ueberwiegende Mehrheit der frueher ;; rohen Literale in vf_core/vf_standard/vf_etage/vf_linienzug wurde auf ;; die *vfk-*-Konstanten hier umgestellt (Migration abgeschlossen, siehe ;; Git-Historie). Aendert sich ein Wert hier, wirkt sich das direkt auf ;; alle referenzierenden Aufrufstellen aus. ;; ;; Ausnahmen (bewusst NICHT umgestellt): ;; - Werte, die bereits ueber (ssg-cfg-or "vario" "" ) laufen ;; (gefaelle_winkel, bogen_winkel, feste_horizontal, staustrecke_basis, ;; separator_block_dx/dz, station_block_dx/dz, skalierung_basis): dort ;; bleibt die Config-Anbindung die fuehrende Quelle, *vfk-* dient nur als ;; Fallback/Dokumentation (siehe jeweiliger Kommentar). ;; - Stellen, an denen der Literal-Wert in einem itoa-/Integer-Kontext ;; verwendet wird (z.B. vf_etage.lsp: "best-winkel +/- 3" vor itoa) und ;; *vfk-gefaelle-winkel* als Float (3.0) statt Integer (3) einen Typfehler ;; ausloesen wuerde. Bewusst als rohes Literal belassen (siehe Kommentare ;; im jeweiligen Modul). ;; - Blocknamen-Strings, die eine Zahl eingebettet tragen (z.B. ;; "Vario_Umlenkstation_500mm_...", "Staustrecke_Separator_SP_300_mm"): ;; das sind DWG-Blockreferenzen, keine Zahlenwerte. ;; - Die mm/m-Umrechnung 2000.0 (= 2 * *vfk-mm-je-m*) ist keine 1:1- ;; Ersetzung und bleibt als eigenstaendiges Literal bestehen. ;; ;; 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) ueberall dort, wo bereits ueber ;; Config bezogen wird. Alle frueher rohen 3.0/3-Literale OHNE Config-Bezug ;; in vf_standard.lsp/vf_etage.lsp/vf_linienzug.lsp wurden auf ;; *vfk-gefaelle-winkel* umgestellt (Ausnahme: einzelne itoa-/Integer- ;; Kontexte in vf_etage.lsp, siehe Datei-Kopfkommentar). (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. Die frueher fest verdrahtete Inkonsistenz in ;; vf_etage.lsp (winkel-list ohne Config-Anbindung) wurde behoben: bezieht ;; jetzt *vfk-bogen-winkel* direkt (weiterhin ohne Config-Anbindung wie ;; zuvor, aber konsistent mit dem Fallback-Wert der anderen Module). (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___R500" / "Vario_Kurve___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))) ;; AS-/ES-Element-Winkel: nur 30 und 90 Grad - anders als GF-Bogen/Vario-Kurve ;; gibt es KEINE 60-Grad-AS/ES-Bloecke (AS_Element_60/ES_Element_60 existieren ;; nirgends). Als STRING gefuehrt (Blockname "AS_Element__" wird ;; per strcat gebaut, Journal fuehrt AS/ES-Winkel als STR). Zentrale, einmalige ;; Quelle fuer die gueltige Wertemenge (vf_linienzug-Glied-Schema); die ;; Reihenfolge (30 vor 90) entspricht dem Schema. vf_linienzug hat einen ;; Fallback, falls diese Datei nicht geladen wurde. (if (null *vfk-as-es-winkel*) (setq *vfk-as-es-winkel* '("30" "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). Aktiv referenziert in ;; vf_linienzug.lsp (beide Aufrufstellen von vfl2-pruefe-eckwinkel). (if (null *vfk-eckwinkel-toleranz*) (setq *vfk-eckwinkel-toleranz* 5.0)) ;; Schwellwert (Grad), ab dem ein Frame noch als "flach" (~0 Grad) gilt. ;; Aktiv referenziert in vfl-frame-flach-p (vf_linienzug.lsp). (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 jetzt aktiv referenziert (vormals rohes ;; 500/500.0-Literal, 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 ;; jetzt aktiv referenziert (Blockname "Staustrecke_Separator_SP_300_mm" ;; traegt den Wert weiterhin zusaetzlich im String - dort unangetastet). (if (null *vfk-separator-laenge*) (setq *vfk-separator-laenge* 300.0)) ;; Mindestlaenge (mm) fuer eine VF-Einheit (Umlenk+Motor = 2x ;; *vfk-stations-laenge*). Aktiv referenziert in vf_linienzug.lsp ;; (vfl-vf-entscheidung, vfl-vf-machbar-p, vfl-segment-entscheidung, ;; vf-linienzug-modus). (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*). ;; Aktiv referenziert in vf_linienzug.lsp. (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. Das fruehere rohe 400.0- ;; Duplikat (br-gf1 in vfl3-*) referenziert jetzt *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). Aktiv ;; referenziert in vfl-neue-linie-messen (vf_linienzug.lsp). (if (null *vfk-segment-maximallaenge*) (setq *vfk-segment-maximallaenge* 25000.0)) ;; 20-Meter-Regel (Warnschwelle Gesamtlaenge seit letzter Umlenkstation, ;; siehe Prinzipien-Dok Abschnitt 7). Aktiv referenziert in vfl-20m-check ;; (vf_linienzug.lsp). (if (null *vfk-motorabstand-warnung*) (setq *vfk-motorabstand-warnung* 20000.0)) ;; Unterer Clamp-Wert (mm) fuer diverse Restlaengen-Berechnungen ;; ("max ... ..."), verhindert negative/entartete Kurzstrecken. Aktiv ;; referenziert an allen frueher rohen "(max 100.0 ...)"-Stellen in ;; vf_linienzug.lsp. (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"). Aktiv referenziert in ;; etage-foerderanlage-einfuegen (vf_etage.lsp). (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. Aktiv referenziert an allen frueher rohen 576.0-Stellen in ;; vf_linienzug.lsp ("(if aus-dx aus-dx ...)" 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 und ;; ES_Element_30 (vf_etage.lsp, init-bibliothek-etage) - NICHT identisch ;; zu *vfk-as-es-fallback-dx* (anderer Blocktyp/Winkel). Aktiv referenziert. (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, init-bibliothek-etage). ;; Aktiv referenziert. (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). Aktiv referenziert. (if (null *vfk-label-texthoehe*) (setq *vfk-label-texthoehe* 100.0)) ;; Texthoehe (mm) der unsichtbaren ATTDEFs (vf-block-erstellen, ;; vf_core.lsp). Aktiv referenziert. (if (null *vfk-attdef-texthoehe*) (setq *vfk-attdef-texthoehe* 50.0)) ;; Y-Versatz (mm) zwischen aufeinanderfolgenden ATTDEF-Zeilen ;; (vf_core.lsp). Aktiv referenziert. (if (null *vfk-attdef-zeilenabstand*) (setq *vfk-attdef-zeilenabstand* 100.0)) ;; Beschriftungsversatz (mm) senkrecht zur Fahrtrichtung (vf-make-label, ;; vf_core.lsp). Aktiv referenziert. (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 und vf_linienzug.lsp vor - ;; inhaltlich einfach 1000.0*2, aber nirgends so ausgedrueckt. BEWUSST NICHT ;; auf *vfk-mm-je-m* umgestellt (keine 1:1-Ersetzung, siehe Datei- ;; Kopfkommentar) - bleibt als eigenstaendiges 2000.0-Literal bestehen. (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). Aktiv referenziert. (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). Dupliziert das ;; Maximum von *vfk-bogen-winkel*. Aktiv referenziert. (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). Aktiv ;; referenziert. 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)