画二维多段线语句这样写:
set lobj= ThisDrawing.ModelSpace.AddLightweightPolyline(fitpoint)
AddLightweightPolyline后面需一个参数,存放顶点坐标的数组
画三维多段线语句这样写:
Set lobj = ThisDrawing.ModelSpace.Add3DPoly(fitpoint)
Add3dpoly后面需一个参数,就是顶点坐标数组
画二维样条线语句这样写:
Set lobj = ThisDrawing.ModelSpace.AddSpline(fitPoints,startT, endT)
Addspline后需要三个参数,第一个是拟合点数组,后面两个分别是起点切向和终点切向。
下面看例题。这个程序是第三课例程的改进版。原题是这样的:
绘制三维多段线时X、Y值在屏幕上用鼠标选取,Z值用键盘输入。
细心的读者是否还记得这个小程序已经在第三课的回贴中发布了。先分析一下编程细路:
用动态数组存放多段线的所有顶点坐标,获得新坐标后就把前一次画的多段线删除,画出多段线,并将线段第二点的端点保存为下一条线段的第一个端点坐标,以下是源码:
Sub myl()
Dim p1 As Variant 申明端点坐标
Dim p2 As Variant
Dim l() As Double 声明一个动态数组
Dim templ As Object
p1 = ThisDrawing.Utility.GetPoint(, "输入点:") 获取点坐标
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) = z
On Error GoTo Err_Control 出错陷井
Do 开始循环
p2 = ThisDrawing.Utility.GetPoint(p1, vbCr & "输入下一点:") 获取下一个点的坐标
z = ThisDrawing.Utility.GetReal("Z坐标:") 用户输入Z坐标值
p2(2) = z 将Z坐标值赋予点坐标中
lub = UBound(l) 获取当前l数组中元的元素个数
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 将第二点的端点保存为下一条直线的第一个端点坐标
Loop
Err_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)
重定义时数组中要加三个元素,用以存放坐标值,所以定义元素为lub+3。给数值赋值的语句是一样的。
再看画多段线语句:
Set templ = ThisDrawing.ModelSpace.Add3DPoly(l) 画多段线
在最后面括号中的l就是存放点坐标的动态数组,这条语句在画多段线的同时把多段线作为对象赋值给templ 变量,这样下面的删除语句就可以直接引用这个变量了。
删除语句:
templ.Delete
因为已经知道对象是templ,所以只要在对象后面用delete方法就可以了。
下面的例程更加实用些,它的功能是把样条线转化为多段线。编程思路:用户选择一根样条线,计算样条线的拟合点,然后把所有的拟合点存放到数组中,最后用这个数组画多段线。
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 = getsp.GetControlPoint(i) ‘把拟合点坐标存到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, "本程序将样条曲线转为多段线。请选择样条曲线"
ThisDrawing.Utility.GetEntity 后面需要三个参数:
第一个getsp用于存放获得用户选择的对象变量,第二个po是用户鼠标点下时的位置,第三个是一段字符串,显示在提示栏。