; ; b2l.lsp Bogen mit Liniensegmenten ersetzen ; Version 0.2 ; Winkelangabe und Mindestlaenge der Linien ; erstellt 09/05 by Th. Jakob ; 05/09 Aenderungen eingefuehrt ; ; ;---------------------------------------------- ; (princ "Start mit b2l") ; Errorhandling (defun my_error (msg) (print (strcat "Fehler aufgetreten: " msg)) (command "_undo" "_back") (setq *error* alterror) (setvar "blipmode" sblip) (setvar "cmdecho" scmde) (setvar "osmode" sosmode) (princ) ) (defun bogen_2_linie ( / elemli c_arch anz i j c_arc center rad start_w end_w delta_w c_w segment_w ri p1 p2 anz_lin) (setq elemli nil c_arch nil ) (setq twinkel (getreal "Winkel fuer Einteilung angeben ")) (setq min_laenge (getreal "Minimallaenge fuer Linie angeben ")) (setq elemli (ssget "X" '((0 . "ARC")))) (setq anz (sslength elemli)) (setq i 0) (while (< i anz) (setq c_arc (entget (ssname elemli i))) (setq center (cdr (assoc 10 c_arc))) (setq rad (cdr (assoc 40 c_arc))) (setq start_w (cdr (assoc 50 c_arc))) (setq end_w (cdr (assoc 51 c_arc))) ; 180° uebergang ermitteln (setq delta_w (- end_w start_w)) (if (> 0 delta_w) (setq delta_w (+ (* 2. pi) delta_w))) (setq bolaeng (* (* 2. pi rad) (/ delta_w (* 2. pi)))) ; Bogenlaenge aus Objektdaten ermitteln (setq maxanz (max 1 (1+ (fix (/ bolaeng min_laenge))))) ; mindestens 1 Segment maximal BLaenge/minLaenge +1 ; anzahl der abschnitte (setq segment_w (* (/ twinkel 180.) pi)) ; winkel für segment in ° hier twinkel (setq anz_lin (min maxanz (/ delta_w segment_w))) ; maximal Winkelteilung oder maxanz (if (= anz_lin maxanz) (setq segment_w (/ delta_w maxanz))) ; ersten Punkt ausrechnen (setq p1 (polar center start_w rad)) (setq c_w (+ start_w segment_w)) (if (> c_w (* 2. pi)) (setq c_w (- c_w (* 2. pi)))) (setq p2 p1) ; weiter Punkte (setq j 1) (while (< j anz_lin) (setq p1 p2) (setq p2 (polar center c_w rad)) (command "linie" p1 p2 "") (setq j (1+ j) c_w (+ c_w segment_w)) (if (> c_w (* 2. pi)) (setq c_w (- c_w (* 2. pi)))) ) ; letzter Punkt (setq p1 p2) (setq p2 (polar center end_w rad)) (command "linie" p1 p2 "") (setq i (1+ i)) ) ) (defun C:b2l ( / sblip scmde alterror sosmode) (setq sblip (getvar "blipmode")) (setq scmde (getvar "cmdecho")) (setq sosmode (getvar "osmode")) ; (setq alterror *error*) ; (setq *error* my_error) (command "_undo" "_mark") (setvar "osmode" 0) (setvar "blipmode" 0) (setvar "cmdecho" 0) ; ; Hauptteil ; (bogen_2_linie) (setvar "blipmode" sblip) (setvar "cmdecho" scmde) (setvar "osmode" sosmode) ; (setq *error* alterror) (prompt "\n Boegen bearbeitet") (princ) )