gpuser 子例程提示用户提供绘制花园小路所需要的信息。在 distance 函数后面输入下列代码:
' 获取花园小路的信息
Private Sub gpuser()
Dim varRet As Variant
varRet = ThisDrawing.Utility.GetPoint( _
, "Start point of path: ")
sp(0) = varRet(0)
sp(1) = varRet(1)
sp(2) = varRet(2)
varRet = ThisDrawing.Utility.GetPoint( _
, "Endpoint of path: ")
ep(0) = varRet(0)
ep(1) = varRet(1)
ep(2) = varRet(2)
hwidth = ThisDrawing.Utility. _
GetDistance(sp, "Half width of path: ")
trad = ThisDrawing.Utility. _
GetDistance(sp, "Radius of tiles: ")
tspac = ThisDrawing.Utility. _
GetDistance(sp, "Spacing between tiles: ")
pangle = ThisDrawing.Utility.AngleFromXAxis( _
sp, ep)
totalwidth = 2 * hwidth
plength = distance(sp, ep)
angp90 = pangle + dtr(90)
angm90 = pangle - dtr(90)
End Sub
在 gpuser 子例程中,Dim varRet As Variant 一行声明了 varRet 变量。因为该变量仅用在此子例程中,所以可以在此将它声明为局部变量,而不必在 (声明) 部分中声明。
下一行 varRet = ThisDrawing.Utility.GetPoint( , "Start point of path: ") 用于调用 GetPoint 方法。行中的下划线是为了便于阅读较长的行,并告知 VBA 读取下一行时将它视为同一行。将所有代码放在一行中可以删除该下划线。
要访问 GetPoint 方法,必须首先访问代表当前图形的 ThisDrawing 对象。依次输入 ThisDrawing 和句点 (.),表示要访问该对象中的内容。输入句点后,再输入 Utility 和另一个句点。同样,这表示要访问 Utility 对象中的内容。最后,输入要调用的方法的名称 GetPoint。
GetPoint 方法接收两个参数。第一个参数可选,并且将不会使用它。保留该参数为空,只键入一个逗号以标记它的位置。第二个参数是提示,也是可选的。为该参数输入一个字符串,用于提示用户输入起点。用户输入的点放在 varRet 变量中。该子例程接下来的三行将用户返回的点复制到 sp 数组中。
GetDistance 方法用于获取小路的半宽 (hwidth)、瓷砖的半径 (trad) 和瓷砖之间的间距 (tspac)。GetDistance 方法接收两个参数。第一个参数是基点。这里为该值提供了起点。第二个参数是提示,需要提供一个字符串,用于提示用户提供适当的输入。GetDistance 方法的有趣之处在于:它既可以返回在命令行中输入的值,也可以返回 AutoCAD 中的选定点和起点之间的距离。
该子例程将继续计算若干变量,留待稍后在宏中使用。pangle 变量被设置为从起点到端点的角度,可以使用 AngleFromXAxis 方法找到。将路的半宽乘以 2 可以得到路的宽度。plength 变量被设置为路的长度,可以使用早些时候输入的 distance 函数得到。最后,分别在 angp90 和 angm90 中计算并保存加/减 90 度的路的角度。
下面的图解显示了通过 gpuser 获取的变量如何指定路的尺寸。