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)6 s3 o, V; {3 G
End Sub
) \' O; F2 `. r/ u, L$ x* i$ W
6 z/ B8 }6 ^' m4 |: G! FPrivate Sub Save_Spline(splineObj As AcadSpline)5 |8 M( R2 w$ d  D  \! g1 h
  Close #1
' n% U6 E; d6 e8 O! M6 u    Dim fitPoints As Variant
1 F4 @% I7 `$ g    Dim icount As Long
% ~- ?* _( ~9 M4 J1 o1 N    Dim ipoint As Integer5 n: G# D) j3 X# L
   
; f" m# S1 A3 D5 K2 u7 \9 d       fitPoints = splineObj.fitPoints
3 r+ J2 K5 X: A, g# g4 N1 G$ g       Open "c:\test001.bri" For Append As #13 T4 j1 m2 W( C) x' ~2 B/ F6 s& }
       Print #1, "no__x___y___z"
1 p" O& H/ x) ~- O+ D( k) E6 \       ipoint = 0
& V- y6 V4 `9 w" o2 k* M, a       For icount = 0 To UBound(fitPoints) Step 3; M1 G  l4 ]3 g" Z
           ipoint = ipoint + 1
2 q( {2 O  O1 }) b- B' d           X_scale = Int((fitPoints(icount) + 0.00005) * 10000) / 10000) k9 l: O7 B5 n6 O$ p7 B' g
           Y_scale = Int((fitPoints(icount + 1) + 0.00005) * 10000) / 10000. O7 m/ P. b7 p5 r0 z' j
           Z_scale = Int((fitPoints(icount + 2) + 0.00005) * 10000) / 10000' l3 }5 A- `6 g( d+ m9 _" F+ C
           'print #1,ipoint&" "&X_scale&" "&Y_sacle&" "&Z_sacle# Z4 @9 d: K  c9 U# {+ ]! i
           Print #1, X_scale & " , " & Y_scale & " , " & Z_scale
  M9 k0 ?/ r# ~! [& u# b- A1 Q         Next icount
* h; u- t0 o) s" e( o* E    Close #1
) e' I$ t0 X1 N( a- H3 e2 B    ( g4 G% w* m. c0 G
            $ e$ X4 q2 R7 x" ]( }
End Sub) K/ N; Z0 X$ u
Private Sub Save_Pline(plineObj As AcadLWPolyline)1 R) d1 h" \0 ^  H, }) p! e
  Close #1
