QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
本帖最后由 upc1999 于 2014-7-4 16:24 编辑 , R2 V* J9 p8 P- L3 g' f" i! Q

7 c8 o, z( K2 g% {* Z我需要筛选特定的块名,比如图框A1,但是如果有插入过又删掉的块,还保留在块列表里,就需要判断这个块是不是在图形中使用。, p( t+ d: i: p
我搜索到的代码都是先历遍实体,再判断是否为块,效率太低,有没有办法先列举块名称,再判断是不是在图行中使用?" R1 \+ v# D* ~$ B1 e$ R/ w& X) f
8 D' y( l6 n7 r; A$ A: I; e
Dim entry As AcadEntity, blk1 As AcadBlockReference! L" ^6 Q/ h  e& i# h
    For Each entry In activeDoc.ModelSpace% I/ |1 c1 n8 N5 G* y* B
          If entry.ObjectName = "AcDbBlockReference" Then/ Z2 M; B& d# z1 Q; c
          Set blk1 = entry
; R- P9 i1 r; g2 i- K0 Q          if blk1.name="块名称" then
9 j1 ~3 t0 r4 W2 V+ r2 C7 e- C1 Y
……/ ^$ \4 {  s  K3 W: |3 R
   next       1 c3 f, a# I2 @/ d% S- y
               
发表于 2014-7-4 22:10:02 | 显示全部楼层 来自: 中国台湾
未学VBA , 此是 Lisp 语句* W( e1 h8 d* K9 s, r( E9 t
(ssget "X" '((0 . "INSERT") (2 . "A1")))
8 [7 d" Z# a& _6 T4 V% z: y( @$ S- h9 U
插入过又删掉的话 返回值为 nil/ T3 U; c. j5 J- W0 g
 楼主| 发表于 2014-7-5 09:42:44 | 显示全部楼层 来自: 中国山东东营
谢谢沙发,我用另一种方法解决了这个困扰我很久的问题,先清理块,这样块集合里就只有在图形里使用的块了,再筛选块名称。
* T4 i* q. v3 v1 q4 E清理块代码
+ P$ J7 Y5 A3 OThisDrawing.SendCommand "-purge" & vbCr & "B" & vbCr & vbCr & "N" & vbCr
; d! j2 r1 [8 a5 {. Y3 g: O. E' W' Z筛选块代码
5 n% @% K7 B* vfor each blk1 in thisdrawing.blocks
& W0 f9 q) v. x. j; O' t( r, Uif bkl1.name="GB_A1" then
1 K) a( A) B4 H……
9 |, F( e1 O$ w: Eend if
7 I, ]; U% o5 [' G: I
: v; F! \+ {7 @4 u( D* }
发表于 2014-7-5 13:50:06 | 显示全部楼层 来自: 中国辽宁抚顺
为什么不用选择集?
  1.     Dim SS As AcadSelectionSet, FT(1) As Integer, FD(1) As Variant
    8 I- E6 u# ~1 U3 q$ H1 i$ c
  2.     FT(0) = 0: FD(0) = "INSERT"
    0 ?8 b; E* y7 S, X' d
  3.     FT(1) = 2: FD(1) = "块名称"
    / A/ x# T& w5 Y$ L& B
  4.     Set SS = ThisDrawing.SelectionSets.Add("SSS"); H+ j/ S) Z4 F9 p& }: q
  5.     SS.Select acSelectionSetAll, , , FT, FD
    1 L: H  X5 y% {5 a
  6.     MsgBox "图形中包含有名为" & Chr(34) & "块名称" & Chr(34) & "的块参照" & SS.Count & "个", vbOKOnly2 {. }& u; p: G- l4 e
  7.     SS.Delete
复制代码
 楼主| 发表于 2014-7-5 14:48:46 | 显示全部楼层 来自: 中国山东东营
本帖最后由 upc1999 于 2014-7-5 15:26 编辑 6 Y, n4 f3 [, |7 T1 ^

9 l/ }! ^0 ?3 r4 O版主厉害,代码测试成功。) C1 M* Y7 A* ~  s# a
再请教版主,块名称有十几种,开头都是GB,比如GBA1、GBA2、GBA3,图中可能有其中的一种或者多种,我要统计图里这样的块分别有多少个,只用选择集能实现吗?
发表于 2014-7-5 19:07:17 | 显示全部楼层 来自: 中国辽宁抚顺
upc1999 发表于 2014-7-5 14:48 static/image/common/back.gif+ n  d! V1 S4 o. M# w4 {
版主厉害,代码测试成功。
# B' E$ e9 B6 Y* O* e! h; J9 G再请教版主,块名称有十几种,开头都是GB,比如GBA1、GBA2、GBA3,图中可能有其 ...
  1.     Dim SS As AcadSelectionSet, FT(5) As Integer, FD(5) As Variant
    * L7 Z7 l# F: Z1 C; }0 E9 {
  2.     FT(0) = 0: FD(0) = "INSERT"
    ' |4 _. W* Y# |: l7 M8 `; X
  3.     FT(1) = -4: FD(1) = "<or"
    5 t, S0 r- ?5 _4 L; j& k+ w/ b
  4.     FT(2) = 2: FD(2) = "块名称1": W; n" B$ h9 R! s) ]
  5.     FT(3) = 2: FD(3) = "块名称2"4 _" {. |6 h, B; z( C1 \3 P2 I
  6.     FT(4) = 2: FD(4) = "块名称3"+ V8 e9 Q$ N# C& _9 w: k
  7.     FT(5) = -4: FD(5) = "or>"! z4 A# [9 M4 m! }- F7 x* {* I
  8.     Set SS = ThisDrawing.SelectionSets.Add("SSS")/ t4 m& F6 F, y
  9.     SS.Select acSelectionSetAll, , , FT, FD  t7 b% f7 j( B  R
  10.     MsgBox "图形中包含有名为" & Chr(34) & "块名称1" & Chr(34) & "或" & Chr(34) & "块名称2" & Chr(34) & "或" & Chr(34) & "块名称3" & Chr(34) & "的块参照共" & SS.Count & "个", vbOKOnly% p" i6 J5 q; M
  11.     SS.Delete8 z  k: p) ~+ c9 T  w
复制代码
 楼主| 发表于 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 )

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