现在已经获得了路的位置和宽度,可以绘制它的轮廓了。在 gpuser 子例程下面添加下列代码:
' 绘制路的轮廓
Private Sub drawout()
Dim points(0 To 9) As Double
Dim pline As AcadLWPolyline
Dim varRet As Variant
varRet = ThisDrawing.Utility.PolarPoint( _
sp, angm90, hwidth)
points(0) = varRet(0)
points(1) = varRet(1)
points(8) = varRet(0)
points(9) = varRet(1)
varRet = ThisDrawing.Utility.PolarPoint( _
varRet, pangle, plength)
points(2) = varRet(0)
points(3) = varRet(1)
varRet = ThisDrawing.Utility.PolarPoint( _
varRet, angp90, totalwidth)
points(4) = varRet(0)
points(5) = varRet(1)
varRet = ThisDrawing.Utility.PolarPoint( _
varRet, pangle + dtr(180), plength)
points(6) = varRet(0)
points(7) = varRet(1)
Set pline = ThisDrawing.ModelSpace. _
AddLightWeightPolyline(points)
End Sub
此子例程使用 AddLightweightPolyline 方法绘制小路的轮廓。此方法采用一个参数:组成多段线的点阵列。必须找到组成多段线对象的所有点,并将它们按绘制顺序放在数组中。对于该多段线,所需要的点是路的角点。
要找到小路的角点,请使用 PolarPoint 方法。该方法可以找到与基点成给定角度和距离的点。从起点 (sp) 开始,沿逆时针方向找到路的第一个角点。该角点将相距一半路宽 (hwidth),并与路角度成 -90 度。因为要为该路绘制闭合矩形,所以该点成为数组的第一个也是最后一个点。因此,PolarPoint 方法返回的 X 和 Y 坐标被移动到点数组的第一个和最后一个位置。
使用路的长度和宽度(plength 和 width)以及路的角度以同样方式得到路的其他角点。每次调用 PolarPoint 方法时,返回的坐标 (varRet) 都复制到点数组中。
在点阵列中标识所有角点后,调用 AddLightweightPolyline 方法。请注意,此方法是从 ModelSpace 对象调用的。如果要运行此宏,还将注意到多段线在 AutoCAD 中尚不可见。要使多段线可见,必须更新显示(稍后将做此工作)。