77077 发表于 2014-7-3 13:36:31

点选多段线

本帖最后由 77077 于 2014-7-4 13:01 编辑

如图所示,在红线范围内任意点点击一下,程序选中红线
能过滤下,
1.特定图层(比如说:"图层A"),其余图层不选.
2.只选多段线,其余不选.
3.只选闭合的,不闭合不选.
4.如果不满足上述三个条件,提示找不到,然后退出.
http://bbs.mjtd.com/forum.php?mod=attachment&aid=ODM3NzB8MTY5NTEyMTJ8MTQwNDQ1MDAxOXwyNTM4Mzd8MTEwNTkz&noupdate=yes

77077 发表于 2014-7-3 14:58:50

思路1,不知道行不行~~
1点取一个位置,运行BOUNDARY,定义为ent1,向外偏移0.00001,定义为ent2
2取得ent1的顶点列表pt_list然后(ssget "CP"pt_list)选择图元列表ss1.(ssget "WP"pt_list)选择图元列表ss2.
3.取得ent2的顶点列表pt_list然后(ssget "CP"pt_list)选择图元列表ss3.
4从ss1中剔除ss2和ss3
5.删除ent1ent2

ivde 发表于 2014-7-3 15:49:15


(defun c:tt (/ e el pts ss)
(if (and (setq e (car (entsel "\nPick Polyline: ")))
           (setq el (entget e))
           (= (cdr (assoc 0 el)) "LWPOLYLINE")
           (setq pts (vl-remove-if-not '(lambda (x) (= (car x) 10)) el))
           (setq ss (ssget "F"
                           (mapcar 'cdr pts)
                           '((0 . "*POLYLINE")
                             (-4 . "&=")
                             (70 . 1)
                             (8 . "0")
                          )
                  )
           )
           (progn
             (ssdel e ss)
             t
           )
      )
    (princ (sslength ss))
)
(princ)
)

77077 发表于 2014-7-3 16:11:00

ivde 发表于 2014-7-3 15:49 static/image/common/back.gif


不行啊,我的意思是点一个点,就选中这个点所在的闭合多段线.

ll_j 发表于 2014-7-3 16:34:36

77077 发表于 2014-7-3 16:11 static/image/common/back.gif
不行啊,我的意思是点一个点,就选中这个点所在的闭合多段线.

你的这个要求有点离奇,“在红线内任意点点击一下”,点击一下为什么选中的是红线,而不是其它线?红线很帅么?超凡脱俗?

77077 发表于 2014-7-3 16:50:45

ll_j 发表于 2014-7-3 16:34 static/image/common/back.gif
你的这个要求有点离奇,“在红线内任意点点击一下”,点击一下为什么选中的是红线,而不是其它线?红线很 ...

嘿嘿.因为是特殊需要.当然了用entsel也能选,
不过我就是要用指定点的方式来选~

ll_j 发表于 2014-7-3 17:43:02

77077 发表于 2014-7-3 16:50 static/image/common/back.gif
嘿嘿.因为是特殊需要.当然了用entsel也能选,
不过我就是要用指定点的方式来选~

除了点一下选中红线外,其它都容易实现,所以正解应该是entsel红线,ivde的程序就大致可以(我没有测试)。
点一下选中红线,不是不能实现,但相对复杂,首先,这里还有其它闭合多段线,也可能有其它红色线条,为了一个“理想化”的要求去无谓判别是不值得的,又假定你把红色多段线赋予什么特殊的特性,可能判别会容易,但你怎样去画这个红线呢?可能花的功夫要多很多,还是不值得。

chpmould 发表于 2014-7-3 21:05:55

可以实现但是太过于局限性

77077 发表于 2014-7-4 10:16:44

本帖最后由 77077 于 2014-7-4 10:43 编辑

ll_j 发表于 2014-7-3 17:43 static/image/common/back.gif
除了点一下选中红线外,其它都容易实现,所以正解应该是entsel红线,ivde的程序就大致可以(我没有测试) ...
有些时候,entsel不是那么好用.
如下图这种情况,你叫我如何能快速选中中间红色那个方框呢?所以才诞生了如题所想!
换句话说,就是点一下填充的任意位置,都能选中填充边界填充边界线不能拆除重建,因为边界线里面有已定义好的拓展属性ldata.
红线全部在图层"填充边界线","填充边界线"图层上有且只有多段线,
填充图案根据不同的颜色分别在不同的层.

风树 发表于 2014-7-4 10:27:41

本帖最后由 风树 于 2014-7-4 11:22 编辑

了解了解                     
页: [1] 2 3
查看完整版本: 点选多段线