三维网

标题: autocad二次开发(VBA)就这么简单 [打印本页]

作者: woaishuijia    时间: 2007-1-8 14:31
标题: autocad二次开发(VBA)就这么简单
运行autocad,创建一个新文件,Alt+F11(或者在菜单栏点“工具”→“宏”→“Visual Basic 编辑器”),在新出现的窗口菜单栏点“插入”→“模块”,输入下面的代码:* f/ q* C9 {2 e

# I& \  R5 A1 L+ uSub 我的第一个程序(). J& a  N) }8 h  m9 ?5 X6 T
    Dim 直线1 As AcadLine% V+ r* R) J6 I& |; v  ~" r  I# t
    Dim 起点(2) As Double
# _) w* B4 i& O; b1 u" W    Dim 端点(2) As Double
: w) t  @+ g" q0 L& k    1 }$ ]! n/ ^0 {# t& I- m
    起点(0) = 10/ Z8 _. h/ [! n9 }7 N
    起点(1) = 204 k' X) r% j. z4 |' `
    端点(0) = 80) }1 D  l7 l7 z
    端点(1) = 1004 l$ P5 s0 E1 b0 L5 P# Y! f7 s# a
   
9 ~+ ^9 }' s9 N* C5 L6 s% O    Set 直线1 = ThisDrawing.ModelSpace.AddLine(起点, 端点)
! _; u' n' P) @5 s7 t5 SEnd Sub
6 ~  S& k& G1 X+ g* Y9 ~ 6 m5 E, X  S0 B- }" R' j/ r0 B1 r
检查一下,确信没有问题后按F5
5 v) J0 D2 q" q回到autocad窗口,看见了吗?一条直线,起点坐标(10,20),端点坐标(80,100)* R6 q/ _% E' c; i; \

$ A* B$ R* _) p0 G+ B6 a这个程序的第一行里,“SUB”和“()”是必须有的(人家微软就是这么规定的,我也没办法),“我的第一个程序”是这个程序的名字(如果你不喜欢也可以改个别的名字,我无所谓)。
7 ^# f7 S" s# w. w! r' P% m第二行里,“Dim”是定义一个变量,“直线1”是要画的直线的名字(随便改,中英文都行),后面的英文必须有,意思是说:这是一条autocad直线。
* I9 G7 z7 m8 ^: R- A6 L第三行里,“起点(2)”是一个数组(因为我要用它给直线赋予起点,所以取了个直观的名字,又因为点的坐标是三维的,所以必须用能容纳三个数据的数组),后面的英文意思是“这个数据是双精度类型”。: d& y' K* e" q; o' Y/ K! U* e. q* R
第四行和第三行差不多,是用来给直线赋予端点的。$ F' t7 D( G7 Y% f0 Q0 [
第五行和第六行是分别赋值给起点的x和y坐标(因为起点的z坐标是0,而定义这个数组的时候,默认数据就是(0,0,0),所以就不用管z坐标了)。
, O% f' d  A$ D3 u2 h! d第七行、第八行赋值给端点x和y坐标。8 z0 Y1 i: K; e% K! W$ L' H# n
第九行画直线,在“当前文件”的“模型空间”“画直线(按起点和端点)”。  _, `* c5 U8 E4 t  T' e
第十行,完事了。# b# a. E& P2 _) ~3 V0 l
2 L2 F9 p7 w% ~) ~
有的网友一看见英文,头就会变大。别怕,如果你是用“复制/粘贴”把这段代码拷贝到VB编辑器里,就不会知道autocad有多么友善。试试用键盘把这段代码输入进去,你会发现,每到关键时刻,VBA就会提醒你下面该做什么了。" X' Y( ?0 h: \* S8 ^
别听旁人瞎说autocad这不行、那不行,那是因为autocad的两个万能命令(一个是VBA,一个是lisp)你还没学会。这两个命令你只要学会一个(不用太精通,差不多就行),就没人敢说你不是高手。
作者: aishengchen    时间: 2007-1-8 18:55
赞成楼主的观点!学习的敌人就是畏惧!
作者: daguan8    时间: 2007-1-8 20:32
看来真的是比较容易,该找本书看目的地。
作者: cqjiang    时间: 2007-1-9 08:15
既然楼主说这么容易,那我就试试吧
作者: weizhou737    时间: 2007-1-9 08:40
增加我的学习信心,谢谢你啊,楼主
作者: 730514shq    时间: 2007-1-9 08:49
为了更好的利用CAD工具,听从楼主的意见。学习一下干净二次开发知识。
作者: woaishuijia    时间: 2007-1-9 10:11
既然有网友对这个话题感兴趣,就再画个圆玩玩。
* O" v  h* Y+ \. x$ u
  d; h. L5 a& k) ZSub 画个圆玩玩()2 a7 v# p7 j6 N
    Dim 我真的是圆吗 As AcadCircle. R3 o4 Q  d9 k' e1 i
    Dim 我才是圆心呵呵(2) As Double' V( F. y# U; f; q2 f
    Dim 我是半径我愿意 As Double
