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)5 {8 z" z! r7 F! I4 ]4 x: @
End Sub8 h% ?4 q* i9 O. b7 r
9 @! G  o. v1 b/ E0 c" V+ X5 S
Private Sub Save_Spline(splineObj As AcadSpline)
- o* k% M0 I* g& K( s1 R  n5 d& M! A  w  Close #1
; x' |, Z9 O" g' V  @6 c    Dim fitPoints As Variant' g) k' T3 i" T7 R6 a  A
    Dim icount As Long
3 V  A* ?& U- M    Dim ipoint As Integer( K: U* m7 Q, J0 _4 U# i( K& O
   
. F0 O7 w6 X% O5 }/ w       fitPoints = splineObj.fitPoints$ \' J' k0 i  z! i, j6 Q+ D
       Open "c:\test001.bri" For Append As #1
# t7 O% |. a6 C( R! e       Print #1, "no__x___y___z"3 y' v7 W$ t7 O% e7 U
       ipoint = 0/ w/ \$ l" b1 A$ w+ _8 @# ]: s
       For icount = 0 To UBound(fitPoints) Step 3
+ O) M( W6 @+ l/ }. ^0 E& ?9 P           ipoint = ipoint + 1) G5 O2 E" r; d
           X_scale = Int((fitPoints(icount) + 0.00005) * 10000) / 10000
& h' L0 g9 }( D           Y_scale = Int((fitPoints(icount + 1) + 0.00005) * 10000) / 10000# l* R: ~; ?) i+ |5 z
           Z_scale = Int((fitPoints(icount + 2) + 0.00005) * 10000) / 10000
! _. M$ V9 W1 @; y2 O; x1 ^           'print #1,ipoint&" "&X_scale&" "&Y_sacle&" "&Z_sacle1 h0 i/ }: b# p$ B& f0 T
           Print #1, X_scale & " , " & Y_scale & " , " & Z_scale
" W3 E& A" l: U( p+ G6 G         Next icount
) f+ D! ?0 X- N+ F8 k! `& e1 z    Close #1
% X8 D3 B6 C  O& w. y7 o0 [/ O2 M    ( h! y  u8 N$ v3 }* Z1 Y. z) @0 h
            # l1 Z0 }' O9 d- [
End Sub
7 m0 v% l# _8 `$ O4 M4 j1 HPrivate Sub Save_Pline(plineObj As AcadLWPolyline)
  D) f$ K0 n# i" L  Close #16 R7 `7 V) B. Q
    Dim poly_coordinates As Variant; X# K' [" G$ i
    Dim icount As Long
, M5 ^9 c4 l  B9 F' m5 ~    Dim ipoint As Integer
; t2 o! P) g! [* }    poly_coordinates = plineObj.Coordinates6 i7 K9 z6 q' u' W4 K  {8 t
    Open "c:\test002.dri" For Append As #15 R$ I3 \6 ~+ V' Y5 n  l
    'print #1 ,"no__x__y__z"6 R9 C% f8 `! ~
    Print #1, (UBound(poly_coordinates) + 1) / 2. H  I& z+ j2 A$ N! K% M" n0 S
    ipoint = 0
4 L" V) y! {' |' ~1 d" p    For icount = 0 To UBound(poly_coordinates) Step 2& B* F- U8 g8 S6 ]1 ~9 Q: y/ L$ n5 u' t
       ipoint = ipoint + 1
/ H, D, B0 j  @3 @$ a       X_scale = Format(Int((poly_coordinates(icount) / 1000 + 0.00005) * 10000) / 10000, "0.0000")
% p, t( c+ k0 l9 O, }% b3 v       Y_scale = Format(Int((poly_coordinates(icount + 1) / 1000 + 0.00005) * 10000) / 10000, "0.0000")- E/ L0 a, C1 z. @
       'Z_scale = int((poly_coordinates(icount +2)+0.00005)*10000)/10000
& p8 m0 ^  w% ^* x       'print #1,ipoint & " "&X_scale&" "&Y_scale&" "&Z_scale; Q" D* r5 J( T
       Print #1, X_scale & "  " & Y_scale
# `1 {, P3 I; H1 b) Q3 ?3 L       Next icount( S3 p; H: g1 t. t) I/ ^2 s  N
       Print #1, 0
' v3 E# A) Q) |5 K6 c       Print #1, " "6 ]* W. V3 V; D+ v2 m: U
    Close #1
& L  J8 Q9 H5 b, X    ' u$ N" Q; p$ Q0 c+ n8 P
End Sub6 _9 p) W/ Q4 i% @/ Q+ \
Public Sub zzt()
" W# \" _( a% i( z8 ~7 k& p   Dim selectObj As AcadSelectionSet- v/ d/ K2 ]; A' J
   Dim sumObj As Integer
