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)7 Y& Y! D. n& y# y. X& A, U
End Sub% t5 e! j9 c$ W- g  F$ }) `
8 X; h& Y. k7 p& N3 @8 a
Private Sub Save_Spline(splineObj As AcadSpline)% p/ o+ O# v- S. E: H7 m# O
  Close #1
( t4 F5 ~1 J& j! {# t7 ?) E& ~    Dim fitPoints As Variant/ E0 H. t7 p- T" w2 |' v: X7 K
    Dim icount As Long
1 _9 ^7 ^% n' {- s    Dim ipoint As Integer
. U2 A# F: h0 @& D6 Z   
1 u- e8 k: |2 J6 V8 W) w& d" D7 s       fitPoints = splineObj.fitPoints
) z8 ~+ G! L7 P7 W0 t       Open "c:\test001.bri" For Append As #1
# \, W; f1 H; _7 s. ]* z       Print #1, "no__x___y___z"
9 K; A7 Q4 X- S5 ~8 D  |# C       ipoint = 0
  V1 e5 g5 N% I. b" e. N' X* `0 }       For icount = 0 To UBound(fitPoints) Step 3
. H! Q. o- U6 m  z           ipoint = ipoint + 1$ {! N1 X4 S# I( W5 t4 r5 ^* ]% A
           X_scale = Int((fitPoints(icount) + 0.00005) * 10000) / 10000  @3 p9 V& d; ^  S2 [
           Y_scale = Int((fitPoints(icount + 1) + 0.00005) * 10000) / 10000
* _) ]6 V9 s7 O  E- S           Z_scale = Int((fitPoints(icount + 2) + 0.00005) * 10000) / 10000
* @! P2 M. W% y# Q% V! ^! j3 p           'print #1,ipoint&" "&X_scale&" "&Y_sacle&" "&Z_sacle* }2 D6 J& U- j5 d" h5 W( d
           Print #1, X_scale & " , " & Y_scale & " , " & Z_scale
7 g3 X9 ?" ?. e6 R) o. z2 k         Next icount  m, Y1 Y) T, t' r' @; m: @1 S
    Close #13 M# s  h; [4 {% j4 c. R
   
7 k' X1 ?- W; L; [/ w  o            
6 g! {2 F8 B0 l( B& U. sEnd Sub, z+ H1 O3 d4 I* ^9 K* J
Private Sub Save_Pline(plineObj As AcadLWPolyline)% t, Y2 {; ~+ L
  Close #1
  n; ], r* N8 t5 I8 \    Dim poly_coordinates As Variant- A4 z- J9 u6 h  v
    Dim icount As Long" ?1 n; B( q5 K( r, S" W& ?" j
    Dim ipoint As Integer/ w* }: y- k' i; a
    poly_coordinates = plineObj.Coordinates+ `( F9 s0 A$ h
    Open "c:\test002.dri" For Append As #1
% Y) x, H& g+ W1 m1 w# q; H    'print #1 ,"no__x__y__z"
3 w7 t" ]8 Y+ [6 ?    Print #1, (UBound(poly_coordinates) + 1) / 2
0 B6 c7 W& I! b    ipoint = 0
4 B! D' B. y3 C5 j/ H. z. Q    For icount = 0 To UBound(poly_coordinates) Step 2/ p0 Z7 q7 S# E' O
       ipoint = ipoint + 1
. T7 x5 U: s4 `3 S  A3 J       X_scale = Format(Int((poly_coordinates(icount) / 1000 + 0.00005) * 10000) / 10000, "0.0000")
8 T4 T# }7 L$ I( a' ^$ H       Y_scale = Format(Int((poly_coordinates(icount + 1) / 1000 + 0.00005) * 10000) / 10000, "0.0000"). p/ f+ I0 i2 b/ Q( b# X
       'Z_scale = int((poly_coordinates(icount +2)+0.00005)*10000)/10000" O) C; c, X7 V5 U& x) ~0 {
       'print #1,ipoint & " "&X_scale&" "&Y_scale&" "&Z_scale5 h7 S* w& A4 D* M3 d
       Print #1, X_scale & "  " & Y_scale2 u! z6 w& {# G/ F0 x
       Next icount
( S3 P, O! A% X+ _1 D& f       Print #1, 0
4 b  ^3 y* V: o# {4 K8 h+ E6 O# x       Print #1, " "
# A) q9 l5 d1 P5 a/ E    Close #1. B# x8 K% H  k& R1 V& o2 F! T
   
8 ^$ h* o6 `) l& {% wEnd Sub; H* z! }4 K/ ?( Y
Public Sub zzt()
, s4 x3 X# H: [  X' Z   Dim selectObj As AcadSelectionSet2 N* U! J/ Z5 @3 }' {
   Dim sumObj As Integer
8 ~/ ?. j+ q' k* ~0 T   + I4 K4 z7 f$ o' a- U9 r( @
   Set selectObj = ThisDrawing.ActiveSelectionSet
' F5 I& z% w4 `* b2 m3 X   sumObj = selectObj.Count6 E. ^% g8 a; ~/ w+ f
   For i = 0 To sumObj - 1; H/ T* p) V; |
   If selectObj.Item(i).ObjectName = "AcDbSpline" Then) N4 f( ~9 @/ A8 T; D4 i4 ^
      Save_Spline selectObj.Item(i)
( J, d# I: t, G3 |* e   End If
8 ^% e) r% J- |6 T" O* p% j     If selectObj.Item(i).ObjectName = "AcDbPolyline" Then. \- I( J# {- W' @
      Save_Pline selectObj.Item(i)
% E4 W# ]: w  _, T5 f   End If
- N: @: U/ e. _) M9 ^0 J  d. X' y8 J   2 t; j5 b: R: i3 b* O& {
   Next i
