QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

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

  1. * Q. X1 S* x9 ^( P, B
  2.     Dim E As AcadEntity! X1 h# S0 m+ m
  3.     For Each E In ThisDrawing.ModelSpace
    6 w$ L  U4 a! J( p+ w( g! z
  4.         If E.ObjectName = "AcDbLine" And (E.color = acRed Or E.color = acByLayer And ThisDrawing.Layers.Item(E.Layer).color = acRed) Then E.Delete3 T6 u2 [/ j, _4 @+ `: U
  5.     Next0 u' ^9 z4 u1 u$ k, K) C/ \
复制代码
 楼主| 发表于 2010-4-2 14:21:30 | 显示全部楼层 来自: 中国江苏南通
这个问题解决了,谢谢!
0 a. U- a, g7 F我初学autocad vba,有好多信息不知道在哪里找,比如line的objectname是“AcDbLine”
) V5 i- Q7 L# |+ ]请问这些属性该怎么找?谢谢!2 K$ d% N0 c* h0 `5 G) C
顺便另一个问题,如果我要删除所有半径为10的圆弧该如何写呢?
7 A; M& x% |' X$ u+ C刚刚起步,问题比较傻瓜,还请不要见笑,谢谢啦!
发表于 2010-4-2 16:25:53 | 显示全部楼层 来自: 中国北京
本帖最后由 woaishuijia 于 2010-4-2 16:27 编辑   R; ?" o# i# v5 E
) p6 ~6 ?. a: z! w
利用"监视"查看现有图元的属性.
" w- {' s; ]$ E比如,在VBAIDE界面的代码窗口写一个空的过程
  1. ) W, r# f" ~8 T* A% P
  2. Sub A
    ( ~* C8 a1 z  _1 x. M, ^3 L# Z3 a9 ^

  3. 5 t7 L+ L& e& _+ `* s
  4. End Sub# Y- |: L& A/ L; H) N% @) K% z
复制代码
0 l2 g5 D2 e& q' c4 ]7 _+ P
在监视窗口中添加监视"Thisdrawing",然后按F8逐步运行这个过程(也可以用设置断点的方法),可以在监视窗口中看到当前文档及其子对象的绝大部分属性值.
5 w+ w. {0 q6 t/ X当然,这其中并不包括每个图元的ObjectName属性值,但我们可以用相似的办法得到.9 x9 {% S; l9 P9 M/ Z
新建一个过程并在其中写入如下代码
1 J; T7 |* b$ i% t: D; I

  1. & s" O: Z: R, G: |; A* L5 P) ]+ C2 `
  2.     Dim L As AcadLine, P1(2) As Double, P2(2) As Double
    8 ?: ~) f7 W& a' O- Y
  3.     P2(0) = 10
    3 S: ]0 [* o9 x& O9 [. j5 I) t
  4.     Set L = ThisDrawing.ModelSpace.AddLine(P1, P2)
    , Y' I- |0 M4 y* G' Y- A
复制代码
在监视窗口中添加监视"L.ObjectName".; b  ]  R% m9 z- k' M0 c. L2 v
当运行完第三行后,监视窗口就会显示出这条直线的"ObjectName"属性值为"AcDbLine".' ^1 g' U6 O+ i5 f* C

