QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
10天前
查看: 2637|回复: 7
收起左侧

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

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

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

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

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

  1. 0 F' q2 D; z, s& F! l3 r
  2.     Dim E As AcadEntity2 I& C  g+ d5 U* u
  3.     For Each E In ThisDrawing.ModelSpace
      d2 f6 Y1 p! c; o( s. ~8 d/ O  Q
  4.         If E.ObjectName = "AcDbLine" And (E.color = acRed Or E.color = acByLayer And ThisDrawing.Layers.Item(E.Layer).color = acRed) Then E.Delete8 _7 ?. v& x: N7 h
  5.     Next/ s1 O, |. u9 X5 [2 S1 i
复制代码
 楼主| 发表于 2010-4-2 14:21:30 | 显示全部楼层 来自: 中国江苏南通
这个问题解决了,谢谢!: }0 T% q" a7 Y" W# c! N1 S# \& g* t. l
我初学autocad vba,有好多信息不知道在哪里找,比如line的objectname是“AcDbLine”9 f: X; r3 M( Q, f* K9 m
请问这些属性该怎么找?谢谢!+ s2 A+ n2 l8 o- w
顺便另一个问题,如果我要删除所有半径为10的圆弧该如何写呢?
( v; a& E" P( k: I3 \' W( O刚刚起步,问题比较傻瓜,还请不要见笑,谢谢啦!
发表于 2010-4-2 16:25:53 | 显示全部楼层 来自: 中国北京
本帖最后由 woaishuijia 于 2010-4-2 16:27 编辑
; `  X& o' \  t  Z8 ^( Y- ~
1 F  [% {- l6 k+ P  W8 _, R利用"监视"查看现有图元的属性.
, S/ S$ Z9 O7 F" l! ]5 o& H, y比如,在VBAIDE界面的代码窗口写一个空的过程

  1. + a0 [4 A# E" Q8 s' U" o
  2. Sub A
    , \3 N# J4 G6 Q8 p8 o: |) n3 Z
  3. " n( y6 l6 a, K" k9 j0 [( U0 S3 _
  4. End Sub
    ! P2 P/ A: Y$ F& T) P  f! g7 x0 n
复制代码

; s& R5 B+ x4 W6 m4 a4 ]在监视窗口中添加监视"Thisdrawing",然后按F8逐步运行这个过程(也可以用设置断点的方法),可以在监视窗口中看到当前文档及其子对象的绝大部分属性值.$ f' n1 Z: D& c+ K- E1 T" ^
当然,这其中并不包括每个图元的ObjectName属性值,但我们可以用相似的办法得到.
6 n% g& n1 f9 t1 y( z3 F' _- m) \新建一个过程并在其中写入如下代码( e; u. o0 D5 Z4 _
  1. ! \4 m/ ?. H) _
  2.     Dim L As AcadLine, P1(2) As Double, P2(2) As Double
    ! V' Q+ Z# |# m5 J6 j$ Q5 W
  3.     P2(0) = 10' p3 b2 G2 `; H& i& ^* n: v$ o1 B
  4.     Set L = ThisDrawing.ModelSpace.AddLine(P1, P2)" G/ ~# ]0 _9 q2 }
复制代码
在监视窗口中添加监视"L.ObjectName".
  D; m8 M, L& O: f9 c当运行完第三行后,监视窗口就会显示出这条直线的"ObjectName"属性值为"AcDbLine".
, f/ M6 n$ Q0 m0 V
- @+ V9 @/ r! e2 Q"删除所有半径为10的圆弧"可以这样写
9 h2 h& T6 I! d) V! ^" L
  1. 1 M/ g0 Y5 |* x  w6 I
  2.     Dim E As AcadEntity% g: t- v) l! U  I' J( q; }" Z& Q
  3.     For Each E In ThisDrawing.ModelSpace
    1 {+ O8 J/ h" H, h
  4.         If E.ObjectName = "AcDbArc" Then/ o. {3 y$ y% c
  5.             If E.Radius = 10 Then E.Delete' f2 B: s, u) p9 ]1 m0 B) `
  6.         End If2 h+ }6 L  g' }) g' }$ y. Z8 z
  7.     Next8 H2 e, k& `7 c: l; g( q
复制代码
 楼主| 发表于 2010-4-3 11:46:41 | 显示全部楼层 来自: 中国江苏南通
多谢版主的解释,关于监视,我还要研究一下:试了一下,还没有摸着门道。有没有相关教程呢?或者烦劳版主录一段小小的操作视频,以帮助我们这些初学者入门,不知是否可以?非常感谢!!!
 楼主| 发表于 2010-4-6 10:00:53 | 显示全部楼层 来自: 中国江苏南通
自己摸到了,不烦劳版主了,谢谢!!!
发表于 2010-5-10 10:43:04 | 显示全部楼层 来自: 中国江苏无锡
版本就是热心哈..这样也顺便帮我看看..这段代码如何改写成VB/VBA代码,弧长标注..
  1. (Defun C:DimArcLen()8 t0 ?+ }, D4 w
  2.   (Vl-Load-Com)8 w- L/ ?% A* K0 x5 b5 m( t/ g
  3.   (SetQ EntPnt (EntSel "\n选择圆弧:")
    . h5 m( a6 ]# v' h& e, O
  4.         Ent    (Car EntPnt)& T. ]) J& v! J# [: F
  5.         Obj    (Vlax-EName->Vla-Object Ent)2 G6 D) W; p/ r" U4 |8 y8 G, O
  6.         Txt    (Rtos(Vla-Get-ArcLength  Obj) 2 2)
    4 i! \2 E( E5 \! p8 C
  7.         Txt    (StrCat "\{\\Fgdt.shx|c0;^\}\\P" Txt)
    2 w% w) J3 N, E* m
  8.   )
    ) t; h- V. i8 u" z
  9.   (Command "_DimAngular" EntPnt "M" Txt )( f/ {9 X& S% X
  10. )! D% t9 c+ \5 [7 B2 y4 T7 X, R
复制代码
发表于 2010-5-10 14:47:24 | 显示全部楼层 来自: 中国天津
本帖最后由 woaishuijia 于 2010-5-10 14:52 编辑 ; T5 _4 z2 ?1 I% u' V) \

! N5 Z2 a; w6 N3 N3 {7# clearsee
  1. + J# }8 T3 E4 \+ J/ |& y0 M
  2. Sub DimArcLen()/ q. i) ]% u2 S& }% d4 H  P+ [+ z: P
  3.     Dim Space As AcadBlock, Obj As AcadEntity, Point As Variant, DimObj As AcadDim3PointAngular' Z5 A3 g7 `8 y
  4.     On Error GoTo 10
    $ N" n/ `( _( H: F- ~# G  O
  5.     With ThisDrawing
    , X2 e3 S; a& g- e! h; J5 j1 t
  6.         If .ActiveSpace = acModelSpace Then
    : O/ a- z2 H/ k3 F
  7.             Set Space = .ModelSpace
    $ m- X. u- }/ g5 R
  8.         Else2 B) c1 k3 M  P8 v' x$ i1 Y
  9.             Set Space = .PaperSpace! _2 T1 `9 m7 X+ _1 R/ M
  10.         End If  ]7 y" A5 |/ c4 n0 {9 ]
  11.         .Utility.GetEntity Obj, Point, "选择圆弧:". B% R3 N8 |% ~/ {4 I9 h! }/ B
  12.         If Obj.ObjectName = "AcDbArc" Then* w: G; Z. f! ~1 A, q8 H
  13.             Set DimObj = Space.AddDim3PointAngular(Obj.Center, Obj.StartPoint, Obj.EndPoint, .Utility.GetPoint(, "指定标注弧线位置:" )). z9 i. t' q7 E6 {1 c# J
  14.             DimObj.TextOverride = "{\Fgdt.shx|c0;^}\P" & Format(Obj.ArcLength, "0.##" )
    4 h" ]' ^2 j& I' u1 x: w6 e# i
  15.         End If+ I% q, ~7 m" X. {$ C
  16.     End With" ]$ Y( F) Q/ C0 J, G6 c* u. o4 _
  17. 10: End Sub, b$ T( G  |4 O7 z
复制代码
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

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