當前位置:編程學習大全網 - 源碼下載 - CAD 二次開發 如何增加CAD命令

CAD 二次開發 如何增加CAD命令

第壹個程序:畫壹百個同心圓

第壹步:復制下面的紅色代碼

第二步:在模型空間按快捷鍵Alt+F8,出現宏窗口

第三步:在宏名稱中填寫C100,點“創建”、“確定”

第四步:在Sub c100()和End Sub之間粘貼代碼

第五步:回到模型空間,再次按Alt+F8,點擊“運行”

Sub c100()

Dim cc(0 To 2) As Double '聲明坐標變量

cc(0) = 1000 '定義圓心座標

cc(1) = 1000

cc(2) = 0

For i = 1 To 1000 Step 10 '開始循環

Call ThisDrawing.ModelSpace.AddCircle(cc, i * 10) '畫圓

Next i

End Sub

也許您還看不懂上面的代碼,這沒有關系,只要能把同心畫出來就可以了,祝您成功。

第二課 編程基礎

本課主要任務是對上壹課的例程進行詳細分析

下面是源碼:

Sub c100()

Dim cc(0 To 2) As Double '聲明坐標變量

cc(0) = 1000 '定義圓心座標

cc(1) = 1000

cc(2) = 0

For i = 1 To 1000 Step 10 '開始循環

Call ThisDrawing.ModelSpace.AddCircle(cc, i * 10) '畫圓

Next i

End Sub

先看第壹行和最後壹行:

Sub C100()

……

End Sub

C100是宏的名稱,也叫過程名稱,當用戶執行C100時程序將運行sub 和end sub之間的所有指令。

第二行:

Dim cc(0 To 2) As Double '聲明坐標變量

後半段“'聲明坐標變量”自動變為綠色字體,它是代碼語句的註釋,它不會影響程序運行,它的作用是告訴閱讀者程序員的想法。對於簡單的程序,壹般不需要寫註釋,如果要編寫非常復雜的程序,最好要多加註釋,越詳細越好,對於程序員來說,這是壹個好習慣。

電腦真正編譯執行的是這條語句:Dim cc(0 To 2) As Double

它的作用就是聲明變量。

Dim是壹條語句,可以理解為計算機指令。

它的語法:Dim變量名 As 數據類型

本例中變量名為CC,而括號中的0 to 2聲明這個CC是壹個數組,這個數組有三個元素:CC(0)、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) = 1000

cc(2) = 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 =1000 To 1 Step -10

很多情況下,後面可以不加step 10

如:For i=1 to 100,它的作用是每循環壹次i值就增加1

Next i語句必須出現在需要結束循環的位置,不然程序沒法運行。

下面看畫圓命令:

Call ThisDrawing.ModelSpace.AddCircle(cc, i * 10)

Call語句的作用是調用其他過程或者方法。

ThisDrawing.ModelSpace是指當前CAD文檔的模型空間

AddCircle是畫圓方法

Addcicle方法需要兩個參數:圓心和半徑

CC就是圓心坐標,i*10就是圓的半徑,本例中,這些圓的半徑分別是10、110、210、310……

本課到此結束,下面請完成壹道思考題:

1.以(4,2)為圓心,畫5個同心圓,其半徑為1-5

第三課 編程基礎二

繪制三維多段線時X、Y值在屏幕上用鼠標選取,Z值用鍵盤輸入

本課將講解這個問題。

為了簡化程序,這裏用多條直線來代替多段線。以下是源碼:

Sub myl()

Dim p1 As Variant '申明端點坐標

Dim p2 As Variant

p1 = ThisDrawing.Utility.GetPoint(, "輸入點:") '獲取點坐標

z = ThisDrawing.Utility.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 ThisDrawing.ModelSpace.AddLine(p1, p2) '畫直線

p1 = p2 '將第二點的端點保存為下壹條直線的第壹個端點坐標

Loop

Err_Control:

End Sub

先談壹下本程序的設計思路:

1、獲取第壹點坐標

2、輸入第壹點Z坐標

3、獲取第二點坐標

4、輸入第二點Z坐標

5、以第壹、二點為端點,畫直線

6、下壹條線的第壹點=這條線的第二點

7、回到第3步進行循環

