Thanks Alexandre.
With your explanation, I modified the drawOn: for: fromPoint: toPoint: line: method of ROAbstractRow. I have almost what I want. I removed the line closing the triangle of the head, I reduced the right and left extremity of the head. But I would like that there is no space between the head and the body of the arrow. Can you please indicated me where to look for since I modified the toPointWithOffSet value with any modification on the image? Perhaps is it in another method that the body of the arrow is defined.
I think that when it will be done, it can interest others (We shouldn't be the only one using arrow ;))
Thanks in advance.
drawOn: aCanvas for: anEdge fromPoint: fromPoint toPoint: toPoint line: line
"Draw the arrow on the canvas and return the begining and ending of the arrow"
| vector u unit arrowMiddle arrowLeft arrowRight w c toPointWithOffset r |
"Draw head"
vector := self getDirectionVectorFrom: fromPoint to: toPoint.
r := vector r.
r = 0 ifTrue: [ ^ Array with: fromPoint with: fromPoint ].
u := vector normal.
unit := vector / r.
toPointWithOffset := toPoint - (offset * (vector r - size) * unit).
arrowMiddle := toPointWithOffset - (unit * size).
arrowLeft := arrowMiddle- (u * size * 0.5).
arrowRight := arrowMiddle + (u * size * 0.5).
w := line width roValue: anEdge.
c := line colorFor: anEdge.
aCanvas line: toPointWithOffset to: arrowLeft width: w color: c.
"aCanvas line: arrowLeft to: arrowRight width: w color: c."
aCanvas line: arrowRight to: toPointWithOffset width: w color: c.
^ Array with: toPointWithOffset with: arrowMiddle