From: John Ellson Date: Wed, 19 Sep 2012 16:20:20 +0000 (-0400) Subject: more SBOLv shapes from Jenny Cheng X-Git-Tag: LAST_LIBGRAPH~32^2~305 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=5f5a71ddeeb81d3776e136a5a613e361586493a5;p=graphviz more SBOLv shapes from Jenny Cheng --- diff --git a/doc/info/Mcircle.gif b/doc/info/Mcircle.gif index 564f82700..d4902e786 100644 Binary files a/doc/info/Mcircle.gif and b/doc/info/Mcircle.gif differ diff --git a/doc/info/Mdiamond.gif b/doc/info/Mdiamond.gif index fa744de4a..6b6fe372b 100644 Binary files a/doc/info/Mdiamond.gif and b/doc/info/Mdiamond.gif differ diff --git a/doc/info/Msquare.gif b/doc/info/Msquare.gif index a0eafe2b6..1d783c9e1 100644 Binary files a/doc/info/Msquare.gif and b/doc/info/Msquare.gif differ diff --git a/doc/info/a_box.gif b/doc/info/a_box.gif index 26ba97a69..8c9cd6b5d 100644 Binary files a/doc/info/a_box.gif and b/doc/info/a_box.gif differ diff --git a/doc/info/a_crow.gif b/doc/info/a_crow.gif index f204037eb..2ffe79f47 100644 Binary files a/doc/info/a_crow.gif and b/doc/info/a_crow.gif differ diff --git a/doc/info/a_curve.gif b/doc/info/a_curve.gif new file mode 100644 index 000000000..32119e0f9 Binary files /dev/null and b/doc/info/a_curve.gif differ diff --git a/doc/info/a_diamond.gif b/doc/info/a_diamond.gif index 188788f1d..bc9085951 100644 Binary files a/doc/info/a_diamond.gif and b/doc/info/a_diamond.gif differ diff --git a/doc/info/a_dot.gif b/doc/info/a_dot.gif index f48be06aa..05b2c0b0d 100644 Binary files a/doc/info/a_dot.gif and b/doc/info/a_dot.gif differ diff --git a/doc/info/a_ediamond.gif b/doc/info/a_ediamond.gif index b68f27e06..8b8b3ba46 100644 Binary files a/doc/info/a_ediamond.gif and b/doc/info/a_ediamond.gif differ diff --git a/doc/info/a_empty.gif b/doc/info/a_empty.gif index c1ffa258d..5c62f178c 100644 Binary files a/doc/info/a_empty.gif and b/doc/info/a_empty.gif differ diff --git a/doc/info/a_halfopen.gif b/doc/info/a_halfopen.gif index 73694f0f7..61f867327 100644 Binary files a/doc/info/a_halfopen.gif and b/doc/info/a_halfopen.gif differ diff --git a/doc/info/a_inv.gif b/doc/info/a_inv.gif index 64250df26..902b0d8a8 100644 Binary files a/doc/info/a_inv.gif and b/doc/info/a_inv.gif differ diff --git a/doc/info/a_invdot.gif b/doc/info/a_invdot.gif index af0088764..36ff587a9 100644 Binary files a/doc/info/a_invdot.gif and b/doc/info/a_invdot.gif differ diff --git a/doc/info/a_invempty.gif b/doc/info/a_invempty.gif index b72e2401a..faaaf443f 100644 Binary files a/doc/info/a_invempty.gif and b/doc/info/a_invempty.gif differ diff --git a/doc/info/a_invodot.gif b/doc/info/a_invodot.gif index 4ca196d90..d4ee6cbcc 100644 Binary files a/doc/info/a_invodot.gif and b/doc/info/a_invodot.gif differ diff --git a/doc/info/a_lteeoldiamond.gif b/doc/info/a_lteeoldiamond.gif index 890ada00c..5945b76cb 100644 Binary files a/doc/info/a_lteeoldiamond.gif and b/doc/info/a_lteeoldiamond.gif differ diff --git a/doc/info/a_none.gif b/doc/info/a_none.gif index 63544d04d..4e4bd273e 100644 Binary files a/doc/info/a_none.gif and b/doc/info/a_none.gif differ diff --git a/doc/info/a_normal.gif b/doc/info/a_normal.gif index db0625470..04c96f1fc 100644 Binary files a/doc/info/a_normal.gif and b/doc/info/a_normal.gif differ diff --git a/doc/info/a_obox.gif b/doc/info/a_obox.gif index eb56fd1f8..49be448b3 100644 Binary files a/doc/info/a_obox.gif and b/doc/info/a_obox.gif differ diff --git a/doc/info/a_odiamond.gif b/doc/info/a_odiamond.gif index b68f27e06..8b8b3ba46 100644 Binary files a/doc/info/a_odiamond.gif and b/doc/info/a_odiamond.gif differ diff --git a/doc/info/a_odot.gif b/doc/info/a_odot.gif index 3e26ad0d0..4c5f1b5b9 100644 Binary files a/doc/info/a_odot.gif and b/doc/info/a_odot.gif differ diff --git a/doc/info/a_open.gif b/doc/info/a_open.gif index 5134c89d4..54ccddc5c 100644 Binary files a/doc/info/a_open.gif and b/doc/info/a_open.gif differ diff --git a/doc/info/a_tee.gif b/doc/info/a_tee.gif index bb5a5e9e6..65ce291a9 100644 Binary files a/doc/info/a_tee.gif and b/doc/info/a_tee.gif differ diff --git a/doc/info/aa_box.gif b/doc/info/aa_box.gif index 1cb4b8765..1f5a5a61a 100644 Binary files a/doc/info/aa_box.gif and b/doc/info/aa_box.gif differ diff --git a/doc/info/aa_crow.gif b/doc/info/aa_crow.gif index ed4db5503..87d70a061 100644 Binary files a/doc/info/aa_crow.gif and b/doc/info/aa_crow.gif differ diff --git a/doc/info/aa_curve.gif b/doc/info/aa_curve.gif new file mode 100644 index 000000000..184177331 Binary files /dev/null and b/doc/info/aa_curve.gif differ diff --git a/doc/info/aa_diamond.gif b/doc/info/aa_diamond.gif index 770596541..3cdc51c28 100644 Binary files a/doc/info/aa_diamond.gif and b/doc/info/aa_diamond.gif differ diff --git a/doc/info/aa_dot.gif b/doc/info/aa_dot.gif index 8ac4ecefd..4f81971ec 100644 Binary files a/doc/info/aa_dot.gif and b/doc/info/aa_dot.gif differ diff --git a/doc/info/aa_inv.gif b/doc/info/aa_inv.gif index bd428b55a..5d8dfd037 100644 Binary files a/doc/info/aa_inv.gif and b/doc/info/aa_inv.gif differ diff --git a/doc/info/aa_lbox.gif b/doc/info/aa_lbox.gif index 84872178c..32f448f5a 100644 Binary files a/doc/info/aa_lbox.gif and b/doc/info/aa_lbox.gif differ diff --git a/doc/info/aa_lcrow.gif b/doc/info/aa_lcrow.gif index 596331b1a..f983987a0 100644 Binary files a/doc/info/aa_lcrow.gif and b/doc/info/aa_lcrow.gif differ diff --git a/doc/info/aa_lcurve.gif b/doc/info/aa_lcurve.gif new file mode 100644 index 000000000..0f8bf6c04 Binary files /dev/null and b/doc/info/aa_lcurve.gif differ diff --git a/doc/info/aa_ldiamond.gif b/doc/info/aa_ldiamond.gif index 3d50e150f..7fb9e3b16 100644 Binary files a/doc/info/aa_ldiamond.gif and b/doc/info/aa_ldiamond.gif differ diff --git a/doc/info/aa_linv.gif b/doc/info/aa_linv.gif index abaf1d9b2..8582813b4 100644 Binary files a/doc/info/aa_linv.gif and b/doc/info/aa_linv.gif differ diff --git a/doc/info/aa_lnormal.gif b/doc/info/aa_lnormal.gif index bd55bb66b..5035f2209 100644 Binary files a/doc/info/aa_lnormal.gif and b/doc/info/aa_lnormal.gif differ diff --git a/doc/info/aa_ltee.gif b/doc/info/aa_ltee.gif index 7b71b2eae..1e3a9da00 100644 Binary files a/doc/info/aa_ltee.gif and b/doc/info/aa_ltee.gif differ diff --git a/doc/info/aa_lvee.gif b/doc/info/aa_lvee.gif index 07af760b8..f06342e43 100644 Binary files a/doc/info/aa_lvee.gif and b/doc/info/aa_lvee.gif differ diff --git a/doc/info/aa_none.gif b/doc/info/aa_none.gif index 9910e0e61..e14829573 100644 Binary files a/doc/info/aa_none.gif and b/doc/info/aa_none.gif differ diff --git a/doc/info/aa_normal.gif b/doc/info/aa_normal.gif index eb67c7287..0b1fca9ac 100644 Binary files a/doc/info/aa_normal.gif and b/doc/info/aa_normal.gif differ diff --git a/doc/info/aa_obox.gif b/doc/info/aa_obox.gif index 49b580a23..544445309 100644 Binary files a/doc/info/aa_obox.gif and b/doc/info/aa_obox.gif differ diff --git a/doc/info/aa_odiamond.gif b/doc/info/aa_odiamond.gif index ed4305a41..4038b0d75 100644 Binary files a/doc/info/aa_odiamond.gif and b/doc/info/aa_odiamond.gif differ diff --git a/doc/info/aa_odot.gif b/doc/info/aa_odot.gif index f235019cb..fd84308d4 100644 Binary files a/doc/info/aa_odot.gif and b/doc/info/aa_odot.gif differ diff --git a/doc/info/aa_oinv.gif b/doc/info/aa_oinv.gif index 3332172fc..2ab1bc9fe 100644 Binary files a/doc/info/aa_oinv.gif and b/doc/info/aa_oinv.gif differ diff --git a/doc/info/aa_olbox.gif b/doc/info/aa_olbox.gif index fd57ffbe6..f51c09f72 100644 Binary files a/doc/info/aa_olbox.gif and b/doc/info/aa_olbox.gif differ diff --git a/doc/info/aa_oldiamond.gif b/doc/info/aa_oldiamond.gif index d26d1cc76..f71c163ed 100644 Binary files a/doc/info/aa_oldiamond.gif and b/doc/info/aa_oldiamond.gif differ diff --git a/doc/info/aa_olinv.gif b/doc/info/aa_olinv.gif index a3928ad11..b0e109af2 100644 Binary files a/doc/info/aa_olinv.gif and b/doc/info/aa_olinv.gif differ diff --git a/doc/info/aa_olnormal.gif b/doc/info/aa_olnormal.gif index 08a524555..7db714602 100644 Binary files a/doc/info/aa_olnormal.gif and b/doc/info/aa_olnormal.gif differ diff --git a/doc/info/aa_onormal.gif b/doc/info/aa_onormal.gif index 7d9f23f91..4f467be75 100644 Binary files a/doc/info/aa_onormal.gif and b/doc/info/aa_onormal.gif differ diff --git a/doc/info/aa_orbox.gif b/doc/info/aa_orbox.gif index c5d3ed129..b179b91ab 100644 Binary files a/doc/info/aa_orbox.gif and b/doc/info/aa_orbox.gif differ diff --git a/doc/info/aa_ordiamond.gif b/doc/info/aa_ordiamond.gif index 4c9175267..31ba9c10b 100644 Binary files a/doc/info/aa_ordiamond.gif and b/doc/info/aa_ordiamond.gif differ diff --git a/doc/info/aa_orinv.gif b/doc/info/aa_orinv.gif index 88bb4a886..194eb7bdd 100644 Binary files a/doc/info/aa_orinv.gif and b/doc/info/aa_orinv.gif differ diff --git a/doc/info/aa_ornormal.gif b/doc/info/aa_ornormal.gif index e657cd39d..15d7d4668 100644 Binary files a/doc/info/aa_ornormal.gif and b/doc/info/aa_ornormal.gif differ diff --git a/doc/info/aa_rbox.gif b/doc/info/aa_rbox.gif index 0dcb68553..203562e45 100644 Binary files a/doc/info/aa_rbox.gif and b/doc/info/aa_rbox.gif differ diff --git a/doc/info/aa_rcrow.gif b/doc/info/aa_rcrow.gif index 760205aea..4190fa806 100644 Binary files a/doc/info/aa_rcrow.gif and b/doc/info/aa_rcrow.gif differ diff --git a/doc/info/aa_rcurve.gif b/doc/info/aa_rcurve.gif new file mode 100644 index 000000000..a9d463cbc Binary files /dev/null and b/doc/info/aa_rcurve.gif differ diff --git a/doc/info/aa_rdiamond.gif b/doc/info/aa_rdiamond.gif index 77d09a8ce..5d2d9806f 100644 Binary files a/doc/info/aa_rdiamond.gif and b/doc/info/aa_rdiamond.gif differ diff --git a/doc/info/aa_rinv.gif b/doc/info/aa_rinv.gif index 52106cece..983fb8efe 100644 Binary files a/doc/info/aa_rinv.gif and b/doc/info/aa_rinv.gif differ diff --git a/doc/info/aa_rnormal.gif b/doc/info/aa_rnormal.gif index c7a7d13ab..6424cd1b3 100644 Binary files a/doc/info/aa_rnormal.gif and b/doc/info/aa_rnormal.gif differ diff --git a/doc/info/aa_rtee.gif b/doc/info/aa_rtee.gif index 95d6ba5f1..3c9dbc6e1 100644 Binary files a/doc/info/aa_rtee.gif and b/doc/info/aa_rtee.gif differ diff --git a/doc/info/aa_rvee.gif b/doc/info/aa_rvee.gif index b6cbaabb9..924d6388b 100644 Binary files a/doc/info/aa_rvee.gif and b/doc/info/aa_rvee.gif differ diff --git a/doc/info/aa_tee.gif b/doc/info/aa_tee.gif index b374634a4..ce1ea381c 100644 Binary files a/doc/info/aa_tee.gif and b/doc/info/aa_tee.gif differ diff --git a/doc/info/aa_vee.gif b/doc/info/aa_vee.gif index 00a7a6646..fb8cd1d84 100644 Binary files a/doc/info/aa_vee.gif and b/doc/info/aa_vee.gif differ diff --git a/doc/info/arrows.html b/doc/info/arrows.html index 5d99482cd..c016325b7 100644 --- a/doc/info/arrows.html +++ b/doc/info/arrows.html @@ -168,8 +168,7 @@ The following display contains the 36 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.

