QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
11天前
查看: 3552|回复: 7
收起左侧

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

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

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

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

x
本帖最后由 upc1999 于 2014-7-4 16:24 编辑 * a) T0 @1 n& g; d5 V/ p
: n: t1 h5 X" D* Y
我需要筛选特定的块名,比如图框A1,但是如果有插入过又删掉的块,还保留在块列表里,就需要判断这个块是不是在图形中使用。3 @/ a7 D  z& m
我搜索到的代码都是先历遍实体,再判断是否为块,效率太低,有没有办法先列举块名称,再判断是不是在图行中使用?; e6 V. E; L. Y/ |* o  \
; d# n+ O* x9 x. m& Z
Dim entry As AcadEntity, blk1 As AcadBlockReference0 n' h% g: a- h* x
    For Each entry In activeDoc.ModelSpace$ `% P* h  y/ b8 U; R
          If entry.ObjectName = "AcDbBlockReference" Then
+ k1 k8 J, f- b. J% S/ E          Set blk1 = entry
1 @& I  k8 O; v% Y          if blk1.name="块名称" then

' }. x& b" w6 s: x……
# ^; i2 j5 ~. J3 @* w' B0 I   next      
8 d7 Z! f0 P4 S" P3 b  ~: E$ |               
发表于 2014-7-4 22:10:02 | 显示全部楼层 来自: 中国台湾
未学VBA , 此是 Lisp 语句
' I" k& @+ t9 y3 o' |(ssget "X" '((0 . "INSERT") (2 . "A1")))
# ?$ C6 {5 n9 g5 U* O- I0 C3 L8 ~, E- K# d  `. T& @8 m
插入过又删掉的话 返回值为 nil
2 \) W  c! h6 M8 C
 楼主| 发表于 2014-7-5 09:42:44 | 显示全部楼层 来自: 中国山东东营
谢谢沙发,我用另一种方法解决了这个困扰我很久的问题,先清理块,这样块集合里就只有在图形里使用的块了,再筛选块名称。
! L4 t) c: ]) g; W9 V2 e6 {2 W4 Y清理块代码+ @5 e" _+ z7 l" v9 P% p
ThisDrawing.SendCommand "-purge" & vbCr & "B" & vbCr & vbCr & "N" & vbCr
' p# ?% G0 f* z  W! n. a+ _筛选块代码
' Y7 G. X2 [& G5 ^1 hfor each blk1 in thisdrawing.blocks; b& @  E7 m; ^9 g  U- V
if bkl1.name="GB_A1" then
% F0 V$ c( ~/ k% {……
+ h) |& _4 i9 ]  M  }' Nend if
1 E6 ]; k" o& B  g/ u, F  L: p7 M1 m* ~3 j4 `) Y9 b, \8 P* n/ Z0 U
发表于 2014-7-5 13:50:06 | 显示全部楼层 来自: 中国辽宁抚顺
为什么不用选择集?
  1.     Dim SS As AcadSelectionSet, FT(1) As Integer, FD(1) As Variant8 l7 i( s, i+ {1 p9 I
  2.     FT(0) = 0: FD(0) = "INSERT"2 Q/ z0 r" Z6 ?3 f) P5 w
  3.     FT(1) = 2: FD(1) = "块名称"
    4 c5 s6 M4 y0 Q0 {$ P/ {
  4.     Set SS = ThisDrawing.SelectionSets.Add("SSS")
    5 d% r- a5 Z7 W& l! G
  5.     SS.Select acSelectionSetAll, , , FT, FD
    / n& L( ]7 L# s& u
  6.     MsgBox "图形中包含有名为" & Chr(34) & "块名称" & Chr(34) & "的块参照" & SS.Count & "个", vbOKOnly
    ' g2 `: K% P. ~/ o; k/ r" ]! {
  7.     SS.Delete
复制代码
 楼主| 发表于 2014-7-5 14:48:46 | 显示全部楼层 来自: 中国山东东营
本帖最后由 upc1999 于 2014-7-5 15:26 编辑 & d7 F) C/ q9 P" G. t! Y' A- |8 o% n; R

$ j- K* A$ i1 W! j, D. ~3 I7 Z" V版主厉害,代码测试成功。3 e& Y( B# p: i
再请教版主,块名称有十几种,开头都是GB,比如GBA1、GBA2、GBA3,图中可能有其中的一种或者多种,我要统计图里这样的块分别有多少个,只用选择集能实现吗?
发表于 2014-7-5 19:07:17 | 显示全部楼层 来自: 中国辽宁抚顺
upc1999 发表于 2014-7-5 14:48 static/image/common/back.gif$ T! o! h3 u+ I: S  @% V
版主厉害,代码测试成功。
5 V9 _- w8 w' }2 K' Y再请教版主,块名称有十几种,开头都是GB,比如GBA1、GBA2、GBA3,图中可能有其 ...
  1.     Dim SS As AcadSelectionSet, FT(5) As Integer, FD(5) As Variant
    - F& ~! V( `' v: }: }
  2.     FT(0) = 0: FD(0) = "INSERT"
    4 W" X8 ?2 q  e+ L1 ^
  3.     FT(1) = -4: FD(1) = "<or"
    , B4 |+ t" e1 [2 F+ a  A
  4.     FT(2) = 2: FD(2) = "块名称1"3 k+ A. z) L) ]/ z: P/ {, z# J9 e
  5.     FT(3) = 2: FD(3) = "块名称2"
    6 s0 f3 g6 G+ u5 `/ H$ @, I4 I# H/ }
  6.     FT(4) = 2: FD(4) = "块名称3"5 N/ J6 Y# j0 b0 f, r3 V/ G
  7.     FT(5) = -4: FD(5) = "or>". m. U7 L; g( ~( @* Q  l0 {: g
  8.     Set SS = ThisDrawing.SelectionSets.Add("SSS")
    / P2 \- u. \! Y
  9.     SS.Select acSelectionSetAll, , , FT, FD# k/ }) X4 O% h5 C# T
  10.     MsgBox "图形中包含有名为" & Chr(34) & "块名称1" & Chr(34) & "或" & Chr(34) & "块名称2" & Chr(34) & "或" & Chr(34) & "块名称3" & Chr(34) & "的块参照共" & SS.Count & "个", vbOKOnly9 i- C2 x7 o7 o3 ?9 _* O7 Y
  11.     SS.Delete
    6 I* q9 o! Y8 U8 a6 O* C' ^8 \4 _
复制代码
 楼主| 发表于 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 )

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