如果用戶沒有輸入坐標或Z值,則程序結束。

首先看以下兩條語句:

p1 = ThisDrawing.Utility.GetPoint(, "輸入點:") ‘獲取點坐標

……

p2 = ThisDrawing.Utility.GetPoint(p1, vbCr & "輸入下壹點:") '獲取下壹個點的坐標

這兩條語句的作用是由用戶輸入點用鼠標選取點坐標,並把坐標值賦給p1、p2兩個變量。ThisDrawing.Utility.GetPoint()在ACAD中這是最常用的方法之壹,它需要兩個參數,在逗號前面的參數應該是壹個點坐標,它的作用是在屏幕上畫壹條線,前壹個端點位於點坐標位置,後壹個端點跟隨鼠標移動,逗號之前可以什麽都不填,這時沒有線條會跟隨鼠標移動,但逗號必須保留。

逗號後面使用壹串字符,程序在命令行顯示這串字符,這不難理解。

VbCr通常代表壹個回車符,而在這個語句中,它的作用是在命令行不顯示“命令:”

&的作用是連接字符。舉例:

“愛我中華 ”&”抵制日貨 ”&”從我做起”

z = ThisDrawing.Utility.GetReal("Z坐標:") '用戶輸入Z坐標值

由用戶輸入壹個實數

On Error GoTo Err_Control '出錯陷井

……

Err_Control:

On Error是出錯陷井語句,在程序出錯時將執行On Error 後面的語句

GoTo Err_contorl 是程序跳轉語句,它的作用是在程序中尋找Err_control:,並執行這壹行後面的語句,本例中Err_Control:後就是結束宏,所以只要出現錯誤,程序中止。

Do '開始循環

……

Loop ‘結束循環

這個循環就歷害了,它會無休止地進行循環,好在本例中已經有了壹個出錯陷井,當用戶輸入回車時,由於程序沒有得到點或坐標,程序出錯,跳出循環,中止程序。如果要人為控制跳出循環,可以在代碼中用Exit Do語句跳出循環。在For 變量 和Next 變量之間如果要跳出循環,那麽只要在循環體內加壹個Exit for 就可以跳出循環,關於這方面的例程以後會講到。

Call ThisDrawing.ModelSpace.AddLine(p1, p2) '畫直線

畫直線方法也是很常用的,它的兩個參數是點坐標變量

本課到此結束,請做思考題:

連續畫圓,每次要求用戶輸入圓心、半徑,當用戶不再輸入圓心或半徑時程序才退出

第四課 程序的調試和保存

人非聖賢,孰能無過,初學者在編寫復雜程序時往往會出現壹些意想不到的錯誤,所以程序的調試顯得尤為重要,隨著學習的深入,以後我們需要經常進行程序調試。事實上,對於那些資深程序員來說,調試程序也是壹項不可或缺的重要工作。

首先,在程序輸入階段,應該充分利用VBA編輯器的智能功能。當妳在寫代碼時,輸入壹些字母後,編輯器可以自動列出合適的語句、對象、函數供妳選擇,可以用上下鍵選擇,然後按TAB鍵(它位於“Q”鍵左邊)確認。當輸入壹個回車符後程序會自動對這條語句進行分析,如果出現錯誤就會提示。

我們經常碰到的麻煩是程序的運行結果和預計的不壹樣,壹般我會這樣做:首先要想壹想可能是哪壹個變量有問題,然後去監視這個變量(或表達式),在程序合適的位置設置斷點,這樣可以使程序停下來看壹看這個變量有沒有按照我的設想在變化。下面我舉壹個簡單的例子,先看源代碼:

sub test()

for i=2 to 4 step 0.6

next i

end sub

這是壹個非常簡單的循環,每壹次循環i便會增加0.6,當循環3次後i值就變為4.4,但問題是每壹次循環時i值變為多少?

第壹步:在菜單中選“調試”—“添加監視”,在表達試中填“i”,點擊確定,這時妳會看到臨視窗口中會多壹行。

第二步:把光標移到代碼窗口中的“next i”行,按壹下“F9”,於是每當程序運行到這裏時就會暫停了。

