Kreisel wurde mit Beschriftung erstellt und Die Höhe des Basispunktes bestimmt die Höhe des neuen Kreisels.
This commit is contained in:
+389
-91
@@ -8,6 +8,12 @@
|
||||
;; TEIL 1: GLOBALE EINSTELLUNGEN
|
||||
;; ============================================================
|
||||
|
||||
;; Zähler für Kreisel-Nummerierung (wird in Zeichnung gespeichert)
|
||||
(if (null #Kreisel_LetzteNr)
|
||||
(setq #Kreisel_LetzteNr 0)
|
||||
)
|
||||
|
||||
;; Block-Pfad
|
||||
(setq block-pfad (getenv "DXFM_BLOCKS"))
|
||||
|
||||
(if (or (null block-pfad) (= block-pfad ""))
|
||||
@@ -25,9 +31,9 @@
|
||||
(setq *kreisel-durchmesser* 800.0) ;; Kreisdurchmesser AN8/SP8
|
||||
(setq *kreisel-pin-abstand* 100.0) ;; Einrueckung PIN-Linie vom Kreisrand
|
||||
(setq *kreisel-default-laenge* 2300.0) ;; Standard-Tangentenlaenge
|
||||
(setq *kreisel-default-hoehe* 2000.0) ;; Standard-Höhe (Z-Koordinate)
|
||||
|
||||
;; Attribut-Definitionen: ((TAG DEFAULT) ...)
|
||||
;; Reihenfolge = Reihenfolge der ATTDEFs im Block
|
||||
(setq *kreisel-attrib-defs*
|
||||
'(("DREHRICHTUNG" "UZS")
|
||||
("N_SEPARATOREN" "2")
|
||||
@@ -35,17 +41,115 @@
|
||||
("N_SCANNER" "0")
|
||||
("N_RAMPEN" "0")
|
||||
("DREHUNG" "0")
|
||||
("ABSTAND" "2300"))
|
||||
("ABSTAND" "2300")
|
||||
("NUMMER" "0")
|
||||
("HOEHE" "0"))
|
||||
)
|
||||
|
||||
;; Letzter gewaehlter Typ (gespeichert zwischen Aufrufen)
|
||||
(if (null #Kreisel_Typ) (setq #Kreisel_Typ "STANDARD"))
|
||||
|
||||
;; Beschriftungs-Einstellungen (NUR EINMAL definieren!)
|
||||
(setq *kreisel-beschriftung-layer* "S_KRS_BESCHR")
|
||||
(setq *kreisel-beschriftung-hoehe* 100.0) ;; Texthöhe in mm
|
||||
(setq *kreisel-beschriftung-farbe* 7) ;; 7 = weiß
|
||||
(setq *kreisel-beschriftung-abstand-oben* 0.0) ;; Abstand über Kreisel-Mitte
|
||||
(setq *kreisel-beschriftung-schriftart* "Arial") ;; Schriftart
|
||||
|
||||
|
||||
;; ============================================================
|
||||
;; TEIL 2: HILFSFUNKTIONEN
|
||||
;; ============================================================
|
||||
|
||||
;; Funktion zum Erstellen/Setzen der Schriftart Arial
|
||||
(defun kreisel-setup-textstyle ( / style-name)
|
||||
(setq style-name "Kreisel_Arial")
|
||||
|
||||
;; Prüfen ob der Textstil bereits existiert
|
||||
(if (not (tblsearch "STYLE" style-name))
|
||||
(progn
|
||||
;; Neuen Textstil mit Arial erstellen
|
||||
(command "_.STYLE" style-name "Arial" 0 1 0 "N" "N" "N")
|
||||
(princ (strcat "\n-> Textstil '" style-name "' mit Arial erstellt"))
|
||||
)
|
||||
)
|
||||
|
||||
;; Aktuellen Textstil setzen
|
||||
(setvar "TEXTSTYLE" style-name)
|
||||
style-name
|
||||
)
|
||||
|
||||
;; Nächste freie Kreisel-Nummer ermitteln
|
||||
(defun kreisel-next-number ( / maxNr tag val ss i ent attribs)
|
||||
(setq maxNr 0)
|
||||
(if (setq ss (ssget "_X" '((0 . "INSERT") (2 . "KREISEL_*"))))
|
||||
(progn
|
||||
(setq i 0)
|
||||
(repeat (sslength ss)
|
||||
(setq ent (ssname ss i))
|
||||
(setq attribs (ssg-attrib-read ent))
|
||||
(setq tag (cdr (assoc "NUMMER" attribs)))
|
||||
(if (and tag (setq val (atoi tag)) (> val maxNr))
|
||||
(setq maxNr val)
|
||||
)
|
||||
(setq i (1+ i))
|
||||
)
|
||||
)
|
||||
)
|
||||
(if (= maxNr 0)
|
||||
(setq maxNr #Kreisel_LetzteNr)
|
||||
)
|
||||
(setq #Kreisel_LetzteNr (1+ maxNr))
|
||||
#Kreisel_LetzteNr
|
||||
)
|
||||
|
||||
;; Beschriftungstext erzeugen
|
||||
(defun kreisel-make-label (nummer abstand kreiselart / textStr insertPoint radius mitteX mitteY textHoehe)
|
||||
;; Text: "KREISEL 1: PIN_4000"
|
||||
(setq textStr (strcat "KREISEL " (itoa nummer) ": " kreiselart "_" (rtos abstand 2 0)))
|
||||
|
||||
;; Geometrie berechnen
|
||||
(setq radius (/ *kreisel-durchmesser* 2.0))
|
||||
|
||||
;; Mitte zwischen AN8 und SP8 (X-Mitte des gesamten Kreisels)
|
||||
(setq mitteX (+ radius (/ abstand 2.0)))
|
||||
|
||||
;; Y-Position: Leicht über der mitteX
|
||||
(setq mitteY *kreisel-beschriftung-abstand-oben*)
|
||||
|
||||
;; Texthöhe
|
||||
(setq textHoehe *kreisel-beschriftung-hoehe*) ;; 100 mm
|
||||
|
||||
;; Position
|
||||
(setq insertPoint (list mitteX mitteY 0))
|
||||
|
||||
;; Schriftart Arial einstellen
|
||||
(kreisel-setup-textstyle)
|
||||
|
||||
;; Layer erstellen
|
||||
(ssg-make-layer *kreisel-beschriftung-layer* (itoa *kreisel-beschriftung-farbe*) T)
|
||||
|
||||
;; Text mit entmake erstellen (zentriert)
|
||||
(entmake (list
|
||||
'(0 . "TEXT")
|
||||
(cons 8 *kreisel-beschriftung-layer*)
|
||||
(cons 10 insertPoint)
|
||||
(cons 40 textHoehe)
|
||||
(cons 1 textStr)
|
||||
(cons 50 0.0)
|
||||
(cons 7 "Kreisel_Arial") ;; Arial Textstil
|
||||
(cons 62 *kreisel-beschriftung-farbe*)
|
||||
'(72 . 1) ;; Horizontale Ausrichtung: Mitte
|
||||
'(73 . 2) ;; Vertikale Ausrichtung: Mitte
|
||||
(cons 11 insertPoint) ;; Ausrichtungspunkt
|
||||
))
|
||||
|
||||
(princ (strcat "\n-> Beschriftung: " textStr " (Höhe=" (rtos textHoehe 2 0) "mm, Arial, zentriert)"))
|
||||
textStr
|
||||
)
|
||||
|
||||
;; ... Rest Ihrer Funktionen (kreisel-ask-typ, kreisel-project-point, etc.)
|
||||
|
||||
;; Kreiselart abfragen. Rueckgabe: "PIN" oder "STANDARD"
|
||||
(defun kreisel-ask-typ ( / typNum typ)
|
||||
(princ "\n[1] STANDARD (ohne PIN)")
|
||||
@@ -116,7 +220,11 @@
|
||||
|
||||
(defun draw-module (basePoint abstand rotation attribs / lastEnt ss e bname
|
||||
radius pin-y is-pin
|
||||
oldAttreq oldAttdia)
|
||||
oldAttreq oldAttdia
|
||||
kreisel-nummer block-exists
|
||||
z-hoehe block-hoehe
|
||||
insertPoint block-ent
|
||||
att-entity att-data att-tag new-value)
|
||||
|
||||
;; Attribute vorbereiten
|
||||
(setq attribs (ssg-attrib-merge attribs *kreisel-attrib-defs*))
|
||||
@@ -126,75 +234,158 @@
|
||||
(assoc "DREHUNG" attribs) attribs))
|
||||
(setq is-pin (equal (cdr (assoc "KREISELART" attribs)) "PIN"))
|
||||
|
||||
;; AUTOMATISCHE NUMMER VERGEBEN
|
||||
(setq kreisel-nummer (kreisel-next-number))
|
||||
(setq attribs (subst (cons "NUMMER" (itoa kreisel-nummer))
|
||||
(assoc "NUMMER" attribs) attribs))
|
||||
|
||||
;; --- HÖHE BESTIMMEN ---
|
||||
;; Priorität 1: Aus basePoint (wenn 3D Punkt mit Z > 0)
|
||||
;; Priorität 2: Aus Attribut HOEHE (wenn vorhanden)
|
||||
;; Priorität 3: Default 0
|
||||
(if (and basePoint (caddr basePoint) (> (caddr basePoint) 0))
|
||||
(progn
|
||||
(setq z-hoehe (caddr basePoint))
|
||||
(setq block-hoehe (rtos z-hoehe 2 0))
|
||||
(princ (strcat "\n-> Höhe aus Basispunkt übernommen: " block-hoehe))
|
||||
)
|
||||
(progn
|
||||
;; Höhe aus Attributen lesen
|
||||
(setq block-hoehe (cdr (assoc "HOEHE" attribs)))
|
||||
(if (or (null block-hoehe) (= block-hoehe ""))
|
||||
(setq block-hoehe "0")
|
||||
)
|
||||
(setq z-hoehe (atof block-hoehe))
|
||||
)
|
||||
)
|
||||
|
||||
;; Attribut HOEHE aktualisieren
|
||||
(setq attribs (subst (cons "HOEHE" block-hoehe)
|
||||
(assoc "HOEHE" attribs) attribs))
|
||||
|
||||
;; Abgeleitete Masse
|
||||
(setq radius (/ *kreisel-durchmesser* 2.0))
|
||||
(setq pin-y (- radius *kreisel-pin-abstand*))
|
||||
|
||||
;; Letzte Entity vor dem Zeichnen merken
|
||||
(setq lastEnt (entlast))
|
||||
;; Blockname Format: KREISEL_1_PIN_2300 oder KREISEL_1_STANDARD_2300
|
||||
(setq bname (strcat "KREISEL_"
|
||||
(itoa kreisel-nummer) "_"
|
||||
(if is-pin "PIN" "STANDARD") "_"
|
||||
(rtos abstand 2 0)))
|
||||
|
||||
;; Blocknamen bereinigen (Punkt durch nichts ersetzen, da wir keine Dezimalstellen wollen)
|
||||
(setq bname (vl-string-subst "" "." bname))
|
||||
|
||||
;; Pruefen ob Block bereits existiert
|
||||
(setq block-exists (tblsearch "BLOCK" bname))
|
||||
|
||||
;; --- Geometrie bei Ursprung (0,0) zeichnen ---
|
||||
|
||||
;; AN8 Kreis (Antriebsstation) bei (radius, 0)
|
||||
(command "_.INSERT" (strcat block-pfad "AN8.dwg") (list radius 0.0) 1 1 0)
|
||||
|
||||
;; SP8 Kreis (Spannstation) bei (radius+abstand, 0)
|
||||
(command "_.INSERT" (strcat block-pfad "SP8.dwg") (list (+ radius abstand) 0.0) 1 1 0)
|
||||
|
||||
;; Tangenten auf Layer S_LP
|
||||
(ssg-make-layer "S_LP" "7" T)
|
||||
(if is-pin
|
||||
(setvar "CECOLOR" "5")
|
||||
(setvar "CECOLOR" "1")
|
||||
)
|
||||
|
||||
;; Obere Tangente
|
||||
(command "_.LINE" (list radius radius) (list (+ radius abstand) radius) "")
|
||||
;; Untere Tangente
|
||||
(command "_.LINE" (list radius (- radius)) (list (+ radius abstand) (- radius)) "")
|
||||
|
||||
;; PIN-Linien
|
||||
(if is-pin
|
||||
;; --- Geometrie NUR zeichnen, wenn Block noch nicht existiert ---
|
||||
(if (not block-exists)
|
||||
(progn
|
||||
(ssg-make-layer "pinbereich" "3" T)
|
||||
(setvar "CECOLOR" "3")
|
||||
;; Obere PIN-Linie
|
||||
(command "_.LINE" (list *kreisel-durchmesser* pin-y) (list (float abstand) pin-y) "")
|
||||
;; Untere PIN-Linie
|
||||
(command "_.LINE" (list *kreisel-durchmesser* (- pin-y)) (list (float abstand) (- pin-y)) "")
|
||||
;; WICHTIG: Vor dem Zeichnen den aktuellen letzten Entity merken
|
||||
;; Aber wenn die Zeichnung leer ist, setzen wir lastEnt auf nil
|
||||
(if (setq lastEnt (entlast))
|
||||
(princ) ;; Letzte Entity existiert
|
||||
(setq lastEnt nil) ;; Zeichnung ist leer
|
||||
)
|
||||
|
||||
;; AN8 Kreis (Antriebsstation) bei (radius, 0)
|
||||
(command "_.INSERT" (strcat block-pfad "AN8.dwg") (list radius 0.0 0) 1 1 0)
|
||||
|
||||
;; SP8 Kreis (Spannstation) bei (radius+abstand, 0)
|
||||
(command "_.INSERT" (strcat block-pfad "SP8.dwg") (list (+ radius abstand) 0.0 0) 1 1 0)
|
||||
|
||||
;; Tangenten auf Layer S_LP
|
||||
(ssg-make-layer "S_LP" "7" T)
|
||||
(if is-pin
|
||||
(setvar "CECOLOR" "5")
|
||||
(setvar "CECOLOR" "1")
|
||||
)
|
||||
|
||||
;; Obere Tangente
|
||||
(command "_.LINE" (list radius radius 0) (list (+ radius abstand) radius 0) "")
|
||||
;; Untere Tangente
|
||||
(command "_.LINE" (list radius (- radius) 0) (list (+ radius abstand) (- radius) 0) "")
|
||||
|
||||
;; PIN-Linien
|
||||
(if is-pin
|
||||
(progn
|
||||
(ssg-make-layer "pinbereich" "3" T)
|
||||
(setvar "CECOLOR" "3")
|
||||
|
||||
;; Obere PIN-Linie
|
||||
(command "_.LINE" (list *kreisel-durchmesser* pin-y 0) (list (float abstand) pin-y 0) "")
|
||||
;; Untere PIN-Linie
|
||||
(command "_.LINE" (list *kreisel-durchmesser* (- pin-y) 0) (list (float abstand) (- pin-y) 0) "")
|
||||
)
|
||||
)
|
||||
|
||||
;; BESCHRIFTUNG einfügen (vor Block-Erzeugung, damit sie im Block ist)
|
||||
(kreisel-make-label kreisel-nummer abstand (if is-pin "PIN" "STANDARD") )
|
||||
|
||||
;; Unsichtbare Attribut-Definitionen erzeugen
|
||||
(ssg-attrib-make-defs *kreisel-attrib-defs* 50.0)
|
||||
|
||||
;; --- Neue Entities einsammeln ---
|
||||
(setq ss (ssadd))
|
||||
|
||||
;; Korrekte Behandlung wenn lastEnt nil ist (Zeichnung war leer)
|
||||
(if (null lastEnt)
|
||||
(setq e (entnext))
|
||||
(setq e (entnext lastEnt))
|
||||
)
|
||||
|
||||
(while e
|
||||
(ssadd e ss)
|
||||
(setq e (entnext e))
|
||||
)
|
||||
|
||||
;; --- Block erzeugen (Entities werden aus Zeichnung entfernt) ---
|
||||
(if (> (sslength ss) 0)
|
||||
(command "_.-BLOCK" bname (list 0.0 0.0 0.0) ss "")
|
||||
(princ "\nFehler: Keine Entities zum Block erstellen!")
|
||||
)
|
||||
|
||||
(princ (strcat "\n-> Neue Blockdefinition: " bname))
|
||||
)
|
||||
(princ (strcat "\n-> Verwende bestehende Blockdefinition: " bname))
|
||||
)
|
||||
|
||||
;; Unsichtbare Attribut-Definitionen erzeugen
|
||||
(ssg-attrib-make-defs *kreisel-attrib-defs* 50.0)
|
||||
|
||||
;; --- Neue Entities einsammeln ---
|
||||
(setq ss (ssadd))
|
||||
(setq e (entnext lastEnt))
|
||||
(while e
|
||||
(ssadd e ss)
|
||||
(setq e (entnext e))
|
||||
)
|
||||
|
||||
;; --- Block erzeugen (Entities werden aus Zeichnung entfernt) ---
|
||||
(setq bname (strcat "KR_" (ssg-make-blockname
|
||||
(list (car basePoint) (cadr basePoint)
|
||||
(if (caddr basePoint) (caddr basePoint) 0.0)))))
|
||||
(command "_.-BLOCK" bname (list 0.0 0.0 0.0) ss "")
|
||||
|
||||
;; --- Block am Zielpunkt einfuegen (ohne Attribut-Dialog) ---
|
||||
;; basePoint kann 2D oder 3D sein; INSERT uebernimmt die Z-Koordinate
|
||||
(setq oldAttreq (getvar "ATTREQ"))
|
||||
(setq oldAttdia (getvar "ATTDIA"))
|
||||
(setvar "ATTREQ" 0)
|
||||
(setvar "ATTDIA" 0)
|
||||
(command "_.INSERT" bname basePoint 1 1 rotation)
|
||||
(setvar "ATTREQ" oldAttreq)
|
||||
(setvar "ATTDIA" oldAttdia)
|
||||
|
||||
;; --- Attribut-Werte setzen ---
|
||||
(ssg-attrib-set-many attribs)
|
||||
;; Einfügepunkt: X,Y aus basePoint, Z aus ermittelter Höhe
|
||||
|
||||
(setq insertPoint (list (car basePoint) (cadr basePoint) z-hoehe))
|
||||
(command "_.INSERT" bname insertPoint 1 1 rotation)
|
||||
|
||||
;; --- Attribut-Werte durch direkte Datenbankänderung setzen ---
|
||||
(setq block-ent (entlast))
|
||||
(setq att-entity (entnext block-ent))
|
||||
|
||||
(while att-entity
|
||||
(setq att-data (entget att-entity))
|
||||
(if (= (cdr (assoc 0 att-data)) "ATTRIB")
|
||||
(progn
|
||||
(setq att-tag (cdr (assoc 2 att-data)))
|
||||
(setq new-value (cdr (assoc att-tag attribs)))
|
||||
(if new-value
|
||||
(progn
|
||||
(setq att-data (subst (cons 1 new-value) (assoc 1 att-data) att-data))
|
||||
(entmod att-data)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(setq att-entity (entnext att-entity))
|
||||
)
|
||||
(entupd block-ent)
|
||||
(princ (strcat "\n-> Kreisel #" (itoa kreisel-nummer) " eingefügt: " bname
|
||||
" (Höhe=" block-hoehe ")"))
|
||||
(entlast)
|
||||
)
|
||||
|
||||
@@ -206,39 +397,88 @@
|
||||
;; --------------------------------------------
|
||||
;; KreiselInsert: Manuell Position + Parameter
|
||||
;; --------------------------------------------
|
||||
(defun c:KreiselInsert ( / pt abstand typ rotation rotStr)
|
||||
|
||||
(ssg-start "Kreisel Modul einfuegen" '(("OSMODE") ("CECOLOR")))
|
||||
(setvar "OSMODE" 0)
|
||||
|
||||
;; --------------------------------------------
|
||||
;; KreiselInsert: Manuell Position + Parameter
|
||||
;; --------------------------------------------
|
||||
(defun c:KreiselInsert ( / pt abstand typ rotation rotStr hoehe
|
||||
selectedEnt blockAttribs oldOsmode)
|
||||
(ssg-start "Kreisel Modul einfuegen" '(("CECOLOR")))
|
||||
|
||||
;; Temporär Osnap für Blockerkennung setzen
|
||||
(setq oldOsmode (getvar "OSMODE"))
|
||||
(setvar "OSMODE" (logior oldOsmode 512)) ;; 512 = INS (Block-Einfügepunkt)
|
||||
|
||||
;; 1. Einfuegepunkt
|
||||
(setq pt (getpoint "\nBasispunkt (AN-Seite): "))
|
||||
(if (null pt) (exit))
|
||||
(if (null pt)
|
||||
(progn
|
||||
(setvar "OSMODE" oldOsmode)
|
||||
(ssg-end)
|
||||
(princ "\nBefehl abgebrochen.")
|
||||
(princ)
|
||||
(return)
|
||||
)
|
||||
)
|
||||
|
||||
;; Osnap zurücksetzen auf den ursprünglichen Wert
|
||||
(setvar "OSMODE" oldOsmode)
|
||||
|
||||
;; 2. Prüfen ob ein Block getroffen wurde
|
||||
(setq selectedEnt (nentselp pt))
|
||||
|
||||
;; --- HÖHE BESTIMMEN ---
|
||||
(cond
|
||||
;; Fall 1: Auf einem Kreisel-Block geklickt
|
||||
((and selectedEnt
|
||||
(setq selectedEnt (car selectedEnt))
|
||||
(setq blockAttribs (ssg-attrib-read selectedEnt))
|
||||
(assoc "HOEHE" blockAttribs))
|
||||
(setq hoehe (atof (cdr (assoc "HOEHE" blockAttribs))))
|
||||
(princ (strcat "\n-> Höhe von bestehendem Kreisel übernommen: " (rtos hoehe 2 0)))
|
||||
)
|
||||
;; Fall 2: Punkt hat Z-Koordinate > 0
|
||||
((and (> (length pt) 2) (> (caddr pt) 0))
|
||||
(setq hoehe (caddr pt))
|
||||
(princ (strcat "\n-> Höhe aus 3D-Punkt übernommen: " (rtos hoehe 2 0)))
|
||||
)
|
||||
;; Fall 3: Sonst separat abfragen
|
||||
(t
|
||||
(setq hoehe (getreal (strcat "\nHöhe (Z-Koordinate) <" (rtos *kreisel-default-hoehe* 2 0) ">: ")))
|
||||
(if (null hoehe) (setq hoehe *kreisel-default-hoehe*))
|
||||
)
|
||||
)
|
||||
|
||||
;; 2. Abstand (zeigen oder tippen)
|
||||
;; 3. Abstand
|
||||
(initget 6)
|
||||
(setq abstand (getdist pt (strcat "\nAbstand (Tangentenlaenge) zeigen oder eingeben <"
|
||||
(rtos *kreisel-default-laenge* 2 0) ">: ")))
|
||||
(setq abstand (getdist (list (car pt) (cadr pt))
|
||||
(strcat "\nAbstand (Tangentenlaenge) <"
|
||||
(rtos *kreisel-default-laenge* 2 0) ">: ")))
|
||||
(if (null abstand) (setq abstand *kreisel-default-laenge*))
|
||||
|
||||
;; 3. Rotation
|
||||
(princ (strcat "\n-> Abstand: " (rtos abstand 2 0) " mm"))
|
||||
|
||||
;; 4. Rotation
|
||||
(setq rotStr (getstring "\nRotation in Grad <0>: "))
|
||||
(if (= rotStr "")
|
||||
(setq rotation 0.0)
|
||||
(setq rotation (atof rotStr))
|
||||
)
|
||||
|
||||
;; 4. Kreiselart
|
||||
|
||||
;; 5. Kreiselart
|
||||
(setq typ (kreisel-ask-typ))
|
||||
|
||||
(princ (strcat "\n-> Abstand: " (rtos abstand 2 0)
|
||||
" Rotation: " (rtos rotation 2 1)
|
||||
(princ (strcat "\n-> Rotation: " (rtos rotation 2 1)
|
||||
" Höhe: " (rtos hoehe 2 0)
|
||||
" Kreiselart: " typ))
|
||||
|
||||
;; 5. Modul einfuegen (Attribute = Defaults + KREISELART)
|
||||
(draw-module (list (car pt) (cadr pt)) abstand rotation
|
||||
(list (cons "KREISELART" typ)))
|
||||
;; 6. Modul einfuegen
|
||||
(draw-module (list (car pt) (cadr pt) hoehe) abstand rotation
|
||||
(list (cons "KREISELART" typ)
|
||||
(cons "HOEHE" (rtos hoehe 2 0))))
|
||||
|
||||
;; KEIN weiteres (setvar "OSMODE" ...) mehr nötig!
|
||||
;; ssg-end stellt nur CLAYER und CMDECHO wieder her, nicht OSMODE
|
||||
|
||||
(princ "\nKreisel Modul eingefuegt.")
|
||||
(ssg-end)
|
||||
)
|
||||
@@ -259,12 +499,11 @@
|
||||
(defun c:KreiselConnect ( / sel1 ent1 pt1 sel2 ent2 pt2
|
||||
lpts1 lpts2 s1 e1 s2 e2
|
||||
dir1 dir2 snap1 foot
|
||||
dx dy dist abstand rotation typ
|
||||
dx dy dist abstand rotation typ hoehe
|
||||
z1s z1e z2s z2e zCoord zTol
|
||||
ok msg)
|
||||
|
||||
(ssg-start "Kreisel Smart Connect" '(("OSMODE") ("CECOLOR")))
|
||||
(setvar "OSMODE" 0)
|
||||
(ssg-start "Kreisel Smart Connect" '(("CECOLOR")))
|
||||
(setq ok T msg nil)
|
||||
|
||||
(princ "\n--- Kreisel zwischen zwei parallelen Linien ---")
|
||||
@@ -367,17 +606,31 @@
|
||||
;; Winkel von AN-Punkt (snap1) zum SP-Fusspunkt (foot)
|
||||
(setq rotation (* (/ 180.0 pi) (atan dy dx)))
|
||||
|
||||
;; Höhe (Z-Koordinate) - NUR abfragen, wenn zCoord keine Höhe hat (also 0 ist)
|
||||
(if (and zCoord (> zCoord 0))
|
||||
(progn
|
||||
(setq hoehe zCoord)
|
||||
(princ (strcat "\n-> Höhe aus Linie übernommen: " (rtos hoehe 2 0)))
|
||||
)
|
||||
(progn
|
||||
(setq hoehe (getreal (strcat "\nHöhe (Z-Koordinate) <" (rtos *kreisel-default-hoehe* 2 0) ">: ")))
|
||||
(if (null hoehe) (setq hoehe *kreisel-default-hoehe*))
|
||||
)
|
||||
)
|
||||
|
||||
;; Kreiselart abfragen (einzige Benutzer-Eingabe)
|
||||
(setq typ (kreisel-ask-typ))
|
||||
|
||||
(princ (strcat "\n-> Abstand: " (rtos abstand 2 0) " mm"
|
||||
" Rotation: " (rtos rotation 2 1) " Grad"
|
||||
" Höhe: " (rtos hoehe 2 0)
|
||||
" Kreiselart: " typ))
|
||||
|
||||
;; Modul als Compound-Block einfuegen (mit Z-Koordinate)
|
||||
(draw-module (list (car snap1) (cadr snap1) zCoord)
|
||||
abstand rotation
|
||||
(list (cons "KREISELART" typ)))
|
||||
;; NEU - Höhe im Aufruf übergeben:
|
||||
(draw-module (list (car snap1) (cadr snap1) hoehe) abstand rotation
|
||||
(list (cons "KREISELART" typ)
|
||||
(cons "HOEHE" (rtos hoehe 2 0)))) ;; <-- HOEHE Attribut
|
||||
|
||||
(princ "\nKreisel Connect erfolgreich!")
|
||||
)
|
||||
@@ -389,6 +642,24 @@
|
||||
)
|
||||
|
||||
|
||||
;; Neue Befehle für Beschriftungs-Einstellungen
|
||||
(defun c:KreiselLabelPos ( / dx dy)
|
||||
(setq dx (getreal (strcat "\nX-Abstand von AN8-Mitte <" (rtos *kreisel-beschriftung-abstand-x* 2 0) ">: ")))
|
||||
(if dx (setq *kreisel-beschriftung-abstand-x* dx))
|
||||
(setq dy (getreal (strcat "\nY-Abstand von AN8-Mitte <" (rtos *kreisel-beschriftung-abstand-y* 2 0) ">: ")))
|
||||
(if dy (setq *kreisel-beschriftung-abstand-y* dy))
|
||||
(princ (strcat "\nNeue Beschriftungsposition: X=" (rtos *kreisel-beschriftung-abstand-x* 2 0)
|
||||
" Y=" (rtos *kreisel-beschriftung-abstand-y* 2 0)))
|
||||
(princ)
|
||||
)
|
||||
|
||||
(defun c:KreiselLabelHoehe ( / h)
|
||||
(setq h (getreal (strcat "\nTexthöhe <" (rtos *kreisel-beschriftung-hoehe* 2 0) ">: ")))
|
||||
(if h (setq *kreisel-beschriftung-hoehe* h))
|
||||
(princ (strcat "\nNeue Texthöhe: " (rtos *kreisel-beschriftung-hoehe* 2 0)))
|
||||
(princ)
|
||||
)
|
||||
|
||||
;; -----------------------------------------------
|
||||
;; KreiselRedraw: Bestehenden Kreisel neu zeichnen
|
||||
;;
|
||||
@@ -399,8 +670,7 @@
|
||||
;; -----------------------------------------------
|
||||
(defun c:KreiselRedraw ( / sel ent ed attribs basePoint rotation newAbstand)
|
||||
|
||||
(ssg-start "Kreisel Neu Zeichnen" '(("OSMODE") ("CECOLOR")))
|
||||
(setvar "OSMODE" 0)
|
||||
(ssg-start "Kreisel Neu Zeichnen" '(("CECOLOR")))
|
||||
|
||||
;; 1. Bestehenden Kreisel-Block auswaehlen
|
||||
(setq sel (entsel "\nKreisel-Block auswaehlen: "))
|
||||
@@ -418,9 +688,11 @@
|
||||
(setq basePoint (cdr (assoc 10 ed)))
|
||||
(setq rotation (* (/ 180.0 pi) (cdr (assoc 50 ed))))
|
||||
|
||||
;; NEU - Höhe aus Attributen lesen und anzeigen:
|
||||
(princ (strcat "\n-> Bestehend: Abstand=" (cdr (assoc "ABSTAND" attribs))
|
||||
" Drehung=" (cdr (assoc "DREHUNG" attribs))
|
||||
" Art=" (cdr (assoc "KREISELART" attribs))))
|
||||
" Drehung=" (cdr (assoc "DREHUNG" attribs))
|
||||
" Höhe=" (cdr (assoc "HOEHE" attribs)) ;; <-- NEU
|
||||
" Art=" (cdr (assoc "KREISELART" attribs))))
|
||||
|
||||
;; 3. Neuen Abstand abfragen (Enter = beibehalten)
|
||||
(initget 6)
|
||||
@@ -428,13 +700,17 @@
|
||||
(if (null newAbstand)
|
||||
(setq newAbstand (atof (cdr (assoc "ABSTAND" attribs))))
|
||||
)
|
||||
|
||||
;; NEU - Neue Höhe abfragen:
|
||||
(setq newHoehe (getreal (strcat "\nNeue Höhe <" (cdr (assoc "HOEHE" attribs)) ">: ")))
|
||||
(if (null newHoehe)
|
||||
(setq newHoehe (atof (cdr (assoc "HOEHE" attribs))))
|
||||
)
|
||||
;; 4. Alten Block loeschen
|
||||
(command "_.ERASE" ent "")
|
||||
|
||||
;; 5. Neu zeichnen mit bestehenden Attributen + neuem Abstand
|
||||
(draw-module (list (car basePoint) (cadr basePoint))
|
||||
newAbstand rotation attribs)
|
||||
(draw-module (list (car basePoint) (cadr basePoint) newHoehe)
|
||||
newAbstand rotation attribs)
|
||||
|
||||
(princ (strcat "\nKreisel neu gezeichnet. Abstand=" (rtos newAbstand 2 0)))
|
||||
(ssg-end)
|
||||
@@ -445,11 +721,15 @@
|
||||
;; KreiselQuick: Schnell mit Defaults (horizontal)
|
||||
;; --------------------------------------------
|
||||
(defun c:KreiselQuick ( / pt)
|
||||
(ssg-start "Kreisel Schnell Einfuegen" '(("OSMODE") ("CECOLOR")))
|
||||
(setvar "OSMODE" 0)
|
||||
(ssg-start "Kreisel Schnell Einfuegen" '(("CECOLOR")))
|
||||
(setq pt (getpoint "\nBasispunkt (AN-Seite): "))
|
||||
;; NEU - Höhe abfragen:
|
||||
(setq hoehe (getreal (strcat "\nHöhe (Z-Koordinate) <0>: ")))
|
||||
(if (null hoehe) (setq hoehe 0.0))
|
||||
(if pt
|
||||
(draw-module (list (car pt) (cadr pt)) *kreisel-default-laenge* 0.0 nil)
|
||||
;; NEU - Höhe im Aufruf übergeben:
|
||||
(draw-module (list (car pt) (cadr pt) hoehe) *kreisel-default-laenge* 0.0
|
||||
(list (cons "HOEHE" (rtos hoehe 2 0))))
|
||||
)
|
||||
(princ "\nSchnell Einfuegen fertig.")
|
||||
(ssg-end)
|
||||
@@ -464,6 +744,8 @@
|
||||
(princ (strcat "\nKreiselart: " #Kreisel_Typ))
|
||||
(princ (strcat "\nDurchmesser: " (rtos *kreisel-durchmesser* 2 0)))
|
||||
(princ (strcat "\nDefault-Laenge: " (rtos *kreisel-default-laenge* 2 0)))
|
||||
;; NEU - Default-Höhe anzeigen:
|
||||
(princ (strcat "\nDefault-Höhe: " (rtos *kreisel-default-hoehe* 2 0)))
|
||||
(princ "\nAttribute im Block:")
|
||||
(foreach def *kreisel-attrib-defs*
|
||||
(princ (strcat "\n " (car def) " = " (cadr def)))
|
||||
@@ -481,8 +763,7 @@
|
||||
;; --------------------------------------------
|
||||
(defun c:ILS_Eckrad ( / pt rotStr rotation)
|
||||
|
||||
(ssg-start "Eckrad einfuegen" '(("OSMODE") ("ATTREQ") ("ATTDIA")))
|
||||
(setvar "OSMODE" 0)
|
||||
(ssg-start "Eckrad einfuegen" '(("ATTREQ") ("ATTDIA")))
|
||||
(setvar "ATTREQ" 0)
|
||||
(setvar "ATTDIA" 0)
|
||||
|
||||
@@ -506,7 +787,24 @@
|
||||
(ssg-end)
|
||||
)
|
||||
|
||||
;; NEU: KreiselLabelSetup - Hier einfügen!
|
||||
(defun c:KreiselLabelSetup ( / hoehe farbe abstand schriftart)
|
||||
(setq hoehe (getreal (strcat "\nSchrifthöhe <" (rtos *kreisel-beschriftung-hoehe* 2 0) ">: ")))
|
||||
(if hoehe (setq *kreisel-beschriftung-hoehe* hoehe))
|
||||
|
||||
(setq farbe (getint (strcat "\nSchriftfarbe (1=Rot,2=Gelb,3=Grün,4=Cyan,5=Blau,6=Magenta,7=Weiß) <" (itoa *kreisel-beschriftung-farbe*) ">: ")))
|
||||
(if farbe (setq *kreisel-beschriftung-farbe* farbe))
|
||||
|
||||
(setq abstand (getreal (strcat "\nAbstand über Kreisel-Mitte <" (rtos *kreisel-beschriftung-abstand-oben* 2 0) ">: ")))
|
||||
(if abstand (setq *kreisel-beschriftung-abstand-oben* abstand))
|
||||
|
||||
(princ (strcat "\nNeue Einstellungen: Höhe=" (rtos *kreisel-beschriftung-hoehe* 2 0)
|
||||
", Farbe=" (itoa *kreisel-beschriftung-farbe*)
|
||||
", Y-Versatz=" (rtos *kreisel-beschriftung-abstand-oben* 2 0)
|
||||
", Schriftart=Arial"))
|
||||
(princ)
|
||||
)
|
||||
|
||||
(princ "\nKreiselInsert.lsp geladen (Version 6.0 - Attribute + Redraw + Eckrad)")
|
||||
(princ "\nKreiselInsert.lsp geladen (Version 7.0 - Auto-Nummerierung + Beschriftung + Attribute + Redraw + Eckrad)")
|
||||
(princ "\nBefehle: KreiselInsert, KreiselConnect, KreiselRedraw, KreiselQuick, KreiselParams, ILS_Eckrad")
|
||||
(princ)
|
||||
|
||||
Reference in New Issue
Block a user