aws 发表于 2024-4-7 17:54:27

如何把多段线炸开,再加入选择集呢?

我有一些线,分不清是多段线,还是直线
我想把它们都选中,然后都变成直线,再进行下一步操作

本来想着,先判断类型是不是多段线,
如果是,就加入到新选择集里面,后面统一炸开,再用(ssget “p”)获取炸开的直线
后来发现这样又得合并选择集,感觉挺笨的,
大家有更好的方法吗


飞雪神光 发表于 2024-4-7 20:28:04

你这个思路没问题 就是获得炸开的线再合并选择集

hubeiwdlue 发表于 2024-4-7 20:29:13

感觉还是要做并集。
(setq s1 (ssget))
(command ".EXPLODE" s1 "")
(command ".SELECT" s1 "add" (ssget "P") "")
(sssetfirst nil (ssget "P"))

qazxswk 发表于 2024-4-7 20:29:25

本帖最后由 qazxswk 于 2024-4-7 21:12 编辑

先设定两点,P1、P2,再筛选多段线并炸开
(vl-cmdf "_.explode" (ssget "c" p1 p2 '((0 . "polyline,lwpolyline"))))
炸开后,再用两点窗选一次,就得到一个选择集了
(setq ss (ssget "c" p1 p2 '((0 . "line"))))

以上的方法,只适合框选的情况,如果是点选加框选,那就需要另一个方式了。不过你自己都说了,分不清是多段线,还是直线,那只能是筛选了。



(defun c:11(/ p1 p2 ss)
(setvar "qaflags" 1)
(setq p1 (getpoint "框选起点:"))
(setq p2 (getcorner p1 "指定对角点: " ))
(vl-cmdf "_.explode" (ssget "c" p1 p2 '((0 . "polyline,lwpolyline"))))
(setq ss (ssget "c" p1 p2 '((0 . "line"))))
(setvar "qaflags" 0)
(sssetfirst nil ss)
(princ)
)

你有种再说一遍 发表于 2024-4-7 20:53:00

不笨,因为lisp想要做好需要注重提取成本.
这个提取成本就是自己一系列的多段线子段出来满足后面功能的集合.

aws 发表于 2024-4-7 21:41:12

(defun c:ttg (/ en s1 s2 s3 s4 ss)
        (setq ss(ssget '((0 . "LINE,LWPOLYLINE"))))
        (setq s1(ssadd))
        (setq s2(ssadd))
        (repeat(sslength ss)
                (setq en(ssname ss 0))
                (if(equal(cdr(assoc 0(entget en)))"LWPOLYLINE")
                        (ssadd en s1)
                        (ssadd en s2)
                )
                (ssdel en ss)
        )
        (setvar "QAFLAGS" 1)
        (command "EXPLODE" s1 "")
        (setq s3(ssget "p"))
        (command "SELECT" S3 S2 "")
        (setq S4(ssget "P"))
        (sssetfirst nil s4)
        (princ)
)

start4444 发表于 2024-4-7 23:00:57

aws 发表于 2024-4-7 21:41
(defun c:ttg (/ en s1 s2 s3 s4 ss)
        (setq ss(ssget '((0 . "LINE,LWPOLYLINE"))))
        (setq s1(ssadd))
...

直接对遍历ss,直线直接加入新选集,多段线炸开再加入,这样应该简练点
页: [1]
查看完整版本: 如何把多段线炸开,再加入选择集呢?