6 j. b8 s: a/ y1 J. @7 W$ n    我才是圆心呵呵(0) = 27.5555555555556
- w4 O/ q( Z! e1 Q; z9 \    我才是圆心呵呵(1) = 69.12345678798
6 Z9 {+ A7 H( }* a5 |# I9 G    我是半径我愿意 = 38
2 E  Z4 y+ q3 t% p9 u; Q6 d, w3 a    Set 我真的是圆吗 = ThisDrawing.ModelSpace.AddCircle(我才是圆心呵呵, 我是半径我愿意)
+ B- q" ?, X+ M6 [  ]. b9 u, z8 `End Sub
; \5 L. ~2 ?5 x, @2 @) V' C' R# V
. D- q; S" d; s* Z用键盘输入时,第一行输入完程序名直接按回车,不用输入“()”,VBA会替你把括号和最后一行填好的。其它的关键字也用不着每个字母都用键盘敲,自己试。8 Y/ H- r. c: x7 O, |/ [' G; M) [& A

- o' G6 z7 @9 Y6 t[ 本帖最后由 woaishuijia 于 2007-1-9 10:20 编辑 ]
作者: ch8948203    时间: 2007-1-9 10:34
还是不会哦# ?6 h/ C5 a: f0 s& D3 \( Z* H
郁闷,有高手教教我吗/?想学学.
作者: swidge    时间: 2007-1-13 13:34
标题: 我想学cad二次开发
我想学习一下cad的基本的二次开发,不知道哪位高手能交一下我啊% D5 E' F) k" f) T* A5 c* m3 V( c
我的qq是125720096,谢谢啦
作者: haodongdong    时间: 2007-1-13 21:41
谢谢搂主,真的想在这方面学的深刻一点
作者: woaishuijia    时间: 2007-1-14 16:12
标题: AAA
有了autocad基础,学习它的VBA并不难,关键是要找准突破口。下面是根据在下的学习经验编写的一个自认为有代表性的简单程序,只要你按步骤做下来,就会发现你已经进入了VBA的天地。  V& m) I5 d. @: l9 P  T0 J8 \- o
    首先,在autocad上创建一个新文件,按Alt+F11进入Visual Basic编辑器。
3 L# d+ u. B* L+ |7 J1 x' A    下面这项工作是我强烈建议你做的:在菜单栏点“工具”→“选项”,在选项窗口选中“要求变量声明”--这可以减少我们的低级错误。4 c/ S/ j4 m1 f# i& ~; S& M. D, c
    下面开始编写我们的第一个VBA程序:让VBA在autocad的模型空间按我们指定的位置画一条直线。7 C. j/ ?! _6 e$ `+ N+ k: l- w6 h5 a
    在编辑器的菜单栏点“插入”→“模块”,屏幕上出现了“模块1(代码)”窗口。在代码窗口的第一行是“Option Explicit”--如果你按我的建议在选项窗口选中了“要求变量声明”的话--在它的下面输入“sub A”,回车。窗口出现下面的代码:
- C0 n/ A# l; ~1 i
/ Q: S8 [# }; Y( L( vSub A()* e; G3 V$ d0 z8 b

. Z: q& Q6 c9 G6 \6 R5 vEnd Sub# o8 v$ g1 `- B% U& u- d
- C9 @8 Z# ~' u2 u6 ]
    “A”是这个宏的名字。你可以按自己的喜好随便给它取个什么名字,但必须是唯一的,因为它是这段程序的标志。取名字时最好不要用汉字,因为autocad的命令行不支持汉字参数,如果用了汉字,每次运行这段程序的时候就必须使用“宏”对话框,而不能使用命令行。9 g: h2 n( M$ t' P/ d
    在两行代码中间的空行键入“thisdrawing.”,屏幕上会出现一个提示窗口--后面的代码可以在这里面选择,而不是所有文本都靠键盘输入--继续键入“m”,提示窗口高亮显示的是“ModelSpace”--我们要的就是它。继续键入“.”,“ModelSpace.”自动进入了代码行,并且出现了一个新的提示窗口;继续键入“addlin”,提示窗口高亮显示的是“AddLine”,键入空格,它就自动上去了,而屏幕上又出现了一个提示行“AddLine(startpoint,endpoint)as acadline”,其中“startpoint”用粗体显示,这是在提示我们给出直线的起点。继续按下面的顺序键入字符“thisdrawing.ut.getp,thisdrawing.ut.getp”--VBA会像前面一样把我们的代码补全--再敲一下空格,整段代码就是现在这个样子:
) _' ?% W3 _3 Y( Z8 A1 z: z3 U! Y/ c* u2 i% f
Sub A()0 U* e7 [0 m) C7 y' R
    ThisDrawing.ModelSpace.AddLine ThisDrawing.Utility.GetPoint, ThisDrawing.Utility.GetPoint
