[ADD] Verbinder für Omniflo Fahrstrecke hinzugefügt
This commit is contained in:
+144
-107
@@ -1004,8 +1004,7 @@
|
||||
;; hoehe = Hoehe in mm als String (wird als HOEHE-Attribut gesetzt)
|
||||
;; drehung = Drehwinkel in Grad als String (Block-Rotation)
|
||||
;; Rueckgabe: Einfuegepunkt oder nil bei Abbruch
|
||||
(defun omni:insert-dxf (sivasnr-str hoehe drehung / dxf-pfad omniflo-pfad angleDeg
|
||||
drehung-anzeige blockEnt attribs layer-name ed pt10 zval zdelta)
|
||||
(defun omni:insert-dxf (sivasnr-str hoehe drehung / dxf-pfad omniflo-pfad)
|
||||
(setq omniflo-pfad (getenv "DXFM_OMNIFLO"))
|
||||
(if (null omniflo-pfad)
|
||||
(progn
|
||||
@@ -1019,94 +1018,102 @@
|
||||
(princ (ssg-textf "omni-fehler-dxf-nicht-gefunden" (list (strcat omniflo-pfad "/" sivasnr-str ".dxf"))))
|
||||
nil
|
||||
)
|
||||
(progn
|
||||
(ssg-start "OMNI DXF Insert" '(("ATTREQ") ("ATTDIA")))
|
||||
(setvar "ATTREQ" 0)
|
||||
(setvar "ATTDIA" 0)
|
||||
|
||||
;; Absolute Z-Hoehe fuer den Einfuegepunkt bestimmen
|
||||
(setq zval (if (and hoehe (/= hoehe "")) (atof hoehe) 0.0))
|
||||
|
||||
;; Interaktives Einfuegen mit Live-Vorschau am Mauszeiger:
|
||||
;; dxf-pfad -> Block aus Datei definieren/waehlen
|
||||
;; 1. 'pause -> Einfuegepunkt; Objekt haengt sichtbar am Cursor und
|
||||
;; verschiebt sich mit der Maus (erster Klick positioniert)
|
||||
;; "" "" -> X-/Y-Massstab = 1
|
||||
;; Drehung -> aus Dialog fest, sonst 2. 'pause: Objekt dreht sich
|
||||
;; beim Ziehen sichtbar mit, zweiter Klick beendet
|
||||
(if drehung
|
||||
(progn
|
||||
(setq angleDeg (atof drehung))
|
||||
(setq drehung-anzeige drehung)
|
||||
(command "_.INSERT" dxf-pfad pause "" "" angleDeg)
|
||||
)
|
||||
(command "_.INSERT" dxf-pfad pause "" "" pause)
|
||||
)
|
||||
;; INSERT vollstaendig abschliessen (bei Bedarf weitere Eingabe zulassen)
|
||||
(while (> (getvar "CMDACTIVE") 0) (command pause))
|
||||
|
||||
(setq blockEnt (entlast))
|
||||
|
||||
(if (and blockEnt (= (cdr (assoc 0 (entget blockEnt))) "INSERT"))
|
||||
(progn
|
||||
(setq ed (entget blockEnt))
|
||||
|
||||
;; Tatsaechlich per Maus gesetzte Drehung ermitteln (interaktiv)
|
||||
(if (null drehung)
|
||||
(progn
|
||||
(setq angleDeg (* (cdr (assoc 50 ed)) (/ 180.0 pi)))
|
||||
(setq drehung-anzeige (rtos angleDeg 2 1))
|
||||
)
|
||||
)
|
||||
|
||||
;; Z-Hoehe absolut anwenden: Block (inkl. Attribute) per MOVE um
|
||||
;; die Differenz zum aktuellen Einfuegepunkt-Z verschieben. Osnap
|
||||
;; beim interaktiven Einfuegen kann eine abweichende Z-Lage liefern,
|
||||
;; daher Differenz statt fixem Wert (vgl. GF-Z-Versatz-Bug).
|
||||
;; Explizite Koordinaten unterliegen keinem Objektfang.
|
||||
(setq pt10 (cdr (assoc 10 ed)))
|
||||
(setq zdelta (- zval (caddr pt10)))
|
||||
(if (/= zdelta 0.0)
|
||||
(command "_.MOVE" blockEnt "" (list 0.0 0.0 0.0) (list 0.0 0.0 zdelta))
|
||||
)
|
||||
|
||||
;; HOEHE und DREHUNG Attribute setzen
|
||||
(ssg-attrib-set-on blockEnt
|
||||
(list (cons "HOEHE" (if hoehe hoehe (ssg-cfg-or "omniflo" "default_hoehe" "2000")))
|
||||
(cons "DREHUNG" drehung-anzeige)))
|
||||
|
||||
;; Layer aus der Block-Vorgabe (LAYER-Attribut) setzen
|
||||
(setq attribs (ssg-attrib-read blockEnt))
|
||||
(setq layer-name (ssg-block-layer-vorgabe blockEnt sivasnr-str attribs))
|
||||
)
|
||||
)
|
||||
|
||||
;; Fallback fuer Anzeige, falls keine Drehung ermittelt wurde
|
||||
(if (null drehung-anzeige)
|
||||
(setq drehung-anzeige (rtos (if angleDeg angleDeg 0.0) 2 1))
|
||||
)
|
||||
|
||||
;; Eindeutige ID zuweisen
|
||||
(if (and blockEnt (atoms-family 1 '("ssg-id-generate")))
|
||||
(ssg-id-generate blockEnt)
|
||||
)
|
||||
|
||||
(princ (ssg-textf "omni-dxf-eingefuegt"
|
||||
(list
|
||||
sivasnr-str
|
||||
(if hoehe hoehe (ssg-cfg-or "omniflo" "default_hoehe" "2000"))
|
||||
drehung-anzeige
|
||||
(if layer-name (strcat " Layer=" layer-name) "")
|
||||
)))
|
||||
(ssg-end)
|
||||
;; Rueckgabe: tatsaechlicher Einfuegepunkt
|
||||
(if blockEnt (cdr (assoc 10 (entget blockEnt))))
|
||||
)
|
||||
(omni:insert-datei dxf-pfad sivasnr-str hoehe drehung)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
;; --- Block-Datei (DXF/DWG) interaktiv einfuegen ---
|
||||
;; dxf-pfad = vollstaendiger Pfad der Blockdatei (bereits auf Existenz geprueft)
|
||||
;; name = Anzeigename/Blockname fuer Meldung und Layer-Vorgabe
|
||||
;; hoehe, drehung wie omni:insert-dxf
|
||||
;; Rueckgabe: Einfuegepunkt oder nil bei Abbruch
|
||||
(defun omni:insert-datei (dxf-pfad name hoehe drehung / angleDeg
|
||||
drehung-anzeige blockEnt attribs layer-name ed pt10 zval zdelta)
|
||||
(ssg-start "OMNI DXF Insert" '(("ATTREQ") ("ATTDIA")))
|
||||
(setvar "ATTREQ" 0)
|
||||
(setvar "ATTDIA" 0)
|
||||
|
||||
;; Absolute Z-Hoehe fuer den Einfuegepunkt bestimmen
|
||||
(setq zval (if (and hoehe (/= hoehe "")) (atof hoehe) 0.0))
|
||||
|
||||
;; Interaktives Einfuegen mit Live-Vorschau am Mauszeiger:
|
||||
;; dxf-pfad -> Block aus Datei definieren/waehlen
|
||||
;; 1. 'pause -> Einfuegepunkt; Objekt haengt sichtbar am Cursor und
|
||||
;; verschiebt sich mit der Maus (erster Klick positioniert)
|
||||
;; "" "" -> X-/Y-Massstab = 1
|
||||
;; Drehung -> aus Dialog fest, sonst 2. 'pause: Objekt dreht sich
|
||||
;; beim Ziehen sichtbar mit, zweiter Klick beendet
|
||||
(if drehung
|
||||
(progn
|
||||
(setq angleDeg (atof drehung))
|
||||
(setq drehung-anzeige drehung)
|
||||
(command "_.INSERT" dxf-pfad pause "" "" angleDeg)
|
||||
)
|
||||
(command "_.INSERT" dxf-pfad pause "" "" pause)
|
||||
)
|
||||
;; INSERT vollstaendig abschliessen (bei Bedarf weitere Eingabe zulassen)
|
||||
(while (> (getvar "CMDACTIVE") 0) (command pause))
|
||||
|
||||
(setq blockEnt (entlast))
|
||||
|
||||
(if (and blockEnt (= (cdr (assoc 0 (entget blockEnt))) "INSERT"))
|
||||
(progn
|
||||
(setq ed (entget blockEnt))
|
||||
|
||||
;; Tatsaechlich per Maus gesetzte Drehung ermitteln (interaktiv)
|
||||
(if (null drehung)
|
||||
(progn
|
||||
(setq angleDeg (* (cdr (assoc 50 ed)) (/ 180.0 pi)))
|
||||
(setq drehung-anzeige (rtos angleDeg 2 1))
|
||||
)
|
||||
)
|
||||
|
||||
;; Z-Hoehe absolut anwenden: Block (inkl. Attribute) per MOVE um
|
||||
;; die Differenz zum aktuellen Einfuegepunkt-Z verschieben. Osnap
|
||||
;; beim interaktiven Einfuegen kann eine abweichende Z-Lage liefern,
|
||||
;; daher Differenz statt fixem Wert (vgl. GF-Z-Versatz-Bug).
|
||||
;; Explizite Koordinaten unterliegen keinem Objektfang.
|
||||
(setq pt10 (cdr (assoc 10 ed)))
|
||||
(setq zdelta (- zval (caddr pt10)))
|
||||
(if (/= zdelta 0.0)
|
||||
(command "_.MOVE" blockEnt "" (list 0.0 0.0 0.0) (list 0.0 0.0 zdelta))
|
||||
)
|
||||
|
||||
;; HOEHE und DREHUNG Attribute setzen
|
||||
(ssg-attrib-set-on blockEnt
|
||||
(list (cons "HOEHE" (if hoehe hoehe (ssg-cfg-or "omniflo" "default_hoehe" "2000")))
|
||||
(cons "DREHUNG" drehung-anzeige)))
|
||||
|
||||
;; Layer aus der Block-Vorgabe (LAYER-Attribut) setzen
|
||||
(setq attribs (ssg-attrib-read blockEnt))
|
||||
(setq layer-name (ssg-block-layer-vorgabe blockEnt name attribs))
|
||||
)
|
||||
)
|
||||
|
||||
;; Fallback fuer Anzeige, falls keine Drehung ermittelt wurde
|
||||
(if (null drehung-anzeige)
|
||||
(setq drehung-anzeige (rtos (if angleDeg angleDeg 0.0) 2 1))
|
||||
)
|
||||
|
||||
;; Eindeutige ID zuweisen
|
||||
(if (and blockEnt (atoms-family 1 '("ssg-id-generate")))
|
||||
(ssg-id-generate blockEnt)
|
||||
)
|
||||
|
||||
(princ (ssg-textf "omni-dxf-eingefuegt"
|
||||
(list
|
||||
name
|
||||
(if hoehe hoehe (ssg-cfg-or "omniflo" "default_hoehe" "2000"))
|
||||
drehung-anzeige
|
||||
(if layer-name (strcat " Layer=" layer-name) "")
|
||||
)))
|
||||
(ssg-end)
|
||||
;; Rueckgabe: tatsaechlicher Einfuegepunkt
|
||||
(if blockEnt (cdr (assoc 10 (entget blockEnt))))
|
||||
)
|
||||
|
||||
|
||||
;; --- Eintrag aus Dialog-Ergebnis einfuegen ---
|
||||
;; dlg-result = (eintrag hoehe drehung) aus omni:bogen-dialog / omni:weichen-dialog
|
||||
@@ -1650,76 +1657,106 @@
|
||||
)
|
||||
|
||||
;; --- Omniflo / Verbinder ---
|
||||
;; Verbinder-Bloecke liegen dimensionsunabhaengig als DWG in
|
||||
;; data/omniflo/Verbinder (nicht unter DXFM_OMNIFLO = data/omniflo/<DIM>).
|
||||
;; Einfuegen wie die festen TEF-Bauteile ueber omni:insert-datei: Punkt und
|
||||
;; Drehung interaktiv, Layer aus dem LAYER-Attribut, ID per ssg-id-generate.
|
||||
;; Befehl -> DWG-Name steht direkt im jeweiligen c:OMNI_TV_*-Befehl.
|
||||
|
||||
;; Pfad der Verbinder-DWG aus Datenverzeichnis + Dateiname (ohne .dwg)
|
||||
(defun omni:verbinder-pfad (data-pfad datei)
|
||||
(strcat (vl-string-right-trim "/" (vl-string-translate "\\" "/" data-pfad))
|
||||
"/omniflo/Verbinder/" datei ".dwg")
|
||||
)
|
||||
|
||||
;; Verbinder-DWG interaktiv einfuegen. Rueckgabe: Einfuegepunkt oder nil
|
||||
(defun omni:insert-verbinder (datei / data-pfad pfad)
|
||||
(setq data-pfad (getenv "DXFM_DATA"))
|
||||
(cond
|
||||
((null data-pfad)
|
||||
(princ (ssg-text "omni-fehler-dxfm-data"))
|
||||
nil)
|
||||
((not (findfile (setq pfad (omni:verbinder-pfad data-pfad datei))))
|
||||
(princ (ssg-textf "omni-fehler-dxf-nicht-gefunden" (list pfad)))
|
||||
nil)
|
||||
(t (omni:insert-datei pfad datei nil nil))
|
||||
)
|
||||
)
|
||||
|
||||
(defun c:OMNI_TV_W_W ()
|
||||
(princ "\n[DUMMY] TV W-W kpl")
|
||||
(omni:insert-verbinder "TV_W-W_kpl")
|
||||
(princ)
|
||||
)
|
||||
(defun c:OMNI_TV_W_AP110 ()
|
||||
(princ "\n[DUMMY] TV W-AP110 kpl")
|
||||
(omni:insert-verbinder "TV_W-AP110_kpl")
|
||||
(princ)
|
||||
)
|
||||
(defun c:OMNI_TV_W_AP60 ()
|
||||
(princ "\n[DUMMY] TV W-AP60 oben kpl.")
|
||||
(omni:insert-verbinder "TV_W-AP60_oben")
|
||||
(princ)
|
||||
)
|
||||
(defun c:OMNI_TV_W_AP60_KPL ()
|
||||
(omni:insert-verbinder "TV_W-AP60_kpl")
|
||||
(princ)
|
||||
)
|
||||
(defun c:OMNI_TV_W_AP110_W ()
|
||||
(princ "\n[DUMMY] TV W-AP110-W kpl")
|
||||
(princ)
|
||||
)
|
||||
(defun c:OMNI_TV_W_AP ()
|
||||
(princ "\n[DUMMY] TV W-AP oben kpl")
|
||||
(omni:insert-verbinder "TV_W-AP110-W_kpl")
|
||||
(princ)
|
||||
)
|
||||
(defun c:OMNI_TV_80 ()
|
||||
(princ "\n[DUMMY] TV 80")
|
||||
(omni:insert-verbinder "TV_80_kpl")
|
||||
(princ)
|
||||
)
|
||||
(defun c:OMNI_TV_50 ()
|
||||
(princ "\n[DUMMY] TV 50")
|
||||
(omni:insert-verbinder "TV_50_kpl")
|
||||
(princ)
|
||||
)
|
||||
(defun c:OMNI_TV_ENDPLATTE ()
|
||||
(princ "\n[DUMMY] Endplatte Al-Profil AP schraubbar")
|
||||
(omni:insert-verbinder "VB_ENDP_AP")
|
||||
(princ)
|
||||
)
|
||||
(defun c:OMNI_TV_ANSCHLAG ()
|
||||
(princ "\n[DUMMY] Anschlag AP-Ende fuer Spulenzug")
|
||||
(omni:insert-verbinder "VB_ENDP_AP_Spulenzug")
|
||||
(princ)
|
||||
)
|
||||
(defun c:OMNI_TV_A_AP110_AP60 ()
|
||||
(princ "\n[DUMMY] TV-A fuer AP110/AP60 kpl")
|
||||
(omni:insert-verbinder "TV_AP110-AP60_kpl")
|
||||
(princ)
|
||||
)
|
||||
(defun c:OMNI_TV_A_AP60_ST ()
|
||||
(princ "\n[DUMMY] TV-A fuer AP60/ST")
|
||||
(omni:insert-verbinder "TV_AP60-ST_kpl")
|
||||
(princ)
|
||||
)
|
||||
(defun c:OMNI_TV_A_AP110_ST ()
|
||||
(princ "\n[DUMMY] TV-A fuer AP110/ST kpl")
|
||||
(omni:insert-verbinder "TV_AP110-ST_kpl")
|
||||
(princ)
|
||||
)
|
||||
(defun c:OMNI_TV_SW_II_SW_SW ()
|
||||
(princ "\n[DUMMY] TV-SW II fuer SW-SW")
|
||||
(omni:insert-verbinder "TV_SW-SW")
|
||||
(princ)
|
||||
)
|
||||
(defun c:OMNI_TV_SW_III_AP110_SW ()
|
||||
(princ "\n[DUMMY] TV-SW III fuer SW-AP110-SW")
|
||||
(omni:insert-verbinder "TV_SW-AP110-SW")
|
||||
(princ)
|
||||
)
|
||||
(defun c:OMNI_TV_SW_III_AP110 ()
|
||||
(princ "\n[DUMMY] TV-SW III fuer SW-AP110")
|
||||
(defun c:OMNI_TV_W_AP60_KPL ()
|
||||
(omni:insert-verbinder "TV_W-AP60_kpl")
|
||||
(princ)
|
||||
)
|
||||
(defun c:OMNI_TV_SW_I_AP110 ()
|
||||
(omni:insert-verbinder "TV_SW_I_SW-AP110")
|
||||
(princ)
|
||||
)
|
||||
(defun c:OMNI_TV_SW_IV_AP60 ()
|
||||
(princ "\n[DUMMY] TV-SW IV fuer Anschluss SW-AP60")
|
||||
(omni:insert-verbinder "TV_SW_IV_SW-AP60")
|
||||
(princ)
|
||||
)
|
||||
(defun c:OMNI_TV_SW_IV_ST ()
|
||||
(princ "\n[DUMMY] TV-SW IV fuer SW-ST")
|
||||
(omni:insert-verbinder "TV_SW_IV_SW-ST")
|
||||
(princ)
|
||||
)
|
||||
(defun c:OMNI_TV_MUFFE ()
|
||||
(princ "\n[DUMMY] Muffe")
|
||||
(omni:insert-verbinder "VB_Muffe")
|
||||
(princ)
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user