QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

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

  1. - L4 L3 h' n( A0 r( H$ l( G. Y* D
  2.     Dim E As AcadEntity
    * V' d1 U) q3 l: K# f4 ]1 B
  3.     For Each E In ThisDrawing.ModelSpace; n7 m2 N. Q: w( Y0 M4 M) o- G
  4.         If E.ObjectName = "AcDbLine" And (E.color = acRed Or E.color = acByLayer And ThisDrawing.Layers.Item(E.Layer).color = acRed) Then E.Delete
    ( c# {& X/ ?, U! v; x
  5.     Next% ?0 X# v5 k4 ?. J$ c* e  k
复制代码
 楼主| 发表于 2010-4-2 14:21:30 | 显示全部楼层 来自: 中国江苏南通
这个问题解决了,谢谢!
8 [) U2 Q3 O, g& Q5 ~2 L  X我初学autocad vba,有好多信息不知道在哪里找,比如line的objectname是“AcDbLine”  M( K7 s; R3 h6 ~
请问这些属性该怎么找?谢谢!
; s. V" j# G$ ~' \顺便另一个问题,如果我要删除所有半径为10的圆弧该如何写呢?( ?  G$ z& Q8 g$ |! N2 v! Q( K
刚刚起步,问题比较傻瓜,还请不要见笑,谢谢啦!
发表于 2010-4-2 16:25:53 | 显示全部楼层 来自: 中国北京
本帖最后由 woaishuijia 于 2010-4-2 16:27 编辑 7 c% @" X6 c; z& i( c

8 L5 P0 x4 x  c" Z  w利用"监视"查看现有图元的属性.$ q3 ]) D2 j  d3 }; F8 }
比如,在VBAIDE界面的代码窗口写一个空的过程
  1. 2 i3 I- @$ R+ K% ]6 r+ w
  2. Sub A
    : M" h9 {- T- ]2 d- M

  3. : z% O! F) t4 _8 H( H, E. P5 n; V5 i
  4. End Sub
    ) O) I  u5 g9 D; k' I( c
复制代码
  G9 w$ q/ c% C( d$ p+ c$ y
在监视窗口中添加监视"Thisdrawing",然后按F8逐步运行这个过程(也可以用设置断点的方法),可以在监视窗口中看到当前文档及其子对象的绝大部分属性值.. v0 _& x& F2 R- e; f: \
当然,这其中并不包括每个图元的ObjectName属性值,但我们可以用相似的办法得到.$ W. F& |+ j! v3 I! r* m: a
新建一个过程并在其中写入如下代码
6 \" }4 }* p* a. i& P( H
  1. ) l0 A( |6 k0 W) ~) J' J8 E7 x
  2.     Dim L As AcadLine, P1(2) As Double, P2(2) As Double
    : u) ~, Q, u  s
  3.     P2(0) = 10
    9 o' I: H( S+ T0 Z! V8 F$ y
  4.     Set L = ThisDrawing.ModelSpace.AddLine(P1, P2)
    ) y1 |8 Z- z2 q2 c
复制代码
在监视窗口中添加监视"L.ObjectName".
: L/ @5 z1 F/ `6 u5 ^5 C7 u6 h0 p3 a当运行完第三行后,监视窗口就会显示出这条直线的"ObjectName"属性值为"AcDbLine".  d) ]# z. ^0 h" ^: U

( [5 V. _& _8 c, b3 C6 Z"删除所有半径为10的圆弧"可以这样写
( R6 ?+ i6 [% [

  1. 9 A1 ~/ ?) M, h0 E2 O2 ]) V+ W% @7 j
  2.     Dim E As AcadEntity
    ; U! _" M2 F! o3 ~6 L$ f
  3.     For Each E In ThisDrawing.ModelSpace
    & q; p, N  M7 X5 k3 [% Q0 Y2 e' `
  4.         If E.ObjectName = "AcDbArc" Then! N2 s( m4 a* X: D3 W
  5.             If E.Radius = 10 Then E.Delete0 j8 x% q2 [! Z: l; c9 D# z/ w7 s
  6.         End If9 S9 S# W8 I  {. e' T( k
  7.     Next4 b! [0 i* u/ [5 \) G% s# C6 C
复制代码
 楼主| 发表于 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" }' M) |& K
  2.   (Vl-Load-Com)* \! s. n: Y! K- V
  3.   (SetQ EntPnt (EntSel "\n选择圆弧:")
    1 ?: |: g; e* e7 }" b
  4.         Ent    (Car EntPnt)
    4 q2 j* E2 L9 x  j* f8 O+ \/ M, L
  5.         Obj    (Vlax-EName->Vla-Object Ent)$ d& J- Y: w' u! X) y/ Q1 J
  6.         Txt    (Rtos(Vla-Get-ArcLength  Obj) 2 2)
    ; T7 n/ l2 I1 H% H4 X6 ?
  7.         Txt    (StrCat "\{\\Fgdt.shx|c0;^\}\\P" Txt)& L0 V( c4 M: D; n+ n: C, p( i, i
  8.   )
    $ q) M5 l, I' E8 {; l0 Z4 C
  9.   (Command "_DimAngular" EntPnt "M" Txt )
    ( J0 _' E0 W* l- [
  10. )
    - a; J, n7 A! C% `
复制代码
发表于 2010-5-10 14:47:24 | 显示全部楼层 来自: 中国天津
本帖最后由 woaishuijia 于 2010-5-10 14:52 编辑
. Z7 z% Q. \5 F; N7 Z* H. k% Z) g; m- K
7# clearsee
  1. $ ^  r5 ~! b7 b) T
  2. Sub DimArcLen()3 \0 B2 h/ `) w; P+ N2 z1 c
  3.     Dim Space As AcadBlock, Obj As AcadEntity, Point As Variant, DimObj As AcadDim3PointAngular
    " c( v; R3 P" Z3 `
  4.     On Error GoTo 10
    - n" J1 h: h1 C$ X
  5.     With ThisDrawing
    / g$ q" T5 e. ^. [
  6.         If .ActiveSpace = acModelSpace Then
    6 \6 H5 {' e+ f  |+ Z% i
  7.             Set Space = .ModelSpace
    $ T4 @$ }, k) \) `1 R/ G" c3 d
  8.         Else8 B! Y" D% x5 ?+ n0 e
  9.             Set Space = .PaperSpace
    7 u# a4 D7 R5 ~2 G/ G/ J
  10.         End If- R: ~% j( a+ |& c. a0 r" t$ {
  11.         .Utility.GetEntity Obj, Point, "选择圆弧:"8 o" \' v8 s& g  h  V: t, x
  12.         If Obj.ObjectName = "AcDbArc" Then
    * w9 V- W7 ?) J* d% q. |( X6 b/ P
  13.             Set DimObj = Space.AddDim3PointAngular(Obj.Center, Obj.StartPoint, Obj.EndPoint, .Utility.GetPoint(, "指定标注弧线位置:" ))) J( B* [0 k; ^5 d; {8 t
  14.             DimObj.TextOverride = "{\Fgdt.shx|c0;^}\P" & Format(Obj.ArcLength, "0.##" )$ N: |$ `2 O, z1 ]2 U1 r* X
  15.         End If, C. n; p" b1 y# Y  _" ~, p
  16.     End With
    1 F2 S5 G  W* ~7 m& {( p
  17. 10: End Sub$ N$ `1 |1 }  B: r1 I" m
复制代码
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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