6 b, Z/ y% `; {8 l8 k
End Sub
* D1 ^; u$ W' G

8 r0 Z/ A; u$ V! ]5 f  ]    这行代码中,“ThisDrawing.ModelSpace.AddLine”的意思是:在“当前文档”的“模型空间”“画直线”。这个画直线方法需要两个必不可少的参数,一个是起点三维坐标,另一个是端点三维坐标。在这行里,起、端点的坐标是由后面两部分代码提供的--“ThisDrawing.Utility.GetPoint”的意思是:在“当前文档”上“由用户输入”而“得到点坐标”。! E8 Y# e& r8 J% z
    我们的第一个宏已经完成了,现在回到autocad窗口运行一下:
% Q! y- x& G4 x3 m" ^4 B8 _' z    在命令行键入“-vbarun”,回车,再键入"a",回车。光标已经变成了十字线,autocad在等着我们指定点。在屏幕上不同的位置点两下(也可以在命令行输入坐标),一条直线就画好了。; T& J; J+ y+ E3 J5 P& N
    我们的第一个程序编写成功。
. Y' Y. l4 P; Z, k0 a    不过别高兴得太早,这段程序有个BUG:再运行一次程序,指定第一个点后别指定第二个点,而是按“Esc”键,会跳出来一个窗口告诉我们程序有错误。
/ G# _$ Z- I8 N7 h    按“结束”关闭这个窗口,回到VBA编辑器,在程序中添加两行代码,让它变成现在这个样子。, \0 M8 o4 R& r  |* t+ m
) Y0 c6 @; }; q; p2 F
Sub A()  X  ]+ `7 `" J/ a% _
On Error GoTo 10
- p9 }9 C5 @9 s6 @0 Y
    ThisDrawing.ModelSpace.AddLine ThisDrawing.Utility.GetPoint, ThisDrawing.Utility.GetPoint& F" J- Z4 j% i6 \
10
* W. s8 K0 [' u: ^% m2 o0 x. j) `End Sub
, O3 B! ^  m3 I6 }1 e4 r. s2 X
( K7 o" c0 q- {& W9 d6 d9 a    这两行新增的代码告诉计算机“在出错时”“转向执行”“行号为10”的程序行。这个程序里“行号为10”的程序行是空行,程序就会继续向下执行“End Sub”结束程序。
. {3 E& L. `0 q/ [! E    再来告诉朋友们一个小技巧。刚才在键入代码时要键入三次“thisdrawing”,太麻烦了。现在把中间这行画直线的程序删掉,在原位置按照下面的方法重新输入:
: F( \& h, P+ X* W5 i2 X    键入“with thisdrawing”,两次回车,键入“end with”。在中间的空行按下面的顺序键入“.m.addlin .ut.getp,.ut.getp”,空格。代码现在是这个样子:5 O, t4 X: u3 ]
% N, G; |" t. s& Q. E6 B6 g. e
Sub A()3 L6 u. o$ m1 [$ a! a  J
On Error GoTo 10
: q2 g6 s& G& X9 r  a2 Z: Y    With ThisDrawing
# M/ F" G+ ]( r: b- l1 M% c        .ModelSpace.AddLine .Utility.GetPoint, .Utility.GetPoint
+ s5 J# s9 e% e6 ~! A2 Z6 ?    End With
; P5 S8 ?" {" U$ [8 \+ O! c
10( G; h* T* _# |+ O
End Sub
* K5 ]- w- h9 q& j! P. Z: c2 o4 E2 n$ \; k1 C# q! V7 l
    在“With”和“End With”两行之间的所有代码可以省掉“ThisDrawing”,键入的工作量减少了很多。- d. V4 q4 f) M( t$ T3 E3 l# u% c
    程序是能用了,但还不够完美。比如说:指定第二个点时看不到第一个点在哪里;命令行里没有提示,不知道下一步要做什么。! J5 y) m5 E1 L# C
    现在来改进一下程序,让它在指定第二个点时从第一个点处引出一条线,像autocad画线时一样,还要在命令行加上提示内容。
, c) ~7 x9 ]4 u4 f6 U3 t0 D    在上面的程序里,两个点的位置只有画线命令知道,我们并不知道。如果要在程序中不止一次使用这个点的坐标,就必须把这个坐标放到一个地方存放起来,用到的时候就去取。- L5 `5 Z1 n& q2 l' k
    在上面的程序中补充、修改一些代码,让它变成这个样子:" f% E5 Z# u. y. Z; Z
& P9 e5 G: l' r3 }9 V: p6 J* U' ^
Sub A()
0 i# g7 X" {! _" i# F/ W) ~3 OOn Error GoTo 10
' t/ L: F* d* {" N( E    Dim B As Variant
3 C, _* O2 X( p5 G( ^6 e4 z! W- _+ }    With ThisDrawing$ {; {  G9 `4 r% k) v7 {5 i$ ?4 _' d
        B = .Utility.GetPoint(, vbCrLf & "指定起点:")
7 _2 H! W5 L: w( B        .ModelSpace.AddLine B, .Utility.GetPoint(B, vbCrLf & "指定端点:")
! h5 Q4 P- j) c    End With6 o9 Z6 D4 A) S
102 N( ^4 X7 ]* r7 W1 Q
End Sub1 b2 ]' y# Q1 J8 q2 Q0 [! F4 T! H. g$ ^

$ V! Y: [2 d* l    新增加的第三行意思是:定义一个“变体”类型(相当于万能)变量,名字叫“B”--其实这就是一个存放数据的地址。
5 q4 `! C6 F( Q4 y% \% R- R1 e4 ?    第五行的意思是把“当前文档”上“由用户输入”而“得到点的三维坐标”存放到“B”。有一个变化,就是“GetPoint”(得到点坐标)的后面增加了一对括号,里面是参数。该方法共有两个参数:第一个参数是一个三维坐标,第二个参数是命令行提示符。两个参数都是可省略的,在前面的程序中这两个参数就被省略了。! w6 X9 i) L: _5 n( e
    第六行中,画直线方法的起点坐标直接用“B”,端点坐标还是使用得到点坐标方法,和前面不同的是得到点坐标方法的第一个参数被指定为“B”,它的作用是在“B”点和十字光标间显示一条提示性的直线。" x1 v, O0 \1 E# @* U9 p
    字符串要用""括起来,让计算机知道这是一串字符而不是别的东西。字符串前面的“vbCrLf &”是这个字符串的另一部分。其中“vbCrLf”是一个VB常数,相当于“回车+换行”;“&”是连接符,用来把两个部分连接起来(也可以用“+”号)。提示符中有了“vbCrLf &”,该字符串就会在命令行中以单独的一行出现;如果把它去掉,提示符就会和“命令:”在同一行里显示。
: d9 [8 b4 b0 ?1 m1 M! o4 _" e    在这段程序里,我们用到了错误陷阱、定义变量、赋值语句、操作autocad对象画直线的方法和一个VB常数。下面再把这个程序扩展一下,学习更多的VB语句和对象操作方法。
3 r2 \! t* L, L# o" _% w- C$ o    按用户的指令决定是否画一个圆,这个圆以刚才画的直线中点为圆心、以直线长度为直径。
! A- i  K/ D. {9 B  W  \) ]    下面是修改后的代码:
0 J6 Y8 E' r2 D2 |, c; M, i! h9 h9 ~, t$ q( s
Sub A()$ Y( b& o' z) Z' l  U  S
On Error GoTo 10
* n5 X0 v- F+ G  D' J2 Q7 e. C" C    Dim B As Variant '定义一个变体类型变量,用于存放直线起点坐标,被赋值后变为数组) Z3 C$ r' p/ L( ~
    Dim C As AcadLine '定义一个Acad直线对象类型变量,用于存放直线对象8 W8 I1 u" W0 t1 p
    Dim D As Variant '定义一个变体类型变量,用于存放直线端点坐标,被赋值后变为数组
# B$ T+ S  g# q/ O# o& l* P: E    Dim E As String '定义一个字符串类型变量,用于接收用户键盘输入的参数
. a' ?4 I8 f9 V8 d$ w7 r" `    Dim F(2) As Double '定义一个双精度类型数组,用于存放圆心三维坐标; F  U3 D6 d- d# S: Z5 z
    Dim R As Double '定义一个双精度类型变量,用于存放圆的半径
9 y# W8 ]  Y) P" ]# V    $ x, y# @4 m; i! U5 C7 F, A9 c
    With ThisDrawing
# @& s$ @& f9 d7 q, J  Y$ t$ a        B = .Utility.GetPoint(, vbCrLf + "指定起点:") '由用户指定一个点的位置,将坐标赋值给B
' n% n! \! S4 Y  H7 C        Set C = .ModelSpace.AddLine(B, .Utility.GetPoint(B, vbCrLf + "指定端点:")) '从上一个点出发,由用户指定另一个点的位置,在两点间画一条直线,将此直线赋值给C. ?; `2 z1 X3 J; f  E& d6 j
        D = C.EndPoint '将直线C的端点坐标赋值给D- J- S$ w# f1 Y( c
        .Utility.InitializeUserInput 0, "Y N" '规定用户输入Y或N关键字,可以接受直接按回车键或空格键做为默认输入& k' k5 z! q  L3 ^! N% @
        E = .Utility.GetKeyword(vbCrLf & "是否画圆[是(Y)/否(N)]<Y>:") '得到用户输入的关键字并赋值给E
8 R1 T' n: e: _1 `2 E* X9 }% K        If E = "Y" Or E = "" Then '如果用户输入的是Y或直接按的回车或空格,则执行下面画圆的代码,否则跳过下面五行代码
* y- V/ o4 {. S' z0 \6 Z
            F(0) = (B(0) + D(0)) / 2 '这三行是计算圆心即直线中点坐标,取直线起点X坐标和端点X坐标的平均值赋值给圆心的X坐标变量' I  g5 Q% }9 ~9 k' W! @
            F(1) = (B(1) + D(1)) / 2 '取直线起点Y坐标和端点Y坐标的平均值赋值给圆心的Y坐标变量: `' ^5 M, @) i7 c
            F(2) = (B(2) + D(2)) / 2 '取直线起点Z坐标和端点Z坐标的平均值赋值给圆心的Z坐标变量
/ }5 A  F( b0 M+ J; N" U            R = Sqr((D(0) - B(0)) ^ 2 + (D(1) - B(1)) ^ 2 + (D(2) - B(2)) ^ 2) / 2 '用勾股定理计算圆的半径
+ M* M* n/ ~7 A0 R8 V2 Y: @; ~  A            .ModelSpace.AddCircle F, R '在当前文档的模型空间画圆,以F为圆心,R为半径
# s3 B9 m3 _  r9 D0 _6 _        End If
) w6 @) }1 W( n3 z( J" s2 ~4 ^
    End With
$ U/ d, S+ `; v$ E# n+ Q106 _1 T( z/ x% p5 F
End Sub; D% L  n$ ~4 S: K" p
# S- q! D- ]8 U9 }( ]+ p  r; [
    这段程序和前面程序的主要区别有:$ t( P$ m" A9 ^' O- k
1、使用了注释语句。单引号后面的文字在程序运行时不被执行,仅起到对编程者的提示作用。这在编制大一点的程序时是很有用的,否则过段时间你自己都会忘记当初是怎么编的了。
; c9 f) t$ }( F: h) x! O2、定义变量时,同样是三维坐标,B和D被定义为变体类型,F被定义为双精度数组。这是因为B和D是由方法或对象的属性直接用“点”赋值的,B和D得到数据后自动变为数组;F是由我们对三维坐标分别运算后赋值,只能用数组。3 B5 Z* k& w. q$ b4 a; E5 h4 q: z) h
3、“Set C =...."这行,对直线赋值时,参数用括号括起来了。在前面的程序中,直线只是画了出来,并没有赋值给某个变量(没有=号),参数就不能用括号;现在它被赋值给一个变量了,参数要括起来。这是语法。
+ \1 D" I$ h+ V, Z% P4、“InitializeUserInput”方法有两个参数,第二个参数是关键字列表;第一个参数是对输入方式的限制,这里用了0,可以接受直接按回车键或空格键做为默认输入,但默认输入的是空字符串,而不是关键字列表中的一个。& U- i' z, H: ?! m. o
5、“If...Then...End If”使用了条件转移语句。具体用法可以参见VB资料。
6 b8 Q# P, x8 `. i# K    弄懂了这段程序,其实你对VBA已经初窥门径了。当然,VB语法和autocad对象远不止这些,但也都大同小异,学会了这些,再学其它的就容易了,就像我们学会了WORD,再学EXCEL就很容易一样。不要被VBA帮助文件那浩如烟海的资料所吓倒,其实那里面绝大部分东西用法都差不多。学会了基本的几个,再浏览一下帮助文件,知道这里面都有什么东西,用到的时候现查都来得及。/ I* g4 u2 U, O. n
    上传一个《Visual Basic 语言参考-函数速查》,希望对学习VBA的朋友有用。7 N% C3 ~! p. o9 j

* w( z+ i9 B) E. S- y[ 本帖最后由 woaishuijia 于 2007-1-14 16:17 编辑 ]
作者: andy_syl    时间: 2007-1-14 21:54
标题: 楼主真是历害
偶也CAD几年了啊,对这是一巧不通啊,真是惭愧啊,楼主能指点下吗?万分感谢啊
作者: huangma    时间: 2007-2-1 17:43
非常感谢,学习学习,想完了做几个程序试试
作者: shaoshuai968    时间: 2007-2-2 19:14
我的宏里怎么一片空白啊  没有Visual Basic 编辑器
作者: woaishuijia    时间: 2007-2-3 06:32
标题: 回复 #14 shaoshuai968 的帖子
可能安装autocad时用的是“简单”模式,没有选择安装VBA编辑器吧?用安装盘添加试试。
作者: honza    时间: 2007-2-6 17:57
标题: 試著用VB.NET來二次開發吧!
真的!速度會讓你感動。
作者: hys623723    时间: 2007-2-15 10:02
看来论坛里面是强手如云啊,以前我还自认为自己的水准还可以的,现在看来差远了!!
作者: maoyangmy    时间: 2007-2-20 03:13
能不能开辟一个二次开发的专栏?
作者: daguan8    时间: 2007-2-20 10:29
楼主真是有心,深入浅出地引导大家对VBA和LISP的兴趣,不久,我们坛子一定会出现好多高手了,这样也就能提高我们的工作效率,远一点地说就能提高我们国民的水平。多有楼主这样的人,我们国家早晚都会成为世界的强国。
! @0 n" S# t( G1 J4 \! a
作者: 冷雨秋    时间: 2007-7-15 15:16
vba对我来说实在是很难,难的是不知道从哪里下手啊?
4 n0 Z+ ?& z! B9 N; W# f( `& `( m0 g2 y请高手指点~
作者: spy0028    时间: 2007-7-17 21:11
由简到难嘛
作者: eric.bo    时间: 2007-7-18 08:49
嘿嘿,偶也正在学习.如果开一个二次开发的子板块就好了.
作者: nyh2000    时间: 2007-7-18 08:59
为什么我打开以后插入菜单下为灰色,不能使用呢?
作者: WXJLDH    时间: 2007-7-18 15:40
标题: 题目不错,我看不简单.
题目不错,我看不简单.要达到实际应用更不简单!
% _* p5 j6 i% C7 ^
4 Y6 @1 r! F7 ^. Z7 h3 ]6 W4 o而软件开发更注重的应该是实际应用!
作者: 天龙八部    时间: 2007-7-21 13:20
嘻嘻哈哈,现在是.NET的时代了,VB,C++都已经升级了,VISUAL STUDIO 的开发环境是非常棒的
作者: 幽蓝    时间: 2007-7-21 22:56
前两个程序已经看懂了,谢谢。如果能以此为契机,开个专题教程连载或板块那就更好了。
作者: zhero36    时间: 2007-7-22 02:07
呵,我们也试过二次开发autoCAD,不过都是最简单的那些
作者: xfljonyi    时间: 2007-8-1 14:52
楼主辛苦了,如果有一个详细实例教由浅入深的练习,哪就更好了?
作者: JSKSGS    时间: 2007-8-1 18:23
看了介绍对二次开发autoCAD有了一些初步认识,我也想来试试
作者: longer810714    时间: 2007-8-3 16:02
我们的本科毕业论文就是做二次开发autoCAD,所以看到上面的很亲切!
作者: zym1204    时间: 2007-9-10 20:16
原来以为CAD就只能画图没想到还有这么多的玄机呀, 看来要好好学习了
作者: xiaojinidvcn    时间: 2007-10-4 19:26
我编了个工程(DVB),然后加载了。但我不知道在命令行如何启动它。请大家帮忙指教!
作者: woaishuijia    时间: 2007-10-4 20:12
在命令行输入“-vbarun”,回车,命令行会提示“宏名称(M):”,输入宏名称就运行了。
% V# Q$ ^# x9 R' f/ k! a编写VBA工程时,宏名字不要用汉字,命令行不支持。如果用了汉字,只能从对话框启动。1 X1 x# ~; |3 d/ c- _; p
用CAD2005版本,一旦加载VBA,CPU运行100%,用CAD2008就没有这个问题。
作者: xiaojinidvcn    时间: 2007-10-5 06:36
谢谢楼上的大哥回答,不过我问的是如何在AUTOCAD的命令行中启动一个VBA的对话框(也就是窗体)?
作者: woaishuijia    时间: 2007-10-5 08:41
vbaide显示 Visual Basic 编辑器。5 A" W0 }6 r- v  Z2 l7 y; j" `
vbaload显示“打开 VBA 工程”对话框。
) H. k& P" o9 C" wvbaman显示 VBA 管理器。# Y+ A& m( @0 h8 n3 H) |8 j
vbarun显示“宏”对话框。
作者: xiaojinidvcn    时间: 2007-10-5 10:35
我已经了解决了,跟大家一起分享一下。同时也给楼主的文章补充。我想这也是我们初学者的障碍。1 \& Y2 B+ p( I" R+ y! f
谢谢楼上的大哥回答,不过我问的是如何在AUTOCAD的命令行中启动一个VBA的对话框(也就是窗体)?
0 W( |) W' W! Q+ ?
第一步:首先需要创建一个VBA窗体。启动Visual Basic 编辑器,从菜单中选择  插入→用户窗体(缺省名称为UserForm1);
' _) M- W; Q, A9 U第二步:添加合适的控件到你窗体中,同时对每个控件添加程序,完成相应的动作;
8 ^3 G; l& s" i% s$ s4 K第三步:从菜单中选择 插入→模块;
+ i( ~+ R5 j$ H. |5 I& j第四步:输入以下的代码到刚才建立的Module 1模块中:/ T% j" ^- h! i' ?: Q  }7 |
Sub jin()
+ o& b8 G5 T% |9 h9 {/ SUserForm 1.show% [( `, H* ?& D: y: o& K0 Z
end Sub$ ~  u7 y' f6 Y! Y
注:这是这句话,在先前困扰了我。-VBARUN先激活这句话,然后来显示我们的窗体。
$ A: z- Z# X% U% d$ f9 A4 s- q% B第五步:保存成(.dvb)工程。然后在CAD里加载它。
( m9 @( M( v. |- K* R最后,CAD命令行中输入:-VBARUN Module1.jin 。
" ]. h) O5 ^1 x. V* zOK,编的对话框出现了。
8 J* d  h0 L9 c6 j2 e/ ~: `好了,我语言组织的不好,请大家见谅。不过意思应该看的懂吧?
作者: maoyangmy    时间: 2007-10-5 11:05
回去试试,但愿像楼主说的那样简单。
作者: huzuoan    时间: 2007-10-5 13:22
本人试了一下,没有问题。用的是AutoCAD 2008版本。
作者: 新猎手    时间: 2007-10-5 16:57
感谢楼主,对CAD的二次开发,不是太懂,看了楼主介绍的,下下来认真学习一下,在自已的机子上认真练一下,师傅领进门,修行靠个人!
作者: wxq623623623623    时间: 2007-10-6 21:06
经过楼主的这么一引导,我对CAD编程也有兴趣了,已将楼主的编程过程复制,下来好好研究研究。
作者: bophy2007    时间: 2007-10-27 14:01
我画图和VBA,vb是同时学的,已经一年了,也做了几个小程序。但在做的过程中还是遇到许多不懂的问题。 期待与你们一起交流。QQ:109641872
5 K+ G. b! p  c6 F' c希望回帖的人也都把自己的QQ号给出,这样找人也好找一些。
作者: shuen    时间: 2007-10-27 20:39
我很学二次开发autoCAD,上面说得太好了,很基础,对我很有用,谢谢分享
作者: Barnacle    时间: 2007-10-28 21:44
强烈渴望学习 CAD二次开发
作者: 123456ZXCVBN    时间: 2008-4-18 21:44
提示: 该帖被管理员或版主屏蔽
作者: ★新手★    时间: 2008-4-18 22:13
楼主 你真是胆大!公然复制他人帖子来发!
$ ]" Q" P; Y, i1 r1 l# K/ [. ?; ]这次先扣十倍的分数!
% M) X9 v6 `/ j  z再这样下次将禁止你发言了!
' z4 m. t5 e/ o
. ~/ \: d& I# ghttp://www.3dportal.cn/discuz/vi ... 2%C3%B4%BC%F2%B5%A5
作者: hys623723    时间: 2008-6-7 17:09
哈哈,有点意思,剽窃哦!!
作者: leepo    时间: 2008-6-7 21:18
想加楼主为好友,我的qq号是498769575
+ _/ K: r: |2 B1 f8 H9 m/ j/ O% T5 _
[ 本帖最后由 leepo 于 2008-6-7 21:30 编辑 ]
作者: danbaizhi0    时间: 2008-6-22 12:20
cad 真的这么好用吗  
作者: snk2207050126    时间: 2008-6-22 14:27
标题: 回复 1# 的帖子
看不太懂啊~~~~~~!!
作者: babo    时间: 2008-6-22 16:38
试了一下,不过不是很明白。
作者: zhangling321    时间: 2008-6-22 23:44
啊   不怎么明白
作者: ug学习    时间: 2008-8-5 11:49
用了几年的cad看到楼主的这些真的是感到惭愧呀!!楼主真强。good
作者: ltdzd    时间: 2008-8-16 21:27
强悍!!!
0 I7 l) e1 I( f: ~8 k实在是强悍
作者: china01chen    时间: 2008-8-27 00:06
我现在的想法是怎么取消呀?! a$ K) Q, ^3 F# O5 m/ u' M! Z
可能是我学艺不精,现在造成的是,运行程序时就有个提示:QQ:252545152的提醒。( o6 l# c4 x  Q* n( ?( }0 {& q
开始画图是画线的图层始终是0图层,移动时还复制上了。晕!!!
作者: china01chen    时间: 2008-8-27 13:32
楼主你好!( M. ^" ]" L! m" T: b
    我就是想回复到干净的cad状态下,因为产生了很多不习惯的操作。移动时同时进行了复制,而且执行画线命令时图层都是0图层,从别的图纸上复制块时粘贴无效。由于要急着出图,昨晚加班恢复了系统了。
! g8 _' Z, Q0 K* [- e    等闲些了再向楼主学习!
作者: china01chen    时间: 2008-8-27 13:51
呵呵,刚刚在论坛里搜索了一下,原来是中了“党不会亏待你的”病毒!错怪了,不好意思,今后还向你学习!!
作者: qingfengwht    时间: 2008-8-28 13:12
我的里面也没有VB编辑器
作者: votasee    时间: 2008-9-2 15:59
汗..我的CAD好像没有 Alt+F11) j# N9 [; u% e6 P; C( R. e  a

4 ~, i6 X$ Z  S" m2 ]: T另外你讲得也太简单了些吧....这样做.似乎没多大意义啊....
* q: N. n9 h8 m' m; s' t& [" P+ p8 l: t  T( O
稍微多点东西 啊..来讲讲啊.
作者: qwquse    时间: 2008-9-4 08:22
58楼啊,我复制了你的运行后出现这问题
作者: woaishuijia    时间: 2008-9-5 11:22
标题: 回复 60# 的帖子
这个程序只是文件的一部分。1 B: `% l# E3 _
到这个帖子去下载附件http://www.3dportal.cn/discuz/vi ... d=161590#pid2615249
作者: mimimao383    时间: 2008-9-5 15:35
看楼主的第一个作品是2007一月的,进步之快,作品之优秀另人赞叹!
作者: shirleykine1980    时间: 2008-9-16 20:17
谢谢楼主,我终于找到自信了。。。。。。。。。thank you
作者: shirleykine1980    时间: 2008-9-16 21:22
太感谢楼主了,,这是有史以来,我看的最仔细的帖子了。。从来没有一个帖子能让我琢磨那么长时间。。让我受益匪浅
作者: garychen    时间: 2008-9-19 11:59
vba真是个好东西,其实他还可以用在其他很多软件里面。
- S% P( ~8 h0 n# Y真是一把万能刀啊。
作者: liuzhuoqiang    时间: 2008-9-20 09:19
学习了
3 W, l: \* `) {& H/ i5 G非常感谢
作者: mgame168    时间: 2008-9-21 02:06
感謝樓主教程5 R1 a) ^% E( Y
淺顯易懂
作者: OUCEGEN    时间: 2008-9-21 20:43
谢谢楼主分享!!支持一下
作者: izzue    时间: 2008-9-25 16:05
l厉害,,,,看了这,,,感觉好有收藏价值。。。
作者: xhf2411    时间: 2008-9-27 21:40
看了后很激动,看来有必要学学VBA了.
作者: ju5tsoso    时间: 2008-9-28 11:14
这个真应该好好学学
作者: 燕南北    时间: 2008-10-3 08:23
以前也学过点VB
) |1 D8 H6 w- s0 N! a6 W现在想来...多学点东西是相当有用的
作者: xuj321123    时间: 2008-10-4 10:35
说着是很容易的事情,做起来难那
作者: ryljun    时间: 2008-10-4 21:21
原帖由 nyh2000 于 2007-7-18 08:59 发表 http://www.3dportal.cn/discuz/images/common/back.gif
: a+ _# A9 B$ H- ]: E为什么我打开以后插入菜单下为灰色,不能使用呢?
& K, K( A3 p: M, p) W, x
你都没建立文件呢同志!
作者: xxwei    时间: 2008-10-5 13:07
好资料,谢谢分享,学习
作者: ljm68a    时间: 2008-10-12 22:30
不错,想学习,试一试看看
作者: lovegod158    时间: 2008-10-13 16:16
标题: 讨教讨教
不错,刚好我也想学这个,还望多多关照
作者: danren0740    时间: 2008-10-14 23:17
学习了,感觉好惭愧啊
作者: lq8639    时间: 2008-10-16 11:24
看的我 有点晕
0 D6 ~) E1 j+ A( |% F我现在去开CAD
' q+ |0 Z: M6 v; o: C% k做着试一下 不会了再来问
作者: wangqijun    时间: 2008-10-16 19:47
标题: 要想深入点学习CAD二次开发方面的知识 该买什么书啊?望LZ给指点下 谢谢
要想深入点学习CAD二次开发方面的知识 该买什么书啊?望LZ给指点下 谢谢
作者: abcabcxyz    时间: 2008-10-23 21:20
感谢楼住提供的这么好的资料,这么好的讲解
作者: lwa2008    时间: 2008-10-28 08:20
太菜了
( o" [/ k! J; Z, e9 q0 i$ d都看不懂前辈们讲的到底实现了什么效果
作者: hurong_88    时间: 2008-10-29 22:43
楼主真是辛苦了!
作者: kunke    时间: 2008-10-31 18:29
不会啊........有没有教程可以做出来一下....
作者: 13631178663    时间: 2008-11-4 13:54
没错,学习最大的敌人是畏惧~~真的要好好努力学习!
作者: lizhongyi    时间: 2008-11-4 15:51
偶也CAD几年了啊,对这是一巧不通啊,真是惭愧啊,楼主能指点下
作者: gyw158    时间: 2008-11-7 11:23
标题: 回复 3# daguan8 的帖子
谢谢点拨,但是我还是怕怕的!!!!!!!!!
作者: 华源内饰    时间: 2008-11-12 09:18
标题: 对VB一窍不通的人看来要想学这个很难嘛?
对VB一窍不通的人看来要想学这个很难嘛?
作者: woaishuijia    时间: 2008-11-12 10:29
标题: 回复 87# 华源内饰 的帖子
对于没有任何编程基础的人来说,LISP的语法简单更容易上手。对于有BASIC基础的人来说适合学VBA,对于有C语言基础的人来说可能更适合的是ARX。
作者: pcyong    时间: 2008-11-22 11:22
标题:
看得我一头雾水 )1*(
作者: tnt120032402    时间: 2008-11-22 17:37
整了一下午,发现一点,VBA的格式很重要,不仔细一点都不知道怎么错的
作者: 攻击波    时间: 2008-11-25 10:12
学习一下干净二次开发知识。
作者: iamearl    时间: 2008-11-25 13:48
非常赞成,谢谢楼主了。我也想好好练习
作者: jichao1515    时间: 2008-11-27 12:52
标题: 一往情深
对vb是一往情深,可是在学校里学的是。net,而且,学的都是算法,根本没有设计绘图,而且vb 和 net 语法不太一样,难为死我了,有没有可以把net的源程序翻译为vb的工具呢?
作者: sgj218888    时间: 2008-11-27 19:20
lisp我还可少些懂点,VBA就一点不通了,请教楼主比较起来哪个学起来容易,哪个用起来方便,好确定学习的方向啊
作者: zhuxingyin    时间: 2008-12-1 10:27
原来CAD有这么强的呀,不知道2004版的支持VBA否?
作者: zhuxingyin    时间: 2008-12-1 10:29
我来试验一下
作者: 562397594    时间: 2008-12-4 19:59
想学习关于这个方面的知识,楼主谢谢提供,收藏了啊啊
作者: sunjihey    时间: 2008-12-15 10:55
挺好玩的,楼主有没有相关的资料分享一下,比较简单的扫盲的就可以
作者: gjlyc    时间: 2008-12-15 13:30
刚接触,望高手能多提供一些这方面的基本资料
作者: poxiangzi    时间: 2008-12-15 13:38
VB开发是很简单,支持一下楼主。看来这个帖子还能聚集不少人哦。




欢迎光临 三维网 (https://www.3dportal.cn/discuz/) Powered by Discuz! X3.4