好,壹切就緒,請按F5執行程序,在監視窗口中C值立刻變為2,再按F5繼續,C值為2.6,再按幾次F5,直到程序結束,這樣我們就成功監視了C值的變化。

第三步:在next i行再按壹次F9,清除斷點。監視的表達式的右鍵菜單選擇“刪除監視”。

另外,還可以用“逐語句”、“逐過程”、“運行到光標處”等方法進行調試,這些都在調試菜單中,操作比較簡單,請讀者自行領悟。

到目前為止,我們所做的工程都是“嵌入式工程”,它只是嵌入在當前的Autocad圖形文件中, 以後打開這個文件時代碼才會加載,如果別的dwg文件也要使用,那就需要把代碼導出為.bas文件,供其他dwg文件導入。在VBA編輯器的“文件”菜單中有這兩個功能,壹試便知。

ACAD VBA還有壹種工程叫“通用式工程”,只要進入ACAD就可以運行,程序可以在不同用戶、不同的圖形文件中***享,但是由於VBA功能太強,有時候會出現壹些意想不到的事情,所以在學習階段請暫時不要這樣做。

本課結束,請做思考題;監視下列代碼中的i和j的值,註意,此題雖然要監視2個變量,但是在代窗口中只要設置1個斷點就足夠了。

sub test()

for i=2 to 4 step 0.6

for j=-5 to 2 step 5.5

next j

next i

end sub

第五課 畫函數曲線

先畫壹組下圖拋物線。

下面是源碼:

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 * p(j) * p(j) / 10 '縱坐標

Next i '至此p(0)-p(40)所有元素已定義,結束循環

Set myl = ThisDrawing.ModelSpace.AddLightWeightPolyline(p) '畫多段線

myl.Color = co '設置顏色屬性

co = co + 1 '改變顏色,供下次定義曲線顏色

Next a

End sub

為了鼓勵大家積極思考,從本課開始,我不再解釋每壹條語句的作用,只對以前沒有提過的語句進行壹些解釋,也許妳壹時很難明白,建議用上壹課提到的跟蹤變量、添加斷點的辦法領悟每壹條語句的作用。

在跟蹤變量p時請在跟蹤窗口中單擊變量p前的+號,這樣可以看清數組p中每壹個元素的變化。

ACAD沒有現成的畫拋物線命令,我們只能用程序編寫多段線畫近似拋物線。理論上,拋物線的X值可以是無限小、無限大,這裏取值範圍在正負24之間。

程序第二行:Dim myl As Object '定義引用曲線對象變量

Object也是壹種變量類型,它可以把變量定義為對象,本例中myl變量將引用多段線,所以要定義為Objet類型。

看畫多段線命令:

Set myl = ThisDrawing.ModelSpace.AddLightWeightPolyline(p) '畫多段線

其中括號中的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 * Sin(p(i)) '縱坐標

Next i

ThisDrawing.ModelSpace.AddLightWeightPolyline (p) '畫多段線

ZoomExtents '顯示整個圖形

End Sub

p(i) = i * 2 * 3.1415926535897 / 360 '橫坐標

橫坐標表示角度,後面表達式的作用是把角度轉化弧度

ZoomExtents語句是縮放命令,它的作用是顯示整個圖形,消除圖形以外的區域

本課思考題:畫壹條拋物線:y=0.5*x*x+3,其中X取值範圍在正負50之間

第六課 數據類型的轉換

上壹節課我們用壹個簡單的公式把角度轉化為弧度,這樣做便於大家理解。不過VBA中有現成的方法可以轉換數據類型。

我們舉例說明:

jd = ThisDrawing.Utility.AngleToReal(30, 0)

這個表達式把角度30度轉化為弧度,結果是.523598775598299。

AngleToReal需要兩個參數,前面是表示要轉換角度的數字,而後面壹個參數可以取值為0-4之間的整數,有如下意義:

0:十進制角度;1:度分秒格式;2:梯度;3:弧度;4:測地單位

例:id= ThisDrawing.Utility.AngleToReal("62d30' 10""", 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)

temp3 = ThisDrawing.Utility.DistanceToReal("12 1/2", 5)

而realtostring方法正好相反,它把壹個實數轉換為字符串。它需要3個參數

第壹個參數是壹個實數,第二個參數表示數據格式,含義同上,最後壹個參數表示精確到幾位小數。

