QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

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

  1. . P3 W/ Y  C3 @
  2.     Dim E As AcadEntity! j. ]1 D6 K0 ?$ l2 _6 F
  3.     For Each E In ThisDrawing.ModelSpace
    ; G* ^: j) k* ^* u( }6 @: 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
    9 H2 B& b, j. i
  5.     Next
    ! T8 N2 l, @1 g0 K8 d8 n1 ~3 d
复制代码
 楼主| 发表于 2010-4-2 14:21:30 | 显示全部楼层 来自: 中国江苏南通
这个问题解决了,谢谢!
0 g& T7 q0 v5 a5 i我初学autocad vba,有好多信息不知道在哪里找,比如line的objectname是“AcDbLine”- v; q* c; Z$ y3 ~9 e& p0 [
请问这些属性该怎么找?谢谢!
$ M' O* M5 u2 P顺便另一个问题,如果我要删除所有半径为10的圆弧该如何写呢?4 H3 w2 t2 `  H7 [( W
刚刚起步,问题比较傻瓜,还请不要见笑,谢谢啦!
发表于 2010-4-2 16:25:53 | 显示全部楼层 来自: 中国北京
本帖最后由 woaishuijia 于 2010-4-2 16:27 编辑 & V& Y" P/ p) Y1 H( o/ N: T& W
  d; F; |7 `# R. @9 l4 y+ i
利用"监视"查看现有图元的属性.
2 [( C4 ^. Q% _2 M7 |比如,在VBAIDE界面的代码窗口写一个空的过程

  1. ! w. b: M8 b1 G; d
  2. Sub A
    7 V/ w% r1 M3 D8 }
  3. 6 P6 P! l  C1 e9 B  X
  4. End Sub0 I" B5 O8 v4 B
复制代码

; P, c1 @5 v, y* _$ P在监视窗口中添加监视"Thisdrawing",然后按F8逐步运行这个过程(也可以用设置断点的方法),可以在监视窗口中看到当前文档及其子对象的绝大部分属性值.
1 j) M1 g2 t3 g. K2 B: ~当然,这其中并不包括每个图元的ObjectName属性值,但我们可以用相似的办法得到.5 a3 r9 U/ I/ x6 A& ?5 w' L: B
新建一个过程并在其中写入如下代码# d) {. m' Y" C; b6 y

  1. 7 t, {+ |3 q+ ]# m8 g
  2.     Dim L As AcadLine, P1(2) As Double, P2(2) As Double
    2 Y+ D* R, K, G0 X6 ]$ w
  3.     P2(0) = 10
    * b& u9 \2 c. x* E3 F
  4.     Set L = ThisDrawing.ModelSpace.AddLine(P1, P2)& w+ }) t* X, B9 `' t. I
复制代码
在监视窗口中添加监视"L.ObjectName".  i- X7 ^9 v- |& O6 ]4 Q+ e
当运行完第三行后,监视窗口就会显示出这条直线的"ObjectName"属性值为"AcDbLine".
9 w$ \/ ]3 M8 K* U4 Y% J' V0 x! j2 L5 u9 @: T( J
"删除所有半径为10的圆弧"可以这样写
" n" c: {& B) c4 G$ @/ ]! T# Q

  1. 2 M/ y& q% C9 D& [& u% C( I% H
  2.     Dim E As AcadEntity6 _7 l  D; F& }+ u2 u) Z
  3.     For Each E In ThisDrawing.ModelSpace. E7 {( q- d) r9 n) |2 {% R
  4.         If E.ObjectName = "AcDbArc" Then
    $ k; f! t8 C/ V- w6 ?) [
  5.             If E.Radius = 10 Then E.Delete" J) \6 h9 V- s0 M0 ]
  6.         End If
    8 f/ y4 c: o0 M
  7.     Next2 y+ w6 k: `$ k% x9 ~# F8 \! 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()
    ) {( S: X1 l' X# R5 r- P/ U
  2.   (Vl-Load-Com)
    4 w( k$ T# i% {4 G& j. n; D8 z
  3.   (SetQ EntPnt (EntSel "\n选择圆弧:")5 D( }7 K5 {4 l& L  N6 f! i
  4.         Ent    (Car EntPnt)
    3 q6 y8 s2 j: F, A, j  F& z
  5.         Obj    (Vlax-EName->Vla-Object Ent)! E1 k1 a6 L, P2 P* W2 Y2 q7 M) I7 I
  6.         Txt    (Rtos(Vla-Get-ArcLength  Obj) 2 2)7 _* F' E' u- u- p5 M
  7.         Txt    (StrCat "\{\\Fgdt.shx|c0;^\}\\P" Txt)
    $ _" T) c- ]5 k% i
  8.   ): F5 G, u8 G& ^* ]+ F  O! j
  9.   (Command "_DimAngular" EntPnt "M" Txt )% p+ C! C* [; H  `
  10. ): B# I7 }* K4 E; P% q. W  Y& _, R$ g
复制代码
发表于 2010-5-10 14:47:24 | 显示全部楼层 来自: 中国天津
本帖最后由 woaishuijia 于 2010-5-10 14:52 编辑 3 _, }+ \  U; k- N6 b" o

; h' G6 I& _; j1 }9 r7# clearsee
  1. . p* z' s# X& e1 f9 \+ i0 O
  2. Sub DimArcLen(); y8 d3 v$ x; L- w, u) C
  3.     Dim Space As AcadBlock, Obj As AcadEntity, Point As Variant, DimObj As AcadDim3PointAngular2 x1 g% v3 E6 w& p/ t! G
  4.     On Error GoTo 10
    9 z( p$ M3 a( ]7 R: X5 t9 y, Y
  5.     With ThisDrawing* a7 P5 A  @4 ?4 @  G
  6.         If .ActiveSpace = acModelSpace Then# T2 o! A' G. L. s9 ]7 \8 H
  7.             Set Space = .ModelSpace
    % f  r9 B! H/ Y3 {9 c
  8.         Else
    # T9 p# A, y& L2 o
  9.             Set Space = .PaperSpace
    0 e; ]& I8 r3 r% i; ?
  10.         End If
    1 @$ [! m) Y  M- j' l- @9 k. ^5 f
  11.         .Utility.GetEntity Obj, Point, "选择圆弧:"1 G& r( \. c6 i6 z' b& Y7 L& G
  12.         If Obj.ObjectName = "AcDbArc" Then7 s3 I) d0 {9 g* B
  13.             Set DimObj = Space.AddDim3PointAngular(Obj.Center, Obj.StartPoint, Obj.EndPoint, .Utility.GetPoint(, "指定标注弧线位置:" ))! l' |& G6 x6 G" I: X
  14.             DimObj.TextOverride = "{\Fgdt.shx|c0;^}\P" & Format(Obj.ArcLength, "0.##" )
    . r! h4 W9 N7 {" G( y
  15.         End If
    5 p8 {+ X: \% H, `4 g' Z& q
  16.     End With' U' z8 U9 G: T$ S' b
  17. 10: End Sub0 @/ v$ d9 C) g6 o( b2 L% s
复制代码
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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