QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
本帖最后由 upc1999 于 2014-7-4 16:24 编辑
$ g% Z; a3 i1 [. L: w4 j; _# h" r( r+ `; ~
我需要筛选特定的块名,比如图框A1,但是如果有插入过又删掉的块,还保留在块列表里,就需要判断这个块是不是在图形中使用。
6 m0 G3 a* f/ \* R" I我搜索到的代码都是先历遍实体,再判断是否为块,效率太低,有没有办法先列举块名称,再判断是不是在图行中使用?
- J; x7 C- Z) `* V8 z8 @8 J( E  `, d0 K' ~  a. V0 v/ D& d# }
Dim entry As AcadEntity, blk1 As AcadBlockReference
( M, y5 |6 F) o
    For Each entry In activeDoc.ModelSpace" h! T8 X7 z; B/ O1 D# a
          If entry.ObjectName = "AcDbBlockReference" Then
3 f/ o5 @3 ^7 T+ h# B# Z3 ]          Set blk1 = entry
9 t. i8 k8 H3 p& I3 Y          if blk1.name="块名称" then
) n- D/ Y% P+ c( t8 W, m, F" s
……
3 c0 y* ?( I' f   next      
' n6 o4 I7 w- W" Z! }4 ]* J3 n! J               
发表于 2014-7-4 22:10:02 | 显示全部楼层 来自: 中国台湾
未学VBA , 此是 Lisp 语句0 r0 C+ Q: ]% N3 ]* k7 ^5 n
(ssget "X" '((0 . "INSERT") (2 . "A1")))  L' r4 S" x" l8 V5 V  F

, G' r" t* D: H: @7 F3 `* u插入过又删掉的话 返回值为 nil
, N. [/ W/ G4 v$ _! e
 楼主| 发表于 2014-7-5 09:42:44 | 显示全部楼层 来自: 中国山东东营
谢谢沙发,我用另一种方法解决了这个困扰我很久的问题,先清理块,这样块集合里就只有在图形里使用的块了,再筛选块名称。
- Y% Y: K/ b! r清理块代码. C) j; J3 o( u5 K, S. Q
ThisDrawing.SendCommand "-purge" & vbCr & "B" & vbCr & vbCr & "N" & vbCr
, V3 q  F* v) O: ~筛选块代码* t" J1 }8 ^1 \: d5 h$ c3 k; T
for each blk1 in thisdrawing.blocks
7 M- U  s0 s. _4 e. y# S6 Vif bkl1.name="GB_A1" then
% Q3 S' ]5 i4 M9 f……; Z* [" z4 o" r
end if
8 Z/ r# ^1 L, d8 h5 Y
7 w6 g" g) ^* H' z! @, V+ y
发表于 2014-7-5 13:50:06 | 显示全部楼层 来自: 中国辽宁抚顺
为什么不用选择集?
  1.     Dim SS As AcadSelectionSet, FT(1) As Integer, FD(1) As Variant. \7 m3 }5 B' d8 w( p+ p
  2.     FT(0) = 0: FD(0) = "INSERT"
    : I. m9 e8 M) h& @+ k
  3.     FT(1) = 2: FD(1) = "块名称"! e1 `+ o( p5 N9 L2 ~0 c
  4.     Set SS = ThisDrawing.SelectionSets.Add("SSS")
    6 ^% W5 ^0 a  f& h! `; I5 V, Y
  5.     SS.Select acSelectionSetAll, , , FT, FD6 |6 @4 n8 Y; E6 n1 B" H
  6.     MsgBox "图形中包含有名为" & Chr(34) & "块名称" & Chr(34) & "的块参照" & SS.Count & "个", vbOKOnly5 P. R2 M! Y0 F7 t$ R( Y6 G
  7.     SS.Delete
复制代码
 楼主| 发表于 2014-7-5 14:48:46 | 显示全部楼层 来自: 中国山东东营
本帖最后由 upc1999 于 2014-7-5 15:26 编辑 3 ~4 o& I+ T6 ~) m4 ?. X: y, Q! {
% a1 h1 G9 D; g7 z0 D: C
版主厉害,代码测试成功。
& G4 d- \# T$ i再请教版主,块名称有十几种,开头都是GB,比如GBA1、GBA2、GBA3,图中可能有其中的一种或者多种,我要统计图里这样的块分别有多少个,只用选择集能实现吗?
发表于 2014-7-5 19:07:17 | 显示全部楼层 来自: 中国辽宁抚顺
upc1999 发表于 2014-7-5 14:48 static/image/common/back.gif% a/ ~6 H; X" }2 F( K: g; [
版主厉害,代码测试成功。
3 c) l; w! t* ~5 o' [( v, `再请教版主,块名称有十几种,开头都是GB,比如GBA1、GBA2、GBA3,图中可能有其 ...
  1.     Dim SS As AcadSelectionSet, FT(5) As Integer, FD(5) As Variant7 w. Q: y# j: W# b0 N; {2 t) v* e6 a
  2.     FT(0) = 0: FD(0) = "INSERT"
    : c2 _5 @  I' _( ^3 S% w, q% Q8 C
  3.     FT(1) = -4: FD(1) = "<or"
    1 o7 }- g$ y2 V
  4.     FT(2) = 2: FD(2) = "块名称1"4 I4 q( @4 @7 F5 ~3 l1 @* \
  5.     FT(3) = 2: FD(3) = "块名称2"
    $ M  [/ K/ e3 }2 u! Z2 Y" k1 R
  6.     FT(4) = 2: FD(4) = "块名称3", v4 n& ?7 N' Y8 w! V9 S& Y) Y5 \
  7.     FT(5) = -4: FD(5) = "or>"
    9 l. ?4 d. G+ z$ f
  8.     Set SS = ThisDrawing.SelectionSets.Add("SSS")2 }- _3 {* W3 x
  9.     SS.Select acSelectionSetAll, , , FT, FD. N9 M% J* c7 E# s8 |4 l% a$ G
  10.     MsgBox "图形中包含有名为" & Chr(34) & "块名称1" & Chr(34) & "或" & Chr(34) & "块名称2" & Chr(34) & "或" & Chr(34) & "块名称3" & Chr(34) & "的块参照共" & SS.Count & "个", vbOKOnly# H7 H4 S8 E* q4 x6 ]
  11.     SS.Delete0 T9 n$ Z. y8 M1 j2 d
复制代码
 楼主| 发表于 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 )

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