7 U( K8 z; L; G  |    Dim poly_coordinates As Variant
# y+ N4 J5 h7 y3 X% S- H+ Y! o    Dim icount As Long
8 \' M. p  V8 l& N( B    Dim ipoint As Integer0 Q" |% ~( g  R2 n2 [* q
    poly_coordinates = plineObj.Coordinates( L) R  v: p" F9 A5 K3 N
    Open "c:\test002.dri" For Append As #1
; \& r5 V3 q% G; {; [  Q* s    'print #1 ,"no__x__y__z"+ j0 k0 m  m- l( H# N# e+ ^- q& W
    Print #1, (UBound(poly_coordinates) + 1) / 2
, T+ N, B7 D4 U+ }% j! E& E# l/ J  q    ipoint = 03 r! c0 z* Q: s# ?0 o
    For icount = 0 To UBound(poly_coordinates) Step 2
5 s5 a5 ]% X# M' r       ipoint = ipoint + 12 {" t: r- k; g5 u+ ~1 F  P2 R
       X_scale = Format(Int((poly_coordinates(icount) / 1000 + 0.00005) * 10000) / 10000, "0.0000")
! y( x$ d) L( u       Y_scale = Format(Int((poly_coordinates(icount + 1) / 1000 + 0.00005) * 10000) / 10000, "0.0000")3 R( T4 e1 @: B$ m( V
       'Z_scale = int((poly_coordinates(icount +2)+0.00005)*10000)/100004 I5 A. T& n. {  z' ?
       'print #1,ipoint & " "&X_scale&" "&Y_scale&" "&Z_scale9 R3 o0 |# Q9 a9 D+ ?
       Print #1, X_scale & "  " & Y_scale
' J1 e7 e. F6 |/ V" V  L# r       Next icount
# v$ L# P% f7 S* n       Print #1, 0
0 J4 i) H  D7 K7 k3 `7 X- j       Print #1, " "5 {$ b! e; j) J8 q& G0 u
    Close #13 b% M$ [) r% [' ?) f+ A
   
1 P: m0 c! F3 y# MEnd Sub
% @2 M8 v. P0 A8 KPublic Sub zzt()1 @* N: a+ I$ q  l# h! }- c
   Dim selectObj As AcadSelectionSet, x) C; Z2 H3 P3 {0 r3 \
   Dim sumObj As Integer
9 e& k1 V6 s1 P! B3 j+ [' ]. Y! D& R   
6 z3 M8 M6 w3 O9 z. p% F1 a   Set selectObj = ThisDrawing.ActiveSelectionSet
: Y0 N( Z/ U" w: C1 L   sumObj = selectObj.Count) {! }9 Q8 c& O! \
   For i = 0 To sumObj - 1
7 w6 E2 z' V# k; i   If selectObj.Item(i).ObjectName = "AcDbSpline" Then# T5 H; o" M% z) i6 p1 z
      Save_Spline selectObj.Item(i)
8 M( W1 m! T4 h( K   End If- W* D) i/ W- w4 b% G
     If selectObj.Item(i).ObjectName = "AcDbPolyline" Then/ P- B$ f8 ^. T  l$ G! f
      Save_Pline selectObj.Item(i)
4 L( `& F) M6 E: _! w! {$ O9 Y   End If. n% r7 W: \+ Q. Y4 p1 \9 K
   
; f3 g, D0 a6 B' G+ X( n   Next i0 C3 |$ J# |* M" A! n6 b+ X( y+ K
   
  }3 c* ]0 i" ?1 U9 C/ d, R2 E   
. Q8 I/ J8 s+ e& O. YEnd Sub8 t+ a" E2 F9 S4 f4 g
这是我读取CAD中多段线点坐标的源程序,请楼主帮忙看看,该在哪个地方加条件语句。
0 ]1 W  U7 t( M8 s. V如下就是读取出来的一串有序的坐标点,我只需要小数点后第2位到第4位为0的坐标点输出(红色字体的数据)。请楼主帮忙
( b; G* d% C+ }2 w$ a7 @2 }7 E/ v
( E# {! d0 i# c2 q$ Z7 o    X         Y
9 s3 @: c* U; F* S+ h$ c: _0.0000  0.0000
  i, y  J, n* F" h' w; r20.6000  0.0000
4 ~" A* y5 K) G, a# L
20.8013  0.0107
# B0 ^/ x, f4 B. H4 [3 p21.0000  0.0426; @* Z; i6 W2 d# X
21.2563  0.1170
) {  z- v: L* Q! L' K21.5000  0.2268
1 [& K% D2 b; X21.7009  0.35153 L9 @+ C1 G# {/ R( i5 U! b
21.8845  0.5000
+ E( L* y5 q, p# q0 p21.9435  0.5565. c1 p+ v6 a. K8 ~: I# a1 K% n0 a
22.0000  0.61556 S" u$ i, r4 w; h  E- o2 \) z
22.1487  0.7993
7 z; \: P9 Y: R" [22.2733  1.0000
8 X( B& }  y. K% Q0 }% y0 ^22.3830  1.24359 {4 r/ y4 C; L
22.4574  1.50004 e! [0 A8 [% P; O  T
22.4893  1.6988
6 F' H* Q( [+ B( W0 w4 L5 v. c& G  H22.5000  1.8985
" [4 k2 M) S& F, |) Z. `' [+ U; P22.5000  1.9000
6 m0 Z* a/ Z3 y22.5000  27.0000
 楼主| 发表于 2009-11-22 06:44:22 | 显示全部楼层 来自: 中国
X_scale = Format(Int((poly_coordinates(icount) / 1000 + 0.00005) * 10000) / 10000, "0.0000" )& U) K0 A! Z1 x" ?
       Y_scale = Format(Int((poly_coordinates(icount + 1) / 1000 + 0.00005) * 10000) / 10000, "0.0000" )
( g! l+ i2 S- v, ?: ~$ ]9 N5 T       'Z_scale = int((poly_coordinates(icount +2)+0.00005)*10000)/10000$ I8 n" n6 q5 f3 g+ S
        if right(x_scale,3)="000" or right(y_scale,3)="000" then
+ i+ t! x9 q7 n" I       'print #1,ipoint & " "&X_scale&" "&Y_scale&" "&Z_scale
" L+ U/ \  K, g$ r2 S: R$ d       Print #1, X_scale & "  " & Y_scale+ v( Y5 h* {1 K) U  n4 }
        endif
发表于 2009-11-22 20:52:08 | 显示全部楼层 来自: 中国浙江舟山

回复 170# woaishuijia 的帖子

谢谢版主,还有个问题顺便问下,新生成的点的数量如何统计呢。我现在运算出来还是老的数量。请版主帮帮我,自己试着改了几回都没效果
 楼主| 发表于 2009-11-22 23:35:25 | 显示全部楼层 来自: 中国
For icount = 0 To UBound(poly_coordinates) Step 2; I) L6 z+ l6 U) b* |/ j% {
       X_scale = Format(Int((poly_coordinates(icount) / 1000 + 0.00005) * 10000) / 10000, "0.0000" )  V) B4 e& q& K! {$ a# g
       Y_scale = Format(Int((poly_coordinates(icount + 1) / 1000 + 0.00005) * 10000) / 10000, "0.0000" )1 w1 j& R% v4 p' J
       'Z_scale = int((poly_coordinates(icount +2)+0.00005)*10000)/10000
0 S1 T1 m1 a+ c- [- ~2 k; X8 g6 Z         if right(x_scale,3)="000" or right(y_scale,3)="000" then
& ?9 M5 r  ]3 K% I       ipoint = ipoint + 1
3 A6 P+ J3 N: z
       'print #1,ipoint & " "&X_scale&" "&Y_scale&" "&Z_scale
0 j( r* w/ M' Q9 V       Print #1, X_scale & "  " & Y_scale
1 B6 A. h" W, T, W7 Y        endif
: G9 ]$ `5 x- A3 h' r% l; V       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的稳定性不好。也不`安全,无法保护自己的原程序。& Z: a4 i; l0 t* ?9 }
还是用ObjectARX吧。
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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