QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

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

  1. + W) ?" k5 ^, L' g
  2.     Dim E As AcadEntity2 Y5 x0 a, u: b8 u, j4 w9 }
  3.     For Each E In ThisDrawing.ModelSpace
    5 q2 _) q+ A8 j  U
  4.         If E.ObjectName = "AcDbLine" And (E.color = acRed Or E.color = acByLayer And ThisDrawing.Layers.Item(E.Layer).color = acRed) Then E.Delete" J$ j2 a4 c2 L
  5.     Next5 a4 Y- E6 @; a: d
复制代码
 楼主| 发表于 2010-4-2 14:21:30 | 显示全部楼层 来自: 中国江苏南通
这个问题解决了,谢谢!* A  T  H! H* j
我初学autocad vba,有好多信息不知道在哪里找,比如line的objectname是“AcDbLine”+ P- s- W% P. |# j/ H
请问这些属性该怎么找?谢谢!
# t4 }- I8 C' `0 G. h$ B8 }顺便另一个问题,如果我要删除所有半径为10的圆弧该如何写呢?
' q$ r, O+ q* Y( e% W& i( z刚刚起步,问题比较傻瓜,还请不要见笑,谢谢啦!
发表于 2010-4-2 16:25:53 | 显示全部楼层 来自: 中国北京
本帖最后由 woaishuijia 于 2010-4-2 16:27 编辑
5 ~+ ?( b9 ^# C4 G( \& G2 G7 V9 e6 R) O
( b6 _' ~; S. S# @% B2 k) G利用"监视"查看现有图元的属性.
6 x; y0 b& P" r; }9 e/ v! S; k# K- R比如,在VBAIDE界面的代码窗口写一个空的过程
  1. 4 X& L$ u6 |6 N8 J, \3 Z0 f
  2. Sub A
    ( N8 l3 }/ h0 o

  3. ( G. z3 e, T: L8 q2 s5 g) r
  4. End Sub* V! _% [: o  ]5 e
复制代码

$ X% U0 B# \' n$ H* h  P" g在监视窗口中添加监视"Thisdrawing",然后按F8逐步运行这个过程(也可以用设置断点的方法),可以在监视窗口中看到当前文档及其子对象的绝大部分属性值.
2 y* k9 O; O6 |% A% U6 P当然,这其中并不包括每个图元的ObjectName属性值,但我们可以用相似的办法得到." u' e5 a" t& M# p$ z
新建一个过程并在其中写入如下代码8 d, w7 f* f% i; L- V

  1. ! Q" J7 J1 E7 w7 w" H$ U, _
  2.     Dim L As AcadLine, P1(2) As Double, P2(2) As Double
    0 N+ j2 z, ?3 ~0 g! e2 w! o( }
  3.     P2(0) = 10
    $ g; }  r: }( |" f+ u; W8 c! e) r
  4.     Set L = ThisDrawing.ModelSpace.AddLine(P1, P2)& e4 T6 g  K7 _, {3 }. T. ^- h( ^
复制代码
在监视窗口中添加监视"L.ObjectName".
1 V5 @0 L; f7 `- B当运行完第三行后,监视窗口就会显示出这条直线的"ObjectName"属性值为"AcDbLine".
- _/ ~5 t5 k& H2 U8 G% \  o1 M0 w, E0 N8 b/ f6 R* q
"删除所有半径为10的圆弧"可以这样写
' r4 w8 O) t: V  t9 J) D: T. L

  1. 1 @2 j( \! `: S/ [# X
  2.     Dim E As AcadEntity
    6 U. T0 s7 f5 r
  3.     For Each E In ThisDrawing.ModelSpace  k6 I+ f7 k( b5 Z, n
  4.         If E.ObjectName = "AcDbArc" Then
    1 r, ^$ K% R( T
  5.             If E.Radius = 10 Then E.Delete
    5 z9 [  r2 q1 F& k/ R+ Z, w
  6.         End If6 r* h8 n- V$ K* j
  7.     Next
    . R% J7 [2 h# g) J+ M
复制代码
 楼主| 发表于 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 n6 o& A; }1 Z# I
  2.   (Vl-Load-Com)& A6 p5 a  x7 N( S2 W/ U. z3 C& J
  3.   (SetQ EntPnt (EntSel "\n选择圆弧:")
    8 c) B# l0 n) w
  4.         Ent    (Car EntPnt)0 ^. `+ z) o+ T- l# C0 w3 d
  5.         Obj    (Vlax-EName->Vla-Object Ent); ~1 t1 X% |9 t/ ~" n9 c9 a% X
  6.         Txt    (Rtos(Vla-Get-ArcLength  Obj) 2 2)6 O# D. r6 z3 J" ~, G6 {
  7.         Txt    (StrCat "\{\\Fgdt.shx|c0;^\}\\P" Txt)/ C) N" x3 Q+ x3 {6 f! g
  8.   ): M4 l5 W, W& `3 W0 _
  9.   (Command "_DimAngular" EntPnt "M" Txt )
    . R4 Q, q4 O' i2 r4 ]6 F
  10. )3 ~+ ^( E# `) W% Q# P8 @
复制代码
发表于 2010-5-10 14:47:24 | 显示全部楼层 来自: 中国天津
本帖最后由 woaishuijia 于 2010-5-10 14:52 编辑 1 L- l. y$ W7 b. @4 J' Y7 `  m% _" [
/ Z0 V* D  }7 u3 P% D1 O* U
7# clearsee

  1. % v. k8 X% M$ v8 P* S. q) F; ?* f
  2. Sub DimArcLen()
    6 @; H2 l. _* M% e; ^
  3.     Dim Space As AcadBlock, Obj As AcadEntity, Point As Variant, DimObj As AcadDim3PointAngular( t6 P& j2 D0 [: G  j+ p- V" C2 k
  4.     On Error GoTo 103 f& d. Y0 i+ p! P8 X2 E
  5.     With ThisDrawing  N" E4 p+ ^& D& X
  6.         If .ActiveSpace = acModelSpace Then
    , P, Y2 r% B+ p& Q: i) W
  7.             Set Space = .ModelSpace
    " Z8 u' t* z8 J1 ~7 b
  8.         Else
    5 l: I2 a- y& r
  9.             Set Space = .PaperSpace( V: `0 ?; w( g; c. J" {
  10.         End If
    - K# }( c' {& G1 l& P# K, e' |+ b
  11.         .Utility.GetEntity Obj, Point, "选择圆弧:"
    3 Q' H: a0 M1 N* E4 X+ V% h: b
  12.         If Obj.ObjectName = "AcDbArc" Then
    % v+ o- ?0 j- Q' r  {9 L/ |
  13.             Set DimObj = Space.AddDim3PointAngular(Obj.Center, Obj.StartPoint, Obj.EndPoint, .Utility.GetPoint(, "指定标注弧线位置:" ))
    ( ^$ r& |/ n% b1 T7 g7 g
  14.             DimObj.TextOverride = "{\Fgdt.shx|c0;^}\P" & Format(Obj.ArcLength, "0.##" )
    * T, [) C  u# ^. X9 o% s
  15.         End If  s6 v5 ]4 r3 G3 J3 r2 c' O$ B- m& y
  16.     End With
    6 n. ~" o  a, B( X$ [
  17. 10: End Sub
    ) }2 u) X8 P  U% h: g& e
复制代码
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

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