QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
9天前
查看: 3550|回复: 7
收起左侧

[已答复] 求助,怎样列举只存在于图形中的块名称?

[复制链接]
发表于 2014-7-4 16:10:36 | 显示全部楼层 |阅读模式 来自: 中国山东东营

马上注册,结识高手,享用更多资源,轻松玩转三维网社区。

您需要 登录 才可以下载或查看,没有帐号?注册

x
本帖最后由 upc1999 于 2014-7-4 16:24 编辑
; L$ l+ Z! @+ I1 ^! N- C& f  R7 G5 X4 M" N! ?' V
我需要筛选特定的块名,比如图框A1,但是如果有插入过又删掉的块,还保留在块列表里,就需要判断这个块是不是在图形中使用。3 f) d" S& ^% L: u$ f+ G
我搜索到的代码都是先历遍实体,再判断是否为块,效率太低,有没有办法先列举块名称,再判断是不是在图行中使用?+ k: }* D8 p! }2 `2 r* B: }

* H. h% F& V! n9 A! i- G7 u; DDim entry As AcadEntity, blk1 As AcadBlockReference
- j" [) J/ a# ~: m; x
    For Each entry In activeDoc.ModelSpace
4 j! l. E4 o: B  t# r          If entry.ObjectName = "AcDbBlockReference" Then
5 G1 J4 l# U7 }9 E          Set blk1 = entry
9 f4 M+ Q! j9 t6 q9 l" m          if blk1.name="块名称" then
( G6 G# W7 E+ Y2 ^- z  B
……3 B' v! W% B; Y+ [
   next         Y, V; G# w( @0 K* C6 \
               
发表于 2014-7-4 22:10:02 | 显示全部楼层 来自: 中国台湾
未学VBA , 此是 Lisp 语句, K5 l8 p2 r4 @. S9 X7 \& V7 W7 |
(ssget "X" '((0 . "INSERT") (2 . "A1")))
5 }9 L  F2 k5 Q; @# M/ E% Z* y+ k: U$ f
插入过又删掉的话 返回值为 nil: }/ _: S+ _# y) d* B( Q6 i# M% {1 q
 楼主| 发表于 2014-7-5 09:42:44 | 显示全部楼层 来自: 中国山东东营
谢谢沙发,我用另一种方法解决了这个困扰我很久的问题,先清理块,这样块集合里就只有在图形里使用的块了,再筛选块名称。
9 T& P. j. [/ k% V) H4 L清理块代码
9 o7 z" L0 z, k0 HThisDrawing.SendCommand "-purge" & vbCr & "B" & vbCr & vbCr & "N" & vbCr
0 z3 B+ N: g# z/ @& @* ^筛选块代码
4 ?% _& ]; U  q! u1 _+ u: o1 ufor each blk1 in thisdrawing.blocks$ H% {, _- ^. ?6 t; E
if bkl1.name="GB_A1" then
5 U# c+ M6 V. X1 s1 i% L: B1 _; Z……
! P& n! l/ h4 W& x+ R3 Eend if
# C; ?/ _) {$ b( I: l( C; [
$ ?% a1 r$ j" j+ f5 i( l
发表于 2014-7-5 13:50:06 | 显示全部楼层 来自: 中国辽宁抚顺
为什么不用选择集?
  1.     Dim SS As AcadSelectionSet, FT(1) As Integer, FD(1) As Variant2 y, c$ [- A! M0 j/ h( h0 ^
  2.     FT(0) = 0: FD(0) = "INSERT"! q2 T; |1 Y* X
  3.     FT(1) = 2: FD(1) = "块名称"
      G( W5 e. ?( y# P# j/ W* W" W) V
  4.     Set SS = ThisDrawing.SelectionSets.Add("SSS")% T! q- e% _1 |7 a/ L6 y
  5.     SS.Select acSelectionSetAll, , , FT, FD
    % I9 V8 g$ y. o- a/ o1 Q
  6.     MsgBox "图形中包含有名为" & Chr(34) & "块名称" & Chr(34) & "的块参照" & SS.Count & "个", vbOKOnly3 R% F# }/ C/ J2 i: @) \
  7.     SS.Delete
复制代码
 楼主| 发表于 2014-7-5 14:48:46 | 显示全部楼层 来自: 中国山东东营
本帖最后由 upc1999 于 2014-7-5 15:26 编辑 % h2 i* N: }2 d- d: c

- c! L& c5 z9 E! r版主厉害,代码测试成功。
2 T& Z, q7 u$ o$ f/ C, b再请教版主,块名称有十几种,开头都是GB,比如GBA1、GBA2、GBA3,图中可能有其中的一种或者多种,我要统计图里这样的块分别有多少个,只用选择集能实现吗?
发表于 2014-7-5 19:07:17 | 显示全部楼层 来自: 中国辽宁抚顺
upc1999 发表于 2014-7-5 14:48 static/image/common/back.gif- c+ ?& Y' B. h" B& @
版主厉害,代码测试成功。
9 E; K, n# j8 G再请教版主,块名称有十几种,开头都是GB,比如GBA1、GBA2、GBA3,图中可能有其 ...
  1.     Dim SS As AcadSelectionSet, FT(5) As Integer, FD(5) As Variant, A/ ~3 ]0 e( Z! n
  2.     FT(0) = 0: FD(0) = "INSERT"
    - F% V$ o( A+ @
  3.     FT(1) = -4: FD(1) = "<or"" O2 }5 r6 |4 c+ A6 H. C
  4.     FT(2) = 2: FD(2) = "块名称1"
    . q; v& c, Q+ G* j- L- w) \3 V
  5.     FT(3) = 2: FD(3) = "块名称2"
    $ T7 H  ]: K5 ]7 m
  6.     FT(4) = 2: FD(4) = "块名称3"9 x& h. u8 W1 h3 ?- t
  7.     FT(5) = -4: FD(5) = "or>"
    ! s* S/ V5 X% b  A$ \
  8.     Set SS = ThisDrawing.SelectionSets.Add("SSS")
    , u( n# c; n" U; C1 ~  ?7 [; k
  9.     SS.Select acSelectionSetAll, , , FT, FD
    ; ~- f0 `: @, O5 C8 }2 E- @- [. D
  10.     MsgBox "图形中包含有名为" & Chr(34) & "块名称1" & Chr(34) & "或" & Chr(34) & "块名称2" & Chr(34) & "或" & Chr(34) & "块名称3" & Chr(34) & "的块参照共" & SS.Count & "个", vbOKOnly: W! v! W: Z& U; ]# t7 H3 J
  11.     SS.Delete' Y( ~3 I2 ?+ u! m" U# _# U
复制代码
 楼主| 发表于 2014-7-6 12:01:50 | 显示全部楼层 来自: 中国山东东营
再次感谢版主,我今年才开始学习cad开发,还得多学习。
发表于 2019-12-29 16:45:27 | 显示全部楼层 来自: 中国四川雅安
高手多!
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Licensed Copyright © 2016-2020 http://www.3dportal.cn/ All Rights Reserved 京 ICP备13008828号

小黑屋|手机版|Archiver|三维网 ( 京ICP备2023026364号-1 )

快速回复 返回顶部 返回列表