/ I3 P5 f1 G' j  h   + I/ c5 N; _  \2 f! l2 N0 C
   
: C( V; E5 I$ j- \' `! a$ @; {End Sub
* R3 Y: ~  H* w+ e这是我读取CAD中多段线点坐标的源程序,请楼主帮忙看看,该在哪个地方加条件语句。3 N" K4 \4 d5 L0 U4 `# Q' T9 C( y& e# S) V
如下就是读取出来的一串有序的坐标点,我只需要小数点后第2位到第4位为0的坐标点输出(红色字体的数据)。请楼主帮忙4 Y, r$ T4 u4 i. `! c) A

% \7 q. w; q% ?, H) K; E7 U! ~    X         Y
& c3 H: e/ J% S% l  X: Q8 l6 J0.0000  0.0000& J# k% k( X( T( V* M# p
20.6000  0.00009 r9 n- @* z* h& U  o/ K
20.8013  0.0107
) W, k- n4 J7 w( B5 W21.0000  0.04264 N" X4 ]: {& d  F
21.2563  0.1170
+ @' P6 }6 K" ^9 M21.5000  0.2268
1 z  T; g: e% u( F  ^21.7009  0.3515& W5 _+ C8 b0 k6 G
21.8845  0.5000
. g9 a) q; \3 A8 p4 Z21.9435  0.55659 A- V, j% I- |3 b: s- V: t) X# Y
22.0000  0.6155
' p) J. B- w1 O3 k5 Y4 j9 m# z22.1487  0.7993$ X% G" R& g8 y# v% z
22.2733  1.0000
/ R/ _( T( [+ n! Y! l  T4 U" ^1 i22.3830  1.2435
! B# t4 v+ B% y22.4574  1.5000# {( C$ k2 b0 Y. f2 w' b' q
22.4893  1.6988
$ T( ]& w- O0 u/ ~22.5000  1.89859 o3 W# F. f% p$ c7 U
22.5000  1.9000
# x9 {+ {7 n' ]( i22.5000  27.0000
 楼主| 发表于 2009-11-22 06:44:22 | 显示全部楼层 来自: 中国
X_scale = Format(Int((poly_coordinates(icount) / 1000 + 0.00005) * 10000) / 10000, "0.0000" )
2 w) r3 ~0 [3 E  x. `5 |* d/ P       Y_scale = Format(Int((poly_coordinates(icount + 1) / 1000 + 0.00005) * 10000) / 10000, "0.0000" )" d# j$ F; A3 p) C# @
       'Z_scale = int((poly_coordinates(icount +2)+0.00005)*10000)/100008 ]9 U) q: s0 o0 W2 ?
        if right(x_scale,3)="000" or right(y_scale,3)="000" then2 L$ T7 j2 t6 b9 Q1 X
       'print #1,ipoint & " "&X_scale&" "&Y_scale&" "&Z_scale
# I4 ?' P, s8 P       Print #1, X_scale & "  " & Y_scale0 Q0 E4 ^# @& o8 ~
        endif
发表于 2009-11-22 20:52:08 | 显示全部楼层 来自: 中国浙江舟山

回复 170# woaishuijia 的帖子

谢谢版主,还有个问题顺便问下,新生成的点的数量如何统计呢。我现在运算出来还是老的数量。请版主帮帮我,自己试着改了几回都没效果
 楼主| 发表于 2009-11-22 23:35:25 | 显示全部楼层 来自: 中国
For icount = 0 To UBound(poly_coordinates) Step 2
; ~. f7 q' U+ E. t" w- T$ f( U" B       X_scale = Format(Int((poly_coordinates(icount) / 1000 + 0.00005) * 10000) / 10000, "0.0000" )  Z- `3 e. `( v
       Y_scale = Format(Int((poly_coordinates(icount + 1) / 1000 + 0.00005) * 10000) / 10000, "0.0000" )& N0 i4 Z8 n4 U: Q( f% x2 r* ^
       'Z_scale = int((poly_coordinates(icount +2)+0.00005)*10000)/10000
: G. n% G, p* [$ v# I         if right(x_scale,3)="000" or right(y_scale,3)="000" then/ A& ]2 {9 A- [6 P" q
       ipoint = ipoint + 1

  j" A5 S8 J: h! h; ]       'print #1,ipoint & " "&X_scale&" "&Y_scale&" "&Z_scale
2 o% `! b3 ]2 X3 j  \       Print #1, X_scale & "  " & Y_scale
# e) h- l! s8 r9 C" B8 \- L9 T        endif+ c4 r: U. O% q% ~: i
       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的稳定性不好。也不`安全,无法保护自己的原程序。
! x: I0 l- l& |5 x% C0 K还是用ObjectARX吧。
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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