明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2980|回复: 9

一个有意思的程序,试试吧:xt = 修剪曲线距最近交点点取边

[复制链接]
发表于 2011-5-10 23:58:09 | 显示全部楼层 |阅读模式

  1. ;| xt = 修剪曲线距最近交点点取边 --ok--by lxx.2007.2
  2. 功能: 以曲线与其它曲线最进交点为判断点,修剪曲线点取处的一边.
  3. |;
  4. (defun c:xt (/ A BOX D11 D12 D21 D22 E EE EE2 LL P RR SS nm nm2)
  5.   (vl-load-com)
  6.   (while
  7.     (and
  8.       (setq a (entsel))
  9.       (setq e  (car a)
  10.      nm (vla-get-objectname (vlax-ename->vla-object e))
  11.       )
  12.       (setq p (vlax-curve-getclosestpointto e (cadr a)))
  13.     )
  14.      (setq ee (entlast))
  15.      (if (member nm '("AcDbRay" "AcDbXline"))
  16.        (setq box (mapcar 'getvar '("vsmin" "vsmax")))
  17.        (progn (vla-GetBoundingBox (vlax-ename->vla-object e) 'll 'rr)
  18.        (setq box (list (vlax-safearray->list ll)(vlax-safearray->list rr))
  19.        )
  20.        )
  21.      )
  22.      (setq ss (ssget "c" (car box) (cadr box) '((0 . "*LINE,ARC,RAY,CIRCLE,ELLIPSE"))))
  23.      (command ".trim" ss "r" e "" "e" "n" (list e p) "");!!!
  24.      (if (equal ee (setq ee2 (entlast)))
  25.        nil
  26.        (progn
  27.   (setq nm2 (vla-get-objectname (vlax-ename->vla-object ee2))
  28.         d11 (distance p (vlax-curve-getstartpoint e))
  29.         d12 (if (= nm2 "AcDbRay")1e99(distance p (vlax-curve-getendpoint e)))
  30.         d21 (distance p (vlax-curve-getstartpoint ee2))
  31.         d22 (if (= nm2 "AcDbRay") 1e99(distance p (vlax-curve-getendpoint ee2)))
  32.   )
  33.   (if (member (min d11 d12 d21 d22) (list d11 d12))
  34.     (entdel ee2)
  35.     (entdel e)
  36.   )
  37.        )
  38.      )
  39.   )
  40.   (princ)
  41. )

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2011-5-11 09:14:22 | 显示全部楼层
谢谢楼主的分享
收藏了,下来学习领会
谢谢
发表于 2011-5-11 09:31:38 | 显示全部楼层
太有才了,支持,创意无限
发表于 2011-5-12 20:31:23 | 显示全部楼层
狂刀哥大源码大奉送,多谢了,努力学习lisp
发表于 2011-6-13 18:53:27 | 显示全部楼层
下载学习,谢谢分享!
发表于 2011-6-13 21:31:14 | 显示全部楼层
真的很不错啊
发表于 2012-1-13 15:48:45 | 显示全部楼层
faith66 发表于 2011-5-12 20:31
狂刀哥大源码大奉送,多谢了,努力学习lisp

留个脚印。以备后用
发表于 2012-1-13 16:00:51 | 显示全部楼层

这个更好一些
(defun C:ttr ( / edge ep i int line linename liness sp)
  (vl-load-com)
  (while (not edge)
    (setq edge (car (entsel "\n 请选择边界线:")))
    (redraw edge 3)
  )
  (prompt "\n 请选择需要extend或者trim的直线段: ")
  (if (setq i 0
            liness (ssget '((0 . "LINE")))
      )
    (repeat (sslength liness)
      (setq line (entget (ssname liness i))
            sp (cdr (assoc 10 line))
            ep (cdr (assoc 11 line))
      )
      (if (setq int (nth 0 (x_intlst edge (ssname liness i) acExtendOtherEntity)))
        (if (< (distance int sp) (distance int ep))
          (entmod (subst (cons 10 int)(assoc 10 line) line))
          (entmod (subst (cons 11 int) (assoc 11 line)line))
        )
      )
      (setq i (1+ i))
    )
    (princ "\n 没有找到需要被extend或者trim的直线段")
  )
  (redraw edge 4)
)
;;; by 狂刀 at xdcad
(defun x_intlst (obj1 obj2 param / intlst1 intlst2 ptlst)
  (if (= 'ENAME (type obj1))
    (setq obj1 (vlax-ename->vla-object obj1))
  )
  (if (= 'ENAME (type obj2))
    (setq obj2 (vlax-ename->vla-object obj2))
  )
  (setq intlst1 (vlax-variant-value (vla-intersectwith obj1 obj2 param)))
  (if (< 0 (vlax-safearray-get-u-bound intlst1 1))
    (progn
      (setq intlst2 (vlax-safearray->list intlst1))
      (while (> (length intlst2) 0)
        (setq ptlst (cons (list (car intlst2) (cadr intlst2) (caddr intlst2))
                          ptlst
                    )
              intlst2 (cdddr intlst2)
        )
      )
    )
  )
  ptlst
)

(princ "\n By qjchen@gmail.com, 有趣的trim和extend的结合,命令名:q")
(princ)
发表于 2012-8-23 14:49:26 | 显示全部楼层
myjping 发表于 2012-1-13 16:00
这个更好一些
(defun C:ttr ( / edge ep i int line linename liness sp)
  (vl-load-com)

最好加上多段线,
发表于 2012-8-23 15:58:21 | 显示全部楼层
下载学习,谢谢分享!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-9-25 17:52 , Processed in 0.279163 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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