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)# f) Y. }8 |, p- H/ ^, o
End Sub  |$ w' E! i5 \, g% w4 Z
7 r" `# C$ \+ F
Private Sub Save_Spline(splineObj As AcadSpline)
# `; n/ g. S9 k0 B5 ?: d4 b3 N- K  Close #1. ]2 Q4 h8 R2 W0 [
    Dim fitPoints As Variant
& D2 V. ~: _; ^& `6 Y& a    Dim icount As Long
% ~7 l; A) F% ]    Dim ipoint As Integer
# g' n( M% j) v( v' e    / c& A3 c# f$ D/ M# m
       fitPoints = splineObj.fitPoints: L9 O5 T+ ]8 o/ [$ \0 L
       Open "c:\test001.bri" For Append As #16 ~! a! D5 ], A1 d0 A/ ?# C5 i
       Print #1, "no__x___y___z"$ s, [. N# v. [9 T6 B  K  X
       ipoint = 0
+ n* m: I7 C5 H. d. M       For icount = 0 To UBound(fitPoints) Step 3) M$ t8 t, ^( {2 E; p
           ipoint = ipoint + 1
+ y- `; p9 R1 T3 _           X_scale = Int((fitPoints(icount) + 0.00005) * 10000) / 10000
! n! w, n+ C6 J2 {% ?; E           Y_scale = Int((fitPoints(icount + 1) + 0.00005) * 10000) / 10000& k. G2 V! r) A+ _! Y  Z
           Z_scale = Int((fitPoints(icount + 2) + 0.00005) * 10000) / 10000" z2 W# f4 i. b" y* a1 `
           'print #1,ipoint&" "&X_scale&" "&Y_sacle&" "&Z_sacle
( r6 d& K' g6 L' q# L7 V+ J; z           Print #1, X_scale & " , " & Y_scale & " , " & Z_scale
  u4 p( Z. V( s. C3 H         Next icount  k* J$ Z% ^2 t" A: \" `
    Close #1$ }1 M% K0 l, w/ M0 u
   
" X- q" f2 k  K8 P* X- ~1 b            
) g9 o* {; R; _1 N# B1 QEnd Sub
1 \9 n- c6 L1 o  aPrivate Sub Save_Pline(plineObj As AcadLWPolyline)
, ?8 e% D5 }/ ?0 w$ ^0 l  j  }  Close #1( `2 A! W, h  T# A5 e1 }
    Dim poly_coordinates As Variant
8 e$ x$ j8 o8 L, }    Dim icount As Long
0 P& w2 `  |. H( s    Dim ipoint As Integer# R7 k. [) U; _2 f5 }0 F
    poly_coordinates = plineObj.Coordinates2 e" A; ^+ @# S/ u. [# G- `0 K2 z
    Open "c:\test002.dri" For Append As #1
9 C  \' F2 }( ^+ c3 I# p1 k    'print #1 ,"no__x__y__z"
  \) r/ X% V9 Q7 C" G" v    Print #1, (UBound(poly_coordinates) + 1) / 2
0 T- F' Z1 P( k! X    ipoint = 0
, Z5 U% p; u$ r+ v- Z    For icount = 0 To UBound(poly_coordinates) Step 2: z: H* D5 p" g3 e: ]9 m( B2 n+ [, @) u
       ipoint = ipoint + 1
