Merge branch 'master' of https://gitea.schoenenberger.de/m.stangl/dxfmakros
This commit is contained in:
+61
-19
@@ -282,10 +282,19 @@
|
|||||||
(assoc "HOEHE" attribs) attribs))
|
(assoc "HOEHE" attribs) attribs))
|
||||||
(setq is-pin (equal (cdr (assoc "KREISELART" attribs)) "PIN"))
|
(setq is-pin (equal (cdr (assoc "KREISELART" attribs)) "PIN"))
|
||||||
|
|
||||||
;; AUTOMATISCHE NUMMER VERGEBEN
|
;; NUMMER: Bestehende beibehalten (Redraw/Edit), sonst neue vergeben
|
||||||
(setq kreisel-nummer (kreisel-next-number))
|
(setq kreisel-nummer (atoi (cdr (assoc "NUMMER" attribs))))
|
||||||
(setq attribs (subst (cons "NUMMER" (itoa kreisel-nummer))
|
(if (<= kreisel-nummer 0)
|
||||||
(assoc "NUMMER" attribs) attribs))
|
(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 ---
|
;; --- HÖHE BESTIMMEN ---
|
||||||
;; Priorität 1: Aus basePoint (wenn 3D Punkt mit Z > 0)
|
;; 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
|
;; 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")
|
(dbgf "c:ILS_Eckrad")
|
||||||
|
|
||||||
;; 1. Einfuegepunkt
|
;; 1. Beruehrpunkt (Tangentenpunkt)
|
||||||
(setq pt (getpoint "\nEinfuegepunkt Eckrad: "))
|
(setq ptTangent (getpoint "\nBeruehrpunkt Eckrad (Tangente): "))
|
||||||
(if (null pt) (progn (dbgreturn nil) (exit)))
|
(if (null ptTangent) (progn (dbgreturn nil) (exit)))
|
||||||
(dbg 'pt)
|
(dbg 'ptTangent)
|
||||||
|
|
||||||
;; 2. Rotation
|
;; 2. Richtungspunkt (Gummiband vom Beruehrpunkt)
|
||||||
(setq rotStr (getstring "\nRotation in Grad <0>: "))
|
(setq ptDir (getpoint ptTangent "\nRichtung zum Kreismittelpunkt: "))
|
||||||
(if (= rotStr "")
|
(if (null ptDir) (progn (dbgreturn nil) (exit)))
|
||||||
(setq rotation 0.0)
|
(dbg 'ptDir)
|
||||||
(setq rotation (atof rotStr))
|
|
||||||
|
;; 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)
|
(dbg 'rotation)
|
||||||
|
|
||||||
;; 3. Hoehe bestimmen
|
;; 4. Hoehe bestimmen
|
||||||
(if (and (> (length pt) 2) (caddr pt) (> (caddr pt) 0))
|
(if (and (> (length ptTangent) 2) (caddr ptTangent) (> (caddr ptTangent) 0))
|
||||||
(progn
|
(progn
|
||||||
(setq hoehe (caddr pt))
|
(setq hoehe (caddr ptTangent))
|
||||||
(princ (strcat "\n-> Hoehe aus 3D-Punkt uebernommen: " (rtos hoehe 2 0)))
|
(princ (strcat "\n-> Hoehe aus 3D-Punkt uebernommen: " (rtos hoehe 2 0)))
|
||||||
)
|
)
|
||||||
(progn
|
(progn
|
||||||
@@ -964,8 +1006,8 @@
|
|||||||
)
|
)
|
||||||
(dbg 'hoehe)
|
(dbg 'hoehe)
|
||||||
|
|
||||||
;; 4. Einfuegen
|
;; 5. Einfuegen (centerPt ist der Kreismittelpunkt)
|
||||||
(ils-eckrad-insert (list (car pt) (cadr pt) hoehe) rotation nil)
|
(ils-eckrad-insert (list (car centerPt) (cadr centerPt) hoehe) rotation nil)
|
||||||
(dbgreturn nil)
|
(dbgreturn nil)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user