AutoCAD 二次开发 VBA 基础与实例Word文档格式.docx

上传人:b****2 文档编号:4293369 上传时间:2023-05-03 格式:DOCX 页数:151 大小:462.94KB
下载 相关 举报
AutoCAD 二次开发 VBA 基础与实例Word文档格式.docx_第1页
第1页 / 共151页
AutoCAD 二次开发 VBA 基础与实例Word文档格式.docx_第2页
第2页 / 共151页
AutoCAD 二次开发 VBA 基础与实例Word文档格式.docx_第3页
第3页 / 共151页
AutoCAD 二次开发 VBA 基础与实例Word文档格式.docx_第4页
第4页 / 共151页
AutoCAD 二次开发 VBA 基础与实例Word文档格式.docx_第5页
第5页 / 共151页
AutoCAD 二次开发 VBA 基础与实例Word文档格式.docx_第6页
第6页 / 共151页
AutoCAD 二次开发 VBA 基础与实例Word文档格式.docx_第7页
第7页 / 共151页
AutoCAD 二次开发 VBA 基础与实例Word文档格式.docx_第8页
第8页 / 共151页
AutoCAD 二次开发 VBA 基础与实例Word文档格式.docx_第9页
第9页 / 共151页
AutoCAD 二次开发 VBA 基础与实例Word文档格式.docx_第10页
第10页 / 共151页
AutoCAD 二次开发 VBA 基础与实例Word文档格式.docx_第11页
第11页 / 共151页
AutoCAD 二次开发 VBA 基础与实例Word文档格式.docx_第12页
第12页 / 共151页
AutoCAD 二次开发 VBA 基础与实例Word文档格式.docx_第13页
第13页 / 共151页
AutoCAD 二次开发 VBA 基础与实例Word文档格式.docx_第14页
第14页 / 共151页
AutoCAD 二次开发 VBA 基础与实例Word文档格式.docx_第15页
第15页 / 共151页
AutoCAD 二次开发 VBA 基础与实例Word文档格式.docx_第16页
第16页 / 共151页
AutoCAD 二次开发 VBA 基础与实例Word文档格式.docx_第17页
第17页 / 共151页
AutoCAD 二次开发 VBA 基础与实例Word文档格式.docx_第18页
第18页 / 共151页
AutoCAD 二次开发 VBA 基础与实例Word文档格式.docx_第19页
第19页 / 共151页
AutoCAD 二次开发 VBA 基础与实例Word文档格式.docx_第20页
第20页 / 共151页
亲,该文档总共151页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

AutoCAD 二次开发 VBA 基础与实例Word文档格式.docx

《AutoCAD 二次开发 VBA 基础与实例Word文档格式.docx》由会员分享,可在线阅读,更多相关《AutoCAD 二次开发 VBA 基础与实例Word文档格式.docx(151页珍藏版)》请在冰点文库上搜索。

AutoCAD 二次开发 VBA 基础与实例Word文档格式.docx

pt1

(1)=0:

pt1

(2)=0

pt2(0)=100:

pt2

(1)=100:

pt2

(2)=0

DimobjLineAsAcadLine

SetobjLine=ThisDrawing.ModelSpace.AddLine(pt1,pt2)

EndSub

第三集AutoCADVBA创建直线2

上面的过程可以在模型空间内画出一条指定起点和终点的直线,但是如果指定的不是起点和终点,那该怎么办呢,我们可以通过相关的函数将其转换成起点和终点的形式,也可以自定义函数来实现相应的操作。

我们看到了上面过程的最后一个表达式很长,自定义函数可减少这种代码的书写,当然,如果你是初学AutoCADVBA编程的话,我建议还是尽量多些这些长的代码,因为他可以帮助你理解AutoCADVBA中各种对象和方法以至属性之间的关系。

那么过程和函数之间有什么区别呢?

我们用关键字Sub定义的一段代码为过程,而用关键字Function定义的一段代码为函数,过程和函数都可实现一定的功能或者操作。

