QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
请教各路高手,欲删除模型空间中所有的红色的直线用VBA该如何写?谢谢!
发表于 2010-4-1 13:10:20 | 显示全部楼层 来自: 中国北京
  1. + c9 q. y- N( }" Z; d
  2.     Dim E As AcadEntity9 G1 n6 @3 K' l" p3 a- w
  3.     For Each E In ThisDrawing.ModelSpace
    / E9 f& Q- Y% M6 D" I
  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/ A" W( A( f
  5.     Next1 r- k8 p! B8 V$ a7 J* X: V, l1 k. @
复制代码
 楼主| 发表于 2010-4-2 14:21:30 | 显示全部楼层 来自: 中国江苏南通
这个问题解决了,谢谢!
% L; L& H# k/ u. l' d! \7 C我初学autocad vba,有好多信息不知道在哪里找,比如line的objectname是“AcDbLine”8 }" F. L+ s; a- w
请问这些属性该怎么找?谢谢!6 `; n2 ?) u* _
顺便另一个问题,如果我要删除所有半径为10的圆弧该如何写呢?0 H8 I, k2 \; Q# E' k) g
刚刚起步,问题比较傻瓜,还请不要见笑,谢谢啦!
发表于 2010-4-2 16:25:53 | 显示全部楼层 来自: 中国北京
本帖最后由 woaishuijia 于 2010-4-2 16:27 编辑 1 O' L, ]/ u' i6 Y% v6 Y

; W' P7 e% x/ Z利用"监视"查看现有图元的属性.: W4 S* q3 R' G" Z3 C6 H& Z/ d; p
比如,在VBAIDE界面的代码窗口写一个空的过程
  1. $ H9 ^0 ~4 p( o0 x
  2. Sub A7 w! }/ s0 X: ~! N8 [
  3. # B; T/ J; N) C4 s3 n
  4. End Sub: \. X- j3 n3 f5 v6 b+ J
复制代码
, O+ {7 d) g8 P, h5 d, n% y6 ~
在监视窗口中添加监视"Thisdrawing",然后按F8逐步运行这个过程(也可以用设置断点的方法),可以在监视窗口中看到当前文档及其子对象的绝大部分属性值.2 D' i# }' S1 t
当然,这其中并不包括每个图元的ObjectName属性值,但我们可以用相似的办法得到.
2 Z1 T- P" @2 Z新建一个过程并在其中写入如下代码
& B' ?( M5 V1 V
  1. 7 t* W% |% D' w7 j& H
  2.     Dim L As AcadLine, P1(2) As Double, P2(2) As Double2 G- b8 x  A& j# e9 b9 r% [2 |% [
  3.     P2(0) = 10
    " G* V; T* b: g
  4.     Set L = ThisDrawing.ModelSpace.AddLine(P1, P2)0 C9 U7 V- c" c7 ?
复制代码
在监视窗口中添加监视"L.ObjectName".
) q9 R! d2 H- @$ ^( \当运行完第三行后,监视窗口就会显示出这条直线的"ObjectName"属性值为"AcDbLine".
( I( ?- b3 Z8 C! l# S
5 x* b! U, }9 O" k"删除所有半径为10的圆弧"可以这样写2 f/ S5 \9 N! _7 R1 h( g

  1. + U5 [0 F) m3 c/ B: p5 Q
  2.     Dim E As AcadEntity
    " l8 x# F/ t4 w  z
  3.     For Each E In ThisDrawing.ModelSpace
    6 P0 n7 C8 V* G, Z6 k
  4.         If E.ObjectName = "AcDbArc" Then
    4 |/ J$ s/ H0 A3 k0 A7 l8 W
  5.             If E.Radius = 10 Then E.Delete7 O8 Z* V. X% B8 B/ b) G, }& w
  6.         End If
    5 [! ]# B8 n2 ^; e" {$ `
  7.     Next
    ) T' d* t  m+ E& D! `# W
