QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

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

  1. 8 t! V+ Q- _/ F& r" X5 ?
  2.     Dim E As AcadEntity
    5 }, ?& I) B* P- R0 z5 V2 n+ w
  3.     For Each E In ThisDrawing.ModelSpace1 U3 x% d& w; Z& {
  4.         If E.ObjectName = "AcDbLine" And (E.color = acRed Or E.color = acByLayer And ThisDrawing.Layers.Item(E.Layer).color = acRed) Then E.Delete
    " z* R1 ]  o% Q, A$ S
  5.     Next8 X! m6 y! ?; U- n& R
复制代码
 楼主| 发表于 2010-4-2 14:21:30 | 显示全部楼层 来自: 中国江苏南通
这个问题解决了,谢谢!7 f4 }$ C6 h6 w) A+ I* W8 `# ?( A
我初学autocad vba,有好多信息不知道在哪里找,比如line的objectname是“AcDbLine”
/ n$ d( W' g# ^1 j2 q' {; x请问这些属性该怎么找?谢谢!1 h% v9 Q, r# ^! I  _7 B
顺便另一个问题,如果我要删除所有半径为10的圆弧该如何写呢?
4 P8 d- D7 ]4 ~* e1 A8 s刚刚起步,问题比较傻瓜,还请不要见笑,谢谢啦!
发表于 2010-4-2 16:25:53 | 显示全部楼层 来自: 中国北京
本帖最后由 woaishuijia 于 2010-4-2 16:27 编辑
! X, x8 D. \8 f6 M1 O; `) ~3 u4 s5 |3 V+ ?
利用"监视"查看现有图元的属性.
$ k$ L: T7 R0 h, j  T" ^- H比如,在VBAIDE界面的代码窗口写一个空的过程

  1. - L1 M* \" L2 B$ c
  2. Sub A
    . B: J0 N& V9 q; _
  3. / V; Y0 `4 ^# S  T% @3 G
  4. End Sub
    ( b% m8 T) |! y0 C1 R7 P/ h
复制代码

! B: `4 x) a; h% q9 y在监视窗口中添加监视"Thisdrawing",然后按F8逐步运行这个过程(也可以用设置断点的方法),可以在监视窗口中看到当前文档及其子对象的绝大部分属性值.$ m; m& B2 C6 F1 Z, ]6 f1 d9 f9 C
当然,这其中并不包括每个图元的ObjectName属性值,但我们可以用相似的办法得到.0 e5 \" L3 ~, v& L6 U
新建一个过程并在其中写入如下代码
5 J5 S! F& U& M! q# T
  1. & B& Q% S1 R4 t" e! z- K
  2.     Dim L As AcadLine, P1(2) As Double, P2(2) As Double
    ( t# H; C) ?' u) @$ x3 p% _- z! n/ j
  3.     P2(0) = 10' L6 p( f! z6 m" p# i
  4.     Set L = ThisDrawing.ModelSpace.AddLine(P1, P2)
    & z7 {1 Q5 T  p& s, l
复制代码
在监视窗口中添加监视"L.ObjectName".$ ?6 b9 P# c8 v; c) L& @! H7 _" C
当运行完第三行后,监视窗口就会显示出这条直线的"ObjectName"属性值为"AcDbLine".
. e6 d# m, @( X- {) C) i7 p" [9 G1 w
"删除所有半径为10的圆弧"可以这样写
6 T! P  C; |8 V7 L- B- _4 e1 N; `
  1. : g' r' _3 p  \
  2.     Dim E As AcadEntity7 R. s1 E& k+ i# U' s
  3.     For Each E In ThisDrawing.ModelSpace
    * V: T. u2 D7 N. M
  4.         If E.ObjectName = "AcDbArc" Then
    / Q' {3 l# W' v
  5.             If E.Radius = 10 Then E.Delete' ~6 k  k3 y1 z2 r# A! v5 _& p& x" k+ v
  6.         End If
    4 u# }- g3 k9 s
  7.     Next
    ' X, I' b$ h- o% 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()
    ; R7 g: s( U$ [+ A
  2.   (Vl-Load-Com)
    7 G- c/ O! b, b( E$ s# A
  3.   (SetQ EntPnt (EntSel "\n选择圆弧:")0 c8 U/ k3 f. }- K$ w2 U
  4.         Ent    (Car EntPnt)( D' y7 M" S' g$ j
  5.         Obj    (Vlax-EName->Vla-Object Ent)
    6 E: C# H# N. E- b3 t9 w3 {& [
  6.         Txt    (Rtos(Vla-Get-ArcLength  Obj) 2 2)
    ! U" I( t) c+ J) c1 o6 a7 _
  7.         Txt    (StrCat "\{\\Fgdt.shx|c0;^\}\\P" Txt)
    . Y. |$ d5 |; S& l" o, C6 |% Y
  8.   )
    1 D) l8 W% \4 B+ L$ A
  9.   (Command "_DimAngular" EntPnt "M" Txt )8 J, k) _4 V8 c
  10. )
    + u& C. N4 B7 \" _1 m% |9 @
复制代码
发表于 2010-5-10 14:47:24 | 显示全部楼层 来自: 中国天津
本帖最后由 woaishuijia 于 2010-5-10 14:52 编辑 3 Z7 F7 c% W' P( A( K# U
0 B8 @( X) X$ n
7# clearsee
  1. ! I: \7 H. j) ]+ S% h$ @. m
  2. Sub DimArcLen()* U/ N. y# y; s" G% ?+ X  `3 o0 L5 i
  3.     Dim Space As AcadBlock, Obj As AcadEntity, Point As Variant, DimObj As AcadDim3PointAngular
    5 _' f7 H! T, q1 u; z
  4.     On Error GoTo 101 {2 |- B5 V7 {# z/ z
  5.     With ThisDrawing
    1 u2 ~- X3 v* g& ^" a
  6.         If .ActiveSpace = acModelSpace Then' ~! c; h& ~' M0 X
  7.             Set Space = .ModelSpace! f% u2 a, G1 }7 ?6 y& ?
  8.         Else
    - b5 H, H! w' Y& o9 ~
  9.             Set Space = .PaperSpace
    & \4 A3 u9 R4 U3 P; v
  10.         End If- U5 N2 a* @. f1 c$ h0 R: t8 f( v" T
  11.         .Utility.GetEntity Obj, Point, "选择圆弧:"% t6 A3 ]/ }- D7 p% |4 F
  12.         If Obj.ObjectName = "AcDbArc" Then
    . B1 t- ^4 v# I
  13.             Set DimObj = Space.AddDim3PointAngular(Obj.Center, Obj.StartPoint, Obj.EndPoint, .Utility.GetPoint(, "指定标注弧线位置:" ))0 a& b& \. i  o0 ~3 P2 W
  14.             DimObj.TextOverride = "{\Fgdt.shx|c0;^}\P" & Format(Obj.ArcLength, "0.##" ). j" `8 w1 o. `2 s& n
  15.         End If  B7 a- k9 N' R* I
  16.     End With
    * E5 Z: S( L6 n. B: d6 z
  17. 10: End Sub; I* {  g! T3 `# }( C" x! g2 z
复制代码
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

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