Eckrad Befehle modifziert. Automatische Nummernvergabe in lisp impl.
This commit is contained in:
+61
-19
@@ -282,10 +282,19 @@
|
||||
(assoc "HOEHE" 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))
|
||||
;; NUMMER: Bestehende beibehalten (Redraw/Edit), sonst neue vergeben
|
||||
(setq kreisel-nummer (atoi (cdr (assoc "NUMMER" attribs))))
|
||||
(if (<= kreisel-nummer 0)
|
||||
(progn
|
||||
(setq kreisel-nummer (kreisel-next-number))
|
||||
(setq attribs (subst (cons "NUMMER" (itoa kreisel-nummer))
|
||||
(assoc "NUMMER" attribs) attribs))
|
||||
)
|
||||
)
|
||||
|
||||
;; NAME automatisch setzen: "KreiselN"
|
||||
(setq attribs (subst (cons "NAME" (strcat "Kreisel" (itoa kreisel-nummer)))
|
||||
(assoc "NAME" attribs) attribs))
|
||||
|
||||
;; --- HÖHE BESTIMMEN ---
|
||||
;; Priorität 1: Aus basePoint (wenn 3D Punkt mit Z > 0)
|
||||
@@ -934,27 +943,60 @@
|
||||
|
||||
;; --------------------------------------------
|
||||
;; ILS_Eckrad: Befehl - fragt Eingaben ab und fuegt Eckrad ein
|
||||
;;
|
||||
;; Ablauf:
|
||||
;; 1. Beruehrpunkt anklicken (wo der Kreis tangential anliegen soll)
|
||||
;; 2. Richtungspunkt anklicken (bestimmt Versatzrichtung zum Kreismittelpunkt)
|
||||
;; 3. Kreismittelpunkt = Beruehrpunkt + Radius in Richtung des 2. Klicks
|
||||
;; 4. Hoehe aus Z-Koordinate oder manuell
|
||||
;; --------------------------------------------
|
||||
(defun c:ILS_Eckrad ( / pt rotStr rotation hoehe)
|
||||
(defun c:ILS_Eckrad ( / ptTangent ptDir dx dy dist ux uy radius
|
||||
centerPt rotation hoehe)
|
||||
(dbgf "c:ILS_Eckrad")
|
||||
|
||||
;; 1. Einfuegepunkt
|
||||
(setq pt (getpoint "\nEinfuegepunkt Eckrad: "))
|
||||
(if (null pt) (progn (dbgreturn nil) (exit)))
|
||||
(dbg 'pt)
|
||||
;; 1. Beruehrpunkt (Tangentenpunkt)
|
||||
(setq ptTangent (getpoint "\nBeruehrpunkt Eckrad (Tangente): "))
|
||||
(if (null ptTangent) (progn (dbgreturn nil) (exit)))
|
||||
(dbg 'ptTangent)
|
||||
|
||||
;; 2. Rotation
|
||||
(setq rotStr (getstring "\nRotation in Grad <0>: "))
|
||||
(if (= rotStr "")
|
||||
(setq rotation 0.0)
|
||||
(setq rotation (atof rotStr))
|
||||
;; 2. Richtungspunkt (Gummiband vom Beruehrpunkt)
|
||||
(setq ptDir (getpoint ptTangent "\nRichtung zum Kreismittelpunkt: "))
|
||||
(if (null ptDir) (progn (dbgreturn nil) (exit)))
|
||||
(dbg 'ptDir)
|
||||
|
||||
;; 3. Winkel und Versatz berechnen
|
||||
(setq dx (- (car ptDir) (car ptTangent))
|
||||
dy (- (cadr ptDir) (cadr ptTangent)))
|
||||
(setq dist (sqrt (+ (* dx dx) (* dy dy))))
|
||||
|
||||
(if (<= dist 0.001)
|
||||
(progn
|
||||
(princ "\nFehler: Beruehr- und Richtungspunkt sind identisch!")
|
||||
(dbgreturn nil)
|
||||
(exit)
|
||||
)
|
||||
)
|
||||
|
||||
;; Einheitsvektor in Richtung Beruehrpunkt -> Richtungspunkt
|
||||
(setq ux (/ dx dist)
|
||||
uy (/ dy dist))
|
||||
|
||||
;; Radius = halber Kreisdurchmesser
|
||||
(setq radius (/ *kreisel-durchmesser* 2.0))
|
||||
|
||||
;; Kreismittelpunkt = Beruehrpunkt + Radius * Richtung
|
||||
(setq centerPt (list (+ (car ptTangent) (* radius ux))
|
||||
(+ (cadr ptTangent) (* radius uy))))
|
||||
(dbg 'centerPt)
|
||||
|
||||
;; Rotation = Winkel der Versatzrichtung
|
||||
(setq rotation (* (/ 180.0 pi) (atan dy dx)))
|
||||
(dbg 'rotation)
|
||||
|
||||
;; 3. Hoehe bestimmen
|
||||
(if (and (> (length pt) 2) (caddr pt) (> (caddr pt) 0))
|
||||
;; 4. Hoehe bestimmen
|
||||
(if (and (> (length ptTangent) 2) (caddr ptTangent) (> (caddr ptTangent) 0))
|
||||
(progn
|
||||
(setq hoehe (caddr pt))
|
||||
(setq hoehe (caddr ptTangent))
|
||||
(princ (strcat "\n-> Hoehe aus 3D-Punkt uebernommen: " (rtos hoehe 2 0)))
|
||||
)
|
||||
(progn
|
||||
@@ -964,8 +1006,8 @@
|
||||
)
|
||||
(dbg 'hoehe)
|
||||
|
||||
;; 4. Einfuegen
|
||||
(ils-eckrad-insert (list (car pt) (cadr pt) hoehe) rotation nil)
|
||||
;; 5. Einfuegen (centerPt ist der Kreismittelpunkt)
|
||||
(ils-eckrad-insert (list (car centerPt) (cadr centerPt) hoehe) rotation nil)
|
||||
(dbgreturn nil)
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user