The difficult part here is the of arrow heads. In Scilab, the computation of arrow heads size is not clear at all.
Here are some facts applying to segs, champ and polylines with arrow heads objects:
- The arrow size is the same for all arrows composing a segs object.
- The final arrow size is proportional with the arrow_size parameter.
- The size of the arrow always depends on the size of the canvas. The larger is the canvas, the bigger are the arrows.
- If the arrow_size parameter is negative the size of arrows head increases with the mean of the arrow lenght. This means that if there are two segs objects with same negative size, the one with longer arrows will have larger heads.
- For segs objects only and with positive arrow_size parameter, the arrow size decrease while the parent axes data_bounds increase. This means that the same arrow inside a [0,1]x[0,1] axes has a larger head than the same arrow in a [0,10]x[0,10] axes.
The ArrowHeadDrawerGL tries to gather all these data to compute the final arrow size. It's tricky and since some of the above statements don't seems logical and request the use of some magical constants (REDUCTION_RATIO, SEGS_REDUCTION_RATIO and REDUCTION_RATIO_DEPENDING), it might be wise to specify some new bahaviours.