QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
本帖最后由 upc1999 于 2014-7-4 16:24 编辑 % q$ j+ B: F# q$ T
& u2 }/ T6 T$ z# p7 m4 I7 D3 q- p
我需要筛选特定的块名,比如图框A1,但是如果有插入过又删掉的块,还保留在块列表里,就需要判断这个块是不是在图形中使用。
+ p! L$ t% j1 ]! ?, z我搜索到的代码都是先历遍实体,再判断是否为块,效率太低,有没有办法先列举块名称,再判断是不是在图行中使用?2 t* ]  C2 t9 R+ D
' C" U& x6 U) e  q
Dim entry As AcadEntity, blk1 As AcadBlockReference0 H0 E9 {+ M, ^# f
    For Each entry In activeDoc.ModelSpace
. E, d8 S/ B" O7 _: t          If entry.ObjectName = "AcDbBlockReference" Then5 m- E' w6 u1 P8 V; P4 x( Z
          Set blk1 = entry
0 C% Q8 O( {' t8 e4 e0 _8 x          if blk1.name="块名称" then
' m5 {* A1 U3 V: T& L: q
……+ r4 o; y3 |) T8 e2 f2 c4 l
   next       : o! |. q: m  C3 z! x" z/ d0 }
               
发表于 2014-7-4 22:10:02 | 显示全部楼层 来自: 中国台湾
未学VBA , 此是 Lisp 语句
6 x& s* ^6 C  R(ssget "X" '((0 . "INSERT") (2 . "A1")))  v4 E! |2 ]! i( l7 s
& R. ^( O% y: w  U
插入过又删掉的话 返回值为 nil* c: l% \) z  E
 楼主| 发表于 2014-7-5 09:42:44 | 显示全部楼层 来自: 中国山东东营
谢谢沙发,我用另一种方法解决了这个困扰我很久的问题,先清理块,这样块集合里就只有在图形里使用的块了,再筛选块名称。
  \$ B" u0 Z. G清理块代码
# z$ Y5 h: V9 e  c* ~0 sThisDrawing.SendCommand "-purge" & vbCr & "B" & vbCr & vbCr & "N" & vbCr% ]8 ?8 c. T* A! {& M3 m. o
筛选块代码" B' ~7 t5 Q8 _/ t6 R* l6 ~8 S: E
for each blk1 in thisdrawing.blocks! f8 ^; B% [0 l: O4 m* j9 _
if bkl1.name="GB_A1" then8 s9 T) X" l3 \6 N
……
. t5 J3 a/ j1 s0 m6 G* Rend if
2 B- r/ S4 u  Q  M
/ w( z* `$ F3 C: {, X
发表于 2014-7-5 13:50:06 | 显示全部楼层 来自: 中国辽宁抚顺
为什么不用选择集?
  1.     Dim SS As AcadSelectionSet, FT(1) As Integer, FD(1) As Variant
    - l7 S  m6 v7 Y, m5 C4 q
  2.     FT(0) = 0: FD(0) = "INSERT"
    6 W6 ^; u0 \# E5 M: @$ l: W3 S" e
  3.     FT(1) = 2: FD(1) = "块名称"4 `, Y! ?* Z) D9 `5 s
  4.     Set SS = ThisDrawing.SelectionSets.Add("SSS")
    ) {; J5 }8 ~# c7 Z) p) s
  5.     SS.Select acSelectionSetAll, , , FT, FD: C6 \7 @6 G3 S6 G, r0 P- X
  6.     MsgBox "图形中包含有名为" & Chr(34) & "块名称" & Chr(34) & "的块参照" & SS.Count & "个", vbOKOnly4 x" b* M: a8 n& K- G; i" W
  7.     SS.Delete
复制代码
 楼主| 发表于 2014-7-5 14:48:46 | 显示全部楼层 来自: 中国山东东营
本帖最后由 upc1999 于 2014-7-5 15:26 编辑 2 l# d+ d& F' j. ^
8 `! H+ e$ p! L( M8 {
版主厉害,代码测试成功。* W0 ~  |# Q' f3 L0 S, S8 z8 r0 r* v5 [
再请教版主,块名称有十几种,开头都是GB,比如GBA1、GBA2、GBA3,图中可能有其中的一种或者多种,我要统计图里这样的块分别有多少个,只用选择集能实现吗?
发表于 2014-7-5 19:07:17 | 显示全部楼层 来自: 中国辽宁抚顺
upc1999 发表于 2014-7-5 14:48 static/image/common/back.gif
$ x( [2 L4 c% c! w版主厉害,代码测试成功。
* b; `4 U6 e; f) i+ z  t5 W8 N8 h再请教版主,块名称有十几种,开头都是GB,比如GBA1、GBA2、GBA3,图中可能有其 ...
  1.     Dim SS As AcadSelectionSet, FT(5) As Integer, FD(5) As Variant( f+ G1 O8 a" ^% C1 x
  2.     FT(0) = 0: FD(0) = "INSERT"  e( i$ \7 s1 i6 D  r
  3.     FT(1) = -4: FD(1) = "<or"& S3 V% N/ K/ N
  4.     FT(2) = 2: FD(2) = "块名称1"
    " Q' f) T# ^9 C) _# |
  5.     FT(3) = 2: FD(3) = "块名称2": {( R1 j/ w6 k- @* h- [* L
  6.     FT(4) = 2: FD(4) = "块名称3"/ _$ F  G# D, r; V- n% t
  7.     FT(5) = -4: FD(5) = "or>"
      C2 y4 B# l* I( \5 A
  8.     Set SS = ThisDrawing.SelectionSets.Add("SSS")$ x0 D+ P$ {5 S
  9.     SS.Select acSelectionSetAll, , , FT, FD
    ' Z5 {1 o1 J  Z& _( F) D5 M3 [6 G
  10.     MsgBox "图形中包含有名为" & Chr(34) & "块名称1" & Chr(34) & "或" & Chr(34) & "块名称2" & Chr(34) & "或" & Chr(34) & "块名称3" & Chr(34) & "的块参照共" & SS.Count & "个", vbOKOnly% M2 A5 C2 I# J% G* \1 w
  11.     SS.Delete% \) D5 T+ I+ Q0 v8 e9 P
复制代码
 楼主| 发表于 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 )

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