编写箭头宏
下面是一步一步的执行顺序:
1. 绘制与轴成任意角度的箭头,然后注释所有点。要从屏幕上拾取的点为 P1 和 P2。绘制任意点作为原点 (0,0)。
2. 首先处理宏主体。对于几何宏,这就是执行绘制的部分。假设定义了点 P1 和点 P2,且它们表示从原点开始绘制的两个矢量的头,如上图所示。
3. 箭头的倒钩占沿中心线的总长度 (从箭头尖) 一定的比例 (让我们使用 60%)。定义一个长度为 P1 和 P2 之间距离,方向为 P2 的方向的矢量,称之为 H。与其他所有矢量一样,H 也起始于 0,0。
LET H (0.6 * ( P2 - P1 ) )
4. 倒钩占 H 距中心线之间距离的一定比例 (让我们使用 30%)。定义一个长度为此长度,方向垂直于 H 的矢量,称之为 W。
LET W ( 0.3 * ( ROT H 90 ) )
5. 尾部厚度的一半占 W 的一定比例 (让我们使用 40%)。定义一个长度为此长度,方向为 W 方向的矢量,称之为 T。
LET T ( 0.4 * W )
6. 现在就可以定义点了。将 H 和 W 加到 P1 上以定义点 P3,如下图所示。
LET P3 ( P1 + H + W )
7. 以完全相同的方法定义其他点。
LET P6 ( P1 + H - W )
LET P4 ( P1 + H + T )
LET P5 ( P1 + H - T )
LET P8 ( P2 + T )
LET P9 ( P2 - T )
8. 连接点以创建箭头形状。
LINE POLYGON P1 P3 P4 P8 P9 P5 P6 P1
宏主体已完成,现在我们可以继续处理从屏幕中拾取的点 P1 和点 P2。通过 READ 命令,用户可输入 P1 和 P2 的坐标、
READ PNT 'Pick the arrow point' P1
READ PNT 告知系统将要输入点。系统将显示消息“请拾取箭头点”。用户输入点时,会将该点定义为 P1,并执行宏的下一行。
READ PNT 'Pick the tail centerpoint' RUBBER_LINE P1 P2
在此行中,随着在屏幕上移动光标,RUBBER_LINE 命令会在 P1 和光标之间绘制一条线。这对调整箭头尺寸非常有效。输入下一个点时,会将该点定义为 P2,并执行下一行。该行是宏主体的开头。
现在,请使用 LOOP 和 END_LOOP,将 READ 语句和宏主体包含在一个循环中。这样用户就可以在同一操作过程中创建多个箭头。在循环外部指定 LINETYPE 和 COLOR,以便需要时可在操作过程中对其进行更改。将所有宏变量定义为 LOCAL。
这里是完整的宏:
DEFINE Arrow_head
LOCAL P1
LOCAL P2
LOCAL P3
LOCAL P4
LOCAL P5
LOCAL P6
LOCAL P8
LOCAL P9
LOCAL H
LOCAL W
LOCAL T
COLOR WHITE
LINETYPE SOLID
LOOP
READ PNT 'Pick the arrow point' P1
READ PNT 'Pick the tail centerpoint' RUBBER_LINE P1 P2
LET H (0.6 * ( P2 - P1 ) )
LET W ( 0.3 * ( ROT H 90 ) )
LET T ( 0.4 * W )
LET P3 ( P1 + H + W )
LET P6 ( P1 + H - W )
LET P4 ( P1 + H + T )
LET P5 ( P1 + H - T )
LET P8 ( P2 + T )
LET P9 ( P2 - T )
LINE POLYGON P1 P3 P4 P8 P9 P5 P6 P1
END
END_LOOP
END
END_DEFINE
请记住,可进行该作业的宏的编写方法有很多种。另一种方法就是在建立点和绘制形状之前,将轴旋转至所需角度。此方法将使用 CS_SET、CS_ROTATE、CS_REF_PT 和 CS_AXIS 等命令。