QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
本帖最后由 upc1999 于 2014-7-4 16:24 编辑
$ w' N- r& t' O" j) R# J# r, ^
9 i/ @3 h" W! A4 W- R, P我需要筛选特定的块名,比如图框A1,但是如果有插入过又删掉的块,还保留在块列表里,就需要判断这个块是不是在图形中使用。
% u* X" ]0 k0 ]9 c) x" s, s: I我搜索到的代码都是先历遍实体,再判断是否为块,效率太低,有没有办法先列举块名称,再判断是不是在图行中使用?, T) }7 f: g) J7 |/ N

( z  T1 t' [8 d" P: H6 M, aDim entry As AcadEntity, blk1 As AcadBlockReference% V+ b. s3 Y% C4 [/ _. r, @
    For Each entry In activeDoc.ModelSpace
3 E! I! V* a; e- C; ?2 w# O8 U1 V          If entry.ObjectName = "AcDbBlockReference" Then
# W) H$ @8 ?- j$ @          Set blk1 = entry( T7 k/ c/ m; w' |. K
          if blk1.name="块名称" then

, s% D9 y5 Z, h* k……$ o0 ]( S; F5 F
   next       / d, _- W" x7 _2 P2 N  E6 l
               
发表于 2014-7-4 22:10:02 | 显示全部楼层 来自: 中国台湾
未学VBA , 此是 Lisp 语句3 A0 N- Y! F$ K  E
(ssget "X" '((0 . "INSERT") (2 . "A1")))- G: I& W3 Y2 z  C1 N

: D5 N7 I" \4 s2 e7 ^2 T) H6 a插入过又删掉的话 返回值为 nil* ~7 Y) R% X5 R- ^
 楼主| 发表于 2014-7-5 09:42:44 | 显示全部楼层 来自: 中国山东东营
谢谢沙发,我用另一种方法解决了这个困扰我很久的问题,先清理块,这样块集合里就只有在图形里使用的块了,再筛选块名称。, D) O* X  C' Q6 g# x/ ]( }6 {( z
清理块代码; j  ~7 n+ D8 N$ o% a- w9 h
ThisDrawing.SendCommand "-purge" & vbCr & "B" & vbCr & vbCr & "N" & vbCr
, c3 {( B- N' Z; T! Q筛选块代码5 ?/ h# o: }2 J1 z
for each blk1 in thisdrawing.blocks
* M  ~) V+ o( J, e( A* K3 Sif bkl1.name="GB_A1" then* t& o9 ]0 N  ^# Q$ F, }$ e
……
2 _4 y2 e2 e) J$ }% N8 Rend if0 M; M) @, Y% G

% \: Y$ h' `  [" D  P$ n
发表于 2014-7-5 13:50:06 | 显示全部楼层 来自: 中国辽宁抚顺
为什么不用选择集?
  1.     Dim SS As AcadSelectionSet, FT(1) As Integer, FD(1) As Variant& L7 ], Y2 O+ j1 J, k  I1 u5 h
  2.     FT(0) = 0: FD(0) = "INSERT"
    ; b3 z* F3 K6 m% F, _
  3.     FT(1) = 2: FD(1) = "块名称"
    ! f- r; f8 e9 ^3 F& a
  4.     Set SS = ThisDrawing.SelectionSets.Add("SSS"); B, S8 j, T; ?9 s5 w
  5.     SS.Select acSelectionSetAll, , , FT, FD
    3 R9 r% X3 y9 J8 \& ?; @0 \# e
  6.     MsgBox "图形中包含有名为" & Chr(34) & "块名称" & Chr(34) & "的块参照" & SS.Count & "个", vbOKOnly1 M6 N( o3 P7 [  b0 F
  7.     SS.Delete
复制代码
 楼主| 发表于 2014-7-5 14:48:46 | 显示全部楼层 来自: 中国山东东营
本帖最后由 upc1999 于 2014-7-5 15:26 编辑
7 T  ?6 D- S7 o+ v2 O' A9 e1 Z( r  _' F; z% O- C
版主厉害,代码测试成功。
6 S* o& y: ]. j) V! }1 }+ n再请教版主,块名称有十几种,开头都是GB,比如GBA1、GBA2、GBA3,图中可能有其中的一种或者多种,我要统计图里这样的块分别有多少个,只用选择集能实现吗?
发表于 2014-7-5 19:07:17 | 显示全部楼层 来自: 中国辽宁抚顺
upc1999 发表于 2014-7-5 14:48 static/image/common/back.gif; X9 _! N- h9 f, k6 @  F! R5 r1 n
版主厉害,代码测试成功。0 G$ e' N! r( L/ o6 C$ Q- I% f
再请教版主,块名称有十几种,开头都是GB,比如GBA1、GBA2、GBA3,图中可能有其 ...
  1.     Dim SS As AcadSelectionSet, FT(5) As Integer, FD(5) As Variant
    5 d: z" h7 x! N6 w! J
  2.     FT(0) = 0: FD(0) = "INSERT"
    - S* b* f: |9 i( K
  3.     FT(1) = -4: FD(1) = "<or"
    5 I( `/ z0 E* O. O. `9 _7 Z
  4.     FT(2) = 2: FD(2) = "块名称1"% ?1 _2 E& M" g% Q8 Z5 o
  5.     FT(3) = 2: FD(3) = "块名称2"
    0 I3 N! P- D& {5 K
  6.     FT(4) = 2: FD(4) = "块名称3"
    3 U8 l$ F; |: R
  7.     FT(5) = -4: FD(5) = "or>"
    * u& m4 Y% `; E3 B& O8 g1 a
  8.     Set SS = ThisDrawing.SelectionSets.Add("SSS")& ~/ k9 r- D0 L# I
  9.     SS.Select acSelectionSetAll, , , FT, FD
    , C6 x: M9 d1 O# i( N7 A
  10.     MsgBox "图形中包含有名为" & Chr(34) & "块名称1" & Chr(34) & "或" & Chr(34) & "块名称2" & Chr(34) & "或" & Chr(34) & "块名称3" & Chr(34) & "的块参照共" & SS.Count & "个", vbOKOnly
    $ M8 Q8 {$ B4 ~( \- |
  11.     SS.Delete' L9 f  _0 y% m, H
复制代码
 楼主| 发表于 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 )

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