你當(dāng)前的位置>>主頁>>AutoCAD知識>>專題教程
 

Autocad VBA初級教程 (第十課:畫多段線和樣條線)

    畫二維多段線語句這樣寫:
set lobj= ThisDrawing.ModelSpace.AddLightweightPolyline(fitpoint)
AddLightweightPolyline后面需一個參數(shù),存放頂點坐標(biāo)的數(shù)組

畫三維多段線語句這樣寫:
Set lobj = ThisDrawing.ModelSpace.Add3DPoly(fitpoint)
Add3dpoly后面需一個參數(shù),就是頂點坐標(biāo)數(shù)組

畫二維樣條線語句這樣寫:
Set lobj = ThisDrawing.ModelSpace.AddSpline(fitPoints,startT, endT)
Addspline后需要三個參數(shù),第一個是擬合點數(shù)組,后面兩個分別是起點切向和終點切向。

下面看例題。這個程序是第三課例程的改進版。原題是這樣的:
繪制三維多段線時X、Y值在屏幕上用鼠標(biāo)選取,Z值用鍵盤輸入。
細心的讀者是否還記得這個小程序已經(jīng)在第三課的回貼中發(fā)布了。先分析一下編程細路:
用動態(tài)數(shù)組存放多段線的所有頂點坐標(biāo),獲得新坐標(biāo)后就把前一次畫的多段線刪除,畫出多段線,并將線段第二點的端點保存為下一條線段的第一個端點坐標(biāo),以下是源碼:

Sub myl()

Dim p1 As Variant '申明端點坐標(biāo)
Dim p2 As Variant
Dim l() As Double '聲明一個動態(tài)數(shù)組
Dim templ As Object

p1 = ThisDrawing.Utility.GetPoint(, "輸入點:") '獲取點坐標(biāo)
z = ThisDrawing.Utility.GetReal("Z坐標(biāo):") '用戶輸入Z坐標(biāo)值
p1(2) = z '將Z坐標(biāo)值賦予點坐標(biāo)中

ReDim l(0 To 2) '定義動態(tài)數(shù)組
l(0) = p1(0)
l(1) = p1(1)
l(2) = z

On Error GoTo Err_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)中
 
  lub = UBound(l) '獲取當(dāng)前l(fā)數(shù)組中元的元素個數(shù)
  ReDim Preserve l(lub + 3)
  For i = 1 To 3
    l(lub + i) = p2(i - 1)
  Next i
  If lub > 3 Then
    templ.Delete '刪除前一次畫的多段線
  End If
  Set templ = ThisDrawing.ModelSpace.Add3DPoly(l) '畫多段線
  p1 = p2 '將第二點的端點保存為下一條直線的第一個端點坐標(biāo)
Loop
Err_Control:

End Sub


我們學(xué)一學(xué)動態(tài)數(shù)組,這是非常有用的。所謂動態(tài)數(shù)組,簡單講就是數(shù)組元素可以改變的特殊數(shù)組。
這樣定義數(shù)組:Dim l( ) As Double
賦值語句:
ReDim l(0 To 2)
l(0) = p1(0)
l(1) = p1(1)
l(2) = z
重新定義數(shù)組元素語句:
  lub = UBound(l) '先要獲取當(dāng)前l(fā)數(shù)組中元的元素個數(shù),用ubount函數(shù)計算。
  ReDim Preserve l(lub + 3)
重定義時數(shù)組中要加三個元素,用以存放坐標(biāo)值,所以定義元素為lub+3。給數(shù)值賦值的語句是一樣的。

再看畫多段線語句:
Set templ = ThisDrawing.ModelSpace.Add3DPoly(l) '畫多段線
在最后面括號中的l就是存放點坐標(biāo)的動態(tài)數(shù)組,這條語句在畫多段線的同時把多段線作為對象賦值給templ 變量,這樣下面的刪除語句就可以直接引用這個變量了。

刪除語句:
templ.Delete
因為已經(jīng)知道對象是templ,所以只要在對象后面用delete方法就可以了。

下面的例程更加實用些,它的功能是把樣條線轉(zhuǎn)化為多段線。編程思路:用戶選擇一根樣條線,計算樣條線的擬合點,然后把所有的擬合點存放到數(shù)組中,最后用這個數(shù)組畫多段線。

Sub sp2pl()

Dim getsp As Object ‘獲取樣條線的變量
Dim newl() As Double ‘多段線數(shù)組

Dim p1 As Variant ‘獲得擬合點點坐標(biāo)

ThisDrawing.Utility.GetEntity getsp, po, "本程序?qū)訔l曲線轉(zhuǎn)為多段線。請選擇樣條曲線"

sumctrl = getsp.NumberOfControlPoints ‘計算樣條線中一共有多少擬合點

ReDim newl(0 To sumctrl * 3 - 1) ‘重定義數(shù)組
 
  For i = 0 To sumctrl - 1 ‘開始循環(huán),
  p1 = getsp.GetControlPoint(i) ‘把擬合點坐標(biāo)存到p1變量中
      For j = 0 To 2
    newl(i * 3 + j) = p1(j)
  Next j

Next i
Set templ = ThisDrawing.ModelSpace.Add3DPoly(newl) ‘畫樣條線

End Sub

下面的語句是讓用戶選擇樣條線:
ThisDrawing.Utility.GetEntity getsp, po, "本程序?qū)訔l曲線轉(zhuǎn)為多段線。請選擇樣條曲線"
ThisDrawing.Utility.GetEntity 后面需要三個參數(shù):
第一個getsp用于存放獲得用戶選擇的對象變量,第二個po是用戶鼠標(biāo)點下時的位置,第三個是一段字符串,顯示在提示欄。

本教程共13頁    第  [1]  [2] [3] [4] [5] [6] [7] [8] [9]  10  [11]  [12]  [13]  頁
民眾工作室.制作      版權(quán)所有