The Dimensions system extension discussed in Chapter 14 adds markers as 
arrowheads. Marker element 
is an SVG concept and it has a stroke width which 
causes the arrowhead to extend beyond leading line. When we zoom in to 
the arrowheads, they look like this. 
 
 
If we manually set the marker stroke width to zero, we would have another problem. The tip of the arrowhead is on the top of dimension line, and the arrowhead doesn’t look good (shown below).
 
 
What is the right way to draw an arrowhead? We should offset the start point 
of the dimension line by a distance d, so the arrowhead itself will cover the 
dimension line. Marker 
elements are often difficult to manipulate in Inkscape, so we will draw 
a filled path as arrowhead.  
 
 
This sounds like something that an Inkscape extension can do. Let’s create the arrowhead extension.
A simple arrowhead can be determined by two variables—angle (A) and 
length (L). The angle is between two side lines (red) and the length is from 
the tip to the back of arrowhead (blue).  The extension will support 
two shapes sharp and normal as shown below. 
Sometimes we need an arrowhead at one end of a 
path and other times we need it at both ends. The extension will support 
adding arrowhead at the begin, at the end, or at both ends. When we draw a 
straight line in Inkscape with the Bezier tool, the d attribute could 
have values like the values shown below.  The begin point is the coordinate after the M 
(Move), and end point is the second coordinate or a calculated coordinate 
based on values after H (Horizontal) or V (Vertical). Note the begin 
point could be on the right or top of end point.  
M 104.51948,88.538059 143.37506,72.466987
M 173.74472,28.097683 H 204.0094
M 183.58612,45.030754 V 74.30451
The dialog box below shows the extension user interface. When we use the 
extension, we need to draw a line on the canvas, have the line selected, 
and click the Custom -> Draw Arrowhead menu, choose the values on the 
dialog and click apply.  The extension Python code will add an arrowhead 
to the drawing and modify the selected path. The draw_arrowhead.inx file 
contains the extension GUI code and draw_arrowhead.py is the extension 
Python file. 
 
 
What are the optimum arrowhead angles? The experiment drawing below shows all 
arrowheads with angles between 15 and 50 degrees with a 2.5 degree increment. 
Arrowheads with angle 25 or 30 look
nice and most arrowheads on my drawings have either 25 or 30 degree angles. The 
Python file arrowhead_angle.py is used to generate this drawing.  
We can modify the dimensions extension and use the arrowheads discussed in this 
chapter.  The drawing below shows the same figure discussed in Chapter 14. When we 
zoom in to the arrowheads, the tip of the arrowhead aligns well with the 
leading lines.  The revised code is in the custom_dimensions.py file. 
 
 
The extension program includes code to handle a two segment path. When we are working on a drawing, we often need to add arrowhead to such path.
The current arrowhead program is still simple and straightforward. It could become complicated. The current program does not handle curves, and adding curve support will become challenging. The code makes changes to the path, and we could save the original path information in the arrowhead element and retrieve it when we need it later.
16. Arrowhead Extension