Merge branch 'master' of https://gitea.schoenenberger.de/Schoenenberger_Systeme_GmbH/dxfmakros
This commit is contained in:
+2
-1
@@ -183,6 +183,7 @@ cython_debug/
|
||||
/tests/output/
|
||||
|
||||
# BricsCAD kompilierte Menuedateien
|
||||
*.cui
|
||||
#CUI soll nun auch verwaltet werden
|
||||
#*.cui
|
||||
data/block_libraries/ils_library.dxf >> .gitignore
|
||||
echo data/block_libraries/ils_library.dxf
|
||||
|
||||
@@ -1289,6 +1289,24 @@
|
||||
)
|
||||
|
||||
|
||||
;; --- Omniflo / Anbaugruppen, Scanner, Stopper ---
|
||||
;; Feste TEF-Bauteile ohne Sivas-Auswahl: Datei liegt direkt unter DXFM_OMNIFLO,
|
||||
;; wird per omni:insert-dxf am gewaehlten Einfuegepunkt ohne Drehung eingefuegt.
|
||||
(defun c:OMNI_STOPPER ()
|
||||
(omni:insert-dxf "827062022" nil nil)
|
||||
(princ)
|
||||
)
|
||||
(defun c:OMNI_SCANNER ()
|
||||
(omni:insert-dxf "Scanner" nil nil)
|
||||
(princ)
|
||||
)
|
||||
(defun c:OMNI_BUERSTENBREMSE ()
|
||||
(omni:insert-dxf "827064041" nil nil)
|
||||
(princ)
|
||||
)
|
||||
|
||||
|
||||
|
||||
;; --- Omniflo / TEF Elemente ---
|
||||
;; Feste TEF-Bauteile ohne Sivas-Auswahl: Datei liegt direkt unter DXFM_OMNIFLO,
|
||||
;; wird per omni:insert-dxf am gewaehlten Einfuegepunkt ohne Drehung eingefuegt.
|
||||
|
||||
@@ -0,0 +1,216 @@
|
||||
;; ============================================================
|
||||
;; TEFInsert.lsp - TEF-Geradenstuecke entlang einer Linie
|
||||
;;
|
||||
;; Zeichnet eine Linie zwischen zwei vom Benutzer gewaehlten Punkten
|
||||
;; und reiht darauf 1000 mm lange TEF-Geradenelemente
|
||||
;; (data/omniflo/<DIM>/0_B10030.dxf, $INSBASE=Ursprung=Anfang des
|
||||
;; Elements, Ende bei lokal X=1000) aneinander.
|
||||
;;
|
||||
;; Ist die Linienlaenge kein exaktes Vielfaches von 1000 mm, wird fuer
|
||||
;; das letzte Stueck ein zusaetzliches Element eingefuegt, das auf der
|
||||
;; Linie zurueckverschoben platziert wird (ueberlappt das vorletzte
|
||||
;; Element), sodass der Foerderer exakt am Linienende endet - statt
|
||||
;; einer Luecke oder eines abgeschnittenen Elements.
|
||||
;;
|
||||
;; Die Linie darf geneigt sein (3D): Start-/Endpunkt koennen
|
||||
;; unterschiedliche Z-Werte haben, die Elemente werden dann analog zu
|
||||
;; vf_core.lsp (Rz(hz)*Ry(winkel)-Rotation, winkel positiv=abwaerts)
|
||||
;; gekippt eingefuegt.
|
||||
;;
|
||||
;; Befehl: TEF_FOERDERER_LINIE
|
||||
;; ============================================================
|
||||
|
||||
(vl-load-com)
|
||||
|
||||
(if (null doc) (setq doc (vla-get-ActiveDocument (vlax-get-acad-object))))
|
||||
(if (null modelspace) (setq modelspace (vla-get-ModelSpace doc)))
|
||||
|
||||
;; Elementlaenge (mm) von 0_B10030.dxf (siehe Header-Kommentar oben)
|
||||
(if (null *tefl-elementlaenge*) (setq *tefl-elementlaenge* 1000.0))
|
||||
;; Toleranz (mm): Restlaenge unterhalb dieses Werts gilt als "exaktes
|
||||
;; Vielfaches der Elementlaenge" -> kein Zusatzelement noetig.
|
||||
(if (null *tefl-toleranz*) (setq *tefl-toleranz* 0.5))
|
||||
;; Dateiname (ohne .dxf) des TEF-Geradenelements in DXFM_OMNIFLO
|
||||
(if (null *tefl-blockname*) (setq *tefl-blockname* "0_B10030"))
|
||||
|
||||
;; ------------------------------------------------------------
|
||||
;; Pfad zur Element-DXF ermitteln (DXFM_OMNIFLO, wie omni:insert-dxf
|
||||
;; in OmniModulInsert.lsp).
|
||||
;; ------------------------------------------------------------
|
||||
(defun tefl-dxf-pfad ( / omniflo-pfad)
|
||||
(setq omniflo-pfad (getenv "DXFM_OMNIFLO"))
|
||||
(if omniflo-pfad
|
||||
(strcat (vl-string-translate "\\" "/" omniflo-pfad) "/" *tefl-blockname* ".dxf")
|
||||
)
|
||||
)
|
||||
|
||||
;; ------------------------------------------------------------
|
||||
;; Element-DXF einmalig als Block registrieren (Analog zu
|
||||
;; ensure-block-loaded in vf_core.lsp, aber fuer eine externe .dxf statt
|
||||
;; .dwg): einmal am Ursprung einfuegen und wieder loeschen, damit die
|
||||
;; Datei als Block-Tabelleneintrag *tefl-blockname* existiert. Danach
|
||||
;; kann jede weitere Einfuegung ueber vla-InsertBlock + vla-TransformBy
|
||||
;; mit voller 3D-Rotation erfolgen (das kann die reine command-Zeilen-
|
||||
;; INSERT nicht leisten - die dreht nur um die Z-Achse).
|
||||
;; ------------------------------------------------------------
|
||||
(defun tefl-ensure-block-loaded (dxf-pfad / tmpEnt)
|
||||
(if (not (tblsearch "BLOCK" *tefl-blockname*))
|
||||
(progn
|
||||
(command "_.INSERT" dxf-pfad (list 0.0 0.0 0.0) 1 1 0)
|
||||
(while (> (getvar "CMDACTIVE") 0) (command ""))
|
||||
(setq tmpEnt (entlast))
|
||||
(if (and tmpEnt (= (cdr (assoc 0 (entget tmpEnt))) "INSERT"))
|
||||
(command "_.ERASE" tmpEnt "")
|
||||
)
|
||||
)
|
||||
)
|
||||
(tblsearch "BLOCK" *tefl-blockname*)
|
||||
)
|
||||
|
||||
;; ------------------------------------------------------------
|
||||
;; Ein Element an Position 's' (mm ab Startpunkt) entlang der
|
||||
;; Fahrtrichtung einfuegen.
|
||||
;; start : Startpunkt der Linie (3D)
|
||||
;; richtung-einheit : Einheitsvektor der Fahrtrichtung (3D)
|
||||
;; hz / winkel : Fahrtrichtung in Grad (Rz(hz)*Ry(winkel)-Konvention
|
||||
;; wie hz-winkel->xu/frame->hz-winkel in vf_core.lsp)
|
||||
;;
|
||||
;; Attribute: vla-InsertBlock legt fuer ein Block mit ATTDEFs automatisch
|
||||
;; ATTRIB-Entities mit den Vorgabewerten aus der Quell-DXF an (wie beim
|
||||
;; command-Zeilen-INSERT mit ATTREQ=0). Analog zu omni:insert-dxf in
|
||||
;; OmniModulInsert.lsp wird danach nur das LAYER-Attribut ausgelesen und
|
||||
;; der Block auf diesen Layer verschoben - alle anderen Attribute
|
||||
;; (ARTINR, BESCHR, MENGE, POSITION, DETAILS, ...) behalten den aus der
|
||||
;; Quell-DXF uebernommenen Vorgabewert.
|
||||
;; ------------------------------------------------------------
|
||||
(defun tefl-insert-element (start richtung-einheit s hz winkel /
|
||||
rad-h rad-v chv shv cvv svv matrix block-obj blockEnt
|
||||
pt attribs layer-name)
|
||||
(setq pt (list (+ (car start) (* s (car richtung-einheit)))
|
||||
(+ (cadr start) (* s (cadr richtung-einheit)))
|
||||
(+ (caddr start) (* s (caddr richtung-einheit)))))
|
||||
(setq rad-h (* (float hz) (/ pi 180.0)))
|
||||
(setq rad-v (* (float winkel) (/ pi 180.0)))
|
||||
(setq chv (cos rad-h) shv (sin rad-h) cvv (cos rad-v) svv (sin rad-v))
|
||||
(setq block-obj (vla-InsertBlock modelspace (vlax-3D-point '(0.0 0.0 0.0))
|
||||
*tefl-blockname* 1.0 1.0 1.0 0))
|
||||
(setq matrix (list
|
||||
(list (* chv cvv) (- shv) (* chv svv) 0)
|
||||
(list (* shv cvv) chv (* shv svv) 0)
|
||||
(list (- svv) 0 cvv 0)
|
||||
(list 0 0 0 1)))
|
||||
(vla-TransformBy block-obj (vlax-tmatrix matrix))
|
||||
(vla-Move block-obj (vlax-3D-point '(0.0 0.0 0.0)) (vlax-3D-point pt))
|
||||
|
||||
;; LAYER-Attribut auslesen und Block auf diesen Layer verschieben
|
||||
(setq blockEnt (vlax-vla-object->ename block-obj))
|
||||
(setq attribs (ssg-attrib-read blockEnt))
|
||||
(setq layer-name (cdr (assoc "LAYER" attribs)))
|
||||
(if (and layer-name (> (strlen layer-name) 0))
|
||||
(progn
|
||||
(ssg-make-layer layer-name 7 nil)
|
||||
(entmod (subst (cons 8 layer-name) (assoc 8 (entget blockEnt)) (entget blockEnt)))
|
||||
(entupd blockEnt)
|
||||
)
|
||||
)
|
||||
|
||||
;; Eindeutige ID zuweisen, falls das Block-Schema ein ID-Attribut fuehrt
|
||||
;; (bei 0_B10030 aktuell nicht der Fall - dann folgenlos, wie in
|
||||
;; omni:insert-dxf).
|
||||
(if (atoms-family 1 '("ssg-id-generate"))
|
||||
(ssg-id-generate blockEnt)
|
||||
)
|
||||
|
||||
block-obj
|
||||
)
|
||||
|
||||
;; ------------------------------------------------------------
|
||||
;; Hauptbefehl: Start-/Endpunkt abfragen, Linie zeichnen, TEF-Geraden-
|
||||
;; elemente entlang der Linie aneinanderreihen.
|
||||
;; ------------------------------------------------------------
|
||||
(defun c:TEF_FOERDERER_LINIE ( / dxf-pfad p1 p2 dx dy dz laenge horiz hz winkel
|
||||
richtung-einheit anzahl-voll rest i s)
|
||||
(setq dxf-pfad (tefl-dxf-pfad))
|
||||
(cond
|
||||
((null dxf-pfad)
|
||||
(princ (ssg-text "tefl-fehler-dxfm-omniflo")))
|
||||
((not (findfile dxf-pfad))
|
||||
(princ (ssg-textf "tefl-fehler-dxf-nicht-gefunden" (list dxf-pfad))))
|
||||
(t
|
||||
(setq p1 (getpoint (ssg-text "tefl-prompt-startpunkt")))
|
||||
(if (null p1)
|
||||
(princ (ssg-text "tefl-abgebrochen"))
|
||||
(progn
|
||||
(setq p2 (getpoint p1 (ssg-text "tefl-prompt-endpunkt")))
|
||||
(if (null p2)
|
||||
(princ (ssg-text "tefl-abgebrochen"))
|
||||
(progn
|
||||
(setq dx (- (car p2) (car p1))
|
||||
dy (- (cadr p2) (cadr p1))
|
||||
dz (- (caddr p2) (caddr p1)))
|
||||
(setq laenge (sqrt (+ (* dx dx) (* dy dy) (* dz dz))))
|
||||
(if (< laenge *tefl-toleranz*)
|
||||
(princ (ssg-text "tefl-fehler-laenge-null"))
|
||||
(progn
|
||||
(ssg-start "TEF Foerderer Linie" '(("OSMODE") ("ATTREQ") ("ATTDIA")))
|
||||
(setvar "ATTREQ" 0)
|
||||
(setvar "ATTDIA" 0)
|
||||
|
||||
(if (not (tefl-ensure-block-loaded dxf-pfad))
|
||||
(progn
|
||||
(princ (ssg-textf "tefl-fehler-dxf-nicht-gefunden" (list dxf-pfad)))
|
||||
(ssg-end)
|
||||
)
|
||||
(progn
|
||||
;; Fahrtrichtung als Einheitsvektor + hz/winkel
|
||||
(setq richtung-einheit
|
||||
(list (/ dx laenge) (/ dy laenge) (/ dz laenge)))
|
||||
(setq horiz (sqrt (+ (* dx dx) (* dy dy))))
|
||||
(setq hz (* (atan dy dx) (/ 180.0 pi)))
|
||||
(setq winkel (* (atan (- dz) horiz) (/ 180.0 pi)))
|
||||
|
||||
;; Linie zwischen den beiden Punkten zeichnen
|
||||
(entmake (list '(0 . "LINE")
|
||||
(cons 8 (getvar "CLAYER"))
|
||||
(cons 10 p1)
|
||||
(cons 11 p2)))
|
||||
|
||||
;; Volle Elemente ab dem Startpunkt aneinanderreihen
|
||||
(setq anzahl-voll
|
||||
(fix (/ (+ laenge *tefl-toleranz*) *tefl-elementlaenge*)))
|
||||
(setq i 0)
|
||||
(repeat anzahl-voll
|
||||
(tefl-insert-element p1 richtung-einheit
|
||||
(* i *tefl-elementlaenge*) hz winkel)
|
||||
(setq i (1+ i))
|
||||
)
|
||||
|
||||
;; Restlaenge: Zusatzelement zurueckverschoben einfuegen,
|
||||
;; damit der Foerderer exakt am Linienende (p2) endet.
|
||||
(setq rest (- laenge (* anzahl-voll *tefl-elementlaenge*)))
|
||||
(if (> rest *tefl-toleranz*)
|
||||
(progn
|
||||
(setq s (- laenge *tefl-elementlaenge*))
|
||||
(tefl-insert-element p1 richtung-einheit s hz winkel)
|
||||
(setq anzahl-voll (1+ anzahl-voll))
|
||||
)
|
||||
)
|
||||
|
||||
(princ (ssg-textf "tefl-fertig"
|
||||
(list (itoa anzahl-voll) (rtos laenge 2 0))))
|
||||
(ssg-end)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(princ)
|
||||
)
|
||||
|
||||
(princ "\nTEFInsert.lsp geladen. Befehl: TEF_FOERDERER_LINIE")
|
||||
(princ)
|
||||
Binary file not shown.
+3446
-3278
File diff suppressed because it is too large
Load Diff
+2289
-5191
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Binary file not shown.
+8
-1
@@ -618,6 +618,13 @@
|
||||
"gf-status-zus2-ein-seite": "\n>>> EIN-Seite: %1",
|
||||
"gf-status-zus2-lstau": "\n>>> L_stau: %1 mm",
|
||||
"ques-yn-default-yes": " Y/N <Y>: ",
|
||||
"ques-yn-default-no": " Y/N <N>: "
|
||||
"ques-yn-default-no": " Y/N <N>: ",
|
||||
"tefl-fehler-dxfm-omniflo": "\n[TEF] FEHLER: DXFM_OMNIFLO nicht gesetzt (bin/setenv.bat ausfuehren).",
|
||||
"tefl-fehler-dxf-nicht-gefunden": "\n[TEF] FEHLER: Element-DXF nicht gefunden: %1",
|
||||
"tefl-prompt-startpunkt": "\nStartpunkt der Foerderstrecke waehlen: ",
|
||||
"tefl-prompt-endpunkt": "\nEndpunkt der Foerderstrecke waehlen: ",
|
||||
"tefl-abgebrochen": "\n[TEF] Abgebrochen.",
|
||||
"tefl-fehler-laenge-null": "\n[TEF] FEHLER: Start- und Endpunkt liegen zu nah beieinander.",
|
||||
"tefl-fertig": "\n[TEF] %1 Element(e) eingefuegt, Streckenlaenge=%2 mm."
|
||||
}
|
||||
}
|
||||
|
||||
+8
-1
@@ -618,6 +618,13 @@
|
||||
"gf-status-zus2-ein-seite": "\n>>> Input side: %1",
|
||||
"gf-status-zus2-lstau": "\n>>> L_stau: %1 mm",
|
||||
"ques-yn-default-yes": " Y/N <Y>: ",
|
||||
"ques-yn-default-no": " Y/N <N>: "
|
||||
"ques-yn-default-no": " Y/N <N>: ",
|
||||
"tefl-fehler-dxfm-omniflo": "\n[TEF] ERROR: DXFM_OMNIFLO not set (run bin/setenv.bat).",
|
||||
"tefl-fehler-dxf-nicht-gefunden": "\n[TEF] ERROR: Element DXF not found: %1",
|
||||
"tefl-prompt-startpunkt": "\nSelect start point of the conveyor path: ",
|
||||
"tefl-prompt-endpunkt": "\nSelect end point of the conveyor path: ",
|
||||
"tefl-abgebrochen": "\n[TEF] Cancelled.",
|
||||
"tefl-fehler-laenge-null": "\n[TEF] ERROR: Start and end point are too close together.",
|
||||
"tefl-fertig": "\n[TEF] %1 element(s) inserted, path length=%2 mm."
|
||||
}
|
||||
}
|
||||
|
||||
+3
-3
@@ -244,7 +244,7 @@ def build_kreisel_details(block):
|
||||
SKIP_BLOCKS = set(BLOCKPATTERNS.get("pattern_ks_subblocks", ["K1", "K2", "K3", "K4", "KS_EIN", "KS_AUS"]))
|
||||
|
||||
# Sivas-Nummern und Bezeichnungen je ILS-Elementtyp
|
||||
# Hinweis: "ils_kurve", "bt_beladung" und "bg_entladung" sind aktuell nur
|
||||
# Hinweis: "ils_kurve", sind aktuell nur
|
||||
# Typnamen-Platzhalter - die zugehoerigen Menuebefehle sind noch Dummies
|
||||
# (siehe Lisp/README.md), es gibt noch keine Block-Erkennung dafuer.
|
||||
ILS_SIVASNR = {
|
||||
@@ -255,8 +255,8 @@ ILS_SIVASNR = {
|
||||
"ils_kurve": ("", "ILS 2.0 Kurve"),
|
||||
"strecke": ("6220", "ILS 2.0 Strecke"),
|
||||
"gefaellestrecke": ("6220", "ILS 2.0 Gefaellestrecke"),
|
||||
"bt_beladung": ("", "BT - Beladung"),
|
||||
"bg_entladung": ("", "BG - Entladung"),
|
||||
"bt_beladung": ("", "BT - Beladung (mit Vereinzeler, ohne Separator)"),
|
||||
"bg_entladung": ("", "Abwurf für Klammerbügel Sitzbezüge / Kleiderbügel"),
|
||||
"automation": ("6269", "ILS 2.0 Automation und Pneumatik - Gesamtanlage"),
|
||||
}
|
||||
|
||||
|
||||
+1449
File diff suppressed because it is too large
Load Diff
@@ -81,7 +81,12 @@
|
||||
[TEF Antriebst. links]^C^C(ssg-ensure "OmniModulInsert") OMNI_TEF_AntriebL
|
||||
[TEF Umlenkspannst. links]^C^C(ssg-ensure "OmniModulInsert") OMNI_TEF_UmlenkL
|
||||
[--]
|
||||
[TEF Gerade auf Linie]^C^C(ssg-ensure "TEFInsert") TEF_FOERDERER_LINIE
|
||||
[<-TEF Gerade]^C^C(ssg-ensure "OmniModulInsert") OMNI_TEF_Gerade
|
||||
[->Anbaugruppen]
|
||||
[Stopper AP]^C^C(ssg-ensure "OmniModulInsert") OMNI_STOPPER
|
||||
[Scanner]^C^C(ssg-ensure "OmniModulInsert") OMNI_SCANNER
|
||||
[<-Bürstenbremse]^C^C(ssg-ensure "OmniModulInsert") OMNI_BUERSTENBREMSE
|
||||
[~KettenFoerderer]^C^C(ssg-ensure "OmniModulInsert") OMNI_KettenFoerderer
|
||||
[->Verbinder]
|
||||
[~TV W-W kpl]^C^C(ssg-ensure "OmniModulInsert") OMNI_TV_W_W
|
||||
|
||||
Vendored
+10
@@ -16,6 +16,11 @@
|
||||
"wert": 4500.0,
|
||||
"kommentar": "getreal Hoehe (Z) Startpunkt"
|
||||
},
|
||||
{
|
||||
"typ": "string",
|
||||
"wert": "1",
|
||||
"kommentar": "getstring AS-Element Winkel (90 Grad)"
|
||||
},
|
||||
{
|
||||
"typ": "string",
|
||||
"wert": "2",
|
||||
@@ -170,6 +175,11 @@
|
||||
"wert": 2,
|
||||
"kommentar": "getint Option-3-Winkelwahl (45 Grad)"
|
||||
},
|
||||
{
|
||||
"typ": "string",
|
||||
"wert": "1",
|
||||
"kommentar": "getstring ES-Element Winkel (90 Grad)"
|
||||
},
|
||||
{
|
||||
"typ": "string",
|
||||
"wert": "2",
|
||||
|
||||
Reference in New Issue
Block a user