QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
本帖最后由 upc1999 于 2014-7-4 16:24 编辑 7 e5 Z  K% }/ j1 p  R5 l+ y- ]" _6 D

4 @& F) p9 Y% J' R. r. s5 C我需要筛选特定的块名,比如图框A1,但是如果有插入过又删掉的块,还保留在块列表里,就需要判断这个块是不是在图形中使用。$ v9 }* p- f9 p7 e8 W$ K
我搜索到的代码都是先历遍实体,再判断是否为块,效率太低,有没有办法先列举块名称,再判断是不是在图行中使用?
/ y( m$ R4 _5 T- r% H5 e7 P# H- ~  v  v# i6 k4 z- ~4 A6 v; H
Dim entry As AcadEntity, blk1 As AcadBlockReference
9 M' F- [3 l7 k, _. P7 @. U
    For Each entry In activeDoc.ModelSpace# l. G5 M" p% i0 X( ~6 f$ e8 I+ S
          If entry.ObjectName = "AcDbBlockReference" Then
+ K3 s, G" m5 y          Set blk1 = entry; h" i4 X% U' N9 M7 ?
          if blk1.name="块名称" then
" ~4 x3 {3 C9 X6 h
……- u3 R8 B2 Y  R4 Y1 \# Z! q0 Z$ U
   next       * w0 T- q8 v- ]% {8 Y
               
发表于 2014-7-4 22:10:02 | 显示全部楼层 来自: 中国台湾
未学VBA , 此是 Lisp 语句# x) o1 r4 F9 |9 R
(ssget "X" '((0 . "INSERT") (2 . "A1")))4 A2 \- q3 z* A  G' T+ }

- m  ~( H: D7 }$ U, e4 F! P插入过又删掉的话 返回值为 nil( V" J" }/ n4 K1 m( P! c6 J
 楼主| 发表于 2014-7-5 09:42:44 | 显示全部楼层 来自: 中国山东东营
谢谢沙发,我用另一种方法解决了这个困扰我很久的问题,先清理块,这样块集合里就只有在图形里使用的块了,再筛选块名称。: o2 {4 w. l- J7 R6 I* S
清理块代码
: T8 C8 [- b8 wThisDrawing.SendCommand "-purge" & vbCr & "B" & vbCr & vbCr & "N" & vbCr
5 J! j' S. t' P: E' i8 I筛选块代码: f7 k8 Q, _0 W/ ~" U
for each blk1 in thisdrawing.blocks* O! ]" R2 L1 T
if bkl1.name="GB_A1" then* G2 b' X5 q& C/ p
……
' z" ]4 C2 m" l2 ?end if
/ u+ E' t! {3 l# @; \5 E
3 `+ }& Q& P% ~( h: u* z
发表于 2014-7-5 13:50:06 | 显示全部楼层 来自: 中国辽宁抚顺
为什么不用选择集?
  1.     Dim SS As AcadSelectionSet, FT(1) As Integer, FD(1) As Variant: T9 G6 b( n* u( A
  2.     FT(0) = 0: FD(0) = "INSERT"
    & b- Z$ p1 y: R. e9 M5 h
  3.     FT(1) = 2: FD(1) = "块名称": \1 V% }$ Y; m; h. o1 {) l
  4.     Set SS = ThisDrawing.SelectionSets.Add("SSS"), }* B* N# o  C8 ~5 Q* V
  5.     SS.Select acSelectionSetAll, , , FT, FD: v5 N; H, }$ O- V* @
  6.     MsgBox "图形中包含有名为" & Chr(34) & "块名称" & Chr(34) & "的块参照" & SS.Count & "个", vbOKOnly/ f! [3 L) o8 G& \0 [0 m  g
  7.     SS.Delete
复制代码
 楼主| 发表于 2014-7-5 14:48:46 | 显示全部楼层 来自: 中国山东东营
本帖最后由 upc1999 于 2014-7-5 15:26 编辑 2 X6 T6 k) w: l: J' K4 N# T4 f6 O
3 u9 Z( A; v5 o7 j# G4 @
版主厉害,代码测试成功。
( [% {! O9 A" |  T# B再请教版主,块名称有十几种,开头都是GB,比如GBA1、GBA2、GBA3,图中可能有其中的一种或者多种,我要统计图里这样的块分别有多少个,只用选择集能实现吗?
发表于 2014-7-5 19:07:17 | 显示全部楼层 来自: 中国辽宁抚顺
upc1999 发表于 2014-7-5 14:48 static/image/common/back.gif3 Z; |. o9 V1 M7 K0 u
版主厉害,代码测试成功。5 ^3 ^, D8 ]; F7 v  s
再请教版主,块名称有十几种,开头都是GB,比如GBA1、GBA2、GBA3,图中可能有其 ...
  1.     Dim SS As AcadSelectionSet, FT(5) As Integer, FD(5) As Variant- z0 f2 Q1 u  Z* s2 }% e
  2.     FT(0) = 0: FD(0) = "INSERT"
    8 m% i1 n* M' h: J' S7 k
  3.     FT(1) = -4: FD(1) = "<or"
    . a2 g) {8 {+ D, j  m
  4.     FT(2) = 2: FD(2) = "块名称1"+ d6 h$ x' f, C/ J- U" B2 D" \* ]
  5.     FT(3) = 2: FD(3) = "块名称2"
    ! v4 }1 z1 o# H- r( A
  6.     FT(4) = 2: FD(4) = "块名称3"" |8 Q2 P8 d% ?1 _4 h7 @* A$ \. B
  7.     FT(5) = -4: FD(5) = "or>"
    3 r% t- m8 ^1 z3 |3 Q# ~  \
  8.     Set SS = ThisDrawing.SelectionSets.Add("SSS")7 n& S! X: \& u8 e2 |* }) S9 ~  M
  9.     SS.Select acSelectionSetAll, , , FT, FD
    : E2 Z8 I0 @' M2 l: \' w' V
  10.     MsgBox "图形中包含有名为" & Chr(34) & "块名称1" & Chr(34) & "或" & Chr(34) & "块名称2" & Chr(34) & "或" & Chr(34) & "块名称3" & Chr(34) & "的块参照共" & SS.Count & "个", vbOKOnly
    % o/ m2 P# S4 c  e9 ^
  11.     SS.Delete
    2 W' q; o/ c/ k) O# g- t1 ]
复制代码
 楼主| 发表于 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 )

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