Code Range | 0x80 |
Pops | p: point number (ULONG) |
Pushes | – |
Uses | loop, p is referenced in zp0 |
Code Range | 0x81 |
Pops | highpoint: highest point number in range of points to be flipped (ULONG) |
lowpoint: lowest point number in range of points to be flipped (ULONG) | |
Pushes | – |
Code Range | 0x82 |
Pops | highpoint: highest point number in range of points to be flipped (ULONG) |
lowpoint: lowest point number in range of points to be flipped (ULONG) | |
Pushes | – |
Note:
This instruction changes the curve but the position of the points is unaffected. Accordingly, points affected by this instruction are not marked as touched.
Example: FLIPRGOFF[ ] 8 6 Before : After:Code Range | 0x32 - 0x33 |
a | 0: uses rp2 in the zone pointed to by zp1 |
1: uses rp1 in the zone pointed to by zp0 | |
Pops | p: point to be shifted (ULONG) |
Pushes | – |
Uses | zp0 with rp1 or zp1 with rp2 depending on flag |
zp2 with point p | |
loop, freedom_vector, projection_vector |
Note:
Point p is shifted from its current position, not its original position. The distance that the reference point has shifted is measured between its current position and the original position.
In the illustration below rp is the original position of the reference point, rp' is the current position of the reference point, p is the original position of point p, p' is the current position, p" the position after it is shifted by the SHP instruction. (White indicates original position, gray is current position, black is position to which this instruction moves a point).Code Range | 0x34 - 0x35 |
a | 0: uses rp2 in the zone pointed to by zp1 |
1: uses rp1 in the zone pointed to by zp0 | |
Pops | c: contour to be shifted (ULONG) |
Pushes | – |
Uses | zp0 with rp1 or zp1 with rp2 depending on flag |
zp2 with contour c | |
freedom_vector, projection_vector |
Code Range | 0x36 - 0x37 |
a | 0: the reference point rp2 is in the zone pointed to by zp1 |
1: the reference point rp1 is in the zone pointed to by zp0 | |
Pops | e: zone to be shifted (ULONG) |
Pushes | – |
Uses | zp0 with rp1 or zp1 with rp2 depending on flag |
freedom_vector, projection_vector |
Code Range | 0x38 |
Pops | amount: magnitude of the shift (F26Dot6) |
p1, p2,...pn: points to be shifted (ULONG) | |
Pushes | – |
Uses | zp2, loop, freedom_vector |
SHPIX[]
Code Range | 0x3A - 0x3B |
a | 0: Do not set rp0 to p |
1: Set rp0 to p | |
Pops | d: distance (F26Dot6) |
p: point number (ULONG) | |
Pushes | – |
Uses | zp1 with point p and zp0 with rp0, freedom_vector, projection_vector. |
Sets | After it has moved the point this instruction sets rp1 = rp0, |
rp2 = point p, and if a=1, rp0 is set to point p. |
Code Range | 0x2E - 0x2F |
a: | 0: do not round the value |
1: round the value | |
Pops | p: point number (ULONG) |
Pushes | – |
Sets | rp0 = rp1 = point p |
Uses | zp0, round_state, projection_vector, freedom_vector. |
Code Range | 0x3E - 0x3F |
a | 0: don't round the distance and don't look at the control_value_cut_in |
1: round the distance and look at the control_value_cut_in | |
Pops | n: CVT entry number (ULONG) |
p: point number (ULONG) | |
Pushes | – |
Sets | rp0 = rp1 = point p |
Uses | zp0, round_state, control_value_cut_in, freedom_vector, projection_vector |
Code Range | 0xC0 - 0xDF |
a | 0: do not set rp0 to point p after move |
1: do set rp0 to point p after move | |
b | 0: do not keep distance greater than or equal to minimum_distance |
1: keep distance greater than or equal to minimum_distance | |
c | 0: do not round distance |
1: round the distance | |
de | distance type for engine characteristic compensation |
Pops | p: point number (ULONG) |
Pushes | – |
Sets | after point p is moved, rp1 is set equal to rp0, rp2 is set equal to point p; if the a flag is set to TRUE, rp0 is set equal to point p |
Uses | zp0 with rp0 and zp1 with point p, round_state, single_width_value, single_width_cut_in, freedom_vector, projection_vector. |
rp0 | 7 |
rp1 | ? |
rp2 | ? |
rp0 | 7 |
rp1 | 7 |
rp2 | 8 |
rp0 | 8 |
rp1 | 7 |
rp2 | 8 |
Example 2:
Point p is moved so that its distance from rp1 is the same as it was in the original outline.
Code Range | 0xE0 - 0xFF |
a | 0: Do not set rp0 to p |
1: Set rp0 to p | |
b | 0: Do not keep distance greater than or equal to minimum_distance |
1: Keep distance greater than or equal to minimum_distance | |
c | 0: Do not round the distance and do not look at the control_value_cut_in |
1: Round the distance and look at the control_value_cut_in value | |
de: | distance type for engine characteristic compensation |
Pops | n: CVT entry number (ULONG) |
p: point number (ULONG) | |
Pushes | – |
Uses | zp0 with rp0 and zp1 with point p. |
round_state, control_value_cut_in, single_width_value, | |
single_width_cut_in, freedom_vector, projection_vector | |
Sets | After it has moved the point this instruction sets rp1 = rp0, |
rp2 = point p, and if a = 1, rp0 is set to point p. |
case 4: The cut_in test fails and the round_state is RTG. The current position of the point is rounded to the grid.
Code Range | 0x3C |
Pops | p: point number (ULONG) |
Pushes | – |
Uses | zp1 with point p, zp0 with rp0, loop, freedom_vector, projection_vector. |
Code Range | 0x0F |
Pops | b1: end point of line 2 (ULONG) |
b0: start point of line 2 (ULONG) | |
a1: end point of line 1 (ULONG) | |
a0: start point of line 1 (ULONG) | |
p: point to move (ULONG) | |
Pushes | – |
Uses | zp2 with point p, zp1 with line A, zp0 with line B |
Note:
If lines are parallel to each other, the point is put into the middle of the two lines.
Example: ISECT[ ] 21 9 5 4 7Code Range | 0x27 |
Pops | p1: point number (ULONG) |
p2: point number (ULONG) | |
Pushes | – |
Uses | zp1 with point p1, zp0 with point p2, freedom_vector, projection_vector. |
Code Range | 0x39 |
Pops | p: point number (ULONG) |
Pushes | – |
Uses | zp0 with rp1, zp1 with rp2, zp2 with point p, loop, freedom_vector, projection_vector |
Code Range | 0x29 |
Pops | p: point number (ULONG) |
Pushes | – |
Uses | zp0 with point p, freedom_vector |
Code Range | 0x30 - 0x31 |
a | 0: interpolate in the y-direction |
1: interpolate in the x-direction | |
Pops | – |
Pushes | – |
Uses | zp2, freedom_vector, projection_vector |