;;;减小倒角ARC
(defun c:jxr ()
(xgarc "<")
)
;;;加大倒角ARC
(defun c:jdr ()
(xgarc ">")
)
;;;重画倒角arc
(defun c:rer ()
(xgarc "=")
)
;;;倒角arc改尖角
(defun c:r0 ()
(xgarc "0")
)
(defun xgarc (xgc / center ename ename1 ename2 ent id1 id2 id_q id_z
radius sss)
;;返回ename对象上距离点pt指定距离len的点
;;ename LINE或ARC对象
;;pt 对象的一个端点
;;len 距离 须小于LINE的长度或ARC的半径
(defun xgarc_fsw (ename pt len / ent a
id_qd id_dd id ang_qs ang_zz center
radius ang_pt ang_sc
)
(setq ent (entget ename))
(setq a (cdr (assoc 0 ent)))
(cond ((= a "LINE")
(setq id_qd (cdr (assoc 10 ent))
id_dd (cdr (assoc 11 ent))
dist (distance id_qd id_dd)
)
(if (and (> len 0) (< len dist))
(if (equal pt id_qd 1e-8)
(setq id (polar id_qd (angle id_qd id_dd) len))
(setq id (polar id_dd (angle id_dd id_qd) len))
)
(setq id nil)
)
)
((= a "ARC")
(setq ang_qs (cdr (assoc 50 ent))
ang_zz (cdr (assoc 51 ent))
center (cdr (assoc 10 ent))
radius (cdr (assoc 40 ent))
ang_pt (angle center pt)
ang_sc (* 2 pi (/ len (* 2 pi radius)))
)
(if (and (> len 0) (< len radius))
(if (equal ang_pt ang_qs 1e-8)
(setq id (polar center (+ ang_qs ang_sc) radius))
(setq id (polar center (- ang_zz ang_sc) radius))
)
(setq id nil)
)
)
(t (setq id nil))
)
id
)
;;main
(princ
"重要!!!!!!!! 使用本命令前请用CEL命令清除重复的线和点! 选择对象时确认选定ARC已在屏幕上全部显示! 否则会出错!!"
)
(setvar "cmdecho" 0)
(command "_undo" "be")
(if (setq sss (ssget '((0 . "arc"))))
(repeat (setq i (sslength sss))
(setq ename (ssname sss (setq i (1- i)))
ent (entget ename)
center (cdr (assoc 10 ent)) ;_圆心
radius (cdr (assoc 40 ent)) ;_半径
id_q (polar center (cdr (assoc 50 ent)) radius) ;_起点
id_z (polar center (cdr (assoc 51 ent)) radius) ;_端点
)
(if
(and (setq ename1
(ssname (ssdel ename (ssget "c" id_q id_q)) 0)
)
(setq ename2
(ssname (ssdel ename (ssget "c" id_z id_z)) 0)
)
)
(progn
(setq id1 (cons ename1 (list (xgarc_fsw ename1 id_q 0.005)))
id2 (cons ename2 (list (xgarc_fsw ename2 id_z 0.005)))
)
(cond
((= xgc "<")
(setvar "filletrad" (- radius 0.05))
)
((= xgc ">")
(setvar "filletrad" (+ radius 0.05))
)
((= xgc "=")
(setvar "filletrad" radius)
(entdel ename)
)
((= xgc "0")
(setvar "filletrad" 0)
(entdel ename)
)
)
(command "fillet" id1 id2)
)
)
)
)
(command "_undo" "e")
(princ)
)