--- /dev/null
+digraph G {
+graph [pad="0.05" rankdir=LR]
+a [label="" shape=point]
+b [label=""]
+a -> b [arrowhead=forward]
+}
--- /dev/null
+digraph G {
+graph [pad="0.05" rankdir=LR]
+a [label="" shape=point]
+b [label=""]
+a -> b [arrowhead=nohead]
+}
set arrows {
box
crow
+ curve
diamond
dot
+ icurve
inv
lbox
lcrow
+ lcurve
ldiamond
+ licurve
linv
lnormal
ltee
ornormal
rbox
rcrow
+ rcurve
rdiamond
+ ricurve
rinv
rnormal
rtee
set arrowexamples {
box
crow
+ curve
diamond
dot
ediamond
empty
- forward
halfopen
+ icurve
inv
invdot
invempty
invodot
lteeoldiamond
- nohead
none
normal
obox
proteinstab.gif rpromoter.gif rarrow.gif larrow.gif lpromoter.gif
AGIF = a_normal.gif a_inv.gif a_dot.gif a_invdot.gif a_odot.gif \
- a_invodot.gif a_curve.gif a_none.gif \
+ a_invodot.gif a_curve.gif a_icurve.gif a_none.gif \
a_tee.gif a_empty.gif a_invempty.gif a_open.gif \
a_diamond.gif a_odiamond.gif a_box.gif a_obox.gif a_crow.gif \
a_halfopen.gif a_ediamond.gif a_lteeoldiamond.gif
aa_normal.gif aa_lnormal.gif aa_rnormal.gif aa_onormal.gif aa_olnormal.gif aa_ornormal.gif\
aa_tee.gif aa_ltee.gif aa_rtee.gif \
aa_vee.gif aa_lvee.gif aa_rvee.gif \
- aa_curve.gif aa_lcurve.gif aa_rcurve.gif
+ aa_curve.gif aa_lcurve.gif aa_rcurve.gif \
+ aa_icurve.gif aa_licurve.gif aa_ricurve.gif
+
GIF = $(SGIF) $(AGIF) $(MGIF) $(A2GIF) $(XGIF)
aname = [ modifiers ] shape
modifiers = [ 'o' ] [ side ]
side = 'l' | 'r'
-shape = T_box | T_crow | T_curve | T_diamond | T_dot | T_inv | T_none | T_normal | T_tee | T_vee
+shape = T_box | T_crow | T_curve | T_icurve | T_diamond | T_dot | T_inv | T_none | T_normal | T_tee | T_vee
<TD>"crow"<TD><IMG SRC="a_crow.gif">
<TD>"curve"<TD><IMG SRC="a_curve.gif">
<TD>"diamond"<TD><IMG SRC="a_diamond.gif">
- <TD>"dot"<TD><IMG SRC="a_dot.gif">
</TR>
<TR>
</TR>
<TR>
+ <TD>"dot"<TD><IMG SRC="a_dot.gif">
+ <TD>"icurve"<TD><IMG SRC="a_icurve.gif">
<TD>"inv"<TD><IMG SRC="a_inv.gif">
<TD>"none"<TD><IMG SRC="a_none.gif">
+ </TR>
+ <TR>
+ </TR>
+ <TR>
<TD>"normal"<TD><IMG SRC="a_normal.gif">
<TD>"tee"<TD><IMG SRC="a_tee.gif">
<TD>"vee"<TD><IMG SRC="a_open.gif">
<TH>curve
<TH>diamond
<TH>dot
+ <TH>icurve
<TH>inv
<TH>none
<TH>normal
</TABLE>
</CENTER>
<P>
-This yields 39 different arrow shapes. The optional second, third, fourth shapes
-can independently be any of the 39, except the last cannot be <TT>none</TT> as
+This yields 42 different arrow shapes. The optional second, third, fourth shapes
+can independently be any of the 42, except the last cannot be <TT>none</TT> as
this would create a redundant shape.
-Thus, there are 38 · 39<sup>3</sup> + 38 · 39<sup>2</sup> + 38 · 39 + 39 = 2,313,441 different combinations.
+Thus, there are 41 · 42<sup>3</sup> + 41 · 42<sup>2</sup> + 41 · 42 + 42 = 3,111,696 different combinations.
<P>
-The following display contains the 39 combinations possible with a single
+The following display contains the 42 combinations possible with a single
arrow shape. The node attached to the arrow is not drawn but would appear
on the right side of the edge.
<P>
lcurve -> lcurvelcurve [arrowhead=lcurvelcurve label=lcurvelcurve]
_curve -> rcurve [arrowhead=rcurve label=rcurve]
rcurve -> rcurvercurve [arrowhead=rcurvercurve label=rcurvercurve]
+ _icurve -> icurve [arrowhead=icurve label=icurve]
+ icurve -> icurveicurve [arrowhead=icurveicurve label=icurveicurve]
+ _icurve -> licurve [arrowhead=licurve label=licurve]
+ licurve -> licurvelicurve [arrowhead=licurvelicurve label=licurvelicurve]
+ _icurve -> ricurve [arrowhead=ricurve label=ricurve]
+ ricurve -> ricurvericurve [arrowhead=ricurvericurve label=ricurvericurve]
}
/* Note that ARR_MOD_OPEN has expected meaning for ARR_TYPE_NORM shape */
{"mpty", ARR_TYPE_NORM},
{"curve", ARR_TYPE_CURVE},
+ {"icurve", (ARR_TYPE_CURVE | ARR_MOD_INV)},
{(char *) 0, ARR_TYPE_NONE}
};
AF[3].x = p.x - v.x + w.x;
AF[3].y = p.y - v.y + w.y;
- AF[1].x = p.x + 0.95 * v.x + w.x - w.x * 4.0 / 3.0;
- AF[1].y = AF[0].y - w.y * 4.0 / 3.0;
+ if (flag & ARR_MOD_INV) { /* ----(-| */
+ AF[1].x = p.x + 0.95 * v.x + w.x + w.x * 4.0 / 3.0;
+ AF[1].y = AF[0].y + w.y * 4.0 / 3.0;
- AF[2].x = p.x - 0.95 * v.x + w.x - w.x * 4.0 / 3.0;
- AF[2].y = AF[3].y - w.y * 4.0 / 3.0;
+ AF[2].x = p.x - 0.95 * v.x + w.x + w.x * 4.0 / 3.0;
+ AF[2].y = AF[3].y + w.y * 4.0 / 3.0;
+ }
+ else { /* ----)-| */
+ AF[1].x = p.x + 0.95 * v.x + w.x - w.x * 4.0 / 3.0;
+ AF[1].y = AF[0].y - w.y * 4.0 / 3.0;
+
+ AF[2].x = p.x - 0.95 * v.x + w.x - w.x * 4.0 / 3.0;
+ AF[2].y = AF[3].y - w.y * 4.0 / 3.0;
+ }
gvrender_polyline(job, a, 2);
if (flag & ARR_MOD_LEFT)