QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
请教各路高手,欲删除模型空间中所有的红色的直线用VBA该如何写?谢谢!
发表于 2010-4-1 13:10:20 | 显示全部楼层 来自: 中国北京
  1. . _4 \9 q5 M  t# h0 a
  2.     Dim E As AcadEntity  P8 G$ E* i; Q# q3 |
  3.     For Each E In ThisDrawing.ModelSpace! |' u2 a2 V' h
  4.         If E.ObjectName = "AcDbLine" And (E.color = acRed Or E.color = acByLayer And ThisDrawing.Layers.Item(E.Layer).color = acRed) Then E.Delete3 K7 }* d2 X% Y5 P
  5.     Next% n* t; |; [+ ]; _$ j
复制代码
 楼主| 发表于 2010-4-2 14:21:30 | 显示全部楼层 来自: 中国江苏南通
这个问题解决了,谢谢!
. X/ r% {  W" `# ?# B我初学autocad vba,有好多信息不知道在哪里找,比如line的objectname是“AcDbLine”5 p  e6 Z: x5 \& ?/ ^
请问这些属性该怎么找?谢谢!3 g' ~1 u9 x. V; q. B" d/ F
顺便另一个问题,如果我要删除所有半径为10的圆弧该如何写呢?
# |6 }" ^$ Z1 v/ l" F5 U1 w% r刚刚起步,问题比较傻瓜,还请不要见笑,谢谢啦!
发表于 2010-4-2 16:25:53 | 显示全部楼层 来自: 中国北京
本帖最后由 woaishuijia 于 2010-4-2 16:27 编辑
% ~1 j8 G: g2 x) ~9 P
: y& K( `9 X. h* ]6 |) o1 z3 E利用"监视"查看现有图元的属性.
, R9 G+ O8 y/ E7 R; \! D5 p9 \2 n4 H: W比如,在VBAIDE界面的代码窗口写一个空的过程
  1. # I1 j1 J0 k5 }$ m+ g
  2. Sub A
    # u0 d8 A, q# ~0 T' T

  3. 5 L8 C* a) y' @- M; X2 H+ G! c
  4. End Sub
    6 l7 k; @/ V/ x0 S' h
复制代码
3 d! `7 \  T8 R- U" r. {. I4 U& b% X2 i
在监视窗口中添加监视"Thisdrawing",然后按F8逐步运行这个过程(也可以用设置断点的方法),可以在监视窗口中看到当前文档及其子对象的绝大部分属性值.
. d. Y3 ~4 y& h$ p2 }2 H当然,这其中并不包括每个图元的ObjectName属性值,但我们可以用相似的办法得到.: u* ?& \: _- P! i) B
新建一个过程并在其中写入如下代码
8 Y9 a& Q* h* }9 e2 Y

  1. 5 F4 r0 m" v' |$ A; ?0 v2 A
  2.     Dim L As AcadLine, P1(2) As Double, P2(2) As Double
    / n. i  \3 Q9 S. ]! g
  3.     P2(0) = 100 ]& G$ s8 s! X; Q2 x; e- S& K
  4.     Set L = ThisDrawing.ModelSpace.AddLine(P1, P2)
    * C" H( C! Q% ?+ c& d
复制代码
在监视窗口中添加监视"L.ObjectName".5 z+ K7 d6 Z4 _, F7 }$ b1 ^0 e
当运行完第三行后,监视窗口就会显示出这条直线的"ObjectName"属性值为"AcDbLine".
8 D8 h# I) @7 p; H
+ |7 ~# r* {7 x' T$ B2 G5 P' I"删除所有半径为10的圆弧"可以这样写! Q. x3 R1 T0 a
  1. + J: o& a; u) [
  2.     Dim E As AcadEntity
    + s/ G# _$ C! i' R
  3.     For Each E In ThisDrawing.ModelSpace7 v: ~  S7 q$ p) `; M8 h) i0 _( r
  4.         If E.ObjectName = "AcDbArc" Then
    9 W: i/ K) X; e
  5.             If E.Radius = 10 Then E.Delete
    8 @9 ?0 u, K4 \% a  Z% k: ]
  6.         End If
    + y9 t  d' `" q4 e
  7.     Next
    " \" U$ q" v& I7 t4 G
