QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
6天前
楼主: woaishuijia
收起左侧

[原创] autocad二次开发(VBA)就这么简单

[复制链接]
发表于 2009-8-5 14:57:16 | 显示全部楼层 来自: 中国广东东莞
有没有系统的二次开发教程啊?
发表于 2009-8-5 14:58:37 | 显示全部楼层 来自: 中国广东东莞
是比较系统的,全面的教程,有心想学,QQ:454461175,请高手指点!!!!
发表于 2009-8-7 21:13:35 | 显示全部楼层 来自: 中国北京
我也在学呢,希望分享 :lol:
发表于 2009-8-8 19:56:06 | 显示全部楼层 来自: 中国辽宁大连
非常感谢楼主分享!
发表于 2009-8-10 20:54:12 | 显示全部楼层 来自: 中国四川成都
稍微简单点的程序,还可以。复杂的就看不明白了、
发表于 2009-9-1 14:20:51 | 显示全部楼层 来自: 中国江西九江
我觉得我看得要晕。。因为我讨厌英语~~
发表于 2009-9-3 19:49:26 | 显示全部楼层 来自: 中国山东烟台
二次开发太精彩了!
发表于 2009-9-5 09:18:12 | 显示全部楼层 来自: 中国重庆
如果你会用VB的话,VBA就很快了,但要用好还得花一定功夫的。另外VBA源代码的保密性不太好。
发表于 2009-9-7 21:37:52 | 显示全部楼层 来自: 中国上海
增加我的学习信心,谢谢你啊,楼主
发表于 2009-9-7 21:59:10 | 显示全部楼层 来自: 中国上海
看完各位留言 真是受益匪浅啊
发表于 2009-9-23 08:06:57 | 显示全部楼层 来自: 中国江苏常州
继续学习中
发表于 2009-9-30 10:29:39 | 显示全部楼层 来自: 中国北京
学习需要刻苦和勤奋啊
发表于 2009-10-18 18:33:28 | 显示全部楼层 来自: 中国浙江温州
楼主厉害,确实在VBA方面我是不懂的,请问高手们,这个在哪有教材不?
发表于 2009-10-31 20:58:48 | 显示全部楼层 来自: 中国河南洛阳
真是受益匪浅啊
发表于 2009-10-31 23:13:56 | 显示全部楼层 来自: 中国河南商丘
茅塞顿开呀。谢谢了。
发表于 2009-11-18 22:20:53 | 显示全部楼层 来自: 中国浙江舟山
请楼主帮帮忙,我要用VBA程序读取CAD中多段线中的点,用一个现成的VBA程序读出的点坐标是该多段线所有的点的坐标,如何能有选择性的读取一些自己需要的坐标呢。比如说该多段线在横轴方向整数位置上的坐标点。
 楼主| 发表于 2009-11-19 19:35:39 | 显示全部楼层 来自: 中国

回复 167# yuaolin 的帖子

可以根据需要在程序中加入一些条件判断语句,有选择地输出的点坐标
发表于 2009-11-19 21:38:17 | 显示全部楼层 来自: 中国浙江舟山
Private Sub AcadDocument_BeginSave(ByVal FileName As String)
) N# l. Z4 L: M$ jEnd Sub
6 G6 d8 h1 Q- X- x
- y! `8 x% \: P  I4 @Private Sub Save_Spline(splineObj As AcadSpline)
7 U8 {9 j. e# Y! ~  Close #1
" Z/ ^6 a+ Y8 ~" O0 w    Dim fitPoints As Variant
5 _- R: K5 ?$ x& U    Dim icount As Long' w% Z" ]# j# u3 [1 H3 Z' H9 q7 a% o
    Dim ipoint As Integer
1 V4 x* o7 {7 d# i' {! Y  ^   
6 d) W  T7 v# \6 G. Q& c       fitPoints = splineObj.fitPoints
! K5 k; K) t4 b" `1 Y( e       Open "c:\test001.bri" For Append As #1" Z( @" w! j1 _) ~% x* w/ A. d+ K
       Print #1, "no__x___y___z"
. [) w4 W+ ]! A3 E( ?) a- o       ipoint = 0
7 |. S3 w' c% }. H" G9 ?       For icount = 0 To UBound(fitPoints) Step 3
% b* e6 ?* I3 u           ipoint = ipoint + 1
1 c" _" p( r' H3 P: s* A% V0 A$ r           X_scale = Int((fitPoints(icount) + 0.00005) * 10000) / 100007 J: A" E: Y! [' ]- _# H) [9 I
           Y_scale = Int((fitPoints(icount + 1) + 0.00005) * 10000) / 10000
