QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

查看: 2685|回复: 7
收起左侧

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

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

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

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

x
请教各路高手,欲删除模型空间中所有的红色的直线用VBA该如何写?谢谢!
发表于 2010-4-1 13:10:20 | 显示全部楼层 来自: 中国北京
  1. ' \; N8 g5 D: N
  2.     Dim E As AcadEntity
    . H7 j' k) y1 I5 y  T
  3.     For Each E In ThisDrawing.ModelSpace3 @8 b" c! `# H2 v2 c2 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  X4 P5 c1 Y# s2 q' b- G
  5.     Next" k2 i5 o! U2 F/ `& w
复制代码
 楼主| 发表于 2010-4-2 14:21:30 | 显示全部楼层 来自: 中国江苏南通
这个问题解决了,谢谢!) d2 r, ?6 x/ C( e
我初学autocad vba,有好多信息不知道在哪里找,比如line的objectname是“AcDbLine”
" X2 H; C5 `# N* G9 @请问这些属性该怎么找?谢谢!
1 H; S, l3 \$ \2 R$ ]顺便另一个问题,如果我要删除所有半径为10的圆弧该如何写呢?# |  C7 V* |8 o( ?$ K1 u1 i3 O
刚刚起步,问题比较傻瓜,还请不要见笑,谢谢啦!
发表于 2010-4-2 16:25:53 | 显示全部楼层 来自: 中国北京
本帖最后由 woaishuijia 于 2010-4-2 16:27 编辑
& ^$ ~, L. S) o- ^/ D# e, z/ w, W6 h# z$ ~- u  d
利用"监视"查看现有图元的属性.. N; ]& n6 c8 d/ z4 h' m, c
比如,在VBAIDE界面的代码窗口写一个空的过程
  1. 7 I0 E  d. V  f% F9 p( f" Q9 D3 F
  2. Sub A
    5 l. g/ |9 a# g% q

  3. $ d; P+ d- b" J# z" T- M. H+ N5 g: j
  4. End Sub
    & p/ r! u  \/ H. Q
复制代码

: ?4 ?/ W8 A2 N  `) E: Q在监视窗口中添加监视"Thisdrawing",然后按F8逐步运行这个过程(也可以用设置断点的方法),可以在监视窗口中看到当前文档及其子对象的绝大部分属性值.5 `2 p& L( B) G/ {# X0 e
当然,这其中并不包括每个图元的ObjectName属性值,但我们可以用相似的办法得到.
4 l% H, K% a# ~- t- z* h( Z! {$ V新建一个过程并在其中写入如下代码0 d( M$ x, X6 W% V- J

  1. 8 I' m7 \! n# m  E+ Z7 R
  2.     Dim L As AcadLine, P1(2) As Double, P2(2) As Double; V% {: q0 V3 ]; A! b
  3.     P2(0) = 10
    $ T* V" g; o- e0 B9 t+ {
  4.     Set L = ThisDrawing.ModelSpace.AddLine(P1, P2)
    % R0 n2 l4 {5 Y. ]8 ~
复制代码
在监视窗口中添加监视"L.ObjectName".
  ~8 u0 ^& d* ~! E- J当运行完第三行后,监视窗口就会显示出这条直线的"ObjectName"属性值为"AcDbLine".
  Q3 I4 ^% q5 a4 N! r, D, M
4 ]. \4 g+ l" L. ]"删除所有半径为10的圆弧"可以这样写
0 u* n2 E5 b, C7 Z+ i$ [$ }' X

  1. 6 e. Y4 b8 {! I9 B3 h
  2.     Dim E As AcadEntity
    " y/ T$ ]. H, L8 p7 R" e- s( [
  3.     For Each E In ThisDrawing.ModelSpace, y% ^& C; q! u! ]+ [  t4 c4 d- D2 `
  4.         If E.ObjectName = "AcDbArc" Then: ~, W4 [' ^0 Z' k
  5.             If E.Radius = 10 Then E.Delete
    ' ~% U& H( C- T1 n' u
  6.         End If
    ' i& J6 d& O1 W( W% E/ t
  7.     Next
    " L5 o2 D# Y. [& o
复制代码
 楼主| 发表于 2010-4-3 11:46:41 | 显示全部楼层 来自: 中国江苏南通
多谢版主的解释,关于监视,我还要研究一下:试了一下,还没有摸着门道。有没有相关教程呢?或者烦劳版主录一段小小的操作视频,以帮助我们这些初学者入门,不知是否可以?非常感谢!!!
 楼主| 发表于 2010-4-6 10:00:53 | 显示全部楼层 来自: 中国江苏南通
自己摸到了,不烦劳版主了,谢谢!!!
发表于 2010-5-10 10:43:04 | 显示全部楼层 来自: 中国江苏无锡
版本就是热心哈..这样也顺便帮我看看..这段代码如何改写成VB/VBA代码,弧长标注..
  1. (Defun C:DimArcLen()* D: J: J  w) Z" Z3 l
  2.   (Vl-Load-Com)
    + Z/ N% I7 B: d* J4 L3 D
  3.   (SetQ EntPnt (EntSel "\n选择圆弧:")' D$ H+ H  ?) Q" ~0 s: Z
  4.         Ent    (Car EntPnt)' e4 E/ N  q# M! a. O6 O) M: o/ S
  5.         Obj    (Vlax-EName->Vla-Object Ent)
    ( K3 @% b+ y* E% q
  6.         Txt    (Rtos(Vla-Get-ArcLength  Obj) 2 2)
    4 J2 {$ f/ U. E2 M5 g4 @) E+ k( q/ M
  7.         Txt    (StrCat "\{\\Fgdt.shx|c0;^\}\\P" Txt)/ K/ q8 [) I7 R! n  j6 p% y
  8.   )1 E! Z" t0 z" L+ v; k
  9.   (Command "_DimAngular" EntPnt "M" Txt )
    : h+ z7 l( p9 x9 M, \3 t
  10. )8 L5 f+ T3 a) Y$ F- W" D, }
复制代码
发表于 2010-5-10 14:47:24 | 显示全部楼层 来自: 中国天津
本帖最后由 woaishuijia 于 2010-5-10 14:52 编辑 ; T6 f( y4 a. u5 ^! T& y
* w6 ?2 j7 ?8 x, T$ }& u! n1 K
7# clearsee

  1. ( V: u+ j% w7 R6 @2 a3 }* X
  2. Sub DimArcLen()( S# W9 d2 r$ x: U# E9 J, t
  3.     Dim Space As AcadBlock, Obj As AcadEntity, Point As Variant, DimObj As AcadDim3PointAngular
    1 y) G: V0 o( `( _1 e% B7 b
  4.     On Error GoTo 103 b' v! E& l6 L
  5.     With ThisDrawing
    7 y" b) ]5 Q( E6 J
  6.         If .ActiveSpace = acModelSpace Then: q! S5 t, A. f- S7 {) @8 A
  7.             Set Space = .ModelSpace7 ^6 l9 ~, {" N7 H! O1 a
  8.         Else
    , N) l8 t  v# K" O
  9.             Set Space = .PaperSpace
    0 j( p, p8 N) n" W8 g
  10.         End If
    2 w5 U% Z$ k% o2 d2 U0 k$ e3 @
  11.         .Utility.GetEntity Obj, Point, "选择圆弧:"' T; X5 R* s1 G6 d& n& X
  12.         If Obj.ObjectName = "AcDbArc" Then
    ! a3 e8 m! q" S. L$ `% h& J- V
  13.             Set DimObj = Space.AddDim3PointAngular(Obj.Center, Obj.StartPoint, Obj.EndPoint, .Utility.GetPoint(, "指定标注弧线位置:" ))
    3 Q9 S+ k0 C% h1 [# N7 k+ A
  14.             DimObj.TextOverride = "{\Fgdt.shx|c0;^}\P" & Format(Obj.ArcLength, "0.##" )
    " q( ^( m0 h$ x% Q* a, l
  15.         End If
    6 v) x. {) C, K3 M& x9 T" T
  16.     End With
    ' W" |$ {9 l% Z  n
  17. 10: End Sub
    % q/ x  [: Y1 C' }# m
复制代码
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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