QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
6天前
查看: 3544|回复: 7
收起左侧

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

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

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

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

x
本帖最后由 upc1999 于 2014-7-4 16:24 编辑 ) B5 x4 V$ T& q" ]' n0 ~" J7 K' k: Q! Q

- K3 ]6 C( t4 ~" k# G: Q我需要筛选特定的块名,比如图框A1,但是如果有插入过又删掉的块,还保留在块列表里,就需要判断这个块是不是在图形中使用。2 k0 J0 t' U& Y' R  m$ W9 f
我搜索到的代码都是先历遍实体,再判断是否为块,效率太低,有没有办法先列举块名称,再判断是不是在图行中使用?1 s4 W% [- ^* F* b3 w( w
; R( e( [* t1 k; q
Dim entry As AcadEntity, blk1 As AcadBlockReference
; z2 @  q. w* z( t
    For Each entry In activeDoc.ModelSpace
! g, T0 r6 H7 m- V+ \$ i4 i' t          If entry.ObjectName = "AcDbBlockReference" Then
. i: r* j' s$ J) u          Set blk1 = entry
9 m4 [' Z2 O" a          if blk1.name="块名称" then
9 f; X) @" ?9 }
……( @0 `1 B! x, }  w! x5 v; Y
   next       ' b: n) M0 j' E) ~, x3 D1 e
               
发表于 2014-7-4 22:10:02 | 显示全部楼层 来自: 中国台湾
未学VBA , 此是 Lisp 语句
6 }  [$ h+ y$ e; o: v3 M(ssget "X" '((0 . "INSERT") (2 . "A1"))). O* Z' y+ _& J
; n% t; h: \5 y
插入过又删掉的话 返回值为 nil
3 V( t$ ~# {7 }$ d/ U5 E
 楼主| 发表于 2014-7-5 09:42:44 | 显示全部楼层 来自: 中国山东东营
谢谢沙发,我用另一种方法解决了这个困扰我很久的问题,先清理块,这样块集合里就只有在图形里使用的块了,再筛选块名称。2 B5 }, p) u/ s8 ?( b' U. ]
清理块代码& n" u  q; ], V; O2 l: Q
ThisDrawing.SendCommand "-purge" & vbCr & "B" & vbCr & vbCr & "N" & vbCr
# {" V; X3 Q; @. L9 o1 G4 R% D筛选块代码  z7 B' J2 l5 ^2 c
for each blk1 in thisdrawing.blocks
* t2 a( R# w& b! k% A3 Kif bkl1.name="GB_A1" then
# Y# `  b% L- i, x: [3 |) `……8 w5 q! h3 Q4 N" W
end if1 |1 x3 B, a1 _- \
( _. g4 v! {" F& ]6 r& y" i4 ]0 E
发表于 2014-7-5 13:50:06 | 显示全部楼层 来自: 中国辽宁抚顺
为什么不用选择集?
  1.     Dim SS As AcadSelectionSet, FT(1) As Integer, FD(1) As Variant
    * p" T" E& d; z* b2 C
  2.     FT(0) = 0: FD(0) = "INSERT"
    - t+ y1 {; U5 E- ?3 C+ C; B' c
  3.     FT(1) = 2: FD(1) = "块名称"2 j; w3 G" E4 g! w
  4.     Set SS = ThisDrawing.SelectionSets.Add("SSS")/ o& ]7 p' ?2 Q% Q
  5.     SS.Select acSelectionSetAll, , , FT, FD$ i9 i# V% o6 c- p! C3 I
  6.     MsgBox "图形中包含有名为" & Chr(34) & "块名称" & Chr(34) & "的块参照" & SS.Count & "个", vbOKOnly
    , Q7 ?' F7 Y% G- s' X1 J5 Y
  7.     SS.Delete
复制代码
 楼主| 发表于 2014-7-5 14:48:46 | 显示全部楼层 来自: 中国山东东营
本帖最后由 upc1999 于 2014-7-5 15:26 编辑 : y; y' `' s; n7 D
9 Z: X1 G9 R( h+ e+ i, k/ i
版主厉害,代码测试成功。
1 q9 J5 U0 H9 V) `" @# o再请教版主,块名称有十几种,开头都是GB,比如GBA1、GBA2、GBA3,图中可能有其中的一种或者多种,我要统计图里这样的块分别有多少个,只用选择集能实现吗?
发表于 2014-7-5 19:07:17 | 显示全部楼层 来自: 中国辽宁抚顺
upc1999 发表于 2014-7-5 14:48 static/image/common/back.gif
) e2 O5 N& ?* h' W2 N9 F- P版主厉害,代码测试成功。
+ H: L6 {! u. A5 D3 U& D; z再请教版主,块名称有十几种,开头都是GB,比如GBA1、GBA2、GBA3,图中可能有其 ...
  1.     Dim SS As AcadSelectionSet, FT(5) As Integer, FD(5) As Variant
    ; K( p1 F1 D2 j- x: `# }
  2.     FT(0) = 0: FD(0) = "INSERT") v* F% E6 N0 U! f- W8 e
  3.     FT(1) = -4: FD(1) = "<or"4 j+ O8 ^  \$ N- v) p
  4.     FT(2) = 2: FD(2) = "块名称1"
    : Q5 n4 m2 r0 {& r2 H0 X
  5.     FT(3) = 2: FD(3) = "块名称2"4 U: m' j. t2 J
  6.     FT(4) = 2: FD(4) = "块名称3"
    " h* r* E/ B9 b' A
  7.     FT(5) = -4: FD(5) = "or>"
    ( B3 ]% v' d2 z
  8.     Set SS = ThisDrawing.SelectionSets.Add("SSS")
    : S9 m: M6 p0 l+ b
  9.     SS.Select acSelectionSetAll, , , FT, FD/ Q% @. h9 |, |3 B
  10.     MsgBox "图形中包含有名为" & Chr(34) & "块名称1" & Chr(34) & "或" & Chr(34) & "块名称2" & Chr(34) & "或" & Chr(34) & "块名称3" & Chr(34) & "的块参照共" & SS.Count & "个", vbOKOnly1 A2 }6 t% o/ U
  11.     SS.Delete
    ! P% E' w( W- c% q2 T! K7 k
复制代码
 楼主| 发表于 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 )

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