QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
本帖最后由 upc1999 于 2014-7-4 16:24 编辑
0 k" A% U3 N# }/ O- l- C" d& h) R8 F
4 K. l& e2 e5 Y: o* F我需要筛选特定的块名,比如图框A1,但是如果有插入过又删掉的块,还保留在块列表里,就需要判断这个块是不是在图形中使用。+ H8 p5 f  b6 }3 e3 Q7 f8 N* K4 }
我搜索到的代码都是先历遍实体,再判断是否为块,效率太低,有没有办法先列举块名称,再判断是不是在图行中使用?
: H6 q4 a8 a5 q+ q( Z  e- w) E5 W5 b* x  j6 ]2 b
Dim entry As AcadEntity, blk1 As AcadBlockReference
" `& g2 u: A$ _% X" [0 N
    For Each entry In activeDoc.ModelSpace
# d- E, s) n  S6 {          If entry.ObjectName = "AcDbBlockReference" Then
8 a, M) I: s; `6 j+ }9 q$ s, D) X" R          Set blk1 = entry
: a9 j4 d) S, b' z/ p. a& ?          if blk1.name="块名称" then

7 K# i+ G; `$ w……
7 h( o" [1 K9 k  `   next      
! e! M# R3 q; _               
发表于 2014-7-4 22:10:02 | 显示全部楼层 来自: 中国台湾
未学VBA , 此是 Lisp 语句9 _* |  _) e- e, k
(ssget "X" '((0 . "INSERT") (2 . "A1")))
, f9 |2 v/ a( Y- M
/ ]" u- z7 ^6 C* ?插入过又删掉的话 返回值为 nil
0 q0 L; n4 r" k6 @; `. q+ N2 {
 楼主| 发表于 2014-7-5 09:42:44 | 显示全部楼层 来自: 中国山东东营
谢谢沙发,我用另一种方法解决了这个困扰我很久的问题,先清理块,这样块集合里就只有在图形里使用的块了,再筛选块名称。
" h/ u4 N7 J+ ?# |' D0 O清理块代码
7 N6 g, P+ |5 z* C! PThisDrawing.SendCommand "-purge" & vbCr & "B" & vbCr & vbCr & "N" & vbCr7 |5 ~) Y7 A( u- m( A
筛选块代码# l9 w  Z. q. g" ]
for each blk1 in thisdrawing.blocks7 }% h& U7 X) T
if bkl1.name="GB_A1" then
# @( }- d7 Z" L  J……
# Y( |! i, ^% O) b0 Q# K; tend if, p8 k. j1 h& N  E3 C

, w( c, R" h+ {
发表于 2014-7-5 13:50:06 | 显示全部楼层 来自: 中国辽宁抚顺
为什么不用选择集?
  1.     Dim SS As AcadSelectionSet, FT(1) As Integer, FD(1) As Variant$ S. [5 n/ W3 d1 t7 m
  2.     FT(0) = 0: FD(0) = "INSERT"6 C; t: `. h2 h! Q% ~6 K$ e
  3.     FT(1) = 2: FD(1) = "块名称"
    , E" a' B/ a' H$ o% x
  4.     Set SS = ThisDrawing.SelectionSets.Add("SSS")
    " w, b5 z- d4 R; l, i1 g9 b
  5.     SS.Select acSelectionSetAll, , , FT, FD" k8 ^. t3 H5 C
  6.     MsgBox "图形中包含有名为" & Chr(34) & "块名称" & Chr(34) & "的块参照" & SS.Count & "个", vbOKOnly
    - z9 Z# u: q0 A; L  X+ X& z- Q0 \
  7.     SS.Delete
复制代码
 楼主| 发表于 2014-7-5 14:48:46 | 显示全部楼层 来自: 中国山东东营
本帖最后由 upc1999 于 2014-7-5 15:26 编辑
6 L# D( N) i# P7 ]8 l8 K2 w' C, a9 ^, x, ^7 P: F
版主厉害,代码测试成功。1 |7 W) [! g2 B( r2 N
再请教版主,块名称有十几种,开头都是GB,比如GBA1、GBA2、GBA3,图中可能有其中的一种或者多种,我要统计图里这样的块分别有多少个,只用选择集能实现吗?
发表于 2014-7-5 19:07:17 | 显示全部楼层 来自: 中国辽宁抚顺
upc1999 发表于 2014-7-5 14:48 static/image/common/back.gif5 |$ O7 |  d9 K" j' ]# c
版主厉害,代码测试成功。! A. Y( v) ^! y" H5 V& v
再请教版主,块名称有十几种,开头都是GB,比如GBA1、GBA2、GBA3,图中可能有其 ...
  1.     Dim SS As AcadSelectionSet, FT(5) As Integer, FD(5) As Variant
    # m8 x' \' O. D( m& q! q3 w
  2.     FT(0) = 0: FD(0) = "INSERT"
    ) [; W+ _; \' J  d8 n0 Y/ ?4 c% [: ]
  3.     FT(1) = -4: FD(1) = "<or"
    , K' x$ n0 U% R$ Z, O  I& o- L
  4.     FT(2) = 2: FD(2) = "块名称1"
    9 e# f, ]; h2 j5 v2 H
  5.     FT(3) = 2: FD(3) = "块名称2"5 @' ^9 {  [$ }6 t
  6.     FT(4) = 2: FD(4) = "块名称3"  Z0 H0 F# o% p( m1 _+ w
  7.     FT(5) = -4: FD(5) = "or>"
    5 @; k9 E% M# x2 {
  8.     Set SS = ThisDrawing.SelectionSets.Add("SSS")+ N* k+ }. t; w; s4 f8 m
  9.     SS.Select acSelectionSetAll, , , FT, FD7 C# p, n$ z. B1 @3 n
  10.     MsgBox "图形中包含有名为" & Chr(34) & "块名称1" & Chr(34) & "或" & Chr(34) & "块名称2" & Chr(34) & "或" & Chr(34) & "块名称3" & Chr(34) & "的块参照共" & SS.Count & "个", vbOKOnly  v' M" d' P" V1 y) R, H. v
  11.     SS.Delete
    " ~8 G3 j! P$ c# X
复制代码
 楼主| 发表于 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 )

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