明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2645|回复: 12

[讨论] 求一个选择任意多段线(多选)的程序!

[复制链接]
发表于 2014-1-9 14:05 | 显示全部楼层 |阅读模式
求一个选择任意多段线(多选)内图形的程序,要求最后把物体选上!
发表于 2014-1-9 14:28 | 显示全部楼层
很简单呀,通过选择集来实现啊
发表于 2014-1-9 15:50 | 显示全部楼层
这是入门级别的程序啊。。。手上没原码。。搜索ssget 吧
发表于 2014-1-9 17:35 | 显示全部楼层
  1. ;;返回多段线顶点表
  2. (defun vertexs (ename / plist pp n)        
  3.   (setq obj (vlax-ename->vla-object ename))
  4.   (setq plist (vlax-safearray->list
  5.   (vlax-variant-value
  6.     (vla-get-coordinates obj))))
  7.   (setq n 0)
  8.   (repeat (/ (length plist) 2)
  9.     (setq pp (append pp (list (list (nth n plist)(nth (1+ n) plist)))))
  10.     (setq n (+ n 2))
  11.   )
  12.   pp
  13. )
  14. (defun MJ:SS->LIST (SS)
  15.   (vl-remove-if-not '(lambda(X)(= (type X) 'ENAME)) (mapcar 'cadr (ssnamex SS)))
  16. )
  17. (defun c:tt(/ EN EN_LST MAXPT MINPT N_SS OBJ OBJ_APP PTLST SS SSX X)
  18.   (vl-load-com)
  19.   (if(setq ss (ssget '((0 . "*polyline"))))
  20.     (progn
  21.       (princ"\n开始!")
  22.       (setq en_lst '() obj_app(vla-get-Application (vla-get-ActiveDocument (vlax-get-acad-object))))
  23.       (while (setq en(ssname ss 0))
  24.         (setq ptlst (vertexs en))
  25.         (setq obj (vlax-ename->vla-object en))
  26.         (vla-GetBoundingBox obj 'minpt 'maxpt)
  27.         (vla-zoomwindow obj_app  minpt maxpt)
  28.         ;(vl-cmdf "_.zoom" "o" en "")
  29.         (setq ssx(ssget "_wp" ptlst))       
  30.         (if ssx
  31.           (progn
  32.             (setq en_lst (append  (MJ:SS->LIST ssx) en_lst))
  33.             ))
  34.         (vla-ZoomPrevious obj_app)
  35.         ;(vl-cmdf "_.zoom" "P")
  36.         (setq ss(ssdel en ss))
  37.         )
  38.       (vlax-release-object obj)
  39.       (vlax-release-object obj_app)
  40.       (setq n_ss(ssadd))
  41.       (while (setq n(car en_lst))
  42.         (setq n_ss(ssadd n n_ss))
  43.         (setq en_lst(cdr en_lst))
  44.         )
  45.       (redraw)
  46.       (sssetfirst nil n_ss)
  47.       (redraw)
  48.       (princ"\n完成!")
  49.       )
  50.     )
  51.   (princ)
  52.   )
发表于 2014-1-9 18:21 | 显示全部楼层
ysq101 发表于 2014-1-9 15:50
这是入门级别的程序啊。。。手上没原码。。搜索ssget 吧


如果不考虑屏幕缩放率对ssgte"W"和"WP"方式的影响就是入门的,如果要考虑这点的话,如果不进行局部放大那就不是一个入门级的了
发表于 2014-1-9 18:26 | 显示全部楼层
本帖最后由 llsheng_73 于 2014-1-9 18:28 编辑

对于任意多线段来说它是没有内外之分的,既然能分内外就得闭合(当然自相交形成一部分封闭区域和一部分开放区域也可以说成它有内外,不过这样就更复杂了)
发表于 2014-1-9 18:49 来自手机 | 显示全部楼层
我总觉得LZ说得不清不楚,多段线是否闭合(真闭合和假闭合),与多段线相交的对象算不算,闭合多段线内任何对象吗?呵呵,我也说得不清不楚,我说的什么,你的明白?
 楼主| 发表于 2014-1-10 09:20 | 显示全部楼层
本帖最后由 lite 于 2014-1-10 09:30 编辑
自贡黄明儒 发表于 2014-1-9 18:49
我总觉得LZ说得不清不楚,多段线是否闭合(真闭合和假闭合),与多段线相交的对象算不算,闭合多段线内任何 ...


楼上的很细心,在此详细的解释下:
1.多段线是闭合的,相当于一个区域范围,多段线的形状有可能不是矩形那样简单的形状!如果多段线非闭合,需要增加错误判断提示。
2.与多段线相交的对象不算,只选多段线内部的任何图形!
3.多段线有可能没有全部可视在屏幕窗口内(由于窗口缩放),选择的结果也需要能够把那未视部分的图形选上。
4.对于选择的多段线需要能够提供多选(ssget),而不是(entsel)
发表于 2014-1-10 10:43 | 显示全部楼层
lite 发表于 2014-1-10 09:20
楼上的很细心,在此详细的解释下:
1.多段线是闭合的,相当于一个区域范围,多段线的形状有可能不是矩 ...

你是不是想框选,然后获得封闭多段线,然后你想处理每个封闭多段线内的对象?
 楼主| 发表于 2014-1-10 12:13 | 显示全部楼层
自贡黄明儒 发表于 2014-1-10 10:43
你是不是想框选,然后获得封闭多段线,然后你想处理每个封闭多段线内的对象?

最后只要能够选上这些图形就可以了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-8 05:13 , Processed in 0.386626 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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