过程没有返回值,而函数可以有返回值,这样就可将一长段代码其中的部分功能用函数封装起来。

这样做的好处是,使得代码的可读性更强,代码看起来更简练,同时如果多个功能代码都有相同的部分,则可以减少书写的次数。

下面我们根据四种不同的情况来分别写出相应的函数:

'

根据起点和终点创建直线

PublicFunctionAddLine(ByValptStAsVariant,ByValptEnAsVariant)AsAcadLine

SetAddLine=ThisDrawing.ModelSpace.AddLine(ptSt,ptEn)

EndFunction

第四集AutoCADVBA创建直线2

根据起点和终点的坐标创建直线

PublicFunctionAddlineXY(ByValx1AsDouble,ByValy1AsDouble,ByValx2AsDouble,ByValy2AsDouble)AsAcadLine

Dimpt1

(2)AsDouble

Dimpt2

(2)AsDouble

pt1(0)=x1:

pt1

(1)=y1:

pt1

(2)=0'

注意不要忘记给数组的最后一个变量赋值

pt2(0)=x2:

pt2

(1)=y2:

SetAddlineXY=ThisDrawing.ModelSpace.AddLine(pt1,pt2)

根据起点和相对起点的直角坐标创建直线

PublicFunctionAddLineReXY(ByValptStAsVariant,ByValxAsDouble,ByValyAsDouble)AsAcadLine

DimptEn

(2)AsDouble

ptEn(0)=ptSt(0)+x:

ptEn

(1)=ptSt

(1)+y:

ptEn

(2)=0

SetAddLineReXY=ThisDrawing.ModelSpace.AddLine(ptSt,ptEn)

根据起点和相对极坐标创建直线

PublicFunctionAddLineReAL(ByValptStAsVariant,ByValangleAsDouble,ByValdistAsDouble)AsAcadLine

ptEn(0)=ptSt(0)+dist*Cos(angle)

ptEn

(1)=ptSt

(1)+dist*Sin(angle)

ptEn

(2)=ptSt

(2)

SetAddLineReAL=ThisDrawing.ModelSpace.AddLine(ptSt,ptEn)

上面的些函数可以为我们作为我们以后书写代码的基础

第五集AutoCADVBA创建多段线

再将创建多段线之前,我们先看一下多段线和轻量多段线的区别,如果你是创建二维图形,那么在用VBA创建时,只有坐标的参数有区别,轻量多段线只有x、y两个坐标值,而多段线则有x、y、x三个坐标值。

下面我们先看一下如何通过代码来创建多段线和轻量多段线。

创建多段线

PublicSubPolyLineDemo()

DimptArr(8)AsDouble

ptArr(0)=100:

ptArr

(1)=100:

ptArr

(2)=0

ptArr(3)=200:

ptArr(4)=200:

ptArr(5)=0

ptArr(6)=100:

ptArr(7)=200:

ptArr(8)=0

If(UBound(ptArr)+1)Mod3<

>

0Then

MsgBox"

数组元素个数不匹配"

ExitSub

EndIf

DimobjPolyLineAsAcadPolyline

SetobjPolyLine=ThisDrawing.ModelSpace.AddPolyline(ptArr)

 

创建轻量多段线

PublicSubLWPolyLineDemo()

DimptArr(5)AsDouble

ptArr

(2)=200:

ptArr(4)=100:

ptArr(5)=200:

If(UBound(ptArr)+1)Mod2<

DimobjPolyLineAsAcadLWPolyline

SetobjPolyLine=ThisDrawing.ModelSpace.AddLightWeightPolyline(ptArr)

通过上面的代码我们可以创建多段线和轻量多段线,两者的区别仅在z轴坐标上。

如果我们要改变线的宽度那该怎么办呢?

可以通过改变相应的属性,最后调用update方法来实现。

objPolyLine.ConstantWidth=0.5

objPolyLine.Update

objPolyLine.Closed=True

当然我们也可以像上一集那样通过封装直线来封装多线,通过起点终点、或起点坐标终点坐标来实现多线的创建,但是通常在创建多线时,线的点数是不确定的,所以那样封装的意义就不是很大了。