-

- +
\n
- + \n - + \n - + \n - + \n @@ -227,8 +222,7 @@ on the right side of the edge. - + \n - + \n @@ -249,8 +242,7 @@ on the right side of the edge. - + \n - + \n - + \n - + \n -
@@ -177,8 +176,7 @@ on the right side of the edge. -
box lbox rbox @@ -190,8 +188,7 @@ on the right side of the edge. -
crow lcrow rcrow @@ -203,8 +200,7 @@ on the right side of the edge. -
diamond ldiamond rdiamond @@ -215,8 +211,7 @@ on the right side of the edge.
-
dot odot
-
inv linv rinv @@ -238,8 +232,7 @@ on the right side of the edge.
-
none
-
normal lnormal rnormal @@ -262,8 +254,7 @@ on the right side of the edge. -
tee ltee rtee @@ -272,8 +263,7 @@ on the right side of the edge. -
vee lvee rvee @@ -282,13 +272,10 @@ on the right side of the edge. -
curve lcurve rcurve
-
- - +\n +\n diff --git a/doc/info/assembly.gif b/doc/info/assembly.gif new file mode 100644 index 000000000..b89485be6 Binary files /dev/null and b/doc/info/assembly.gif differ diff --git a/doc/info/box.gif b/doc/info/box.gif index e2902e434..0d681bf56 100644 Binary files a/doc/info/box.gif and b/doc/info/box.gif differ diff --git a/doc/info/box3d.gif b/doc/info/box3d.gif index 42d0ba818..c89130b94 100644 Binary files a/doc/info/box3d.gif and b/doc/info/box3d.gif differ diff --git a/doc/info/cds.gif b/doc/info/cds.gif new file mode 100644 index 000000000..a3b147669 Binary files /dev/null and b/doc/info/cds.gif differ diff --git a/doc/info/circle.gif b/doc/info/circle.gif index 177e4af15..e4d5c245f 100644 Binary files a/doc/info/circle.gif and b/doc/info/circle.gif differ diff --git a/doc/info/colorlist.gif b/doc/info/colorlist.gif index 14e61daf7..6d39810b6 100644 Binary files a/doc/info/colorlist.gif and b/doc/info/colorlist.gif differ diff --git a/doc/info/component.gif b/doc/info/component.gif index 686710ec5..2d548df74 100644 Binary files a/doc/info/component.gif and b/doc/info/component.gif differ diff --git a/doc/info/constraint.gif b/doc/info/constraint.gif index cc5c9cfcc..8ba887bfd 100644 Binary files a/doc/info/constraint.gif and b/doc/info/constraint.gif differ diff --git a/doc/info/diamond.gif b/doc/info/diamond.gif index d5d5852be..66e0b4e18 100644 Binary files a/doc/info/diamond.gif and b/doc/info/diamond.gif differ diff --git a/doc/info/doublecircle.gif b/doc/info/doublecircle.gif index 4c4d14283..0313f6dbe 100644 Binary files a/doc/info/doublecircle.gif and b/doc/info/doublecircle.gif differ diff --git a/doc/info/doubleoctagon.gif b/doc/info/doubleoctagon.gif index 9681cde06..1b599702c 100644 Binary files a/doc/info/doubleoctagon.gif and b/doc/info/doubleoctagon.gif differ diff --git a/doc/info/ellipse.gif b/doc/info/ellipse.gif index 3e1c4e93a..873a79aa0 100644 Binary files a/doc/info/ellipse.gif and b/doc/info/ellipse.gif differ diff --git a/doc/info/fill.gif b/doc/info/fill.gif index 145c164e2..2679fc2d3 100644 Binary files a/doc/info/fill.gif and b/doc/info/fill.gif differ diff --git a/doc/info/fivepoverhang.gif b/doc/info/fivepoverhang.gif new file mode 100644 index 000000000..ec3b3b925 Binary files /dev/null and b/doc/info/fivepoverhang.gif differ diff --git a/doc/info/folder.gif b/doc/info/folder.gif index d5a178812..d2fb0ee32 100644 Binary files a/doc/info/folder.gif and b/doc/info/folder.gif differ diff --git a/doc/info/g_lin0.png b/doc/info/g_lin0.png index 5a3a54d7a..de29002cc 100644 Binary files a/doc/info/g_lin0.png and b/doc/info/g_lin0.png differ diff --git a/doc/info/g_lin180.png b/doc/info/g_lin180.png index 94f4957ea..9c22a0b28 100644 Binary files a/doc/info/g_lin180.png and b/doc/info/g_lin180.png differ diff --git a/doc/info/g_lin270.png b/doc/info/g_lin270.png index d36e11753..a3ba73522 100644 Binary files a/doc/info/g_lin270.png and b/doc/info/g_lin270.png differ diff --git a/doc/info/g_lin360.png b/doc/info/g_lin360.png index 5a3a54d7a..de29002cc 100644 Binary files a/doc/info/g_lin360.png and b/doc/info/g_lin360.png differ diff --git a/doc/info/g_lin45.png b/doc/info/g_lin45.png index 9a04450c6..cb611b9f7 100644 Binary files a/doc/info/g_lin45.png and b/doc/info/g_lin45.png differ diff --git a/doc/info/g_lin90.png b/doc/info/g_lin90.png index 9004b229a..e650e0937 100644 Binary files a/doc/info/g_lin90.png and b/doc/info/g_lin90.png differ diff --git a/doc/info/g_rad0.png b/doc/info/g_rad0.png index 5a3a54d7a..f369bb3f0 100644 Binary files a/doc/info/g_rad0.png and b/doc/info/g_rad0.png differ diff --git a/doc/info/g_rad180.png b/doc/info/g_rad180.png index 94f4957ea..435c1d1fc 100644 Binary files a/doc/info/g_rad180.png and b/doc/info/g_rad180.png differ diff --git a/doc/info/g_rad270.png b/doc/info/g_rad270.png index d36e11753..ef2f929cb 100644 Binary files a/doc/info/g_rad270.png and b/doc/info/g_rad270.png differ diff --git a/doc/info/g_rad360.png b/doc/info/g_rad360.png index 5a3a54d7a..afe750eff 100644 Binary files a/doc/info/g_rad360.png and b/doc/info/g_rad360.png differ diff --git a/doc/info/g_rad45.png b/doc/info/g_rad45.png index 9a04450c6..6dfdba3b4 100644 Binary files a/doc/info/g_rad45.png and b/doc/info/g_rad45.png differ diff --git a/doc/info/g_rad90.png b/doc/info/g_rad90.png index 9004b229a..f59f0f65c 100644 Binary files a/doc/info/g_rad90.png and b/doc/info/g_rad90.png differ diff --git a/doc/info/hexagon.gif b/doc/info/hexagon.gif index b9d66f2b9..002f58b59 100644 Binary files a/doc/info/hexagon.gif and b/doc/info/hexagon.gif differ diff --git a/doc/info/house.gif b/doc/info/house.gif index 99c8155ac..597853503 100644 Binary files a/doc/info/house.gif and b/doc/info/house.gif differ diff --git a/doc/info/html1.gif b/doc/info/html1.gif index 1fc35a8f6..bb758103e 100644 Binary files a/doc/info/html1.gif and b/doc/info/html1.gif differ diff --git a/doc/info/html2.gif b/doc/info/html2.gif index ae10aa851..349a1f613 100644 Binary files a/doc/info/html2.gif and b/doc/info/html2.gif differ diff --git a/doc/info/html3.gif b/doc/info/html3.gif index 77465fb29..55875f07c 100644 Binary files a/doc/info/html3.gif and b/doc/info/html3.gif differ diff --git a/doc/info/html4.gif b/doc/info/html4.gif index 27b70054a..ac5b26cbb 100644 Binary files a/doc/info/html4.gif and b/doc/info/html4.gif differ diff --git a/doc/info/insulator.gif b/doc/info/insulator.gif new file mode 100644 index 000000000..3dc28d05d Binary files /dev/null and b/doc/info/insulator.gif differ diff --git a/doc/info/invhouse.gif b/doc/info/invhouse.gif index 52cbfe8b9..fae069b11 100644 Binary files a/doc/info/invhouse.gif and b/doc/info/invhouse.gif differ diff --git a/doc/info/invtrapezium.gif b/doc/info/invtrapezium.gif index 588e8e907..f77995b8c 100644 Binary files a/doc/info/invtrapezium.gif and b/doc/info/invtrapezium.gif differ diff --git a/doc/info/invtriangle.gif b/doc/info/invtriangle.gif index 0f6ebdad2..2aad02888 100644 Binary files a/doc/info/invtriangle.gif and b/doc/info/invtriangle.gif differ diff --git a/doc/info/larrow.gif b/doc/info/larrow.gif deleted file mode 100644 index ba51f2853..000000000 Binary files a/doc/info/larrow.gif and /dev/null differ diff --git a/doc/info/lpromoter.gif b/doc/info/lpromoter.gif deleted file mode 100644 index 0113bae15..000000000 Binary files a/doc/info/lpromoter.gif and /dev/null differ diff --git a/doc/info/mrecord.gif b/doc/info/mrecord.gif index 5b8871eaa..7025cf0eb 100644 Binary files a/doc/info/mrecord.gif and b/doc/info/mrecord.gif differ diff --git a/doc/info/none.gif b/doc/info/none.gif index e8f7c80b5..23d203793 100644 Binary files a/doc/info/none.gif and b/doc/info/none.gif differ diff --git a/doc/info/noverhang.gif b/doc/info/noverhang.gif new file mode 100644 index 000000000..66db4f2c2 Binary files /dev/null and b/doc/info/noverhang.gif differ diff --git a/doc/info/oval.gif b/doc/info/oval.gif index 3e1c4e93a..873a79aa0 100644 Binary files a/doc/info/oval.gif and b/doc/info/oval.gif differ diff --git a/doc/info/parallelogram.gif b/doc/info/parallelogram.gif index 4e2cd02b5..9805049fa 100644 Binary files a/doc/info/parallelogram.gif and b/doc/info/parallelogram.gif differ diff --git a/doc/info/pentagon.gif b/doc/info/pentagon.gif index 1f0012535..a0a6e0e78 100644 Binary files a/doc/info/pentagon.gif and b/doc/info/pentagon.gif differ diff --git a/doc/info/plaintext.gif b/doc/info/plaintext.gif index e95fbabf9..21b0da645 100644 Binary files a/doc/info/plaintext.gif and b/doc/info/plaintext.gif differ diff --git a/doc/info/point.gif b/doc/info/point.gif index 86600aed7..0ecd02bef 100644 Binary files a/doc/info/point.gif and b/doc/info/point.gif differ diff --git a/doc/info/primersite.gif b/doc/info/primersite.gif new file mode 100644 index 000000000..898f0f3a3 Binary files /dev/null and b/doc/info/primersite.gif differ diff --git a/doc/info/promoter.gif b/doc/info/promoter.gif new file mode 100644 index 000000000..c237c4761 Binary files /dev/null and b/doc/info/promoter.gif differ diff --git a/doc/info/proteasesite.gif b/doc/info/proteasesite.gif new file mode 100644 index 000000000..219575f5a Binary files /dev/null and b/doc/info/proteasesite.gif differ diff --git a/doc/info/proteinstab.gif b/doc/info/proteinstab.gif new file mode 100644 index 000000000..6d4ada389 Binary files /dev/null and b/doc/info/proteinstab.gif differ diff --git a/doc/info/rarrow.gif b/doc/info/rarrow.gif deleted file mode 100644 index 92f9fafda..000000000 Binary files a/doc/info/rarrow.gif and /dev/null differ diff --git a/doc/info/record.gif b/doc/info/record.gif index a04ae4af0..a6dbbb836 100644 Binary files a/doc/info/record.gif and b/doc/info/record.gif differ diff --git a/doc/info/record2.gif b/doc/info/record2.gif index 58012aaf1..c01b3526c 100644 Binary files a/doc/info/record2.gif and b/doc/info/record2.gif differ diff --git a/doc/info/rect.gif b/doc/info/rect.gif index e2902e434..0d681bf56 100644 Binary files a/doc/info/rect.gif and b/doc/info/rect.gif differ diff --git a/doc/info/rectangle.gif b/doc/info/rectangle.gif index e2902e434..0d681bf56 100644 Binary files a/doc/info/rectangle.gif and b/doc/info/rectangle.gif differ diff --git a/doc/info/restrictionsite.gif b/doc/info/restrictionsite.gif new file mode 100644 index 000000000..a7fcd61fe Binary files /dev/null and b/doc/info/restrictionsite.gif differ diff --git a/doc/info/ribosite.gif b/doc/info/ribosite.gif new file mode 100644 index 000000000..8ba7be71e Binary files /dev/null and b/doc/info/ribosite.gif differ diff --git a/doc/info/rnastab.gif b/doc/info/rnastab.gif new file mode 100644 index 000000000..0e2ebfba2 Binary files /dev/null and b/doc/info/rnastab.gif differ diff --git a/doc/info/round.gif b/doc/info/round.gif index c73d13e49..85451eb85 100644 Binary files a/doc/info/round.gif and b/doc/info/round.gif differ diff --git a/doc/info/rpromoter.gif b/doc/info/rpromoter.gif deleted file mode 100644 index 124090d1b..000000000 Binary files a/doc/info/rpromoter.gif and /dev/null differ diff --git a/doc/info/sdlshapes.jpg b/doc/info/sdlshapes.jpg index 2e38391d2..48051859b 100644 Binary files a/doc/info/sdlshapes.jpg and b/doc/info/sdlshapes.jpg differ diff --git a/doc/info/sdlshapes.png b/doc/info/sdlshapes.png index c62bc229a..f289035a7 100644 Binary files a/doc/info/sdlshapes.png and b/doc/info/sdlshapes.png differ diff --git a/doc/info/shapes.html b/doc/info/shapes.html index 795cf30b2..1ce109be9 100644 --- a/doc/info/shapes.html +++ b/doc/info/shapes.html @@ -132,23 +132,59 @@ The possible polygon-based shapes are displayed below. - + folder box3d component - rpromoter + promoter - - - + + + + - rarrow - larrow - lpromoter + cds + terminator + utr + primersite + + + + + + + + + restrictionsite + fivepoverhang + threepoverhang + noverhang + + + + + + + + + assembly + signature + insulator + ribosite + + + + + + + + rnastab + proteasesite + proteinstab As the figures suggest, the shapes rect and rectangle are synonyms for box, and none is a synonym for plaintext. @@ -172,10 +208,26 @@ only affected by the peripheries, width and height attributes.