( `$ S8 j0 x, U/ z  k+ u  f   
. W% }5 O: {' Y   Set selectObj = ThisDrawing.ActiveSelectionSet/ p6 M9 U* \5 I
   sumObj = selectObj.Count
9 `* Z9 @. V( E/ q6 H2 D/ P4 Y   For i = 0 To sumObj - 1
1 s: y9 h3 B" h- N- }   If selectObj.Item(i).ObjectName = "AcDbSpline" Then
/ Q! ]& H! Z( V! ^4 k5 S% F3 H5 j      Save_Spline selectObj.Item(i)
8 ?1 B# g8 G: i9 g* K* Z7 w( K$ }   End If( L# w. v' g# ~6 ?9 Z+ j
     If selectObj.Item(i).ObjectName = "AcDbPolyline" Then
" O) p6 e5 U. u6 _      Save_Pline selectObj.Item(i)5 Q2 Y2 q1 T! Z' \# ^4 {6 R
   End If( o7 L, V7 J7 W5 J7 I- p& y
   
9 S: _6 E0 Z/ x; a9 `& V" ]   Next i
- G" s* l% ^; Q. i   5 j$ y$ g! q0 c! A. s
   
2 b& H/ G" f) S! r$ l: {End Sub
2 }, l6 S" r* H2 r这是我读取CAD中多段线点坐标的源程序,请楼主帮忙看看,该在哪个地方加条件语句。4 J! o. o: ?* t# j0 m
如下就是读取出来的一串有序的坐标点,我只需要小数点后第2位到第4位为0的坐标点输出(红色字体的数据)。请楼主帮忙: ~! T. y2 @& {9 X4 @) Y0 o4 W

" x2 g3 `+ {& y$ R0 `/ A    X         Y- ^8 i. f! n: \2 N/ F* O, F0 ]
0.0000  0.0000
' k% U4 P1 W# h0 ]2 T8 v- m20.6000  0.0000
4 d+ n( {; c2 ^
20.8013  0.01078 f8 c7 Q5 |+ }: b! z8 e$ D
21.0000  0.04267 x2 G. L1 f0 u
21.2563  0.1170$ L9 {- t2 N) `# {/ o: Y8 V4 k& j
21.5000  0.2268
& }# w3 c1 O& k4 y; ?1 q# ?21.7009  0.35150 U* S- H% x8 A) O
21.8845  0.5000+ z* A+ B' {$ _1 m( `; `
21.9435  0.5565
- q1 {3 @0 X' n" f- ^22.0000  0.6155
1 t& ?1 T4 _0 x22.1487  0.7993
' ~& s' x! Z9 v( S: E6 x, ?5 E22.2733  1.0000. O, e) E  N# B) Q
22.3830  1.24352 K- k* T3 q' W* m# [# N
22.4574  1.50007 a% X2 g" a. A" J( |0 X" t
22.4893  1.6988( p4 t. X4 ?0 j
22.5000  1.8985" u6 L. I$ b, l! }! x! `
22.5000  1.9000
) _' q2 S9 T$ }4 o, Q6 M22.5000  27.0000
 楼主| 发表于 2009-11-22 06:44:22 | 显示全部楼层
X_scale = Format(Int((poly_coordinates(icount) / 1000 + 0.00005) * 10000) / 10000, "0.0000" )
: }) Y( C* y3 }) a2 [       Y_scale = Format(Int((poly_coordinates(icount + 1) / 1000 + 0.00005) * 10000) / 10000, "0.0000" )7 @0 U7 l! _8 f
       'Z_scale = int((poly_coordinates(icount +2)+0.00005)*10000)/10000, l/ `1 O* d6 _4 h
        if right(x_scale,3)="000" or right(y_scale,3)="000" then  ]( `- H" \; B; f& g( p  C1 w
       'print #1,ipoint & " "&X_scale&" "&Y_scale&" "&Z_scale
) B  a. I' o4 D' ^. [       Print #1, X_scale & "  " & Y_scale
# Y" U& K$ e+ z4 \* |        endif
发表于 2009-11-22 20:52:08 | 显示全部楼层

回复 170# woaishuijia 的帖子

谢谢版主,还有个问题顺便问下,新生成的点的数量如何统计呢。我现在运算出来还是老的数量。请版主帮帮我,自己试着改了几回都没效果
 楼主| 发表于 2009-11-22 23:35:25 | 显示全部楼层
For icount = 0 To UBound(poly_coordinates) Step 25 s/ L* ]( K# V# b9 g( k
       X_scale = Format(Int((poly_coordinates(icount) / 1000 + 0.00005) * 10000) / 10000, "0.0000" )
6 M) K! ?6 e+ ]$ [       Y_scale = Format(Int((poly_coordinates(icount + 1) / 1000 + 0.00005) * 10000) / 10000, "0.0000" )
; O' S6 G7 F, r( K  d7 W& O& A+ \- i. j       'Z_scale = int((poly_coordinates(icount +2)+0.00005)*10000)/10000' E/ L/ e# Z1 i
         if right(x_scale,3)="000" or right(y_scale,3)="000" then
5 T' R, @) `) Y) u1 U9 B4 K7 T       ipoint = ipoint + 1

* }" G) {; ?' z& G3 F       'print #1,ipoint & " "&X_scale&" "&Y_scale&" "&Z_scale
4 U( B! f' n0 V( M1 M7 `       Print #1, X_scale & "  " & Y_scale5 V4 a2 X& Z- }# u, \0 a! \8 y5 a0 Y
        endif
9 }, B; U4 I8 `2 `% U( G       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的稳定性不好。也不`安全,无法保护自己的原程序。: g# X% J4 S; w1 E/ i& ]  x; J/ t
还是用ObjectARX吧。
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

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