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)
; R# s" I4 v& p) m/ [End Sub
3 r- I+ @/ M7 H# U. u
8 K% j" K* C3 \" a6 U: u& E" yPrivate Sub Save_Spline(splineObj As AcadSpline)
  b& i; n- w* L5 }  Close #18 X" U* Y2 m* j6 x
    Dim fitPoints As Variant
3 r) @7 H& x  K    Dim icount As Long
% k: W/ }& r5 [2 @% X1 o$ C8 s    Dim ipoint As Integer) l" ~3 }) D4 m* h. |* C: J# I
    2 T- u: H5 H5 {  O+ G
       fitPoints = splineObj.fitPoints0 k+ ^$ H7 F& T3 j2 k
       Open "c:\test001.bri" For Append As #1
: O6 V8 M7 r6 [% T       Print #1, "no__x___y___z"
& |* D3 @1 W: h  w       ipoint = 0" x' K0 A2 a/ a  F
       For icount = 0 To UBound(fitPoints) Step 3
; z, u" F/ X9 @2 H: i  `+ F' u           ipoint = ipoint + 12 \- p. m; ~- S( k6 |* [/ M
           X_scale = Int((fitPoints(icount) + 0.00005) * 10000) / 100005 g7 s$ l% c; I# y4 R' J% I2 W
           Y_scale = Int((fitPoints(icount + 1) + 0.00005) * 10000) / 10000
5 M6 l% D" {; d. h2 D           Z_scale = Int((fitPoints(icount + 2) + 0.00005) * 10000) / 10000. L! R8 d9 b. Z
           'print #1,ipoint&" "&X_scale&" "&Y_sacle&" "&Z_sacle. P, Q1 j! a# x6 z
           Print #1, X_scale & " , " & Y_scale & " , " & Z_scale
: G0 z0 b) N8 [' G' R. T/ ]( C2 c. Q; w) ?         Next icount
4 J( h' q- h1 A7 L7 Q) w5 l    Close #1
: u3 Z( F3 p) u: a) b2 }0 P* L; D' o+ w    , d2 |- X% {/ X* K
            
