AutoCAD培训-高级篇AutoCADTraining-AdvancedYardofChoice07/17/2013YardofChoiceCIMCRAFFLES@2013ALLRIGHTSRESERVEDAutoCAD培训-高级篇为什么要学VBA呢?大家试想一下,我们每天画图过程中有哪些工作是重复性的呢?这些重复性的工作当然有些可以用复制粘贴来实现,有些只是相似的呢?是不是可以用程序来实现。大家试一下画一个下面的图形。可能很简单,我改变一下尺寸呢?编程的语言有很多种,为什么要选择VBA呢?①AutoCAD内置,不必安装单独的编程语言;②语言的可读性强,易于上手,对于业余的我们更适合;③用得人多,易于交流学习。为什么要学VBA1YardofChoiceCIMCRAFFLES@2013ALLRIGHTSRESERVEDAutoCAD培训-高级篇1.AutoCAD自带的批量处理命令2.VBA直线、圆与圆弧3.VBA多义线4.VBA编辑-COPY,MOVE,Array,Offset,Rotate,Mirror5.VBA文字标注6.VBA其它辅助功能-Debug.Print,MsgBox7.从Excel中读取数据2目录YardofChoiceCIMCRAFFLES@2013ALLRIGHTSRESERVEDAutoCAD培训-高级篇第1部分:AutoCAD自带的批量处理命令3内容YardofChoiceCIMCRAFFLES@2013ALLRIGHTSRESERVEDAutoCAD培训-高级篇第2部分:VBA直线、圆与圆弧4课后练习具体内容,1,2,3……YardofChoiceCIMCRAFFLES@2013ALLRIGHTSRESERVEDAutoCAD培训-高级篇第3部分:VBA多义线5课后练习具体内容,1,2,3……YardofChoiceCIMCRAFFLES@2013ALLRIGHTSRESERVEDAutoCAD培训-高级篇第4部分:VBA编辑-COPY,MOVE,Array,Offset,Rotate,Mirror6课后练习具体内容,1,2,3……YardofChoiceCIMCRAFFLES@2013ALLRIGHTSRESERVEDAutoCAD培训-高级篇第5部分:VBA文字标注7课后练习具体内容,1,2,3……YardofChoiceCIMCRAFFLES@2013ALLRIGHTSRESERVEDAutoCAD培训-高级篇第5部分:VBA其它辅助功能-Debug.Print,MsgBox8课后练习具体内容,1,2,3……YardofChoiceCIMCRAFFLES@2013ALLRIGHTSRESERVEDAutoCAD培训-高级篇第6部分:从Excel中读取数据9课后练习具体内容,1,2,3……YardofChoiceCIMCRAFFLES@2013ALLRIGHTSRESERVEDAutoCAD培训-高级篇大家感觉怎么样呢?这些内容是不是可以做一些略复杂的图形了呢?下面我们来做一个综合的练习吧。10大家如果有兴趣进一步学习,大家可以一起学习。最后,给大家留个课后作业,看一下这个图形如何用程序来实现。YardofChoiceCIMCRAFFLES@2013ALLRIGHTSRESERVEDAutoCAD培训-高级篇我的联系方式11电话:0535-4879166,内线:79166手机:13573530701Email:Guangyin.Xia@cimc-raffles.comYardofChoiceCIMCRAFFLES@2013ALLRIGHTSRESERVEDAutoCAD培训-高级篇YourOffshorePartner12YardofChoiceCIMCRAFFLES@2013ALLRIGHTSRESERVEDAutoCAD培训-高级篇1.Array2.Trim3.动态块4.QuickSelect5.格式刷6.绘图模板AutoCAD自带的批量处理命令13下面就各个功能简单作一下示例YardofChoiceCIMCRAFFLES@2013ALLRIGHTSRESERVEDAutoCAD培训-高级篇我们知道,在CAD中,画直线需要确实2个点,起点和终点,同样,在VBA中,也是确定两个点。第一种方式,以坐标的形式给定两个点。SubLine0()DimMyLineasAcadLineDimPntSt(2)asdouble,PntEn(2)asdoublePntSt(0)=0#:PntSt(1)=0#:PntSt(2)=0#PntEn(0)=100:PntEn(1)=100:PntEn(2)=0#SetMyLine=Thisdrawing.Modelspace.Addline(PntSt,PntEn)Myline.Color=acRedEndsubVBA直线、圆与圆弧14YardofChoiceCIMCRAFFLES@2013ALLRIGHTSRESERVEDAutoCAD培训-高级篇第二种方式,以拾取的形式给定两个点。SubLine0()DimMyLineasAcadLineDimPntStasVariant,PntEnasVariantWithThisdrawing.UtilityPntSt=.getPoint(,Pickthestartpoint:)PntEn=.getPoint(,Picktheendpoint:)EndwithSetMyLine=Thisdrawing.Modelspace.Addline(PntSt,PntEn)Myline.Color=acRedEndsubVBA直线、圆与圆弧15YardofChoiceCIMCRAFFLES@2013ALLRIGHTSRESERVEDAutoCAD培训-高级篇利用判断来连续画线,以回车或ESC键来结束画线SubMyLine()OnErrorResumeNextDimPt0AsVariantPt0=ThisDrawing.Utility.GetPoint(,Startpoint)IfErrThenErr.ClearExitSubEndIfDimPtPreviousAsVariant,PtCurrentAsVariantPtPrevious=Pt0VBA直线、圆与圆弧16YardofChoiceCIMCRAFFLES@2013ALLRIGHTSRESERVEDAutoCAD培训-高级篇NextPoint:PtCurrent=ThisDrawing.Utility.GetPoint(PtPrevious,Nextpoint)IfErrThenErr.ClearExitSubEndIfDimMyLineAsAcadLineSetMyLine=ThisDrawing.ModelSpace.AddLine(PtPrevious,PtCurrent)PtPrevious=PtCurrentGoToNextPointEndSubVBA直线、圆与圆弧17YardofChoiceCIMCRAFFLES@2013ALLRIGHTSRESERVEDAutoCAD培训-高级篇用VBA画圆我们知道,在CAD中有多种画圆的方式,包括圆心、半径;圆心、直径;三点;切点、切点和半径。而程序中只给出了一种方式画圆,也就是圆心、半径,其余的要通过程序计算来得到。圆心与半径画圆,圆心可以是double型数组,也可以是强制赋值的变量,但是,最终用在画圆是它都是一维的数组。SubCircle0()DimMyCirasAcadCircle,MyCir0asAcadCircleDimPntCenasVariantdimPntCen0(2)asdouble,DimRadiusasdoubleVBA直线、圆与圆弧18YardofChoiceCIMCRAFFLES@2013ALLRIGHTSRESERVEDAutoCAD培训-高级篇WithThisdrawing.UtilityPntCen=.getPoint(,Pickthecenterofthecircle:)Radius=.getDistance(,Inputtheradiusofthecircle:)EndwithPntCen0(0)=0#:PntCen0(1)=0#:PntCen0(2)=0#WithThisdrawing.ModelSpaceSetMyCir=.AddCircle(PntCen,Radius)SetMyCir0=.AddCircle(PntCen0,Radius)EndWithMyCir.Color=acRedMyCir0.Color=acMagentaEndsubVBA直线、圆与圆弧19YardofChoiceCIMCRAFFLES@2013ALLRIGHTSRESERVEDAutoCAD培训-高级篇用VBA画圆弧VBA中只有一种画圆弧的方式,包括圆心、半径、起始角、终止角。其余的要通过程序计算来得到。圆心与圆一样可以是double型数组,也可以是强制赋值的变量,但是,最终用在画圆弧是它都是一维的数组。起始角与终止角都是弧度,范围为[0,2π)SubArc0()DimArc0asAcadArcDimPntCenasVariantdimRadiusasdouble,AngStasdouble,AngEnasdoubleVBA直线、圆与圆弧20YardofChoiceCIMCRAFFLES@2013ALLRIGHTSRESERVEDAutoCAD培训-高级篇WithThisdrawing.UtilityPntCen=.getPoint(,Pickthecenterofthearc:)Radius=.getDistance(,Inputtheradiusofthecircle:)EndwithDimPiasdoublePi=4*Atn(1)AngSt=-Pi/4AngEn=3*pi/4SetArc0=Thisdrawing.ModelSpace.AddArc(PntCen,Radius,AngSt,AngEn)Arc0.Color=acBlueEndsubVBA直线、圆与圆弧21思考题:如何用三点来画一个圆YardofChoiceCIMCRAFFLES@2013ALLRIGHTSRESERVEDAutoCAD培训-高级篇在VBA中用三点画一个圆我们先来回顾一下用尺规作图时如何用三点来作圆的。我们是先来做其中两条张的垂直平分线。在VBA中我们也可以用这个思路来做这个圆。下面的图中给出了作图的顺序。VBA直线、圆与圆弧22YardofChoiceCIMCRAFFLES@2013ALLRIGHTSRESERVEDAutoCAD培训-高级篇下面我们来看在VBA中用三点画一个圆的程序代码SubThreePointCircle()DimPnt0asVariant,Pnt1asVariant,Pnt2asVariantDimAng01asdouble,Ang02asdoubleDimPiasdoublePi=4*Atn(1)DimArc01asAcadArc,Arc02asAcadArcDimLine01asAcadLine,Line02asAcadLineDimPntCenasVariantDimPnt01SasVariant,Pnt01EasVariant,Pnt02SasVariant,Pnt02EasVariantVBA直线、圆与圆弧23YardofChoiceCIMCRAFFLES@2013ALLRIGHTSRESERVEDAutoCAD培训-高级篇WithThisdrawing.UtilityPnt0=.getPoint(,Pickthefirstpoint:)Pnt1=.getPoint(,Pickthesecondpoint:)Pnt2=.getPoint(,Pickthethirdpoint:)Ang01=.AngleFromXAxis(Pnt0,Pnt1)Ang02=.AngleFromXAxis(