2 _. v5 ^9 f( w7 x. c9 s+ x           Z_scale = Int((fitPoints(icount + 2) + 0.00005) * 10000) / 10000
) A' f1 t; E8 O& Q           'print #1,ipoint&" "&X_scale&" "&Y_sacle&" "&Z_sacle
( \" w- q. B( z, u& y           Print #1, X_scale & " , " & Y_scale & " , " & Z_scale
+ B, G3 o  y9 j" O+ \7 T% `         Next icount) F# O4 z" k/ O2 B6 \7 ]$ \
    Close #12 A' {$ ~! N5 c! _
   
; |+ \" ~, j, d- g& P            
. j  _7 f  v1 k$ _6 V' Q% JEnd Sub
& r$ S$ W8 g9 X% y1 \- c, kPrivate Sub Save_Pline(plineObj As AcadLWPolyline)
0 M* [' K! M: ?; Y2 Y# v' [  Close #1
: V) n6 i/ t  y0 n( s& @    Dim poly_coordinates As Variant
/ U3 l- P# ?7 \    Dim icount As Long
! @8 P/ P9 M2 t! B4 L    Dim ipoint As Integer6 L9 M2 R  k3 }3 V/ J" |$ r" }
    poly_coordinates = plineObj.Coordinates
) l; R- @% G9 H/ \' l5 w( a    Open "c:\test002.dri" For Append As #1
) c+ q' @; O- h6 ^- g    'print #1 ,"no__x__y__z". n2 q) \/ _2 a0 T* z" b8 \
    Print #1, (UBound(poly_coordinates) + 1) / 2& A$ s3 O& e5 w
    ipoint = 0
