327 lines
8.6 KiB
Common Lisp
327 lines
8.6 KiB
Common Lisp
;; ============================================================
|
|
;; SSG_LIB - Dummy-Befehlsdefinitionen fuer Menue SSG_LIB
|
|
;; Jeder Befehl gibt eine Meldung aus und kann spaeter
|
|
;; durch echte Funktionalitaet ersetzt werden.
|
|
;; ============================================================
|
|
|
|
;; --- ILS / Zusatzmodul ---
|
|
(defun c:ILS_BTMT_Beladung ()
|
|
(princ "\n[DUMMY] ILS_BTMT_Beladung aufgerufen")
|
|
(princ)
|
|
)
|
|
|
|
(defun c:ILS_BTMT_Entladung ()
|
|
(princ "\n[DUMMY] ILS_BTMT_Entladung aufgerufen")
|
|
(princ)
|
|
)
|
|
|
|
;; --- ILS / Zusatzmodul: Sensoren (Scanner / Separator) einfuegen ---
|
|
|
|
;; Ermittelt den Pfad zu einer Sensor-Blockdatei. Die Sensor-Bloecke
|
|
;; werden fest aus data/ils/3D geladen (unabhaengig von der
|
|
;; 2D/3D-Umschaltung).
|
|
(defun ils-sensor-pfad (fname / p)
|
|
(setq p (strcat (getenv "DXFMAKRO") "\\data\\ils\\3D\\" fname ".dwg"))
|
|
(if (findfile p) p nil)
|
|
)
|
|
|
|
;; Fuegt einen Sensor-Block wiederholt ein, bis der Benutzer mit
|
|
;; ENTER oder ESC abbricht. Rotation je Einfuegung interaktiv.
|
|
(defun ils-insert-sensor (fname / pfad pt oldattreq n res)
|
|
(setq pfad (ils-sensor-pfad fname))
|
|
(if (null pfad)
|
|
(princ (strcat "\n>>> FEHLER: Blockdatei '" fname ".dwg' nicht gefunden."
|
|
" (in data/ils/3D pruefen)"))
|
|
(progn
|
|
(setq oldattreq (getvar "ATTREQ"))
|
|
(setvar "ATTREQ" 0)
|
|
(setq n 0)
|
|
;; Punkt abfragen; ENTER liefert nil, ESC einen abgefangenen Fehler -
|
|
;; beides beendet die Schleife sauber (ATTREQ wird wiederhergestellt).
|
|
(while
|
|
(progn
|
|
(setq res (vl-catch-all-apply
|
|
'getpoint
|
|
(list (strcat "\nEinfuegepunkt fuer " fname " [ENTER=Ende]: "))))
|
|
(and (not (vl-catch-all-error-p res)) res)
|
|
)
|
|
(setq pt res)
|
|
(command "_.INSERT" pfad pt "" "" pause)
|
|
(setq n (1+ n))
|
|
)
|
|
(setvar "ATTREQ" oldattreq)
|
|
(princ (strcat "\n>>> " (itoa n) " x " fname " eingefuegt."))
|
|
)
|
|
)
|
|
(princ)
|
|
)
|
|
|
|
(defun c:ILS_SCANNER_INSERT ()
|
|
(ils-insert-sensor "Scanner")
|
|
)
|
|
|
|
(defun c:ILS_SEPARATOR_INSERT ()
|
|
(ils-insert-sensor "Separator_SP")
|
|
)
|
|
|
|
;; --- ILS / Foerderer ---
|
|
(defun c:ILS_TEF_Strecke ()
|
|
(princ "\n[DUMMY] ILS_TEF_Strecke aufgerufen")
|
|
(princ)
|
|
)
|
|
|
|
;; FOERDERANLAGE ist bereits in VarioFoerderer.lsp definiert
|
|
|
|
;; Kurven angetrieben Aussen
|
|
(defun c:ILS_K90LA ()
|
|
(princ "\n[DUMMY] 90 Kurve links angetrieben Aussen")
|
|
(princ)
|
|
)
|
|
|
|
(defun c:ILS_K90RA ()
|
|
(princ "\n[DUMMY] 90 Kurve rechts angetrieben Aussen")
|
|
(princ)
|
|
)
|
|
|
|
(defun c:ILS_K60LA ()
|
|
(princ "\n[DUMMY] 60 Kurve links angetrieben Aussen")
|
|
(princ)
|
|
)
|
|
|
|
(defun c:ILS_K60RA ()
|
|
(princ "\n[DUMMY] 60 Kurve rechts angetrieben Aussen")
|
|
(princ)
|
|
)
|
|
|
|
(defun c:ILS_K30LA ()
|
|
(princ "\n[DUMMY] 30 Kurve links angetrieben Aussen")
|
|
(princ)
|
|
)
|
|
|
|
(defun c:ILS_K30RA ()
|
|
(princ "\n[DUMMY] 30 Kurve rechts angetrieben Aussen")
|
|
(princ)
|
|
)
|
|
|
|
;; Kurven angetrieben Innen
|
|
(defun c:ILS_K90LI ()
|
|
(princ "\n[DUMMY] 90 Kurve links angetrieben Innen")
|
|
(princ)
|
|
)
|
|
|
|
(defun c:ILS_K90RI ()
|
|
(princ "\n[DUMMY] 90 Kurve rechts angetrieben Innen")
|
|
(princ)
|
|
)
|
|
|
|
(defun c:ILS_K60LI ()
|
|
(princ "\n[DUMMY] 60 Kurve links angetrieben Innen")
|
|
(princ)
|
|
)
|
|
|
|
(defun c:ILS_K60RI ()
|
|
(princ "\n[DUMMY] 60 Kurve rechts angetrieben Innen")
|
|
(princ)
|
|
)
|
|
|
|
(defun c:ILS_K30LI ()
|
|
(princ "\n[DUMMY] 30 Kurve links angetrieben Innen")
|
|
(princ)
|
|
)
|
|
|
|
(defun c:ILS_K30RI ()
|
|
(princ "\n[DUMMY] 30 Kurve rechts angetrieben Innen")
|
|
(princ)
|
|
)
|
|
|
|
;; --- ILS / Gefaellestrecke ---
|
|
(defun c:ILS_Gefaellestrecke ()
|
|
(princ "\n[DUMMY] ILS_Gefaellestrecke aufgerufen")
|
|
(princ)
|
|
)
|
|
|
|
(defun c:ILS_GK90L ()
|
|
(princ "\n[DUMMY] 90 Kurve links Gefaellestrecke")
|
|
(princ)
|
|
)
|
|
|
|
(defun c:ILS_GK90R ()
|
|
(princ "\n[DUMMY] 90 Kurve rechts Gefaellestrecke")
|
|
(princ)
|
|
)
|
|
|
|
(defun c:ILS_GK60L ()
|
|
(princ "\n[DUMMY] 60 Kurve links Gefaellestrecke")
|
|
(princ)
|
|
)
|
|
|
|
(defun c:ILS_GK60R ()
|
|
(princ "\n[DUMMY] 60 Kurve rechts Gefaellestrecke")
|
|
(princ)
|
|
)
|
|
|
|
(defun c:ILS_GK30L ()
|
|
(princ "\n[DUMMY] 30 Kurve links Gefaellestrecke")
|
|
(princ)
|
|
)
|
|
|
|
(defun c:ILS_GK30R ()
|
|
(princ "\n[DUMMY] 30 Kurve rechts Gefaellestrecke")
|
|
(princ)
|
|
)
|
|
|
|
;; ============================================================
|
|
;; SSG_DIM_SWITCH - Umschalten zwischen 2D und 3D Bloecken
|
|
;; Setzt DXFM_DIM, DXFM_BLOCKS und DXFM_OMNIFLO neu
|
|
;; ============================================================
|
|
|
|
(defun c:SSG_DIM_SWITCH ( / dim-neu basis)
|
|
(setq dim-neu (if (equal (strcase (getenv "DXFM_DIM")) "3D") "2D" "3D"))
|
|
(setq basis (getenv "DXFMAKRO"))
|
|
(setenv "DXFM_DIM" dim-neu)
|
|
(setenv "DXFM_BLOCKS" (strcat basis "\\data\\ils\\" dim-neu))
|
|
(setenv "DXFM_OMNIFLO" (strcat basis "\\data\\omniflo\\" dim-neu))
|
|
(princ (ssg-textf "dim-switch-modus" (list dim-neu)))
|
|
(princ (ssg-textf "dim-switch-blocks" (list (getenv "DXFM_BLOCKS"))))
|
|
(princ (ssg-textf "dim-switch-omniflo" (list (getenv "DXFM_OMNIFLO"))))
|
|
(princ)
|
|
)
|
|
|
|
;; ============================================================
|
|
;; SSG_SPRACHE - Sprache umschalten (Deutsch/Englisch)
|
|
;; Setzt *ssg-lang* live und persistiert ueber DXFM_LANG
|
|
;; ============================================================
|
|
|
|
(defun ssg-sprache-init ( / idx)
|
|
(start_list "sprache")
|
|
(add_list "Deutsch")
|
|
(add_list "Englisch")
|
|
(end_list)
|
|
(setq idx (if (= *ssg-lang* "en_GB") "1" "0"))
|
|
(set_tile "sprache" idx)
|
|
)
|
|
|
|
(defun ssg-sprache-accept ( / idx neu)
|
|
(setq idx (get_tile "sprache"))
|
|
(setq neu (if (= idx "1") "en_GB" "de_DE"))
|
|
(setq *ssg-lang* neu)
|
|
(setenv "DXFM_LANG" neu)
|
|
)
|
|
|
|
(defun c:SSG_SPRACHE ()
|
|
(ssg-dialog-run
|
|
(strcat (getenv "DXFM_DCL") "/sprache.dcl")
|
|
"sprache"
|
|
'ssg-sprache-init
|
|
'ssg-sprache-accept
|
|
)
|
|
(princ (ssg-textf "sprache-gewechselt" (list *ssg-lang*)))
|
|
(princ)
|
|
)
|
|
|
|
;; ============================================================
|
|
;; SSG_BLOCKEDIT - Kontextmenue-Dispatcher
|
|
;; Erkennt den selektierten Blocktyp und ruft den passenden
|
|
;; Bearbeitungsbefehl auf (Rechtsklick-Kontextmenue).
|
|
;; ============================================================
|
|
|
|
(defun c:SSG_BLOCKEDIT ( / ss ent ed bname attribs teileart)
|
|
;; Block ermitteln: zuerst Implied Selection, dann Picking
|
|
(setq ss (ssget "I"))
|
|
(if (or (null ss) (/= (sslength ss) 1))
|
|
(progn
|
|
(princ (ssg-text "cmd-block-auswaehlen"))
|
|
(setq ss (ssget ":S" '((0 . "INSERT"))))
|
|
)
|
|
)
|
|
(if (null ss)
|
|
(progn
|
|
(princ (ssg-text "cmd-kein-block-ausgewaehlt"))
|
|
(princ)
|
|
(exit)
|
|
)
|
|
)
|
|
|
|
(setq ent (ssname ss 0))
|
|
(setq ed (entget ent))
|
|
|
|
(if (/= (cdr (assoc 0 ed)) "INSERT")
|
|
(progn
|
|
(princ (ssg-text "cmd-kein-block-ausgewaehlt"))
|
|
(princ)
|
|
(exit)
|
|
)
|
|
)
|
|
|
|
(setq bname (cdr (assoc 2 ed)))
|
|
|
|
(cond
|
|
;; Kreisel-Bloecke -> KreiselEdit
|
|
((wcmatch bname "KREISEL_*")
|
|
(princ (ssg-textf "cmd-kreisel-bearbeiten" (list bname)))
|
|
(c:KreiselEdit)
|
|
)
|
|
|
|
;; Eckrad-Bloecke -> BEDIT (kein eigener Edit-Dialog in LISP)
|
|
((wcmatch bname "ECKRAD_*")
|
|
(princ (ssg-textf "cmd-eckrad-bearbeiten" (list bname)))
|
|
(command "_.BEDIT" bname)
|
|
)
|
|
|
|
;; Gefaellestrecke-Bloecke (GF_n) -> GEFAELLESTRECKE_EDIT (DCL-Dialog)
|
|
((wcmatch bname "GF_*")
|
|
(princ (ssg-textf "cmd-gefaelle-bearbeiten" (list bname)))
|
|
(c:GEFAELLESTRECKE_EDIT)
|
|
)
|
|
|
|
;; VarioFoerderer-Bloecke (VF_n) -> VARIOFOERDERER_EDIT (DCL-Dialog);
|
|
;; weist Bloecke ohne SSG_VF_EDIT-XDATA (Etage/Linienzug/Altbestand)
|
|
;; intern selbst ab, siehe c:VARIOFOERDERER_EDIT in vf_standard.lsp.
|
|
((wcmatch bname "VF_*")
|
|
(princ (ssg-textf "cmd-variofoerderer-bearbeiten" (list bname)))
|
|
(c:VARIOFOERDERER_EDIT)
|
|
)
|
|
|
|
;; Omniflo-Bloecke -> OMNI_EDIT
|
|
;; Erkennung: TEILEART-Attribut vorhanden, AP110-Blockname oder rein numerisch
|
|
((progn
|
|
(setq attribs (ssg-attrib-read ent))
|
|
(setq teileart (cdr (assoc "TEILEART" attribs)))
|
|
(or
|
|
teileart
|
|
(wcmatch (strcase bname) "AP110*,AP_110*,APG110*")
|
|
(wcmatch bname "#*")
|
|
)
|
|
)
|
|
(princ (ssg-textf "cmd-omniflo-bearbeiten" (list bname)))
|
|
(c:OMNI_EDIT)
|
|
)
|
|
|
|
;; Unbekannter Blocktyp -> natives EATTEDIT (Attribut-Editor)
|
|
(t
|
|
(princ (ssg-textf "cmd-attribute-bearbeiten" (list bname)))
|
|
(command "_.EATTEDIT")
|
|
)
|
|
)
|
|
(princ)
|
|
)
|
|
|
|
;; ============================================================
|
|
;; C:EATTEDIT - Abfangen des eingebauten Doppelklick-Befehls
|
|
;; UNDEFINE zwingt BricsCAD, auch interne Aufrufe ueber LISP
|
|
;; zu leiten. Fallback auf _.EATTEDIT (Dot-Prefix = nativ,
|
|
;; kein Loop) fuer unbekannte Bloecke.
|
|
;; ============================================================
|
|
(defun c:EATTEDIT ()
|
|
(c:SSG_BLOCKEDIT)
|
|
)
|
|
(if (not *ssg-eattedit-undefined*)
|
|
(progn
|
|
(command "_.UNDEFINE" "EATTEDIT")
|
|
(setq *ssg-eattedit-undefined* t)
|
|
)
|
|
)
|
|
|
|
(princ "\nSSG_LIB_Commands.lsp geladen - Dummy-Befehle registriert.")
|
|
(princ)
|