[ADD] ILS Zusatzmodule Einfügefunktion und 3D Modelle implementiert
This commit is contained in:
+107
-8
@@ -1,18 +1,117 @@
|
||||
;; ============================================================
|
||||
;; SSG_LIB - Dummy-Befehlsdefinitionen fuer Menue SSG_LIB
|
||||
;; Jeder Befehl gibt eine Meldung aus und kann spaeter
|
||||
;; durch echte Funktionalitaet ersetzt werden.
|
||||
;; SSG_LIB - Befehlsdefinitionen fuer Menue SSG_LIB
|
||||
;; Enthaelt implementierte Befehle (BTMT Be-/Entladung, Sensoren,
|
||||
;; Konfiguration, SSG_BLOCKEDIT) und Dummy-Befehle, die nur eine
|
||||
;; Meldung ausgeben und spaeter durch echte Funktionalitaet
|
||||
;; ersetzt werden.
|
||||
;; ============================================================
|
||||
|
||||
;; --- ILS / Zusatzmodul ---
|
||||
(defun c:ILS_BTMT_Beladung ()
|
||||
(princ "\n[DUMMY] ILS_BTMT_Beladung aufgerufen")
|
||||
;; ssg-ils-block-ebene (ssg_core.lsp) arbeitet ueber die VLA-Blocktabelle
|
||||
(vl-load-com)
|
||||
|
||||
;; --- ILS / Zusatzmodul: BTMT Be-/Entladestation einfuegen ---
|
||||
|
||||
;; ROH-Blocknamen (ohne Dimensionssuffix) der beiden Stationen. Das Suffix
|
||||
;; _2D/_3D haengt zentral ssg-ils-blockname-dim an; die BTMT-Entladung liegt
|
||||
;; als SC_Entladung_<DIM>.dwg in data/ils.
|
||||
(if (null *ils-btmt-beladung-block*) (setq *ils-btmt-beladung-block* "BTMT-Beladung"))
|
||||
(if (null *ils-btmt-entladung-block*) (setq *ils-btmt-entladung-block* "SC_Entladung"))
|
||||
|
||||
;; Layer einer frisch eingefuegten Blockreferenz setzen: bevorzugt aus dem
|
||||
;; LAYER-Attribut des Blocks (gleiche Konvention wie omni:insert-dxf in
|
||||
;; OmniModulInsert.lsp und tefl-insert-element in TEFInsert.lsp), sonst aus der
|
||||
;; "eigenen" Ebene der Blockdefinition (ssg-ils-block-ebene). Liefert der Block
|
||||
;; beides nicht, bleibt die Referenz auf dem aktuellen Layer.
|
||||
;; Rueckgabe: gesetzter Layername oder nil.
|
||||
(defun ils-block-layer-setzen (ent realname attribs / lay)
|
||||
(setq lay (cdr (assoc "LAYER" attribs)))
|
||||
(if (or (null lay) (= lay ""))
|
||||
(setq lay (ssg-ils-block-ebene realname))
|
||||
)
|
||||
(if (and lay (/= lay ""))
|
||||
(progn
|
||||
(ssg-make-layer lay 7 nil)
|
||||
(entmod (subst (cons 8 lay) (assoc 8 (entget ent)) (entget ent)))
|
||||
(entupd ent)
|
||||
lay
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
;; Fuegt eine ILS-Station (BTMT-Beladung/SC_Entladung) wiederholt ein, bis der
|
||||
;; Benutzer mit ENTER oder ESC abbricht. Je Einfuegung wird der Einfuegepunkt
|
||||
;; abgefragt, die Drehung bestimmt der Benutzer interaktiv am Cursor (pause).
|
||||
;;
|
||||
;; Die Blockdefinition kommt ueber den zentralen Loader in der AKTUELLEN
|
||||
;; Dimension (ssg-ils-block-laden: *ssg-ils-dim* -> DXFM_DIM, Default 3D);
|
||||
;; eingefuegt wird danach der zurueckgegebene effektive, dim-suffigierte
|
||||
;; Blockname. Fehlt die Datei der gewuenschten Dimension, greift der
|
||||
;; 3D-Fallback aus ssg-ils-block-datei-dim (mit Warnung) - sobald also z.B.
|
||||
;; BTMT-Beladung_2D.dwg in data/ils liegt, wird sie im 2D-Modus automatisch
|
||||
;; verwendet, ohne Codeaenderung. Anders als ils-insert-sensor wird hier NICHT
|
||||
;; per Dateipfad eingefuegt: das laedt die DWG bei jeder Einfuegung erneut von
|
||||
;; der Platte, was bei den grossen 3D-Stationen (BTMT-Beladung_3D ~5 MB) teuer
|
||||
;; ist - der Loader liest sie dagegen nur einmal pro Zeichnung
|
||||
;; (Redefine-Sperre, siehe ssg_core.lsp).
|
||||
(defun ils-insert-station (rohname / eff res pt vorher ent attribs n)
|
||||
(ssg-start (strcat "ILS " rohname) '(("OSMODE") ("ATTREQ") ("ATTDIA")))
|
||||
(setq eff (ssg-ils-block-laden rohname))
|
||||
(if (null eff)
|
||||
(princ (ssg-textf "ils-station-fehler-blockdatei"
|
||||
(list (ssg-ils-blockname rohname))))
|
||||
(progn
|
||||
(setvar "ATTREQ" 0)
|
||||
(setvar "ATTDIA" 0)
|
||||
(setq n 0)
|
||||
;; Punkt abfragen; ENTER liefert nil, ESC einen abgefangenen Fehler -
|
||||
;; beides beendet die Schleife sauber (ssg-end stellt danach die
|
||||
;; Systemvariablen wieder her).
|
||||
(while
|
||||
(progn
|
||||
(setq res (vl-catch-all-apply
|
||||
'getpoint
|
||||
(list (ssg-textf "ils-station-prompt-punkt" (list eff)))))
|
||||
(and (not (vl-catch-all-error-p res)) res)
|
||||
)
|
||||
(setq pt res)
|
||||
(setq vorher (entlast))
|
||||
(command "_.INSERT" eff pt "" "" pause)
|
||||
;; Laufende Einfuegung sicher beenden (z.B. ESC waehrend der Drehung).
|
||||
(if (> (getvar "CMDACTIVE") 0) (command))
|
||||
(if (> (getvar "CMDACTIVE") 0) (command))
|
||||
(setq ent (entlast))
|
||||
;; Nur weiterarbeiten, wenn wirklich eine neue Blockreferenz entstanden
|
||||
;; ist (abgebrochene Einfuegung liefert weiterhin 'vorher').
|
||||
(if (and ent (not (eq ent vorher))
|
||||
(= (cdr (assoc 0 (entget ent))) "INSERT"))
|
||||
(progn
|
||||
(setq attribs (ssg-attrib-read ent))
|
||||
(ils-block-layer-setzen ent eff attribs)
|
||||
;; ID nur vergeben, wenn der Block ueberhaupt ein ID-Attribut fuehrt:
|
||||
;; ohne ID-ATTDEF verwirft ssg-attrib-set-on die Zuweisung still und
|
||||
;; die Meldung aus ssg-id-generate waere irrefuehrend (siehe
|
||||
;; ssg-id-set-and-verify in ssg_id.lsp).
|
||||
(if (and (assoc "ID" attribs)
|
||||
(car (atoms-family 1 '("SSG-ID-GENERATE"))))
|
||||
(ssg-id-generate ent)
|
||||
)
|
||||
(setq n (1+ n))
|
||||
)
|
||||
)
|
||||
)
|
||||
(princ (ssg-textf "ils-station-fertig" (list (itoa n) eff)))
|
||||
)
|
||||
)
|
||||
(ssg-end)
|
||||
(princ)
|
||||
)
|
||||
|
||||
(defun c:ILS_BTMT_Beladung ()
|
||||
(ils-insert-station *ils-btmt-beladung-block*)
|
||||
)
|
||||
|
||||
(defun c:ILS_BTMT_Entladung ()
|
||||
(princ "\n[DUMMY] ILS_BTMT_Entladung aufgerufen")
|
||||
(princ)
|
||||
(ils-insert-station *ils-btmt-entladung-block*)
|
||||
)
|
||||
|
||||
;; --- ILS / Zusatzmodul: Sensoren (Scanner / Separator) einfuegen ---
|
||||
|
||||
Reference in New Issue
Block a user