QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

楼主: 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)* E* K* F& \- b! A+ X& a
End Sub
: S9 H  N" n1 x- I. r8 ]8 p4 @8 T  h! s# X2 }
Private Sub Save_Spline(splineObj As AcadSpline)+ n" W9 q5 ]4 t4 ^, u8 l& M
  Close #1  t0 j1 ]3 r4 L
    Dim fitPoints As Variant
& Z2 q9 Z: \6 I# n8 L$ b" n    Dim icount As Long
4 F7 ], ]: m+ O$ d" L    Dim ipoint As Integer
; }# C& K  A" T: \2 F9 s8 T    4 E$ t& P3 A5 F/ L3 O
       fitPoints = splineObj.fitPoints: X) A3 g# g5 h/ h1 M  H1 w# ]9 f
       Open "c:\test001.bri" For Append As #12 ^, w9 p5 }0 `4 \
       Print #1, "no__x___y___z"6 K8 ]4 M; [$ ^/ Q' {6 a5 u! x
       ipoint = 0. [/ j2 e4 L5 ^8 s
       For icount = 0 To UBound(fitPoints) Step 3
2 v3 \8 i. c# V/ W. x8 U           ipoint = ipoint + 1. O4 \/ J( s7 [1 P- z
           X_scale = Int((fitPoints(icount) + 0.00005) * 10000) / 10000" N# d+ o( z7 a5 y9 Z+ J) W
           Y_scale = Int((fitPoints(icount + 1) + 0.00005) * 10000) / 10000
' J. F( y# W. s) z) W! q& k           Z_scale = Int((fitPoints(icount + 2) + 0.00005) * 10000) / 10000
& o) s( r6 I) u' @  l           'print #1,ipoint&" "&X_scale&" "&Y_sacle&" "&Z_sacle+ T, t* h# X5 G$ M6 T
           Print #1, X_scale & " , " & Y_scale & " , " & Z_scale
4 a7 p  M; ]* N# ]  \+ w. [4 z         Next icount
# a6 u5 L5 }5 @# q- I( e    Close #1
/ a4 A* J3 R% Q4 |( F" i   
" z% ^8 {6 h- U" w- f( W# ^            6 B, V6 R9 D& q
End Sub
5 G. p, t# z; u0 n1 n' Z$ TPrivate Sub Save_Pline(plineObj As AcadLWPolyline). F* N+ b7 U* [( e. e8 r$ P9 I0 X
  Close #1
2 G; X( R8 N6 x+ \3 ]; t, _# q    Dim poly_coordinates As Variant
6 L2 l2 ]6 Q; e: o# z" r/ g    Dim icount As Long
/ Z: s, I. s! ?) {    Dim ipoint As Integer4 ]$ l2 X9 X7 V. I+ _
    poly_coordinates = plineObj.Coordinates* J# f1 {; d( X6 O
    Open "c:\test002.dri" For Append As #1