那么如何在多线中包含圆弧,我们留到后面的章节来讲。

第六集AutoCADVBA创建圆1

在AutoCAD2014中,系统为我们提供了6种画圆的方法,而在AutoCADVBA中,程序只提供了一种方法即AddCircle,在实际应用中可能要用到多种创建圆的方法,那么如何在VBA中也能像CAD实现多种方法来创建圆。

首先我们看一下在VBA中如何创建一个简单的圆

通过圆心和半径创建圆

PublicSubCircleDemo()

DimptCen

(2)AsDouble

DimradiusAsDouble

DimobjCircleAsAcadCircle

ptCen(0)=100:

ptCen

(1)=100:

ptCen

(2)=0

radius=50

SetobjCircle=ThisDrawing.ModelSpace.AddCircle(ptCen,radius)

我们也可以像创建直线那样来封装对圆的创建。

我们来看前面4种对圆的封装

PublicFunctionAddCircle(ByValptCenAsVariant,ByValradiusAsDouble)AsAcadCircle

SetAddCircle=ThisDrawing.ModelSpace.AddCircle(ptCen,radius)

通过圆心和直径创建圆

PublicFunctionAddCircleCD(ByValptCenAsVariant,ByValdiameterAsDouble)AsAcadCircle

SetAddCircleCD=ThisDrawing.ModelSpace.AddCircle(ptCen,diameter/2)

通过两点创建圆,两点为圆的直径上的两个点

PublicFunctionAddCircle2P(ByValpt1AsVariant,pt2AsVariant)AsAcadCircle

ptCen(0)=(pt1(0)+pt2(0))/2

ptCen

(1)=(pt1

(1)+pt2

(1))/2

ptCen

(2)=(pt1

(2)+pt2

(2))/2

radius=Sqr((pt1(0)-pt2(0))^2+(pt1

(1)-pt2

(1))^2)/2

SetAddCircle2P=ThisDrawing.ModelSpace.AddCircle(ptCen,radius)

第七集AutoCADVBA创建圆2

通过三点创建圆

三点如果在一条直线上,则无法创建圆,这里我们先不考虑这种情况

通过几何的知识来找出圆心,垂直平分线

PublicFunctionAddCircle3P(ByValpt1AsVariant,ByValpt2AsVariant,ByValpt3AsVariant)AsAcadCircle

DimptCenAsVariant

Dimpt12

(2)AsDouble

Dimpt23

(2)AsDouble

'

两条直线的起点坐标

pt12(0)=(pt1(0)+pt2(0))/2

pt12

(1)=(pt1

(1)+pt2

(1))/2

pt12

(2)=(pt1

(2)+pt2

(2))/2

pt23(0)=(pt2(0)+pt3(0))/2

pt23

(1)=(pt2

(1)+pt3

(1))/2

pt23

(2)=(pt2

(2)+pt3

(2))/2

Dimline12,line23,line12z,line23zAsAcadLine

Setline12=ThisDrawing.ModelSpace.AddLine(pt1,pt2)

Setline23=ThisDrawing.ModelSpace.AddLine(pt2,pt3)

Dimangle1,angle2AsDouble

angle1=line12.angle+1.570793

angle2=line23.angle+1.570793

Setline12z=AddLineReAL(pt12,angle1,100)

Setline23z=AddLineReAL(pt23,angle2,100)

ptCen=line12z.IntersectWith(line23z,acExtendBoth)

radius=Sqr((pt1(0)-ptCen(0))^2+(pt1

(1)-ptCen

(1))^2)

SetAddCircle3P=ThisDrawing.ModelSpace.AddCircle(ptCen,radius)

第八集AutoCADVBA循环语句

第九集AutoCADVBA创建圆弧1

在AutoCAD2014中,系统为我们提供了11种绘制圆弧的方法,但是在AutoCADVBA中,同样只提供了一种创建圆弧的方法,即AddArc。

而在通常的程序设计中我们可能会用到多种的圆弧创建方法,这就需要对基本的方法进行扩展。