+ P5 t) p/ @2 L! f9 N& |End Sub
* H3 L% S4 @; {9 P; aPrivate Sub Save_Pline(plineObj As AcadLWPolyline)( E' A2 [- S) X1 p7 L) R7 F  R
  Close #1. k" Y8 E* a# s3 @
    Dim poly_coordinates As Variant$ b( ?1 i( y* H
    Dim icount As Long# G+ w1 C! f0 R$ a3 \  K
    Dim ipoint As Integer. m) [) e  F" J* @3 b; b6 F' Q
    poly_coordinates = plineObj.Coordinates8 h! s  V; P* z$ v9 \) u
    Open "c:\test002.dri" For Append As #1. f7 L% Y6 d5 x1 j/ K; Q2 F9 M2 Y: L
    'print #1 ,"no__x__y__z"9 q) B/ j) _8 K' \7 D* l
    Print #1, (UBound(poly_coordinates) + 1) / 23 A6 E8 K' V# b
    ipoint = 04 l  v" Z7 s; v" n( ~- O+ L" I
    For icount = 0 To UBound(poly_coordinates) Step 2
6 f0 U# C* g2 L; [       ipoint = ipoint + 1: k) f7 Y- J8 q
       X_scale = Format(Int((poly_coordinates(icount) / 1000 + 0.00005) * 10000) / 10000, "0.0000")
* f7 Y! U% {8 @6 g       Y_scale = Format(Int((poly_coordinates(icount + 1) / 1000 + 0.00005) * 10000) / 10000, "0.0000")" r2 P, G" J; E" x
       'Z_scale = int((poly_coordinates(icount +2)+0.00005)*10000)/10000! L8 x, i  L3 P9 L7 F8 F
       'print #1,ipoint & " "&X_scale&" "&Y_scale&" "&Z_scale
3 q/ A; p" |( e& d" `$ r       Print #1, X_scale & "  " & Y_scale# n$ s& D- U$ n) h* V
       Next icount
: m1 d# l! j. w       Print #1, 0
! f$ a' a% A0 ^       Print #1, " "2 N5 n1 \$ e  c* y8 V1 a
    Close #1* R1 I+ ~+ w+ E0 O0 F" M
    ! @4 p4 `4 z+ `- P
End Sub
9 D4 A5 H3 s; {! Z! K( JPublic Sub zzt()( h7 d: F) W/ j) I6 e- I
   Dim selectObj As AcadSelectionSet: T5 }2 O- W. ^% b/ E2 S0 ~- c3 ~
   Dim sumObj As Integer  f8 e4 R# k* ]& J8 o
   
( T, n- f. P8 l$ k   Set selectObj = ThisDrawing.ActiveSelectionSet$ U' v$ U0 v& L. \  [" f' K3 h
   sumObj = selectObj.Count
4 V: x9 _  e6 D: T9 u9 w0 m   For i = 0 To sumObj - 1
+ |5 c: c$ I. k9 E   If selectObj.Item(i).ObjectName = "AcDbSpline" Then
  Q" R, |4 I' d) Q/ y1 d& n. J      Save_Spline selectObj.Item(i)+ ]! f- J+ \8 s" Q3 N
   End If' q6 `0 \# [  q; d
     If selectObj.Item(i).ObjectName = "AcDbPolyline" Then- Z8 Y; i: \5 L2 e) P3 U
      Save_Pline selectObj.Item(i)
, {7 l0 E7 v6 F: _) X   End If
: M& X8 H$ R* I" T   
. _5 [3 `# ?5 K( ?% C   Next i0 \+ e3 ]# U. a9 I2 s' E
   
7 B9 Y2 @& w1 S# D6 W+ R6 q   
7 B3 h) j6 i9 G+ J0 s4 E( \End Sub
7 h" W7 s3 ]! B8 ?  z, u6 x这是我读取CAD中多段线点坐标的源程序,请楼主帮忙看看,该在哪个地方加条件语句。
  p) m7 a+ |4 A( X+ l如下就是读取出来的一串有序的坐标点,我只需要小数点后第2位到第4位为0的坐标点输出(红色字体的数据)。请楼主帮忙. d% N! v& T1 r* n
6 [' V) d) {9 k0 F% D
    X         Y
( L. x* w* H  a: o0.0000  0.0000
- f( O; F# b; w! s6 f20.6000  0.0000; ?/ r, ?( ?. Z/ F! P
20.8013  0.0107
: g0 i7 z+ A! s. q# f- w21.0000  0.04269 J: G6 ]2 g/ m/ o2 n/ M/ I8 s
21.2563  0.11709 X/ _. Q1 h+ [& P: T
21.5000  0.2268' c* ~  q5 k  p2 y5 m
21.7009  0.3515
/ M9 u( s  X  u" U: s& y1 D, Q6 H" N& |21.8845  0.5000' i' U4 K8 J( g" {. T4 ~  m+ V
21.9435  0.5565
" C! e9 }% t+ N' R' U2 d22.0000  0.6155& e4 y% L9 m2 |6 h
22.1487  0.7993: i/ |; s, j- s0 y0 Y+ X& ~1 x
22.2733  1.0000
# J, }$ R3 m) L7 B+ y22.3830  1.2435. W( N6 R4 _; I; q2 {5 R0 M
22.4574  1.5000' {% J, r1 i- p6 G( o4 \1 k
22.4893  1.6988+ T" ^5 v! k6 |7 a3 p
22.5000  1.8985& H4 R& J! S5 F
22.5000  1.90007 B/ H' U* C3 Q0 B; C
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 F: I  d1 H4 W1 h, f
       Y_scale = Format(Int((poly_coordinates(icount + 1) / 1000 + 0.00005) * 10000) / 10000, "0.0000" )
% q( J7 N5 D' w8 ~/ x9 I5 ]       'Z_scale = int((poly_coordinates(icount +2)+0.00005)*10000)/10000# A$ G( W5 O7 u2 N, [- s
        if right(x_scale,3)="000" or right(y_scale,3)="000" then
5 ~1 w+ o& ?; J* B8 \) \1 _4 s" {: \       'print #1,ipoint & " "&X_scale&" "&Y_scale&" "&Z_scale
$ K# s0 t; L, G8 p" e& s       Print #1, X_scale & "  " & Y_scale( A( c! J2 s) P0 \9 B% C# v
        endif
发表于 2009-11-22 20:52:08 | 显示全部楼层 来自: 中国浙江舟山

回复 170# woaishuijia 的帖子

谢谢版主,还有个问题顺便问下,新生成的点的数量如何统计呢。我现在运算出来还是老的数量。请版主帮帮我,自己试着改了几回都没效果
 楼主| 发表于 2009-11-22 23:35:25 | 显示全部楼层 来自: 中国
For icount = 0 To UBound(poly_coordinates) Step 2
% v6 j; K5 G1 Q/ k/ u  k       X_scale = Format(Int((poly_coordinates(icount) / 1000 + 0.00005) * 10000) / 10000, "0.0000" ), Q# u9 C& A9 P9 w* T; j
       Y_scale = Format(Int((poly_coordinates(icount + 1) / 1000 + 0.00005) * 10000) / 10000, "0.0000" )" D1 d5 S  r6 p$ @
       'Z_scale = int((poly_coordinates(icount +2)+0.00005)*10000)/10000
7 e/ e4 t) u2 h8 m) u, [         if right(x_scale,3)="000" or right(y_scale,3)="000" then+ z5 F5 C9 \) y! j( ^+ e
       ipoint = ipoint + 1

1 y9 E* d* N+ a% O% I" q0 j3 s       'print #1,ipoint & " "&X_scale&" "&Y_scale&" "&Z_scale- F1 I- |; Y) G6 u( V
       Print #1, X_scale & "  " & Y_scale
3 N$ e+ ]9 }8 _, x4 u/ ~$ o        endif
! g% e7 Z, d. ?) 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的稳定性不好。也不`安全,无法保护自己的原程序。
- R7 R/ n2 J. s3 k( d还是用ObjectARX吧。
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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