* [9 T  A/ x+ d    'print #1 ,"no__x__y__z"
7 g3 Z% L& x( m( {& A# F6 G0 M    Print #1, (UBound(poly_coordinates) + 1) / 2
5 f9 A4 H/ `0 H* ^' ]    ipoint = 0' z8 F8 \' ^1 T  ]; R9 t) E
    For icount = 0 To UBound(poly_coordinates) Step 2
8 ~- B$ @% X# l0 J$ _0 U( G       ipoint = ipoint + 1
; {4 e: l% W" T3 ~6 ]       X_scale = Format(Int((poly_coordinates(icount) / 1000 + 0.00005) * 10000) / 10000, "0.0000")
% }4 _; h. |( a6 |# _       Y_scale = Format(Int((poly_coordinates(icount + 1) / 1000 + 0.00005) * 10000) / 10000, "0.0000")
- f/ Q3 J! h1 X# @' Q: h8 X       'Z_scale = int((poly_coordinates(icount +2)+0.00005)*10000)/10000) ^+ E) C" J) L" A4 X' s) L
       'print #1,ipoint & " "&X_scale&" "&Y_scale&" "&Z_scale
4 d2 w. B6 Q5 p: \9 I# s       Print #1, X_scale & "  " & Y_scale2 Q( i4 @5 Z) l; [8 C
       Next icount
9 ?3 X1 ]& z' J3 i( c       Print #1, 0. H1 Y! T  w0 c
       Print #1, " "
3 X1 f7 F0 t2 G6 \2 ]# G/ Q6 s    Close #1
- ^/ d* S% ?& C0 D8 ?9 k! K# [: D    - q9 A" V' Y- [9 v
End Sub
$ I6 T% l) b, e& rPublic Sub zzt()' ?4 h- \) V1 F0 r4 [1 N
   Dim selectObj As AcadSelectionSet; m1 @. S4 n: h* I- t' Z) |. z. r
   Dim sumObj As Integer6 x/ B2 M, f- ]1 R" l2 i
   $ p6 ~* [7 s$ o' u$ \: Q
   Set selectObj = ThisDrawing.ActiveSelectionSet( d6 [& A+ A, {$ X2 I( g* U
   sumObj = selectObj.Count
  R" c( V7 Q5 W; a( c8 }) J   For i = 0 To sumObj - 1
; D9 b* R/ n; F6 l& q9 O   If selectObj.Item(i).ObjectName = "AcDbSpline" Then
( T" F, F; D4 x, y      Save_Spline selectObj.Item(i)
6 k% N  G; Y* [   End If
/ H( Y+ y9 A# H     If selectObj.Item(i).ObjectName = "AcDbPolyline" Then
+ y6 M& o: |( {% W      Save_Pline selectObj.Item(i)
8 Q5 i+ R8 v/ T" h4 a) d- @2 C   End If, Q8 S8 o& Y7 o0 i- q  u
   6 i1 U; G0 C" h0 e$ H5 ]% `* {
   Next i
) L, `& O" ~8 `. T" S# _   
3 Z1 O0 x' {% {) o3 r   5 s& _* I9 |; Q$ F5 \
End Sub% h3 H7 }# R5 G7 ]6 z) k4 D3 J  x
这是我读取CAD中多段线点坐标的源程序,请楼主帮忙看看,该在哪个地方加条件语句。
' K! f* [* y+ j: Z8 J+ l如下就是读取出来的一串有序的坐标点,我只需要小数点后第2位到第4位为0的坐标点输出(红色字体的数据)。请楼主帮忙
& G+ @4 ?  n! O
! e! Q% G6 X$ P; ~# b) l7 l8 d& {    X         Y. _/ y' S3 b3 O0 M
0.0000  0.00001 O, k- e# s5 v: E
20.6000  0.0000
+ W0 ]+ y; [) e+ G! Z& U2 k" g2 c  Y
20.8013  0.01076 Q- o* A. A$ t* N3 Q
21.0000  0.0426
' r2 W5 ]5 H9 W" ~& D5 p+ P: N6 m
21.2563  0.1170+ n; {* G0 w/ H# G
21.5000  0.2268
3 p/ J' z0 y8 Y2 Y. L2 c4 @' b21.7009  0.35159 K  s  a1 a$ v& a# n
21.8845  0.5000  L- p" ]4 R9 D- U" O; C6 b. S
21.9435  0.5565
3 h& M" }9 X8 d3 U; {- Q3 w; l22.0000  0.6155
' ^  w% g. m% Q0 g22.1487  0.7993
6 }% Q( H* z! i8 w9 _: z3 q22.2733  1.0000: l. d4 e  ?( p" m# \) B
22.3830  1.2435
5 N2 r' G' \# H7 u. G' p1 |22.4574  1.5000
) O: g7 u$ u& k: u( {3 V, y22.4893  1.6988
; b7 ]+ z- d/ k8 m22.5000  1.8985* J1 s6 |( S" z$ C+ z7 G
22.5000  1.90007 _! r2 q  k+ {5 {* Y& b) Q1 W
22.5000  27.0000
 楼主| 发表于 2009-11-22 06:44:22 | 显示全部楼层 来自: 中国
X_scale = Format(Int((poly_coordinates(icount) / 1000 + 0.00005) * 10000) / 10000, "0.0000" )5 \6 m4 A# o& ?4 ~  U- c
       Y_scale = Format(Int((poly_coordinates(icount + 1) / 1000 + 0.00005) * 10000) / 10000, "0.0000" )% l0 T; v. C) G9 _, a
       'Z_scale = int((poly_coordinates(icount +2)+0.00005)*10000)/10000
, ^( _2 @$ l: F        if right(x_scale,3)="000" or right(y_scale,3)="000" then
: T' p# X9 s8 ?( S) B       'print #1,ipoint & " "&X_scale&" "&Y_scale&" "&Z_scale! |7 E% d% v5 F/ T
       Print #1, X_scale & "  " & Y_scale
! k3 R% i$ o" M: e8 H* d+ N$ 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
5 C, W3 q/ U5 ^       X_scale = Format(Int((poly_coordinates(icount) / 1000 + 0.00005) * 10000) / 10000, "0.0000" )
. B2 K4 d) Q5 C# p1 P: p       Y_scale = Format(Int((poly_coordinates(icount + 1) / 1000 + 0.00005) * 10000) / 10000, "0.0000" ): [9 B5 R; f4 h8 I) G
       'Z_scale = int((poly_coordinates(icount +2)+0.00005)*10000)/10000
. b9 c; U; F6 k( k6 P; i2 E/ S         if right(x_scale,3)="000" or right(y_scale,3)="000" then
% w1 P2 J1 M0 A9 V0 ~  J9 u       ipoint = ipoint + 1

. ~# b+ R& L8 R; ]" F7 X       'print #1,ipoint & " "&X_scale&" "&Y_scale&" "&Z_scale
+ E3 r. w7 O! y5 u9 K0 R       Print #1, X_scale & "  " & Y_scale
, [* V: ?' W" q7 i  d! n        endif
4 [7 L( v# R5 @. V2 l. A       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的稳定性不好。也不`安全,无法保护自己的原程序。# e: S- u& d2 N8 \# {4 h
还是用ObjectARX吧。
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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