这里我们封装6种方法

下面我们先来看一个简单的圆w弧创建实例

通过基本方法创建圆弧

PublicSubArcDemo()

DimstAngAsDouble

DimenAngAsDouble

radius=200

stAng=0.1745329

enAng=2.0943948

DimobjArcAsAcadArc

SetobjArc=ThisDrawing.ModelSpace.AddArc(ptCen,radius,stAng,enAng)

通过圆心,半径,起始角度和终止角度创建圆弧

PublicFunctionAddArc(ByValptCenAsVariant,ByValradiusAsDouble,ByValstAngAsDouble,ByValenAngAsDouble)AsAcadArc

SetAddArc=ThisDrawing.ModelSpace.AddArc(ptCen,radius,stAng,enAng)

通过圆心,起点和端点创建圆弧

在创建圆时我们通过图元对象的属性了获得我们需要的信息

这里我们通过utility对象来获取相关的信息

PublicFunctionAddArcCSN(ByValptCenAsVariant,ByValptStAsVariant,ByValptNodeAsVariant)AsAcadArc

radius=Sqr((ptSt(0)-ptCen(0))^2+(ptSt

(1)-ptCen

(1))^2)

stAng=ThisDrawing.Utility.AngleFromXAxis(ptCen,ptSt)

enAng=ThisDrawing.Utility.AngleFromXAxis(ptCen,ptNode)

SetAddArcCSN=ThisDrawing.ModelSpace.AddArc(ptCen,radius,stAng,enAng)

第十集AutoCADVBA创建圆弧2

通过圆心,起点和圆弧的角度创建圆弧

PublicFunctionAddArcCSA(ByValptCenAsVariant,ByValptStAsVariant,ByValangleAsDouble)AsAcadArc

enAng=stAng+angle

SetAddArcCSA=ThisDrawing.ModelSpace.AddArc(ptCen,radius,stAng,enAng)

通过圆心,起点和弦长创建圆

tanα·

cotα=1sinα·

cscα=1cosα·

secα=1

商的关系:

sinα/cosα=tanα=secα/cscαcosα/sinα=cotα=cscα/secα

平方关系:

sin^2(α)+cos^2(α)=11+tan^2(α)=sec^2(α)1+cot^2(α)=csc^2(α)

PublicFunctionAddArcCSC(ByValptCenAsVariant,ByValptStAsVariant,ByValchordLengthAsDouble)AsAcadArc

enAng=stAng+Atn(((chordLength/2)/radius)/Sqr(1-((chordLength/2)/radius)^2))*2

SetAddArcCSC=ThisDrawing.ModelSpace.AddArc(ptCen,radius,stAng,enAng)

通过圆心,起点和弧长来创建圆

PublicFunctionAddArcCSAL(ByValptCenAsVariant,ByValptStAsVariant,ByValarcLengthAsDouble)AsAcadArc

enAng=stAng+arcLength/radius

SetAddArcCSAL=ThisDrawing.ModelSpace.AddArc(ptCen,radius,stAng,enAng)

通过三点来创建圆弧

PublicFunctionAddArc3P(ByValpt1AsVariant,ByValpt2AsVariant,ByValpt3AsVariant)AsAcadArc

Dimangle1AsDouble

Dimangle2AsDouble

angle1=ThisDrawing.Utility.AngleFromXAxis(pt1,pt2)+1.570793

angle2=ThisDrawing.Utility.AngleFromXAxis(pt2,pt3)+1.570793

Dimline12zAsAcadLine

Dimline23zAsAcadLine

line12z.Delete:

line23z.Delete

stAng=ThisDrawing.Utility.AngleFromXAxis(ptCen,pt1)

enAng=ThisDrawing.Utility.AngleFromXAxis(ptCen,pt3)

SetAddArc3P=ThisDrawing.ModelSpace.AddArc(ptCen,radius,stAng,enAng)

通过起点和极坐标创建直线

PublicFunctionAddLineReAL(ByValptStAsVariant,ByValangleAs

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2