QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
goto3d 说: 此次SW竞赛获奖名单公布如下,抱歉晚了,版主最近太忙:一等奖:塔山817;二等奖:a9041、飞鱼;三等奖:wx_dfA5IKla、xwj960414、bzlgl、hklecon;请以上各位和版主联系,领取奖金!!!
2022-03-11
系统
[系统通知] 平台第一个项目外包——项目拼多;正式上线,欢迎各单位个人有外包、设计、采购、加工需求的,在此寻找更牛的解决方案
2021-07-01
楼主: woaishuijia
收起左侧

[原创] autocad二次开发(VBA)就这么简单

[复制链接]
发表于 2009-7-28 08:41:36 | 显示全部楼层
嘿嘿,偶也正在学习.如果开一个二次开发的子板块就好了.
发表于 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 D# m2 K/ l: |4 D; \% s4 L: E0 EEnd Sub: {+ X1 T# `! n6 p! s) n
. D- U7 W$ }. ^4 p
Private Sub Save_Spline(splineObj As AcadSpline)
! Y1 E( d9 z4 I' C( J8 l  Close #16 {* k5 ^  Z: R, ~. v- s( n
    Dim fitPoints As Variant' i; k' Z% o: w8 L
    Dim icount As Long
6 p: T  X  q# e% S! g* B    Dim ipoint As Integer
% t: J, T# _( ?3 `6 ^3 u( V   
5 v' p  a4 s9 _6 w% l       fitPoints = splineObj.fitPoints
- i" c; K8 p, t* B       Open "c:\test001.bri" For Append As #1
& f7 P9 `* V- E& g: ?       Print #1, "no__x___y___z"
7 k. c5 Z- H- E! ^6 u       ipoint = 03 p8 I6 K( E) c+ i
       For icount = 0 To UBound(fitPoints) Step 3
* O7 @  Y& ~4 L; f           ipoint = ipoint + 1# x( K7 e/ v2 d; R7 p$ b& }) z
           X_scale = Int((fitPoints(icount) + 0.00005) * 10000) / 10000
( l/ m. n2 m# z  B1 i2 j6 X2 n           Y_scale = Int((fitPoints(icount + 1) + 0.00005) * 10000) / 10000
6 k/ u$ n! L6 g           Z_scale = Int((fitPoints(icount + 2) + 0.00005) * 10000) / 10000' G+ [9 C0 x$ p+ d/ y
           'print #1,ipoint&" "&X_scale&" "&Y_sacle&" "&Z_sacle
6 S3 ^6 g7 p# v) N" G           Print #1, X_scale & " , " & Y_scale & " , " & Z_scale
- u  X; D# y8 }/ f0 D1 Y. u( T: M: K         Next icount
1 v; [( m& i8 }9 @) c    Close #1  |6 d& I5 U( c' ], s
    ! V1 ~* O* n5 E; h. D
            
% ], W2 e5 ?- Y  W0 MEnd Sub
/ z9 _7 g% y* c! ePrivate Sub Save_Pline(plineObj As AcadLWPolyline)
! v+ {1 m" P0 M3 E  Close #1
+ P( Q- A9 ?3 @  Z8 f) c1 Z) ]" f    Dim poly_coordinates As Variant- b- |* ^6 [( t: a% _
    Dim icount As Long
4 m/ t- G1 i7 e+ g3 Y$ H    Dim ipoint As Integer3 X# ]3 E4 R" d, e* f% q+ O7 A
    poly_coordinates = plineObj.Coordinates
* T, N; F3 V7 ^    Open "c:\test002.dri" For Append As #1
& [. j: ]" k& W! \/ Q    'print #1 ,"no__x__y__z"! r  A- t4 A4 O4 y2 D
    Print #1, (UBound(poly_coordinates) + 1) / 2. s* v4 I( I6 U2 j9 g4 T
    ipoint = 0  Z5 F# M) J( S: D
    For icount = 0 To UBound(poly_coordinates) Step 2, Q$ i$ L6 H; {$ M! t2 k8 [  l
       ipoint = ipoint + 1
& h. f3 G6 B6 s' `! z' `       X_scale = Format(Int((poly_coordinates(icount) / 1000 + 0.00005) * 10000) / 10000, "0.0000")
: |, |1 t( w+ T: x( j. d# l       Y_scale = Format(Int((poly_coordinates(icount + 1) / 1000 + 0.00005) * 10000) / 10000, "0.0000")
, O  j2 c% i  V+ U+ b       'Z_scale = int((poly_coordinates(icount +2)+0.00005)*10000)/10000/ c+ k( U+ r* u8 X
       'print #1,ipoint & " "&X_scale&" "&Y_scale&" "&Z_scale8 s' ^3 s1 H& |# E0 u1 O$ n, @( u
       Print #1, X_scale & "  " & Y_scale& g% V/ d- H* i
       Next icount
2 K" x- q* F2 @: u3 i       Print #1, 0, D# `+ U+ h! |; M
       Print #1, " "
8 m3 J  N9 D  B9 H3 F    Close #15 W3 E6 G& J7 x+ U: ]5 @3 u; ~8 A9 J+ i
   
) P1 K& \* ^1 r+ z: [, b7 W$ AEnd Sub0 l3 I2 h  Y% N! ~3 ^
Public Sub zzt()
. u% c0 g8 K' W8 u   Dim selectObj As AcadSelectionSet
% d. I2 @0 f4 l2 T2 g7 e   Dim sumObj As Integer$ u1 T2 p. l& Z; F
   
8 D. o7 r# w% c# c4 B: }( G   Set selectObj = ThisDrawing.ActiveSelectionSet
! q! P2 f7 E8 J' T/ q* c& Z   sumObj = selectObj.Count6 |8 ^' \; P' c5 X
   For i = 0 To sumObj - 1  x) l- E& o- ~, P
   If selectObj.Item(i).ObjectName = "AcDbSpline" Then  k; b' V5 u  N2 Z. c! Q: s
      Save_Spline selectObj.Item(i)) i; v2 x; M  B4 R+ Q: ?7 E' a
   End If3 `/ ]# N' B/ ?, u8 n7 N
     If selectObj.Item(i).ObjectName = "AcDbPolyline" Then
" S# l# {8 |! E4 j9 i      Save_Pline selectObj.Item(i)( @0 M  e: G# {
   End If, ?2 l8 B) V) Q7 C  h9 F
   4 H' V. `3 E' L8 }1 J
   Next i3 o. `  B& G, v3 l
   
$ }5 k# K# |3 G. k   ( d& v  t+ \9 r5 W
End Sub
) N, [  \7 r( i, f. m$ V这是我读取CAD中多段线点坐标的源程序,请楼主帮忙看看,该在哪个地方加条件语句。# n1 y& x5 c7 X: j0 T
如下就是读取出来的一串有序的坐标点,我只需要小数点后第2位到第4位为0的坐标点输出(红色字体的数据)。请楼主帮忙
# i8 C) a: g& h3 O- P$ A7 r7 n3 u! p( E1 i" f, ^
    X         Y
& o: b# ^, ?  k- X% ~0.0000  0.0000
/ b0 p8 P) @& Z! V20.6000  0.0000
  x! B7 I5 p& \+ R1 L
20.8013  0.0107
/ {$ X- u: C* X21.0000  0.0426
+ ]0 w" W9 }2 W, m
21.2563  0.1170
+ R2 w3 l. y, }9 U- t3 F21.5000  0.2268) V/ J8 y1 V  S$ o9 a
21.7009  0.3515, Z3 v$ C2 K3 A( {
21.8845  0.50006 J+ T) S8 c, v1 _- L" T' s$ X
21.9435  0.55658 G; H' M, y& V4 e
22.0000  0.6155  n. q$ `& r% k& K# Q9 \8 l
22.1487  0.7993
" {9 ~3 N; |  i$ {22.2733  1.0000
2 M7 V# @& T. r1 t1 _; }22.3830  1.24356 ~6 m7 ]5 C0 i1 a8 w
22.4574  1.5000" ~8 L7 V  i: f/ e9 r! r1 k* ]
22.4893  1.6988
/ ]7 X8 C4 Q/ \3 h' U22.5000  1.8985
% K! ^1 z$ u$ C( {22.5000  1.90003 c$ J" g& ]* H: |5 F* M1 {6 ]
22.5000  27.0000
 楼主| 发表于 2009-11-22 06:44:22 | 显示全部楼层
X_scale = Format(Int((poly_coordinates(icount) / 1000 + 0.00005) * 10000) / 10000, "0.0000" )
5 M2 a/ Y6 l- k8 V! U* {3 e9 c( y       Y_scale = Format(Int((poly_coordinates(icount + 1) / 1000 + 0.00005) * 10000) / 10000, "0.0000" )
$ p8 b8 c- d+ |; y       'Z_scale = int((poly_coordinates(icount +2)+0.00005)*10000)/10000
) t8 F# _0 f  V) i6 c        if right(x_scale,3)="000" or right(y_scale,3)="000" then
/ y! R( u2 e+ T6 u! ?       'print #1,ipoint & " "&X_scale&" "&Y_scale&" "&Z_scale
6 p' F+ b6 z! {# I4 \       Print #1, X_scale & "  " & Y_scale
) T7 s) Q7 w$ W) S7 D        endif
发表于 2009-11-22 20:52:08 | 显示全部楼层

回复 170# woaishuijia 的帖子

谢谢版主,还有个问题顺便问下,新生成的点的数量如何统计呢。我现在运算出来还是老的数量。请版主帮帮我,自己试着改了几回都没效果
 楼主| 发表于 2009-11-22 23:35:25 | 显示全部楼层
For icount = 0 To UBound(poly_coordinates) Step 2+ B6 {7 f4 g0 B- d8 j
       X_scale = Format(Int((poly_coordinates(icount) / 1000 + 0.00005) * 10000) / 10000, "0.0000" )
- e9 n# u$ O" I, b' w       Y_scale = Format(Int((poly_coordinates(icount + 1) / 1000 + 0.00005) * 10000) / 10000, "0.0000" )
4 r# n& v2 _( n1 B5 [2 m3 d6 F       'Z_scale = int((poly_coordinates(icount +2)+0.00005)*10000)/10000
- u& b4 V9 l1 f; I( \/ q4 ]         if right(x_scale,3)="000" or right(y_scale,3)="000" then
1 u8 j2 P4 {4 r; k0 f       ipoint = ipoint + 1
( g3 K, a0 W$ b8 J, C- f
       'print #1,ipoint & " "&X_scale&" "&Y_scale&" "&Z_scale' [" A( y8 D, J1 r/ H! w# b
       Print #1, X_scale & "  " & Y_scale
- o. \$ F9 x7 n9 \5 W        endif, h0 C$ ^) k  Q) G; N- W% V
       Next icount
发表于 2009-11-27 09:36:55 | 显示全部楼层
VBA入门是比较容易的 不知功能是否强大?
发表于 2009-12-2 17:26:32 | 显示全部楼层

回复 11# woaishuijia 的帖子

非常非常感谢
发表于 2009-12-5 23:19:41 | 显示全部楼层
哎  我还是回家种田算了!!!
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

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