QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
9天前
查看: 2635|回复: 7
收起左侧

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

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

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

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

x
请教各路高手,欲删除模型空间中所有的红色的直线用VBA该如何写?谢谢!
发表于 2010-4-1 13:10:20 | 显示全部楼层 来自: 中国北京
  1. / W2 j& t7 P* R/ l! `) f6 m
  2.     Dim E As AcadEntity5 E2 ~" @/ t( h3 q
  3.     For Each E In ThisDrawing.ModelSpace
    2 U+ ]4 X- Y! X# j  R' e5 S7 F
  4.         If E.ObjectName = "AcDbLine" And (E.color = acRed Or E.color = acByLayer And ThisDrawing.Layers.Item(E.Layer).color = acRed) Then E.Delete) `! k  \4 D! Y7 s0 H) a
  5.     Next
    & w  h" ]( P) ?6 O; P6 a
复制代码
 楼主| 发表于 2010-4-2 14:21:30 | 显示全部楼层 来自: 中国江苏南通
这个问题解决了,谢谢!
, ]% T$ z) a$ u* i# p: K' b- G9 P我初学autocad vba,有好多信息不知道在哪里找,比如line的objectname是“AcDbLine”2 e# B3 A% m2 x) s) ?# j1 ]" C4 m! w
请问这些属性该怎么找?谢谢!
! p1 D# X6 \! l& g# y顺便另一个问题,如果我要删除所有半径为10的圆弧该如何写呢?- Z+ o8 f/ v4 h& l3 j
刚刚起步,问题比较傻瓜,还请不要见笑,谢谢啦!
发表于 2010-4-2 16:25:53 | 显示全部楼层 来自: 中国北京
本帖最后由 woaishuijia 于 2010-4-2 16:27 编辑
' V) b1 T: t! A, M; q: r. f9 i0 O/ k+ Y
利用"监视"查看现有图元的属性.: @0 C9 g3 ?& |, S# h) d* E+ I
比如,在VBAIDE界面的代码窗口写一个空的过程

  1. 5 [# l  N/ ?) F4 J- l+ K& Y& r! n4 C
  2. Sub A
    ( o/ H) d$ k: u, S9 ?/ a' r6 z; K

  3. 2 T8 W( |& j2 V5 a$ z3 j5 Y
  4. End Sub
    6 ?" ?: m% t1 u/ D; U& V9 z+ C0 k" [* N
复制代码

2 a9 _4 j. B9 l$ j) z在监视窗口中添加监视"Thisdrawing",然后按F8逐步运行这个过程(也可以用设置断点的方法),可以在监视窗口中看到当前文档及其子对象的绝大部分属性值.% v. d- \7 ?8 a8 q
当然,这其中并不包括每个图元的ObjectName属性值,但我们可以用相似的办法得到.1 ~0 K1 t% c' `% y* _8 H
新建一个过程并在其中写入如下代码
) |2 g/ z9 t7 b% p5 `1 @* g
  1. - f  A- v$ Z. }& d, v4 a
  2.     Dim L As AcadLine, P1(2) As Double, P2(2) As Double
    4 i6 W8 o6 A/ h) n8 G
  3.     P2(0) = 10( d( |6 a- [6 s  r. o8 N2 n( s
  4.     Set L = ThisDrawing.ModelSpace.AddLine(P1, P2)
    ) T1 a6 z1 }2 S# K/ l: f
复制代码
在监视窗口中添加监视"L.ObjectName".
  r' V5 o! W% B" j当运行完第三行后,监视窗口就会显示出这条直线的"ObjectName"属性值为"AcDbLine".
! l8 O2 N# [* L, o8 s# j3 j1 i" ~) I5 x) h$ H4 ]
"删除所有半径为10的圆弧"可以这样写
* j* O- E7 ]1 I1 B7 e
  1. * ^8 a& a1 M' z7 B8 x- s
  2.     Dim E As AcadEntity/ R/ y; L( b$ f$ R$ L0 Y
  3.     For Each E In ThisDrawing.ModelSpace
    3 P4 ?5 b8 D" d- K( A, v
  4.         If E.ObjectName = "AcDbArc" Then
    ) Y+ x- t$ S7 T$ V( M. q' j
  5.             If E.Radius = 10 Then E.Delete+ U+ r) e1 y( [# L3 S
  6.         End If, Y8 D# Z2 K- `
  7.     Next# w, L/ G3 b& d& m/ l6 }
复制代码
 楼主| 发表于 2010-4-3 11:46:41 | 显示全部楼层 来自: 中国江苏南通
多谢版主的解释,关于监视,我还要研究一下:试了一下,还没有摸着门道。有没有相关教程呢?或者烦劳版主录一段小小的操作视频,以帮助我们这些初学者入门,不知是否可以?非常感谢!!!
 楼主| 发表于 2010-4-6 10:00:53 | 显示全部楼层 来自: 中国江苏南通
自己摸到了,不烦劳版主了,谢谢!!!
发表于 2010-5-10 10:43:04 | 显示全部楼层 来自: 中国江苏无锡
版本就是热心哈..这样也顺便帮我看看..这段代码如何改写成VB/VBA代码,弧长标注..
  1. (Defun C:DimArcLen()
    ; |2 t- C- j/ B, p
  2.   (Vl-Load-Com)! Z2 O( U1 Z, o+ P" R
  3.   (SetQ EntPnt (EntSel "\n选择圆弧:")0 E9 r+ L( O2 s+ l8 v" m( t/ A
  4.         Ent    (Car EntPnt)
    1 ?: C5 D& N- [- T$ N
  5.         Obj    (Vlax-EName->Vla-Object Ent)6 C8 L2 Z, X/ T! O  ^/ \
  6.         Txt    (Rtos(Vla-Get-ArcLength  Obj) 2 2)0 L0 [  {. E/ G
  7.         Txt    (StrCat "\{\\Fgdt.shx|c0;^\}\\P" Txt)
    " b# D( R) ~1 R3 i2 w: o
  8.   )* h/ c' d5 v% q& o* @( t* A# T0 q. x: p
  9.   (Command "_DimAngular" EntPnt "M" Txt )
    2 F& S8 x4 q# \* C5 T% E& }) o: j
  10. )+ r3 g2 B4 h8 o: f
复制代码
发表于 2010-5-10 14:47:24 | 显示全部楼层 来自: 中国天津
本帖最后由 woaishuijia 于 2010-5-10 14:52 编辑
! g$ O8 r( \+ H0 ~! J: }; p; G1 A# o* p# T# B1 q9 W: N
7# clearsee

  1. ; R# Q4 t" w% [" O8 E2 G! @
  2. Sub DimArcLen()
    % K5 M/ A$ H- q, u0 s  J* G0 p8 ]
  3.     Dim Space As AcadBlock, Obj As AcadEntity, Point As Variant, DimObj As AcadDim3PointAngular
    " x$ D& j3 ?& S
  4.     On Error GoTo 10
    9 I1 O" {7 K8 |9 g
  5.     With ThisDrawing
    ' b$ w9 A3 X, g8 ^* ]
  6.         If .ActiveSpace = acModelSpace Then+ p8 _+ T* |% I  |0 z; \: B' p; X
  7.             Set Space = .ModelSpace) x$ k9 |2 j5 a8 z* s3 P
  8.         Else
    7 f+ ?3 p3 |" Y
  9.             Set Space = .PaperSpace% U7 {5 F0 H+ w  a
  10.         End If$ H2 s1 f( S& Z4 ?. Y- n: W
  11.         .Utility.GetEntity Obj, Point, "选择圆弧:"  F8 C+ e6 ^/ W4 ?& {
  12.         If Obj.ObjectName = "AcDbArc" Then: K; f! Z9 K6 n3 ^9 @
  13.             Set DimObj = Space.AddDim3PointAngular(Obj.Center, Obj.StartPoint, Obj.EndPoint, .Utility.GetPoint(, "指定标注弧线位置:" ))5 k4 E/ i# ]) U
  14.             DimObj.TextOverride = "{\Fgdt.shx|c0;^}\P" & Format(Obj.ArcLength, "0.##" )5 \! U- |1 |; X8 A
  15.         End If1 m6 h4 c7 Y8 D# l
  16.     End With7 ~$ I& O5 t1 `6 O0 N; h+ q
  17. 10: End Sub
      S7 v# q1 ^9 x5 Y' n' D! l
复制代码
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

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