QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
8天前
查看: 2673|回复: 7
收起左侧

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

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

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

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

x
请教各路高手,欲删除模型空间中所有的红色的直线用VBA该如何写?谢谢!
发表于 2010-4-1 13:10:20 | 显示全部楼层 来自: 中国北京
  1. 8 r% t8 f& _+ a: E9 r& D
  2.     Dim E As AcadEntity5 h3 a) s8 k  y
  3.     For Each E In ThisDrawing.ModelSpace5 c* E0 G7 g, {( m. G6 O
  4.         If E.ObjectName = "AcDbLine" And (E.color = acRed Or E.color = acByLayer And ThisDrawing.Layers.Item(E.Layer).color = acRed) Then E.Delete5 {6 [$ G# ~1 o
  5.     Next
    5 U( q7 N( `# [/ U
复制代码
 楼主| 发表于 2010-4-2 14:21:30 | 显示全部楼层 来自: 中国江苏南通
这个问题解决了,谢谢!
; m" |5 U0 M2 O( o) x9 J我初学autocad vba,有好多信息不知道在哪里找,比如line的objectname是“AcDbLine”, _- Y* I0 E3 ]% E6 t
请问这些属性该怎么找?谢谢!
* y1 c) |1 N8 y/ n9 [顺便另一个问题,如果我要删除所有半径为10的圆弧该如何写呢?
+ k7 h2 p2 s. _/ @刚刚起步,问题比较傻瓜,还请不要见笑,谢谢啦!
发表于 2010-4-2 16:25:53 | 显示全部楼层 来自: 中国北京
本帖最后由 woaishuijia 于 2010-4-2 16:27 编辑 . {& U1 {: T5 N7 R( I: J9 c$ s6 h

' u# B/ m* R0 a利用"监视"查看现有图元的属性.0 T/ z3 J" T: T, {; i* v
比如,在VBAIDE界面的代码窗口写一个空的过程

  1. & m- S8 ?- c- q
  2. Sub A
    $ k5 |+ @! y' k. p6 r5 V

  3. ! \+ f* I$ |& M  y3 Y
  4. End Sub
      x; h% R8 C* ^; F: T8 Y5 @
复制代码
# p- f  D& C8 e+ i
在监视窗口中添加监视"Thisdrawing",然后按F8逐步运行这个过程(也可以用设置断点的方法),可以在监视窗口中看到当前文档及其子对象的绝大部分属性值.
% P4 _1 S( i$ C/ q7 @当然,这其中并不包括每个图元的ObjectName属性值,但我们可以用相似的办法得到.$ l9 f) l+ h( @! U$ D( G% d
新建一个过程并在其中写入如下代码
1 e" c' |9 ]( w7 l( ]* t, `
  1. 9 C/ r  f. z7 _$ b! X
  2.     Dim L As AcadLine, P1(2) As Double, P2(2) As Double
      ]# H6 O- c5 o# A4 `  K3 @3 c
  3.     P2(0) = 10/ k' ]; O' q, Z5 R$ W& ?
  4.     Set L = ThisDrawing.ModelSpace.AddLine(P1, P2)
    , m) U" F5 i7 w4 \  h3 ?7 Y  {
复制代码
在监视窗口中添加监视"L.ObjectName".' f! t. C! S6 Z# N! F
当运行完第三行后,监视窗口就会显示出这条直线的"ObjectName"属性值为"AcDbLine".
1 }: ?- |2 P) w! _; o, I( Z
2 g6 M1 ^5 o4 _' v/ i& F/ t) v"删除所有半径为10的圆弧"可以这样写; a$ _6 G3 t+ p2 Y# W+ U9 }" n4 _+ O) v) z

  1. ' x, Z/ w( @. B+ o
  2.     Dim E As AcadEntity
    & e4 w7 @) E9 T& C: b$ ]
  3.     For Each E In ThisDrawing.ModelSpace
    ) _0 n8 q4 U( E/ F! ~& N$ Z
  4.         If E.ObjectName = "AcDbArc" Then6 A# s; D% a: c$ c
  5.             If E.Radius = 10 Then E.Delete# w6 R6 p5 {* l% ~0 p" U) a
  6.         End If# ?8 @6 m/ v# x4 \
  7.     Next5 O; J# G6 ]1 ]- v, t
复制代码
 楼主| 发表于 2010-4-3 11:46:41 | 显示全部楼层 来自: 中国江苏南通
多谢版主的解释,关于监视,我还要研究一下:试了一下,还没有摸着门道。有没有相关教程呢?或者烦劳版主录一段小小的操作视频,以帮助我们这些初学者入门,不知是否可以?非常感谢!!!
 楼主| 发表于 2010-4-6 10:00:53 | 显示全部楼层 来自: 中国江苏南通
自己摸到了,不烦劳版主了,谢谢!!!
发表于 2010-5-10 10:43:04 | 显示全部楼层 来自: 中国江苏无锡
版本就是热心哈..这样也顺便帮我看看..这段代码如何改写成VB/VBA代码,弧长标注..
  1. (Defun C:DimArcLen()
    7 p& [0 B  w1 t7 d6 e
  2.   (Vl-Load-Com)
    ) S, Z3 y5 ?( C7 [. K1 c
  3.   (SetQ EntPnt (EntSel "\n选择圆弧:")
    " s/ I& s! A3 }, o; w8 @
  4.         Ent    (Car EntPnt)
    % p5 C$ {& j, E3 N2 K5 F' }
  5.         Obj    (Vlax-EName->Vla-Object Ent)
    ! M# H: u) I8 s8 V; [/ s& K
  6.         Txt    (Rtos(Vla-Get-ArcLength  Obj) 2 2). L# W$ @, H1 s5 D
  7.         Txt    (StrCat "\{\\Fgdt.shx|c0;^\}\\P" Txt)
    2 q6 G3 G( }" G) r& p+ x( Q7 F
  8.   )
    % f, O" ^/ u" j, U  {
  9.   (Command "_DimAngular" EntPnt "M" Txt )5 O/ \$ r  r  c/ C6 f
  10. )8 F) R/ B1 L0 }1 Q0 B9 ]& c
复制代码
发表于 2010-5-10 14:47:24 | 显示全部楼层 来自: 中国天津
本帖最后由 woaishuijia 于 2010-5-10 14:52 编辑 , \# c1 Y  _- u$ S. s
# V7 p2 ]& N: L% y* [
7# clearsee

  1. 6 d  C! p! q# x( P
  2. Sub DimArcLen()$ R. I" Z+ Q2 b' ]  A
  3.     Dim Space As AcadBlock, Obj As AcadEntity, Point As Variant, DimObj As AcadDim3PointAngular
    - Y1 s! {9 u1 g) g2 n
  4.     On Error GoTo 10$ P, k+ f- i' S, `" I
  5.     With ThisDrawing
    0 G+ C& Y* V$ u. s+ j# [9 E* E8 B
  6.         If .ActiveSpace = acModelSpace Then/ Q& y8 v# ?0 d1 A
  7.             Set Space = .ModelSpace
    & l! r# ~) y1 X3 P" X7 g7 ?" }
  8.         Else- Z, ^7 |* X& p' X* J
  9.             Set Space = .PaperSpace
    / ~& C9 A% X8 H5 M, U' B
  10.         End If2 S: q2 B4 l2 m7 `3 ?5 {
  11.         .Utility.GetEntity Obj, Point, "选择圆弧:"
    * d) H, i( P) V! j2 o9 L
  12.         If Obj.ObjectName = "AcDbArc" Then' _/ ?8 ~6 g) B: j! I. a) l2 x
  13.             Set DimObj = Space.AddDim3PointAngular(Obj.Center, Obj.StartPoint, Obj.EndPoint, .Utility.GetPoint(, "指定标注弧线位置:" ))
    % P) J" y; q( }) E
  14.             DimObj.TextOverride = "{\Fgdt.shx|c0;^}\P" & Format(Obj.ArcLength, "0.##" )7 U- Q! u, R! K! E
  15.         End If/ Y, e5 o2 N, J7 z
  16.     End With
    $ {8 Q$ o9 Z: r4 x5 w+ Z
  17. 10: End Sub6 f! f4 f& ~6 s; \
复制代码
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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