QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
goto3d 说: 版主微信号:caivin811031;还未入三维微信群的小伙伴,速度加
2022-07-04
全站
goto3d 说: 此次SW竞赛获奖名单公布如下,抱歉晚了,版主最近太忙:一等奖:塔山817;二等奖:a9041、飞鱼;三等奖:wx_dfA5IKla、xwj960414、bzlgl、hklecon;请以上各位和版主联系,领取奖金!!!
2022-03-11
楼主: 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)# X. H! n' K7 d( s4 ^
End Sub
; r& X2 D' m$ i, I/ ^- x  w( {9 E& t" U' x: [7 I8 ?3 l8 ]2 {& }
Private Sub Save_Spline(splineObj As AcadSpline)
! s. H  V9 Q. o' ]; [4 c4 m  Close #18 Z, w0 G* t; u0 W0 u
    Dim fitPoints As Variant
$ r9 A8 d5 K- f( V    Dim icount As Long
' X) e4 Q+ o; I4 a7 h    Dim ipoint As Integer
5 c: v  w2 N* M    5 f/ [5 O8 X0 n5 f9 e
       fitPoints = splineObj.fitPoints
+ A" Z7 R. u% E! D7 |3 q       Open "c:\test001.bri" For Append As #1
+ E7 v+ e$ O  j/ o, _5 X       Print #1, "no__x___y___z"0 o( ]% y- B# U
       ipoint = 0
! c0 @6 M& J  M! V' V& b       For icount = 0 To UBound(fitPoints) Step 3. o9 G8 e1 k7 u+ T6 G
           ipoint = ipoint + 1
9 m6 P0 [, J3 j# y+ w           X_scale = Int((fitPoints(icount) + 0.00005) * 10000) / 10000
  p4 V7 @& _- c7 S           Y_scale = Int((fitPoints(icount + 1) + 0.00005) * 10000) / 10000
+ j7 s7 S4 V6 i5 ]0 ~# ]           Z_scale = Int((fitPoints(icount + 2) + 0.00005) * 10000) / 10000- v2 h# ~* ~- K# O4 f
           'print #1,ipoint&" "&X_scale&" "&Y_sacle&" "&Z_sacle( P: s2 @- a) O; ], @. W  [% e8 z
           Print #1, X_scale & " , " & Y_scale & " , " & Z_scale
! r: i0 |; R5 V  g4 P! _* S% t         Next icount
- m8 ~1 T; j7 g" `3 x# J    Close #1
+ P+ Z4 J1 `% D   
8 d5 K" X8 O; A$ ]% P8 ~            # g; i% ^; D  }0 s7 b' K; Z
End Sub3 P1 Q9 Z8 I7 P
Private Sub Save_Pline(plineObj As AcadLWPolyline)
% q, r# z9 p4 E3 T  ]  Close #1- x8 F" ~' j, g$ I/ L* v
    Dim poly_coordinates As Variant
1 M# X% a* W+ ~& o( I    Dim icount As Long+ E% ^* |$ q) Z2 [
    Dim ipoint As Integer0 c) D  c" Q& Y. R
    poly_coordinates = plineObj.Coordinates3 z& V+ I! z0 c
    Open "c:\test002.dri" For Append As #1: ]( C  ]$ _- \' F0 ?& G
    'print #1 ,"no__x__y__z"- n$ D% t" i0 h* d: e4 J
    Print #1, (UBound(poly_coordinates) + 1) / 2' ~) u  b: x1 s3 B$ _9 u
    ipoint = 0+ h; @4 r  u$ P# z# F8 x2 m
    For icount = 0 To UBound(poly_coordinates) Step 2+ f2 R/ x7 V2 x6 @
       ipoint = ipoint + 1
1 s9 T9 b8 N! u1 p( h* p       X_scale = Format(Int((poly_coordinates(icount) / 1000 + 0.00005) * 10000) / 10000, "0.0000")
3 k5 }$ C6 a$ w! k: X       Y_scale = Format(Int((poly_coordinates(icount + 1) / 1000 + 0.00005) * 10000) / 10000, "0.0000")0 X/ L  g& q- k& q4 a+ `
       'Z_scale = int((poly_coordinates(icount +2)+0.00005)*10000)/100007 l) D( @, \5 o' ~2 G
       'print #1,ipoint & " "&X_scale&" "&Y_scale&" "&Z_scale
! K/ e2 c* J9 x$ u       Print #1, X_scale & "  " & Y_scale; r7 O+ Z7 v# }/ h! T2 S3 u$ G
       Next icount! ]) B" E8 t6 [" b% K. [3 a* h
       Print #1, 04 J6 T  e2 Q5 j) l5 v4 }8 F" h
       Print #1, " "6 ^  y# V$ D" Q2 t' g3 T; S
    Close #1* N1 B$ z  B9 l* c  ]
    0 r3 T# i& U- R9 b. K9 G
End Sub
. B) C# j) m! [6 E9 I) T' {Public Sub zzt()
" I+ c+ L. }7 @6 d0 a: [' z7 _   Dim selectObj As AcadSelectionSet7 c3 n+ Q4 ?/ ?, g+ s/ R) I( [3 {
   Dim sumObj As Integer+ q: U" i( t3 y( m; b
   - j( T4 T' _- O
   Set selectObj = ThisDrawing.ActiveSelectionSet
0 [9 Q  y5 G! x9 g) r, y   sumObj = selectObj.Count
9 r+ F9 i5 T. J7 z   For i = 0 To sumObj - 1
( ?( B  ]7 j2 N! p5 G$ d- R' G2 `   If selectObj.Item(i).ObjectName = "AcDbSpline" Then3 h! z7 T' a* P
      Save_Spline selectObj.Item(i)
2 a5 ~, T1 A, G* Z   End If  X7 Y( Z9 o7 X0 P/ B& D
     If selectObj.Item(i).ObjectName = "AcDbPolyline" Then
* P0 x6 H( W: H( `; A7 X2 b% g9 f2 V      Save_Pline selectObj.Item(i)- g& u4 y5 _2 b! S
   End If2 T* {$ j& y$ S( r) c! D% F. K
   
5 o& S/ S! F6 _) R* Y" X8 ^. d  ]. R* A   Next i. i8 A" N/ X, ^) L9 C
   % B! q+ m2 f9 Q& L: [0 S  ?
   - G; t) A0 U) t9 G
End Sub
$ D9 f/ L5 R& p; L% x3 O+ i这是我读取CAD中多段线点坐标的源程序,请楼主帮忙看看,该在哪个地方加条件语句。% C% R, V  C' c7 v  B9 ]
如下就是读取出来的一串有序的坐标点,我只需要小数点后第2位到第4位为0的坐标点输出(红色字体的数据)。请楼主帮忙
+ j6 v3 {. e4 F9 g" S" u' g
8 z( @4 b, G. a9 A9 i    X         Y$ ^) e6 d0 [+ f( N
0.0000  0.0000
) V: p& o% ~( o; ^) @. k20.6000  0.0000
  s7 ^# o3 M# Y3 M- I; U, \
20.8013  0.0107
5 k, W$ R: c8 @  H0 U21.0000  0.0426
" i8 M4 R, X, ^! }# E9 l3 @: o
21.2563  0.11701 G/ Y' `$ M$ b% x  N3 F* D  j0 x
21.5000  0.2268
& @* _0 T& z' |0 P3 O21.7009  0.3515
: y* z7 K8 u$ Q; x+ A6 }21.8845  0.5000
+ B6 f; t9 S  a- E; w; ^21.9435  0.5565
6 t2 S( N; V( _5 |22.0000  0.6155
) R' I7 M6 Q5 w; h, `22.1487  0.79933 L% m' m- I" Q) l' j3 P! g" N3 ~
22.2733  1.0000
& q0 @: P" A8 |22.3830  1.2435
! Y1 B& p; }1 S: V5 j8 a$ E0 J. H+ I22.4574  1.50008 a( u6 l1 P, p- n/ T6 ^3 P0 |
22.4893  1.6988% B) N+ t' e8 b8 ~# Y
22.5000  1.8985
- B+ h# k% f6 C22.5000  1.90001 L* w8 \+ E6 t9 M
22.5000  27.0000
 楼主| 发表于 2009-11-22 06:44:22 | 显示全部楼层
X_scale = Format(Int((poly_coordinates(icount) / 1000 + 0.00005) * 10000) / 10000, "0.0000" )" _7 k# u, z/ x  B6 A5 f- ~/ Z8 k0 ?5 g
       Y_scale = Format(Int((poly_coordinates(icount + 1) / 1000 + 0.00005) * 10000) / 10000, "0.0000" )- `" D& J/ ?8 t8 H2 a2 V9 S
       'Z_scale = int((poly_coordinates(icount +2)+0.00005)*10000)/100009 D/ I/ t; H- X# n2 b' L
        if right(x_scale,3)="000" or right(y_scale,3)="000" then
  o: p' Y! ~8 u4 G! c* N       'print #1,ipoint & " "&X_scale&" "&Y_scale&" "&Z_scale
% b; t, n1 J/ R8 p3 k' {8 c1 T3 k       Print #1, X_scale & "  " & Y_scale: ~3 O. T7 q# I
        endif
发表于 2009-11-22 20:52:08 | 显示全部楼层

回复 170# woaishuijia 的帖子

谢谢版主,还有个问题顺便问下,新生成的点的数量如何统计呢。我现在运算出来还是老的数量。请版主帮帮我,自己试着改了几回都没效果
 楼主| 发表于 2009-11-22 23:35:25 | 显示全部楼层
For icount = 0 To UBound(poly_coordinates) Step 2( ]8 Q" L7 m% ]. q( B" C# [2 N% h
       X_scale = Format(Int((poly_coordinates(icount) / 1000 + 0.00005) * 10000) / 10000, "0.0000" )4 J$ Y# u% ^7 m3 s& {. l
       Y_scale = Format(Int((poly_coordinates(icount + 1) / 1000 + 0.00005) * 10000) / 10000, "0.0000" )
  n% Q! B# F" `& ~4 o       'Z_scale = int((poly_coordinates(icount +2)+0.00005)*10000)/10000
7 y( Z$ j& @4 V' E. l6 W         if right(x_scale,3)="000" or right(y_scale,3)="000" then  e( d6 B+ h; u4 ~3 G* I/ y
       ipoint = ipoint + 1
4 _) f$ {: h1 Q* L6 n* L& X# c
       'print #1,ipoint & " "&X_scale&" "&Y_scale&" "&Z_scale
/ k) e5 L% ^& m" s4 O, n/ F4 F       Print #1, X_scale & "  " & Y_scale
" J0 V. D) `; X$ g        endif
  }: p3 D5 `6 c, w+ A; I. ~3 Z! t       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的稳定性不好。也不`安全,无法保护自己的原程序。
* P" l% j6 Y( ^+ D) y; ]4 ~还是用ObjectARX吧。
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

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