版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、AutoCADVBA二次開發(fā)初級教程第一課:入門1、什么是AutocadVBA?VBA是VisualBasicforApplications的英文縮寫,它是一個功能強大的開發(fā)工具,學(xué)好VBA可以成倍甚至成百、成萬倍提高工作效率,在工作中,有很多任務(wù)僅用ACAD命令不可能完成的,只要學(xué)好VBA就可以做到,相信到時候您一定會得到同事的佩服、老板的器重。2、VBA有多難?相信大家都知道Basic是的含義。應(yīng)該承認(rèn),我的水平還不高,錯誤之處在所難免,如果大家發(fā)現(xiàn)錯誤一定要提出批評,以便及時更正。3、怎樣學(xué)習(xí)VBA?介紹大家一個學(xué)習(xí)公式:信心+恒心=開心。仔細(xì)閱讀本教程,完成例題,在學(xué)習(xí)的過程中一定要多
2、思考,多想一些是什么、為什么。本教程將陸續(xù)發(fā)布在CAD世界論壇上,您不需要付費就可以學(xué)習(xí)。本作者在此鄭重承諾:關(guān)于本教程中有任何疑問,可以跟貼提問,只要有時間,本人一定會耐心解答。我不會發(fā)到任何人的郵箱中,您自己在論壇上找就可以了,請不要再向我索要這份教程。4、現(xiàn)在我們開始編寫第一個程序:畫一百個同心圓第一步:復(fù)制下面的紅色代碼第二步:在模型空間按快捷鍵Alt+F8,出現(xiàn)宏窗口第三步:在宏名稱中填寫C100,點“創(chuàng)建”、“確定”第四步:在Subc100()和EndSub之間粘貼代碼第五步:回到模型空間,再次按Alt+F8,點擊“運行”Subc100()Dimcc(0To2)AsDouble聲明
3、坐標(biāo)變量cc(0)=1000定義圓心座標(biāo)cc(1)=1000cc(2)=0Fori=1To1000Step10開始循環(huán)CallThisDrawing.ModelSpace.AddCircle(cc,i*10)畫圓NextiEndSub也許您還看不懂上面的代碼,這沒有關(guān)系,只要能把同心畫出來就可以了,祝您成功。第二課編程基礎(chǔ)本課主要任務(wù)是對上一課的例程進(jìn)行詳細(xì)分析下面是源碼:Subc100()Dimcc(0To2)AsDouble聲明坐標(biāo)變量cc(0)=1000定義圓心座標(biāo)cc(1)=1000cc(2)=0Fori=1To1000Step10開始循環(huán)CallThisDrawing.ModelSp
4、ace.AddCircle(cc,i*10)畫圓NextiEndSub先看第一行和最后一行:SubC100()EndSubC100是宏的名稱,也叫過程名稱,當(dāng)用戶執(zhí)行C100時程序?qū)⑦\行sub和endsub之間的所有指令。第二行:Dimcc(0To2)AsDouble聲明坐標(biāo)變量后半段“聲明坐標(biāo)變量”自動變?yōu)榫G色字體,它是代碼語句的注釋,它不會影響程序運行,它的作用是告訴閱讀者程序員的想法。對于簡單的程序,一般不需要寫注釋,如果要編寫非常復(fù)雜的程序,最好要多加注釋,越詳細(xì)越好,對于程序員來說,這是一個好習(xí)慣。電腦真正編譯執(zhí)行的是這條語句:Dimcc(0To2)AsDouble它的作用就是聲明變
5、量。Dim是一條語句,可以理解為計算機指令。它的語法:Dim變量名As數(shù)據(jù)類型本例中變量名為CC,而括號中的0to2聲明這個CC是一個數(shù)組,這個數(shù)組有三個元素:CC(0)、CC(1)、CC(2),如果改為CC(1to3),則三個元素是CC(1)、CC(2)、CC(3),有了這個數(shù)組,就可以把坐標(biāo)數(shù)值放到這個變量之中。Double是數(shù)據(jù)類型中的一種。ACAD中一般需要定義坐標(biāo)時就用這個數(shù)據(jù)類型。在ACAD中數(shù)據(jù)類型的有很多,下面兩個是比較常用的數(shù)據(jù)類型,初學(xué)者要有所理解。Long(長整型),其范圍從-2,147,483,648到2,147,483,647。Variant它是那些沒被顯式聲明為其他
6、類型變量的數(shù)據(jù)類型,可以理解為一種通用的數(shù)據(jù)類型,這是最常用的。下面三條語句cc(0)=1000定義圓心座標(biāo)cc(1)=1000cc(2)=0它們的作用是給CC變量的每一個元素賦,值其順序是X、Y、Z坐標(biāo)。Fori=1To1000Step10開始循環(huán)Nexti結(jié)束循環(huán)這兩條語句的作用是循環(huán)運行指令,每循環(huán)一次,i值要增加10,當(dāng)i加到1000時,結(jié)束循環(huán)。i也是一個變量,雖然沒有聲明i變量,程序還是認(rèn)可的,VB不是C語言,每用一個變量都要聲明,不聲明就會報錯。簡單是簡單了,這樣做也有壞處,如果不小心打錯了一個字母,程序不會報錯,如果程序很長,那就會出現(xiàn)一些意想不到的錯誤。step后面的數(shù)值就是
7、每次循環(huán)時增加的數(shù)值,step后也可以用負(fù)值。例如:Fori=1000To1Step-10很多情況下,后面可以不加step10如:Fori=1to100,它的作用是每循環(huán)一次i值就增加1Nexti再句必須出現(xiàn)在需要結(jié)束循環(huán)的位置,不然程序沒法運行。下面看畫圓命令:CallThisDrawing.ModelSpace.AddCircle(cc,i*10)Call語句的作用是調(diào)用其他過程或者方法。ThisDrawing.ModelSpace是指當(dāng)前CAD文檔的模型空間AddCircle是畫圓方法Addcicle方法需要兩個參數(shù):圓心和半徑CC就是圓心坐標(biāo),i*10就是圓的半徑,本例中,這些圓的半徑
8、分別是10、110、210.310本課到此結(jié)束,下面請完成一道思考題:以(4,2)為圓心,畫5個同心圓,其半徑為1-5第三課編程基礎(chǔ)二有一位叫自然9172的網(wǎng)友提出了下面的問題:繪制三維多段線時X、Y值在屏幕上用鼠標(biāo)選取,Z值用鍵盤輸入本課將講解這個問題。為了簡化程序,這里用多條直線來代替多段線。以下是源碼:Submyl()Dimp1AsVariant申明端點坐標(biāo)Dimp2AsVariantp1=ThisDrawing.Utility.GetPoint(,輸入點:)獲取點坐標(biāo)z=ThisDrawing.Utility.GetReal(Z坐標(biāo):)用戶輸入Z坐標(biāo)值p1(2)=z將Z坐標(biāo)值賦予點坐標(biāo)
9、中OnErrorGoToErr_Control出錯陷井Do開始循環(huán)p2=ThisDrawing.Utility.GetPoint(p1,vbCr&輸入下一點:)獲取下一個點的坐標(biāo)z=ThisDrawing.Utility.GetReal(Z坐標(biāo):)用戶輸入Z坐標(biāo)值p2(2)=z將Z坐標(biāo)值賦予點坐標(biāo)中CallThisDrawing.ModelSpace.AddLine(p1,p2)畫直線p1=p2將第二點的端點保存為下一條直線的第一個端點坐標(biāo)LoopErr_Control:EndSub先談一下本程序的設(shè)計思路:1、獲取第一點坐標(biāo)2、輸入第一點Z坐標(biāo)3、獲取第二點坐標(biāo)4、輸入第二點Z坐標(biāo)5、以第一
10、、二點為端點,畫直線6、下一條線的第一點=這條線的第二點7、回到第3步進(jìn)行循環(huán)如果用戶沒有輸入坐標(biāo)或Z值,則程序結(jié)束。首先看以下兩條語句:p1=ThisDrawing.Utility.GetPoint(,輸入點:)獲取點坐標(biāo)p2=ThisDrawing.Utility.GetPoint(p1,vbCr&輸入下一點:)獲取下一個點的坐標(biāo)這兩條語句的作用是由用戶輸入點用鼠標(biāo)選取點坐標(biāo),并把坐標(biāo)值賦給pl、p2兩個變量。ThisDrawing.Utility.GetPoint()在ACAD中這是最常用的方法之一,它需要兩個參數(shù),在逗號前面的參數(shù)應(yīng)該是一個點坐標(biāo),它的作用是在屏幕上畫一條線,前一個端點
11、位于點坐標(biāo)位置,后一個端點跟隨鼠標(biāo)移動,逗號之前可以什么都不填,這時沒有線條會跟隨鼠標(biāo)移動,但逗號必須保留。逗號后面使用一串字符,程序在命令行顯示這串字符,這不難理解。VbCr通常代表一個回車符,而在這個語句中,它的作用是在命令行不顯示“命令:”&的作用是連接字符。舉例:“愛我中華”&”抵制日貨”&”從我做起”z=ThisDrawing.Utility.GetReal(Z坐標(biāo):)用戶輸入Z坐標(biāo)值由用戶輸入一個實數(shù)OnErrorGoToErr_Control出錯陷井Err_Control:OnError是出錯陷井語句,在程序出錯時將執(zhí)行OnError后面的語句GoToErr_contorl是程序
12、跳轉(zhuǎn)語句,它的作用是在程序中尋找Err_control:,并執(zhí)行這一行后面的語句,本例中Err_Control:后就是結(jié)束宏,所以只要出現(xiàn)錯誤,程序中止。Do開始循環(huán)Loop結(jié)束循環(huán)這個循環(huán)就歷害了,它會無休止地進(jìn)行循環(huán),好在本例中已經(jīng)有了一個出錯陷井,當(dāng)用戶輸入回車時,由于程序沒有得到點或坐標(biāo),程序出錯,跳出循環(huán),中止程序。如果要人為控制跳出循環(huán),可以在代碼中用ExitDo語句跳出循環(huán)。在For變量和Next變量之間如果要跳出循環(huán),那么只要在循環(huán)體內(nèi)加一個Exitfor就可以跳出循環(huán),關(guān)于這方面的例程以后會講到。CallThisDrawing.ModelSpace.AddLine(p1,p2
13、)畫直線畫直線方法也是很常用的,它的兩個參數(shù)是點坐標(biāo)變量本課到此結(jié)束,請做思考題:連續(xù)畫圓,每次要求用戶輸入圓心、半徑,當(dāng)用戶不再輸入圓心或半徑時程序才退出第四課程序的調(diào)試和保存人非圣賢,孰能無過,初學(xué)者在編寫復(fù)雜程序時往往會出現(xiàn)一些意想不到的錯誤,所以程序的調(diào)試顯得尤為重要,隨著學(xué)習(xí)的深入,以后我們需要經(jīng)常進(jìn)行程序調(diào)試。事實上,對于那些資深程序員來說,調(diào)試程序也是一項不可或缺的重要工作。首先,在程序輸入階段,應(yīng)該充分利用VBA編輯器的智能功能。當(dāng)你在寫代碼時,輸入一些字母后,編輯器可以自動列出合適的語句、對象、函數(shù)供你選擇,可以用上下鍵選擇,然后按TAB鍵(它位于“Q”鍵左邊)確認(rèn)。當(dāng)輸入一
14、個回車符后程序會自動對這條語句進(jìn)行分析,如果出現(xiàn)錯誤就會提示。我們經(jīng)常碰到的麻煩是程序的運行結(jié)果和預(yù)計的不一樣,一般我會這樣做:首先要想一想可能是哪一個變量有問題,然后去監(jiān)視這個變量(或表達(dá)式),在程序合適的位置設(shè)置斷點,這樣可以使程序停下來看一看這個變量有沒有按照我的設(shè)想在變化。下面我舉一個簡單的例子,先看源代碼:subtest()fori=2to4step0.6nextiendsub這是一個非常簡單的循環(huán),每一次循環(huán)i便會增加0.6,當(dāng)循環(huán)3次后i值就變?yōu)?.4,但問題是每一次循環(huán)時i值變?yōu)槎嗌??第一步:在菜單中選“調(diào)試”一“添加監(jiān)視”,在表達(dá)試中填“i”,點擊確定,這時你會看到臨視窗口中
15、會多一行。第二步:把光標(biāo)移到代碼窗口中的“nexti”行,按一下“F9”,于是每當(dāng)程序運行到這里時就會暫停了。好,一切就緒,請按F5執(zhí)行程序,在監(jiān)視窗口中C值立刻變?yōu)?,再按F5繼續(xù),C值為2.6,再按幾次F5,直到程序結(jié)束,這樣我們就成功監(jiān)視了C值的變化。第三步:在nexti行再按一次F9,清除斷點。監(jiān)視的表達(dá)式的右鍵菜單選擇“刪除監(jiān)視”。另外,還可以用“逐語句”、“逐過程”、“運行到光標(biāo)處”等方法進(jìn)行調(diào)試,這些都在調(diào)試菜單中,操作比較簡單,請讀者自行領(lǐng)悟。到目前為止,我們所做的工程都是“嵌入式工程”,它只是嵌入在當(dāng)前的Autocad圖形文件中,以后打開這個文件時代碼才會加載,如果別的dwg
16、文件也要使用,那就需要把代碼導(dǎo)出為.bas文件,供其他dwg文件導(dǎo)入。在VBA編輯器的“文件”菜單中有這兩個功能,一試便知。ACADVBA還有一種工程叫“通用式工程”,只要進(jìn)入ACAD就可以運行,程序可以在不同用戶、不同的圖形文件中共享,但是由于VBA功能太強,有時候會出現(xiàn)一些意想不到的事情,所以在學(xué)習(xí)階段請暫時不要這樣做。本課結(jié)束,請做思考題;監(jiān)視下列代碼中的i和j的值,注意,此題雖然要監(jiān)視2個變量,但是在代窗口中只要設(shè)置1個斷點就足夠了。subtest()fori=2to4step0.6forj=-5to2step5.5nextjnextiendsub第五課畫函數(shù)曲線先畫一組下圖拋物線。下
17、面是源碼:Submyl()Dimp(0To49)AsDouble定義點坐標(biāo)DimmylAsObject定義引用曲線對象變量co=15定義顏色Fora=0.01To1Step0.02開始循環(huán)畫拋物線Fori=-24To24Step2開始畫多段線j=i+24確定數(shù)組元素p(j)=i橫坐標(biāo)p(j+1)=a*p(j)*p(j)/10縱坐標(biāo)Nexti至此p(0)-p(40)所有元素已定義,結(jié)束循環(huán)Setmyl=ThisDrawing.ModelSpace.AddLightWeightPolyline(p)畫多段線myl.Color=co設(shè)置顏色屬性co=co+1改變顏色,供下次定義曲線顏色NextaEn
18、dsub為了鼓勵大家積極思考,從本課開始,我不再解釋每一條語句的作用,只對以前沒有提過的語句進(jìn)行一些解釋,也許你一時很難明白,建議用上一課提到的跟蹤變量、添加斷點的辦法領(lǐng)悟每一條語句的作用,如果有問題不懂請跟貼提問。在跟蹤變量P時請在跟蹤窗口中單擊變量P前的+號,這樣可以看清數(shù)組p中每一個元素的變化。ACAD沒有現(xiàn)成的畫拋物線命令,我們只能用程序編寫多段線畫近似拋物線。理論上,拋物線的X值可以是無限小、無限大,這里取值范圍在正負(fù)24之間。程序第二行:DimmylAsObject定義引用曲線對象變量Object也是一種變量類型,它可以把變量定義為對象,本例中myl變量將引用多段線,所以要定義為O
19、bjet類型??串嫸喽尉€命令:Setmyl=ThisDrawing.ModelSpace.AddLightWeightPolyline(p)畫多段線其中括號中的P是一個數(shù)組,這個數(shù)組的元素數(shù)必須是偶數(shù),每兩個元數(shù)作為一個點坐標(biāo)。等號前面部分“Setmyl”的作用就將myl變量去引用畫好的多段線。myl.Color=co設(shè)置顏色屬性。在ACAD中,顏色可以用數(shù)字表示,本例中co會增值,這樣就會有五彩繽紛的效果。本課第二張圖:正弦曲線,下面是源碼:Subsinl()Dimp(0To719)AsDouble定義點坐標(biāo)Fori=0To718Step2開始畫多段線p(i)=i*2*3.141592653
20、5897/360橫坐標(biāo)p(i+1)=2*Sin(p(i)縱坐標(biāo)NextiThisDrawing.ModelSpace.AddLightWeightPolyline(p)畫多段線ZoomExtents顯示整個圖形EndSubp(i)=i*2*3.1415926535897/360橫坐標(biāo)橫坐標(biāo)表示角度,后面表達(dá)式的作用是把角度轉(zhuǎn)化弧度ZoomExtents語句是縮放命令,它的作用是顯示整個圖形,消除圖形以外的區(qū)域本課思考題:畫一條拋物線:y=0.5*x*x+3,其中X取值范圍在正負(fù)50之間第六課數(shù)據(jù)類型的轉(zhuǎn)換上一節(jié)課我們用一個簡單的公式把角度轉(zhuǎn)化為弧度,這樣做便于大家理解。不過VBA中有現(xiàn)成的方法
21、可以轉(zhuǎn)換數(shù)據(jù)類型。我們舉例說明:jd=ThisDrawing.Utility.AngleToReal(30,0)這個表達(dá)式把角度30度轉(zhuǎn)化為弧度,結(jié)果是.523598775598299。AngleToReal需要兩個參數(shù),前面是表示要轉(zhuǎn)換角度的數(shù)字,而后面一個參數(shù)可以取值為0-4之間的整數(shù),有如下意義:0:十進(jìn)制角度;1:度分秒格式;2:梯度;3:弧度;4:測地單位例:id二ThisDrawing.Utility.AngleToReal(62d3010,1)這個表達(dá)式計算62度30分10秒的弧度再看將字符串轉(zhuǎn)換為實數(shù)的方法:DistanceToReal需要兩個參數(shù),前一個參數(shù)是表示數(shù)值的字符串
22、,后面可以取值1-5,表示數(shù)據(jù)格式,有如下意義:1:科學(xué)計數(shù);2:十進(jìn)制;3:工程計數(shù)英尺加英寸;4:建筑計數(shù)英尺加分?jǐn)?shù)英寸;5:分?jǐn)?shù)格式。例:以下表達(dá)式得到一個12.5的實數(shù)temp1=ThisDrawing.Utility.DistanceToReal(1.25E+01,1)temp2=ThisDrawing.Utility.DistanceToReal(12.5,2)temp3=ThisDrawing.Utility.DistanceToReal(121/2,5)而realtostring方法正好相反,它把一個實數(shù)轉(zhuǎn)換為字符串。它需要3個參數(shù)第一個參數(shù)是一個實數(shù),第二個參數(shù)表示數(shù)據(jù)格式,
23、含義同上,最后一個參數(shù)表示精確到幾位小數(shù)。temp1=ThisDrawing.Utility.RealToString(12.5,1,3)得到這個字符串:“1.250E+01”,下面介紹一些數(shù)型轉(zhuǎn)換函數(shù):Cint,獲得一個整數(shù),例:Cint(3.14159),得到3Cvar,獲得一個Variant類型的數(shù)值,例:Cvar(123&00),得到”12300”Cdate,轉(zhuǎn)換為date數(shù)據(jù)類型,例:MyShortTime=CDate(11:13:14AM)下面的代碼可以寫出一串?dāng)?shù)字,從000-099。Subtest()Dimadd0AsStringDimtextAsStringDimp(0To2)
24、AsDoublep(1)=0Y坐標(biāo)為0p(2)=0Z坐標(biāo)為0Fori=0To99開始循環(huán)Ifi10Then判斷圓的直徑是否大于10myselect(i).color=Int(255*Rnd+1)大圓顏色改為隨機數(shù)Elsemyselect(i).color=0小圓改為白色EndIfNextiZoomExtents縮放到顯示全部對象EndSubpp(0)=3000*Rnd:pp(1)=3000*Rnd:pp(2)=0這一行實際上應(yīng)該是三條語句,用三行合并為一行,用冒號分開rnd是隨機數(shù)函數(shù),它的數(shù)值為0-1之間的小數(shù),3000*rnd得到的數(shù)值就是在0-3000之間的隨機數(shù)Setmyselect(
25、i)=ThisDrawing.ModelSpace.AddCircle(pp,Rnd*30+1)這條語句的作用是以pp點坐標(biāo)為圓心,畫一個圓,半徑是1-30之間的隨機數(shù),賦值給myselect選擇集.提標(biāo)用戶在屏幕中選取選擇語句這樣寫:Setsset二ThisDrawing.SelectionSets.Add(ssl),其中”ssl”是一個選擇集名稱,這個參數(shù)可以隨意寫一個,注意不要重復(fù)就可以了.下面的例程是讓用戶選擇對象,然后把選中的對象改為綠色,最后把選擇集刪除Submysel()DimssetAsAcadSelectionSet定義選擇集對象DimelementAsAcadEntity定
26、義選擇集中的元素對象Setsset=ThisDrawing.SelectionSets.Add(ss1)新建一個選擇集sset.SelectOnScreen提示用戶選擇ForEachelementInsset在選擇集中進(jìn)行循環(huán)element.color=acGreen改為綠色Nextsset.Delete刪除選擇集EndSub選擇全部對象用select方法,參數(shù)為acSelectionSetAll,看例程,這個程序選擇全部對象,顯示選中的對象,并計算對象數(shù).Suballsel()Dimsel1AsAcadSelectionSet定義選擇集對象Setsel1=ThisDrawing.Select
27、ionSets.Add(s)新建一個選擇集Callsel1.Select(acSelectionSetAll)全部選中sel1.Highlight(True)顯示選擇的對象sco=sel1.Count計算選擇集中的對象數(shù)MsgBox選中對象數(shù):&CStr(sco)顯示對話框EndSub運用select方法上面的例題已經(jīng)運用了select方法,下面講一下select的5種選擇方式:1:擇全部對象(acselectionsetall)選擇上次創(chuàng)建的對象(acselectionsetlast)選擇上次選擇的對象(acselectionsetprevious)選擇矩形窗口內(nèi)對象(acselection
28、setwindow)選擇矩形窗口內(nèi)以及與邊界相交的對象(acselectionsetcrossing)還是看代碼來學(xué)習(xí).其中選擇語句是:Callsel1.Select(Mode,p1,p2)Mode已經(jīng)定義為5,也就是選擇矩形窗口內(nèi)以及與邊界相交的對象,pl和p2是兩個點坐標(biāo),Subselnew()Dimsel1AsAcadSelectionSet定義選擇集對象Dimp1(0To2)AsDouble坐標(biāo)1Dimp2(0To2)AsDouble坐標(biāo)2p1(0)=0:p1(1)=0:p1(2)=0設(shè)置坐標(biāo)1p2(0)=300:p2(1)=300:p2(2)=0設(shè)置坐標(biāo)1Mode=5把選擇模式存入m
29、ode變量中Setsel1=ThisDrawing.SelectionSets.Add(sel3)新建一個選擇集Callsel1.Select(Mode,p1,p2)選擇對象sel1.Highlight(ture)顯示已選中的對象EndSub第十課:畫多段線和樣條線畫二維多段線語句這樣寫:setlobj=ThisDrawing.ModelSpace.AddLightweightPolyline(fitpoint)AddLightweightPolyline后面需一個參數(shù),存放頂點坐標(biāo)的數(shù)組畫三維多段線語句這樣寫:Setlobj=ThisDrawing.ModelSpace.Add3DPoly(
30、fitpoint)Add3dpoly后面需一個參數(shù),就是頂點坐標(biāo)數(shù)組畫二維樣條線語句這樣寫:Setlobj=ThisDrawing.ModelSpace.AddSpline(fitPoints,startT,endT)Addspline后需要三個參數(shù),第一個是擬合點數(shù)組,后面兩個分別是起點切向和終點切向。下面看例題。這個程序是第三課例程的改進(jìn)版。原題是這樣的:繪制三維多段線時X、Y值在屏幕上用鼠標(biāo)選取,Z值用鍵盤輸入。細(xì)心的讀者是否還記得這個小程序已經(jīng)在第三課的回貼中發(fā)布了。先分析一下編程細(xì)路:用動態(tài)數(shù)組存放多段線的所有頂點坐標(biāo),獲得新坐標(biāo)后就把前一次畫的多段線刪除,畫出多段線,并將線段第二點
31、的端點保存為下一條線段的第一個端點坐標(biāo),以下是源碼:Submyl()Dimp1AsVariant申明端點坐標(biāo)Dimp2AsVariantDiml()AsDouble聲明一個動態(tài)數(shù)組DimtemplAsObjectp1=ThisDrawing.Utility.GetPoint(,輸入點:)獲取點坐標(biāo)z=ThisDrawing.Utility.GetReal(Z坐標(biāo):)用戶輸入Z坐標(biāo)值pl(2)=z將Z坐標(biāo)值賦予點坐標(biāo)中ReDiml(0To2)定義動態(tài)數(shù)組l(0)=p1(0)l(1)=p1(1)l(2)=zOnErrorGoToErr_Control出錯陷井Do開始循環(huán)p2=ThisDrawing
32、.Utility.GetPoint(p1,vbCr&輸入下一點:)獲取下一個點的坐標(biāo)z=ThisDrawing.Utility.GetReal(Z坐標(biāo):)用戶輸入Z坐標(biāo)值p2(2)=z將Z坐標(biāo)值賦予點坐標(biāo)中l(wèi)ub=UBound(l)獲取當(dāng)前l(fā)數(shù)組中元的元素個數(shù)ReDimPreservel(lub+3)Fori=1To3l(lub+i)=p2(i-1)NextiIflub3Thentempl.Delete刪除前一次畫的多段線EndIfSettempl=ThisDrawing.ModelSpace.Add3DPoly(l)畫多段線p1=p2將第二點的端點保存為下一條直線的第一個端點坐標(biāo)LoopEr
33、r_Control:EndSub我們學(xué)一學(xué)動態(tài)數(shù)組,這是非常有用的。所謂動態(tài)數(shù)組,簡單講就是數(shù)組元素可以改變的特殊數(shù)組。這樣定義數(shù)組:Diml()AsDouble賦值語句:ReDiml(0To2)l(0)=p1(0)l(1)=p1(1)l(2)=z重新定義數(shù)組元素語句:lub=UBound(l)先要獲取當(dāng)前l(fā)數(shù)組中元的元素個數(shù),用ubount函數(shù)計算。ReDimPreservel(lub+3)重定義時數(shù)組中要加三個元素,用以存放坐標(biāo)值,所以定義元素為lub+3。給數(shù)值賦值的語句是一樣的。再看畫多段線語句:Settempl=ThisDrawing.ModelSpace.Add3DPoly(l)畫
34、多段線在最后面括號中的l就是存放點坐標(biāo)的動態(tài)數(shù)組,這條語句在畫多段線的同時把多段線作為對象賦值給templ變量,這樣下面的刪除語句就可以直接引用這個變量了。刪除語句:templ.Delete因為已經(jīng)知道對象是templ,所以只要在對象后面用delete方法就可以了。下面的例程更加實用些,它的功能是把樣條線轉(zhuǎn)化為多段線。編程思路:用戶選擇一根樣條線,計算樣條線的擬合點,然后把所有的擬合點存放到數(shù)組中,最后用這個數(shù)組畫多段線。Subsp2pl()DimgetspAsObject獲取樣條線的變量Dimnewl()AsDouble多段線數(shù)組Dimp1AsVariant獲得擬合點點坐標(biāo)ThisDrawi
35、ng.Utility.GetEntitygetsp,po,本程序?qū)訔l曲線轉(zhuǎn)為多段線。請選擇樣條曲線sumctrl=getsp.NumberOfControlPoints計算樣條線中一共有多少擬合點ReDimnewl(0Tosumctrl*3-1)重定義數(shù)組Fori=0Tosumctrl-1開始循環(huán),pl=getsp.GetControlPoint(i)把擬合點坐標(biāo)存到pl變量中Forj=0To2newl(i*3+j)=pl(j)NextjNextiSettempl=ThisDrawing.ModelSpace.Add3DPoly(newl)畫樣條線EndSub下面的語句是讓用戶選擇樣條線:T
36、hisDrawing.Utility.GetEntitygetsp,po,本程序?qū)訔l曲線轉(zhuǎn)為多段線。請選擇樣條曲線ThisDrawing.Utility.GetEntity后面需要三個參數(shù):第一個getsp用于存放獲得用戶選擇的對象變量,第二個po是用戶鼠標(biāo)點下時的位置,第三個是一段字符串,顯示在提示欄。第十一課:動畫基礎(chǔ)說實話,用ACAD玩動畫絕對比不上專業(yè)的三維動畫軟件,不過這年頭自稱精通CAD的工程師太多了,而學(xué)會用ACAD玩動畫一定能提高您的競爭實力,想象一下您用ACAD動畫向老板演示零件的裝配方法下面的例題是一個最簡單的動畫,由用戶選擇一個要移動的對象,然后定位起點和終點,程序會慢
37、慢地把對象移動。移動方法:object.move起點坐標(biāo),端點坐標(biāo)Subtestmove()Dimp0AsVariant起點坐標(biāo)Dimp1AsVariant終點坐標(biāo)DimpcAsVariant移動時起點坐標(biāo)DimpeAsVariant移動時終點坐標(biāo)DimmovxAsVariantx軸增量DimmovyAsVarianty軸增量DimgetobjAsObject移動對象DimmovtimesAsInteger移動次數(shù)ThisDrawing.Utility.GetEntitygetobj,po,請選擇移動對象p0=ThisDrawing.Utility.GetPoint(,起點:)p1=ThisD
38、rawing.Utility.GetPoint(p0,終點:)pe=p0pc=p0motimes=3000movx=(p1(0)-p0(0)/motimesmovy=(p1(1)-p0(1)/motimesFori=1Tomotimespe(0)=pc(0)+movxpe(1)=pc(1)+movygetobj.Movepc,pe移動一段getobj.Update更新對象NextEndSub先讓用戶選擇移動的對象、起點、終點,motimes動畫是設(shè)置動畫幀數(shù),這個例程是讓對象移動3000小段,movx和movy是每一段移動的距離,然后進(jìn)行一個3000次的循環(huán),每一次循環(huán)移動一小段距離??吹诙€
39、例題:做一個小輪子在一條山坡上運動的動畫,山坡為正弦曲線。請注意,應(yīng)該用偏移法獲得輪圓心的軌跡才是正確的。編程思路:先畫好圓和橫軸,然后畫山坡,偏移獲得移動軌跡線,放到隱藏圖層中,然后根據(jù)軌跡線移動圓和軸,在移動之前先旋轉(zhuǎn)軸線。旋轉(zhuǎn)方法:object.rotate基點,角度偏移方法:object.offset(偏移量)Submoveball()DimccballAsVariant圓DimcclineAsVariant圓軸Dimcclinep1(0To2)AsDouble圓軸端點1Dimcclinep2(0To2)AsDouble圓軸端點2Dimcc(0To2)AsDouble圓心DimhillAsVariant山坡線DimmovelineAsVariant移動軌跡線Dimlay1AsAcadLayer放軌跡線的隱藏圖層DimvpointsAsVariant軌跡點Dimmovep(0To2)AsDouble移動目標(biāo)點坐標(biāo)cclinep1(0)=-0.1:cclinep2(0)=0.1定義圓軸坐標(biāo)Setccline=ThisDrawing.ModelSpace.AddLine(cclinep1,cclinep2)畫直線Setccball=Thi
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 心理干預(yù)對ICU患者家屬心理影響-洞察分析
- 異構(gòu)存儲中的位標(biāo)識優(yōu)化-洞察分析
- 圖文混排設(shè)計原則-洞察分析
- 異構(gòu)系統(tǒng)優(yōu)化與調(diào)度-洞察分析
- 《證據(jù)的種類和分類》課件
- 2024年株洲冶煉集團有限責(zé)任公司醫(yī)院高層次衛(wèi)技人才招聘筆試歷年參考題庫頻考點附帶答案
- 2024年05月廣東東莞銀行總行資產(chǎn)管理部誠聘英才筆試歷年參考題庫附帶答案詳解
- 2024年杭錦旗醫(yī)院高層次衛(wèi)技人才招聘筆試歷年參考題庫頻考點附帶答案
- 2024年杭州市西湖區(qū)中醫(yī)院高層次衛(wèi)技人才招聘筆試歷年參考題庫頻考點附帶答案
- 2025年外研版四年級英語下冊階段測試試卷含答案
- 國家職業(yè)技術(shù)技能標(biāo)準(zhǔn) X2-10-07-18 陶瓷工藝師(試行)勞社廳發(fā)200633號
- 人教版八年級上冊生物全冊教案(完整版)教學(xué)設(shè)計含教學(xué)反思
- 2024年銀行考試-銀行間本幣市場交易員資格考試近5年真題附答案
- 人教版小學(xué)四年級數(shù)學(xué)上冊期末復(fù)習(xí)解答題應(yīng)用題大全50題及答案
- 冀教版五年級上冊脫式計算題100道及答案
- 你是排長我是兵(2022年山東濟南中考語文試卷記敘文閱讀題及答案)
- 《ISO56001-2024創(chuàng)新管理體系 - 要求》之22:“8運行-8.2 創(chuàng)新行動”解讀和應(yīng)用指導(dǎo)材料(雷澤佳編制-2024)
- 廣東省中山市2023-2024學(xué)年高三物理上學(xué)期第五次統(tǒng)測試題含解析
- 《體育科學(xué)研究方法》題庫
- 高級會計實務(wù)案例分析-第三章 企業(yè)全面預(yù)算管理
- DL∕T 5142-2012 火力發(fā)電廠除灰設(shè)計技術(shù)規(guī)程
評論
0/150
提交評論