-The shapes note, tab, folder, +The shapes: note, tab, folder, box3d and component were provided by Pander. -The synthetic biology shapes rpromoter, rarrow, larrow and -lpromoter were contributed by Jenny Cheng. +The synthetic biology shapes: +promoter, +cds, +terminator, +utr, +primersite, +restrictionsite, +fivepoverhang, +threepoverhang, +noverhang, +assembly, +signature, +insulator, +ribosite, +rnastab, +proteasesite and +proteinstab +were contributed by Jenny Cheng.

Record-based Nodes

These are specified by shape values of "record" and "Mrecord". @@ -878,19 +930,15 @@ and SERVER_NAME.
specifies style characteristics of the table or cell. Style characteristics are given as a comma or space separated list of style attributes. At present, the only -legal attributes are "ROUNDED", "RADIAL", "DASHED" and "DOTTED". -

-If "ROUNDED" is specified, the table or cell will have rounded corners. -For tables, this probably works best if the outmost cells have no borders, or their CELLSPACING +legal attributes are "ROUNDED" and "RADIAL" for tables, and "RADIAL" for cells. +If "ROUNDED" is specified, the table will have rounded corners. +This probably works best if the outmost cells have no borders, or their CELLSPACING is sufficiently large. If it is desirable to have borders around the cells, use HR and VR elements, or the COLUMNS and ROWS attributes of TABLE.

The "RADIAL" attribute indicates a radial gradient fill. See the BGCOLOR and GRADIENTANGLE attributes. -

-A "DOTTED" or "DASHED" attribute indicates that a border, if it exists, will be drawn as a dotted -or dashed line, respectively.

