明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2781|回复: 9

[源码] 零件清角

[复制链接]
发表于 2014-5-28 11:12 | 显示全部楼层 |阅读模式
谁帮忙写个零件清角程序呀
谢谢
发表于 2014-5-28 11:19 | 显示全部楼层
这是Z版的
  1. ;方框圆弧清角 明经 ZZXXQQ 2009.7.19
  2. (defun c:tt ()
  3.   (setvar "CMDECHO" 0)
  4.   (setq oldos (getvar "OSMODE"))
  5.   (if (and (setq r (getdist "\n圆弧半径 :"))
  6.            (princ "\n选择方框 :")
  7.            (setq ss (ssget ":S" '((0 . "LWPOLYLINE") (70 . 1))))) (progn
  8.    (setq en (ssname ss 0) ent (entget en))
  9.    (if (= (cdr(assoc 90 ent)) 4) (progn
  10.     (setq ptl (list))
  11.     (foreach n ent (if (= (car N) 10) (setq ptl (cons (cdr n) ptl))))
  12.     (setq ptl (reverse ptl))
  13.     (setq p1 (car ptl) p2 (cadr ptl) p3 (caddr ptl) p4 (last ptl))
  14.     (command "circle" p1 r) (setq e1 (entlast))
  15.     (command "circle" p2 r) (setq e2 (entlast))
  16.     (command "circle" p3 r) (setq e3 (entlast))
  17.     (command "circle" p4 r) (setq e4 (entlast))
  18.     (command "trim" e1 e2 e3 e4 "" "f" p1 p3 "" "f" p1 p3 "" "f" p2 p4 "" "f" p2 p4 "" "")
  19.     (setq ss (ssget "W" p1 p3))
  20.     (command "trim" ss "" "f" p1 p3 "" "f" p2 p4 "" "")
  21.    ))
  22.   ))
  23.   (setvar "OSMODE" oldos)
  24.   (setvar "CMDECHO" 1)
  25.   (princ)
  26. )
发表于 2014-5-28 11:27 | 显示全部楼层
这是G版主的
  1. ;;逃孔绘制 By Gu_xl 2013.05.08;;更新 2014.01.06 不封闭多段线可以逃孔,已经逃孔 部位的不再逃孔
  2. (defun c:taokong (/ TK1 TK2 KD A R SS N E)
  3.   ;;标准逃孔计算
  4.   (defun tk1 (E A      R      /      N      EL     I      P1     P2
  5.                 P3     CLOCKWISEP    MIDANG CP     MRP    STP    ENP
  6.                 MP     BULGE  ARCDATA       OBJ A1 A2 k
  7.                 )
  8.     (setq obj (vlax-ename->vla-object e))
  9.     (if (vlax-curve-isClosed obj)
  10.       (progn
  11.         (setq i 0)
  12.         (setq n (fix (vlax-curve-getEndParam obj)))
  13.         )
  14.       (progn
  15.         (setq i 0)
  16.         (setq n (1- (fix (vlax-curve-getEndParam obj)) ))
  17.         )
  18.       )

  19.     (repeat n
  20.       (setq p1 (vlax-curve-getPointAtParam e i)
  21.             p2 (vlax-curve-getPointAtParam e (setq i (1+ i)))
  22.             p3 (vlax-curve-getPointAtParam e (1+ i))
  23.             )
  24.       (if (and
  25.             (vlax-curve-isClosed obj)
  26.             (equal i (vlax-curve-getEndParam obj) 1e-6)
  27.             )
  28.         (setq k 0)
  29.         (setq k i)
  30.         )
  31.       (if (and
  32.             (equal 0 (vla-GetBulge obj (1- i)) 1e-6)
  33.             (equal 0 (vla-GetBulge obj k) 1e-6)
  34.             )
  35.         (progn
  36.       (if (null p3) (setq p3 (vlax-curve-getPointAtParam e 1)))
  37.       (setq a1 (angle p2 p1)
  38.             a2 (angle p2 p3)
  39.             )
  40.       (setq clockwisep
  41.              (<
  42.                (* (- (car p2) (car p1)) (- (cadr p3) (cadr p1)))
  43.                (* (- (cadr p2) (cadr p1)) (- (car p3) (car p1)))
  44.                )
  45.             )
  46.       (if (< a1 a2) (setq a1 (+ a1 pi pi)))
  47.       (setq midang (* 0.5 (+ a1 a2)))
  48.       (if clockwisep
  49.         (setq cp (polar p2 midang (- a r))
  50.               mrp (polar p2 midang a)
  51.               )
  52.         (setq cp (polar p2 midang (- r a))
  53.               mrp (polar p2 midang (- a))
  54.               )
  55.         )
  56.       (setq stp (car (vl-remove-if-not
  57.                        '(lambda (x)
  58.                           (equal (+ (distance p1 x) (distance p2 x))
  59.                                  (distance p1 p2)
  60.                                  1e-6
  61.                                  )
  62.                           )
  63.                        (IntersLineCircle p2 p1 cp r)
  64.                        )
  65.                      )
  66.             ) ;_ 圆弧起点
  67.       (setq enp (car (vl-remove-if-not
  68.                        '(lambda (x)
  69.                           (equal (+ (distance p3 x) (distance p2 x))
  70.                                  (distance p3 p2)
  71.                                  1e-6
  72.                                  )
  73.                           )
  74.                        (IntersLineCircle p2 p3 cp r)
  75.                        )
  76.                      )
  77.             ) ;_ 圆弧终点
  78.       (setq mp (mapcar '* '(0.5 0.5 0.5) (MAPCAR '+ stp enp)))
  79.       (setq bulge (/ (distance mrp mp) (distance mp stp))) ;_ 弓弦比
  80.       (if clockwisep (setq bulge (- bulge)))
  81.       (setq arcdata (cons (list stp enp bulge) arcdata))
  82.       )
  83.         )
  84.       )
  85.     (setq  arcdata (reverse arcdata))
  86.     (foreach data arcdata
  87.       (setq stp (car data)
  88.             enp (cadr data)
  89.             bulge (caddr data)
  90.             )
  91.       (setq n (fix (vlax-curve-getParamAtPoint
  92.                      obj
  93.                      (vlax-curve-getclosestpointto obj enp)
  94.                      )
  95.                    )
  96.             )
  97.       (vla-put-coordinate obj n (GXL-AX:2DPOINT stp))
  98.       (if (vlax-curve-getPointAtParam obj (1+ n))
  99.       (vla-AddVertex obj (1+ n) (GXL-AX:2DPOINT enp))
  100.         (vla-AddVertex obj 1 (GXL-AX:2DPOINT enp))
  101.         )
  102.       (vla-SetBulge obj n bulge)
  103.       )
  104.     )
  105.   ;;顺时针。逆时针逃孔计算
  106.   (defun tk2 (E R CLOCK / OBJ POLYCLOCK I P1 P2 P3 ARCDATA PT BULGE FLAG
  107.                 N k)
  108.     (setq obj (vlax-ename->vla-object e))
  109.     (setq polyClock (not (gxl-clock e)))
  110.     (setq i 0)
  111.     (if (vlax-curve-isClosed obj)
  112.       (progn
  113.         (setq i 0)
  114.         (setq n (fix (vlax-curve-getEndParam obj)))
  115.         )
  116.       (progn
  117.         (setq i 0)
  118.         (setq n (1- (fix (vlax-curve-getEndParam obj))))
  119.         )
  120.       )
  121.     (repeat n
  122.       (setq p1 (vlax-curve-getPointAtParam obj i)
  123.             p2 (vlax-curve-getPointAtParam obj (setq i (1+ i)))
  124.             p3 (vlax-curve-getPointAtParam obj (1+ i))
  125.             )
  126.       (if (and
  127.             (vlax-curve-isClosed obj)
  128.             (equal i (vlax-curve-getEndParam obj) 1e-6)
  129.             )
  130.         (setq k 0)
  131.         (setq k i)
  132.         )
  133.       (if (and
  134.             (equal 0 (vla-GetBulge obj (1- i)) 1e-6)
  135.             (equal 0 (vla-GetBulge obj k) 1e-6)
  136.             )
  137.         (progn
  138.       (if (null p3) (setq p3 (vlax-curve-getPointAtParam obj 1)))
  139.       (cond
  140.         (polyClock ;_ 曲线顺时针
  141.          (cond
  142.            (clock ;_ 顺时针逃孔
  143.             ;;(加点 弓弦比 T在加点处修改弓弦比,nil在上处修改弓弦比)
  144.             (setq arcdata (cons (list (polar p2 (angle p2 p3) r) -1 nil) arcdata))
  145.             )
  146.            (t ;_ 逆时针逃孔
  147.             (setq arcdata (cons (list (polar p2 (angle p2 p1) r) -1 t) arcdata))
  148.             )
  149.            )
  150.          )
  151.         (t ;_ 曲线逆时针
  152.          (cond
  153.            (clock ;_ 顺时针逃孔
  154.             (setq arcdata (cons (list (polar p2 (angle p2 p1) r) 1 t) arcdata))
  155.             )
  156.            (t ;_ 逆时针逃孔
  157.             (setq arcdata (cons (list (polar p2 (angle p2 p3) r) 1 nil) arcdata))
  158.             )
  159.            )
  160.          )
  161.         )
  162.       )
  163.     )
  164.       )
  165.      (setq  arcdata (reverse arcdata))
  166.     (foreach data arcdata
  167.       (setq pt (car data)
  168.             bulge (cadr data)
  169.             flag (caddr data)
  170.             )
  171.       (setq n (fix (vlax-curve-getParamAtPoint
  172.                      obj
  173.                      (vlax-curve-getclosestpointto obj pt)
  174.                      )
  175.                    )
  176.             )
  177.       (if (vlax-curve-getPointAtParam obj (1+ n))
  178.         (progn
  179.          (vla-AddVertex obj (1+ n) (GXL-AX:2DPOINT pt))
  180.          (if flag
  181.            (vla-SetBulge obj (1+ n) bulge)
  182.            (vla-SetBulge obj n bulge)
  183.            )
  184.          )
  185.         (progn
  186.          (vla-AddVertex obj 1 (GXL-AX:2DPOINT pt))
  187.          (if flag
  188.            (vla-SetBulge obj 1 bulge)
  189.            (vla-SetBulge obj 0 bulge)
  190.            )
  191.          )
  192.         )
  193.       )
  194.       )
  195.   (initget "1 2 3")
  196.   (if (null
  197.         (setq kd (getkword "\n[标准(1)/顺时针(2)/逆时针(3)]<1>"))
  198.         )
  199.     (setq kd "1")
  200.     )
  201.   (cond
  202.     ((= "1" kd)
  203.      (if (null (setq a (getreal "\n逃孔量<5.0>:")))
  204.        (setq a 5.0)
  205.        )
  206.      (if (null (setq r (getreal "\n逃孔半径<10.0>:")))
  207.        (setq r 10.0)
  208.        )
  209.      (while (setq ss (ssget '((0 . "lwpolyline"))))
  210.        (repeat (setq n (sslength ss))
  211.          (setq e (ssname ss (setq n (1- n))))
  212.          (tk1 e a r) ;_ 修剪逃孔
  213.          )
  214.        )
  215.      )
  216.     (t
  217.      (if (null (setq r (getreal "\n逃孔半径<10.0>:")))
  218.        (setq r 10.0)
  219.        )
  220.      (while (setq ss (ssget '((0 . "*polyline"))))
  221.        (repeat (setq n (sslength ss))
  222.          (setq e (ssname ss (setq n (1- n))))
  223.          (tk2 e  r (= "2" kd)) ;_ 修剪逃孔
  224.          )
  225.        )
  226.      )
  227.     )
  228.   (princ)
  229.   )
  230. ;;*******************以下是一些用到的自定义函数****************************
  231. ;; Line-Circle Intersection - Lee Mac
  232. ;;直线与园交点
  233. (defun IntersLineCircle ( p q c r / a d n s )
  234.   (setq n (mapcar '- q p)
  235.         p (trans p 0 n)
  236.         c (trans c 0 n)
  237.         a (list (car p) (cadr p) (caddr c))
  238.   )
  239.   (cond
  240.     ( (equal r (setq d (distance c a)))
  241.       (list (trans a n 0))
  242.     )
  243.     ( (< d r)
  244.       (setq s (sqrt (- (* r r) (* d d))))
  245.       (list
  246.         (trans (list (car p) (cadr p) (- (caddr c) s)) n 0)
  247.         (trans (list (car p) (cadr p) (+ (caddr c) s)) n 0)
  248.       )
  249.     )
  250.   )
  251. )
  252. ;;转换一个点到一个二维ActiveX点
  253. (defun gxl-Ax:2DPoint (pt)
  254.   (vlax-make-variant
  255.     (vlax-safearray-fill
  256.       (vlax-make-safearray vlax-vbdouble '(0 . 1))
  257.       (list (car pt) (cadr pt))
  258.     )
  259.   )
  260. )
  261. ;;判断点表或非自交封闭曲线的是否顺时针
  262. (defun gxl-clock  (PLIST / LW MINP MAXP LST)
  263.   (cond        ((= 'LIST (type plist))
  264.           (not
  265.             (minusp
  266.               (apply '+
  267.                      (mapcar
  268.                        (function
  269.                          (lambda (a b)
  270.                            (- (* (car b) (cadr a)) (* (car a) (cadr b)))
  271.                          )
  272.                        )
  273.                        plist
  274.                        (cons (last plist) plist)
  275.                      )
  276.               )
  277.             )
  278.           )
  279.         )
  280.         (t
  281.          (if (= 'ename (type plist))
  282.            (setq lw (vlax-ename->vla-object plist))
  283.            (if (= 'VLA-OBJECT (type plist))
  284.              (setq lw plist)
  285.              )
  286.            )
  287.          (vla-GetBoundingBox lw 'MinP 'MaxP)
  288.          (setq
  289.            minp        (vlax-safearray->list minp)
  290.            MaxP        (vlax-safearray->list MaxP)
  291.            lst        (mapcar
  292.                   (function
  293.                     (lambda (x)
  294.                       (vlax-curve-getParamAtPoint
  295.                         lw
  296.                         (vlax-curve-getClosestPointTo lw x)
  297.                         )
  298.                       )
  299.                     )
  300.                   (list        minp
  301.                         (list (car MaxP) (cadr minp))
  302.                         MaxP
  303.                         (list (car minp) (cadr MaxP))
  304.                         )
  305.                   )
  306.            )
  307.          (if (or
  308.                (<= (car lst) (cadr lst) (caddr lst) (cadddr lst))
  309.                (<= (cadr lst) (caddr lst) (cadddr lst) (car lst))
  310.                (<= (caddr lst) (cadddr lst) (car lst) (cadr lst))
  311.                (<= (cadddr lst) (car lst) (cadr lst) (caddr lst))
  312.                )
  313.            t
  314.            )
  315.          )
  316.         )

  317.   )
  318. ;;*******************以上是一些用到的自定义函数****************************
发表于 2014-5-28 11:47 | 显示全部楼层
这纯COMMAND啊
 楼主| 发表于 2014-5-29 09:33 | 显示全部楼层
本帖最后由 sanji14 于 2014-5-29 09:40 编辑



<!--[if !vml]-->file:///C:/Users/yangjun/AppData/Local/Temp/msohtmlclip1/01/clip_image001.jpg<!--[endif]-->


非常感谢!!!!能不能做成图片这样呀

<!--[if !vml]--><!--[endif]-->


发表于 2014-5-30 09:51 | 显示全部楼层
sanji14 发表于 2014-5-29 09:33
非常感谢!!!!能不能做成图片这样呀

你发的啥子内容哟?
 楼主| 发表于 2014-6-12 22:48 | 显示全部楼层
可以做成图示那样吗?

本帖子中包含更多资源

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

x
发表于 2021-7-27 16:28 | 显示全部楼层
sanji14 发表于 2014-6-12 22:48
可以做成图示那样吗?

找到你图片这样的了嘛?兄弟,找到发我一份,谢谢了
发表于 2021-8-5 17:38 | 显示全部楼层
; 错误: 输入的列表有缺陷
发表于 2023-10-28 22:12 来自手机 | 显示全部楼层
哪位兄弟有发我一份
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-6-23 10:49 , Processed in 0.154928 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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