QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
5天前
查看: 3541|回复: 7
收起左侧

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

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

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

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

x
本帖最后由 upc1999 于 2014-7-4 16:24 编辑 ( Z- ^! s2 R9 o/ Q
6 s- e! Y- z0 ~
我需要筛选特定的块名,比如图框A1,但是如果有插入过又删掉的块,还保留在块列表里,就需要判断这个块是不是在图形中使用。
9 {" P, l% V" q: @% J; T9 A我搜索到的代码都是先历遍实体,再判断是否为块,效率太低,有没有办法先列举块名称,再判断是不是在图行中使用?
+ f0 b6 p" I6 ~+ v* K9 E
- o0 P3 }- i( G5 QDim entry As AcadEntity, blk1 As AcadBlockReference7 ?. o1 O3 F+ z' y( n# H8 v
    For Each entry In activeDoc.ModelSpace
# n, e: L# s+ F* ]% h8 F          If entry.ObjectName = "AcDbBlockReference" Then
( j% g/ W, j. r( @& k          Set blk1 = entry  e4 M: H0 R( W( z& E0 A
          if blk1.name="块名称" then

' t8 ~: M& b  D……
4 |1 i+ u5 Q) C; U3 d! `   next      
! q& i9 N4 l8 R, L6 T               
发表于 2014-7-4 22:10:02 | 显示全部楼层 来自: 中国台湾
未学VBA , 此是 Lisp 语句
- j) R! K, s: r(ssget "X" '((0 . "INSERT") (2 . "A1"))): {1 G% I* E5 p+ b7 r3 C

- }" b' e7 Z, n4 g5 |8 R. F+ N插入过又删掉的话 返回值为 nil' f- T# g  p5 d% g- s: I7 W/ I
 楼主| 发表于 2014-7-5 09:42:44 | 显示全部楼层 来自: 中国山东东营
谢谢沙发,我用另一种方法解决了这个困扰我很久的问题,先清理块,这样块集合里就只有在图形里使用的块了,再筛选块名称。
+ p( b. [- T* q% M/ I清理块代码0 d/ W& E2 R" `/ k2 m3 L* W# h, H' k4 a
ThisDrawing.SendCommand "-purge" & vbCr & "B" & vbCr & vbCr & "N" & vbCr" k3 G5 v9 d) h1 B5 ]3 A
筛选块代码, A4 u+ f( D2 ?  R) m
for each blk1 in thisdrawing.blocks# V$ s& k# [- C+ K" o
if bkl1.name="GB_A1" then
' r) T" @% J! ^$ L  @) L……* T: G5 d8 @7 [' k/ L- e
end if
& ~5 D; o1 u# l" J5 W
# v4 ?$ d" S4 y
发表于 2014-7-5 13:50:06 | 显示全部楼层 来自: 中国辽宁抚顺
为什么不用选择集?
  1.     Dim SS As AcadSelectionSet, FT(1) As Integer, FD(1) As Variant
    , y3 g# l% Q* }: t
  2.     FT(0) = 0: FD(0) = "INSERT"- z9 o( m8 \/ B. d# s
  3.     FT(1) = 2: FD(1) = "块名称"
    0 X- f! g4 h- v: H! M$ J
  4.     Set SS = ThisDrawing.SelectionSets.Add("SSS")+ Q8 o$ q' p/ n( X' J9 u( Q
  5.     SS.Select acSelectionSetAll, , , FT, FD
    % E, q! M# W7 [3 t! E0 A
  6.     MsgBox "图形中包含有名为" & Chr(34) & "块名称" & Chr(34) & "的块参照" & SS.Count & "个", vbOKOnly4 }+ l% l5 |3 _  D2 f4 |+ o
  7.     SS.Delete
复制代码
 楼主| 发表于 2014-7-5 14:48:46 | 显示全部楼层 来自: 中国山东东营
本帖最后由 upc1999 于 2014-7-5 15:26 编辑
; b; D# H: V- w
% x  K  l( C; @  {- X) m版主厉害,代码测试成功。
8 M5 Z3 d" ^% Q# f, r! w9 L" }+ _再请教版主,块名称有十几种,开头都是GB,比如GBA1、GBA2、GBA3,图中可能有其中的一种或者多种,我要统计图里这样的块分别有多少个,只用选择集能实现吗?
发表于 2014-7-5 19:07:17 | 显示全部楼层 来自: 中国辽宁抚顺
upc1999 发表于 2014-7-5 14:48 static/image/common/back.gif
" ?5 G  }4 g1 b9 ^4 {+ f- o7 v版主厉害,代码测试成功。
3 q  z- ]6 L3 N, E再请教版主,块名称有十几种,开头都是GB,比如GBA1、GBA2、GBA3,图中可能有其 ...
  1.     Dim SS As AcadSelectionSet, FT(5) As Integer, FD(5) As Variant
    , V9 W+ p# U8 \& ]% C$ `, w
  2.     FT(0) = 0: FD(0) = "INSERT"! S5 {' ]7 E' g2 w- Z5 a3 T2 @6 x
  3.     FT(1) = -4: FD(1) = "<or"
    + x" x: N! F( `
  4.     FT(2) = 2: FD(2) = "块名称1"
    $ [% ~* Z9 Y! O! M4 o+ b$ @
  5.     FT(3) = 2: FD(3) = "块名称2"
    , A8 D$ B( i* d- H) U2 a
  6.     FT(4) = 2: FD(4) = "块名称3"
      J1 ~( d4 H' V- n- f, p( M
  7.     FT(5) = -4: FD(5) = "or>"- g% U: P3 ]6 t; s
  8.     Set SS = ThisDrawing.SelectionSets.Add("SSS")9 x2 w; S9 Q( V, K
  9.     SS.Select acSelectionSetAll, , , FT, FD$ N& K0 h" }) P0 j6 }
  10.     MsgBox "图形中包含有名为" & Chr(34) & "块名称1" & Chr(34) & "或" & Chr(34) & "块名称2" & Chr(34) & "或" & Chr(34) & "块名称3" & Chr(34) & "的块参照共" & SS.Count & "个", vbOKOnly/ z! Z' _) O4 b
  11.     SS.Delete2 h0 Z. q8 T; o) `
复制代码
 楼主| 发表于 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 )

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