注册 登录
明经CAD社区 返回首页

xinrstar的个人空间 http://www.mjtd.com/?266478 [收藏] [复制] [分享] [RSS]

日志

修改圆弧

已有 1241 次阅读2016-1-22 17:17 |系统分类:应用

;;;减小倒角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)
)


路过

雷人

握手

鲜花

鸡蛋

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-3-29 18:46 , Processed in 0.115081 second(s), 15 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部