! o, n, s( \) ?       X_scale = Format(Int((poly_coordinates(icount) / 1000 + 0.00005) * 10000) / 10000, "0.0000")
) U$ r0 h, p9 j2 I5 G: b: i       Y_scale = Format(Int((poly_coordinates(icount + 1) / 1000 + 0.00005) * 10000) / 10000, "0.0000")* v( E. A( I. q  S: u8 _  C. S0 w
       'Z_scale = int((poly_coordinates(icount +2)+0.00005)*10000)/10000$ Y; n# Z3 J& X# o2 t0 `
       'print #1,ipoint & " "&X_scale&" "&Y_scale&" "&Z_scale1 ~( n6 o4 c* S8 {( _" @
       Print #1, X_scale & "  " & Y_scale
7 p( z4 g: Q$ _# h( J( F       Next icount
3 a7 n, _; [/ e* Q+ v& t( d( A       Print #1, 0
  q' z9 y2 ?- b$ ?       Print #1, " "
+ `+ E0 g- S2 W( s! ~$ R$ B' n    Close #1, }, j. b- |0 r( r* F
    3 h+ `7 O# C8 a- R
End Sub7 J2 Y& T) j4 m+ _
Public Sub zzt()
! {' K: X2 R) D0 ^- m! v   Dim selectObj As AcadSelectionSet, [  f% J$ ^$ J* ?
   Dim sumObj As Integer
. G) h& I% q4 H- b: g0 x   , t- O. E. b/ i$ U( @- ~7 l
   Set selectObj = ThisDrawing.ActiveSelectionSet' b# k" |1 M% V
   sumObj = selectObj.Count5 a0 E8 u8 q, e# o  U! N
   For i = 0 To sumObj - 1# P5 ?" v$ C( Z2 o
   If selectObj.Item(i).ObjectName = "AcDbSpline" Then4 W% u* D5 S% w; \$ D
      Save_Spline selectObj.Item(i)
/ `- j) [$ V; z* w! J. K% j   End If9 ^' v7 h- ^) h1 ~& {
     If selectObj.Item(i).ObjectName = "AcDbPolyline" Then" b8 U) ^  I2 z; Z0 h5 t) i1 {4 B
      Save_Pline selectObj.Item(i)
  L8 i( k2 j& K4 E! F- y) X   End If
0 I* Y. L6 x! E: H, [   2 @1 u$ ^0 o) U
   Next i: n' d' L1 b8 l/ C
   % Y& f" {  B1 h( R; g3 h+ F
   
+ R+ E2 y0 @, c" Q, GEnd Sub
& t4 \, _( O1 \9 p  L这是我读取CAD中多段线点坐标的源程序,请楼主帮忙看看,该在哪个地方加条件语句。: Y* C: {2 [' Y3 t. V* _; v- t
如下就是读取出来的一串有序的坐标点,我只需要小数点后第2位到第4位为0的坐标点输出(红色字体的数据)。请楼主帮忙
+ |8 h1 {& a! u1 v( P# a" [7 g" K6 u) H% D! G
    X         Y* D* G, ^$ c* U2 \
0.0000  0.00004 L0 t! N6 O, V" ?! `& h) }
20.6000  0.0000: c% p3 v' p" b' v( c
20.8013  0.0107
8 K8 E& S  ?- X21.0000  0.04261 ]) i% ]: h& {4 c3 d* d& y+ @
21.2563  0.1170
! ^: b! q* \8 H21.5000  0.2268* p" @1 u0 M  ^( P5 I, ^
21.7009  0.3515% @. G* \0 H# e8 a( K) d+ S
21.8845  0.5000; q& [+ j! z* C: `: M
21.9435  0.5565
6 _* S8 [6 V: f$ u22.0000  0.6155( r7 W6 F7 _; R3 V- b0 F) P
22.1487  0.7993
# h2 F# k6 U8 ?( B; f; v6 W22.2733  1.0000# `' c" j1 O; j$ H/ ^
22.3830  1.2435
- Z3 D# ?; J9 M1 e; H22.4574  1.5000
# G( b1 q* W. I# _: q8 b22.4893  1.6988" _7 f4 y) Y4 Q
22.5000  1.89857 o" j7 H5 B; G1 F% m0 l
22.5000  1.9000' `  k$ Q& b" _0 b; \
22.5000  27.0000
 楼主| 发表于 2009-11-22 06:44:22 | 显示全部楼层 来自: 中国
X_scale = Format(Int((poly_coordinates(icount) / 1000 + 0.00005) * 10000) / 10000, "0.0000" ). A0 Y" k; W% n+ ~8 D- o( u$ T# @: ~
       Y_scale = Format(Int((poly_coordinates(icount + 1) / 1000 + 0.00005) * 10000) / 10000, "0.0000" )7 L5 S- \  Y9 ^  y# P
       'Z_scale = int((poly_coordinates(icount +2)+0.00005)*10000)/10000
9 Y' h* F  C3 V1 K5 \2 p. ?% u$ V$ V        if right(x_scale,3)="000" or right(y_scale,3)="000" then
7 N) M& T1 n; W0 W' ^% q5 X4 ]       'print #1,ipoint & " "&X_scale&" "&Y_scale&" "&Z_scale
0 [( w1 ^* o& |4 `. k       Print #1, X_scale & "  " & Y_scale
/ I* L& L$ F' s0 e        endif
发表于 2009-11-22 20:52:08 | 显示全部楼层 来自: 中国浙江舟山

回复 170# woaishuijia 的帖子

谢谢版主,还有个问题顺便问下,新生成的点的数量如何统计呢。我现在运算出来还是老的数量。请版主帮帮我,自己试着改了几回都没效果
 楼主| 发表于 2009-11-22 23:35:25 | 显示全部楼层 来自: 中国
For icount = 0 To UBound(poly_coordinates) Step 2
' P8 j2 B" m$ _" y. a       X_scale = Format(Int((poly_coordinates(icount) / 1000 + 0.00005) * 10000) / 10000, "0.0000" )( m0 L& H0 l" R
       Y_scale = Format(Int((poly_coordinates(icount + 1) / 1000 + 0.00005) * 10000) / 10000, "0.0000" )
& ~8 s) R3 Q0 @       'Z_scale = int((poly_coordinates(icount +2)+0.00005)*10000)/10000  V8 H6 d7 R2 g/ Y6 i  B0 e
         if right(x_scale,3)="000" or right(y_scale,3)="000" then5 g$ O, D( G) J0 r& g
       ipoint = ipoint + 1

( {+ E6 l  H- W6 c       'print #1,ipoint & " "&X_scale&" "&Y_scale&" "&Z_scale8 D6 ]2 A  L/ d
       Print #1, X_scale & "  " & Y_scale
, O" A2 l6 ^; c$ U  S; O! f6 y        endif% r" {* o4 ~/ 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的稳定性不好。也不`安全,无法保护自己的原程序。
4 O, q4 q3 x* j- D: b还是用ObjectARX吧。
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

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