QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
本帖最后由 upc1999 于 2014-7-4 16:24 编辑
4 g, W. [$ J; r9 R2 e
$ T- P1 p5 o+ k. j8 r% d: o- i, J5 H我需要筛选特定的块名,比如图框A1,但是如果有插入过又删掉的块,还保留在块列表里,就需要判断这个块是不是在图形中使用。
1 A3 [+ F% n8 {我搜索到的代码都是先历遍实体,再判断是否为块,效率太低,有没有办法先列举块名称,再判断是不是在图行中使用?
; T# Q* Y# N6 P2 R
1 g, l4 q0 g8 VDim entry As AcadEntity, blk1 As AcadBlockReference# M( A7 L6 e# V# j% ]5 U
    For Each entry In activeDoc.ModelSpace
* S+ [" f" Q) g- ?7 H          If entry.ObjectName = "AcDbBlockReference" Then
, r4 n1 ^9 _6 _1 ~4 v2 K          Set blk1 = entry
( m& o. c( @/ h: N$ a% m          if blk1.name="块名称" then

+ @* Q# r8 o- Z# |1 r6 n……
7 P. i/ J6 _1 U1 Y1 P$ V# e   next       2 c9 k  \9 i1 ^' {
               
发表于 2014-7-4 22:10:02 | 显示全部楼层 来自: 中国台湾
未学VBA , 此是 Lisp 语句
5 a. N# K! p' ]6 @; Q(ssget "X" '((0 . "INSERT") (2 . "A1")))* |1 k0 N! @1 _$ Q9 A
) f8 I, G) V: n
插入过又删掉的话 返回值为 nil
  `3 D* J9 J+ d& q8 W. h
 楼主| 发表于 2014-7-5 09:42:44 | 显示全部楼层 来自: 中国山东东营
谢谢沙发,我用另一种方法解决了这个困扰我很久的问题,先清理块,这样块集合里就只有在图形里使用的块了,再筛选块名称。# |+ g6 H2 p" u: b- M" \
清理块代码
# Q4 W) y# O: B9 c7 H% VThisDrawing.SendCommand "-purge" & vbCr & "B" & vbCr & vbCr & "N" & vbCr# H7 Z2 X( {1 Y* W0 \7 F
筛选块代码+ b) q7 q& f- s* ^# H: u, f) _
for each blk1 in thisdrawing.blocks' n3 m- S! f8 `+ u, T( }, ^3 B* `
if bkl1.name="GB_A1" then2 r) Q# M  C+ U
……: J7 q1 F1 ~% Y6 @- k
end if9 B  ~+ Y  }( f/ |. R/ j% U/ |! q  s
4 [, J4 [) O; z9 [: m% F
发表于 2014-7-5 13:50:06 | 显示全部楼层 来自: 中国辽宁抚顺
为什么不用选择集?
  1.     Dim SS As AcadSelectionSet, FT(1) As Integer, FD(1) As Variant
    3 w( Q( m( X7 n2 [7 j: U
  2.     FT(0) = 0: FD(0) = "INSERT"
    * [0 Y2 c0 n$ ~3 n
  3.     FT(1) = 2: FD(1) = "块名称"
    , B! ]0 E9 i9 h' h* J9 Y, s, g
  4.     Set SS = ThisDrawing.SelectionSets.Add("SSS")" ~8 v  b; r' L$ A" c" W  ]9 d
  5.     SS.Select acSelectionSetAll, , , FT, FD
    - u6 Q) h0 {$ }* |
  6.     MsgBox "图形中包含有名为" & Chr(34) & "块名称" & Chr(34) & "的块参照" & SS.Count & "个", vbOKOnly* S9 l' j# G# u
  7.     SS.Delete
复制代码
 楼主| 发表于 2014-7-5 14:48:46 | 显示全部楼层 来自: 中国山东东营
本帖最后由 upc1999 于 2014-7-5 15:26 编辑
3 w. O% q0 K3 J6 ?, Z  Z2 z0 [) q& m* a7 g" ?+ q9 r3 J$ d( Z% E
版主厉害,代码测试成功。
+ E8 W& i2 m& O% [! m6 c再请教版主,块名称有十几种,开头都是GB,比如GBA1、GBA2、GBA3,图中可能有其中的一种或者多种,我要统计图里这样的块分别有多少个,只用选择集能实现吗?
发表于 2014-7-5 19:07:17 | 显示全部楼层 来自: 中国辽宁抚顺
upc1999 发表于 2014-7-5 14:48 static/image/common/back.gif5 S) Z$ v, t7 {; Y6 ?7 S
版主厉害,代码测试成功。
' z& j. A, d. F& L再请教版主,块名称有十几种,开头都是GB,比如GBA1、GBA2、GBA3,图中可能有其 ...
  1.     Dim SS As AcadSelectionSet, FT(5) As Integer, FD(5) As Variant+ A; i0 V1 q* W# n% T9 T5 W) R# p
  2.     FT(0) = 0: FD(0) = "INSERT"! l: v; K- `$ j, g+ H$ q
  3.     FT(1) = -4: FD(1) = "<or"% H3 B& `! z# y' i) `# C
  4.     FT(2) = 2: FD(2) = "块名称1"" x  b' @% B& B2 s$ E! R6 K: [* Y+ Z
  5.     FT(3) = 2: FD(3) = "块名称2"
    0 n2 Y  }( c7 z0 O8 p; V
  6.     FT(4) = 2: FD(4) = "块名称3"! p" u* m/ m, ], X- o6 A% E" B
  7.     FT(5) = -4: FD(5) = "or>"
    + y* v* d8 V# l
  8.     Set SS = ThisDrawing.SelectionSets.Add("SSS")7 j0 p* p1 |# q8 b
  9.     SS.Select acSelectionSetAll, , , FT, FD& j) ?; j1 h1 \
  10.     MsgBox "图形中包含有名为" & Chr(34) & "块名称1" & Chr(34) & "或" & Chr(34) & "块名称2" & Chr(34) & "或" & Chr(34) & "块名称3" & Chr(34) & "的块参照共" & SS.Count & "个", vbOKOnly: o$ w. \0 p6 [& O/ t
  11.     SS.Delete
    4 R6 A0 E* W" H* u; H
复制代码
 楼主| 发表于 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 )

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