QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

[已解决] 欲删除模型空间中所有的红色的直线用VBA该如何写?

[复制链接]
发表于 2010-4-1 08:17:50 | 显示全部楼层 |阅读模式 来自: 中国江苏南通

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

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

x
请教各路高手,欲删除模型空间中所有的红色的直线用VBA该如何写?谢谢!
发表于 2010-4-1 13:10:20 | 显示全部楼层 来自: 中国北京

  1. / g. z! h: i8 y
  2.     Dim E As AcadEntity
    2 g  T4 R9 G. A' P# F
  3.     For Each E In ThisDrawing.ModelSpace
    ( ~5 c& @; R& B/ |6 m* H9 ~
  4.         If E.ObjectName = "AcDbLine" And (E.color = acRed Or E.color = acByLayer And ThisDrawing.Layers.Item(E.Layer).color = acRed) Then E.Delete
    3 N1 r# F% o0 V: h3 T
  5.     Next
    ) q7 u- S1 u# U- K: k
复制代码
 楼主| 发表于 2010-4-2 14:21:30 | 显示全部楼层 来自: 中国江苏南通
这个问题解决了,谢谢!" I0 e% I, ^6 d# S
我初学autocad vba,有好多信息不知道在哪里找,比如line的objectname是“AcDbLine”; H1 F" x( N3 M
请问这些属性该怎么找?谢谢!
# h" P  |; {6 [/ F9 W顺便另一个问题,如果我要删除所有半径为10的圆弧该如何写呢?
' x  \1 V" r* T# u7 A6 I! O4 a刚刚起步,问题比较傻瓜,还请不要见笑,谢谢啦!
发表于 2010-4-2 16:25:53 | 显示全部楼层 来自: 中国北京
本帖最后由 woaishuijia 于 2010-4-2 16:27 编辑 1 t: D1 Y; Y; Q! C* ]9 N* k
; k  F/ s/ F/ R! ]0 @* B
利用"监视"查看现有图元的属性.
; e+ m4 j* F0 a; ]4 P比如,在VBAIDE界面的代码窗口写一个空的过程
  1. : P1 ~/ _7 S0 A) C
  2. Sub A+ r: |- f# }1 D

  3. 8 |8 v+ |& ]! F9 V6 D  Y$ y
  4. End Sub
    7 z/ ^. R2 ]; v" O% B
复制代码
3 K# P# ^( E& Z
在监视窗口中添加监视"Thisdrawing",然后按F8逐步运行这个过程(也可以用设置断点的方法),可以在监视窗口中看到当前文档及其子对象的绝大部分属性值.9 A; H( `, w( [  N% _/ j
当然,这其中并不包括每个图元的ObjectName属性值,但我们可以用相似的办法得到.
! n* \2 b. g% A* X$ @; f' A2 L新建一个过程并在其中写入如下代码
% ]7 t" @: B* M% A5 {* T) U
  1. ! a3 @& L! z. E( f! Y" {3 W# {+ t/ U
  2.     Dim L As AcadLine, P1(2) As Double, P2(2) As Double
    & W7 ]# b3 L7 n' r6 s' t7 x
  3.     P2(0) = 10
    ) t& A- O( p/ s' J7 ^% `. V2 Q" R
  4.     Set L = ThisDrawing.ModelSpace.AddLine(P1, P2)
    6 ?% E6 Y; L1 Q, Y% d" n/ ?
复制代码
在监视窗口中添加监视"L.ObjectName".2 c; Q6 k' O2 s- q1 q4 \( L
当运行完第三行后,监视窗口就会显示出这条直线的"ObjectName"属性值为"AcDbLine".
5 l) G7 U6 Y8 V
! o4 s8 b" r( L: f"删除所有半径为10的圆弧"可以这样写
1 V4 n3 k4 j3 g0 l/ L
  1. 9 D( _8 H' Z$ O+ E
  2.     Dim E As AcadEntity. C- ~) u/ z# l2 s% h
  3.     For Each E In ThisDrawing.ModelSpace
    . g7 h' c0 ^& e0 f
  4.         If E.ObjectName = "AcDbArc" Then
    ' N8 r  }8 ^( v) R! \4 {, i
  5.             If E.Radius = 10 Then E.Delete
    , m4 L1 B: `1 f3 x
  6.         End If
    8 O" Q$ X( L2 s) w. _7 X
  7.     Next
    6 L- ?; S- y. w, [2 Y! ^
复制代码
 楼主| 发表于 2010-4-3 11:46:41 | 显示全部楼层 来自: 中国江苏南通
多谢版主的解释,关于监视,我还要研究一下:试了一下,还没有摸着门道。有没有相关教程呢?或者烦劳版主录一段小小的操作视频,以帮助我们这些初学者入门,不知是否可以?非常感谢!!!
 楼主| 发表于 2010-4-6 10:00:53 | 显示全部楼层 来自: 中国江苏南通
自己摸到了,不烦劳版主了,谢谢!!!
发表于 2010-5-10 10:43:04 | 显示全部楼层 来自: 中国江苏无锡
版本就是热心哈..这样也顺便帮我看看..这段代码如何改写成VB/VBA代码,弧长标注..
  1. (Defun C:DimArcLen()2 w& K( m  ]/ L+ S7 ^
  2.   (Vl-Load-Com)( w  h6 k$ ~+ t8 Q4 H( R7 Y" P
  3.   (SetQ EntPnt (EntSel "\n选择圆弧:")
    0 m) z( M7 j8 Y& H7 \# M5 V" M
  4.         Ent    (Car EntPnt)9 v/ v+ \8 z3 c  W7 L
  5.         Obj    (Vlax-EName->Vla-Object Ent)
    1 Q& Y7 ]0 v4 [% l! ~; W
  6.         Txt    (Rtos(Vla-Get-ArcLength  Obj) 2 2)' d$ E; [2 N# |7 d4 I* d
  7.         Txt    (StrCat "\{\\Fgdt.shx|c0;^\}\\P" Txt)& A7 {0 F" g9 H# B- R' R3 y
  8.   )( E( o( T! `# |3 D
  9.   (Command "_DimAngular" EntPnt "M" Txt )
    $ K4 u8 _0 c# D( J, R5 N
  10. )
    1 o# d" P* Q5 L( W# ?+ n2 {; g
