QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
请教各路高手,欲删除模型空间中所有的红色的直线用VBA该如何写?谢谢!
发表于 2010-4-1 13:10:20 | 显示全部楼层 来自: 中国北京
  1. + |% A, _; h- E* k
  2.     Dim E As AcadEntity
    , b+ U4 M- z2 k# M
  3.     For Each E In ThisDrawing.ModelSpace+ `4 z* n2 }/ _
  4.         If E.ObjectName = "AcDbLine" And (E.color = acRed Or E.color = acByLayer And ThisDrawing.Layers.Item(E.Layer).color = acRed) Then E.Delete$ ]0 G0 B! O' K, A
  5.     Next* o: F* Z' z) j
复制代码
 楼主| 发表于 2010-4-2 14:21:30 | 显示全部楼层 来自: 中国江苏南通
这个问题解决了,谢谢!
! K. z4 t1 y' i( A! a3 S$ v我初学autocad vba,有好多信息不知道在哪里找,比如line的objectname是“AcDbLine”! \0 a( H' i5 E* H" ?
请问这些属性该怎么找?谢谢!
; _) z& u% V  ]( |4 R, K) B) f顺便另一个问题,如果我要删除所有半径为10的圆弧该如何写呢?+ ?/ r% b+ I  ^! B; H: ]6 V
刚刚起步,问题比较傻瓜,还请不要见笑,谢谢啦!
发表于 2010-4-2 16:25:53 | 显示全部楼层 来自: 中国北京
本帖最后由 woaishuijia 于 2010-4-2 16:27 编辑
$ {9 i$ O% ?$ }" a* v6 ]2 Y0 R
: F0 x2 a8 d0 Y$ v/ T$ y2 Q! H' z利用"监视"查看现有图元的属性.
6 G1 V6 \6 j9 Q% ~) h; R& r8 S比如,在VBAIDE界面的代码窗口写一个空的过程

  1. : g* m" A+ s+ z# o& ?1 V: C1 B
  2. Sub A! Z+ W# N3 d& j8 d5 i

  3. 5 o% f3 t7 i5 ^) A3 H- C1 l
  4. End Sub4 M( o& }) I. f
复制代码
8 i! y2 ]) Q4 z, H
在监视窗口中添加监视"Thisdrawing",然后按F8逐步运行这个过程(也可以用设置断点的方法),可以在监视窗口中看到当前文档及其子对象的绝大部分属性值.
2 j3 E+ J1 \) w+ M/ m, @8 ^当然,这其中并不包括每个图元的ObjectName属性值,但我们可以用相似的办法得到.5 C+ \# v% Y2 y# w' Q1 E/ b
新建一个过程并在其中写入如下代码7 h9 L7 ?1 Z; a  ^& e/ z& D! Z) ?

  1. ; R/ u  [9 N7 F9 X
  2.     Dim L As AcadLine, P1(2) As Double, P2(2) As Double# ?& f) g& p3 y" G1 J. A
  3.     P2(0) = 107 b! @6 K$ ]1 j8 S' t3 ~
  4.     Set L = ThisDrawing.ModelSpace.AddLine(P1, P2)- N) [0 z$ U1 a8 e- L
复制代码
在监视窗口中添加监视"L.ObjectName".# z) T& V% O( t  ]
当运行完第三行后,监视窗口就会显示出这条直线的"ObjectName"属性值为"AcDbLine".
# h/ s( ~  a/ O" W( N  ]
$ H, ^/ }( }2 S3 W4 R( ?"删除所有半径为10的圆弧"可以这样写* {7 y1 h$ D4 x* N4 z9 B

  1. 2 H- ^7 F+ ], P6 J$ ?+ ~1 U; H
  2.     Dim E As AcadEntity# |7 {/ o! w( U$ Y- e: P
  3.     For Each E In ThisDrawing.ModelSpace
    ( t4 ~0 y" _2 j& U
  4.         If E.ObjectName = "AcDbArc" Then
    ( Q( t7 v# L5 u0 u. g& \
  5.             If E.Radius = 10 Then E.Delete. ~4 A- C0 b: s6 u" j4 @
  6.         End If
    / y2 `9 d6 ]2 E1 d+ L: H4 t
  7.     Next) E% @- e/ M, {' 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()
    / q9 ]1 t1 p# T+ x2 A7 }
  2.   (Vl-Load-Com)" w) |$ y7 h2 E; z6 @3 y8 I, _4 W
  3.   (SetQ EntPnt (EntSel "\n选择圆弧:")
    + v; P$ T6 Z1 B
  4.         Ent    (Car EntPnt)% D2 u5 h3 M" p) e9 h
  5.         Obj    (Vlax-EName->Vla-Object Ent)
    4 S4 I7 z1 f+ N. a8 H1 c- X! e: J
  6.         Txt    (Rtos(Vla-Get-ArcLength  Obj) 2 2)/ v6 u9 r$ h, {' O
  7.         Txt    (StrCat "\{\\Fgdt.shx|c0;^\}\\P" Txt)
    + \2 X- T% }0 m- m# ]' ]
  8.   )) Z1 ^  z" F$ p/ h
  9.   (Command "_DimAngular" EntPnt "M" Txt )
    - Q# l% H% ^) n/ F6 z1 P# V
  10. ); d+ y- p( z8 P: d1 P3 E5 Z1 d4 ?/ x5 W
复制代码
发表于 2010-5-10 14:47:24 | 显示全部楼层 来自: 中国天津
本帖最后由 woaishuijia 于 2010-5-10 14:52 编辑 9 p) X5 g! g1 P: l' A" B, q) Z

: Z, }. e  Q* `) `8 ~7# clearsee
  1. # [0 f- b5 q+ j$ N/ m* a
  2. Sub DimArcLen()
    9 D6 N  Z, i, ~2 R6 d* t
  3.     Dim Space As AcadBlock, Obj As AcadEntity, Point As Variant, DimObj As AcadDim3PointAngular
    4 {, R8 {- F# i( v7 I
  4.     On Error GoTo 10
    $ u* J: k) i$ x  ^( {, L0 d0 g
  5.     With ThisDrawing
    3 K4 x& w7 {/ [9 z) n  G1 D( d
  6.         If .ActiveSpace = acModelSpace Then# H0 t, u5 e  L( e6 m: u
  7.             Set Space = .ModelSpace
    / `1 i$ l, p" z( C5 p4 H. ~% Z
  8.         Else
    ( o; C: \, }+ W& g0 S$ B" J
  9.             Set Space = .PaperSpace
    % k* m6 H% O- E0 U
  10.         End If
    % n6 M: x% m3 ^$ w* n! O
  11.         .Utility.GetEntity Obj, Point, "选择圆弧:": x- ?3 l3 l% [( D/ f; o) }
  12.         If Obj.ObjectName = "AcDbArc" Then
    $ r2 h3 }3 j$ n9 O) y% n3 ?
  13.             Set DimObj = Space.AddDim3PointAngular(Obj.Center, Obj.StartPoint, Obj.EndPoint, .Utility.GetPoint(, "指定标注弧线位置:" ))
    * q* g* r5 C8 r  y! }( B  ^6 ~
  14.             DimObj.TextOverride = "{\Fgdt.shx|c0;^}\P" & Format(Obj.ArcLength, "0.##" )
    " P$ ]" y2 l  [+ l& G9 u! v
  15.         End If9 j! m; J# s  b' t
  16.     End With
    8 j* w2 n, |# Z& K$ {
  17. 10: End Sub; p" ^' ^7 S( c* _% E5 I
复制代码
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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