明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2586|回复: 11

轴倒角

[复制链接]
发表于 2014-4-26 17:17 | 显示全部楼层 |阅读模式
5明经币
http://bbs.mjtd.com/thread-89955-1-1.html

上面的链接是风版主曾经写的程序,选择两条边,这样倒出就会有问题,我觉得应该选择三条边,这样哪怕轴是倾斜的,也应该是没问题的,另外能支持多段线才好,因为有时画轴就直接用矩形命令绘制的


论坛里好像做机械的成员很少,希望大哥哥们帮我一下,谢谢!


附件: 您需要 登录 才可以下载或查看,没有账号?注册

最佳答案

发表于 2014-4-26 17:17 | 显示全部楼层


  1. (defun sk_load_com_chamfer()
  2. ;;;组码值提取(sk_dxf 图元名 组码)
  3. (defun sk_dxf(en code)
  4.     (if(and(=(type en) 'ENAME)(= (type code) 'INT))
  5.       (cdr(assoc code (entget en))))
  6.   )
  7. ;;;(sk_entmod 图元名 组码 新值 强制模式)
  8. (defun sk_entmod (en code new mode / e)
  9.   (if (and (= (type en) 'ENAME)
  10.      (= (type code) 'INT)
  11.      new)
  12.     (progn
  13.       (setq e(entget en))
  14.       (if (assoc code e)(entmod(subst(cons code new)(assoc code e)e))
  15.   (if mode (entmod(reverse(cons(cons code new)(reverse e)))) nil))      
  16.       )
  17.     )
  18.   )

  19. ;;http://bbs.mjtd.com/forum.php?mo ... &fromuid=338795
  20. (defun getep (obj / p1 p p2) ;求端点,obj由(entsel)取得
  21.   (setq ename (car obj) p0 (cadr obj))
  22.   (setq p1 (osnap p0 "end") p (osnap p0 "mid") p2 (mapcar '(lambda (x y) (- (* 2 x) y)) p p1))
  23.   (list p1 p2))

  24. (defun sk_Pladd (ent p1 / obj ent pp n m m1 m2 pn newv bg1 bg2 a b bg p1)
  25.   (vl-load-com)
  26.   (if(and ent p1 (= (type ent) 'ENAME)(= (type p1) 'LIST))
  27.     (progn      
  28.       (setq obj  (vlax-ename->vla-object ent)
  29.       PP   (vlax-curve-getclosestpointto OBJ p1)
  30.       N    (fix (setq m (vlax-curve-getparamatpoint OBJ PP)))
  31.       m1   (- m n)
  32.       m2   (- 1 m1)
  33.       bg   (vla-getbulge obj n)
  34.       pn   pp
  35.       PN   (list (car PN) (cadr PN))
  36.       NEWV (vlax-safearray-fill
  37.        (vlax-make-safearray vlax-vbdouble '(0 . 1))
  38.        PN
  39.        )
  40.       )
  41.       (vla-addvertex OBJ (1+ N) NEWV)
  42.       (if (/= 0 bg)
  43.   (progn
  44.     (setq a (* (atan bg) m1))
  45.     (setq b (* (atan bg) m2))
  46.     (vla-setbulge obj n (/ (sin a) (cos a)))
  47.     (vla-setbulge obj (1+ n) (/ (sin b) (cos b)))
  48.     )
  49.   )
  50.       )
  51.     )
  52.   )

  53. (defun sk_CHAMFER(sk_cdist sk_flag / en1 en2 p1p2 p3p4 p1 p2 p3 p4 ang1 ang2 ang3 ang4 new1 new2 new3 new4 obj index1 index2 vb_new1 vb_new3
  54.       obj2 enmake_line ENMAKE_LINE2 ENMAKE_LINE3 ENMAKE_LINE4 ENT1 ENT2 NEWX1 NEWX2 NEWX3 NEWX4 SK_CDIST SK_FLAG VB_NEW4 )
  55.   (or(setq sk_cdist 1))  
  56.   (if (and (and (setq en1(entsel"\n选择第一条边:"))(car(list t(redraw (car en1) 3))))
  57.      (and (setq en2(entsel"\n选择第二条边:"))(car(list t(redraw (car en1) 3))))     
  58.      )
  59.     (progn
  60.       (setq p1p2(getep en1))
  61.       (setq p3p4(getep en2))
  62.       (setq ent1(car en1)
  63.       ent2(car en2)
  64.       p1(car p1p2)
  65.       p2(cadr p1p2)
  66.       p3(car p3p4)
  67.       p4(cadr p3p4)
  68.       ang1(angle p1 p2)
  69.       ang2(angle p1 p3)
  70.       ang3(angle p3 p1)
  71.       ang4(angle p3 p4)
  72.       new1(polar p1 ang1 sk_cdist)
  73.       new2(polar p1 ang2 sk_cdist)
  74.       new3(polar p3 ang3 sk_cdist)
  75.       new4(polar p3 ang4 sk_cdist)
  76.       )
  77.       (if(and (= (sk_dxf ent1 5)(sk_dxf ent2 5))
  78.         (= (sk_dxf ent1 0) "LWPOLYLINE"))
  79.   (progn
  80.     (sk_Pladd ent1 new2)
  81.     (sk_Pladd ent1 new3)
  82.     (setq obj(vlax-ename->vla-object ent1))
  83.     (setq index1(vlax-curve-getParamAtPoint obj p1)
  84.     index2(vlax-curve-getParamAtPoint obj p3))
  85.     (setq vb_new1(vlax-safearray-fill(vlax-make-safearray vlax-vbdouble '(0 . 1)) (list(car new1)(cadr new1)))
  86.     vb_new4(vlax-safearray-fill(vlax-make-safearray vlax-vbdouble '(0 . 1)) (list(car new4)(cadr new4))))
  87.     (vla-put-Coordinate obj (fix index1)  vb_new1)
  88.     (vla-put-Coordinate obj (fix index2)  vb_new4)
  89.     (setq enmake_line(entmakex (list '(0 . "line")(cons 10 new1)(cons 11 new4))))
  90.     (setq obj2(vlax-ename->vla-object enmake_line))
  91.     (vla-put-layer obj2(vla-get-layer obj))
  92.     (vla-put-color obj2(vla-get-color obj))
  93.     (vla-put-Linetype obj2(vla-get-Linetype obj))
  94.     (vla-put-Lineweight obj2(vla-get-Lineweight obj))
  95.     )
  96.   )  
  97.       (if (and (= (sk_dxf ent1 0) "LINE")
  98.          (= (sk_dxf ent2 0) "LINE"))
  99.   (if sk_flag
  100.   (progn   
  101.     (setq enmake_line(entmakex (entget ent1)))
  102.     (setq enmake_line2(entmakex (entget ent1)))
  103.     (setq enmake_line3(entmakex (entget ent1)))
  104.     (setq enmake_line4(entmakex (entget ent1)))
  105.     (sk_entmod enmake_line 10 new1 nil)
  106.     (sk_entmod enmake_line 11 new4 nil)
  107.     (sk_entmod enmake_line2 10 new1 nil)
  108.     (sk_entmod enmake_line2 11 new2 nil)
  109.     (sk_entmod enmake_line3 10 new2 nil)
  110.     (sk_entmod enmake_line3 11 new3 nil)
  111.     (sk_entmod enmake_line4 10 new3 nil)
  112.     (sk_entmod enmake_line4 11 new4 nil)
  113.     (sk_entmod ent1 (if (equal p1 (sk_dxf ent1 10) 1e-8)10 11) new1 nil)
  114.     (sk_entmod ent2 (if (equal p3 (sk_dxf ent2 10) 1e-8)10 11) new4 nil)
  115.     )
  116.   (progn   
  117.     (setq newx1(polar p1 ang3 sk_cdist)
  118.     newx2(polar p1 ang1 sk_cdist)
  119.     newx3(polar p3 ang4 sk_cdist)
  120.     newx4(polar p3 ang2 sk_cdist)
  121.     )
  122.     (setq enmake_line(entmakex (entget ent1)))
  123.     (setq enmake_line2(entmakex (entget ent1)))
  124.     (setq enmake_line3(entmakex (entget ent1)))   
  125.     (sk_entmod enmake_line 10 newx2 nil)
  126.     (sk_entmod enmake_line 11 newx3 nil)
  127.     (sk_entmod enmake_line2 10 newx1 nil)
  128.     (sk_entmod enmake_line2 11 newx2 nil)
  129.     (sk_entmod enmake_line3 10 newx3 nil)
  130.     (sk_entmod enmake_line3 11 newx4 nil)  
  131.     (sk_entmod ent1 (if (equal p1 (sk_dxf ent1 10) 1e-8)10 11) newx2 nil)
  132.     (sk_entmod ent2 (if (equal p3 (sk_dxf ent2 10) 1e-8)10 11) newx3 nil)
  133.     )
  134.   )
  135.       )
  136.     )
  137.   (princ)
  138.   )
  139.   )
  140.   )

  141. (defun c:tt()
  142.   (sk_load_com_chamfer);载入函数
  143.   (sk_CHAMFER 1.5 nil);按设定参数启动函数nil表示直线孔洞倒角
  144.   (princ)
  145.   )
  146.   
  147. (defun c:tt2()
  148.   (sk_load_com_chamfer);载入函数
  149.   (sk_CHAMFER 1.5 t);按设定参数启动函数T表示直线轴倒角
  150.   (princ)
  151.   )

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

评分

参与人数 1明经币 +1 收起 理由
liuhaixin88 + 1 赞一个!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2014-4-27 15:28 | 显示全部楼层
轴倒角


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复

使用道具 举报

 楼主| 发表于 2014-4-27 15:28 | 显示全部楼层
孔倒角

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

评分

参与人数 1明经币 +1 收起 理由
lucas_3333 + 1 靓妹,也谢谢你提出好的想法!

查看全部评分

回复

使用道具 举报

发表于 2014-4-28 15:24 | 显示全部楼层
同求               
回复

使用道具 举报

 楼主| 发表于 2014-5-8 17:17 | 显示全部楼层
edata 发表于 2014-5-8 16:30

谢谢edata哥哥,我试试
回复

使用道具 举报

发表于 2014-5-9 10:17 | 显示全部楼层
  1. (defun sk_load_com_chamfer()
  2. ;;;组码值提取(sk_dxf 图元名 组码)
  3. (defun sk_dxf(en code)
  4.     (if(and(=(type en) 'ENAME)(= (type code) 'INT))
  5.       (cdr(assoc code (entget en))))
  6.   )
  7. ;;;(sk_entmod 图元名 组码 新值 强制模式)
  8. (defun sk_entmod (en code new mode / e)
  9.   (if (and (= (type en) 'ENAME)
  10.            (= (type code) 'INT)
  11.            new)
  12.     (progn
  13.       (setq e(entget en))
  14.       (if (assoc code e)(entmod(subst(cons code new)(assoc code e)e))
  15.         (if mode (entmod(reverse(cons(cons code new)(reverse e)))) nil))      
  16.       )
  17.     )
  18.   )

  19. ;;http://bbs.mjtd.com/forum.php?mo ... &fromuid=338795
  20. (defun getep (obj / p0 p1 p p2 x y) ;求端点,obj由(entsel)取得
  21.   (setq ename (car obj) p0 (cadr obj))
  22.   (setq p1 (osnap p0 "end") p (osnap p0 "mid") p2 (mapcar '(lambda (x y) (- (* 2 x) y)) p p1))
  23.   (list p1 p2))

  24. (defun sk_Pladd (ent p1 / obj  pp n m m1 m2 pn newv bg1 bg2 a b bg )
  25.   (vl-load-com)
  26.   (if(and ent p1 (= (type ent) 'ENAME)(= (type p1) 'LIST))
  27.     (progn      
  28.       (setq obj  (vlax-ename->vla-object ent)
  29.             PP   (vlax-curve-getclosestpointto OBJ p1)
  30.             N    (fix (setq m (vlax-curve-getparamatpoint OBJ PP)))
  31.             m1   (- m n)
  32.             m2   (- 1 m1)
  33.             bg   (vla-getbulge obj n)
  34.             pn   pp
  35.             PN   (list (car PN) (cadr PN))
  36.             NEWV (vlax-safearray-fill
  37.                    (vlax-make-safearray vlax-vbdouble '(0 . 1))
  38.                    PN
  39.                    )
  40.             )
  41.       (vla-addvertex OBJ (1+ N) NEWV)
  42.       (if (/= 0 bg)
  43.         (progn
  44.           (setq a (* (atan bg) m1))
  45.           (setq b (* (atan bg) m2))
  46.           (vla-setbulge obj n (/ (sin a) (cos a)))
  47.           (vla-setbulge obj (1+ n) (/ (sin b) (cos b)))
  48.           )
  49.         )
  50.       )
  51.     )
  52.   )

  53. (defun sk_CHAMFER(sk_cdist sk_flag / en1 en2 p1p2 p3p4 p1 p2 p3 p4 ang1 ang2 ang3 ang4 new1 new2 new3 new4 obj index1 index2 vb_new1 vb_new3
  54.             obj2 ss1 enmake_line en_line1 ENMAKE_LINE2 ENMAKE_LINE3 ENMAKE_LINE4 ENT1 ENT2 NEWX1 NEWX2 NEWX3 NEWX4   VB_NEW4 )
  55.   (or(setq sk_cdist 1))  
  56.   (if (and (and (setq en1(entsel"\n选择第一条边:"))(car(list t(redraw (car en1) 3))))
  57.            (and (setq en2(entsel"\n选择第二条边:"))(car(list t(redraw (car en1) 3))))          
  58.            )
  59.     (progn
  60.       (setq p1p2(getep en1))
  61.       (setq p3p4(getep en2))
  62.       (setq ent1(car en1)
  63.             ent2(car en2)
  64.             p1(car p1p2)
  65.             p2(cadr p1p2)
  66.             p3(car p3p4)
  67.             p4(cadr p3p4)
  68.             ang1(angle p1 p2)
  69.             ang2(angle p1 p3)
  70.             ang3(angle p3 p1)
  71.             ang4(angle p3 p4)
  72.             new1(polar p1 ang1 sk_cdist)
  73.             new2(polar p1 ang2 sk_cdist)
  74.             new3(polar p3 ang3 sk_cdist)
  75.             new4(polar p3 ang4 sk_cdist)
  76.             )
  77.       (if(and (= (sk_dxf ent1 5)(sk_dxf ent2 5))
  78.               (= (sk_dxf ent1 0) "LWPOLYLINE"))
  79.         (progn
  80.           (sk_Pladd ent1 new2)
  81.           (sk_Pladd ent1 new3)
  82.           (setq obj(vlax-ename->vla-object ent1))
  83.           (setq index1(vlax-curve-getParamAtPoint obj p1)
  84.                 index2(vlax-curve-getParamAtPoint obj p3))
  85.           (setq vb_new1(vlax-safearray-fill(vlax-make-safearray vlax-vbdouble '(0 . 1)) (list(car new1)(cadr new1)))
  86.                 vb_new4(vlax-safearray-fill(vlax-make-safearray vlax-vbdouble '(0 . 1)) (list(car new4)(cadr new4))))
  87.           (vla-put-Coordinate obj (fix index1)  vb_new1)
  88.           (vla-put-Coordinate obj (fix index2)  vb_new4)
  89.           (setq enmake_line(entmakex (list '(0 . "line")(cons 10 new1)(cons 11 new4))))
  90.           (setq obj2(vlax-ename->vla-object enmake_line))
  91.           (vla-put-layer obj2(vla-get-layer obj))
  92.           (vla-put-color obj2(vla-get-color obj))
  93.           (vla-put-Linetype obj2(vla-get-Linetype obj))
  94.           (vla-put-Lineweight obj2(vla-get-Lineweight obj))
  95.           )
  96.         )       
  97.       (if (and (= (sk_dxf ent1 0) "LINE")
  98.                (= (sk_dxf ent2 0) "LINE"))
  99.         (if sk_flag
  100.         (progn
  101.           (if(setq ss1(ssget "x" (list '(0 . "line")
  102.                               '(-4 . "<OR")
  103.                               '(-4 . "<AND")(cons 10 p1)(cons 11 p3)'(-4 . "AND>")
  104.                               '(-4 . "<AND")(cons 10 p3)(cons 11 p1)'(-4 . "AND>")
  105.                               '(-4 . "OR>")
  106.                               )))
  107.             ;(PRINC(sslength ss1 ))
  108.             (setq en_line1(ssname ss1 0))
  109.             )          
  110.           (if en_line1 (setq enmake_line en_line1)
  111.             (setq enmake_line(entmakex (entget ent1))))
  112.           (setq enmake_line2(entmakex (entget ent1)))
  113.           (setq enmake_line3(entmakex (entget ent1)))
  114.           (setq enmake_line4(entmakex (entget ent1)))
  115.           (sk_entmod enmake_line 10 new1 nil)
  116.           (sk_entmod enmake_line 11 new4 nil)
  117.           (sk_entmod enmake_line2 10 new1 nil)
  118.           (sk_entmod enmake_line2 11 new2 nil)
  119.           (sk_entmod enmake_line3 10 new2 nil)
  120.           (sk_entmod enmake_line3 11 new3 nil)
  121.           (sk_entmod enmake_line4 10 new3 nil)
  122.           (sk_entmod enmake_line4 11 new4 nil)
  123.           (sk_entmod ent1 (if (equal p1 (sk_dxf ent1 10) 1e-8)10 11) new1 nil)
  124.           (sk_entmod ent2 (if (equal p3 (sk_dxf ent2 10) 1e-8)10 11) new4 nil)
  125.           )
  126.         (progn
  127.           (if(setq ss1(ssget "x" (list '(0 . "line")
  128.                               '(-4 . "<OR")
  129.                               '(-4 . "<AND")(cons 10 p1)(cons 11 p3)'(-4 . "AND>")
  130.                               '(-4 . "<AND")(cons 10 p3)(cons 11 p1)'(-4 . "AND>")
  131.                               '(-4 . "OR>")
  132.                               )))
  133.             ;(PRINC(sslength ss1 ))
  134.             (setq en_line1(ssname ss1 0))
  135.             )
  136.           
  137.           (setq newx1(polar p1 ang3 sk_cdist)
  138.                 newx2(polar p1 ang1 sk_cdist)
  139.                 newx3(polar p3 ang4 sk_cdist)
  140.                 newx4(polar p3 ang2 sk_cdist)
  141.                 )
  142.           (if en_line1
  143.             (setq enmake_line en_line1)
  144.             (setq enmake_line(entmakex (entget ent1)))
  145.             )
  146.           (setq enmake_line2(entmakex (entget ent1)))
  147.           (setq enmake_line3(entmakex (entget ent1)))          
  148.           (sk_entmod enmake_line 10 newx2 nil)
  149.           (sk_entmod enmake_line 11 newx3 nil)
  150.           (sk_entmod enmake_line2 10 newx1 nil)
  151.           (sk_entmod enmake_line2 11 newx2 nil)
  152.           (sk_entmod enmake_line3 10 newx3 nil)
  153.           (sk_entmod enmake_line3 11 newx4 nil)  
  154.           (sk_entmod ent1 (if (equal p1 (sk_dxf ent1 10) 1e-8)10 11) newx2 nil)
  155.           (sk_entmod ent2 (if (equal p3 (sk_dxf ent2 10) 1e-8)10 11) newx3 nil)
  156.           )
  157.         )
  158.       )
  159.     )
  160.   (princ)
  161.   )
  162.   )
  163.   )

  164. (defun c:tt()
  165.   (sk_load_com_chamfer);载入函数
  166.   (sk_CHAMFER 1.5 nil);按设定参数启动函数nil表示直线孔洞倒角
  167.   (princ)
  168.   )
  169.   
  170. (defun c:tt2()
  171.   (sk_load_com_chamfer);载入函数
  172.   (sk_CHAMFER 1.5 t);按设定参数启动函数T表示直线轴倒角
  173.   (princ)
  174.   )

评分

参与人数 3明经币 +3 收起 理由
669423907 + 1 程序非常好用,E大,请问是哪个变量控制倒.
liuhaixin88 + 1 再次谢谢edata哥哥!有你明经更精采!
lucas_3333 + 1 E大给力!

查看全部评分

回复

使用道具 举报

发表于 2014-5-9 23:29 | 显示全部楼层
不错!感谢E大

点评

也谢谢你,lucas  发表于 2014-5-10 08:05
回复

使用道具 举报

发表于 2014-11-8 11:27 | 显示全部楼层
如果可以自己输入倒角大小就完美了.
回复

使用道具 举报

发表于 2019-4-17 23:15 | 显示全部楼层
完美!拜师服!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-25 23:33 , Processed in 0.397699 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表