复制代码
发表于 2010-5-10 14:47:24 | 显示全部楼层 来自: 中国天津
本帖最后由 woaishuijia 于 2010-5-10 14:52 编辑   U1 F+ o) {! [3 l

  w+ `0 R( Q8 O/ Y/ Q9 m7# clearsee
  1. 6 n. L* J) E/ a5 s
  2. Sub DimArcLen()! R. U7 N; C3 z4 P
  3.     Dim Space As AcadBlock, Obj As AcadEntity, Point As Variant, DimObj As AcadDim3PointAngular
    & D5 c( w! f: _5 P
  4.     On Error GoTo 10
    1 F" k" N' f0 L: e1 N! q
  5.     With ThisDrawing
    " v6 l# N. {% k2 |) _5 v
  6.         If .ActiveSpace = acModelSpace Then: z2 A4 K1 T2 R3 q2 _7 R% d2 ~
  7.             Set Space = .ModelSpace5 X5 S4 r) O& q. p9 w; s* \9 @5 N
  8.         Else
    + ?/ j6 b& A1 s
  9.             Set Space = .PaperSpace
    ( O" a2 p( Z# u
  10.         End If
    3 c( }  k+ X8 g, A' T# i3 |% g
  11.         .Utility.GetEntity Obj, Point, "选择圆弧:"
    5 J) d; L8 A1 k3 N: @
  12.         If Obj.ObjectName = "AcDbArc" Then  E" l2 e6 i3 \$ I$ y) o" J
  13.             Set DimObj = Space.AddDim3PointAngular(Obj.Center, Obj.StartPoint, Obj.EndPoint, .Utility.GetPoint(, "指定标注弧线位置:" ))
    $ i; c  _0 B/ V0 p( {. K
  14.             DimObj.TextOverride = "{\Fgdt.shx|c0;^}\P" & Format(Obj.ArcLength, "0.##" )# Z/ o! I9 e" f% z  B1 D
  15.         End If/ C, N# h3 K) _
  16.     End With! C3 s* u* f6 ~) e* b0 S
  17. 10: End Sub
    1 ?. D  X) A; |
复制代码
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


Licensed Copyright © 2016-2020 http://www.3dportal.cn/ All Rights Reserved 京 ICP备13008828号

小黑屋|手机版|Archiver|三维网 ( 京ICP备2023026364号-1 )

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