输入 gpuser 子例程

AutoCAD ActiveX/VBA

 
输入 gpuser 子例程
 
 
 

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 函数得到。最后,分别在 angp90angm90 中计算并保存加/减 90 度的路的角度。

下面的图解显示了通过 gpuser 获取的变量如何指定路的尺寸。

保存所做的工作。