[ADD] ILS Zusatzmodule Einfügefunktion und 3D Modelle implementiert
This commit is contained in:
+31
-7
@@ -35,7 +35,6 @@ am Label-Anfang, bei Submenue-Schliessern hinter dem `<-` (`[<-~Label]`).
|
||||
|
||||
| Menuebereich | Eintraege | Definiert in |
|
||||
| --- | --- | --- |
|
||||
| ILS ▸ Zusatzmodul | BTMT-Beladung, BTMT-Entladung | `SSG_LIB_Commands.lsp` |
|
||||
| ILS ▸ Foerderer | Durch TEF angetriebene Strecke; Kurven 90/60/30 links/rechts angetrieben Aussen + Innen (12) | `SSG_LIB_Commands.lsp` |
|
||||
| ILS ▸ Gefaellestrecke | Kurven 90/60/30 links/rechts Gefaellestrecke (6) | `SSG_LIB_Commands.lsp` |
|
||||
| Omniflo ▸ TEF Elemente | UmlenkR/L, AntriebL/R, TEF Gerade, KettenFoerderer (6) | `OmniModulInsert.lsp` |
|
||||
@@ -43,8 +42,9 @@ am Label-Anfang, bei Submenue-Schliessern hinter dem `<-` (`[<-~Label]`).
|
||||
| Omniflo ▸ Boegen fuer Weichen | alle `OMNI_APBW_*` (14) | `OmniModulInsert.lsp` |
|
||||
|
||||
Aktiv (implementiert) sind u.a.: Kreisel, Eckrad, VarioFoerderer, EtageVarioFoerderer,
|
||||
Gefaellestrecke, Omniflo Boegen (APB), Aluprofil-Geraden (AP), alle Weichen
|
||||
(W90/W45/WP/WK/WKomb), Export (Sivas/CSV) und die Tests.
|
||||
Gefaellestrecke, BTMT Be-/Entladung, Scanner/Separator, Omniflo Boegen (APB),
|
||||
Aluprofil-Geraden (AP), alle Weichen (W90/W45/WP/WK/WKomb), Export (Sivas/CSV)
|
||||
und die Tests.
|
||||
|
||||
---
|
||||
|
||||
@@ -494,11 +494,11 @@ AutoLISP-Implementierung fuer alle Omniflo-Komponenten: Boegen, Weichen, Verbind
|
||||
|
||||
---
|
||||
|
||||
### `SSG_LIB_Commands.lsp` – Dummy-Befehle, Sensoren, Konfiguration und SSG_BLOCKEDIT
|
||||
### `SSG_LIB_Commands.lsp` – BTMT, Sensoren, Dummy-Befehle, Konfiguration und SSG_BLOCKEDIT
|
||||
|
||||
Sammeldatei fuer Menue-Befehle: teils Platzhalter fuer noch nicht implementierte
|
||||
Eintraege, teils bereits **echte** Funktionalitaet (Sensoren, Konfiguration,
|
||||
Doppelklick-Dispatcher). Alle noch offenen Dummy-Menueintraege sind in
|
||||
Eintraege, teils bereits **echte** Funktionalitaet (BTMT Be-/Entladung, Sensoren,
|
||||
Konfiguration, Doppelklick-Dispatcher). Alle noch offenen Dummy-Menueintraege sind in
|
||||
`menu/SSG_LIB.mnu` mit `~` ausgegraut (siehe Abschnitt
|
||||
["Status: noch offene Menueintraege"](#status-noch-offene-menueintraege-im-menue-ausgegraut)).
|
||||
|
||||
@@ -510,11 +510,35 @@ mit interaktivem Einfuegepunkt/Rotation, Blockdatei via `ssg-ils-block-datei`):
|
||||
| `ILS_SCANNER_INSERT` | `Scanner` | Scanner wiederholt einfuegen (ENTER/ESC beendet) |
|
||||
| `ILS_SEPARATOR_INSERT` | `Separator_SP` | Separator wiederholt einfuegen (Menue „Separator einfuegen") |
|
||||
|
||||
**BTMT Be-/Entladestation einfuegen** (real, ueber `ils-insert-station`):
|
||||
|
||||
| Befehl | ROH-Block | Datei (3D) | Beschreibung |
|
||||
| --- | --- | --- | --- |
|
||||
| `ILS_BTMT_Beladung` | `BTMT-Beladung` | `BTMT-Beladung_3D.dwg` | Beladestation wiederholt einfuegen (ENTER/ESC beendet) |
|
||||
| `ILS_BTMT_Entladung` | `SC_Entladung` | `SC_Entladung_3D.dwg` | Entladestation wiederholt einfuegen (ENTER/ESC beendet) |
|
||||
|
||||
Ablauf je Einfuegung: Einfuegepunkt abfragen → `_.INSERT` mit interaktiver
|
||||
Drehung (`pause`) → Layer aus dem `LAYER`-Attribut bzw. der eigenen Ebene der
|
||||
Blockdefinition setzen (`ils-block-layer-setzen`, gleiche Konvention wie
|
||||
`omni:insert-dxf`/`tefl-insert-element`) → `ssg-id-generate`, **falls** der Block
|
||||
ein `ID`-Attribut fuehrt.
|
||||
|
||||
Die Blockdefinition kommt aus `ssg-ils-block-laden` (aktuelle Dimension
|
||||
`*ssg-ils-dim*` → `DXFM_DIM` → `3D`, DWG wird nur einmal pro Zeichnung gelesen);
|
||||
eingefuegt wird der zurueckgegebene dim-suffigierte Blockname. Fehlt die Datei
|
||||
der gewuenschten Dimension, greift der 3D-Fallback mit Warnung – aktuell fuer
|
||||
`BTMT-Beladung_2D.dwg`; sobald diese Datei in `data/ils/` liegt, wird sie im
|
||||
2D-Modus ohne Codeaenderung verwendet (`SC_Entladung_2D.dwg` existiert bereits).
|
||||
|
||||
> Hinweis: Beide Stationen werden von `ssg-id-collect-blocks` (`ssg_id.lsp`) und
|
||||
> den `blockpattern`-Mustern in `cfg/export.cfg` **nicht** erfasst – sie
|
||||
> erscheinen daher noch nicht im Sivas-/CSV-Export.
|
||||
|
||||
Registrierte Dummy-Befehle:
|
||||
|
||||
| Gruppe | Befehle |
|
||||
| --- | --- |
|
||||
| ILS Zusatzmodule | `ILS_BTMT_Beladung`, `ILS_BTMT_Entladung`, `ILS_ETF_Etagenfoerderer`, `ILS_TEF_Strecke` |
|
||||
| ILS Zusatzmodule | `ILS_ETF_Etagenfoerderer`, `ILS_TEF_Strecke` |
|
||||
| ILS Kurven angetrieben Aussen | `ILS_K90LA`, `ILS_K90RA`, `ILS_K60LA`, `ILS_K60RA`, `ILS_K30LA`, `ILS_K30RA` |
|
||||
| ILS Kurven angetrieben Innen | `ILS_K90LI`, `ILS_K90RI`, `ILS_K60LI`, `ILS_K60RI`, `ILS_K30LI`, `ILS_K30RI` |
|
||||
| ILS Gefaellestrecken-Kurven | `ILS_Gefaellestrecke`, `ILS_GK90L`, `ILS_GK90R`, `ILS_GK60L`, `ILS_GK60R`, `ILS_GK30L`, `ILS_GK30R` |
|
||||
|
||||
+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