按Z过滤多段线选择
有人能帮我指出正确的方向吗?我想通过Z值过滤多段线(等高线)的选择(即过滤仅获得10’或5’或2’等高线)。我假设我需要测试Z值,看看它是10、5还是2的倍数,等等。。。
有什么关于如何得到这个sarted的提示吗?
谢谢 这些是长多段线还是重多段线-大卫 我不确定。我必须弄清楚——我正在为我妹妹做这件事。 要检查多段线类型,请加载并拾取多段线:
(defun c:checkpoly ( / e )
(if (setq e (car (entsel)))
(print (cdr (assoc 0 (entget e))))
)
(princ)
)
如果以上返回“LWPOLYLINE”,则可以通过LWPOLYLINE高程值DXF 38过滤选择:
(ssget "_X" '((0 . "LWPOLYLINE") (38 . <YourElevationValue>)))
如果上面返回“POLYLINE”,事情就复杂了一点,因为Z值将包含在每个顶点的坐标中。此类顶点不是主要实体,因此无法使用ssget过滤器列表进行过滤。
在这种情况下,需要收集一组所有此类多段线,然后在此集合上迭代,删除那些顶点高程不正确的多段线。 谢谢大家。我得拿一幅她的画来玩。 示例代码
(defun c:test (/ elev ss)
(initget 1 "2 5 10 ALL")
(setq elev (getkword "\nSelect String for filter : "))
(setq ss (ssget "_X" (if (eq elev "ALL")
'((0 . "LWPOLYLINE")
(-4 . "<OR")
(38 . 24.0)
(38 . 60.0)
(38 . 120.0)
(-4 . "OR>")
)
(list '(0 . "LWPOLYLINE")
(cons 38(* 12(distof elev)))
)
)
)
)
(sssetfirst nil ss)
)
谢谢pBe。你一定是个建筑师——我花了好几分钟才意识到你在看英寸。这些是地形等高线(均以英尺为单位)。
我想我已经解决了一般的概念,但是我在SSGET列表中遇到了一个错误。(错误的SSGET列表)
我需要做的(我认为)是逐步通过所有可能的10’标高,并在我们前进时将每个标高添加到SS中。最后,我们的目标是找到所有这些元素(任何10的倍数)并将其移动到特定层。
(setq elev 10)
(while
(<= elev 10000)
(setq temp (ssget "_X" '((0 . "LWPOLYLINE") (cons '38 elev))))
(setq ss (ssadd ss temp))
(setq temp nil)
(setq elev (+ elev 10))
);_end while
返回“**错误:错误参数类型:consp**” 我的猜测是,只需单步通过一组多段线就可以了
(defun c:demo (/ elev ss i)
(setq elev 10 ss (ssadd))
(while
(<= elev 10000)
(if (setq temp (ssget "_X" (List '(0 . "LWPOLYLINE") (cons 38 elev))))
(repeat (setq i (sslength temp))
(ssadd(ssname temp (setq i (1- i))) ss)))
(setq elev (+ elev 10))
);_end while
(sssetfirst nil ss)
)
即使您选择“全部”
-大卫
明亮的
你不能在纠察车上使用foreach
需要vla对象+有效层 好的,如果我理解的话-我们选择所有的lwpolyline,然后过滤掉所有的10的倍数?
但是,我们如何测试z值是10的倍数?我不明白这是怎么回事。。。
那么,改变选择集中实体层的最佳方式是什么?
谢谢
页:
[1]
2