TARGET="value" diff --git a/doc/info/signature.gif b/doc/info/signature.gif new file mode 100644 index 000000000..08f2d3c25 Binary files /dev/null and b/doc/info/signature.gif differ diff --git a/doc/info/square.gif b/doc/info/square.gif index 4675ae411..5baebcdfb 100644 Binary files a/doc/info/square.gif and b/doc/info/square.gif differ diff --git a/doc/info/tab.gif b/doc/info/tab.gif index db1a9b702..dec9ed7ec 100644 Binary files a/doc/info/tab.gif and b/doc/info/tab.gif differ diff --git a/doc/info/terminator.gif b/doc/info/terminator.gif new file mode 100644 index 000000000..f6700dc36 Binary files /dev/null and b/doc/info/terminator.gif differ diff --git a/doc/info/threepoverhang.gif b/doc/info/threepoverhang.gif new file mode 100644 index 000000000..2764a24e6 Binary files /dev/null and b/doc/info/threepoverhang.gif differ diff --git a/doc/info/trapezium.gif b/doc/info/trapezium.gif index 0750fcbe7..3b6cad479 100644 Binary files a/doc/info/trapezium.gif and b/doc/info/trapezium.gif differ diff --git a/doc/info/triangle.gif b/doc/info/triangle.gif index fb87dc36d..b9ddc8d58 100644 Binary files a/doc/info/triangle.gif and b/doc/info/triangle.gif differ diff --git a/doc/info/utr.gif b/doc/info/utr.gif new file mode 100644 index 000000000..4d0f60e7d Binary files /dev/null and b/doc/info/utr.gif differ diff --git a/doc/infosrc/Makefile.old b/doc/infosrc/Makefile.old index 00774390b..2f533ca00 100644 --- a/doc/infosrc/Makefile.old +++ b/doc/infosrc/Makefile.old @@ -44,7 +44,11 @@ SGIF = Mcircle.gif Mdiamond.gif Msquare.gif box.gif \ point.gif polygon.gif trapezium.gif triangle.gif \ tripleoctagon.gif pentagon.gif septagon.gif rect.gif \ rectangle.gif square.gif tab.gif folder.gif box3d.gif component.gif \ - rpromoter.gif rarrow.gif, larrow.gif lpromoter.gif + promoter.gif cds.gif terminator.gif utr.gif \ + primersite.gif restrictionsite.gif fivepoverhang.gif \ + threepoverhang.gif noverhang.gif assembly.gif signature.gif \ + insulator.gif ribosite.gif rnastab.gif proteasesite.gif \ + proteinstab.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 \ diff --git a/doc/infosrc/mklang.y b/doc/infosrc/mklang.y index f99576ded..b9bb33807 100644 --- a/doc/infosrc/mklang.y +++ b/doc/infosrc/mklang.y @@ -185,6 +185,7 @@ skipSpace (char* p) return p; } +#if 0 static char* strndup (char* p, int sz) { @@ -193,6 +194,7 @@ strndup (char* p, int sz) s[sz] = '\0'; return s; } +#endif static char* readLiteral (char* p) diff --git a/doc/infosrc/shapelist b/doc/infosrc/shapelist index d28360b6d..dbfddfca8 100644 --- a/doc/infosrc/shapelist +++ b/doc/infosrc/shapelist @@ -33,7 +33,19 @@ tab folder box3d component -rpromoter -rarrow -larrow -lpromoter +promoter +cds +terminator +utr +primersite +restrictionsite +fivepoverhang +threepoverhang +noverhang +assembly +signature +insulator +ribosite +rnastab +proteasesite +proteinstab diff --git a/doc/infosrc/shapes.2 b/doc/infosrc/shapes.2 index 05c07662e..67d00b0f4 100644 --- a/doc/infosrc/shapes.2 +++ b/doc/infosrc/shapes.2 @@ -20,10 +20,26 @@ only affected by the peripheries, width and height attributes.

-The shapes note, tab, folder, +The shapes: note, tab, folder, box3d and component were provided by Pander. -The synthetic biology shapes rpromoter, rarrow, larrow and -lpromoter were contributed by Jenny Cheng. +The synthetic biology shapes: +promoter, +cds, +terminator, +utr, +primersite, +restrictionsite, +fivepoverhang, +threepoverhang, +noverhang, +assembly, +signature, +insulator, +ribosite, +rnastab, +proteasesite and +proteinstab +were contributed by Jenny Cheng.

Record-based Nodes

