QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
请教各路高手,欲删除模型空间中所有的红色的直线用VBA该如何写?谢谢!
发表于 2010-4-1 13:10:20 | 显示全部楼层 来自: 中国北京
  1. . o$ s, T/ r$ g
  2.     Dim E As AcadEntity
    % u- S* x& F( d) X3 l7 A; M
  3.     For Each E In ThisDrawing.ModelSpace  v3 }2 z8 R- V  Y: j
  4.         If E.ObjectName = "AcDbLine" And (E.color = acRed Or E.color = acByLayer And ThisDrawing.Layers.Item(E.Layer).color = acRed) Then E.Delete
      v: R; h" m+ B3 i0 |
  5.     Next, x$ }. w6 C0 ^# s' H' H  {2 u
复制代码
 楼主| 发表于 2010-4-2 14:21:30 | 显示全部楼层 来自: 中国江苏南通
这个问题解决了,谢谢!
. e; p" N% L; x7 t2 `6 U% u: A我初学autocad vba,有好多信息不知道在哪里找,比如line的objectname是“AcDbLine”" f8 m3 S/ [$ t' j& X; A
请问这些属性该怎么找?谢谢!
/ ?% _' v$ _7 ~& T) O顺便另一个问题,如果我要删除所有半径为10的圆弧该如何写呢?7 m% E- M1 o5 T; f# e. d
刚刚起步,问题比较傻瓜,还请不要见笑,谢谢啦!
发表于 2010-4-2 16:25:53 | 显示全部楼层 来自: 中国北京
本帖最后由 woaishuijia 于 2010-4-2 16:27 编辑 ' R- z. _' s: _

0 T! a5 v, C1 Y' r0 z4 G7 {% C利用"监视"查看现有图元的属性.( `- p# b* M8 E' i3 g3 I
比如,在VBAIDE界面的代码窗口写一个空的过程

  1. % H# W$ V2 U1 L/ }: B
  2. Sub A
    - U3 V4 ]- x" S+ c. Y0 W

  3. $ ^/ U' A8 K" s) ]
  4. End Sub/ x7 w: t8 R) H( Q8 j
复制代码
; z) x8 K7 G1 X4 z
在监视窗口中添加监视"Thisdrawing",然后按F8逐步运行这个过程(也可以用设置断点的方法),可以在监视窗口中看到当前文档及其子对象的绝大部分属性值.
, Q& ^6 B. j5 O: w+ M( F  X! \5 |当然,这其中并不包括每个图元的ObjectName属性值,但我们可以用相似的办法得到.
( y1 Y) W% N- r/ p& @: n新建一个过程并在其中写入如下代码5 Q7 `- z4 C% Y; X; Q

  1. ) g7 u: U: _* {3 `3 L
  2.     Dim L As AcadLine, P1(2) As Double, P2(2) As Double5 t# v# y! s' X. I2 U( b
  3.     P2(0) = 10
    + Z( T4 W+ ~( \! s5 ~
  4.     Set L = ThisDrawing.ModelSpace.AddLine(P1, P2): K  q2 z2 G$ E0 W; `( [
复制代码
在监视窗口中添加监视"L.ObjectName".. B, t) q; ~: P2 c# u* ~
当运行完第三行后,监视窗口就会显示出这条直线的"ObjectName"属性值为"AcDbLine".
4 \9 d( [0 y8 @2 L; S9 s) G- a3 y6 T2 S  h
"删除所有半径为10的圆弧"可以这样写
6 ~  a% Z  [3 \+ G" a  L

  1. 9 h+ q8 b9 v* t4 v9 @( C
  2.     Dim E As AcadEntity
    1 n2 V8 Y0 b& a. ?, S1 h
  3.     For Each E In ThisDrawing.ModelSpace9 j* ~% P0 B% ^4 ^4 }5 F) O
  4.         If E.ObjectName = "AcDbArc" Then
    * y' M5 J: Q! Q% B! u7 R& l
  5.             If E.Radius = 10 Then E.Delete
    5 W+ p+ k/ _8 _. y8 p# b1 g  F
  6.         End If! P' T1 D& d$ C
  7.     Next
    # H* g( v; S0 D% _+ V% m6 k1 t. [% U
复制代码
 楼主| 发表于 2010-4-3 11:46:41 | 显示全部楼层 来自: 中国江苏南通
多谢版主的解释,关于监视,我还要研究一下:试了一下,还没有摸着门道。有没有相关教程呢?或者烦劳版主录一段小小的操作视频,以帮助我们这些初学者入门,不知是否可以?非常感谢!!!
 楼主| 发表于 2010-4-6 10:00:53 | 显示全部楼层 来自: 中国江苏南通
自己摸到了,不烦劳版主了,谢谢!!!
发表于 2010-5-10 10:43:04 | 显示全部楼层 来自: 中国江苏无锡
版本就是热心哈..这样也顺便帮我看看..这段代码如何改写成VB/VBA代码,弧长标注..
  1. (Defun C:DimArcLen()
    - Z: |8 Z" b. E
  2.   (Vl-Load-Com)2 K2 l( B6 x1 t( s" v; Z
  3.   (SetQ EntPnt (EntSel "\n选择圆弧:")
    ' ~- ~  J# \1 Z, x1 o6 U
  4.         Ent    (Car EntPnt)3 J8 F3 k  Y% e5 y( D6 T5 p
  5.         Obj    (Vlax-EName->Vla-Object Ent)' l% n' [9 j5 D. u5 j
  6.         Txt    (Rtos(Vla-Get-ArcLength  Obj) 2 2)( m5 v" Z0 X7 P9 H( q) x
  7.         Txt    (StrCat "\{\\Fgdt.shx|c0;^\}\\P" Txt)
    3 r# t+ H/ r7 j2 D+ K9 U7 [- q
  8.   )
    ' x0 e9 M  r- ^/ {2 t  Q
  9.   (Command "_DimAngular" EntPnt "M" Txt ), \  V6 {1 C5 ?
  10. )
    , k0 }2 @; Q6 |9 N
复制代码
发表于 2010-5-10 14:47:24 | 显示全部楼层 来自: 中国天津
本帖最后由 woaishuijia 于 2010-5-10 14:52 编辑
% x5 y# `( }2 C. X8 ^! f$ t" ^9 J- A# b: m  F! H" H$ \
7# clearsee
  1. ) u. d' y- o+ v* U) L
  2. Sub DimArcLen()+ y9 a( @) {7 @: h- L9 y
  3.     Dim Space As AcadBlock, Obj As AcadEntity, Point As Variant, DimObj As AcadDim3PointAngular
    0 J( K+ `- _( A+ a
  4.     On Error GoTo 10( \# D' D$ i' i6 A: f
  5.     With ThisDrawing
    % g0 z2 Y# I; S# i) j: U$ O6 [/ R% ]
  6.         If .ActiveSpace = acModelSpace Then% D& C1 v4 |" k  U/ T
  7.             Set Space = .ModelSpace
    : D$ f0 m/ X# A  n, _
  8.         Else9 _8 s6 l9 _* M+ B
  9.             Set Space = .PaperSpace
    0 d/ m1 N- M1 s3 i
  10.         End If' A5 h* a8 B+ c( L# b- \
  11.         .Utility.GetEntity Obj, Point, "选择圆弧:"
    + S& v, G! }; q! A
  12.         If Obj.ObjectName = "AcDbArc" Then
    ; P  Z- \% g# h
  13.             Set DimObj = Space.AddDim3PointAngular(Obj.Center, Obj.StartPoint, Obj.EndPoint, .Utility.GetPoint(, "指定标注弧线位置:" ))' E' t8 O, c3 X! w1 [. A" w
  14.             DimObj.TextOverride = "{\Fgdt.shx|c0;^}\P" & Format(Obj.ArcLength, "0.##" )
    7 o4 G1 f4 W: s8 @9 ?) ]
  15.         End If
    & T4 h% z0 R* q  H" J' p6 {$ V
  16.     End With# T) h: d1 N$ H
  17. 10: End Sub
    2 O6 u! n5 r$ \
复制代码
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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