复制代码
 楼主| 发表于 2010-4-3 11:46:41 | 显示全部楼层 来自: 中国江苏南通
多谢版主的解释,关于监视,我还要研究一下:试了一下,还没有摸着门道。有没有相关教程呢?或者烦劳版主录一段小小的操作视频,以帮助我们这些初学者入门,不知是否可以?非常感谢!!!
 楼主| 发表于 2010-4-6 10:00:53 | 显示全部楼层 来自: 中国江苏南通
自己摸到了,不烦劳版主了,谢谢!!!
发表于 2010-5-10 10:43:04 | 显示全部楼层 来自: 中国江苏无锡
版本就是热心哈..这样也顺便帮我看看..这段代码如何改写成VB/VBA代码,弧长标注..
  1. (Defun C:DimArcLen()/ K- o7 |; D  |# b0 {/ q
  2.   (Vl-Load-Com)1 c; P  e4 t) S& X* I
  3.   (SetQ EntPnt (EntSel "\n选择圆弧:")' ~* N% b; t- d" B2 W, ^3 J& W
  4.         Ent    (Car EntPnt)+ t+ K- ^+ {$ I  Z1 y: u
  5.         Obj    (Vlax-EName->Vla-Object Ent)  p4 K. |) \& H2 K) U$ j
  6.         Txt    (Rtos(Vla-Get-ArcLength  Obj) 2 2)
      v  |7 f. F/ {! R* x
  7.         Txt    (StrCat "\{\\Fgdt.shx|c0;^\}\\P" Txt)  }+ v. @6 _0 H4 x3 d& ]4 F7 S( J9 g, w
  8.   )
    . E, A* J% ~& Z$ H0 f, \0 s
  9.   (Command "_DimAngular" EntPnt "M" Txt )5 N, u( z) V+ V) ~
  10. )3 J# b/ m' T1 n( a; Y; J; X+ y4 g
复制代码
发表于 2010-5-10 14:47:24 | 显示全部楼层 来自: 中国天津
本帖最后由 woaishuijia 于 2010-5-10 14:52 编辑 + }7 P8 C2 ]9 w
' }6 s6 a) Y8 u7 E' t8 O+ L
7# clearsee
  1. ) Y! Y( e1 q% D+ s0 o: A# s% Z$ V
  2. Sub DimArcLen()
    , K# U* M- y0 n2 L3 D& i, A
  3.     Dim Space As AcadBlock, Obj As AcadEntity, Point As Variant, DimObj As AcadDim3PointAngular- N+ {- b' F1 a! G0 e
  4.     On Error GoTo 10
    . p" k# J& r1 n4 J+ ?$ m
  5.     With ThisDrawing
    0 \+ n- N- ^9 \2 D
  6.         If .ActiveSpace = acModelSpace Then
    0 S3 c. R+ K, A) y& R/ w8 N
  7.             Set Space = .ModelSpace
    3 t8 y8 {. u8 q* z( {0 R( X% K
  8.         Else
    0 s0 F- W3 E6 G# ]5 s
  9.             Set Space = .PaperSpace
    6 {! r/ X+ C# J, b' F8 W
  10.         End If
    + x# A! e& z) W+ K5 B/ q
  11.         .Utility.GetEntity Obj, Point, "选择圆弧:"  [5 F; E* q& F; |. }$ t" v. C$ d
  12.         If Obj.ObjectName = "AcDbArc" Then
    - |. y1 u6 w8 P: v8 ]
  13.             Set DimObj = Space.AddDim3PointAngular(Obj.Center, Obj.StartPoint, Obj.EndPoint, .Utility.GetPoint(, "指定标注弧线位置:" ))
    3 C- M5 R2 O6 F: _- f& H
  14.             DimObj.TextOverride = "{\Fgdt.shx|c0;^}\P" & Format(Obj.ArcLength, "0.##" )
    + ~+ U0 z7 u' g
  15.         End If& D; b' s7 V+ `2 \4 n: N
  16.     End With
    * |& S7 _2 F. @+ p1 f. c0 _
  17. 10: End Sub
    - A! A2 v  U* F1 X8 f3 u  @
复制代码
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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