复制代码
 楼主| 发表于 2010-4-3 11:46:41 | 显示全部楼层 来自: 中国江苏南通
多谢版主的解释,关于监视,我还要研究一下:试了一下,还没有摸着门道。有没有相关教程呢?或者烦劳版主录一段小小的操作视频,以帮助我们这些初学者入门,不知是否可以?非常感谢!!!
 楼主| 发表于 2010-4-6 10:00:53 | 显示全部楼层 来自: 中国江苏南通
自己摸到了,不烦劳版主了,谢谢!!!
发表于 2010-5-10 10:43:04 | 显示全部楼层 来自: 中国江苏无锡
版本就是热心哈..这样也顺便帮我看看..这段代码如何改写成VB/VBA代码,弧长标注..
  1. (Defun C:DimArcLen()
    7 h/ k/ g  J( _" _; l
  2.   (Vl-Load-Com)" b. E/ D2 z+ p; c8 `+ S" L! Y8 X
  3.   (SetQ EntPnt (EntSel "\n选择圆弧:")
    5 C1 D5 j) N# c9 p1 I3 k6 a+ [
  4.         Ent    (Car EntPnt)
    7 A6 P. C4 L0 H% s  H# j
  5.         Obj    (Vlax-EName->Vla-Object Ent)
    % Y( D8 @! B+ N; X+ |1 V3 V
  6.         Txt    (Rtos(Vla-Get-ArcLength  Obj) 2 2)
    * |- l# O1 L+ r5 p" `( i
  7.         Txt    (StrCat "\{\\Fgdt.shx|c0;^\}\\P" Txt)2 \5 \- M2 b6 U  P% e
  8.   )1 H% m' E' u) N/ M9 c
  9.   (Command "_DimAngular" EntPnt "M" Txt )
    & z* q3 G9 J6 X4 O1 X
  10. )
    " v; m' i1 i. o) W( q
复制代码
发表于 2010-5-10 14:47:24 | 显示全部楼层 来自: 中国天津
本帖最后由 woaishuijia 于 2010-5-10 14:52 编辑
1 h, [& o, r9 H  A
( T  d  R6 z6 f$ _# P7# clearsee
  1. * M; _* v2 h; d. v, h0 z
  2. Sub DimArcLen()
    ( H! D& R% |) e( F# @: J7 t
  3.     Dim Space As AcadBlock, Obj As AcadEntity, Point As Variant, DimObj As AcadDim3PointAngular; L8 {( M% l% R
  4.     On Error GoTo 10
      o( w, |% v, @/ f- c- N% l/ w
  5.     With ThisDrawing6 t6 q0 a, e0 S' z% }0 U7 Y7 M9 ~
  6.         If .ActiveSpace = acModelSpace Then
    ; O, Y! v/ W4 t& g/ h' F% s7 f
  7.             Set Space = .ModelSpace
    / m9 c8 d# V9 h5 C* e
  8.         Else0 G  ^3 n5 @" b
  9.             Set Space = .PaperSpace
    5 g3 g% p$ Q1 s- l! C  M$ _
  10.         End If
    1 W+ S( d% ]9 K4 n7 h+ G2 g
  11.         .Utility.GetEntity Obj, Point, "选择圆弧:"
    6 J. f* K# A; V% F
  12.         If Obj.ObjectName = "AcDbArc" Then# L( ^5 L) R# R! {" a
  13.             Set DimObj = Space.AddDim3PointAngular(Obj.Center, Obj.StartPoint, Obj.EndPoint, .Utility.GetPoint(, "指定标注弧线位置:" ))5 P- b! X; e$ _! f
  14.             DimObj.TextOverride = "{\Fgdt.shx|c0;^}\P" & Format(Obj.ArcLength, "0.##" )
    - t% u& Q4 c3 Y! H% C. j  _
  15.         End If- l0 D9 m2 |) z, `% o: {" @
  16.     End With
    - m  |1 w5 D/ w  O
  17. 10: End Sub
    + ]$ G# I5 G( U: s+ o# s
复制代码
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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