




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第一課:入門1.為什么要寫這個教程市面上ACAD VBA 的書不多,它的幫助是英文版的,很多人看不懂。其實我轉行已經好幾年了,而且手藝也慢慢生疏了,寫個教程對自己來說也是一次復習。2.什么是Autocad VBA?VBA 是Visual Basic for Applications 的英文縮寫,它是一個功能強大的開發工具,學好VBA 可以成倍甚至成百、成萬倍提高工作效率,在工作中,有很多任務僅用ACAD 命令不可能完成的,只要學好VBA 就可以做到,相信到時候您一定會得到同事的佩服、老板的器重。3、VBA 有多難?相信大家都知道Basic 是的含義。應該承認,我的水平還不高,錯誤之處在所難免,
2、如果大家發現錯誤一定要提出批評,以便及時更正。4、怎樣學習VBA?介紹大家一個學習公式:信心+恒心=開心。仔細閱讀本教程,完成例題,在學習的過程中一定要多思考,多想一些是什么、為什么。本教程將陸續發布在CAD 世界論壇上,您不需要付費就可以學習。本作者在此鄭重承諾:關于本教程中有任何疑問,可以跟貼提問,只要有時間,本人一定會耐心解答。我不會發到任何人的郵箱中,您自己在論壇上找就可以了,請不要再向我索要這份教程。5、現在我們開始編寫第一個程序:畫一百個同心圓第一步:復制下面的紅色代碼第二步:在模型空間按快捷鍵Alt+F8,出現宏窗口第三步:在宏名稱中填寫C100,點“創建”、“確定”第四步:在S
3、ub c100()和End Sub 之間粘貼代碼第五步:回到模型空間,再次按Alt+F8,點擊“運行”Sub c100()Dim cc(0 To 2) As Double '聲明坐標變量cc(0) = 1000 '定義圓心座標cc(1) = 1000cc(2) = 0For i = 1 To 1000 Step 10 '開始循環Call ThisDrawing.ModelSpace.AddCircle(cc, i * 10) '畫圓Next iEnd Sub也許您還看不懂上面的代碼,這沒有關系,只要能把同心畫出來就可以了,祝您成功。第二課編程基礎本課主要任務是對
4、上一課的例程進行詳細分析下面是源碼:Sub c100()Dim cc(0 To 2) As Double '聲明坐標變量cc(0) = 1000 '定義圓心座標cc(1) = 1000cc(2) = 0For i = 1 To 1000 Step 10 '開始循環Call ThisDrawing.ModelSpace.AddCircle(cc, i * 10) '畫圓Next iEnd Sub先看第一行和最后一行:Sub C100()End SubC100 是宏的名稱,也叫過程名稱,當用戶執行C100 時程序將運行sub 和end sub 之間的所有指令。第二行
5、:Dim cc(0 To 2) As Double '聲明坐標變量后半段“'聲明坐標變量”自動變為綠色字體,它是代碼語句的注釋,它不會影響程序運行,它的作用是告訴閱讀者程序員的想法。對于簡單的程序,一般不需要寫注釋,如果要編寫非常復雜的程序,最好要多加注釋,越詳細越好,對于程序員來說,這是一個好習慣。電腦真正編譯執行的是這條語句:Dim cc(0 To 2) As Double它的作用就是聲明變量。Dim 是一條語句,可以理解為計算機指令。它的語法:Dim 變量名As 數據類型本例中變量名為CC,而括號中的0 to 2 聲明這個CC 是一個數組,這個數組有三個元素:CC(0)、
6、CC(1)、CC(2),如果改為CC(1 to 3),則三個元素是CC(1)、CC(2)、CC(3),有了這個數組,就可以把坐標數值放到這個變量之中。Double 是數據類型中的一種。ACAD 中一般需要定義坐標時就用這個數據類型。在ACAD 中數據類型的有很多,下面兩個是比較常用的數據類型,初學者要有所理解。Long(長整型),其范圍從-2,147,483,648 到2,147,483,647。Variant 它是那些沒被顯式聲明為其他類型變量的數據類型,可以理解為一種通用的數據類型,這是最常用的。下面三條語句cc(0) = 1000 '定義圓心座標cc(1) = 1000cc(2)
7、 = 0它們的作用是給CC 變量的每一個元素賦,值其順序是X、Y、Z 坐標。For i = 1 To 1000 Step 10 '開始循環Next i '結束循環這兩條語句的作用是循環運行指令,每循環一次,i 值要增加10,當i 加到1000 時,結束循環。i 也是一個變量,雖然沒有聲明i 變量,程序還是認可的,VB 不是C 語言,每用一個變量都要聲明,不聲明就會報錯。簡單是簡單了,這樣做也有壞處,如果不小心打錯了一個字母,程序不會報錯,如果程序很長,那就會出現一些意想不到的錯誤。step 后面的數值就是每次循環時增加的數值,step 后也可以用負值。例如:For i =100
8、0 To 1 Step -10很多情況下,后面可以不加step 10如:For i=1 to 100,它的作用是每循環一次i 值就增加1Next i 語句必須出現在需要結束循環的位置,不然程序沒法運行。下面看畫圓命令:Call ThisDrawing.ModelSpace.AddCircle(cc, i * 10)Call 語句的作用是調用其他過程或者方法。ThisDrawing.ModelSpace 是指當前CAD 文檔的模型空間AddCircle 是畫圓方法Addcicle 方法需要兩個參數:圓心和半徑CC 就是圓心坐標,i*10 就是圓的半徑,本例中,這些圓的半徑分別是10、110、21
9、0、310本課到此結束,下面請完成一道思考題:1. 以(4,2)為圓心,畫5 個Autocad VBA 初級教程(第三課編程基礎二)有一位叫自然9172 的網友提出了下面的問題:繪制三維多段線時X、Y 值在屏幕上用鼠標選取,Z 值用鍵盤輸入本課將講解這個問題。為了簡化程序,這里用多條直線來代替多段線。以下是源碼:Sub myl()Dim p1 As Variant '申明端點坐標Dim p2 As Variantp1 = ThisDrawing.Utility.GetPoint(, "輸入點:") '獲取點坐標z = ThisDrawing.Utility.
10、GetReal("Z 坐標:") '用戶輸入Z 坐標值p1(2) = z '將Z 坐標值賦予點坐標中On Error GoTo Err_Control '出錯陷井Do '開始循環p2 = ThisDrawing.Utility.GetPoint(p1, vbCr & "輸入下一點:") '獲取下一個點的坐標z = ThisDrawing.Utility.GetReal("Z 坐標:") '用戶輸入Z 坐標值p2(2) = z '將Z 坐標值賦予點坐標中Call ThisD
11、rawing.ModelSpace.AddLine(p1, p2) '畫直線p1 = p2 '將第二點的端點保存為下一條直線的第一個端點坐標LoopErr_Control:End Sub先談一下本程序的設計思路:1、獲取第一點坐標2、輸入第一點Z 坐標3、獲取第二點坐標4、輸入第二點Z 坐標5、以第一、二點為端點,畫直線6、下一條線的第一點=這條線的第二點7、回到第3 步進行循環如果用戶沒有輸入坐標或Z 值,則程序結束。首先看以下兩條語句:p1 = ThisDrawing.Utility.GetPoint(, "輸入點:") 獲取點坐標p2 = ThisDr
12、awing.Utility.GetPoint(p1, vbCr & "輸入下一點:") '獲取下一個點的坐標這兩條語句的作用是由用戶輸入點用鼠標選取點坐標,并把坐標值賦給p1、p2 兩個變量。ThisDrawing.Utility.GetPoint()在ACAD 中這是最常用的方法之一,它需要兩個參數,在逗號前面的參數應該是一個點坐標,它的作用是在屏幕上畫一條線,前一個端點位于點坐標位置,后一個端點跟隨鼠標移動,逗號之前可以什么都不填,這時沒有線條會跟隨鼠標移動,但逗號必須保留。逗號后面使用一串字符,程序在命令行顯示這串字符,這不難理解。VbCr 通常代表一
13、個回車符,而在這個語句中,它的作用是在命令行不顯示“命令:”&的作用是連接字符。舉例:“愛我中華”&”抵制日貨”&”從我做起”z = ThisDrawing.Utility.GetReal("Z 坐標:") '用戶輸入Z 坐標值由用戶輸入一個實數On Error GoTo Err_Control '出錯陷井Err_Control:On Error 是出錯陷井語句,在程序出錯時將執行On Error 后面的語句GoTo Err_contorl 是程序跳轉語句,它的作用是在程序中尋找Err_control:,并執行這一行后面的語句,本例中
14、Err_Control:后就是結束宏,所以只要出現錯誤,程序中止。Do '開始循環Loop 結束循環這個循環就歷害了,它會無休止地進行循環,好在本例中已經有了一個出錯陷井,當用戶輸入回車時,由于程序沒有得到點或坐標,程序出錯,跳出循環,中止程序。如果要人為控制跳出循環,可以在代碼中用Exit Do 語句跳出循環。在For 變量和Next 變量之間如果要跳出循環,那么只要在循環體內加一個Exitfor 就可以跳出循環,關于這方面的例程以后會講到。Call ThisDrawing.ModelSpace.AddLine(p1, p2) '畫直線畫直線方法也是很常用的,它的兩個參數是點
15、坐標變量本課到此結束,請做思考題:連續畫圓,每次要求用戶輸入圓心、半徑,當用戶不再輸入圓心或半徑時程序才退出同心圓,其半徑為1-5Autocad VBA 初級教程(第四課程序的調試和保存)人非圣賢,孰能無過,初學者在編寫復雜程序時往往會出現一些意想不到的錯誤,所以程序的調試顯得尤為重要,隨著學習的深入,以后我們需要經常進行程序調試。事實上,對于那些資深程序員來說,調試程序也是一項不可或缺的重要工作。首先,在程序輸入階段,應該充分利用VBA 編輯器的智能功能。當你在寫代碼時,輸入一些字母后,編輯器可以自動列出合適的語句、對象、函數供你選擇,可以用上下鍵選擇,然后按TAB 鍵(它位于“Q”鍵左邊)
16、確認。當輸入一個回車符后程序會自動對這條語句進行分析,如果出現錯誤就會提示。我們經常碰到的麻煩是程序的運行結果和預計的不一樣,一般我會這樣做:首先要想一想可能是哪一個變量有問題,然后去監視這個變量(或表達式),在程序合適的位置設置斷點,這樣可以使程序停下來看一看這個變量有沒有按照我的設想在變化。下面我舉一個簡單的例子,先看源代碼:sub test()for i=2 to 4 step 0.6next iend sub這是一個非常簡單的循環,每一次循環i 便會增加0.6,當循環3 次后i 值就變為4.4,但問題是每一次循環時i 值變為多少?第一步:在菜單中選“調試”“添加監視”,在表達試中填“i
17、”,點擊確定,這時你會看到臨視窗口中會多一行。第二步:把光標移到代碼窗口中的“next i”行,按一下“F9”,于是每當程序運行到這里時就會暫停了。好,一切就緒,請按F5 執行程序,在監視窗口中C 值立刻變為2,再按F5 繼續,C 值為2.6,再按幾次F5,直到程序結束,這樣我們就成功監視了C 值的變化。第三步:在next i 行再按一次F9,清除斷點。監視的表達式的右鍵菜單選擇“刪除監視”。另外,還可以用“逐語句”、“逐過程”、“運行到光標處”等方法進行調試,這些都在調試菜單中,操作比較簡單,請讀者自行領悟。到目前為止,我們所做的工程都是“嵌入式工程”,它只是嵌入在當前的Autocad 圖形
18、文件中, 以后打開這個文件時代碼才會加載,如果別的dwg 文件也要使用,那就需要把代碼導出為.bas 文件,供其他dwg 文件導入。在VBA 編輯器的“文件”菜單中有這兩個功能,一試便知。ACAD VBA 還有一種工程叫“通用式工程”,只要進入ACAD 就可以運行,程序可以在不同用戶、不同的圖形文件中共享,但是由于VBA 功能太強,有時候會出現一些意想不到的事情,所以在學習階段請暫時不要這樣做。本課結束,請做思考題;監視下列代碼中的i 和j 的值,注意,此題雖然要監視2 個變量,但是在代窗口中只要設置1 個斷點就足夠了。sub test()for i=2 to 4 step 0.6for j=
19、-5 to 2 step 5.5next jnext iend subAutocad VBA 初級教程(第五課畫函數曲線)先畫一組下圖拋物線。下面是源碼:Sub myl()Dim p(0 To 49) As Double '定義點坐標Dim myl As Object '定義引用曲線對象變量co = 15 '定義顏色For a = 0.01 To 1 Step 0.02 '開始循環畫拋物線For i = -24 To 24 Step 2 '開始畫多段線j = i + 24 '確定數組元素p(j) = i '橫坐標p(j + 1) = a
20、* p(j) * p(j) / 10 '縱坐標Next i '至此p(0)-p(40)所有元素已定義,結束循環Set myl = ThisDrawing.ModelSpace.AddLightWeightPolyline(p) '畫多段線myl.Color = co '設置顏色屬性co = co + 1 '改變顏色,供下次定義曲線顏色Next aEnd sub為了鼓勵大家積極思考,從本課開始,我不再解釋每一條語句的作用,只對以前沒有提過的語句進行一些解釋,也許你一時很難明白,建議用上一課提到的跟蹤變量、添加斷點的辦法領悟每一條語句的作用,如果有問題不懂請
21、跟貼提問。在跟蹤變量p 時請在跟蹤窗口中單擊變量p 前的+號,這樣可以看清數組p 中每一個元素的變化。ACAD 沒有現成的畫拋物線命令,我們只能用程序編寫多段線畫近似拋物線。理論上,拋物線的X 值可以是無限小、無限大,這里取值范圍在正負24 之間。程序第二行:Dim myl As Object '定義引用曲線對象變量Object 也是一種變量類型,它可以把變量定義為對象,本例中myl 變量將引用多段線,所以要定義為Objet類型。看畫多段線命令:Set myl = ThisDrawing.ModelSpace.AddLightWeightPolyline(p) '畫多段線其中括
22、號中的p 是一個數組,這個數組的元素數必須是偶數,每兩個元數作為一個點坐標。等號前面部分“Set myl”的作用就將myl 變量去引用畫好的多段線。myl.Color = co '設置顏色屬性。在ACAD 中,顏色可以用數字表示,本例中co 會增值,這樣就會有五彩繽紛的效果。本課第二張圖:正弦曲線,下面是源碼:Sub sinl()Dim p(0 To 719) As Double '定義點坐標For i = 0 To 718 Step 2 '開始畫多段線p(i) = i * 2 * 3.1415926535897 / 360 '橫坐標p(i + 1) = 2 *
23、 Sin(p(i) '縱坐標Next iThisDrawing.ModelSpace.AddLightWeightPolyline (p) '畫多段線ZoomExtents '顯示整個圖形End Subp(i) = i * 2 * 3.1415926535897 / 360 '橫坐標橫坐標表示角度,后面表達式的作用是把角度轉化弧度ZoomExtents 語句是縮放命令,它的作用是顯示整個圖形,消除圖形以外的區域本課思考題:畫一條拋物線:y=0.5*x*x+3,其中X 取值范圍在正負50 之間Autocad VBA 初級教程(第六課數據類型的轉換)上一節課我們用一
24、個簡單的公式把角度轉化為弧度,這樣做便于大家理解。不過VBA 中有現成的方法可以轉換數據類型。我們舉例說明:jd = ThisDrawing.Utility.AngleToReal(30, 0)這個表達式把角度30 度轉化為弧度,結果是.523598775598299。AngleToReal 需要兩個參數,前面是表示要轉換角度的數字,而后面一個參數可以取值為0-4 之間的整數,有如下意義:0:十進制角度;1:度分秒格式;2:梯度;3:弧度;4:測地單位例:id= ThisDrawing.Utility.AngleToReal("62d30' 10""&qu
25、ot;, 1)這個表達式計算62 度30 分10 秒的弧度再看將字符串轉換為實數的方法:DistanceToReal需要兩個參數,前一個參數是表示數值的字符串,后面可以取值1-5,表示數據格式,有如下意義:1:科學計數;2:十進制;3:工程計數英尺加英寸;4:建筑計數英尺加分數英寸;5:分數格式。例:以下表達式得到一個12.5 的實數temp1 = ThisDrawing.Utility.DistanceToReal("1.25E+01", 1)temp2 = ThisDrawing.Utility.DistanceToReal("12.5", 2)te
26、mp3 = ThisDrawing.Utility.DistanceToReal("12 1/2", 5)而realtostring 方法正好相反,它把一個實數轉換為字符串。它需要3 個參數第一個參數是一個實數,第二個參數表示數據格式,含義同上,最后一個參數表示精確到幾位小數。temp1= ThisDrawing.Utility.RealToString(12.5, 1, 3)得到這個字符串:“1.250E+01”,下面介紹一些數型轉換函數:Cint,獲得一個整數,例:Cint(3.14159) ,得到3Cvar,獲得一個Variant 類型的數值,例:Cvar("
27、;123" & "00"),得到”12300”Cdate,轉換為date 數據類型,例:MyShortTime = CDate("11:13:14 AM")下面的代碼可以寫出一串數字,從000-099。Sub test()Dim add0 As StringDim text As StringDim p(0 To 2) As Doublep(1) = 0 'Y 坐標為0p(2) = 0 'Z 坐標為0For i = 0 To 99 '開始循環If i < 10 Then '如果小于10add0 =
28、"00" '需要加00Else '否則add0 = "0" '需要加0End Iftext = add0 & CStr(i) '加零,并轉換數據p(0) = i * 100 'X 坐標Call ThisDrawing.ModelSpace.AddText(text, p, 4) '寫字Next iEnd Sub重點解釋條件判斷語句:If 條件表達式ThenElseEnd if如果滿足條件那么程序往下執行,到else 時不再往下執行,直接跳到End if 后面如果不滿足條件,程序跳到else 后往下運
29、行。Call ThisDrawing.ModelSpace.AddText(text, p, 4) '寫字這是寫單行文本,需要三個參數,分別是:寫的內容、位置、字高Autocad VBA 初級教程(第七課寫文字)客觀地說,ACAD 寫字功能不夠歷害,而用VBA 可以使寫字效率更高。比較正規的做法是把定義文字樣式,用樣式來控制文字的特性。我們還是用實例來學習,先看下面一段代碼,它的作用是先創建一個文字樣式,然后用這個文字樣式寫一段多行文本。Sub txt()Dim mytxt As AcadTextStyle '定義mytxt 變量為文本樣式Dim p(0 To 2) As Do
30、uble '定義坐標變量p(0) = 100: p(1) = 100: p(2) = 0 '坐標賦值Set mytxt = ThisDrawing.TextStyles.Add("mytxt") '添加mytxt 樣式mytxt.fontFile = "c:windowsfontssimfang.ttf" '設置字體文件為仿宋體mytxt.Height = 100 '字高mytxt.Width = 0.8 '寬高比mytxt.ObliqueAngle = ThisDrawing.Utility.AngleT
31、oReal(3, 0) '傾斜角度(需轉為弧度)ThisDrawing.ActiveTextStyle = mytxt '將當前文字樣式設置為mytxtSet txtobj = ThisDrawing.ModelSpace.AddMText(p, 1400, "做到老,學到老P" & "此心自光明正大,過人遠矣")txtobj.LineSpacingFactor = 2 '指定行間距txtobj.AttachmentPoint = 3 '右對齊(1 為左對齊,2 為居中)End Sub我們看這條語句Set mytx
32、t = ThisDrawing.TextStyles.Add("mytxt")添加文本樣式并賦值給mytxt 變量,只需要一個參數:文本樣式名fontfile、height、width、ObliqueAngle 是文本樣式最常用的屬性Call ThisDrawing.ModelSpace.AddMText(p, 1400, "做到老,學到老P" & "此心自光明正大,過人遠矣")這條語句是寫文本,需要三個參數。第一個參數p 是坐標,1400 是寬度,最后一個參數是文本內容,其中p 是一個回車符擴大字符間距用T 數字,例:T3a
33、bc,使文字abc 的間距擴大3 部,n 取值范圍是0.75-3在論壇中有一個經常被同好提及的問題:如何使用文字疊加。舉例說明:123S+0.12-0.34S 是格式字符,是分隔符,前面的數字在上,后面的數字在下。C 是顏色格式字符,C 后面跟一個數字表示顏色A 是對齊方式,A0,A1,A2 分別表示底部對齊、中間對齊和頂部對齊Autocad VBA 初級教程(第八課:圖層操作)先簡單介紹兩條命令:1、這條語句可以建立圖層:ThisDrawing.Layers.Add("新建圖層")在括號中填寫圖層的名稱。2、設置為當前的圖層ThisDrawing.ActiveLayer=
34、圖層對象注意,等號右邊的變量不能用圖層名稱,必須使用一個有效的圖層變量以下一些屬性在圖層比較常用:LayerOn 打開關閉Freeze 凍結Lock 鎖定Color 顏色Linetype 線型看一個例題:1、先在已有的圖層中尋找一個名為“新建圖層”的圖層2、如果找到這個圖層,顯示該圖層的信息,并提示用戶是否需要設置為當前圖層,如果用戶確認,則設置為當前圖層。3、如果圖層沒有找到,新建一個名為“新建圖層”的圖層,設置為黃色,HIDDEN 線型,并把這個圖層設置為當前圖層Sub mylay()Dim lay0 As AcadLayer '定義作為圖層的變量Dim lay1 As AcadL
35、ayerfindlay = 0 '尋找圖層的結果的變量,0 沒有找到,1 找到For Each lay0 In ThisDrawing.Layers '在所有的圖層中進行循環If lay0.Name = "新建圖層" Then '如果找到圖層名findlay = 1 '把變量改為1 標志著圖層已經找到msgstr = lay0.Name + "已經存在" + vbCrLfmsgstr = msgstr + "圖層狀態:" + IIf(lay0.LayerOn = True, "打開"
36、, "關閉") + vbCrLfmsgstr = msgstr + "圖層" + IIf(lay0.Freeze = True, "已經", "沒有") + "凍結" + vbCrLfmsgstr = msgstr + "圖層" + IIf(lay0.Lock = True, "已經", "沒有") + "鎖定" + vbCrLfmsgstr = msgstr + "圖層顏色號:" + CStr(
37、lay0.Color) + vbCrLfmsgstr = msgstr + "圖層線型:" + lay0.Linetype + vbCrLfmsgstr = msgstr + "圖層線寬:" + CStr(lay0.Lineweight) + vbCrLfmsgstr = msgstr + "打印開關" + IIf(lay0.Plottable = False, "關閉", "打開") + vbCrLf + vbCrLfmsgstr = msgstr + "是否設置為當前圖層?&quo
38、t;If MsgBox(msgstr, 1) = 1 Then '如果用戶點擊確定If Not lay0.LayerOn Then lay0.LayerOn = True '打開ThisDrawing.ActiveLayer = lay0 '把當前圖層設為已經存在的圖層End IfExit For '結束尋找End IfNext lay0If findlay = 0 Then '沒有找到圖層Set lay1 = ThisDrawing.Layers.Add("新建圖層") '增加一個名為“臨時圖層”的圖層lay1.Color
39、= 2 '圖層設置為黃色ltfind = 0 '找到線型的標志,0 沒有找到,1 找到For Each entry In ThisDrawing.Linetypes '在現有的線型中進行循環If StrComp(entry.Name, "HIDDEN") = 0 Then '如果線型名為"HIDDEN"ltfind = 1 '標志為已找到線型Exit For '退出循環End IfNext entry '結束循環If ltfind = 0 Then '沒有找到線型ThisDrawing.Li
40、netypes.Load "HIDDEN", "acadiso.lin" '加載線型End Iflay1.Linetype = "HIDDEN" '設置線型ThisDrawing.ActiveLayer = lay1 '將當前圖層設置為新建圖層End IfEnd Sub在尋找圖時時我們用到for eachnext 語句它的語法是這樣的:For Each 變量In 數組或集合對象exit fornext 變量它的作用是在數組或集合對象中進行循環,每循環一次,變量就成為數組或集合對象中的一個元素。本例在所有的圖層對
41、象中進行循環,每循環一次layo 變量就代表一個圖層在循環體中遇到exit for 語句則退出循環,如果沒有exit for,循環將在所有的元素都操作一遍后結束。If lay0.Name = "新建圖層" T 代表這處圖層的圖層名IIf(lay0.LayerOn = True, "打開", "關閉")這是一個簡單判斷語句,語法如下:iif(判斷表達式,返回值1,返回值2)當判斷表達式成立,函數值=返回值1,如果表達式不成立,函數值=2MsgBox(msgstr, 1)Mgbox 顯示一個對話框,第一個參數是對話
42、框顯示的內容第二個參數可以控制對話框上的按鈕。0 只有確認按鈕1 確認、取消2 終止、重試、忽略3 是、否、取消4 是、否MsgBox 獲得值如下:確認:1取消:2終止:3重試:4忽略:5是:6否7初學者不需要死記硬背,能有所了解就行了ACAD 圖層中最麻煩的就是線型問題了,本例先尋找一個HIDDEN 線型,如果找不到就加載這個線型,用這條語句:ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin"ThisDrawing.Linetypes.Load 后需要兩個參數,一個是線型的名稱,另外一個是線型文件的名稱
43、。Autocad VBA初級教程 (第九課:創建選擇集) 1.在創建對象的同時可以直接引用.以前的例程中已經做過多次了,現在復習一下,看例程:先隨機畫300個圓,在畫圓時直接引用,然后再把這些圓根本大小修改顏色.Sub c300()Dim myselect(0 To 300) As AcadEntity '定義選擇集數組Dim pp(0 To 2) As Double '圓心坐標For i = 0 To 300 '循環300次pp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0 '設置圓心坐標Set myselect
44、(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1) '畫不同大小的圓Next iFor i = 1 To 300If myselect(i).Radius > 10 Then '判斷圓的直徑是否大于10myselect(i).color = Int(255 * Rnd + 1) '大圓顏色改為隨機數Elsemyselect(i).color = 0 '小圓改為白色End IfNext iZoomExtents '縮放到顯示全部對象End Subpp(0) = 3000 * Rnd: pp
45、(1) = 3000 * Rnd: pp(2) = 0這一行實際上應該是三條語句,用三行合并為一行,用冒號分開rnd是隨機數函數,它的數值為0-1之間的小數,3000*rnd得到的數值就是在0-3000之間的隨機數Set myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1)這條語句的作用是以pp點坐標為圓心,畫一個圓,半徑是1-30之間的隨機數,賦值給myselect選擇集.2.提標用戶在屏幕中選取選擇語句這樣寫:Set sset = ThisDrawing.SelectionSets.Add("ss1&qu
46、ot;),其中”ss1”是一個選擇集名稱,這個參數可以隨意寫一個,注意不要重復就可以了.下面的例程是讓用戶選擇對象,然后把選中的對象改為綠色,最后把選擇集刪除Sub mysel()Dim sset As AcadSelectionSet '定義選擇集對象Dim element As AcadEntity '定義選擇集中的元素對象Set sset = ThisDrawing.SelectionSets.Add("ss1") '新建一個選擇集sset.SelectOnScreen '提示用戶選擇For Each element In sset &
47、#39;在選擇集中進行循環element.color = acGreen '改為綠色Nextsset.Delete '刪除選擇集End Sub3.選擇全部對象用select方法,參數為acSelectionSetAll ,看例程,這個程序選擇全部對象,顯示選中的對象,并計算對象數.Sub allsel()Dim sel1 As AcadSelectionSet '定義選擇集對象Set sel1 = ThisDrawing.SelectionSets.Add("s") '新建一個選擇集Call sel1.Select(acSelectionSe
48、tAll) '全部選中sel1.Highlight (True) '顯示選擇的對象sco= sel1.Count '計算選擇集中的對象數MsgBox "選中對象數:" & CStr(sco) '顯示對話框End Sub3.運用select方法上面的例題已經運用了select方法,下面講一下select的5種選擇方式:1:擇全部對象(acselectionsetall)2.選擇上次創建的對象(acselectionsetlast)3.選擇上次選擇的對象(acselectionsetprevious)4.選擇矩形窗口內對象(acselec
49、tionsetwindow)5.選擇矩形窗口內以及與邊界相交的對象(acselectionsetcrossing)還是看代碼來學習.其中選擇語句是:Call sel1.Select(Mode, p1, p2)Mode已經定義為5,也就是選擇矩形窗口內以及與邊界相交的對象,p1和p2是兩個點坐標,Sub selnew()Dim sel1 As AcadSelectionSet '定義選擇集對象Dim p1(0 To 2) As Double '坐標1Dim p2(0 To 2) As Double '坐標2p1(0) = 0: p1(1) = 0: p1(2) = 0 &
50、#39;設置坐標1p2(0) = 300: p2(1) = 300: p2(2) = 0 '設置坐標1Mode = 5 '把選擇模式存入mode變量中Set sel1 = ThisDrawing.SelectionSets.Add("sel3") '新建一個選擇集Call sel1.Select(Mode, p1, p2) '選擇對象sel1.Highlight (ture) '顯示已選中的對象End SubAutocad VBA初級教程 (第十課:畫多段線和樣條線) 畫二維多段線語句這樣寫:set lobj= ThisDrawing
51、.ModelSpace.AddLightweightPolyline(fitpoint)AddLightweightPolyline后面需一個參數,存放頂點坐標的數組畫三維多段線語句這樣寫:Set lobj = ThisDrawing.ModelSpace.Add3DPoly(fitpoint)Add3dpoly后面需一個參數,就是頂點坐標數組畫二維樣條線語句這樣寫:Set lobj = ThisDrawing.ModelSpace.AddSpline(fitPoints,startT, endT)Addspline后需要三個參數,第一個是擬合點數組,后面兩個分別是起點切向和終點切向。下面看例
52、題。這個程序是第三課例程的改進版。原題是這樣的:繪制三維多段線時X、Y值在屏幕上用鼠標選取,Z值用鍵盤輸入。細心的讀者是否還記得這個小程序已經在第三課的回貼中發布了。先分析一下編程細路:用動態數組存放多段線的所有頂點坐標,獲得新坐標后就把前一次畫的多段線刪除,畫出多段線,并將線段第二點的端點保存為下一條線段的第一個端點坐標,以下是源碼:Sub myl()Dim p1 As Variant '申明端點坐標Dim p2 As VariantDim l() As Double '聲明一個動態數組Dim templ As Objectp1 = ThisDrawing.Utility.G
53、etPoint(, "輸入點:") '獲取點坐標z = ThisDrawing.Utility.GetReal("Z坐標:") '用戶輸入Z坐標值p1(2) = z '將Z坐標值賦予點坐標中ReDim l(0 To 2) '定義動態數組l(0) = p1(0)l(1) = p1(1)l(2) = zOn Error GoTo Err_Control '出錯陷井Do '開始循環p2 = ThisDrawing.Utility.GetPoint(p1, vbCr & "輸入下一點:"
54、) '獲取下一個點的坐標z = ThisDrawing.Utility.GetReal("Z坐標:") '用戶輸入Z坐標值p2(2) = z '將Z坐標值賦予點坐標中 lub = UBound(l) '獲取當前l數組中元的元素個數ReDim Preserve l(lub + 3)For i = 1 To 3l(lub + i) = p2(i - 1)Next iIf lub > 3 Thentempl.Delete '刪除前一次畫的多段線End IfSet templ = ThisDrawing.ModelSpace.Add3D
55、Poly(l) '畫多段線p1 = p2 '將第二點的端點保存為下一條直線的第一個端點坐標LoopErr_Control:End Sub我們學一學動態數組,這是非常有用的。所謂動態數組,簡單講就是數組元素可以改變的特殊數組。這樣定義數組:Dim l( ) As Double 賦值語句:ReDim l(0 To 2) l(0) = p1(0)l(1) = p1(1)l(2) = z重新定義數組元素語句:lub = UBound(l) '先要獲取當前l數組中元的元素個數,用ubount函數計算。ReDim Preserve l(lub + 3)重定義時數組中要加三個元素,用
56、以存放坐標值,所以定義元素為lub+3。給數值賦值的語句是一樣的。再看畫多段線語句:Set templ = ThisDrawing.ModelSpace.Add3DPoly(l) '畫多段線在最后面括號中的l就是存放點坐標的動態數組,這條語句在畫多段線的同時把多段線作為對象賦值給templ 變量,這樣下面的刪除語句就可以直接引用這個變量了。刪除語句:templ.Delete因為已經知道對象是templ,所以只要在對象后面用delete方法就可以了。下面的例程更加實用些,它的功能是把樣條線轉化為多段線。編程思路:用戶選擇一根樣條線,計算樣條線的擬合點,然后把所有的擬合點存放到數組中,最后
57、用這個數組畫多段線。Sub sp2pl()Dim getsp As Object 獲取樣條線的變量Dim newl() As Double 多段線數組Dim p1 As Variant 獲得擬合點點坐標ThisDrawing.Utility.GetEntity getsp, po, "本程序將樣條曲線轉為多段線。請選擇樣條曲線"sumctrl = getsp.NumberOfControlPoints 計算樣條線中一共有多少擬合點ReDim newl(0 To sumctrl * 3 - 1) 重定義數組 For i = 0 To sumctrl - 1 開始循環,p1 =
58、 getsp.GetControlPoint(i) 把擬合點坐標存到p1變量中For j = 0 To 2newl(i * 3 + j) = p1(j)Next jNext iSet templ = ThisDrawing.ModelSpace.Add3DPoly(newl) 畫樣條線End Sub下面的語句是讓用戶選擇樣條線:ThisDrawing.Utility.GetEntity getsp, po, "本程序將樣條曲線轉為多段線。請選擇樣條曲線"ThisDrawing.Utility.GetEntity 后面需要三個參數:第一個getsp用于存放獲得用戶選擇的對象變
59、量,第二個po是用戶鼠標點下時的位置,第三個是一段字符串,顯示在提示欄。Autocad VBA初級教程 (第十一課:動畫基礎) 說實話,用ACAD玩動畫絕對比不上專業的三維動畫軟件,不過這年頭自稱精通CAD的工程師太多了,而學會用ACAD玩動畫一定能提高您的競爭實力, 想象一下您用ACAD動畫向老板演示零件的裝配方法下面的例題是一個最簡單的動畫,由用戶選擇一個要移動的對象,然后定位起點和終點,程序會慢慢地把對象移動。移動方法:object.move 起點坐標,端點坐標Sub testmove()Dim p0 As Variant '起點坐標Dim p1 As Variant '
60、終點坐標Dim pc As Variant '移動時起點坐標Dim pe As Variant '移動時終點坐標Dim movx As Variant 'x軸增量Dim movy As Variant 'y軸增量Dim getobj As Object '移動對象Dim movtimes As Integer '移動次數ThisDrawing.Utility.GetEntity getobj, po, "請選擇移動對象"p0 = ThisDrawing.Utility.GetPoint(, "起點:")p1 = ThisDrawing.Utility.GetPoint(p0, "終點
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 房屋整修合同協議書范本
- 2024四川雅安市市屬國有企業高級管理人員8人筆試參考題庫附帶答案詳解
- 初中物理人教版(2024)八年級上冊(2024)第3節 汽化和液化教案配套
- 發票勾選平臺培訓
- 2024華電江西發電有限公司所屬企業面向系統內外公開招聘4人筆試參考題庫附帶答案詳解
- 2024北京飛機維修工程有限公司市場化人才招聘筆試參考題庫附帶答案詳解
- 人教部編版 (五四制)一年級下冊13 荷葉圓圓教案設計
- 冀教版一年級下冊五 100以內的加法和減法(一)教案設計
- 人音版八年級上冊老鼠娶親教學設計
- 服裝入門培訓課件
- 幼兒園繪本故事:《鼴鼠的皮鞋車》 課件
- 工程概算表【模板】
- 《過程檢測技術及儀表》實驗指導書
- 信用修復申請書
- 舊廠房拆除施工組織方案
- 全合成水溶性線切割液配方
- ACLS-PC-SA課前自我測試試題及答案
- DB14∕T 2447-2022 建設項目環境影響后評價技術導則 生態影響類
- 冶金等工貿企業安全生產標準化達標信息管理系統[冶金等工貿企業安全生產標準化達標信息管理系統](-33)
- 英語話劇劇本<美女與野獸>
- 蘭炭外熱式回轉爐低溫干餾工藝及技術裝備簡介
評論
0/150
提交評論