[教学]:VBA新手入门学堂:从头开始学习VBA
如果您对VBA完全是外行,来这吧,你不会失望的!我觉得学VBA(或其他程序),“任务驱动法”是最有效的!写出一个程序就能进一步。
第一课:用VBA画圆。
http://www.xdcad.net/bbstech/develop/vba/ahlzl/vba1.swf
代码
Sub vba1()'我的第一个VBA程序——画一个圆。
'先定圆心坐标
Dim cen(2) As Double
cen(0) = 100: cen(1) = 200: cen(2) = 0 '这就是圆心的坐标
'再定半径
Dim R As Double
R = 300 '这就是半径
'有了圆心和半径就可以画圆了!
Dim C As AcadCircle
Set C = ThisDrawing.ModelSpace.AddCircle(cen, R) '在“当前文档”的“模型空间”里“画圆”
ZoomExtents
End Sub
从代码中可以看出,VBA中是通过“圆心cen(2)”和“半径R”来画圆的。因此,要先给圆心、半径“赋值”,而“赋值”前,要先对相应的变量进行“声明”。 如果能看懂上述代码,那下面的代码都不难理解了。
Sub vba2()
'画一个蓝色的圆。
Dim cen(2) As Double
cen(0) = 100: cen(1) = 200: cen(2) = 0
Dim R As Double
R = 300
Dim C As AcadCircle
Set C = ThisDrawing.ModelSpace.AddCircle(cen, R) '在“当前文档”的“模型空间”里“画圆”
C.color = acBlue '将圆的颜色设为蓝色
'画一条红色的直线
Dim sp(2) As Double, ep(2) As Double
sp(0) = 0: sp(1) = 0: sp(2) = 0
ep(0) = 300: ep(1) = 400: ep(2) = 0
Dim L As AcadLine
Set L = ThisDrawing.ModelSpace.AddLine(sp, ep) '根据“起点”和“终点”画直线
L.color = acRed '将直线的颜色设为红色
'画一圆弧,用现成的变量
pi = 3.1415926535
Dim A As AcadArc
Set A = ThisDrawing.ModelSpace.AddArc _
(sp, R, 30 * pi / 180, 150 * pi / 180) '根据圆心、半径、起始角、终止角画圆弧
A.Lineweight = acLnWt030 '将圆弧的线宽设为0.3mm
A.Update '刷新,显示线宽
'过点(800,150),(120,240),(320,600),(350,720)画一二维多段线,并闭合。
Dim po(9) As Double
po(0) = 800: po(1) = 150: po(2) = 120: po(3) = 240
po(4) = 320: po(5) = 600: po(6) = 350: po(7) = 720
Dim PL As AcadLWPolyline
Set PL = ThisDrawing.ModelSpace.AddLightWeightPolyline(po)
PL.Closed = True '使多段线闭合
ZoomExtents '范围缩放
End Sub
说明:画圆弧时,起始角和终止角分别为30度和150度,但VBA中的角度变量应为弧度,故应进行转化,把度化为弧度。 在更多的情况下,点的坐标和距离值要由用户输入。
下面我们来画一直线,两端点坐标由用户输入,再画一个圆,圆心在所画直线的起点,半径也由用户来输入。
Sub vba3()
'画直线
Dim sp As Variant, ep As Variant
sp = ThisDrawing.Utility.GetPoint(, "请输入直线的起点:")
ep = ThisDrawing.Utility.GetPoint(sp, "请输入直线的终点:")
Dim L As AcadLine
Set L = ThisDrawing.ModelSpace.AddLine(sp, ep) '根据“起点”和“终点”画直线
'画一圆
Dim rAs Double
r = ThisDrawing.Utility.GetDistance(sp, "请输入半径")
Dim C As AcadCircle
Set C = ThisDrawing.ModelSpace.AddCircle(sp, r)
ZoomExtents '范围缩放
End Sub VBA是通过ActiveX方法和CAD交互。此外,还可使用SendCommand方法,和AutoLisp中的command函数很相似。
Sub vba4()
'VBA代码
'以(100,200)为圆心,500为半径画圆。
ThisDrawing.SendCommand ("circle" + vbCr + "100,200" + vbCr + "500" + vbCr)
End Sub
(defun c:cc()
;AutoLisp代码
(command "circle" "100,200" "" "500" "")
) 一想到赋值,长不大的斑竹就觉得VBA代码的可读性要优于LISP。
如x=(a+b)/2,
;LISP代码
(setq x (/ (+ a b) 2))
'VBA代码
x = (a + b) / 2
越是复杂的赋值语句,VBA代码可读性好的优点就越突出。 第3贴中的二维多段线,在VBA中有两种:AcadLWPolyline和AcadPolyline,分别用AddLightweightPolyline方法和AddPolyline方法创建。
Sub Example_AddPolyline()
Dim plineObj As AcadPolyline
Dim points(0 To 14) As Double
points(0) = 1: points(1) = 1: points(2) = 0
points(3) = 1: points(4) = 2: points(5) = 0
points(6) = 2: points(7) = 2: points(8) = 0
points(9) = 3: points(10) = 2: points(11) = 0
points(12) = 4: points(13) = 4: points(14) = 0
Set plineObj = ThisDrawing.ModelSpace.AddPolyline(points)
End Sub
Sub Example_AddLightWeightPolyline()
Dim plineObj As AcadLWPolyline
Dim points(0 To 9) As Double
points(0) = 1: points(1) = 1
points(2) = 1: points(3) = 2
points(4) = 2: points(5) = 2
points(6) = 3: points(7) = 2
points(8) = 4: points(9) = 4
Set plineObj = ThisDrawing.ModelSpace.AddLightWeightPolyline(points)
End Sub 学了一段时间,要测验一下……
出个题目:画一个三角形和它的三条中线,要求三角形的三个角点由用户输入,三角形和其中线由程序自动生成。
哦,还有一难点的附加题:画一个三角形和它的三条角平分线,要求三角形的三个角点由用户输入,三角形和其角平分线由程序自动生成。
页:
[1]