QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

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

  1. 7 B+ N# P+ o& D# X
  2.     Dim E As AcadEntity
    - N. G; q0 T8 Q; F0 G. ]) \
  3.     For Each E In ThisDrawing.ModelSpace
    * m4 }3 N5 `4 A
  4.         If E.ObjectName = "AcDbLine" And (E.color = acRed Or E.color = acByLayer And ThisDrawing.Layers.Item(E.Layer).color = acRed) Then E.Delete
    " T) {3 h# z* p. C2 B9 ]! \
  5.     Next
    % E: T  L8 H0 v& y
复制代码
 楼主| 发表于 2010-4-2 14:21:30 | 显示全部楼层 来自: 中国江苏南通
这个问题解决了,谢谢!3 {& z1 L$ E5 J3 b5 e& N5 R
我初学autocad vba,有好多信息不知道在哪里找,比如line的objectname是“AcDbLine”7 k8 L4 J4 r% Z+ A- A" D# ~' l7 J& N+ j
请问这些属性该怎么找?谢谢!/ u0 Y2 q$ S' S9 Y  @5 g* j
顺便另一个问题,如果我要删除所有半径为10的圆弧该如何写呢?3 A4 G+ j  L) R. ^4 V( N
刚刚起步,问题比较傻瓜,还请不要见笑,谢谢啦!
发表于 2010-4-2 16:25:53 | 显示全部楼层 来自: 中国北京
本帖最后由 woaishuijia 于 2010-4-2 16:27 编辑
# v1 e5 X! Z9 a
+ x" Z. V( h" h, D8 m; M* {利用"监视"查看现有图元的属性.) h6 m  _" \8 o+ p' S7 `
比如,在VBAIDE界面的代码窗口写一个空的过程
  1. . A6 a4 |5 H; D5 O
  2. Sub A' I# x$ K& |4 S# j" e

  3. - a5 y% V- M/ d) z: G, f
  4. End Sub
    " \4 n6 w$ j" y7 ~' y3 R6 k/ [
复制代码
: h% `, p4 |6 w) d
在监视窗口中添加监视"Thisdrawing",然后按F8逐步运行这个过程(也可以用设置断点的方法),可以在监视窗口中看到当前文档及其子对象的绝大部分属性值.
& |* _/ M' F  ]; S/ T当然,这其中并不包括每个图元的ObjectName属性值,但我们可以用相似的办法得到.
8 W- ?* V5 {. F5 n7 O; I新建一个过程并在其中写入如下代码
4 A3 w) F0 L3 A2 ]! E
  1. 7 s1 T; X; ~# b0 c7 G1 f+ A
  2.     Dim L As AcadLine, P1(2) As Double, P2(2) As Double# e  |5 x. z! }  w5 T& S
  3.     P2(0) = 10- ?3 S! Z+ o4 T7 @4 A
  4.     Set L = ThisDrawing.ModelSpace.AddLine(P1, P2)2 K1 G3 d3 h8 J! Y9 Q5 _
复制代码
在监视窗口中添加监视"L.ObjectName".
+ X' j$ H6 T. a当运行完第三行后,监视窗口就会显示出这条直线的"ObjectName"属性值为"AcDbLine".
4 I& {1 _) \/ N1 d# ^: t8 b+ w$ N) u9 D' |1 _% ?
"删除所有半径为10的圆弧"可以这样写
" K& [' t/ X  j; b

  1. + {1 k1 o8 u: x" R* v* F" R
  2.     Dim E As AcadEntity
    , U2 @6 _9 V" M6 e9 }- N& d
  3.     For Each E In ThisDrawing.ModelSpace
      `  e/ x1 S) ~; F1 B
  4.         If E.ObjectName = "AcDbArc" Then
    ! R$ h/ s$ N+ g# R, n
  5.             If E.Radius = 10 Then E.Delete: f) ^5 o" j! w$ Y4 X
  6.         End If
    ; [) N0 x- v& T( f5 E6 }( Z7 g+ U
  7.     Next
    " |# e' M( ~. U8 J! z* }/ b/ C7 ]# u- m, g
复制代码
 楼主| 发表于 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 D1 m7 p, G8 A9 P6 w- e( N
  2.   (Vl-Load-Com)( f- `& v/ M$ A: g. P7 b
  3.   (SetQ EntPnt (EntSel "\n选择圆弧:")
    5 _6 e( y& K! A7 b7 Z9 h* v: [
  4.         Ent    (Car EntPnt)! a( k2 k  w% Y( f
  5.         Obj    (Vlax-EName->Vla-Object Ent)
    9 S2 ?5 e% n# B& q! s; I
  6.         Txt    (Rtos(Vla-Get-ArcLength  Obj) 2 2)
    9 C4 r& A# T- f# A% g) {7 P( B
  7.         Txt    (StrCat "\{\\Fgdt.shx|c0;^\}\\P" Txt)
    7 V6 o6 f0 ?- P& q1 ^; m
  8.   )
    4 u2 i- h4 e1 B
  9.   (Command "_DimAngular" EntPnt "M" Txt )
    $ q; H0 E$ S  j+ t
  10. )8 Q$ q0 u* L6 W+ p8 q5 K
复制代码
发表于 2010-5-10 14:47:24 | 显示全部楼层 来自: 中国天津
本帖最后由 woaishuijia 于 2010-5-10 14:52 编辑 8 c# P$ z5 h: C% c3 H% I! Q4 M2 d

) A- A" h, N! ?$ v1 @7# clearsee
  1. % u" C* ]# M1 u
  2. Sub DimArcLen()
    ; L) D$ P, @1 G3 n, a* L. Y
  3.     Dim Space As AcadBlock, Obj As AcadEntity, Point As Variant, DimObj As AcadDim3PointAngular$ z9 Z2 K  }. y! c2 W4 C( L# X
  4.     On Error GoTo 10
    2 ?# K& l7 h9 @4 m" d; ]# k$ u& y+ m6 f
  5.     With ThisDrawing
    0 d4 g. n& a# }$ I
  6.         If .ActiveSpace = acModelSpace Then
    - U' K0 u2 a; v/ {
  7.             Set Space = .ModelSpace
    - H* ]8 a( @; d6 B, c
  8.         Else" w8 y  T  ?& ?2 T0 y: e
  9.             Set Space = .PaperSpace
    ; ]! @; A) f' N1 ?) r, X( u
  10.         End If
    9 c& R* Y0 n6 {8 O
  11.         .Utility.GetEntity Obj, Point, "选择圆弧:"# d, E" D% p. h% Y4 H# {
  12.         If Obj.ObjectName = "AcDbArc" Then
    5 [6 |8 l+ `3 F6 P4 n7 V
  13.             Set DimObj = Space.AddDim3PointAngular(Obj.Center, Obj.StartPoint, Obj.EndPoint, .Utility.GetPoint(, "指定标注弧线位置:" )). P' P0 l3 b6 C2 Z
  14.             DimObj.TextOverride = "{\Fgdt.shx|c0;^}\P" & Format(Obj.ArcLength, "0.##" )* s# `( @8 N$ W+ `, c
  15.         End If
    : i4 X1 Q+ q! k1 T) h
  16.     End With
    4 i8 {0 U  w. f' R6 Y' I- W: n
  17. 10: End Sub, X$ A7 W7 ]  a7 u; ^
复制代码
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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