QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
goto3d 说: 版主微信号:caivin811031;还未入三维微信群的小伙伴,速度加
2022-07-04
全站
goto3d 说: 此次SW竞赛获奖名单公布如下,抱歉晚了,版主最近太忙:一等奖:塔山817;二等奖:a9041、飞鱼;三等奖:wx_dfA5IKla、xwj960414、bzlgl、hklecon;请以上各位和版主联系,领取奖金!!!
2022-03-11
查看: 2931|回复: 7
收起左侧

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

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

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

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

x
本帖最后由 upc1999 于 2014-7-4 16:24 编辑 : s, q' Y2 P. C8 Y; i- ^! e1 C: G
6 L5 @$ j* `: e- j0 L( i; y- ~  D
我需要筛选特定的块名,比如图框A1,但是如果有插入过又删掉的块,还保留在块列表里,就需要判断这个块是不是在图形中使用。
/ ]/ M! o' e2 l1 p- |# P我搜索到的代码都是先历遍实体,再判断是否为块,效率太低,有没有办法先列举块名称,再判断是不是在图行中使用?% @3 [) ]! x* I; H9 c

& B/ I/ E. t! Q1 K- |Dim entry As AcadEntity, blk1 As AcadBlockReference
" q. d' U' s* S- z% a
    For Each entry In activeDoc.ModelSpace6 j+ B$ _) C6 o3 a' C$ w
          If entry.ObjectName = "AcDbBlockReference" Then! o& F1 K: a2 a7 e9 u  f; y
          Set blk1 = entry" `0 @* m9 ^' i0 N$ ^0 q9 j
          if blk1.name="块名称" then
* p: j& U( n* K3 o1 P; b' K9 K
……( K$ E  k9 o- g/ i" {! Q" g
   next      
; `. M7 w3 a) X# E& k               
发表于 2014-7-4 22:10:02 | 显示全部楼层
未学VBA , 此是 Lisp 语句* C0 f4 y( j' L" e. N, K
(ssget "X" '((0 . "INSERT") (2 . "A1")))
$ ]( L$ J/ L5 ^; z9 r& k0 b7 V8 E. I' T2 j; E! K  ]
插入过又删掉的话 返回值为 nil5 c+ m. p3 S" i4 N% _0 y, X  I
 楼主| 发表于 2014-7-5 09:42:44 | 显示全部楼层
谢谢沙发,我用另一种方法解决了这个困扰我很久的问题,先清理块,这样块集合里就只有在图形里使用的块了,再筛选块名称。/ g* P! a" M1 R, ]
清理块代码' I0 @; B4 g$ q8 n2 j) B
ThisDrawing.SendCommand "-purge" & vbCr & "B" & vbCr & vbCr & "N" & vbCr& [4 s, l0 d% E6 O2 a/ g& y9 }" g
筛选块代码7 J* n& B* U; N1 Q* z2 e
for each blk1 in thisdrawing.blocks! x# a( ^# I" J6 ?8 K
if bkl1.name="GB_A1" then" J, s3 H* x7 A
……+ z: ?5 ^. ~* t2 s
end if
  \: c0 U, t' o# ~2 x- e
# l& J' e: l  ]
发表于 2014-7-5 13:50:06 | 显示全部楼层
为什么不用选择集?
  1.     Dim SS As AcadSelectionSet, FT(1) As Integer, FD(1) As Variant4 n0 O& t5 e7 K
  2.     FT(0) = 0: FD(0) = "INSERT"8 A  ?+ N9 U  z( ]$ T% e3 U* K
  3.     FT(1) = 2: FD(1) = "块名称"
    % M4 z* T, L1 k) V! p; W6 u
  4.     Set SS = ThisDrawing.SelectionSets.Add("SSS")) G1 h! m  ?1 t3 b" G1 c' b1 |8 ~6 h
  5.     SS.Select acSelectionSetAll, , , FT, FD  X- Y! Q+ K0 K
  6.     MsgBox "图形中包含有名为" & Chr(34) & "块名称" & Chr(34) & "的块参照" & SS.Count & "个", vbOKOnly
    & y  j. D$ |/ X( z# E
  7.     SS.Delete
复制代码
 楼主| 发表于 2014-7-5 14:48:46 | 显示全部楼层
本帖最后由 upc1999 于 2014-7-5 15:26 编辑 , }! A4 |/ E! L( E
" {, J" a. |: v- k& J$ I2 W
版主厉害,代码测试成功。8 i3 ]! g$ {$ r2 i
再请教版主,块名称有十几种,开头都是GB,比如GBA1、GBA2、GBA3,图中可能有其中的一种或者多种,我要统计图里这样的块分别有多少个,只用选择集能实现吗?
发表于 2014-7-5 19:07:17 | 显示全部楼层
upc1999 发表于 2014-7-5 14:48 static/image/common/back.gif; H* O  {- K+ F* h
版主厉害,代码测试成功。( z* D) i) a/ q; F- a( m
再请教版主,块名称有十几种,开头都是GB,比如GBA1、GBA2、GBA3,图中可能有其 ...
  1.     Dim SS As AcadSelectionSet, FT(5) As Integer, FD(5) As Variant+ `1 L+ @' t# a" d, D* b
  2.     FT(0) = 0: FD(0) = "INSERT", i" [1 U0 U& m
  3.     FT(1) = -4: FD(1) = "<or"9 |2 D/ e* x; |; F
  4.     FT(2) = 2: FD(2) = "块名称1"; @% {9 v0 w8 A: ]5 X1 x
  5.     FT(3) = 2: FD(3) = "块名称2"
    ' n, e3 D3 k6 U
  6.     FT(4) = 2: FD(4) = "块名称3"& c* A2 M) w2 Y8 z$ Y
  7.     FT(5) = -4: FD(5) = "or>". [2 K" X2 }  }6 q) a0 J
  8.     Set SS = ThisDrawing.SelectionSets.Add("SSS")
    , W, Y! x$ B. b; }) I) L+ f
  9.     SS.Select acSelectionSetAll, , , FT, FD# s$ _7 \" R7 g$ V( a7 t
  10.     MsgBox "图形中包含有名为" & Chr(34) & "块名称1" & Chr(34) & "或" & Chr(34) & "块名称2" & Chr(34) & "或" & Chr(34) & "块名称3" & Chr(34) & "的块参照共" & SS.Count & "个", vbOKOnly. ?" _% M7 Q1 u  U
  11.     SS.Delete+ [5 b- W# b* W" ^( F% y# ]  s
复制代码
 楼主| 发表于 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备13008828号-1 )

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