chulse 发表于 2022-7-6 07:59:39

按Z过滤多段线选择

有人能帮我指出正确的方向吗?我想通过Z值过滤多段线(等高线)的选择(即过滤仅获得10’或5’或2’等高线)。
我假设我需要测试Z值,看看它是10、5还是2的倍数,等等。。。
 
有什么关于如何得到这个sarted的提示吗?
 
谢谢

David Bethel 发表于 2022-7-6 08:06:08

这些是长多段线还是重多段线-大卫

chulse 发表于 2022-7-6 08:06:38

我不确定。我必须弄清楚——我正在为我妹妹做这件事。

Lee Mac 发表于 2022-7-6 08:12:23

要检查多段线类型,请加载并拾取多段线:
 
(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过滤器列表进行过滤。
 
在这种情况下,需要收集一组所有此类多段线,然后在此集合上迭代,删除那些顶点高程不正确的多段线。

chulse 发表于 2022-7-6 08:15:27

谢谢大家。我得拿一幅她的画来玩。

pBe 发表于 2022-7-6 08:17:39

示例代码
(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)
)

chulse 发表于 2022-7-6 08:21:21

谢谢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**”

pBe 发表于 2022-7-6 08:24:30

我的猜测是,只需单步通过一组多段线就可以了
 
 
               
(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)
            )
 
 
即使您选择“全部”
 
-大卫

chulse 发表于 2022-7-6 08:25:21

 
明亮的
 
 
你不能在纠察车上使用foreach
 
需要vla对象+有效层

pBe 发表于 2022-7-6 08:29:22

好的,如果我理解的话-我们选择所有的lwpolyline,然后过滤掉所有的10的倍数?
但是,我们如何测试z值是10的倍数?我不明白这是怎么回事。。。
 
那么,改变选择集中实体层的最佳方式是什么?
 
谢谢
页: [1] 2
查看完整版本: 按Z过滤多段线选择