These are specified by shape values of "record" and "Mrecord". diff --git a/lib/common/const.h b/lib/common/const.h index 8abd1feaf..e1f8e207c 100644 --- a/lib/common/const.h +++ b/lib/common/const.h @@ -217,11 +217,22 @@ #define DOTTED (1 << 12) #define DASHED (1 << 13) #define WEDGED (1 << 14) -#define RPROMOTER (1 << 15) -#define RARROW (1 << 16) -#define LARROW (1 << 17) -#define LPROMOTER (1 << 18) - +#define PROMOTER (1 << 15) +#define CDS (1 << 16) +#define TERMINATOR (1 << 17) +#define UTR (1 << 18) +#define PRIMERSITE (1 << 19) +#define RESTRICTIONSITE (1 << 20) +#define FIVEPOVERHANG (1 << 21) +#define THREEPOVERHANG (1 << 22) +#define NOVERHANG (1 << 23) +#define ASSEMBLY (1 << 24) +#define SIGNATURE (1 << 25) +#define INSULATOR (1 << 26) +#define RIBOSITE (1 << 27) +#define RNASTAB (1 << 28) +#define PROTEASESITE (1 << 29) +#define PROTEINSTAB (1 << 30) /* fill types */ #define FILL 1 diff --git a/lib/common/shapes.c b/lib/common/shapes.c index 6b01f767c..3aad6715f 100644 --- a/lib/common/shapes.c +++ b/lib/common/shapes.c @@ -97,17 +97,31 @@ static polygon_t p_Msquare = { TRUE, 1, 4, 0., 0., 0., DIAGONALS }; static polygon_t p_Mcircle = { TRUE, 1, 1, 0., 0., 0., DIAGONALS | AUXLABELS }; -/* biological circuit shapes */ -static polygon_t p_rpromoter = { FALSE, 1, 4, 0., 0., 0., RPROMOTER }; -static polygon_t p_rarrow = { FALSE, 1, 4, 0., 0., 0., RARROW }; -static polygon_t p_larrow = { FALSE, 1, 4, 0., 0., 0., LARROW}; -static polygon_t p_lpromoter = { FALSE, 1, 4, 0., 0., 0., LPROMOTER}; +/* biological circuit shapes, as specified by SBOLv*/ +/** gene expression symbols **/ +static polygon_t p_promoter = { FALSE, 1, 4, 0., 0., 0., PROMOTER }; +static polygon_t p_cds = { FALSE, 1, 4, 0., 0., 0., CDS }; +static polygon_t p_terminator = { FALSE, 1, 4, 0., 0., 0., TERMINATOR}; +static polygon_t p_utr = { FALSE, 1, 4, 0., 0., 0., UTR}; +static polygon_t p_insulator = { FALSE, 1, 4, 0., 0., 0., INSULATOR}; +static polygon_t p_ribosite = { FALSE, 1, 4, 0., 0., 0., RIBOSITE}; +static polygon_t p_rnastab = { FALSE, 1, 4, 0., 0., 0., RNASTAB}; +static polygon_t p_proteasesite = { FALSE, 1, 4, 0., 0., 0., PROTEASESITE}; +static polygon_t p_proteinstab = { FALSE, 1, 4, 0., 0., 0., PROTEINSTAB}; +/** dna construction symbols **/ +static polygon_t p_primersite = { FALSE, 1, 4, 0., 0., 0., PRIMERSITE}; +static polygon_t p_restrictionsite = { FALSE, 1, 4, 0., 0., 0., RESTRICTIONSITE}; +static polygon_t p_fivepoverhang = { FALSE, 1, 4, 0., 0., 0., FIVEPOVERHANG}; +static polygon_t p_threepoverhang = { FALSE, 1, 4, 0., 0., 0., THREEPOVERHANG}; +static polygon_t p_noverhang = { FALSE, 1, 4, 0., 0., 0., NOVERHANG}; +static polygon_t p_assembly = { FALSE, 1, 4, 0., 0., 0., ASSEMBLY}; +static polygon_t p_signature = { FALSE, 1, 4, 0., 0., 0., SIGNATURE}; #define IS_BOX(n) (ND_shape(n)->polygon == &p_box) /* True if style requires processing through round_corners. */ #define SPECIAL_CORNERS(style) \ - ((style) & (ROUNDED | DIAGONALS | DOGEAR | TAB | FOLDER | BOX3D | COMPONENT | RPROMOTER | RARROW | LARROW | LPROMOTER)) + ((style) & (ROUNDED | DIAGONALS | DOGEAR | TAB | FOLDER | BOX3D | COMPONENT | PROMOTER | CDS | TERMINATOR | UTR | PRIMERSITE | RESTRICTIONSITE | FIVEPOVERHANG | THREEPOVERHANG | NOVERHANG | ASSEMBLY | SIGNATURE | INSULATOR | RIBOSITE | RNASTAB | PROTEASESITE | PROTEINSTAB)) /* @@ -204,11 +218,25 @@ static shape_desc Shapes[] = { /* first entry is default for no such shape */ {"Mdiamond", &poly_fns, &p_Mdiamond}, {"Msquare", &poly_fns, &p_Msquare}, {"Mcircle", &poly_fns, &p_Mcircle}, - /* biological circuit shapes */ - {"rpromoter", &poly_fns, &p_rpromoter}, - {"larrow", &poly_fns, &p_larrow}, - {"rarrow", &poly_fns, &p_rarrow}, - {"lpromoter", &poly_fns, &p_lpromoter}, + /* biological circuit shapes, as specified by SBOLv*/ + /** gene expression symbols **/ + {"promoter", &poly_fns, &p_promoter}, + {"cds", &poly_fns, &p_cds}, + {"terminator", &poly_fns, &p_terminator}, + {"utr", &poly_fns, &p_utr}, + {"insulator", &poly_fns, &p_insulator}, + {"ribosite", &poly_fns, &p_ribosite}, + {"rnastab", &poly_fns, &p_rnastab}, + {"proteasesite", &poly_fns, &p_proteasesite}, + {"proteinstab", &poly_fns, &p_proteinstab}, + /** dna construction symbols **/ + {"primersite", &poly_fns, &p_primersite}, + {"restrictionsite", &poly_fns, &p_restrictionsite}, + {"fivepoverhang", &poly_fns, &p_fivepoverhang}, + {"threepoverhang", &poly_fns, &p_threepoverhang}, + {"noverhang", &poly_fns, &p_noverhang}, + {"assembly", &poly_fns, &p_assembly}, + {"signature", &poly_fns, &p_signature}, /* *** shapes other than polygons *** */ {"record", &record_fns, NULL}, {"Mrecord", &record_fns, NULL}, @@ -442,8 +470,8 @@ void round_corners(GVJ_t * job, pointf * AF, int sides, int style, int filled) if (style & DIAGONALS) mode = DIAGONALS; - else if (style & (DOGEAR | TAB | FOLDER | BOX3D | COMPONENT | RPROMOTER | RARROW | LARROW | LPROMOTER)) - mode = style & (DOGEAR | TAB | FOLDER | BOX3D | COMPONENT | RPROMOTER | RARROW | LARROW | LPROMOTER); + else if (style & (DOGEAR | TAB | FOLDER | BOX3D | COMPONENT | PROMOTER | CDS | TERMINATOR | UTR | PRIMERSITE | RESTRICTIONSITE | FIVEPOVERHANG | THREEPOVERHANG | NOVERHANG | ASSEMBLY | SIGNATURE | INSULATOR | RIBOSITE | RNASTAB | PROTEASESITE | PROTEINSTAB)) + mode = style & (DOGEAR | TAB | FOLDER | BOX3D | COMPONENT | PROMOTER | CDS | TERMINATOR | UTR | PRIMERSITE | RESTRICTIONSITE | FIVEPOVERHANG | THREEPOVERHANG | NOVERHANG | ASSEMBLY | SIGNATURE | INSULATOR | RIBOSITE | RNASTAB | PROTEASESITE | PROTEINSTAB); else mode = ROUNDED; B = N_NEW(4 * sides + 4, pointf); @@ -710,156 +738,860 @@ void round_corners(GVJ_t * job, pointf * AF, int sides, int style, int filled) free(D); break; - case RPROMOTER: + case PROMOTER: /* - * Adjust the perimeter for the protrusions. + * L-shaped arrow on a center line, scales in the x direction * * - * D[1] = AF[1] |\ + * D[1] |\ * +----------------+ \ * | D[0] \ * | \ * | / - * | / + * | D[5] / * | +-------+ / * | | |/ * +--------+ */ /* Add the tab edges. */ - D = N_NEW(sides + 5, pointf); /*5 new points*/ - D[0].x = B[1].x - (B[2].x - B[3].x)/2; - D[0].y = B[1].y - (B[3].y - B[4].y)/2; - D[1].x = B[3].x; - D[1].y = B[3].y - (B[3].y - B[4].y)/2; - D[2].x = AF[2].x; - D[2].y = AF[2].y; - D[3].x = B[2].x + (B[2].x - B[3].x)/2; - D[3].y = AF[2].y; - D[4].x = B[2].x + (B[2].x - B[3].x)/2; - D[4].y = AF[2].y + (B[3].y - B[4].y)/2; - D[5].x = B[1].x - (B[2].x - B[3].x)/2; - D[5].y = AF[2].y + (B[3].y - B[4].y)/2; - D[6].x = B[1].x - (B[2].x - B[3].x)/2; - D[6].y = AF[3].y; - D[7].y = AF[0].y - (AF[0].y - AF[3].y)/2; /*triangle point */ - D[7].x = AF[0].x; /*triangle point */ - D[8].y = AF[0].y; - D[8].x = B[1].x - (B[2].x - B[3].x)/2; - + + //x_center is AF[1].x + (AF[0].x - AF[1].x)/2 + //y_center is AF[2].y + (AF[1].y - AF[2].y)/2; + //the arrow's thickness is (B[2].x-B[3].x)/2 or (B[3].y-B[4].y)/2; + //the thickness is subituted with (AF[0].x - AF[1].x)/8 to make it scalable in the y with label length + D = N_NEW(sides + 5, pointf); + D[0].x = AF[1].x + (AF[0].x - AF[1].x)/2 + (AF[0].x - AF[1].x)/8; //x_center + width + D[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 + (B[3].y-B[4].y)*3/2; //D[4].y + width + D[1].x = AF[1].x + (AF[0].x - AF[1].x)/2 - (AF[0].x - AF[1].x)/4; //x_center - 2*width + D[1].y = D[0].y; + D[2].x = D[1].x; + D[2].y = AF[2].y + (AF[1].y - AF[2].y)/2; //y_center + D[3].x = D[2].x + (B[2].x - B[3].x)/2; //D[2].x + width + D[3].y = AF[2].y + (AF[1].y - AF[2].y)/2; //y_center + D[4].x = D[3].x; + D[4].y = AF[2].y + (AF[1].y - AF[2].y)/2 + (B[3].y-B[4].y); //highest cds point + D[5].x = D[0].x; + D[5].y = D[4].y; //highest cds point + D[6].x = D[0].x; + D[6].y = D[4].y - (B[3].y-B[4].y)/4; //D[4].y - width/2 + D[7].x = D[6].x + (B[2].x - B[3].x); //D[6].x + 2*width + D[7].y = D[6].y + (B[3].y - B[4].y)/2; //D[6].y + width + D[8].x = D[0].x; + D[8].y = D[0].y + (B[3].y - B[4].y)/4;//D[0].y + width/2 gvrender_polygon(job, D, sides + 5, filled); - free(D); + + /*dsDNA line*/ + C[0].x = AF[1].x; + C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2; + C[1].x = AF[0].x; + C[1].y = AF[2].y + (AF[0].y - AF[3].y)/2; + gvrender_polyline(job, C, 2); + free(D); + break; - case RARROW: + case CDS: /* - * Adjust the perimeter for the protrusions. + * arrow without the protrusions, scales normally * * - * D[1] = AF[1] |\ - * +----------------+ \ - * | D[0] \ - * | \ - * | / - * | / - * +----------------+ / - * |/ + * D[1] = AF[1] + * +----------------+\ + * | D[0]\ + * | \ + * | / + * | / + * +----------------+/ + * D[3] * */ - /* Add the tab edges. */ - D = N_NEW(sides + 3, pointf); /*3 new points*/ - D[0].x = B[1].x - (B[2].x - B[3].x)/2; + D = N_NEW(sides + 1, pointf); + D[0].x = B[1].x; D[0].y = B[1].y - (B[3].y - B[4].y)/2; D[1].x = B[3].x; D[1].y = B[3].y - (B[3].y - B[4].y)/2; D[2].x = AF[2].x; D[2].y = AF[2].y + (B[3].y - B[4].y)/2; - D[3].x = B[1].x - (B[2].x - B[3].x)/2; + D[3].x = B[1].x; D[3].y = AF[2].y + (B[3].y - B[4].y)/2; - D[4].x = B[1].x - (B[2].x - B[3].x)/2; - D[4].y = AF[3].y; - D[5].y = AF[0].y - (AF[0].y - AF[3].y)/2;/*triangle point*/ - D[5].x = AF[0].x; /*triangle point */ - D[6].y = AF[0].y; - D[6].x = B[1].x - (B[2].x - B[3].x)/2; + D[4].y = AF[0].y - (AF[0].y - AF[3].y)/2; + D[4].x = AF[0].x; + + gvrender_polygon(job, D, sides + 1, filled); + free(D); - gvrender_polygon(job, D, sides + 3, filled); + break; + + case TERMINATOR: + /* + * T-shape, does not scale, always in the center + * + * + * D[4] + * +----------------+ + * | D[3] + * | | + * | | + * | D[6] D[1] | + * D[5]+---+ +----+ D[2] + * | | + * +-------+ D[0] + */ + //x_center is AF[1].x + (AF[0].x - AF[1].x)/2 + //y_center is AF[2].y + (AF[1].y - AF[2].y)/2; + //width units are (B[2].x-B[3].x)/2 or (B[3].y-B[4].y)/2; + D = N_NEW(sides + 4, pointf); + D[0].x = AF[1].x + (AF[0].x-AF[1].x)/2 + (B[2].x-B[3].x)/4; //x_center + width/2 + D[0].y = AF[2].y + (AF[1].y - AF[2].y)/2; //y_center + D[1].x = D[0].x; + D[1].y = D[0].y + (B[3].y-B[4].y)/2; + D[2].x = D[1].x + (B[2].x-B[3].x)/2; + D[2].y = D[1].y; + D[3].x = D[2].x; + D[3].y = D[2].y + (B[3].y-B[4].y)/2; + D[4].x = AF[1].x + (AF[0].x-AF[1].x)/2 - (B[2].x-B[3].x)*3/4; //D[3].y mirrowed across the center + D[4].y = D[3].y; + D[5].x = D[4].x; + D[5].y = D[2].y; + D[6].x = AF[1].x + (AF[0].x-AF[1].x)/2 - (B[2].x-B[3].x)/4; //D[1].x mirrowed across the center + D[6].y = D[1].y; + D[7].x = D[6].x; + D[7].y = D[0].y; + gvrender_polygon(job, D, sides + 4, filled); + + /*dsDNA line*/ + C[0].x = AF[1].x; + C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2; + C[1].x = AF[0].x; + C[1].y = AF[2].y + (AF[0].y - AF[3].y)/2; + gvrender_polyline(job, C, 2); free(D); + break; - case LARROW: + case UTR: /* - * Adjust the perimeter for the protrusions. + * half-octagon with line, does not scale, always in center * - * - * /| - * / +----------------+ - * / | - * \ | - * \ +----------------+ - * \| - * + * D[3] + * _____ D[2] + * / \ + * / \ D[1] + * | | + * ----------- + * D[0] + * + * + * */ - /* Add the tab edges. */ - D = N_NEW(sides + 3, pointf); /*3 new points*/ + //x_center is AF[1].x + (AF[0].x - AF[1].x)/2 + //y_center is AF[2].y + (AF[1].y - AF[2].y)/2; + //width units are (B[2].x-B[3].x)/2 or (B[3].y-B[4].y)/2; + D = N_NEW(sides + 2, pointf); + D[0].x = AF[1].x + (AF[0].x-AF[1].x)/2 + (B[2].x-B[3].x)*3/4; //x_center+width + D[0].y = AF[2].y + (AF[1].y - AF[2].y)/2; //y_center + D[1].x = D[0].x; + D[1].y = D[0].y + (B[3].y-B[4].y)/4; //D[0].y+width/2 + D[2].x = AF[1].x + (AF[0].x-AF[1].x)/2 + (B[2].x-B[3].x)/4; //x_center+width/2 + D[2].y = D[1].y + (B[3].y-B[4].y)/2; //D[1].y+width + D[3].x = AF[1].x + (AF[0].x-AF[1].x)/2 - (B[2].x-B[3].x)/4; //D[2].x mirrowed across the center + D[3].y = D[2].y; + D[4].x = AF[1].x + (AF[0].x-AF[1].x)/2 - (B[2].x-B[3].x)*3/4; + D[4].y = D[1].y; + D[5].x = D[4].x; + D[5].y = D[0].y; + gvrender_polygon(job, D, sides + 2, filled); + + /*dsDNA line*/ + C[0].x = AF[1].x; + C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2; + C[1].x = AF[0].x; + C[1].y = AF[2].y + (AF[0].y - AF[3].y)/2; + gvrender_polyline(job, C, 2); + free(D); + + break; + case PRIMERSITE: + /* + * half arrow shape, scales in the x-direction + * D[1] + * |\ + * | \ + * | \ + * ------------ \ + * | \ + * ------------------\ D[0] + * + * -------------------------------- + * + */ + //x_center is AF[1].x + (AF[0].x - AF[1].x)/2; + //y_center is AF[2].y + (AF[1].y - AF[2].y)/2; + //width units are (B[2].x-B[3].x)/2 or (B[3].y-B[4].y)/2; + //the thickness is subituted with (AF[0].x - AF[1].x)/8 to make it scalable in the y with label length + D = N_NEW(sides + 1, pointf); + D[0].x = AF[1].x + (AF[0].x - AF[1].x)/2 + (B[2].x-B[3].x);//x_center + width*2 + D[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 + (B[3].y-B[4].y)/4;//y_center + 1/2 width + D[1].x = D[0].x - (B[2].x-B[3].x); //x_center + D[1].y = D[0].y + (B[3].y-B[4].y); + D[2].x = D[1].x; + D[2].y = D[0].y + (B[3].y-B[4].y)/2; + D[3].x = AF[1].x + (AF[0].x - AF[1].x)/2 - (AF[0].x - AF[1].x)/4;//x_center - 2*(scalable width) + D[3].y = D[2].y; + D[4].x = D[3].x; + D[4].y = D[0].y; + gvrender_polygon(job, D, sides + 1, filled); + + /*dsDNA line*/ + C[0].x = AF[1].x; + C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2; + C[1].x = AF[0].x; + C[1].y = AF[2].y + (AF[0].y - AF[3].y)/2; + gvrender_polyline(job, C, 2); + free(D); + + break; + case RESTRICTIONSITE: + /* + * zigzag shape, scales in the x-direction (only the middle section) + * + * + * ----D[2] + * | |________ D[0] + * | |____ + * ---------- | + * D[4] --- D[7] + * + * + * + */ + //x_center is AF[1].x + (AF[0].x - AF[1].x)/2; + //y_center is AF[2].y + (AF[1].y - AF[2].y)/2; + //width units are (B[2].x-B[3].x)/2 or (B[3].y-B[4].y)/2; + //the thickness is subituted with (AF[0].x - AF[1].x)/8 to make it scalable in the y with label length + D = N_NEW(sides + 4, pointf); + D[0].x = AF[1].x + (AF[0].x - AF[1].x)/2 + (AF[0].x - AF[1].x)/8 + (B[2].x-B[3].x)/2;//x_center + scalable_width + width + D[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 + (B[3].y-B[4].y)/4;//y_center + 1/2 width + D[1].x = AF[1].x + (AF[0].x - AF[1].x)/2 - (AF[0].x - AF[1].x)/8; //x_center - width + D[1].y = D[0].y; + D[2].x = D[1].x; + D[2].y = D[1].y + (B[3].y-B[4].y)/2; + D[3].x = D[2].x - (B[2].x-B[3].x)/2; //D[2].x - width + D[3].y = D[2].y; + D[4].x = D[3].x; + D[4].y = AF[2].y + (AF[1].y - AF[2].y)/2 - (B[3].y-B[4].y)/4; //y_center - 1/2(width) + D[5].x = D[0].x - (B[2].x-B[3].x)/2; + D[5].y = D[4].y; + D[6].x = D[5].x; + D[6].y = D[5].y - (B[3].y-B[4].y)/2; + D[7].x = D[0].x; + D[7].y = D[6].y; + gvrender_polygon(job, D, sides + 4, filled); + + /*dsDNA line left half*/ + C[0].x = AF[1].x; + C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2; + C[1].x = D[4].x; + C[1].y = AF[2].y + (AF[0].y - AF[3].y)/2; + gvrender_polyline(job, C, 2); + + /*dsDNA line right half*/ + C[0].x = D[7].x; + C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2; + C[1].x = AF[0].x; + C[1].y = AF[2].y + (AF[0].y - AF[3].y)/2; + gvrender_polyline(job, C, 2); + free(D); + + break; + case FIVEPOVERHANG: + /* + * does not scale, on the left side + * + * D[3]------D[2] + * | | + * D[0]------D[1] + * ----- ------------ + * | | + * D[0]--D[1] + * + * + * + */ + //x_center is AF[1].x + (AF[0].x - AF[1].x)/2; + //y_center is AF[2].y + (AF[1].y - AF[2].y)/2; + //width units are (B[2].x-B[3].x)/2 or (B[3].y-B[4].y)/2; + //the thickness is subituted with (AF[0].x - AF[1].x)/8 to make it scalable in the y with label length + D = N_NEW(sides, pointf); + D[0].x = AF[1].x;//the very left edge + D[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 + (B[3].y-B[4].y)/8;//y_center + 1/4 width + D[1].x = D[0].x + 2*(B[2].x-B[3].x); + D[1].y = D[0].y; + D[2].x = D[1].x; + D[2].y = D[1].y + (B[3].y-B[4].y)/2; + D[3].x = D[0].x; + D[3].y = D[2].y; + gvrender_polygon(job, D, sides, filled); + + /*second, lower shape*/ + free(D); + D = N_NEW(sides, pointf); + D[0].x = AF[1].x + (B[2].x-B[3].x); + D[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 - (B[3].y-B[4].y)*5/8; //y_center - 5/4 width + D[1].x = D[0].x + (B[2].x-B[3].x); + D[1].y = D[0].y; + D[2].x = D[1].x; + D[2].y = D[1].y + (B[3].y-B[4].y)/2; + D[3].x = D[0].x; + D[3].y = D[2].y; + gvrender_polygon(job, D, sides, filled); + + /*dsDNA line right half*/ + C[0].x = D[1].x; + C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2; + C[1].x = AF[0].x; + C[1].y = AF[2].y + (AF[0].y - AF[3].y)/2; + gvrender_polyline(job, C, 2); + free(D); + + break; + case THREEPOVERHANG: + /* + * does not scale, on the right side + * + * D[2]------D[1] + * | | + *----------D[3]------D[0] + * ----- D[1] + * | | + * D[3]--D[0] + * + * + * + */ + //x_center is AF[1].x + (AF[0].x - AF[1].x)/2; + //y_center is AF[2].y + (AF[1].y - AF[2].y)/2; + //width units are (B[2].x-B[3].x)/2 or (B[3].y-B[4].y)/2; + //the thickness is subituted with (AF[0].x - AF[1].x)/8 to make it scalable in the y with label length + D = N_NEW(sides, pointf); + D[0].x = AF[0].x;//the very right edge + D[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 + (B[3].y-B[4].y)/8;//y_center + 1/4 width + D[1].x = D[0].x; + D[1].y = D[0].y + (B[3].y-B[4].y)/2; + D[2].x = D[1].x - 2*(B[3].y-B[4].y); + D[2].y = D[1].y; + D[3].x = D[2].x; + D[3].y = D[0].y; + gvrender_polygon(job, D, sides, filled); + + /*second, lower shape*/ + free(D); + D = N_NEW(sides, pointf); + D[0].x = AF[0].x - (B[2].x-B[3].x); + D[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 - (B[3].y-B[4].y)*5/8; //y_center - 5/4 width + D[1].x = D[0].x; + D[1].y = D[0].y + (B[3].y-B[4].y)/2; + D[2].x = D[1].x - (B[3].y-B[4].y); + D[2].y = D[1].y; + D[3].x = D[2].x; + D[3].y = D[0].y; + gvrender_polygon(job, D, sides, filled); + + /*dsDNA line left half*/ + C[0].x = AF[1].x; + C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2; + C[1].x = D[3].x; + C[1].y = AF[2].y + (AF[0].y - AF[3].y)/2; + gvrender_polyline(job, C, 2); + free(D); + + break; + case NOVERHANG: + /* + * does not scale + * + * D[3]------D[2] D[3]------D[2] + * | | | | + * ---D[0]------D[1] D[0]------D[1]---- + * D[3]------D[2] D[3]------D[2] + * | | | | + * D[0]------D[1] D[0]------D[1] + * + * + * + * + */ + //x_center is AF[1].x + (AF[0].x - AF[1].x)/2; + //y_center is AF[2].y + (AF[1].y - AF[2].y)/2; + //width units are (B[2].x-B[3].x)/2 or (B[3].y-B[4].y)/2; + //the thickness is subituted with (AF[0].x - AF[1].x)/8 to make it scalable in the y with label length + /*upper left rectangle*/ + D = N_NEW(sides, pointf); + D[0].x = AF[1].x + (AF[0].x - AF[1].x)/2 - (B[2].x-B[3].x)*9/8; //x_center - 2*width - 1/4*width + D[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 + (B[3].y-B[4].y)/8;//y_center + 1/4 width + D[1].x = D[0].x + (B[2].x-B[3].x); + D[1].y = D[0].y; + D[2].x = D[1].x; + D[2].y = D[1].y + (B[3].y-B[4].y)/2; + D[3].x = D[0].x; + D[3].y = D[2].y; + gvrender_polygon(job, D, sides, filled); + + /*lower, left rectangle*/ + free(D); + D = N_NEW(sides, pointf); + D[0].x = AF[1].x + (AF[0].x - AF[1].x)/2 - (B[2].x-B[3].x)*9/8; //x_center - 2*width - 1/4*width + D[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 - (B[3].y-B[4].y)*5/8;//y_center - width - 1/4 width + D[1].x = D[0].x + (B[2].x-B[3].x); + D[1].y = D[0].y; + D[2].x = D[1].x; + D[2].y = D[1].y + (B[3].y-B[4].y)/2; + D[3].x = D[0].x; + D[3].y = D[2].y; + gvrender_polygon(job, D, sides, filled); + + /*lower, right rectangle*/ + free(D); + D = N_NEW(sides, pointf); + D[0].x = AF[1].x + (AF[0].x - AF[1].x)/2 + (B[2].x-B[3].x)/8; //x_center + 1/4*width + D[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 - (B[3].y-B[4].y)*5/8;//y_center - width - 1/4 width + D[1].x = D[0].x + (B[2].x-B[3].x); + D[1].y = D[0].y; + D[2].x = D[1].x; + D[2].y = D[1].y + (B[3].y-B[4].y)/2; + D[3].x = D[0].x; + D[3].y = D[2].y; + gvrender_polygon(job, D, sides, filled); + + /*upper, right rectangle*/ + free(D); + D = N_NEW(sides, pointf); + D[0].x = AF[1].x + (AF[0].x - AF[1].x)/2 + (B[2].x-B[3].x)/8; //x_center + 1/4*width + D[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 + (B[3].y-B[4].y)/8;//y_center - width - 1/4 width + D[1].x = D[0].x + (B[2].x-B[3].x); + D[1].y = D[0].y; + D[2].x = D[1].x; + D[2].y = D[1].y + (B[3].y-B[4].y)/2; + D[3].x = D[0].x; + D[3].y = D[2].y; + gvrender_polygon(job, D, sides, filled); + + /*dsDNA line right half*/ + C[0].x = D[1].x; + C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2; + C[1].x = AF[0].x; + C[1].y = AF[2].y + (AF[0].y - AF[3].y)/2; + gvrender_polyline(job, C, 2); + + /*dsDNA line left half*/ + C[0].x = AF[1].x + (AF[0].x - AF[1].x)/2 - (B[2].x-B[3].x)*9/8; //D[0].x of of the left rectangles + C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2; + C[1].x = AF[1].x; + C[1].y = AF[2].y + (AF[0].y - AF[3].y)/2; + gvrender_polyline(job, C, 2); + free(D); + + break; + case ASSEMBLY: + /* + * does not scale + * + * D[3]----------D[2] + * | | + * D[0]----------D[1] + * ---- --------- + * D[3]----------D[2] + * | | + * D[0]----------D[1] + * + */ + //x_center is AF[1].x + (AF[0].x - AF[1].x)/2; + //y_center is AF[2].y + (AF[1].y - AF[2].y)/2; + //width units are (B[2].x-B[3].x)/2 or (B[3].y-B[4].y)/2; + //the thickness is subituted with (AF[0].x - AF[1].x)/8 to make it scalable in the y with label length + D = N_NEW(sides, pointf); + D[0].x = AF[1].x + (AF[0].x - AF[1].x)/2 - (B[2].x-B[3].x); //x_center - 2*width + D[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 + (B[3].y-B[4].y)/8;//y_center + 1/4 width + D[1].x = D[0].x + 2*(B[2].x-B[3].x); + D[1].y = D[0].y; + D[2].x = D[1].x; + D[2].y = D[1].y + (B[3].y-B[4].y)/2; + D[3].x = D[0].x; + D[3].y = D[2].y; + gvrender_polygon(job, D, sides, filled); + + /*second, lower shape*/ + free(D); + D = N_NEW(sides, pointf); + D[0].x = AF[1].x + (AF[0].x - AF[1].x)/2 - (B[2].x-B[3].x); //x_center - 2*width + D[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 - (B[3].y-B[4].y)*5/8;//y_center - width - 1/4 width + D[1].x = D[0].x + 2*(B[2].x-B[3].x); + D[1].y = D[0].y; + D[2].x = D[1].x; + D[2].y = D[1].y + (B[3].y-B[4].y)/2; + D[3].x = D[0].x; + D[3].y = D[2].y; + gvrender_polygon(job, D, sides, filled); + + /*dsDNA line right half*/ + C[0].x = D[1].x; + C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2; + C[1].x = AF[0].x; + C[1].y = AF[2].y + (AF[0].y - AF[3].y)/2; + gvrender_polyline(job, C, 2); + + /*dsDNA line left half*/ + C[0].x = AF[1].x; + C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2; + C[1].x = D[0].x; + C[1].y = AF[2].y + (AF[0].y - AF[3].y)/2; + gvrender_polyline(job, C, 2); + free(D); + + break; + case SIGNATURE: + /* + * + * + * +--------------+ + * | | + * |x | + * |_____________ | + * +--------------+ + */ + //x_center is AF[1].x + (AF[0].x - AF[1].x)/2; + //y_center is AF[2].y + (AF[1].y - AF[2].y)/2; + //width units are (B[2].x-B[3].x)/2 or (B[3].y-B[4].y)/2; + //the thickness is subituted with (AF[0].x - AF[1].x)/8 to make it scalable in the y with label length + D = N_NEW(sides, pointf); D[0].x = AF[0].x; - D[0].y = AF[0].y - (B[3].y-B[4].y)/2; - D[1].x = B[2].x + (B[2].x - B[3].x)/2; - D[1].y = AF[0].y - (B[3].y-B[4].y)/2;/*D[0].y*/ - D[2].x = B[2].x + (B[2].x - B[3].x)/2;/*D[1].x*/ - D[2].y = B[2].y; - D[3].x = AF[1].x; /*triangle point*/ - D[3].y = AF[1].y - (AF[1].y - AF[2].y)/2; /*triangle point*/ - D[4].x = B[2].x + (B[2].x - B[3].x)/2;/*D[1].x*/ - D[4].y = AF[2].y; - D[5].y = AF[2].y + (B[3].y-B[4].y)/2; - D[5].x = B[2].x + (B[2].x - B[3].x)/2;/*D[1].x*/ - D[6].y = AF[3].y + (B[3].y - B[4].y)/2; - D[6].x = AF[0].x;/*D[0]*/ + D[0].y = B[1].y - (B[3].y - B[4].y)/2; + D[1].x = B[3].x; + D[1].y = B[3].y - (B[3].y - B[4].y)/2; + D[2].x = AF[2].x; + D[2].y = AF[2].y + (B[3].y - B[4].y)/2; + D[3].x = AF[0].x; + D[3].y = AF[2].y + (B[3].y - B[4].y)/2; + gvrender_polygon(job, D, sides, filled); - gvrender_polygon(job, D, sides + 3, filled); + /* "\" of the X*/ + C[0].x = AF[1].x + (B[2].x-B[3].x)/4; + C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 + (B[3].y-B[4].y)/8; //y_center + 1/4 width + C[1].x = C[0].x + (B[2].x-B[3].x)/4;//C[0].x + width/2 + C[1].y = C[0].y - (B[3].y-B[4].y)/4;//C[0].y - width/2 + gvrender_polyline(job, C, 2); + + /*"/" of the X*/ + C[0].x = AF[1].x + (B[2].x-B[3].x)/4; + C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 - (B[3].y-B[4].y)/8; //y_center - 1/4 width + C[1].x = C[0].x + (B[2].x-B[3].x)/4;//C[0].x + width/2 + C[1].y = C[0].y + (B[3].y-B[4].y)/4;//C[0].y + width/2 + gvrender_polyline(job, C, 2); + + /*bottom line*/ + C[0].x = AF[1].x + (B[2].x-B[3].x)/4; + C[0].y = AF[2].y + (B[3].y-B[4].y)*3/4; + C[1].x = AF[0].x - (B[2].x-B[3].x)/4; + C[1].y = C[0].y; + gvrender_polyline(job, C, 2); free(D); + + break; + case INSULATOR: + /* + * double square + * + * +-----+ + *--| ___ |--- + * | |_| | + * +-----+ + * + */ + //x_center is AF[1].x + (AF[0].x - AF[1].x)/2 + //y_center is AF[2].y + (AF[1].y - AF[2].y)/2; + //width units are (B[2].x-B[3].x)/2 or (B[3].y-B[4].y)/2; + D = N_NEW(sides, pointf); + D[0].x = AF[1].x + (AF[0].x - AF[1].x)/2 + (B[2].x-B[3].x)/2; //x_center+width + D[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 + (B[2].x-B[3].x)/2; //y_center + D[1].x = D[0].x; + D[1].y = AF[2].y + (AF[1].y - AF[2].y)/2 - (B[2].x-B[3].x)/2; //D[0].y- width + D[2].x = AF[1].x + (AF[0].x - AF[1].x)/2 - (B[2].x-B[3].x)/2; //x_center-width + D[2].y = D[1].y; + D[3].x = D[2].x; + D[3].y = D[0].y; + gvrender_polygon(job, D, sides, filled); + free(D); + + /*outer square line*/ + C[0].x = AF[1].x + (AF[0].x - AF[1].x)/2 + (B[2].x-B[3].x)*3/4; //x_center+1.5*width + C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 + (B[2].x-B[3].x)*3/4; //y_center + C[1].x = C[0].x; + C[1].y = AF[2].y + (AF[1].y - AF[2].y)/2 - (B[2].x-B[3].x)*3/4; //y_center- 1.5*width + C[2].x = AF[1].x + (AF[0].x - AF[1].x)/2 - (B[2].x-B[3].x)*3/4; //x_center-1.5*width + C[2].y = C[1].y; + C[3].x = C[2].x; + C[3].y = C[0].y; + C[4] = C[0]; + gvrender_polyline(job, C, 5); + + /*dsDNA line right half*/ + C[0].x = AF[1].x + (AF[0].x - AF[1].x)/2 + (B[2].x-B[3].x)*3/4; + C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2; + C[1].x = AF[0].x; + C[1].y = AF[2].y + (AF[0].y - AF[3].y)/2; + gvrender_polyline(job, C, 2); + + /*dsDNA line left half*/ + C[0].x = AF[1].x; + C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2; + C[1].x = AF[1].x + (AF[0].x - AF[1].x)/2 - (B[2].x-B[3].x)*3/4; + C[1].y = AF[2].y + (AF[0].y - AF[3].y)/2; + gvrender_polyline(job, C, 2); + break; + case RIBOSITE: + /* + * X with a dashed line on the bottom + * + * + * X + * | + * ------------ + */ + //x_center is AF[1].x + (AF[0].x - AF[1].x)/2 + //y_center is AF[2].y + (AF[1].y - AF[2].y)/2; + //width units are (B[2].x-B[3].x)/2 or (B[3].y-B[4].y)/2; + + D = N_NEW(sides + 12, pointf); //12-sided x + D[0].x = AF[1].x + (AF[0].x-AF[1].x)/2 + (B[2].x-B[3].x)/4; //x_center+widtht/2 , lower right corner of the x + D[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 + (B[3].y-B[4].y)/2; //y_center + width + D[1].x = D[0].x; + D[1].y = D[0].y + (B[3].y-B[4].y)/8; //D[0].y +width/4 + D[2].x = D[0].x - (B[2].x-B[3].x)/8; //D[0].x- width/4 //right nook of the x + D[2].y = D[1].y + (B[3].y-B[4].y)/8; //D[0].y+width/2 or D[1].y+width/4 + D[3].x = D[0].x; + D[3].y = D[2].y + (B[3].y-B[4].y)/8; //D[2].y + width/4 + D[4].x = D[0].x; + D[4].y = D[3].y + (B[3].y-B[4].y)/8; //top right corner of the x + D[5].x = D[2].x; + D[5].y = D[4].y; + D[6].x = AF[1].x + (AF[0].x - AF[1].x)/2; //x_center + D[6].y = D[3].y; //top nook + D[7].x = D[6].x - (B[2].x-B[3].x)/8; //D[5] mirrowed across y + D[7].y = D[5].y; + D[8].x = D[7].x - (B[2].x-B[3].x)/8;//top left corner + D[8].y = D[7].y; + D[9].x = D[8].x; + D[9].y = D[3].y; + D[10].x = D[8].x + (B[2].x-B[3].x)/8; + D[10].y = D[2].y; + D[11].x = D[8].x; + D[11].y = D[1].y; + D[12].x = D[8].x; + D[12].y = D[0].y; + D[13].x = D[10].x; + D[13].y = D[12].y; + D[14].x = D[6].x; //bottom nook + D[14].y = D[1].y; + D[15].x = D[2].x; + D[15].y = D[0].y; + gvrender_polygon(job, D, sides + 12, filled); + + //2-part dash line + + /*line below the x, bottom dash*/ + C[0].x = D[14].x; //x_center + C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2; //y_center + C[1].x = C[0].x; + C[1].y = C[0].y + (B[3].y-B[4].y)/8; //y_center + 1/4*width + gvrender_polyline(job, C, 2); - case LPROMOTER: + /*line below the x, top dash*/ + C[0].x = D[14].x; //x_center + C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 + (B[3].y-B[4].y)/4; + C[1].x = C[0].x; + C[1].y = C[0].y + (B[3].y-B[4].y)/8; + gvrender_polyline(job, C, 2); + + /*dsDNA line*/ + C[0].x = AF[1].x; + C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2; + C[1].x = AF[0].x; + C[1].y = AF[2].y + (AF[0].y - AF[3].y)/2; + gvrender_polyline(job, C, 2); + free(D); + + break; + case RNASTAB: /* - * Adjust the perimeter for the protrusions. + * hexagon with a dashed line on the bottom + * * - * - * /| - * / +----------------+ - * / D[0] - * / | - * \ | - * \ | - * \ +--------+ + - * \| | | - * +-------+ + * O + * | + * ------------ */ - /* Add the tab edges. */ - D = N_NEW(sides + 5, pointf); /*3 new points*/ - D[0].x = AF[0].x; - D[0].y = AF[0].y - (B[3].y-B[4].y)/2; - D[1].x = B[2].x + (B[2].x - B[3].x)/2; - D[1].y = AF[0].y - (B[3].y-B[4].y)/2;/*D[0].y*/ - D[2].x = B[2].x + (B[2].x - B[3].x)/2;/*D[1].x*/ - D[2].y = B[2].y; - D[3].x = AF[1].x; /*triangle point*/ - D[3].y = AF[1].y - (AF[1].y - AF[2].y)/2; /*triangle point*/ - D[4].x = B[2].x + (B[2].x - B[3].x)/2;/*D[1].x*/ - D[4].y = AF[2].y; - D[5].y = AF[2].y + (B[3].y-B[4].y)/2; - D[5].x = B[2].x + (B[2].x - B[3].x)/2;/*D[1].x*/ - D[6].y = AF[3].y + (B[3].y - B[4].y)/2; - D[6].x = B[1].x - (B[2].x - B[3].x)/2; - D[7].x = B[1].x - (B[2].x - B[3].x)/2;/*D[6].x*/ - D[7].y = AF[3].y; - D[8].x = AF[3].x; - D[8].y = AF[3].y; - - gvrender_polygon(job, D, sides + 5, filled); + //x_center is AF[1].x + (AF[0].x - AF[1].x)/2 + //y_center is AF[2].y + (AF[1].y - AF[2].y)/2; + //width units are (B[2].x-B[3].x)/2 or (B[3].y-B[4].y)/2; + + D = N_NEW(sides + 4, pointf); //12-sided x + D[0].x = AF[1].x + (AF[0].x-AF[1].x)/2 + (B[2].x-B[3].x)/8; //x_center+widtht/8 , lower right corner of the hexagon + D[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 + (B[3].y-B[4].y)/2; //y_center + width + D[1].x = D[0].x + (B[2].x-B[3].x)/8; + D[1].y = D[0].y + (B[3].y-B[4].y)/8; //D[0].y +width/4 + D[2].x = D[1].x; //D[0].x- width/4 + D[2].y = D[1].y + (B[3].y-B[4].y)/4; //D[1].y+width/2 + D[3].x = D[0].x; + D[3].y = D[2].y + (B[3].y-B[4].y)/8; //D[2].y + width/4 + D[4].x = D[3].x - (B[2].x-B[3].x)/4; + D[4].y = D[3].y; //top of the hexagon + D[5].x = D[4].x - (B[2].x-B[3].x)/8; + D[5].y = D[2].y; + D[6].x = D[5].x; + D[6].y = D[1].y; //left side + D[7].x = D[4].x; + D[7].y = D[0].y; //bottom + gvrender_polygon(job, D, sides + 4, filled); + + //2-part dash line + + /*line below the x, bottom dash*/ + C[0].x = AF[1].x + (AF[0].x - AF[1].x)/2; //x_center + C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2; //y_center + C[1].x = C[0].x; + C[1].y = C[0].y + (B[3].y-B[4].y)/8; //y_center + 1/4*width + gvrender_polyline(job, C, 2); + + /*line below the x, top dash*/ + C[0].x = AF[1].x + (AF[0].x - AF[1].x)/2; //x_center + C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 + (B[3].y-B[4].y)/4; + C[1].x = C[0].x; + C[1].y = C[0].y + (B[3].y-B[4].y)/8; + gvrender_polyline(job, C, 2); + + + + /*dsDNA line*/ + C[0].x = AF[1].x; + C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2; + C[1].x = AF[0].x; + C[1].y = AF[2].y + (AF[0].y - AF[3].y)/2; + gvrender_polyline(job, C, 2); free(D); + break; - + case PROTEASESITE: + /* + * X with a solid line on the bottom + * + * + * X + * | + * ------------ + */ + //x_center is AF[1].x + (AF[0].x - AF[1].x)/2 + //y_center is AF[2].y + (AF[1].y - AF[2].y)/2; + //width units are (B[2].x-B[3].x)/2 or (B[3].y-B[4].y)/2; + D = N_NEW(sides + 12, pointf); //12-sided x + D[0].x = AF[1].x + (AF[0].x-AF[1].x)/2 + (B[2].x-B[3].x)/4; //x_center+widtht/2 , lower right corner of the x + D[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 + (B[3].y-B[4].y)/2; //y_center + width + D[1].x = D[0].x; + D[1].y = D[0].y + (B[3].y-B[4].y)/8; //D[0].y +width/4 + D[2].x = D[0].x - (B[2].x-B[3].x)/8; //D[0].x- width/4 //right nook of the x + D[2].y = D[1].y + (B[3].y-B[4].y)/8; //D[0].y+width/2 or D[1].y+width/4 + D[3].x = D[0].x; + D[3].y = D[2].y + (B[3].y-B[4].y)/8; //D[2].y + width/4 + D[4].x = D[0].x; + D[4].y = D[3].y + (B[3].y-B[4].y)/8; //top right corner of the x + D[5].x = D[2].x; + D[5].y = D[4].y; + D[6].x = AF[1].x + (AF[0].x - AF[1].x)/2; //x_center + D[6].y = D[3].y; //top nook + D[7].x = D[6].x - (B[2].x-B[3].x)/8; //D[5] mirrowed across y + D[7].y = D[5].y; + D[8].x = D[7].x - (B[2].x-B[3].x)/8;//top left corner + D[8].y = D[7].y; + D[9].x = D[8].x; + D[9].y = D[3].y; + D[10].x = D[8].x + (B[2].x-B[3].x)/8; + D[10].y = D[2].y; + D[11].x = D[8].x; + D[11].y = D[1].y; + D[12].x = D[8].x; + D[12].y = D[0].y; + D[13].x = D[10].x; + D[13].y = D[12].y; + D[14].x = D[6].x; //bottom nook + D[14].y = D[1].y; + D[15].x = D[2].x; + D[15].y = D[0].y; + gvrender_polygon(job, D, sides + 12, filled); + + + /*line below the x*/ + C[0] = D[14]; + C[1].x = C[0].x; + C[1].y = AF[2].y + (AF[1].y - AF[2].y)/2; //y_center + gvrender_polyline(job, C, 2); + + /*dsDNA line*/ + C[0].x = AF[1].x; + C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2; + C[1].x = AF[0].x; + C[1].y = AF[2].y + (AF[0].y - AF[3].y)/2; + gvrender_polyline(job, C, 2); + free(D); + + break; + case PROTEINSTAB: + /* + * hexagon with a dashed line on the bottom + * + * + * O + * | + * ------------ + */ + //x_center is AF[1].x + (AF[0].x - AF[1].x)/2 + //y_center is AF[2].y + (AF[1].y - AF[2].y)/2; + //width units are (B[2].x-B[3].x)/2 or (B[3].y-B[4].y)/2; + + D = N_NEW(sides + 4, pointf); //12-sided x + D[0].x = AF[1].x + (AF[0].x-AF[1].x)/2 + (B[2].x-B[3].x)/8; //x_center+widtht/8 , lower right corner of the hexagon + D[0].y = AF[2].y + (AF[1].y - AF[2].y)/2 + (B[3].y-B[4].y)/2; //y_center + width + D[1].x = D[0].x + (B[2].x-B[3].x)/8; + D[1].y = D[0].y + (B[3].y-B[4].y)/8; //D[0].y +width/4 + D[2].x = D[1].x; //D[0].x- width/4 + D[2].y = D[1].y + (B[3].y-B[4].y)/4; //D[1].y+width/2 + D[3].x = D[0].x; + D[3].y = D[2].y + (B[3].y-B[4].y)/8; //D[2].y + width/4 + D[4].x = D[3].x - (B[2].x-B[3].x)/4; + D[4].y = D[3].y; //top of the hexagon + D[5].x = D[4].x - (B[2].x-B[3].x)/8; + D[5].y = D[2].y; + D[6].x = D[5].x; + D[6].y = D[1].y; //left side + D[7].x = D[4].x; + D[7].y = D[0].y; //bottom + gvrender_polygon(job, D, sides + 4, filled); + + /*line below the x*/ + C[0].x = AF[1].x + (AF[0].x - AF[1].x)/2; + C[0].y = D[0].y; + C[1].x = C[0].x; + C[1].y = AF[2].y + (AF[1].y - AF[2].y)/2; //y_center + gvrender_polyline(job, C, 2); + + /*dsDNA line*/ + C[0].x = AF[1].x; + C[0].y = AF[2].y + (AF[1].y - AF[2].y)/2; + C[1].x = AF[0].x; + C[1].y = AF[2].y + (AF[0].y - AF[3].y)/2; + gvrender_polyline(job, C, 2); + free(D); + + break; } free(B); } @@ -1143,7 +1875,7 @@ static void poly_init(node_t * n) /* * FIXME - this code is wrong - it doesn't work for concave boundaries. - * (e.g. "folder" or "rarrow") + * (e.g. "folder" or "promoter") * I don't think it even needs sectorangle, or knowledge of skewed shapes. * (Concepts that only work for convex regular (modulo skew/distort) polygons.) *