乐筑天下

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

[编程交流] 具有z值的二维对象

[复制链接]

2

主题

2

帖子

0

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 08:04:35 | 显示全部楼层 |阅读模式
你好
 
我想知道如何找到哪些是具有z值的2D对象,以及如何避免没有z值的2D对象。
回复

使用道具 举报

10

主题

8258

帖子

8335

银币

初来乍到

Rank: 1

铜币
31
发表于 2022-7-6 08:14:03 | 显示全部楼层
你指的是大于或小于“0”的Z值,不是吗?
 
如何避免没有Z值的2D对象?停止使用“高程”命令,在操作UCS时要更加小心。远离3D图形。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 08:28:06 | 显示全部楼层
您需要分析图形中每种类型实体的特性,没有使用简单过滤器的“快速”方法。
 
例如,测试每个LWD多段线的高程[DXF 38];检查每个平面对象的平面[DXF 210]和相对位置[DXF 10/11/12/13/14等]。[圆/弧/椭圆/样条线/长波多段线/标注/文字/多行文字];检查三维多段线和直线对象的所有顶点(DXF 10/11);以及点/插入/文字/多行文字等对象的位置(DXF 10)。
回复

使用道具 举报

10

主题

8258

帖子

8335

银币

初来乍到

Rank: 1

铜币
31
发表于 2022-7-6 08:33:29 | 显示全部楼层
假设所有对象都不在“0”的高程,并使用“展平”命令将其返回到该高程。那么你就不必搜索任何东西了。
回复

使用道具 举报

0

主题

22

帖子

22

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-6 08:40:54 | 显示全部楼层
1.选择所有对象,并使用属性将高程设置为0。(做与展平相同的事情!)
2.使用命名视图“front”,您可以观察YZ平面中的所有对象。。。然后可以看到哪些对象相对于XY平面“出平面”。
 