# l, _- v! Q- y"删除所有半径为10的圆弧"可以这样写
4 P# |: Q' o( c5 X) F8 l

  1. 0 f6 p0 O4 g; l% O+ A; S
  2.     Dim E As AcadEntity
    5 b! {- P0 e6 C; ~( F; Q8 i
  3.     For Each E In ThisDrawing.ModelSpace* L/ A% y- u: r  X7 K& v" O
  4.         If E.ObjectName = "AcDbArc" Then3 T, Y4 a; ^$ x! `8 S- B
  5.             If E.Radius = 10 Then E.Delete8 R/ ~2 \. K$ Q! C4 `! ^) C/ h! M, G
  6.         End If
    9 k( l1 P% s5 C
  7.     Next( g' a/ D% `0 [% A4 F$ q/ S
复制代码
 楼主| 发表于 2010-4-3 11:46:41 | 显示全部楼层 来自: 中国江苏南通
多谢版主的解释,关于监视,我还要研究一下:试了一下,还没有摸着门道。有没有相关教程呢?或者烦劳版主录一段小小的操作视频,以帮助我们这些初学者入门,不知是否可以?非常感谢!!!
 楼主| 发表于 2010-4-6 10:00:53 | 显示全部楼层 来自: 中国江苏南通
自己摸到了,不烦劳版主了,谢谢!!!
发表于 2010-5-10 10:43:04 | 显示全部楼层 来自: 中国江苏无锡
版本就是热心哈..这样也顺便帮我看看..这段代码如何改写成VB/VBA代码,弧长标注..
  1. (Defun C:DimArcLen()3 n8 ^* J% v: \+ I1 d3 D
  2.   (Vl-Load-Com)
    5 b- q- c9 N5 @5 `0 m5 x
  3.   (SetQ EntPnt (EntSel "\n选择圆弧:")
    ( ~/ u9 o& {7 C
  4.         Ent    (Car EntPnt)
    - X/ }# Y4 j& {9 R& n9 n
  5.         Obj    (Vlax-EName->Vla-Object Ent): G, _3 g7 _" I! V# |' x2 s- A
  6.         Txt    (Rtos(Vla-Get-ArcLength  Obj) 2 2)
    & s# v3 O" h- P
  7.         Txt    (StrCat "\{\\Fgdt.shx|c0;^\}\\P" Txt)& I6 N( T3 |* }0 p! i0 O, L& P
  8.   )
    * M0 z& o6 {* j8 V- b
  9.   (Command "_DimAngular" EntPnt "M" Txt ); u8 X! z& D4 f5 W% f* A
  10. )
    5 L/ e- `( }3 j& v5 X
复制代码
发表于 2010-5-10 14:47:24 | 显示全部楼层 来自: 中国天津
本帖最后由 woaishuijia 于 2010-5-10 14:52 编辑 0 s* P: B# C& D! @. a

- [$ w) v' a& H7# clearsee
  1. 5 Q+ p/ F- h5 T
  2. Sub DimArcLen()
    # s! F- E4 H, c) B4 A
  3.     Dim Space As AcadBlock, Obj As AcadEntity, Point As Variant, DimObj As AcadDim3PointAngular
    ' [& ~- x( ~/ |$ P/ I
  4.     On Error GoTo 10) X! C2 e( r! r" b, K- E6 m) e
  5.     With ThisDrawing
    - N  s8 r: @& q& e. p: M) P$ F/ o" ~
  6.         If .ActiveSpace = acModelSpace Then
    9 [: t0 G7 }( y+ B+ u  ?
  7.             Set Space = .ModelSpace
    . @- ]4 X% ~7 l  M
  8.         Else
    6 I: c/ N/ p! Y7 m- y5 R6 H
  9.             Set Space = .PaperSpace$ w2 m2 U" y; V9 l4 y' y! B! N5 }: R
  10.         End If& n$ C7 ?4 o- @; v' v
  11.         .Utility.GetEntity Obj, Point, "选择圆弧:"+ b6 `: X. @5 X, v" R- S; l6 g
  12.         If Obj.ObjectName = "AcDbArc" Then) D; C* [8 Y2 X9 k* \3 g- A1 J
  13.             Set DimObj = Space.AddDim3PointAngular(Obj.Center, Obj.StartPoint, Obj.EndPoint, .Utility.GetPoint(, "指定标注弧线位置:" ))' U! d+ ]7 V$ |. ~! l
  14.             DimObj.TextOverride = "{\Fgdt.shx|c0;^}\P" & Format(Obj.ArcLength, "0.##" )
    3 L0 f, e& K% [( l% W
  15.         End If
    2 ]5 ]8 O8 }+ Z
  16.     End With
    ' P: g6 f3 R) u
  17. 10: End Sub
    ( Y. [9 m6 Z# ?9 P, D- X
复制代码
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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