编写箭头宏
下面是一步一步的执行顺序:
1. 绘制与轴成任意角度的箭头,然后注释所有点。要从屏幕上拾取的点为 P1P2。绘制任意点作为原点 (0,0)。
2. 首先处理宏主体。对于几何宏,这就是执行绘制的部分。假设定义了点 P1 和点 P2,且它们表示从原点开始绘制的两个矢量的头,如上图所示。
3. 箭头的倒钩占沿中心线的总长度 (从箭头尖) 一定的比例 (让我们使用 60%)。定义一个长度为 P1P2 之间距离,方向为 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. 现在就可以定义点了。将 HW 加到 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 命令,用户可输入 P1P2 的坐标、
READ PNT 'Pick the arrow point' P1
READ PNT 告知系统将要输入点。系统将显示消息“请拾取箭头点”。用户输入点时,会将该点定义为 P1,并执行宏的下一行。
READ PNT 'Pick the tail centerpoint' RUBBER_LINE P1 P2
在此行中,随着在屏幕上移动光标,RUBBER_LINE 命令会在 P1 和光标之间绘制一条线。这对调整箭头尺寸非常有效。输入下一个点时,会将该点定义为 P2,并执行下一行。该行是宏主体的开头。
现在,请使用 LOOPEND_LOOP,将 READ 语句和宏主体包含在一个循环中。这样用户就可以在同一操作过程中创建多个箭头。在循环外部指定 LINETYPECOLOR,以便需要时可在操作过程中对其进行更改。将所有宏变量定义为 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_SETCS_ROTATECS_REF_PTCS_AXIS 等命令。
这对您有帮助吗?