“避免”物体是什么意思?为什么?有没有没有没有x值的对象?
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-6 08:58:45 | 显示全部楼层
看看这是否可以帮助您:
 
  1. (defun ss=ss1+ss2 ( ss1 ss2 / lst1 n1 lst2 n2 lst n ss )
  2. (setq n1 (if (vl-catch-all-error-p (vl-catch-all-apply 'sslength (list ss1))) 0 (sslength ss1)))
  3. (repeat n1
  4.    (setq lst1 (cons (ssname ss1 (setq n1 (1- n1))) lst1))
  5. )
  6. (setq n2 (if (vl-catch-all-error-p (vl-catch-all-apply 'sslength (list ss2))) 0 (sslength ss2)))
  7. (repeat n2
  8.    (setq lst2 (cons (ssname ss2 (setq n2 (1- n2))) lst2))
  9. )
  10. (if (eq lst1 nil) (setq lst lst2))
  11. (if (eq lst2 nil) (setq lst lst1))
  12. (if (and lst1 lst2)
  13. (progn
  14. (foreach ent lst2
  15.    (if (not (member ent lst1)) (setq lst (cons ent lst)))
  16. )
  17. (setq lst (append lst1 lst))
  18. )
  19. )
  20. (setq ss (ssadd))
  21. (foreach ent lst
  22.    (ssadd ent ss)
  23. )
  24. ss
  25. )
  26. (defun ss=ss1-ss2 ( ss1 ss2 / lst1 n1 lst2 n2 lst n ss )
  27. (setq n1 (if (vl-catch-all-error-p (vl-catch-all-apply 'sslength (list ss1))) 0 (sslength ss1)))
  28. (repeat n1
  29.    (setq lst1 (cons (ssname ss1 (setq n1 (1- n1))) lst1))
  30. )
  31. (setq n2 (if (vl-catch-all-error-p (vl-catch-all-apply 'sslength (list ss2))) 0 (sslength ss2)))
  32. (repeat n2
  33.    (setq lst2 (cons (ssname ss2 (setq n2 (1- n2))) lst2))
  34. )
  35. (if (eq lst1 nil) (setq lst nil))
  36. (if (eq lst2 nil) (setq lst lst1))
  37. (if (and lst1 lst2) (setq lst (append lst1 lst2)))
  38. (setq ss (ssadd))
  39. (foreach ent lst
  40.    (if (and (not (member ent lst2)) (not (member ent (cdr (member ent lst))))) (ssadd ent ss))
  41. )
  42. ss
  43. )
  44. (defun sspointselev0 ( / ssnew ss n entlst ent )
  45. (setq ssnew (ssadd))
  46. (setq ss (ssget "_X" '((0 . "POINT"))))
  47. (if (not (vl-catch-all-error-p (vl-catch-all-apply 'sslength (list ss)))) (setq n (sslength ss)) (setq n 0))
  48. (repeat n
  49.    (setq entlst (entget (setq ent (ssname ss (setq n (1- n))))))
  50.    (mapcar '(lambda (x) (if (= (car x) 10) (if (equal (cadddr x) 0.0 1e- (ssadd ent ssnew)))) entlst)
  51. )
  52. ssnew
  53. )
  54. (defun sslwpolyselev0 ( / ssnew ss n entlst ent )
  55. (setq ssnew (ssadd))
  56. (setq ss (ssget "_X" '((0 . "LWPOLYLINE"))))
  57. (if (not (vl-catch-all-error-p (vl-catch-all-apply 'sslength (list ss)))) (setq n (sslength ss)) (setq n 0))
  58. (repeat n
  59.    (setq entlst (entget (setq ent (ssname ss (setq n (1- n))))))
  60.    (if (and (equal (assoc 210 entlst) '(210 0.0 0.0 1.0) 1e- (equal (cdr (assoc 38 entlst)) 0.0 1e-) (ssadd ent ssnew))
  61. )
  62. ssnew
  63. )
  64. (defun sspolylineselev0 ( / ssnew ss n entlst ent en tst )
  65. (setq ssnew (ssadd))
  66. (setq ss (ssget "_X" '((0 . "POLYLINE"))))
  67. (if (not (vl-catch-all-error-p (vl-catch-all-apply 'sslength (list ss)))) (setq n (sslength ss)) (setq n 0))
  68. (repeat n
  69.    (setq entlst (entget (setq ent (ssname ss (setq n (1- n))))))
  70.    (setq en ent)
  71.    (while (eq (cdr (assoc 0 (entget (setq en (entnext en))))) "VERTEX")
  72.      (mapcar '(lambda (x) (if (= (car x) 10) (if (equal (cadddr x) 0.0 1e- (setq tst (cons T tst)) (setq tst (cons nil tst))))) (entget en))
  73.    )
  74.    (if (eval (cons 'and tst)) (ssadd ent ssnew))
  75.    (setq tst nil)
  76. )
  77. ssnew
  78. )
  79. (defun ssinsertselev0 ( / ssnew ss n entlst ent )
  80. (setq ssnew (ssadd))
  81. (setq ss (ssget "_X" '((0 . "INSERT"))))
  82. (if (not (vl-catch-all-error-p (vl-catch-all-apply 'sslength (list ss)))) (setq n (sslength ss)) (setq n 0))
  83. (repeat n
  84.    (setq entlst (entget (setq ent (ssname ss (setq n (1- n))))))
  85.    (if (and (equal (assoc 210 entlst) '(210 0.0 0.0 1.0) 1e- (equal (cadddr (assoc 10 entlst)) 0.0 1e-) (ssadd ent ssnew))
  86. )
  87. ssnew
  88. )
  89. (defun sslineselev0 ( / ssnew ss n entlst ent )
  90. (setq ssnew (ssadd))
  91. (setq ss (ssget "_X" '((0 . "LINE"))))
  92. (if (not (vl-catch-all-error-p (vl-catch-all-apply 'sslength (list ss)))) (setq n (sslength ss)) (setq n 0))
  93. (repeat n
  94.    (setq entlst (entget (setq ent (ssname ss (setq n (1- n))))))
  95.    (if (and (equal (assoc 210 entlst) '(210 0.0 0.0 1.0) 1e- (equal (cadddr (assoc 10 entlst)) 0.0 1e- (equal (cadddr (assoc 11 entlst)) 0.0 1e-) (ssadd ent ssnew))
  96. )
  97. ssnew
  98. )
  99. (defun sscircleselev0 ( / ssnew ss n entlst ent )
  100. (setq ssnew (ssadd))
  101. (setq ss (ssget "_X" '((0 . "CIRCLE"))))
  102. (if (not (vl-catch-all-error-p (vl-catch-all-apply 'sslength (list ss)))) (setq n (sslength ss)) (setq n 0))
  103. (repeat n
  104.    (setq entlst (entget (setq ent (ssname ss (setq n (1- n))))))
  105.    (if (and (equal (assoc 210 entlst) '(210 0.0 0.0 1.0) 1e- (equal (cadddr (assoc 10 entlst)) 0.0 1e-) (ssadd ent ssnew))
  106. )
  107. ssnew
  108. )
  109. (defun ssarcselev0 ( / ssnew ss n entlst ent )
  110. (setq ssnew (ssadd))
  111. (setq ss (ssget "_X" '((0 . "ARC"))))
  112. (if (not (vl-catch-all-error-p (vl-catch-all-apply 'sslength (list ss)))) (setq n (sslength ss)) (setq n 0))
  113. (repeat n
  114.    (setq entlst (entget (setq ent (ssname ss (setq n (1- n))))))
  115.    (if (and (equal (assoc 210 entlst) '(210 0.0 0.0 1.0) 1e- (equal (cadddr (assoc 10 entlst)) 0.0 1e-) (ssadd ent ssnew))
  116. )
  117. ssnew
  118. )
  119. (defun ssellipseselev0 ( / ssnew ss n entlst ent )
  120. (setq ssnew (ssadd))
  121. (setq ss (ssget "_X" '((0 . "ELLIPSE"))))
  122. (if (not (vl-catch-all-error-p (vl-catch-all-apply 'sslength (list ss)))) (setq n (sslength ss)) (setq n 0))
  123. (repeat n
  124.    (setq entlst (entget (setq ent (ssname ss (setq n (1- n))))))
  125.    (if (and (equal (assoc 210 entlst) '(210 0.0 0.0 1.0) 1e- (equal (cadddr (assoc 10 entlst)) 0.0 1e- (equal (cadddr (assoc 11 entlst)) 0.0 1e-) (ssadd ent ssnew))
  126. )
  127. ssnew
  128. )
  129. (defun sssplineselev0 ( / ssnew ss n entlst ent tst10 tst11 )
  130. (setq ssnew (ssadd))
  131. (setq ss (ssget "_X" '((0 . "SPLINE"))))
  132. (if (not (vl-catch-all-error-p (vl-catch-all-apply 'sslength (list ss)))) (setq n (sslength ss)) (setq n 0))
  133. (repeat n
  134.    (setq entlst (entget (setq ent (ssname ss (setq n (1- n))))))
  135.    (mapcar '(lambda (x) (if (= (car x) 10) (if (equal (cadddr x) 0.0 1e- (setq tst10 (cons T tst10)) (setq tst10 (cons nil tst10))))) entlst)
  136.    (mapcar '(lambda (x) (if (= (car x) 11) (if (equal (cadddr x) 0.0 1e- (setq tst11 (cons T tst11)) (setq tst11 (cons nil tst11))))) entlst)
  137.    (if (and (equal (assoc 210 entlst) '(210 0.0 0.0 1.0) 1e- (eval (cons 'and tst10)) (eval (cons 'and tst11))) (ssadd ent ssnew))
  138.    (setq tst10 nil tst11 nil)
  139. )
  140. ssnew
  141. )
  142. (defun ssdimensionselev0 ( / ssnew ss n entlst ent )
  143. (setq ssnew (ssadd))
  144. (setq ss (ssget "_X" '((0 . "DIMENSION"))))
  145. (if (not (vl-catch-all-error-p (vl-catch-all-apply 'sslength (list ss)))) (setq n (sslength ss)) (setq n 0))
  146. (repeat n
  147.    (setq entlst (entget (setq ent (ssname ss (setq n (1- n))))))
  148.    (if (and (equal (assoc 210 entlst) '(210 0.0 0.0 1.0) 1e- (equal (cadddr (assoc 10 entlst)) 0.0 1e- (equal (cadddr (assoc 11 entlst)) 0.0 1e- (equal (cadddr (assoc 12 entlst)) 0.0 1e- (equal (cadddr (assoc 13 entlst)) 0.0 1e- (equal (cadddr (assoc 14 entlst)) 0.0 1e- (equal (cadddr (assoc 15 entlst)) 0.0 1e- (equal (cadddr (assoc 16 entlst)) 0.0 1e-) (ssadd ent ssnew))
  149. )
  150. ssnew
  151. )
  152. (defun sstextselev0 ( / ssnew ss n entlst ent )
  153. (setq ssnew (ssadd))
  154. (setq ss (ssget "_X" '((0 . "TEXT"))))
  155. (if (not (vl-catch-all-error-p (vl-catch-all-apply 'sslength (list ss)))) (setq n (sslength ss)) (setq n 0))
  156. (repeat n
  157.    (setq entlst (entget (setq ent (ssname ss (setq n (1- n))))))
  158.    (if (and (equal (assoc 210 entlst) '(210 0.0 0.0 1.0) 1e- (equal (cadddr (assoc 10 entlst)) 0.0 1e-) (ssadd ent ssnew))
  159. )
  160. ssnew
  161. )
  162. (defun ssmtextselev0 ( / ssnew ss n entlst ent )
  163. (setq ssnew (ssadd))
  164. (setq ss (ssget "_X" '((0 . "MTEXT"))))
  165. (if (not (vl-catch-all-error-p (vl-catch-all-apply 'sslength (list ss)))) (setq n (sslength ss)) (setq n 0))
  166. (repeat n
  167.    (setq entlst (entget (setq ent (ssname ss (setq n (1- n))))))
  168.    (if (and (equal (assoc 210 entlst) '(210 0.0 0.0 1.0) 1e- (equal (cadddr (assoc 10 entlst)) 0.0 1e-) (ssadd ent ssnew))
  169. )
  170. ssnew
  171. )
  172. (defun selallelev0 ( / ss )
  173. (setq ss (ssadd))
  174. (setq ss (ss=ss1+ss2 (sspointselev0) ss))
  175. (setq ss (ss=ss1+ss2 (sslwpolyselev0) ss))
  176. (setq ss (ss=ss1+ss2 (sspolylineselev0) ss))
  177. (setq ss (ss=ss1+ss2 (ssinsertselev0) ss))
  178. (setq ss (ss=ss1+ss2 (sslineselev0) ss))
  179. (setq ss (ss=ss1+ss2 (sscircleselev0) ss))
  180. (setq ss (ss=ss1+ss2 (ssarcselev0) ss))
  181. (setq ss (ss=ss1+ss2 (ssellipseselev0) ss))
  182. (setq ss (ss=ss1+ss2 (sssplineselev0) ss))
  183. (setq ss (ss=ss1+ss2 (ssdimensionselev0) ss))
  184. (setq ss (ss=ss1+ss2 (sstextselev0) ss))
  185. (setq ss (ss=ss1+ss2 (ssmtextselev0) ss))
  186. ss
  187. )
  188. (defun c:selallelev=0 nil
  189. (sssetfirst nil (selallelev0))
  190. (princ)
  191. )
  192. (defun c:selallelev/=0 nil
  193. (sssetfirst nil (ss=ss1-ss2 (ssget "_X") (selallelev0)))
  194. (princ)
  195. )
  196. (princ)
  197. (princ "\nFor selecting all objects in elev=0.0 use : selallelev=0\nFor selecting all objects in elev/=0.0 use : selallelev/=0")
  198. (textpage)
  199. (princ)

 
您好,M.R。
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-6 09:10:30 | 显示全部楼层
我以为我是猴子。。。这是一个简单的代码,它对所有2D对象(也包括引线、覆盖、多线、轨迹、区域等)都更有效
 
  1. (defun ss=ss1-ss2 ( ss1 ss2 / lst1 n1 lst2 n2 lst n ss )
  2. (setq n1 (if (vl-catch-all-error-p (vl-catch-all-apply 'sslength (list ss1))) 0 (sslength ss1)))
  3. (repeat n1
  4.    (setq lst1 (cons (ssname ss1 (setq n1 (1- n1))) lst1))
  5. )
  6. (setq n2 (if (vl-catch-all-error-p (vl-catch-all-apply 'sslength (list ss2))) 0 (sslength ss2)))
  7. (repeat n2
  8.    (setq lst2 (cons (ssname ss2 (setq n2 (1- n2))) lst2))
  9. )
  10. (if (eq lst1 nil) (setq lst nil))
  11. (if (eq lst2 nil) (setq lst lst1))
  12. (if (and lst1 lst2) (setq lst (append lst1 lst2)))
  13. (setq ss (ssadd))
  14. (foreach ent lst
  15.    (if (and (not (member ent lst2)) (not (member ent (cdr (member ent lst))))) (ssadd ent ss))
  16. )
  17. ss
  18. )
  19. (defun selallelev0 ( / ss ssnew n ent entA minpt maxpt ) (vl-load-com)
  20. (setq ssnew (ssadd))
  21. (setq ss (ssget "_X"))
  22. (if (not (vl-catch-all-error-p (vl-catch-all-apply 'sslength (list ss)))) (setq n (sslength ss)) (setq n 0))
  23. (repeat n
  24.    (setq ent (ssname ss (setq n (1- n))))
  25.    (setq entA (vlax-ename->vla-object ent))
  26.    (vla-getboundingbox entA 'minpoint 'maxpoint)
  27.    (setq minpt (vlax-safearray->list minpoint) maxpt (vlax-safearray->list maxpoint))
  28.    (if (and (equal (caddr minpt) 0.0 1e- (equal (caddr maxpt) 0.0 1e-) (ssadd ent ssnew))
  29. )
  30. ssnew
  31. )
  32. (defun c:selallelev=0 nil
  33. (sssetfirst nil (selallelev0))
  34. (princ)
  35. )
  36. (defun c:selallelev/=0 nil
  37. (sssetfirst nil (ss=ss1-ss2 (ssget "_X") (selallelev0)))
  38. (princ)
  39. )
  40. (princ)
  41. (princ "\nFor selecting all objects in elev=0.0 use : selallelev=0\nFor selecting all objects in elev/=0.0 use : selallelev/=0")
  42. (textpage)
  43. (princ)
M.R。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-9 21:33 , Processed in 0.490923 second(s), 66 queries .

© 2020-2025 乐筑天下

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