乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
楼主: chulse

[编程交流] 按Z过滤多段线选择

[复制链接]

33

主题

267

帖子

213

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
197
发表于 2022-7-6 08:34:23 | 显示全部楼层
 
所以我需要先把OBJ转换成VLA对象,然后呢?
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 08:36:48 | 显示全部楼层
不一定。。。告诉我们,在分层之后,你还需要做什么?
 
如果这就是全部。您不需要创建另一个选择集
 
基于Davids准则的构建
  1. (defun c:demo  (/ elev ss)
  2.      (setq elev 10
  3.            ss   (ssadd))
  4.      (while
  5.            (<= elev 10000)
  6.                 (if (setq temp (ssget "_X"
  7.                                       (List '(0 . "LWPOLYLINE")
  8.                                             [color=blue][b]'(-4 . "<OR")[/b][/color]
  9. [b][color=blue]                                            (cons 38 elev)[/color][/b]
  10. [b][color=blue]                                            (cons 38 (- elev))[/color][/b]
  11. [b][color=blue]                                            '(-4 . "OR>")[/color][/b]
  12.                                             )))
  13.                       (repeat (setq i (sslength temp))
  14.                             (ssadd (ssname temp (setq i (1- i))) ss)))
  15.                 (setq elev (+ elev 10))
  16.                 ) ;_end while
  17.      (sssetfirst nil ss)
  18.      )

 
更新
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-6 08:39:57 | 显示全部楼层
仅此而已-目标是找到所有索引轮廓(10的倍数),并将其设置在特定层上。
我可能也会尝试在不同的层上设置所有剩余的轮廓。
 
这些等高线都来自导入的GIS数据,并且集合可能很大,因此手动执行此操作几乎是不可能的。
 
这就是我目前拥有的:
 
  1. ;put 10' contours on correct new layer
  2.            (foreach obj SS
  3.            (vla-put-layer obj Lay10)
  4.            );_end foreach

 