temp1= ThisDrawing.Utility.RealToString(12.5, 1, 3)

得到這個字符串:“1.250E+01”,

下面介紹壹些數型轉換函數:

Cint,獲得壹個整數,例:Cint(3.14159) ,得到3

Cvar,獲得壹個Variant類型的數值,例:Cvar("123" & "00"),得到”12300”

Cdate,轉換為date數據類型,例:MyShortTime = CDate("11:13:14 AM")

下面的代碼可以寫出壹串數字,從000-099。

Sub test()

Dim add0 As String

Dim text As String

Dim p(0 To 2) As Double

p(1) = 0 'Y坐標為0

p(2) = 0 'Z坐標為0

For i = 0 To 99 '開始循環

If i < 10 Then '如果小於10

add0 = "00" '需要加00

Else '否則

add0 = "0" '需要加0

End If

text = add0 & CStr(i) '加零,並轉換數據

p(0) = i * 100 'X坐標

Call ThisDrawing.ModelSpace.AddText(text, p, 4) '寫字

Next i

End Sub

重點解釋條件判斷語句:

If 條件表達式 Then

……

Else

……

End if

如果滿足條件那麽程序往下執行,到else時不再往下執行,直接跳到End if後面

如果不滿足條件,程序跳到else後往下運行。

Call ThisDrawing.ModelSpace.AddText(text, p, 4) '寫字

這是寫單行文本,需要三個參數,分別是:寫的內容、位置、字高

第七課 寫文字

客觀地說,ACAD寫字功能不夠歷害,而用VBA可以使寫字效率更高。比較正規的做法是把定義文字樣式,用樣式來控制文字的特性。我們還是用實例來學習,先看下面壹段代碼,它的作用是先創建壹個文字樣式,然後用這個文字樣式寫壹段多行文本。

Sub txt()

Dim mytxt As AcadTextStyle '定義mytxt變量為文本樣式

Dim p(0 To 2) As Double '定義坐標變量

p(0) = 100: p(1) = 100: p(2) = 0 '坐標賦值

Set mytxt = ThisDrawing.TextStyles.Add("mytxt") '添加mytxt樣式

mytxt.fontFile = "c:\windows\fonts\simfang.ttf" '設置字體文件為仿宋體

mytxt.Height = 100 '字高

mytxt.Width = 0.8 '寬高比

mytxt.ObliqueAngle = ThisDrawing.Utility.AngleToReal(3, 0) '傾斜角度(需轉為弧度)

ThisDrawing.ActiveTextStyle = mytxt '將當前文字樣式設置為mytxt

Set txtobj = ThisDrawing.ModelSpace.AddMText(p, 1400, "\P" & "此心自光明正大,過人遠矣")

txtobj.LineSpacingFactor = 2 '指定行間距

txtobj.AttachmentPoint = 3 '右對齊(1為左對齊,2為居中)

End Sub

我們看這條語句

Set mytxt = ThisDrawing.TextStyles.Add("mytxt")

添加文本樣式並賦值給mytxt變量,只需要壹個參數:文本樣式名

fontfile、height、width、ObliqueAngle是文本樣式最常用的屬性

Call ThisDrawing.ModelSpace.AddMText(p, 1400, "\P" & "此心自光明正大,過人遠矣")

這條語句是寫文本,需要三個參數。第壹個參數p是坐標,1400是寬度,最後壹個參數是文本內容,其中\p是壹個回車符

擴大字符間距用\T數字,例:\T3abc,使文字abc的間距擴大3 部,n取值範圍是0.75-3

在論壇中有壹個經常被同好提及的問題:如何使用文字疊加。舉例說明:123\S+0.12^-0.34

\S是格式字符,^是分隔符,前面的數字在上,後面的數字在下。

\C是顏色格式字符,C後面跟壹個數字表示顏色

\A是對齊方式,\A0,\A1,\A2分別表示底部對齊、中間對齊和頂部對齊

夠不夠,不夠的話給個郵箱,我再發給妳壹個pdf文件!

  • 上一篇:趨勢雷達源代碼
  • 下一篇:網絡吸粉,推廣和精準客戶引流黑科技有哪些
  • copyright 2024編程學習大全網