3 Z1 t3 f  K! O6 d% Q9 @    For icount = 0 To UBound(poly_coordinates) Step 2
( A3 z, t/ K; x; K$ O  t) F       ipoint = ipoint + 1) E1 a$ }2 ]4 n! `' a- Y
       X_scale = Format(Int((poly_coordinates(icount) / 1000 + 0.00005) * 10000) / 10000, "0.0000")5 P  [$ C+ h& D/ W9 W
       Y_scale = Format(Int((poly_coordinates(icount + 1) / 1000 + 0.00005) * 10000) / 10000, "0.0000")& p- m- D8 R; Q# @- Y
       'Z_scale = int((poly_coordinates(icount +2)+0.00005)*10000)/10000
( p+ R) U' X9 ~( t7 [1 E       'print #1,ipoint & " "&X_scale&" "&Y_scale&" "&Z_scale
& k. t/ m- P; h1 ~0 \, @( N       Print #1, X_scale & "  " & Y_scale+ Z& u) a6 Y: G* V
       Next icount
) ]# k9 Z, e0 h, b       Print #1, 04 T7 m4 [" i& l: o* |& S4 D
       Print #1, " "
% y& a0 `. b/ [, d0 T* S; M) N    Close #1
2 U; N/ a( f4 M9 |4 q   
  U& ^& m/ ^) F- {5 q  h: e/ @End Sub# v! [4 k0 ]+ \7 Q
Public Sub zzt()
, W) y) U* c* E- H4 }& i/ \7 V   Dim selectObj As AcadSelectionSet
8 l! t* U( G- H   Dim sumObj As Integer8 `& @+ E( u& g/ f& W8 c: i$ N
   - r9 v, w5 G& |
   Set selectObj = ThisDrawing.ActiveSelectionSet
& L: l- \6 T- Y- [* f" N+ Z1 f   sumObj = selectObj.Count
$ m& v0 f; r8 q! E   For i = 0 To sumObj - 1
' v2 l+ A8 O  _' ~7 g$ j  L3 w8 @. a   If selectObj.Item(i).ObjectName = "AcDbSpline" Then
2 N% w! T5 x( L  Z2 d- v8 ^9 f      Save_Spline selectObj.Item(i)
1 _, O* W6 u' r+ s; B9 e) O   End If
, B  r. g: i- _2 ^# s+ P     If selectObj.Item(i).ObjectName = "AcDbPolyline" Then! X/ O4 g& e( C
      Save_Pline selectObj.Item(i)
# C6 a! M& e5 H   End If
8 Q  l( k) d& b+ U   
; C( k( L5 b: ~: T1 C" P. F, n   Next i
* t  F4 q3 B) E2 \& f* U   
1 l! g5 k( n9 k( I   
# X# Y' w' ?+ R7 h( |3 F; @* xEnd Sub
$ Z: z0 Q- w( X6 a8 n+ [; o这是我读取CAD中多段线点坐标的源程序,请楼主帮忙看看,该在哪个地方加条件语句。
4 \2 Y& `* i# C# N1 C如下就是读取出来的一串有序的坐标点,我只需要小数点后第2位到第4位为0的坐标点输出(红色字体的数据)。请楼主帮忙
* A1 J  z5 ^+ P1 o* `7 K6 o  I
8 ~8 H/ E, f: S8 l5 R: Q* Y3 p    X         Y8 c7 R0 s/ e7 c" m, t% Z1 E
0.0000  0.0000
: A& V0 O4 w2 {: E4 K8 {4 \20.6000  0.0000, _, [) y6 z9 u
20.8013  0.0107
' S, \9 O/ w; v21.0000  0.0426% D$ ~+ p8 r( {% }, c1 u
21.2563  0.1170
/ O$ Z/ {" E: Q! U; y2 R21.5000  0.2268
: }  [4 H- C0 z' d: y: ~! V+ v21.7009  0.3515
3 v* D. y  I" U0 z: d21.8845  0.50002 ?4 v9 t! `+ Y4 M4 U% z& d, e
21.9435  0.5565
$ k9 \# V1 z9 {. k3 S3 j( q5 Q  S! R22.0000  0.6155
* m) T5 T$ t1 o2 n22.1487  0.7993
& k7 H* y0 G" O22.2733  1.0000) ~# O2 t" F8 p, Q2 q
22.3830  1.2435
$ `6 S4 J2 e  D- f22.4574  1.5000( g8 k# X1 C, e% ]
22.4893  1.6988
# p, |) r" F9 W22.5000  1.8985
& j% |9 J4 N# \8 q! d% G) }22.5000  1.9000" z: b0 o5 R$ L5 t3 {5 B1 J" @
22.5000  27.0000
 楼主| 发表于 2009-11-22 06:44:22 | 显示全部楼层 来自: 中国
X_scale = Format(Int((poly_coordinates(icount) / 1000 + 0.00005) * 10000) / 10000, "0.0000" )" v4 d! X8 T9 O' C
       Y_scale = Format(Int((poly_coordinates(icount + 1) / 1000 + 0.00005) * 10000) / 10000, "0.0000" )
9 X3 f# \$ R( n; y       'Z_scale = int((poly_coordinates(icount +2)+0.00005)*10000)/10000
" M- I3 V8 \& }; U0 Y. |# t        if right(x_scale,3)="000" or right(y_scale,3)="000" then2 P1 ]" U/ G& Q- Y, u' m
       'print #1,ipoint & " "&X_scale&" "&Y_scale&" "&Z_scale
1 Z2 t# m+ l8 E- g( }       Print #1, X_scale & "  " & Y_scale
* E8 D8 e2 I1 u8 ?' ^2 T        endif
发表于 2009-11-22 20:52:08 | 显示全部楼层 来自: 中国浙江舟山

回复 170# woaishuijia 的帖子

谢谢版主,还有个问题顺便问下,新生成的点的数量如何统计呢。我现在运算出来还是老的数量。请版主帮帮我,自己试着改了几回都没效果
 楼主| 发表于 2009-11-22 23:35:25 | 显示全部楼层 来自: 中国
For icount = 0 To UBound(poly_coordinates) Step 2: K% ?9 r2 S5 `% Y* e" S, V
       X_scale = Format(Int((poly_coordinates(icount) / 1000 + 0.00005) * 10000) / 10000, "0.0000" )  V  f- b6 _$ y* _
       Y_scale = Format(Int((poly_coordinates(icount + 1) / 1000 + 0.00005) * 10000) / 10000, "0.0000" )
: s8 N1 y5 J' K: P       'Z_scale = int((poly_coordinates(icount +2)+0.00005)*10000)/10000- b( F5 J% p2 X+ W  n
         if right(x_scale,3)="000" or right(y_scale,3)="000" then
# k  J: u* [: x9 w6 g- y. @3 {  q       ipoint = ipoint + 1

$ w+ Y3 _! B. ?0 u& W5 ?" h       'print #1,ipoint & " "&X_scale&" "&Y_scale&" "&Z_scale
# q! ]! m! g6 f" V5 V$ }; K8 {       Print #1, X_scale & "  " & Y_scale
8 _! X$ [  R0 y* M7 Z        endif
$ k, ]) l* }* @" ?6 L       Next icount
发表于 2009-11-27 09:36:55 | 显示全部楼层 来自: 中国浙江杭州
VBA入门是比较容易的 不知功能是否强大?
发表于 2009-12-2 17:26:32 | 显示全部楼层 来自: 中国广东广州

回复 11# woaishuijia 的帖子

非常非常感谢
发表于 2009-12-5 23:19:41 | 显示全部楼层 来自: 中国湖南湘潭
哎  我还是回家种田算了!!!
发表于 2009-12-14 12:03:59 | 显示全部楼层 来自: 中国上海
VBA的稳定性不好。也不`安全,无法保护自己的原程序。# A4 K. g$ N0 H( P
还是用ObjectARX吧。
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

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