如果将LWPOLYLINE高程(cdr(assoc 38(entget en))除以10的余数为零
然后将ENAME添加到PICKSET
 
 
我内心仍然是一个指挥者:
 
如果该层存在:
  1. [b][color=BLACK]([/color][/b]defun c:topten [b][color=FUCHSIA]([/color][/b]/ ss en[b][color=FUCHSIA])[/color][/b]
  2. [b][color=FUCHSIA]([/color][/b]setq s1 [b][color=NAVY]([/color][/b]ssadd[b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  3. [b][color=FUCHSIA]([/color][/b]and [b][color=NAVY]([/color][/b]setq ss [b][color=MAROON]([/color][/b]ssget '[b][color=GREEN]([/color][/b][b][color=BLUE]([/color][/b]0 . [color=#2f4f4f]"LWPOLYLINE"[/color][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
  4.       [b][color=NAVY]([/color][/b]while [b][color=MAROON]([/color][/b]setq en [b][color=GREEN]([/color][/b]ssname ss 0[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  5.              [b][color=MAROON]([/color][/b]if [b][color=GREEN]([/color][/b]zerop [b][color=BLUE]([/color][/b]rem [b][color=RED]([/color][/b]cdr [b][color=PURPLE]([/color][/b]assoc 38 [b][color=TEAL]([/color][/b]entget en[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b] 10[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
  6.                  [b][color=GREEN]([/color][/b]ssadd en s1[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  7.              [b][color=MAROON]([/color][/b]ssdel en ss[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  8. s1[b][color=BLACK])[/color][/b]

 
-大卫
回复

使用道具 举报

33

主题

267

帖子

213

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
197
发表于 2022-7-6 08:40:49 | 显示全部楼层
 
哦,天哪。。
  1. (defun c:topten (/  en e )
  2. (and (setq ss (ssget '((0 . "LWPOLYLINE"))))
  3.       (while (setq en (ssname ss 0))
  4.              (if (zerop (rem (cdr (assoc 38 [color=blue][b](setq e[/b][/color] (entget en)))) 10))
  5.                 [color=blue][b](entmod (subst (cons 8 [color=green]"E-TOPO-10")[/color][/b][/color]
  6. [b][color=blue]                        (assoc 8 e) e))[/color][/b]
  7.                  )
  8.              (ssdel en ss)))
  9. )
  1. (defun C:SCL (/ *error* msg ELEV SS LAY2 LAY10 DOC UFLAG ALL obj temp)
  2. ;layer name used for 10' contours
  3. (setq lay10 "E-TOPO-10")
  4. ;layer name used for 2' contours
  5. (setq lay2 "E-TOPO-2")
  6.    (vl-load-com)
  7. (setq DOC (vla-get-ActiveDocument (vlax-get-acad-object)))
  8. ;; --{  Error Handler Function  }--
  9. (defun *error* (msg)     
  10.    (and uflag (vla-EndUndoMark doc))
  11.    (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")        
  12.        (princ (strcat "\n** Error: " msg " **")))   
  13.    (princ))  
  14. ;; --{  Main Function  }--
  15. (setq uflag (not (vla-StartUndoMark doc)))
  16. ;;; CHECK FOR LAYER AND ADD IF NOT EXIST
  17.            (or (tblsearch "LAYER" LAY10)
  18.            (vla-add (vla-get-layers doc) LAY10))
  19.            (or (tblsearch "LAYER" LAY2)
  20.            (vla-add (vla-get-layers doc) LAY2))
  21.    ;put all obj on 2' contour layer        
  22.   (setq all (ssget "_X" '((0 . "LWPOLYLINE") )))         
  23.            (foreach obj all
  24.            (vla-put-layer obj LAY2)
  25.            );_end foreach
  26. ;(find all contours from 10 to 10000 by 10)
  27. (setq elev 10 ss (ssadd))
  28. (while
  29. (<= elev 10000);max elevation searched for is 10,000 feet - change if need be
  30.    (if (setq temp (ssget "_X" (List '(0 . "LWPOLYLINE") (cons 38 elev))))
  31. (repeat (setq i (sslength temp))
  32.      (ssadd  (ssname temp (setq i (1- i))) ss)))
  33.         (setq elev (+ elev 10))
  34. );_end while
  35. ;put 10' contours on correct new layer
  36.            (foreach obj SS
  37.            (vla-put-layer obj Lay10)
  38.            );_end foreach
  39.    ;clear ss
  40.    (setq ss nil)
  41.     (setq all nil)   
  42. (setq uFlag (vla-EndUndoMark doc))
  43. (princ)
  44. );_end defun

 
大卫的荣誉
回复

使用道具 举报

33

主题

267

帖子

213

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
197
发表于 2022-7-6 08:45:19 | 显示全部楼层
谢谢你的解释。这很有道理。
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-6 08:48:12 | 显示全部楼层
回复

使用道具 举报

33

主题

267

帖子

213

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
197
发表于 2022-7-6 08:51:17 | 显示全部楼层
that's all - the goal is to find all the index contours (multiples of 10) and set them on a specific layer.
I will probably try to set all the remaining contours on a different layer also.
 
these contours all come from imported GIS data and the sets can be huge, so doing this manually is all but impossible.
 
this is what I have at the moment:
 

[code](defun C:SCL (/ *error* msg ELEV SS LAY2 LAY10 DOC UFLAG ALL obj temp) ;layer name used for 10' contours (setq lay10 "E-TOPO-10") ;layer name used for 2' contours (setq lay2 "E-TOPO-2")   (vl-load-com) (setq DOC (vla-get-ActiveDocument (vlax-get-acad-object))) ;; --{  Error Handler Function  }-- (defun *error* (msg)        (and uflag (vla-EndUndoMark doc))   (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")               (princ (strcat "\n** Error: " msg " **")))       (princ))   ;; --{  Main Function  }--  (setq uflag (not (vla-StartUndoMark doc))) ;;; CHECK FOR LAYER AND ADD IF NOT EXIST           (or (tblsearch "LAYER" LAY10)           (vla-add (vla-get-layers doc) LAY10))           (or (tblsearch "LAYER" LAY2)           (vla-add (vla-get-layers doc) LAY2))   ;put all obj on 2' contour layer          (setq all (ssget "_X" '((0 . "LWPOLYLINE") )))                    (foreach obj all           (vla-put-layer obj LAY2)           );_end foreach;(find all contours from 10 to 10000 by 10) (setq elev 10 ss (ssadd)) (while  (
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 08:53:40 | 显示全部楼层
  1. (if (zerop (rem (cdr (assoc 38 (entget en))) 10))
 
IF the remainder of dividing the LWPOLYLINE elevation (cdr (assoc 38 (entget en))) by 10 is zerop
THEN add the ENAME to the PICKSET
 
 
I'm still a command guy at heart:
 
If the layer exists:
  1. (command "_.CHPROP" s1 "" "_LA" "layer_name" "")
 
-David
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-6 08:57:36 | 显示全部楼层
 
Oh man..
  1. (strcat "Lay" (itoa (fix elv)))
  1. (strcat "E-TOPO-" (itoa (fix elv)))
 
Kudos to David
回复

使用道具 举报

33

主题

267

帖子

213

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
197
发表于 2022-7-6 09:00:36 | 显示全部楼层
Thanks for the explanation. That makes perfect sense.
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-9 21:23 , Processed in 0.458241 second(s), 70 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表