QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

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

  1. 2 b* V% C# g2 d
  2.     Dim E As AcadEntity
    ' K" M# j- q# |" p: W6 C' Y, q
  3.     For Each E In ThisDrawing.ModelSpace
    ) Z& j5 w( r* N3 H& c
  4.         If E.ObjectName = "AcDbLine" And (E.color = acRed Or E.color = acByLayer And ThisDrawing.Layers.Item(E.Layer).color = acRed) Then E.Delete
    7 ~$ P8 C: r, M' Q( s
  5.     Next
    . _' B$ K' ~. |! R, b3 T
复制代码
 楼主| 发表于 2010-4-2 14:21:30 | 显示全部楼层 来自: 中国江苏南通
这个问题解决了,谢谢!
- F' w! ?" k" J8 K' F' u我初学autocad vba,有好多信息不知道在哪里找,比如line的objectname是“AcDbLine”+ g5 t5 C( s% t5 k, h- ]4 z% T3 @! T
请问这些属性该怎么找?谢谢!0 s! P$ }- I4 b
顺便另一个问题,如果我要删除所有半径为10的圆弧该如何写呢?6 P. D% i: X8 Z8 a
刚刚起步,问题比较傻瓜,还请不要见笑,谢谢啦!
发表于 2010-4-2 16:25:53 | 显示全部楼层 来自: 中国北京
本帖最后由 woaishuijia 于 2010-4-2 16:27 编辑
( E- T, X+ S+ F# g5 P- D3 [! x7 M/ T" [2 h# |  G
利用"监视"查看现有图元的属性.
5 k1 F# c) u) J* p) v) @比如,在VBAIDE界面的代码窗口写一个空的过程

  1. 3 J- q+ f9 Z4 F/ [
  2. Sub A+ I% X9 M% o3 W: Z0 ?* n
  3. ' s- n" G5 q+ b; E1 U1 S9 D
  4. End Sub
    / j: k) Q- |: b8 r& T+ F% ?
复制代码
1 n; x# u% l6 N/ g
在监视窗口中添加监视"Thisdrawing",然后按F8逐步运行这个过程(也可以用设置断点的方法),可以在监视窗口中看到当前文档及其子对象的绝大部分属性值.( d# ^! Q$ H/ ]7 Z/ {: Z  _
当然,这其中并不包括每个图元的ObjectName属性值,但我们可以用相似的办法得到.
$ m6 s1 E+ v  f1 K9 Y1 K" Q  p新建一个过程并在其中写入如下代码4 n2 l  B: X  ^% [% C

  1. 7 W  z: J5 S& z) ^
  2.     Dim L As AcadLine, P1(2) As Double, P2(2) As Double, q4 v( E3 [5 Q: X+ J4 Z
  3.     P2(0) = 10
    , [- X; }% x$ F& `. f7 n$ a
  4.     Set L = ThisDrawing.ModelSpace.AddLine(P1, P2)
    0 J$ v3 F6 c" u2 c* G0 ]
复制代码
在监视窗口中添加监视"L.ObjectName".
4 _% ^# l* v! E* p' E/ h+ ~当运行完第三行后,监视窗口就会显示出这条直线的"ObjectName"属性值为"AcDbLine".
# ~, `2 w2 J1 h9 z9 d2 w: D
, X; b+ {5 `; h0 @% f"删除所有半径为10的圆弧"可以这样写) c; F  C3 U0 F' O2 N$ {! y" B
  1. 2 ~2 r9 [& x) a+ z
  2.     Dim E As AcadEntity
    3 \: m/ q1 a2 e$ M
  3.     For Each E In ThisDrawing.ModelSpace
    * [$ S: D- e% W
  4.         If E.ObjectName = "AcDbArc" Then
    & y" U1 X- z' X% g: ]* L
  5.             If E.Radius = 10 Then E.Delete! Y# p6 ~6 M5 ]2 ~
  6.         End If
    2 Z1 y) ?7 D% K& J# {1 I% P
  7.     Next- A& f3 l2 ~7 }' i: E; @
复制代码
 楼主| 发表于 2010-4-3 11:46:41 | 显示全部楼层 来自: 中国江苏南通
多谢版主的解释,关于监视,我还要研究一下:试了一下,还没有摸着门道。有没有相关教程呢?或者烦劳版主录一段小小的操作视频,以帮助我们这些初学者入门,不知是否可以?非常感谢!!!
 楼主| 发表于 2010-4-6 10:00:53 | 显示全部楼层 来自: 中国江苏南通
自己摸到了,不烦劳版主了,谢谢!!!
发表于 2010-5-10 10:43:04 | 显示全部楼层 来自: 中国江苏无锡
版本就是热心哈..这样也顺便帮我看看..这段代码如何改写成VB/VBA代码,弧长标注..
  1. (Defun C:DimArcLen()# n: F& [* L7 H$ [
  2.   (Vl-Load-Com)% l4 L# _2 Z  I: ~5 i- C
  3.   (SetQ EntPnt (EntSel "\n选择圆弧:")
    9 d- C8 w* D; ?
  4.         Ent    (Car EntPnt). W6 C# s. |) f
  5.         Obj    (Vlax-EName->Vla-Object Ent)4 b+ g2 u- Y% S& T" r6 }* E8 a
  6.         Txt    (Rtos(Vla-Get-ArcLength  Obj) 2 2)
    , c2 U3 o$ z! q, t! {: p, {) o
  7.         Txt    (StrCat "\{\\Fgdt.shx|c0;^\}\\P" Txt)3 r& Y% q6 n( O: V1 ?: {, N. C
  8.   )
    , ?" a9 J& k1 O! n$ X6 N
  9.   (Command "_DimAngular" EntPnt "M" Txt )
    8 {3 L6 d0 \; t* O- F5 r
  10. ): J4 i' `  u3 Q/ O
复制代码
发表于 2010-5-10 14:47:24 | 显示全部楼层 来自: 中国天津
本帖最后由 woaishuijia 于 2010-5-10 14:52 编辑 0 m4 U" j  N: g0 b! |& b
; g) P* X" z# [: |
7# clearsee
  1. / ~. o9 [; W1 u8 ~
  2. Sub DimArcLen()! `6 J9 b' j5 E& C7 {' K! y' k
  3.     Dim Space As AcadBlock, Obj As AcadEntity, Point As Variant, DimObj As AcadDim3PointAngular' U. r5 I$ Z" S4 q. W, N' D, B& I
  4.     On Error GoTo 10
    % Y  `0 X+ j( e) |
  5.     With ThisDrawing& m! f9 V% ]( Q) D* g( P6 e
  6.         If .ActiveSpace = acModelSpace Then
    8 T; m, G' F7 {1 a
  7.             Set Space = .ModelSpace3 m3 p$ n- ^# i
  8.         Else& U& Y( j( ^5 j) O8 S/ h
  9.             Set Space = .PaperSpace
    & H8 X+ {6 o1 r9 f3 j
  10.         End If1 |. k$ }( Q8 T# V
  11.         .Utility.GetEntity Obj, Point, "选择圆弧:"
      n7 U4 n* I2 U5 z, o
  12.         If Obj.ObjectName = "AcDbArc" Then
    4 d! J7 g$ [4 T  @# w
  13.             Set DimObj = Space.AddDim3PointAngular(Obj.Center, Obj.StartPoint, Obj.EndPoint, .Utility.GetPoint(, "指定标注弧线位置:" ))7 ^& X: D; v1 g2 O  u1 P
  14.             DimObj.TextOverride = "{\Fgdt.shx|c0;^}\P" & Format(Obj.ArcLength, "0.##" )
    1 l1 r% \2 K+ N
  15.         End If! M" F2 Q- z& H, m( n9 l5 \
  16.     End With' r1 Z4 H9 _$ E
  17. 10: End Sub
      R5 E/ c: l0 f
复制代码
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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