找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 3571|回复: 15

[LISP程序]:选择增强之:选择连续线功能!

[复制链接]

已领礼包: 6个

财富等级: 恭喜发财

发表于 2007-1-29 22:46:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
CAD的选择集是以对象本身特属性做选择的
但事实上我们有很多时候
是要用对象相对几何关系来选择一批对象
比如说在一堆乱七八糟的线中选择相互连续的一组线
这时就要用到选择连续线的功能了!
有很多CAD软件中就有这个功能如:ug,等等
但AUTOCAD却没有带让人很头晕

写了一个简单点的请大家试用:
等有时间再加上个选择连续且相切功能

  1. (vl-load-com)
  2. (defun gotonexten (en pt / box en2 en2lst ep i sp ss)
  3.   (setq        box (* (/ (getvar "pickbox") (cadr (getvar "screensize")))
  4.                (getvar "viewsize")
  5.             )
  6.   )
  7.   (setq        ss (ssget "c"
  8.                   (mapcar '- pt (list box box))
  9.                   (mapcar '+ pt (list box box))
  10.            )
  11.   )
  12.   (if ss
  13.     (progn
  14.       (ssdel en ss)
  15.       (setq i 0)
  16.       (while (setq en2 (ssname ss i))
  17.         (setq i (1+ i))
  18.         (setq
  19.           sp (vl-catch-all-apply 'vlax-curve-getStartPoint (list en2))
  20.         )
  21.         (if (listp sp)
  22.           (progn (setq ep (vlax-curve-getEndPoint en2))
  23.                  (cond ((equal sp pt 1e-8)
  24.                         (setq en2lst (cons (list en2 ep) en2lst))
  25.                        )
  26.                        ((equal ep pt 1e-8)
  27.                         (setq en2lst (cons (list en2 sp) en2lst))
  28.                        )
  29.                  )
  30.           )
  31.         )
  32.       )
  33.     )
  34.   )
  35.   en2lst
  36. )

  37. ;;选择连续线c:ss -----fsxm 2007/01/29
  38. (defun c:ss (/ en enp ept spt ss addnext)
  39.   (if (and (setq enp (entsel))
  40.            (ssget (cadr enp) '((0 . "*line,arc,circle,ellipse")))
  41.       )
  42.     (progn
  43.       (setq en (car enp))
  44.       (setq spt (vlax-curve-getStartPoint en))
  45.       (setq ept (vlax-curve-getendPoint en))
  46.       (setq ss (ssadd))
  47.       (ssadd en ss)
  48.       (defun addnext (en pt / next)
  49.         (if (setq next (gotonexten en pt))
  50.           (foreach a next
  51.             (if        (not (ssmemb (car a) ss))
  52.               (progn (ssadd (car a) ss)
  53.                      (apply 'addnext a)
  54.               )
  55.             )
  56.           )
  57.         )
  58.       )
  59.       (addnext en spt)
  60.       (addnext en ept)
  61.       (if (= 0 (getvar "cmdactive"))
  62.         (sssetfirst nil ss)
  63.       )
  64.       ss
  65.     )
  66.     (progn
  67.       (princ "\n未选取对象或选取了非curve类型对象!")
  68.       (princ)
  69.     )
  70.   )
  71. )

本帖被以下淘专辑推荐:

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2007-1-30 23:28:46 | 显示全部楼层
好像不实用
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-1-30 23:54:09 | 显示全部楼层
以前写的一个功能类似的程序
粘连选集,试试就知道(好像et也有类似的功能)
命令c:fss
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

发表于 2007-2-2 22:12:07 | 显示全部楼层
我以前贴过

就是那个选其中一根线 把线连成pl线的.

自己找一下
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-2-3 11:54:03 | 显示全部楼层
楼主,能否加入选择集功能,选择定长度(可以自己添加长度)的一些连续线,连接为矩形,这些线段是首尾相连的矩形线,原来是分散的line,现在要变为闭合的pline。主要应用于一些没有规律性的图框选择。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6个

财富等级: 恭喜发财

 楼主| 发表于 2007-2-3 21:32:59 | 显示全部楼层
选择连续&相切线:
主函c:ss数不变 gotonexten有点小改动 另加个getangatpoint

  1. (defun getangatpoint (en pt)
  2.   (rem (angle
  3.          '(0 0 0)
  4.          (vlax-curve-getFirstDeriv
  5.            en
  6.            (vlax-curve-getParamAtPoint en pt)
  7.          )
  8.        )
  9.        pi
  10.   )
  11. )
  12. (defun gotonexten (en pt / box en2 en2lst ep i sp ss *ang* enang)
  13.   (setq        box (* (/ (getvar "pickbox") (cadr (getvar "screensize")))
  14.                (getvar "viewsize")
  15.             )
  16.   )
  17.   (setq        ss (ssget "c"
  18.                   (mapcar '- pt (list box box))
  19.                   (mapcar '+ pt (list box box))
  20.            )
  21.   )
  22.   (setq enang (getangatpoint en pt))
  23.   (setq *ang* 1e-8)
  24.   (if ss
  25.     (progn
  26.       (ssdel en ss)
  27.       (setq i 0)
  28.       (while (setq en2 (ssname ss i))
  29.         (setq i (1+ i))
  30.         (setq
  31.           sp (vl-catch-all-apply 'vlax-curve-getStartPoint (list en2))
  32.         )
  33.         (if (listp sp)
  34.           (progn (setq ep (vlax-curve-getEndPoint en2))
  35.                  (cond ((and (equal sp pt 1e-8)
  36.                              (equal enang (getangatpoint en2 sp) *ang*)
  37.                         )
  38.                         (setq en2lst (cons (list en2 ep) en2lst))
  39.                        )
  40.                        ((and (equal ep pt 1e-8)
  41.                              (equal enang (getangatpoint en2 ep) *ang*)
  42.                         )
  43.                         (setq en2lst (cons (list en2 sp) en2lst))
  44.                        )
  45.                  )
  46.           )
  47.         )
  48.       )
  49.     )
  50.   )
  51.   en2lst
  52. )


另:softbird  你说的由于用的较少,有空与我私聊
小狂老大的附件没法下载!下了9次只见见次数在增加可就是下不来
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2008-5-31 00:41:12 | 显示全部楼层
这就是我一直想找的东东嘛
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2008-5-31 00:46:49 | 显示全部楼层
这个不错啊,更加科学,比粘连选择更进一了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 8857个

财富等级: 富甲天下

发表于 2008-10-12 21:01:41 | 显示全部楼层
雨箭风刀兄你好:
fss.rar 程序无法下载喔!
麻烦你查看一下!
谢谢你!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2008-10-16 19:21:05 | 显示全部楼层
1
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2008-10-16 19:23:31 | 显示全部楼层
2
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2008-10-22 00:39:53 | 显示全部楼层
楼主不容易啊,辛苦了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2008-10-23 17:33:01 | 显示全部楼层
这程序早有了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-4-11 11:26:22 | 显示全部楼层
有空学习下! 对这个算法很感兴趣。

以前只知道
1、通过(ssget "c" pt pt)循环或递归得出。
2、通过(ssget "A" (点过滤))循环或递归得出。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-5-28 07:11:05 | 显示全部楼层
这个已经下载了,正在学习中
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-9-24 10:27 , Processed in 0.488683 second(s), 62 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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