When there are two (or more) points at the end and there is an arrow
at that end, the arrow is always pointing right. This may be a
non-issue for polylines (just remove the redundant points).
However, for a zig-zag line sometimes this is a need.
So I put this function in lib/arrows.c:
Point *
next_point(Point *points, int rem)
{
Point *endpoint;
int dir;
endpoint = points; /* the real endpoint */
dir = rem > 0 ? 1 : -1; /* direction (+ve / -ve) */
while (rem != 0) { /* keep in legal range */
/* compare next point to the end point, and if they are different, */
/* return the differing point */
points += dir;
if (endpoint->x != points->x || endpoint->y != points->y)
return points;
/* one less point to use */
rem -= dir;
}
/* no different points were found */
return points;
}
This function moves forwards or backwards from "points" (according
to "dir") to a point which is not coincident with it. It can move to a
maximum offset "rem" from the original pointer.
I also put the prototype in lib/arrows.h and modified the following lines
in objects/standard/zigzagline.c (diff for 0.88.1).
219c219
< &points[0], &points[1],
---
> &points[0], next_point(&points[0], n-1),
226c226
< &points[n-1], &points[n-2],
---
> &points[n-1], next_point(&points[n-1], 1-n),
I did something similar to objects/standard/polyline.c.
Sorry if I am posting this to the wrong list, I don't know how these
lists work very well.
Thanks
Trevor Spiteri