QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

查看: 3743|回复: 7
收起左侧

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

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

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

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

x
本帖最后由 upc1999 于 2014-7-4 16:24 编辑 / O5 N5 V% S( l4 D" `5 C

: n* a* d) u% t我需要筛选特定的块名,比如图框A1,但是如果有插入过又删掉的块,还保留在块列表里,就需要判断这个块是不是在图形中使用。
  M- p0 D0 E/ s% _7 V我搜索到的代码都是先历遍实体,再判断是否为块,效率太低,有没有办法先列举块名称,再判断是不是在图行中使用?
4 I' w/ [; |5 J: _1 b# }' j9 s1 }- Y& ~" O: I
Dim entry As AcadEntity, blk1 As AcadBlockReference
- F: b9 g9 R# j' }. ?; S$ S
    For Each entry In activeDoc.ModelSpace% _4 E) H* r8 G* Q- a
          If entry.ObjectName = "AcDbBlockReference" Then
2 Y/ X1 T! n9 Y          Set blk1 = entry
- g% n0 _. t" X/ y" ^' x% @          if blk1.name="块名称" then

! O. ^2 U3 E- J5 w……
3 u- j9 R$ V- U& B* H   next         M" r3 L/ I; X7 ^
               
发表于 2014-7-4 22:10:02 | 显示全部楼层 来自: 中国台湾
未学VBA , 此是 Lisp 语句
1 n4 m$ @9 U4 T9 x* A- S(ssget "X" '((0 . "INSERT") (2 . "A1")))
$ \7 s3 K) i) m8 u5 {+ ]1 a
. G5 x1 f: I# d' }6 _插入过又删掉的话 返回值为 nil- v* e7 _& G: I0 r. R
 楼主| 发表于 2014-7-5 09:42:44 | 显示全部楼层 来自: 中国山东东营
谢谢沙发,我用另一种方法解决了这个困扰我很久的问题,先清理块,这样块集合里就只有在图形里使用的块了,再筛选块名称。$ A9 }. l$ X8 T2 c0 e
清理块代码% a3 a3 L3 j* F: x; A, a! V& K
ThisDrawing.SendCommand "-purge" & vbCr & "B" & vbCr & vbCr & "N" & vbCr
7 W  G) [: Z5 T: @8 J+ B筛选块代码4 H1 s& k6 x; D/ c& `8 {  _
for each blk1 in thisdrawing.blocks1 P0 P3 }" z8 J; t: ]
if bkl1.name="GB_A1" then
1 X: S3 E9 @/ p* w" [7 ?9 @. V+ `……
8 R3 s" ?9 w% xend if
2 A2 k4 X- }7 F* @2 T$ G1 N& T8 Z3 _5 c" G& V2 N6 W
发表于 2014-7-5 13:50:06 | 显示全部楼层 来自: 中国辽宁抚顺
为什么不用选择集?
  1.     Dim SS As AcadSelectionSet, FT(1) As Integer, FD(1) As Variant
      d* u8 e% `: y% \" F( S
  2.     FT(0) = 0: FD(0) = "INSERT"0 }% @+ [6 S/ X0 n  T
  3.     FT(1) = 2: FD(1) = "块名称"
    + L- [- k( u/ X. E* r
  4.     Set SS = ThisDrawing.SelectionSets.Add("SSS")7 y- l4 ]$ e1 K# S
  5.     SS.Select acSelectionSetAll, , , FT, FD7 {3 m9 `( T" [" v
  6.     MsgBox "图形中包含有名为" & Chr(34) & "块名称" & Chr(34) & "的块参照" & SS.Count & "个", vbOKOnly
    % x5 a" D! Y# F6 r! e# N
  7.     SS.Delete
复制代码
 楼主| 发表于 2014-7-5 14:48:46 | 显示全部楼层 来自: 中国山东东营
本帖最后由 upc1999 于 2014-7-5 15:26 编辑 : d  g7 ^0 i- s! Q
' u- M7 L6 _, A* ^
版主厉害,代码测试成功。
4 }* i' E% A$ i4 p- N4 \$ O2 n再请教版主,块名称有十几种,开头都是GB,比如GBA1、GBA2、GBA3,图中可能有其中的一种或者多种,我要统计图里这样的块分别有多少个,只用选择集能实现吗?
发表于 2014-7-5 19:07:17 | 显示全部楼层 来自: 中国辽宁抚顺
upc1999 发表于 2014-7-5 14:48 static/image/common/back.gif
* A6 d" j1 E1 W0 m$ R版主厉害,代码测试成功。8 G, c4 ], P! V- `! K
再请教版主,块名称有十几种,开头都是GB,比如GBA1、GBA2、GBA3,图中可能有其 ...
  1.     Dim SS As AcadSelectionSet, FT(5) As Integer, FD(5) As Variant
    # x( F' n& \! g$ k* Y/ {4 g/ p" u; z
  2.     FT(0) = 0: FD(0) = "INSERT". {* W2 q: S2 t" \0 S4 H
  3.     FT(1) = -4: FD(1) = "<or". j) r: m7 H* o! ~1 c2 c
  4.     FT(2) = 2: FD(2) = "块名称1", W+ q- D$ y+ k0 k, T) G
  5.     FT(3) = 2: FD(3) = "块名称2"
    " h# v8 k1 L8 ?8 ?+ [
  6.     FT(4) = 2: FD(4) = "块名称3"! o) B5 T" N* N) V0 b& K
  7.     FT(5) = -4: FD(5) = "or>"
    & H6 a/ G# q( E6 v
  8.     Set SS = ThisDrawing.SelectionSets.Add("SSS")
    & q' D* R) @/ I
  9.     SS.Select acSelectionSetAll, , , FT, FD
    4 v8 V6 W  }5 X) {$ j
  10.     MsgBox "图形中包含有名为" & Chr(34) & "块名称1" & Chr(34) & "或" & Chr(34) & "块名称2" & Chr(34) & "或" & Chr(34) & "块名称3" & Chr(34) & "的块参照共" & SS.Count & "个", vbOKOnly
    & ~4 I6 M+ s, Y. ?  Q2 t# E% C
  11.     SS.Delete' ?9 B* j" D# N& A* R
复制代码
 楼主| 发表于 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 )

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