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)1 ^9 h+ P' z* j+ I6 o! q; X2 Z. `
End Sub# p5 d2 R5 e  a

" w3 s+ Z5 J" V* A& N8 z3 ZPrivate Sub Save_Spline(splineObj As AcadSpline)
$ b4 i- P  ]0 j4 q6 \  Close #1: ]7 H6 c3 K2 N0 C; S
    Dim fitPoints As Variant% X% n' l/ `. w- J1 [- H4 |
    Dim icount As Long5 U2 h) b0 m9 w4 U1 ~# q. O& u
    Dim ipoint As Integer+ t" \3 N! Q; W8 M8 Y4 a* G
   
( @, R: T4 E; R" X. v       fitPoints = splineObj.fitPoints
$ q2 z1 s  @( i+ p: u+ ^5 A1 Y       Open "c:\test001.bri" For Append As #1
; @3 Y6 _% U1 V- F1 y$ O$ T1 Q       Print #1, "no__x___y___z"
! d  t, w0 Z" X, q1 N       ipoint = 0( S9 D  [3 J( ^8 Q0 I' x
       For icount = 0 To UBound(fitPoints) Step 3) f4 U5 ?( P7 [% k+ y. Y
           ipoint = ipoint + 1! _7 K& {2 p! h: @, n" H
           X_scale = Int((fitPoints(icount) + 0.00005) * 10000) / 10000" H8 o% Y( Y9 L, C3 K
           Y_scale = Int((fitPoints(icount + 1) + 0.00005) * 10000) / 10000
& s& v; A* X6 p# K           Z_scale = Int((fitPoints(icount + 2) + 0.00005) * 10000) / 10000
( A) [7 ~6 X. s  D7 C           'print #1,ipoint&" "&X_scale&" "&Y_sacle&" "&Z_sacle
% Z2 j8 ~4 _- j           Print #1, X_scale & " , " & Y_scale & " , " & Z_scale' I9 p& F8 r) p0 _' |5 N! ^  K
         Next icount
# \: w: t$ O. D  B; j) Z9 U    Close #1
- v1 C6 K: [. m1 ?9 ]   
4 o4 V1 ]8 z3 @; [+ P" I              Y2 e9 Z; }$ F
End Sub8 T( v+ _1 ^* O- q: \- O; a" O3 r
Private Sub Save_Pline(plineObj As AcadLWPolyline)- Y3 E+ z) n: ^6 k( u5 B* b$ b
  Close #16 h# X6 C, b3 {* p, i& Q
    Dim poly_coordinates As Variant
" Y) T4 ^- G  h# A5 I  j    Dim icount As Long# B9 c' m1 k: |" z9 J$ ^. ]9 z( T. z- ?
    Dim ipoint As Integer
- l8 z4 z, K7 I. s    poly_coordinates = plineObj.Coordinates
3 O7 A$ x: g- r* x9 t    Open "c:\test002.dri" For Append As #1
; ]3 Y4 N$ g4 {    'print #1 ,"no__x__y__z"! ~  {/ P1 d0 @
    Print #1, (UBound(poly_coordinates) + 1) / 2
" e9 Z7 \9 Y: ]    ipoint = 0
! f4 o# U6 e+ ?: G8 C. ]- w    For icount = 0 To UBound(poly_coordinates) Step 2
5 m  ^& a# R7 r: a" p4 h4 [       ipoint = ipoint + 1
, Q8 w- N7 v" W+ o+ k/ b       X_scale = Format(Int((poly_coordinates(icount) / 1000 + 0.00005) * 10000) / 10000, "0.0000")0 Y. s/ `( `* R! i" G. k; `( x8 o
       Y_scale = Format(Int((poly_coordinates(icount + 1) / 1000 + 0.00005) * 10000) / 10000, "0.0000")8 q3 z0 h  \6 F* l
       'Z_scale = int((poly_coordinates(icount +2)+0.00005)*10000)/10000
, D5 Y7 x3 E- a. D       'print #1,ipoint & " "&X_scale&" "&Y_scale&" "&Z_scale
& `. I0 {: e$ c- g3 ^       Print #1, X_scale & "  " & Y_scale
% z, \! X$ `3 t) Q( F# g9 y       Next icount2 z& W0 a$ ~" f. a
       Print #1, 0
6 D0 X# V! s9 E* i       Print #1, " "9 }6 {9 g6 G1 B6 e! A
    Close #17 U+ U4 Z" P- f9 A; d
   
7 X5 D" V8 [" ?4 s" E4 AEnd Sub% I$ \7 ?  u! d3 |
Public Sub zzt()1 u% w- U- n3 O" Y5 v: B1 Z/ I8 T
   Dim selectObj As AcadSelectionSet
4 W, f: t- g0 I, r   Dim sumObj As Integer0 R, @  |% J+ [/ B
   + e. z6 E- _0 j1 T  E
   Set selectObj = ThisDrawing.ActiveSelectionSet
5 H( S% Q. E+ d+ V/ v, S* S: l' V   sumObj = selectObj.Count
5 D& X/ Y: W% ?  ^  u, m   For i = 0 To sumObj - 1: t; {# S& i; g& c; f7 v* Q2 B
   If selectObj.Item(i).ObjectName = "AcDbSpline" Then
/ i1 {7 E/ o  H7 \      Save_Spline selectObj.Item(i)
: q9 D( f4 A5 _/ v   End If
# w+ x/ q, O& a) s9 i1 `& ^     If selectObj.Item(i).ObjectName = "AcDbPolyline" Then
& F, Z* M# O' r3 p! G9 _4 q' b" _      Save_Pline selectObj.Item(i)/ x. T6 `2 N7 d7 P* }1 V, f8 N
   End If
+ U, y% r# O* u6 ^  ~   
. z/ E3 F9 G* l- b2 E- |4 R8 X9 R   Next i
7 s/ Z) X" f* D, k9 T   
/ N! y2 {! ~9 e9 c# I6 r5 C   
- T) F1 K$ h- JEnd Sub
( o1 z" v0 k8 R* f( K# K这是我读取CAD中多段线点坐标的源程序,请楼主帮忙看看,该在哪个地方加条件语句。9 R% s6 \$ i) N: {- p8 t* d3 {
如下就是读取出来的一串有序的坐标点,我只需要小数点后第2位到第4位为0的坐标点输出(红色字体的数据)。请楼主帮忙
( p7 p$ h) r& i
- W2 T0 e- H0 @( Z8 Y6 R    X         Y1 Z, J2 g' h/ \# d
0.0000  0.0000
, A! T  _; E$ X9 r$ z20.6000  0.0000/ o$ b$ V% N0 a* `4 n
20.8013  0.0107
8 U% L/ I3 @0 q6 I21.0000  0.0426
* n2 z$ b* R. M/ ?! i, p$ e
21.2563  0.1170
! Y+ W6 \- P6 y' l2 Z! m21.5000  0.2268
: i7 V; t2 U' t* }2 n4 J0 k4 e6 I21.7009  0.3515
0 V4 U5 Q+ }, i- M. X' e% v21.8845  0.5000+ W9 d: V* y' q3 k. R+ e8 ?, s
21.9435  0.5565, m2 G0 p" Y9 T; Z/ i/ S# Z4 T
22.0000  0.6155
  F2 {0 ^% Q* D& T22.1487  0.7993: c9 c: [, \  T" r( C
22.2733  1.00006 G; w# ~4 p# v* q! T! w
22.3830  1.2435' R! X# ^: z7 h) O' b( ?" \, |
22.4574  1.5000% `: h5 z% L* ]$ ~0 E
22.4893  1.6988: A  f/ @9 r1 M$ {3 @! N
22.5000  1.8985
1 J$ Z0 N0 s$ C% b; @) b22.5000  1.9000
/ a8 u+ A0 R# O4 D& @0 T% ]" ^0 q22.5000  27.0000
 楼主| 发表于 2009-11-22 06:44:22 | 显示全部楼层 来自: 中国
X_scale = Format(Int((poly_coordinates(icount) / 1000 + 0.00005) * 10000) / 10000, "0.0000" )+ k1 B, i  v+ G
       Y_scale = Format(Int((poly_coordinates(icount + 1) / 1000 + 0.00005) * 10000) / 10000, "0.0000" )
* M# ~5 T4 C8 K; p       'Z_scale = int((poly_coordinates(icount +2)+0.00005)*10000)/10000
  ~1 R# Y$ f6 @% v4 n4 w; |2 H. B        if right(x_scale,3)="000" or right(y_scale,3)="000" then
3 i! X2 p" j* b       'print #1,ipoint & " "&X_scale&" "&Y_scale&" "&Z_scale: P& l9 L: s$ }: [1 I
       Print #1, X_scale & "  " & Y_scale
0 J4 A! w" Q4 H5 ~6 D* Z: j        endif
发表于 2009-11-22 20:52:08 | 显示全部楼层 来自: 中国浙江舟山

回复 170# woaishuijia 的帖子

谢谢版主,还有个问题顺便问下,新生成的点的数量如何统计呢。我现在运算出来还是老的数量。请版主帮帮我,自己试着改了几回都没效果
 楼主| 发表于 2009-11-22 23:35:25 | 显示全部楼层 来自: 中国
For icount = 0 To UBound(poly_coordinates) Step 2
6 ?  R, H" B! y( p; k5 Y* R( u       X_scale = Format(Int((poly_coordinates(icount) / 1000 + 0.00005) * 10000) / 10000, "0.0000" )
6 i- K+ W0 j: I( ?       Y_scale = Format(Int((poly_coordinates(icount + 1) / 1000 + 0.00005) * 10000) / 10000, "0.0000" )
+ R* `/ v! \" g- j$ Y0 _, r: O/ m       'Z_scale = int((poly_coordinates(icount +2)+0.00005)*10000)/10000
6 Z7 y' K( [) I9 I) b         if right(x_scale,3)="000" or right(y_scale,3)="000" then+ D3 L5 T% {5 ]# l" J- H1 j
       ipoint = ipoint + 1

5 n# z6 |; T0 M: w* O* y; u       'print #1,ipoint & " "&X_scale&" "&Y_scale&" "&Z_scale
+ G0 H; o3 V$ ~& P       Print #1, X_scale & "  " & Y_scale
! `& _# [4 ?  j3 C" b$ f        endif0 ?1 C4 v, V% o) [  ?
       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的稳定性不好。也不`安全,无法保护自己的原程序。
" i6 Y9 T; A/ C' q6 B还是用ObjectARX吧。
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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