bio-graphics 1.2 → 1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (331) hide show
  1. data/doc/classes/Bio.html +4 -26
  2. data/doc/classes/Bio/Feature.html +350 -0
  3. data/doc/classes/Bio/Feature.src/M000010.html +21 -0
  4. data/doc/classes/Bio/Feature.src/M000011.html +20 -0
  5. data/doc/classes/Bio/Feature.src/M000012.html +19 -0
  6. data/doc/classes/Bio/Feature.src/M000014.html +21 -0
  7. data/doc/classes/Bio/Feature.src/M000016.html +21 -0
  8. data/doc/classes/Bio/Feature.src/M000034.html +21 -0
  9. data/doc/classes/Bio/Feature.src/M000035.html +20 -0
  10. data/doc/classes/Bio/Feature.src/M000036.html +19 -0
  11. data/doc/classes/Bio/Feature.src/M000038.html +21 -0
  12. data/doc/classes/Bio/Feature.src/M000040.html +21 -0
  13. data/doc/classes/Bio/Feature.src/M000042.html +21 -0
  14. data/doc/classes/Bio/Feature.src/M000043.html +20 -0
  15. data/doc/classes/Bio/Feature.src/M000044.html +21 -0
  16. data/doc/classes/Bio/Feature.src/M000045.html +20 -0
  17. data/doc/classes/Bio/Feature.src/M000046.html +19 -0
  18. data/doc/classes/Bio/Feature.src/M000048.html +21 -0
  19. data/doc/classes/Bio/Feature.src/M000050.html +21 -0
  20. data/doc/classes/Bio/Feature.src/M000074.html +21 -0
  21. data/doc/classes/Bio/Feature.src/M000075.html +20 -0
  22. data/doc/classes/Bio/Feature.src/M000076.html +19 -0
  23. data/doc/classes/Bio/Feature.src/M000078.html +21 -0
  24. data/doc/classes/Bio/Feature.src/M000080.html +21 -0
  25. data/doc/classes/Bio/Feature/Qualifier.html +189 -0
  26. data/doc/classes/Bio/Feature/Qualifier.src/M000017.html +18 -0
  27. data/doc/classes/Bio/Feature/Qualifier.src/M000041.html +18 -0
  28. data/doc/classes/Bio/Feature/Qualifier.src/M000049.html +18 -0
  29. data/doc/classes/Bio/Feature/Qualifier.src/M000051.html +18 -0
  30. data/doc/classes/Bio/Feature/Qualifier.src/M000081.html +18 -0
  31. data/doc/classes/Bio/Features.html +329 -0
  32. data/doc/classes/Bio/Features.src/M000004.html +18 -0
  33. data/doc/classes/Bio/Features.src/M000005.html +19 -0
  34. data/doc/classes/Bio/Features.src/M000006.html +21 -0
  35. data/doc/classes/Bio/Features.src/M000007.html +18 -0
  36. data/doc/classes/Bio/Features.src/M000008.html +18 -0
  37. data/doc/classes/Bio/Features.src/M000009.html +18 -0
  38. data/doc/classes/Bio/Features.src/M000028.html +18 -0
  39. data/doc/classes/Bio/Features.src/M000029.html +19 -0
  40. data/doc/classes/Bio/Features.src/M000030.html +21 -0
  41. data/doc/classes/Bio/Features.src/M000031.html +18 -0
  42. data/doc/classes/Bio/Features.src/M000032.html +18 -0
  43. data/doc/classes/Bio/Features.src/M000033.html +18 -0
  44. data/doc/classes/Bio/Features.src/M000036.html +18 -0
  45. data/doc/classes/Bio/Features.src/M000037.html +19 -0
  46. data/doc/classes/Bio/Features.src/M000038.html +18 -0
  47. data/doc/classes/Bio/Features.src/M000039.html +19 -0
  48. data/doc/classes/Bio/Features.src/M000040.html +21 -0
  49. data/doc/classes/Bio/Features.src/M000041.html +18 -0
  50. data/doc/classes/Bio/Features.src/M000042.html +18 -0
  51. data/doc/classes/Bio/Features.src/M000043.html +18 -0
  52. data/doc/classes/Bio/Features.src/M000068.html +18 -0
  53. data/doc/classes/Bio/Features.src/M000069.html +19 -0
  54. data/doc/classes/Bio/Features.src/M000070.html +21 -0
  55. data/doc/classes/Bio/Features.src/M000071.html +18 -0
  56. data/doc/classes/Bio/Features.src/M000072.html +18 -0
  57. data/doc/classes/Bio/Features.src/M000073.html +18 -0
  58. data/doc/classes/Bio/Graphics.html +28 -42
  59. data/doc/classes/Bio/Graphics/{Panel/Track/Feature.html → Feature.html} +98 -125
  60. data/doc/classes/Bio/Graphics/Feature.src/M000020.html +51 -0
  61. data/doc/classes/Bio/Graphics/Feature.src/M000021.html +65 -0
  62. data/doc/classes/Bio/Graphics/Feature.src/M000022.html +55 -0
  63. data/doc/classes/Bio/Graphics/Feature.src/M000023.html +66 -0
  64. data/doc/classes/Bio/Graphics/Feature.src/M000024.html +51 -0
  65. data/doc/classes/Bio/Graphics/Feature.src/M000025.html +65 -0
  66. data/doc/classes/Bio/Graphics/Feature.src/M000026.html +55 -0
  67. data/doc/classes/Bio/Graphics/Feature.src/M000054.html +51 -0
  68. data/doc/classes/Bio/Graphics/Feature.src/M000055.html +65 -0
  69. data/doc/classes/Bio/Graphics/Feature.src/M000056.html +55 -0
  70. data/doc/classes/Bio/Graphics/Feature/SubFeature.html +348 -0
  71. data/doc/classes/Bio/Graphics/Feature/SubFeature.src/M000025.html +68 -0
  72. data/doc/classes/Bio/Graphics/Feature/SubFeature.src/M000026.html +67 -0
  73. data/doc/classes/Bio/Graphics/Glyph.html +178 -0
  74. data/doc/classes/Bio/Graphics/Glyph/Box.html +139 -0
  75. data/doc/classes/Bio/Graphics/Glyph/Box.src/M000004.html +24 -0
  76. data/doc/classes/Bio/Graphics/Glyph/Box.src/M000032.html +24 -0
  77. data/doc/classes/Bio/Graphics/Glyph/Common.html +187 -0
  78. data/doc/classes/Bio/Graphics/Glyph/Common.src/M000004.html +18 -0
  79. data/doc/classes/Bio/Graphics/Glyph/Common.src/M000005.html +18 -0
  80. data/doc/classes/Bio/Graphics/Glyph/Common.src/M000006.html +24 -0
  81. data/doc/classes/Bio/Graphics/Glyph/Common.src/M000007.html +24 -0
  82. data/doc/classes/Bio/Graphics/Glyph/Common.src/M000033.html +18 -0
  83. data/doc/classes/Bio/Graphics/Glyph/Common.src/M000034.html +24 -0
  84. data/doc/classes/Bio/Graphics/Glyph/Common.src/M000035.html +24 -0
  85. data/doc/classes/Bio/Graphics/Glyph/CustomTestGlyph.html +139 -0
  86. data/doc/classes/Bio/Graphics/Glyph/CustomTestGlyph.src/M000037.html +22 -0
  87. data/doc/classes/Bio/Graphics/Glyph/CustomTestGlyphInFile.html +139 -0
  88. data/doc/classes/Bio/Graphics/Glyph/CustomTestGlyphInFile.src/M000038.html +22 -0
  89. data/doc/classes/Bio/Graphics/Glyph/DirectedBox.html +139 -0
  90. data/doc/classes/Bio/Graphics/Glyph/DirectedBox.src/M000009.html +31 -0
  91. data/doc/classes/Bio/Graphics/Glyph/DirectedBox.src/M000039.html +31 -0
  92. data/doc/classes/Bio/Graphics/Glyph/DirectedGeneric.html +139 -0
  93. data/doc/classes/Bio/Graphics/Glyph/DirectedGeneric.src/M000011.html +26 -0
  94. data/doc/classes/Bio/Graphics/Glyph/DirectedGeneric.src/M000013.html +26 -0
  95. data/doc/classes/Bio/Graphics/Glyph/DirectedGeneric.src/M000043.html +26 -0
  96. data/doc/classes/Bio/Graphics/Glyph/DirectedSpliced.html +139 -0
  97. data/doc/classes/Bio/Graphics/Glyph/DirectedSpliced.src/M000008.html +40 -0
  98. data/doc/classes/Bio/Graphics/Glyph/DirectedSpliced.src/M000010.html +40 -0
  99. data/doc/classes/Bio/Graphics/Glyph/DirectedSpliced.src/M000040.html +40 -0
  100. data/doc/classes/Bio/Graphics/{Panel/Track/Feature/PixelRange.html → Glyph/Dot.html} +16 -19
  101. data/doc/classes/Bio/Graphics/Glyph/Dot.src/M000013.html +22 -0
  102. data/doc/classes/Bio/Graphics/Glyph/Dot.src/M000015.html +22 -0
  103. data/doc/classes/Bio/Graphics/Glyph/Dot.src/M000045.html +22 -0
  104. data/doc/classes/Bio/Graphics/Glyph/Generic.html +139 -0
  105. data/doc/classes/Bio/Graphics/Glyph/Generic.src/M000009.html +18 -0
  106. data/doc/classes/Bio/Graphics/Glyph/Generic.src/M000011.html +18 -0
  107. data/doc/classes/Bio/Graphics/Glyph/Generic.src/M000041.html +18 -0
  108. data/doc/classes/Bio/Graphics/Glyph/Line.html +139 -0
  109. data/doc/classes/Bio/Graphics/Glyph/Line.src/M000012.html +20 -0
  110. data/doc/classes/Bio/Graphics/Glyph/Line.src/M000014.html +20 -0
  111. data/doc/classes/Bio/Graphics/Glyph/Line.src/M000044.html +20 -0
  112. data/doc/classes/Bio/Graphics/Glyph/LineWithHandles.html +139 -0
  113. data/doc/classes/Bio/Graphics/Glyph/LineWithHandles.src/M000014.html +28 -0
  114. data/doc/classes/Bio/Graphics/Glyph/LineWithHandles.src/M000016.html +28 -0
  115. data/doc/classes/Bio/Graphics/Glyph/LineWithHandles.src/M000046.html +28 -0
  116. data/doc/classes/Bio/Graphics/Glyph/Spliced.html +139 -0
  117. data/doc/classes/Bio/Graphics/Glyph/Spliced.src/M000010.html +19 -0
  118. data/doc/classes/Bio/Graphics/Glyph/Spliced.src/M000012.html +19 -0
  119. data/doc/classes/Bio/Graphics/Glyph/Spliced.src/M000042.html +19 -0
  120. data/doc/classes/Bio/Graphics/Glyph/Transcript.html +113 -0
  121. data/doc/classes/Bio/Graphics/Glyph/Triangle.html +139 -0
  122. data/doc/classes/Bio/Graphics/Glyph/Triangle.src/M000007.html +21 -0
  123. data/doc/classes/Bio/Graphics/Glyph/Triangle.src/M000008.html +21 -0
  124. data/doc/classes/Bio/Graphics/Glyph/Triangle.src/M000036.html +21 -0
  125. data/doc/classes/{ImageMap.html → Bio/Graphics/ImageMap.html} +50 -16
  126. data/doc/classes/{ImageMap.src/M000001.html → Bio/Graphics/ImageMap.src/M000030.html} +3 -3
  127. data/doc/classes/Bio/Graphics/ImageMap.src/M000031.html +18 -0
  128. data/doc/classes/Bio/Graphics/ImageMap.src/M000032.html +18 -0
  129. data/doc/classes/Bio/Graphics/ImageMap.src/M000033.html +18 -0
  130. data/doc/classes/{ImageMap.src/M000002.html → Bio/Graphics/ImageMap.src/M000034.html} +7 -4
  131. data/doc/classes/Bio/Graphics/ImageMap.src/M000035.html +24 -0
  132. data/doc/classes/Bio/Graphics/ImageMap.src/M000062.html +18 -0
  133. data/doc/classes/Bio/Graphics/ImageMap.src/M000063.html +18 -0
  134. data/doc/classes/Bio/Graphics/ImageMap.src/M000064.html +27 -0
  135. data/doc/classes/Bio/Graphics/ImageMap.src/M000065.html +24 -0
  136. data/doc/classes/{ImageMap/ImageMapElement.html → Bio/Graphics/ImageMap/Element.html} +14 -14
  137. data/doc/classes/{ImageMap/ImageMapElement.src/M000003.html → Bio/Graphics/ImageMap/Element.src/M000034.html} +3 -3
  138. data/doc/classes/{ImageMap/ImageMapElement.src/M000004.html → Bio/Graphics/ImageMap/Element.src/M000035.html} +6 -4
  139. data/doc/classes/Bio/Graphics/ImageMap/Element.src/M000036.html +19 -0
  140. data/doc/classes/Bio/Graphics/ImageMap/Element.src/M000037.html +22 -0
  141. data/doc/classes/Bio/Graphics/ImageMap/Element.src/M000066.html +19 -0
  142. data/doc/classes/Bio/Graphics/ImageMap/Element.src/M000067.html +22 -0
  143. data/doc/classes/Bio/Graphics/Panel.html +70 -69
  144. data/doc/classes/Bio/Graphics/Panel.src/M000025.html +52 -0
  145. data/doc/classes/Bio/Graphics/Panel.src/M000026.html +20 -0
  146. data/doc/classes/Bio/Graphics/Panel.src/M000027.html +98 -0
  147. data/doc/classes/Bio/Graphics/Panel.src/M000028.html +20 -0
  148. data/doc/classes/Bio/Graphics/Panel.src/M000029.html +52 -0
  149. data/doc/classes/Bio/Graphics/Panel.src/M000030.html +20 -0
  150. data/doc/classes/Bio/Graphics/Panel.src/M000031.html +98 -0
  151. data/doc/classes/Bio/Graphics/Panel.src/M000059.html +52 -0
  152. data/doc/classes/Bio/Graphics/Panel.src/M000060.html +20 -0
  153. data/doc/classes/Bio/Graphics/Panel.src/M000061.html +98 -0
  154. data/doc/classes/Bio/Graphics/{Panel/Ruler.html → Ruler.html} +50 -21
  155. data/doc/classes/Bio/Graphics/Ruler.src/M000015.html +30 -0
  156. data/doc/classes/Bio/Graphics/Ruler.src/M000016.html +20 -0
  157. data/doc/classes/Bio/Graphics/Ruler.src/M000017.html +30 -0
  158. data/doc/classes/Bio/Graphics/Ruler.src/M000018.html +20 -0
  159. data/doc/classes/Bio/Graphics/Ruler.src/M000019.html +26 -0
  160. data/doc/classes/Bio/Graphics/Ruler.src/M000020.html +45 -0
  161. data/doc/classes/Bio/Graphics/Ruler.src/M000047.html +30 -0
  162. data/doc/classes/Bio/Graphics/Ruler.src/M000048.html +20 -0
  163. data/doc/classes/Bio/Graphics/Ruler.src/M000049.html +26 -0
  164. data/doc/classes/Bio/Graphics/Ruler.src/M000050.html +45 -0
  165. data/doc/classes/Bio/Graphics/SubFeature.html +348 -0
  166. data/doc/classes/Bio/Graphics/SubFeature.src/M000001.html +73 -0
  167. data/doc/classes/Bio/Graphics/SubFeature.src/M000002.html +69 -0
  168. data/doc/classes/Bio/Graphics/SubFeature.src/M000023.html +73 -0
  169. data/doc/classes/Bio/Graphics/SubFeature.src/M000024.html +69 -0
  170. data/doc/classes/Bio/Graphics/SubFeature.src/M000027.html +73 -0
  171. data/doc/classes/Bio/Graphics/SubFeature.src/M000028.html +69 -0
  172. data/doc/classes/Bio/Graphics/SubFeature.src/M000057.html +73 -0
  173. data/doc/classes/Bio/Graphics/SubFeature.src/M000058.html +69 -0
  174. data/doc/classes/Bio/Graphics/{Panel/Track.html → Track.html} +67 -69
  175. data/doc/classes/Bio/Graphics/Track.src/M000017.html +39 -0
  176. data/doc/classes/Bio/Graphics/Track.src/M000018.html +37 -0
  177. data/doc/classes/Bio/Graphics/Track.src/M000019.html +45 -0
  178. data/doc/classes/Bio/Graphics/Track.src/M000020.html +41 -0
  179. data/doc/classes/Bio/Graphics/Track.src/M000021.html +39 -0
  180. data/doc/classes/Bio/Graphics/Track.src/M000022.html +37 -0
  181. data/doc/classes/Bio/Graphics/Track.src/M000023.html +45 -0
  182. data/doc/classes/Bio/Graphics/Track.src/M000051.html +39 -0
  183. data/doc/classes/Bio/Graphics/Track.src/M000052.html +37 -0
  184. data/doc/classes/Bio/Graphics/Track.src/M000053.html +45 -0
  185. data/doc/classes/Range.html +129 -0
  186. data/doc/classes/String.html +167 -0
  187. data/doc/classes/String.src/M000001.html +18 -0
  188. data/doc/classes/String.src/M000002.html +18 -0
  189. data/doc/classes/String.src/M000003.html +23 -0
  190. data/doc/classes/String.src/M000029.html +18 -0
  191. data/doc/classes/String.src/M000030.html +18 -0
  192. data/doc/classes/String.src/M000031.html +23 -0
  193. data/doc/classes/TestCustomGlyph.html +137 -0
  194. data/doc/classes/TestCustomGlyph.src/M000025.html +25 -0
  195. data/doc/classes/TestCustomGlyphInFile.html +167 -0
  196. data/doc/classes/TestCustomGlyphInFile.src/M000026.html +19 -0
  197. data/doc/classes/TestCustomGlyphInFile.src/M000027.html +25 -0
  198. data/doc/classes/TestCustomGlyphInFile.src/M000028.html +18 -0
  199. data/doc/classes/TestExtensions.html +152 -0
  200. data/doc/classes/TestExtensions.src/M000015.html +22 -0
  201. data/doc/classes/TestExtensions.src/M000016.html +25 -0
  202. data/doc/classes/TestFeature.html +152 -0
  203. data/doc/classes/TestFeature.src/M000017.html +19 -0
  204. data/doc/classes/TestFeature.src/M000018.html +21 -0
  205. data/doc/classes/TestImageMap.html +182 -0
  206. data/doc/classes/TestImageMap.src/M000019.html +22 -0
  207. data/doc/classes/TestImageMap.src/M000020.html +56 -0
  208. data/doc/classes/TestImageMap.src/M000021.html +56 -0
  209. data/doc/classes/TestImageMap.src/M000022.html +20 -0
  210. data/doc/classes/TestPanel.html +276 -0
  211. data/doc/classes/TestPanel.src/M000001.html +18 -0
  212. data/doc/classes/TestPanel.src/M000002.html +61 -0
  213. data/doc/classes/TestPanel.src/M000003.html +35 -0
  214. data/doc/classes/TestPanel.src/M000004.html +54 -0
  215. data/doc/classes/TestPanel.src/M000005.html +54 -0
  216. data/doc/classes/TestPanel.src/M000006.html +41 -0
  217. data/doc/classes/TestPanel.src/M000007.html +36 -0
  218. data/doc/classes/TestPanel.src/M000008.html +20 -0
  219. data/doc/classes/TestPanel.src/M000009.html +26 -0
  220. data/doc/classes/TestPanel.src/M000010.html +21 -0
  221. data/doc/classes/TestRuler.html +152 -0
  222. data/doc/classes/TestRuler.src/M000013.html +22 -0
  223. data/doc/classes/TestRuler.src/M000014.html +31 -0
  224. data/doc/classes/TestSubFeature.html +152 -0
  225. data/doc/classes/TestSubFeature.src/M000023.html +21 -0
  226. data/doc/classes/TestSubFeature.src/M000024.html +18 -0
  227. data/doc/classes/TestTrack.html +152 -0
  228. data/doc/classes/TestTrack.src/M000011.html +19 -0
  229. data/doc/classes/TestTrack.src/M000012.html +23 -0
  230. data/doc/created.rid +1 -1
  231. data/doc/files/README_DEV.html +399 -70
  232. data/doc/files/TUTORIAL.html +188 -67
  233. data/doc/files/lib/bio-graphics_rb.html +3 -2
  234. data/doc/files/lib/bio/graphics/feature_rb.html +12 -6
  235. data/doc/files/lib/bio/graphics/glyphs/box_rb.html +113 -0
  236. data/doc/files/lib/bio/graphics/glyphs/common_rb.html +113 -0
  237. data/doc/files/lib/bio/graphics/glyphs/directed_box_rb.html +113 -0
  238. data/doc/files/lib/bio/graphics/glyphs/directed_generic_rb.html +113 -0
  239. data/doc/files/lib/bio/graphics/glyphs/directed_spliced_rb.html +113 -0
  240. data/doc/files/lib/bio/graphics/glyphs/dot_rb.html +113 -0
  241. data/doc/files/lib/bio/graphics/glyphs/generic_rb.html +113 -0
  242. data/doc/files/lib/bio/graphics/glyphs/line_rb.html +113 -0
  243. data/doc/files/lib/bio/graphics/glyphs/line_with_handles_rb.html +113 -0
  244. data/doc/files/lib/bio/graphics/glyphs/spliced_rb.html +113 -0
  245. data/doc/files/lib/bio/graphics/glyphs/transcript_rb.html +113 -0
  246. data/doc/files/lib/bio/graphics/glyphs/triangle_rb.html +113 -0
  247. data/doc/files/lib/bio/graphics/image_map_rb.html +3 -2
  248. data/doc/files/lib/bio/graphics/panel_rb.html +10 -2
  249. data/doc/files/lib/bio/graphics/ruler_rb.html +3 -2
  250. data/doc/files/lib/bio/graphics/subfeature_rb.html +114 -0
  251. data/doc/files/lib/bio/graphics/track_rb.html +3 -2
  252. data/doc/files/lib/feature_rb.html +101 -0
  253. data/doc/files/samples/arkdb_features_rb.html +101 -0
  254. data/doc/files/samples/glyph_showcase_rb.html +108 -0
  255. data/doc/files/samples/protein_domains_rb.html +115 -0
  256. data/doc/files/samples/subfeatures_rb.html +108 -0
  257. data/doc/files/scripts/gff2png_rb.html +154 -0
  258. data/doc/files/test/unit/custom_glyph_in_file_rb.html +101 -0
  259. data/doc/files/test/unit/test_class_extensions_rb.html +108 -0
  260. data/doc/files/test/unit/test_creation_rb.html +108 -0
  261. data/doc/files/test/unit/test_custom_glyph_rb.html +108 -0
  262. data/doc/files/test/unit/test_draw_rb.html +108 -0
  263. data/doc/files/test/unit/test_imagemap_rb.html +108 -0
  264. data/doc/files/test/unit/test_subfeatures_rb.html +108 -0
  265. data/doc/fr_class_index.html +24 -6
  266. data/doc/fr_file_index.html +14 -0
  267. data/doc/fr_method_index.html +51 -19
  268. data/doc/images/glyph_showcase.png +0 -0
  269. data/doc/images/terms.svg +146 -132
  270. data/images/glyph_showcase.png +0 -0
  271. data/lib/bio-graphics.rb +38 -6
  272. data/lib/bio/graphics/feature.rb +212 -440
  273. data/lib/bio/graphics/glyphs/box.rb +21 -0
  274. data/lib/bio/graphics/glyphs/common.rb +149 -0
  275. data/lib/bio/graphics/glyphs/directed_box.rb +28 -0
  276. data/lib/bio/graphics/glyphs/directed_generic.rb +23 -0
  277. data/lib/bio/graphics/glyphs/directed_spliced.rb +39 -0
  278. data/lib/bio/graphics/glyphs/dot.rb +21 -0
  279. data/lib/bio/graphics/glyphs/generic.rb +15 -0
  280. data/lib/bio/graphics/glyphs/line.rb +17 -0
  281. data/lib/bio/graphics/glyphs/line_with_handles.rb +25 -0
  282. data/lib/bio/graphics/glyphs/spliced.rb +16 -0
  283. data/lib/bio/graphics/glyphs/transcript.rb +12 -0
  284. data/lib/bio/graphics/glyphs/triangle.rb +18 -0
  285. data/lib/bio/graphics/image_map.rb +25 -4
  286. data/lib/bio/graphics/panel.rb +266 -209
  287. data/lib/bio/graphics/ruler.rb +95 -96
  288. data/lib/bio/graphics/subfeature.rb +187 -0
  289. data/lib/bio/graphics/track.rb +155 -156
  290. data/lib/feature.rb +204 -0
  291. data/samples/arkdb_features.rb +10 -8
  292. data/samples/glyph_showcase.rb +58 -22
  293. data/samples/protein_domains.rb +19 -0
  294. data/samples/subfeatures.rb +31 -0
  295. data/test/unit/custom_glyph_in_file.rb +12 -0
  296. data/test/unit/data.txt +32 -0
  297. data/test/unit/test_class_extensions.rb +23 -0
  298. data/test/unit/test_creation.rb +43 -13
  299. data/test/unit/test_custom_glyph.rb +50 -0
  300. data/test/unit/test_draw.rb +211 -0
  301. data/test/unit/test_imagemap.rb +134 -0
  302. data/test/unit/test_subfeatures.rb +17 -0
  303. metadata +396 -119
  304. data/doc/classes/Bio/Graphics/Panel.src/M000005.html +0 -29
  305. data/doc/classes/Bio/Graphics/Panel.src/M000006.html +0 -19
  306. data/doc/classes/Bio/Graphics/Panel.src/M000007.html +0 -68
  307. data/doc/classes/Bio/Graphics/Panel/Ruler.src/M000008.html +0 -20
  308. data/doc/classes/Bio/Graphics/Panel/Ruler.src/M000009.html +0 -28
  309. data/doc/classes/Bio/Graphics/Panel/Ruler.src/M000010.html +0 -54
  310. data/doc/classes/Bio/Graphics/Panel/Ruler.src/M000013.html +0 -20
  311. data/doc/classes/Bio/Graphics/Panel/Ruler.src/M000014.html +0 -20
  312. data/doc/classes/Bio/Graphics/Panel/Ruler.src/M000015.html +0 -28
  313. data/doc/classes/Bio/Graphics/Panel/Ruler.src/M000016.html +0 -59
  314. data/doc/classes/Bio/Graphics/Panel/Ruler.src/M000017.html +0 -20
  315. data/doc/classes/Bio/Graphics/Panel/Ruler.src/M000018.html +0 -28
  316. data/doc/classes/Bio/Graphics/Panel/Ruler.src/M000019.html +0 -59
  317. data/doc/classes/Bio/Graphics/Panel/Track.src/M000008.html +0 -26
  318. data/doc/classes/Bio/Graphics/Panel/Track.src/M000009.html +0 -42
  319. data/doc/classes/Bio/Graphics/Panel/Track.src/M000010.html +0 -52
  320. data/doc/classes/Bio/Graphics/Panel/Track.src/M000011.html +0 -23
  321. data/doc/classes/Bio/Graphics/Panel/Track.src/M000012.html +0 -43
  322. data/doc/classes/Bio/Graphics/Panel/Track.src/M000013.html +0 -259
  323. data/doc/classes/Bio/Graphics/Panel/Track/Feature.src/M000011.html +0 -65
  324. data/doc/classes/Bio/Graphics/Panel/Track/Feature.src/M000012.html +0 -39
  325. data/doc/classes/Bio/Graphics/Panel/Track/Feature.src/M000013.html +0 -27
  326. data/doc/classes/Bio/Graphics/Panel/Track/Feature.src/M000014.html +0 -225
  327. data/doc/classes/Bio/Graphics/Panel/Track/Feature.src/M000015.html +0 -48
  328. data/doc/classes/Bio/Graphics/Panel/Track/Feature/PixelRange.src/M000012.html +0 -18
  329. data/doc/classes/Bio/Graphics/Panel/Track/Feature/PixelRange.src/M000013.html +0 -18
  330. data/doc/classes/Bio/Graphics/Panel/Track/Feature/PixelRange.src/M000015.html +0 -18
  331. data/doc/classes/Bio/Graphics/Panel/Track/Feature/PixelRange.src/M000016.html +0 -18
@@ -1,26 +0,0 @@
1
- <?xml version="1.0" encoding="iso-8859-1"?>
2
- <!DOCTYPE html
3
- PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
-
6
- <html>
7
- <head>
8
- <title>new (Bio::Graphics::Panel::Track)</title>
9
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
- <link rel="stylesheet" href="../../../../.././rdoc-style.css" type="text/css" media="screen" />
11
- </head>
12
- <body class="standalone-code">
13
- <pre><span class="ruby-comment cmt"># File lib/bio/graphics/track.rb, line 39</span>
14
- <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">panel</span>, <span class="ruby-identifier">name</span>, <span class="ruby-identifier">label</span> = <span class="ruby-keyword kw">true</span>, <span class="ruby-identifier">colour</span> = [<span class="ruby-value">0</span>,<span class="ruby-value">0</span>,<span class="ruby-value">1</span>], <span class="ruby-identifier">glyph</span> = <span class="ruby-identifier">:generic</span>)
15
- <span class="ruby-ivar">@panel</span> = <span class="ruby-identifier">panel</span>
16
- <span class="ruby-ivar">@name</span> = <span class="ruby-identifier">name</span>
17
- <span class="ruby-ivar">@show_label</span> = <span class="ruby-identifier">label</span>
18
- <span class="ruby-ivar">@colour</span> = <span class="ruby-identifier">colour</span>
19
- <span class="ruby-ivar">@glyph</span> = <span class="ruby-identifier">glyph</span>
20
- <span class="ruby-ivar">@features</span> = <span class="ruby-constant">Array</span>.<span class="ruby-identifier">new</span>
21
- <span class="ruby-ivar">@number_of_feature_rows</span> = <span class="ruby-value">0</span>
22
- <span class="ruby-ivar">@vertical_offset</span> = <span class="ruby-value">0</span>
23
- <span class="ruby-ivar">@grid</span> = <span class="ruby-constant">Hash</span>.<span class="ruby-identifier">new</span>
24
- <span class="ruby-keyword kw">end</span></pre>
25
- </body>
26
- </html>
@@ -1,42 +0,0 @@
1
- <?xml version="1.0" encoding="iso-8859-1"?>
2
- <!DOCTYPE html
3
- PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
-
6
- <html>
7
- <head>
8
- <title>add_feature (Bio::Graphics::Panel::Track)</title>
9
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
- <link rel="stylesheet" href="../../../../.././rdoc-style.css" type="text/css" media="screen" />
11
- </head>
12
- <body class="standalone-code">
13
- <pre><span class="ruby-comment cmt"># File lib/bio/graphics/track.rb, line 80</span>
14
- <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_feature</span>(<span class="ruby-identifier">name</span>, <span class="ruby-identifier">location_string</span> = <span class="ruby-value str">'1..'</span> <span class="ruby-operator">+</span> <span class="ruby-ivar">@panel</span>.<span class="ruby-identifier">length</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-identifier">link</span> = <span class="ruby-keyword kw">nil</span>)
15
- <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">link</span> <span class="ruby-operator">==</span> <span class="ruby-value str">''</span>
16
- <span class="ruby-identifier">link</span> = <span class="ruby-keyword kw">nil</span>
17
- <span class="ruby-keyword kw">end</span>
18
-
19
- <span class="ruby-comment cmt"># Calculate the ultimate start and stop of the feature: the start
20
- <span class="ruby-comment cmt"># of the first subfeature (e.g. exon) and the stop of the last one.
21
- <span class="ruby-comment cmt"># The only reason we want to know these positions, is because we want
22
- <span class="ruby-comment cmt"># to determine if the feature falls within the view of the image or
23
- <span class="ruby-comment cmt"># not (see below).
24
- <span class="ruby-identifier">location_object</span> = <span class="ruby-constant">Bio</span><span class="ruby-operator">::</span><span class="ruby-constant">Locations</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">location_string</span>)
25
- <span class="ruby-identifier">start</span> = <span class="ruby-identifier">location_object</span>.<span class="ruby-identifier">collect</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">l</span><span class="ruby-operator">|</span> <span class="ruby-identifier">l</span>.<span class="ruby-identifier">from</span>}.<span class="ruby-identifier">min</span>.<span class="ruby-identifier">to_i</span>
26
- <span class="ruby-identifier">stop</span> = <span class="ruby-identifier">location_object</span>.<span class="ruby-identifier">collect</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">l</span><span class="ruby-operator">|</span> <span class="ruby-identifier">l</span>.<span class="ruby-identifier">to</span>}.<span class="ruby-identifier">max</span>.<span class="ruby-identifier">to_i</span>
27
-
28
- <span class="ruby-comment cmt"># If the feature wouldn't show because it's not in the region we're
29
- <span class="ruby-comment cmt"># looking at, don't bother storing the stuff. I think this makes huge
30
- <span class="ruby-comment cmt"># speed and memory differences if you've got a chromosome with
31
- <span class="ruby-comment cmt"># thousands of features.
32
- <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">stop</span> <span class="ruby-operator">&lt;=</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">panel</span>.<span class="ruby-identifier">display_start</span> <span class="ruby-keyword kw">or</span> <span class="ruby-identifier">start</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">panel</span>.<span class="ruby-identifier">display_stop</span>
33
- <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">nil</span>
34
- <span class="ruby-keyword kw">else</span> <span class="ruby-comment cmt">#elsif start &gt;= panel.display_start and stop &lt;= panel.display_stop
35
- <span class="ruby-ivar">@features</span>.<span class="ruby-identifier">push</span>(<span class="ruby-constant">Bio</span><span class="ruby-operator">::</span><span class="ruby-constant">Graphics</span><span class="ruby-operator">::</span><span class="ruby-constant">Panel</span><span class="ruby-operator">::</span><span class="ruby-constant">Track</span><span class="ruby-operator">::</span><span class="ruby-constant">Feature</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>, <span class="ruby-identifier">name</span>, <span class="ruby-identifier">location_object</span>, <span class="ruby-identifier">link</span>))
36
- <span class="ruby-keyword kw">return</span> <span class="ruby-ivar">@features</span>[<span class="ruby-value">-1</span>]
37
- <span class="ruby-keyword kw">end</span>
38
-
39
- <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">self</span>
40
- <span class="ruby-keyword kw">end</span></pre>
41
- </body>
42
- </html>
@@ -1,52 +0,0 @@
1
- <?xml version="1.0" encoding="iso-8859-1"?>
2
- <!DOCTYPE html
3
- PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
-
6
- <html>
7
- <head>
8
- <title>draw (Bio::Graphics::Panel::Track)</title>
9
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
- <link rel="stylesheet" href="../../../../.././rdoc-style.css" type="text/css" media="screen" />
11
- </head>
12
- <body class="standalone-code">
13
- <pre><span class="ruby-comment cmt"># File lib/bio/graphics/track.rb, line 115</span>
14
- <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">draw</span>(<span class="ruby-identifier">panel_drawing</span>)
15
- <span class="ruby-identifier">track_drawing</span> = <span class="ruby-constant">Cairo</span><span class="ruby-operator">::</span><span class="ruby-constant">Context</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">panel_drawing</span>)
16
-
17
- <span class="ruby-comment cmt"># Draw thin line above title
18
- <span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">set_source_rgb</span>(<span class="ruby-value">0</span><span class="ruby-value">.75</span>,<span class="ruby-value">0</span><span class="ruby-value">.75</span>,<span class="ruby-value">0</span><span class="ruby-value">.75</span>)
19
- <span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">move_to</span>(<span class="ruby-value">0</span>, <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">vertical_offset</span>)
20
- <span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">line_to</span>(<span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">panel</span>.<span class="ruby-identifier">width</span>, <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">vertical_offset</span>)
21
- <span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">stroke</span>
22
-
23
- <span class="ruby-comment cmt"># Draw track title
24
- <span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">set_source_rgb</span>(<span class="ruby-value">0</span>,<span class="ruby-value">0</span>,<span class="ruby-value">0</span>)
25
- <span class="ruby-comment cmt"># track_drawing.select_font_face('Georgia',1,1)
26
- <span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">select_font_face</span>(<span class="ruby-operator">*</span>(<span class="ruby-constant">FONT</span>))
27
- <span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">set_font_size</span>(<span class="ruby-constant">TRACK_HEADER_HEIGHT</span>)
28
- <span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">move_to</span>(<span class="ruby-value">0</span>,<span class="ruby-constant">TRACK_HEADER_HEIGHT</span> <span class="ruby-operator">+</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">vertical_offset</span> <span class="ruby-operator">+</span> <span class="ruby-value">10</span>)
29
- <span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">show_text</span>(<span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">name</span>)
30
-
31
- <span class="ruby-comment cmt"># Draw the features
32
- <span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">save</span> <span class="ruby-keyword kw">do</span>
33
- <span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">translate</span>(<span class="ruby-value">0</span>, <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">vertical_offset</span> <span class="ruby-operator">+</span> <span class="ruby-constant">TRACK_HEADER_HEIGHT</span>)
34
- <span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">set_source_rgb</span>(<span class="ruby-ivar">@colour</span>)
35
-
36
- <span class="ruby-ivar">@features</span>.<span class="ruby-identifier">sort_by</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">f</span><span class="ruby-operator">|</span> <span class="ruby-identifier">f</span>.<span class="ruby-identifier">start</span>}.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">feature</span><span class="ruby-operator">|</span>
37
- <span class="ruby-comment cmt"># Don't even bother if the feature is not in the view
38
- <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">feature</span>.<span class="ruby-identifier">stop</span> <span class="ruby-operator">&lt;=</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">panel</span>.<span class="ruby-identifier">display_start</span> <span class="ruby-keyword kw">or</span> <span class="ruby-identifier">feature</span>.<span class="ruby-identifier">start</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">panel</span>.<span class="ruby-identifier">display_stop</span>
39
- <span class="ruby-keyword kw">next</span>
40
- <span class="ruby-keyword kw">else</span>
41
- <span class="ruby-identifier">feature</span>.<span class="ruby-identifier">draw</span>(<span class="ruby-identifier">track_drawing</span>)
42
- <span class="ruby-keyword kw">end</span>
43
- <span class="ruby-keyword kw">end</span>
44
-
45
- <span class="ruby-keyword kw">end</span>
46
-
47
- <span class="ruby-ivar">@number_of_feature_rows</span> = ( <span class="ruby-ivar">@grid</span>.<span class="ruby-identifier">keys</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span> ) <span class="ruby-operator">?</span> <span class="ruby-value">1</span> <span class="ruby-operator">:</span> <span class="ruby-ivar">@grid</span>.<span class="ruby-identifier">keys</span>.<span class="ruby-identifier">max</span> <span class="ruby-operator">+</span> <span class="ruby-value">1</span>
48
-
49
- <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">panel_drawing</span>
50
- <span class="ruby-keyword kw">end</span></pre>
51
- </body>
52
- </html>
@@ -1,23 +0,0 @@
1
- <?xml version="1.0" encoding="iso-8859-1"?>
2
- <!DOCTYPE html
3
- PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
-
6
- <html>
7
- <head>
8
- <title>new (Bio::Graphics::Panel::Track)</title>
9
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
- <link rel="stylesheet" href="../../../../.././rdoc-style.css" type="text/css" media="screen" />
11
- </head>
12
- <body class="standalone-code">
13
- <pre><span class="ruby-comment cmt"># File lib/bio/graphics/track.rb, line 38</span>
14
- <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">panel</span>, <span class="ruby-identifier">name</span>, <span class="ruby-identifier">feature_colour</span> = [<span class="ruby-value">0</span>,<span class="ruby-value">0</span>,<span class="ruby-value">1</span>], <span class="ruby-identifier">feature_glyph</span> = <span class="ruby-value str">'generic'</span>)
15
- <span class="ruby-ivar">@panel</span> = <span class="ruby-identifier">panel</span>
16
- <span class="ruby-ivar">@name</span> = <span class="ruby-identifier">name</span>
17
- <span class="ruby-ivar">@feature_colour</span> = <span class="ruby-identifier">feature_colour</span>
18
- <span class="ruby-ivar">@feature_glyph</span> = <span class="ruby-identifier">feature_glyph</span>
19
- <span class="ruby-ivar">@features</span> = <span class="ruby-constant">Array</span>.<span class="ruby-identifier">new</span>
20
- <span class="ruby-ivar">@number_of_times_bumped</span> = <span class="ruby-value">0</span>
21
- <span class="ruby-keyword kw">end</span></pre>
22
- </body>
23
- </html>
@@ -1,43 +0,0 @@
1
- <?xml version="1.0" encoding="iso-8859-1"?>
2
- <!DOCTYPE html
3
- PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
-
6
- <html>
7
- <head>
8
- <title>add_feature (Bio::Graphics::Panel::Track)</title>
9
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
- <link rel="stylesheet" href="../../../../.././rdoc-style.css" type="text/css" media="screen" />
11
- </head>
12
- <body class="standalone-code">
13
- <pre><span class="ruby-comment cmt"># File lib/bio/graphics/track.rb, line 76</span>
14
- <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_feature</span>(<span class="ruby-identifier">name</span>, <span class="ruby-identifier">location_string</span> = <span class="ruby-value str">'0..'</span> <span class="ruby-operator">+</span> (<span class="ruby-ivar">@panel</span>.<span class="ruby-identifier">width</span> <span class="ruby-operator">*</span> <span class="ruby-ivar">@panel</span>.<span class="ruby-identifier">rescale_factor</span>).<span class="ruby-identifier">to_s</span>, <span class="ruby-identifier">link</span> = <span class="ruby-keyword kw">nil</span>)
15
- <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">link</span> <span class="ruby-operator">==</span> <span class="ruby-value str">''</span>
16
- <span class="ruby-identifier">link</span> = <span class="ruby-keyword kw">nil</span>
17
- <span class="ruby-keyword kw">end</span>
18
- <span class="ruby-identifier">location_object</span> = <span class="ruby-constant">Bio</span><span class="ruby-operator">::</span><span class="ruby-constant">Locations</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">location_string</span>)
19
- <span class="ruby-identifier">start</span> = <span class="ruby-identifier">location_object</span>.<span class="ruby-identifier">collect</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">l</span><span class="ruby-operator">|</span> <span class="ruby-identifier">l</span>.<span class="ruby-identifier">from</span>}.<span class="ruby-identifier">min</span>.<span class="ruby-identifier">to_i</span>
20
- <span class="ruby-identifier">stop</span> = <span class="ruby-identifier">location_object</span>.<span class="ruby-identifier">collect</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">l</span><span class="ruby-operator">|</span> <span class="ruby-identifier">l</span>.<span class="ruby-identifier">to</span>}.<span class="ruby-identifier">max</span>.<span class="ruby-identifier">to_i</span>
21
-
22
- <span class="ruby-comment cmt">#if start &lt; 0 or stop &gt; (panel.width.to_f * panel.rescale_factor.to_f).to_i
23
- <span class="ruby-comment cmt"># raise &quot;ERROR: feature &quot; + name + &quot; has coordinates that lie outside of panel&quot;
24
- <span class="ruby-comment cmt">#end
25
- <span class="ruby-comment cmt">#@features.push(Bio::Graphics::Panel::Track::Feature.new(self, name, location_object, link))
26
- <span class="ruby-comment cmt">#return @features[-1]
27
-
28
- <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">stop</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">panel</span>.<span class="ruby-identifier">display_start</span> <span class="ruby-keyword kw">or</span> <span class="ruby-identifier">start</span> <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">panel</span>.<span class="ruby-identifier">display_stop</span>
29
- <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">nil</span>
30
- <span class="ruby-keyword kw">else</span> <span class="ruby-comment cmt">#elsif start &gt;= panel.display_start and stop &lt;= panel.display_stop
31
- <span class="ruby-ivar">@features</span>.<span class="ruby-identifier">push</span>(<span class="ruby-constant">Bio</span><span class="ruby-operator">::</span><span class="ruby-constant">Graphics</span><span class="ruby-operator">::</span><span class="ruby-constant">Panel</span><span class="ruby-operator">::</span><span class="ruby-constant">Track</span><span class="ruby-operator">::</span><span class="ruby-constant">Feature</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>, <span class="ruby-identifier">name</span>, <span class="ruby-identifier">location_object</span>, <span class="ruby-identifier">link</span>))
32
- <span class="ruby-keyword kw">return</span> <span class="ruby-ivar">@features</span>[<span class="ruby-value">-1</span>]
33
- <span class="ruby-comment cmt"># TODO: chop bits of that extend beyond display
34
- <span class="ruby-comment cmt">#elsif ( start &gt;= panel.display_start and stop &gt; panel.display_stop ) #Feature extends beyond right border
35
- <span class="ruby-comment cmt"># new_location_object = Bio::Locations.new
36
- <span class="ruby-comment cmt"># location_object.each do |l|
37
- <span class="ruby-comment cmt"># if l.to &lt;= panel.display_stop
38
- <span class="ruby-comment cmt"># new_location_object.push(Bio::Location.new('l
39
- <span class="ruby-comment cmt"># end
40
- <span class="ruby-keyword kw">end</span>
41
- <span class="ruby-keyword kw">end</span></pre>
42
- </body>
43
- </html>
@@ -1,259 +0,0 @@
1
- <?xml version="1.0" encoding="iso-8859-1"?>
2
- <!DOCTYPE html
3
- PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
-
6
- <html>
7
- <head>
8
- <title>draw (Bio::Graphics::Panel::Track)</title>
9
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
- <link rel="stylesheet" href="../../../../.././rdoc-style.css" type="text/css" media="screen" />
11
- </head>
12
- <body class="standalone-code">
13
- <pre><span class="ruby-comment cmt"># File lib/bio/graphics/track.rb, line 114</span>
14
- <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">draw</span>(<span class="ruby-identifier">panel_drawing</span>, <span class="ruby-identifier">vertical_offset</span>)
15
- <span class="ruby-identifier">track_drawing</span> = <span class="ruby-constant">Cairo</span><span class="ruby-operator">::</span><span class="ruby-constant">Context</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">panel_drawing</span>)
16
-
17
- <span class="ruby-comment cmt"># Draw thin line above title
18
- <span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">set_source_rgb</span>(<span class="ruby-value">0</span><span class="ruby-value">.75</span>,<span class="ruby-value">0</span><span class="ruby-value">.75</span>,<span class="ruby-value">0</span><span class="ruby-value">.75</span>)
19
- <span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">move_to</span>(<span class="ruby-value">0</span>, <span class="ruby-identifier">vertical_offset</span>)
20
- <span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">line_to</span>(<span class="ruby-identifier">panel</span>.<span class="ruby-identifier">width</span>, <span class="ruby-identifier">vertical_offset</span>)
21
- <span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">stroke</span>
22
-
23
- <span class="ruby-comment cmt"># Draw track title
24
- <span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">set_source_rgb</span>(<span class="ruby-value">0</span>,<span class="ruby-value">0</span>,<span class="ruby-value">0</span>)
25
- <span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">select_font_face</span>(<span class="ruby-value str">'Georgia'</span>,<span class="ruby-value">1</span>,<span class="ruby-value">1</span>)
26
- <span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">set_font_size</span>(<span class="ruby-constant">TRACK_HEADER_HEIGHT</span>)
27
- <span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">move_to</span>(<span class="ruby-value">0</span>,<span class="ruby-constant">TRACK_HEADER_HEIGHT</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">vertical_offset</span> <span class="ruby-operator">+</span> <span class="ruby-value">10</span>)
28
- <span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">show_text</span>(<span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">name</span>)
29
-
30
- <span class="ruby-comment cmt"># Draw the features
31
- <span class="ruby-identifier">grid</span> = <span class="ruby-constant">Hash</span>.<span class="ruby-identifier">new</span>
32
-
33
- <span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">save</span> <span class="ruby-keyword kw">do</span>
34
- <span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">translate</span>(<span class="ruby-value">0</span>, <span class="ruby-identifier">vertical_offset</span> <span class="ruby-operator">+</span> <span class="ruby-constant">TRACK_HEADER_HEIGHT</span>)
35
- <span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">set_source_rgb</span>(<span class="ruby-ivar">@feature_colour</span>)
36
-
37
- <span class="ruby-comment cmt"># Now draw the features
38
- <span class="ruby-ivar">@features</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">feature</span><span class="ruby-operator">|</span>
39
- <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">feature</span>.<span class="ruby-identifier">stop</span> <span class="ruby-operator">&lt;=</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">panel</span>.<span class="ruby-identifier">display_start</span> <span class="ruby-keyword kw">or</span> <span class="ruby-identifier">feature</span>.<span class="ruby-identifier">start</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">panel</span>.<span class="ruby-identifier">display_stop</span>
40
- <span class="ruby-keyword kw">next</span>
41
- <span class="ruby-keyword kw">else</span>
42
-
43
- <span class="ruby-identifier">feature_drawn</span> = <span class="ruby-keyword kw">false</span>
44
- <span class="ruby-identifier">feature_range</span> = (<span class="ruby-identifier">feature</span>.<span class="ruby-identifier">start</span>.<span class="ruby-identifier">floor</span><span class="ruby-operator">..</span><span class="ruby-identifier">feature</span>.<span class="ruby-identifier">stop</span>.<span class="ruby-identifier">ceil</span>)
45
- <span class="ruby-identifier">row</span> = <span class="ruby-value">1</span>
46
- <span class="ruby-identifier">row_available</span> = <span class="ruby-keyword kw">true</span>
47
- <span class="ruby-keyword kw">until</span> <span class="ruby-identifier">feature_drawn</span>
48
- <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span> <span class="ruby-identifier">grid</span>[<span class="ruby-identifier">row</span>].<span class="ruby-identifier">nil?</span>
49
- <span class="ruby-identifier">grid</span>[<span class="ruby-identifier">row</span>].<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">covered</span><span class="ruby-operator">|</span>
50
- <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">feature_range</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">covered</span>.<span class="ruby-identifier">first</span>) <span class="ruby-keyword kw">or</span> <span class="ruby-identifier">covered</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">feature_range</span>.<span class="ruby-identifier">first</span>)
51
- <span class="ruby-identifier">row_available</span> = <span class="ruby-keyword kw">false</span>
52
- <span class="ruby-keyword kw">end</span>
53
- <span class="ruby-keyword kw">end</span>
54
- <span class="ruby-keyword kw">end</span>
55
-
56
- <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span> <span class="ruby-identifier">row_available</span>
57
- <span class="ruby-identifier">row</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
58
- <span class="ruby-identifier">row_available</span> = <span class="ruby-keyword kw">true</span>
59
- <span class="ruby-keyword kw">else</span>
60
- <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">grid</span>[<span class="ruby-identifier">row</span>].<span class="ruby-identifier">nil?</span>
61
- <span class="ruby-identifier">grid</span>[<span class="ruby-identifier">row</span>] = <span class="ruby-constant">Array</span>.<span class="ruby-identifier">new</span>
62
- <span class="ruby-keyword kw">end</span>
63
- <span class="ruby-identifier">grid</span>[<span class="ruby-identifier">row</span>].<span class="ruby-identifier">push</span>(<span class="ruby-identifier">feature_range</span>)
64
-
65
- <span class="ruby-comment cmt"># There are 2 cases where we don't want to draw arrows on
66
- <span class="ruby-comment cmt"># features:
67
- <span class="ruby-comment cmt"># (a) when the picture is really zoomed out, features are
68
- <span class="ruby-comment cmt"># so small that the arrow itself is too big
69
- <span class="ruby-comment cmt"># (b) if a directed feature on the fw strand extends beyond
70
- <span class="ruby-comment cmt"># the end of the picture, the arrow is out of view. This
71
- <span class="ruby-comment cmt"># is the same as considering the feature as undirected.
72
- <span class="ruby-comment cmt"># The same obviously goes for features on the reverse
73
- <span class="ruby-comment cmt"># strand that extend beyond the left side of the image.
74
- <span class="ruby-comment cmt">#
75
- <span class="ruby-comment cmt"># (a) Zoomed out
76
- <span class="ruby-identifier">replace_directed_with_undirected</span> = <span class="ruby-keyword kw">false</span>
77
- <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">feature</span>.<span class="ruby-identifier">stop</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">feature</span>.<span class="ruby-identifier">start</span>).<span class="ruby-identifier">to_f</span><span class="ruby-operator">/</span><span class="ruby-identifier">panel</span>.<span class="ruby-identifier">rescale_factor</span>.<span class="ruby-identifier">to_f</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">2</span>
78
- <span class="ruby-identifier">replace_directed_with_undirected</span> = <span class="ruby-keyword kw">true</span>
79
- <span class="ruby-keyword kw">end</span>
80
- <span class="ruby-comment cmt"># (b) Extending beyond borders picture
81
- <span class="ruby-keyword kw">if</span> ( <span class="ruby-identifier">feature</span>.<span class="ruby-identifier">chopped_at_stop</span> <span class="ruby-keyword kw">and</span> <span class="ruby-identifier">feature</span>.<span class="ruby-identifier">strand</span> = <span class="ruby-value">1</span> ) <span class="ruby-keyword kw">or</span> ( <span class="ruby-identifier">feature</span>.<span class="ruby-identifier">chopped_at_start</span> <span class="ruby-keyword kw">and</span> <span class="ruby-identifier">feature</span>.<span class="ruby-identifier">strand</span> = <span class="ruby-value">-1</span> )
82
- <span class="ruby-identifier">replace_directed_with_undirected</span> = <span class="ruby-keyword kw">true</span>
83
- <span class="ruby-keyword kw">end</span>
84
-
85
- <span class="ruby-identifier">local_feature_glyph</span> = <span class="ruby-keyword kw">nil</span>
86
- <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">feature_glyph</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'directed_generic'</span> <span class="ruby-keyword kw">and</span> <span class="ruby-identifier">replace_directed_with_undirected</span>
87
- <span class="ruby-identifier">local_feature_glyph</span> = <span class="ruby-value str">'generic'</span>
88
- <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">feature_glyph</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'directed_spliced'</span> <span class="ruby-keyword kw">and</span> <span class="ruby-identifier">replace_directed_with_undirected</span>
89
- <span class="ruby-identifier">local_feature_glyph</span> = <span class="ruby-value str">'spliced'</span>
90
- <span class="ruby-keyword kw">else</span>
91
- <span class="ruby-identifier">local_feature_glyph</span> = <span class="ruby-identifier">feature_glyph</span>
92
- <span class="ruby-keyword kw">end</span>
93
-
94
- <span class="ruby-identifier">top_pixel_of_feature</span> = <span class="ruby-constant">FEATURE_V_DISTANCE</span> <span class="ruby-operator">+</span> (<span class="ruby-constant">FEATURE_HEIGHT</span><span class="ruby-operator">+</span><span class="ruby-constant">FEATURE_V_DISTANCE</span>)<span class="ruby-operator">*</span><span class="ruby-identifier">row</span>
95
- <span class="ruby-identifier">bottom_pixel_of_feature</span> = <span class="ruby-identifier">top_pixel_of_feature</span> <span class="ruby-operator">+</span> <span class="ruby-constant">FEATURE_HEIGHT</span>
96
-
97
- <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">local_feature_glyph</span>
98
- <span class="ruby-comment cmt"># triangles are typical for features which have a 1 bp position (start == stop)
99
- <span class="ruby-keyword kw">when</span> <span class="ruby-value str">'triangle'</span>
100
- <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;Start and stop are not the same (necessary if you want triangle glyphs)&quot;</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">feature</span>.<span class="ruby-identifier">start</span> <span class="ruby-operator">!=</span> <span class="ruby-identifier">feature</span>.<span class="ruby-identifier">stop</span>
101
-
102
- <span class="ruby-comment cmt"># Need to get this for the imagemap
103
- <span class="ruby-identifier">left_pixel_of_feature</span> = <span class="ruby-identifier">feature</span>.<span class="ruby-identifier">pixel_range_collection</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">start_pixel</span> <span class="ruby-operator">-</span> <span class="ruby-value">3</span>
104
- <span class="ruby-identifier">right_pixel_of_feature</span> = <span class="ruby-identifier">feature</span>.<span class="ruby-identifier">pixel_range_collection</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">stop_pixel</span> <span class="ruby-operator">+</span> <span class="ruby-value">3</span>
105
- <span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">move_to</span>(<span class="ruby-identifier">left_pixel_of_feature</span> <span class="ruby-operator">+</span> <span class="ruby-value">3</span>, <span class="ruby-identifier">top_pixel_of_feature</span>)
106
- <span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">rel_line_to</span>(<span class="ruby-value">-3</span>, <span class="ruby-constant">FEATURE_HEIGHT</span>)
107
- <span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">rel_line_to</span>(<span class="ruby-value">6</span>, <span class="ruby-value">0</span>)
108
- <span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">close_path</span>.<span class="ruby-identifier">fill</span>
109
-
110
- <span class="ruby-keyword kw">when</span> <span class="ruby-value str">'directed_generic'</span>
111
- <span class="ruby-comment cmt"># Need to get this for the imagemap
112
- <span class="ruby-identifier">left_pixel_of_feature</span> = <span class="ruby-identifier">feature</span>.<span class="ruby-identifier">pixel_range_collection</span>.<span class="ruby-identifier">sort_by</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">pr</span><span class="ruby-operator">|</span> <span class="ruby-identifier">pr</span>.<span class="ruby-identifier">start_pixel</span>}[<span class="ruby-value">0</span>].<span class="ruby-identifier">start_pixel</span>
113
- <span class="ruby-identifier">right_pixel_of_feature</span> = <span class="ruby-identifier">feature</span>.<span class="ruby-identifier">pixel_range_collection</span>.<span class="ruby-identifier">sort_by</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">pr</span><span class="ruby-operator">|</span> <span class="ruby-identifier">pr</span>.<span class="ruby-identifier">start_pixel</span>}[<span class="ruby-value">-1</span>].<span class="ruby-identifier">stop_pixel</span>
114
- <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">feature</span>.<span class="ruby-identifier">strand</span> <span class="ruby-operator">==</span> <span class="ruby-value">-1</span> <span class="ruby-comment cmt"># Reverse strand
115
- <span class="ruby-comment cmt"># Draw main box
116
- <span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">rectangle</span>(<span class="ruby-identifier">left_pixel_of_feature</span><span class="ruby-operator">+</span><span class="ruby-constant">FEATURE_ARROW_LENGTH</span>, <span class="ruby-identifier">top_pixel_of_feature</span>, <span class="ruby-identifier">right_pixel_of_feature</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">left_pixel_of_feature</span> <span class="ruby-operator">-</span> <span class="ruby-constant">FEATURE_ARROW_LENGTH</span>, <span class="ruby-constant">FEATURE_HEIGHT</span>).<span class="ruby-identifier">fill</span>
117
-
118
- <span class="ruby-comment cmt"># Draw arrow
119
- <span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">move_to</span>(<span class="ruby-identifier">left_pixel_of_feature</span><span class="ruby-operator">+</span><span class="ruby-constant">FEATURE_ARROW_LENGTH</span>, <span class="ruby-identifier">top_pixel_of_feature</span>)
120
- <span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">rel_line_to</span>(<span class="ruby-operator">-</span><span class="ruby-constant">FEATURE_ARROW_LENGTH</span>, <span class="ruby-constant">FEATURE_HEIGHT</span><span class="ruby-operator">/</span><span class="ruby-value">2</span>)
121
- <span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">rel_line_to</span>(<span class="ruby-constant">FEATURE_ARROW_LENGTH</span>, <span class="ruby-constant">FEATURE_HEIGHT</span><span class="ruby-operator">/</span><span class="ruby-value">2</span>)
122
- <span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">close_path</span>.<span class="ruby-identifier">fill</span>
123
-
124
- <span class="ruby-keyword kw">else</span> <span class="ruby-comment cmt">#default is forward strand
125
- <span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">rectangle</span>(<span class="ruby-identifier">left_pixel_of_feature</span>, <span class="ruby-identifier">top_pixel_of_feature</span>, <span class="ruby-identifier">right_pixel_of_feature</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">left_pixel_of_feature</span> <span class="ruby-operator">-</span> <span class="ruby-constant">FEATURE_ARROW_LENGTH</span>, <span class="ruby-constant">FEATURE_HEIGHT</span>).<span class="ruby-identifier">fill</span>
126
- <span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">move_to</span>(<span class="ruby-identifier">right_pixel_of_feature</span> <span class="ruby-operator">-</span> <span class="ruby-constant">FEATURE_ARROW_LENGTH</span>, <span class="ruby-identifier">top_pixel_of_feature</span>)
127
- <span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">rel_line_to</span>(<span class="ruby-constant">FEATURE_ARROW_LENGTH</span>, <span class="ruby-constant">FEATURE_HEIGHT</span><span class="ruby-operator">/</span><span class="ruby-value">2</span>)
128
- <span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">rel_line_to</span>(<span class="ruby-operator">-</span><span class="ruby-constant">FEATURE_ARROW_LENGTH</span>, <span class="ruby-constant">FEATURE_HEIGHT</span><span class="ruby-operator">/</span><span class="ruby-value">2</span>)
129
- <span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">close_path</span>.<span class="ruby-identifier">fill</span>
130
- <span class="ruby-keyword kw">end</span>
131
- <span class="ruby-keyword kw">when</span> <span class="ruby-value str">'spliced'</span>
132
- <span class="ruby-identifier">gap_starts</span> = <span class="ruby-constant">Array</span>.<span class="ruby-identifier">new</span>
133
- <span class="ruby-identifier">gap_stops</span> = <span class="ruby-constant">Array</span>.<span class="ruby-identifier">new</span>
134
-
135
- <span class="ruby-comment cmt"># Need to get this for the imagemap
136
- <span class="ruby-identifier">left_pixel_of_feature</span> = <span class="ruby-identifier">feature</span>.<span class="ruby-identifier">pixel_range_collection</span>.<span class="ruby-identifier">sort_by</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">pr</span><span class="ruby-operator">|</span> <span class="ruby-identifier">pr</span>.<span class="ruby-identifier">start_pixel</span>}[<span class="ruby-value">0</span>].<span class="ruby-identifier">start_pixel</span>
137
- <span class="ruby-identifier">right_pixel_of_feature</span> = <span class="ruby-identifier">feature</span>.<span class="ruby-identifier">pixel_range_collection</span>.<span class="ruby-identifier">sort_by</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">pr</span><span class="ruby-operator">|</span> <span class="ruby-identifier">pr</span>.<span class="ruby-identifier">start_pixel</span>}[<span class="ruby-value">-1</span>].<span class="ruby-identifier">stop_pixel</span>
138
-
139
- <span class="ruby-comment cmt"># First draw the parts
140
- <span class="ruby-identifier">feature</span>.<span class="ruby-identifier">pixel_range_collection</span>.<span class="ruby-identifier">sort_by</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">pr</span><span class="ruby-operator">|</span> <span class="ruby-identifier">pr</span>.<span class="ruby-identifier">start_pixel</span>}.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">pr</span><span class="ruby-operator">|</span>
141
- <span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">rectangle</span>(<span class="ruby-identifier">pr</span>.<span class="ruby-identifier">start_pixel</span>, <span class="ruby-identifier">top_pixel_of_feature</span>, (<span class="ruby-identifier">pr</span>.<span class="ruby-identifier">stop_pixel</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">pr</span>.<span class="ruby-identifier">start_pixel</span>), <span class="ruby-constant">FEATURE_HEIGHT</span>).<span class="ruby-identifier">fill</span>
142
- <span class="ruby-identifier">gap_starts</span>.<span class="ruby-identifier">push</span>(<span class="ruby-identifier">pr</span>.<span class="ruby-identifier">stop_pixel</span>)
143
- <span class="ruby-identifier">gap_stops</span>.<span class="ruby-identifier">push</span>(<span class="ruby-identifier">pr</span>.<span class="ruby-identifier">start_pixel</span>)
144
- <span class="ruby-keyword kw">end</span>
145
-
146
- <span class="ruby-comment cmt"># And then draw the connections in the gaps
147
- <span class="ruby-comment cmt"># Start with removing the very first start and the very last stop.
148
- <span class="ruby-identifier">gap_starts</span>.<span class="ruby-identifier">sort!</span>.<span class="ruby-identifier">pop</span>
149
- <span class="ruby-identifier">gap_stops</span>.<span class="ruby-identifier">sort!</span>.<span class="ruby-identifier">shift</span>
150
-
151
- <span class="ruby-identifier">gap_starts</span>.<span class="ruby-identifier">length</span>.<span class="ruby-identifier">times</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">gap_number</span><span class="ruby-operator">|</span>
152
- <span class="ruby-identifier">from</span> = <span class="ruby-identifier">gap_starts</span>[<span class="ruby-identifier">gap_number</span>].<span class="ruby-identifier">to_f</span>
153
- <span class="ruby-identifier">to</span> = <span class="ruby-identifier">gap_stops</span>[<span class="ruby-identifier">gap_number</span>].<span class="ruby-identifier">to_f</span>
154
- <span class="ruby-identifier">middle</span> = <span class="ruby-identifier">from</span> <span class="ruby-operator">+</span> ((<span class="ruby-identifier">to</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">from</span>)<span class="ruby-operator">/</span><span class="ruby-value">2</span>)
155
- <span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">move_to</span>(<span class="ruby-identifier">from</span>, <span class="ruby-identifier">top_pixel_of_feature</span><span class="ruby-operator">+</span><span class="ruby-value">2</span>)
156
- <span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">line_to</span>(<span class="ruby-identifier">middle</span>, <span class="ruby-identifier">top_pixel_of_feature</span><span class="ruby-operator">+</span><span class="ruby-value">7</span>)
157
- <span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">line_to</span>(<span class="ruby-identifier">to</span>, <span class="ruby-identifier">top_pixel_of_feature</span><span class="ruby-operator">+</span><span class="ruby-value">2</span>)
158
- <span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">stroke</span>
159
- <span class="ruby-keyword kw">end</span>
160
-
161
- <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">feature</span>.<span class="ruby-identifier">hidden_subfeatures_at_stop</span>
162
- <span class="ruby-identifier">from</span> = <span class="ruby-identifier">feature</span>.<span class="ruby-identifier">pixel_range_collection</span>.<span class="ruby-identifier">sort_by</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">pr</span><span class="ruby-operator">|</span> <span class="ruby-identifier">pr</span>.<span class="ruby-identifier">start_pixel</span>}[<span class="ruby-value">-1</span>].<span class="ruby-identifier">stop_pixel</span>
163
- <span class="ruby-identifier">to</span> = <span class="ruby-identifier">panel</span>.<span class="ruby-identifier">width</span>
164
- <span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">move_to</span>(<span class="ruby-identifier">from</span>, <span class="ruby-identifier">top_pixel_of_feature</span><span class="ruby-operator">+</span><span class="ruby-value">5</span>)
165
- <span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">line_to</span>(<span class="ruby-identifier">to</span>, <span class="ruby-identifier">top_pixel_of_feature</span><span class="ruby-operator">+</span><span class="ruby-value">5</span>)
166
- <span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">stroke</span>
167
- <span class="ruby-keyword kw">end</span>
168
-
169
- <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">feature</span>.<span class="ruby-identifier">hidden_subfeatures_at_start</span>
170
- <span class="ruby-identifier">from</span> = <span class="ruby-value">1</span>
171
- <span class="ruby-identifier">to</span> = <span class="ruby-identifier">feature</span>.<span class="ruby-identifier">pixel_range_collection</span>.<span class="ruby-identifier">sort_by</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">pr</span><span class="ruby-operator">|</span> <span class="ruby-identifier">pr</span>.<span class="ruby-identifier">start_pixel</span>}[<span class="ruby-value">0</span>].<span class="ruby-identifier">start_pixel</span>
172
- <span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">move_to</span>(<span class="ruby-identifier">from</span>, <span class="ruby-identifier">top_pixel_of_feature</span><span class="ruby-operator">+</span><span class="ruby-value">5</span>)
173
- <span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">line_to</span>(<span class="ruby-identifier">to</span>, <span class="ruby-identifier">top_pixel_of_feature</span><span class="ruby-operator">+</span><span class="ruby-value">5</span>)
174
- <span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">stroke</span>
175
- <span class="ruby-keyword kw">end</span>
176
-
177
- <span class="ruby-keyword kw">when</span> <span class="ruby-value str">'directed_spliced'</span>
178
- <span class="ruby-identifier">gap_starts</span> = <span class="ruby-constant">Array</span>.<span class="ruby-identifier">new</span>
179
- <span class="ruby-identifier">gap_stops</span> = <span class="ruby-constant">Array</span>.<span class="ruby-identifier">new</span>
180
- <span class="ruby-comment cmt"># First draw the parts
181
- <span class="ruby-identifier">locations</span> = <span class="ruby-identifier">feature</span>.<span class="ruby-identifier">location</span>.<span class="ruby-identifier">sort_by</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">l</span><span class="ruby-operator">|</span> <span class="ruby-identifier">l</span>.<span class="ruby-identifier">from</span>}
182
-
183
- <span class="ruby-comment cmt"># Need to get this for the imagemap
184
- <span class="ruby-identifier">left_pixel_of_feature</span> = <span class="ruby-identifier">feature</span>.<span class="ruby-identifier">pixel_range_collection</span>.<span class="ruby-identifier">sort_by</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">pr</span><span class="ruby-operator">|</span> <span class="ruby-identifier">pr</span>.<span class="ruby-identifier">start_pixel</span>}[<span class="ruby-value">0</span>].<span class="ruby-identifier">start_pixel</span>
185
- <span class="ruby-identifier">right_pixel_of_feature</span> = <span class="ruby-identifier">feature</span>.<span class="ruby-identifier">pixel_range_collection</span>.<span class="ruby-identifier">sort_by</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">pr</span><span class="ruby-operator">|</span> <span class="ruby-identifier">pr</span>.<span class="ruby-identifier">start_pixel</span>}[<span class="ruby-value">-1</span>].<span class="ruby-identifier">stop_pixel</span>
186
-
187
- <span class="ruby-comment cmt"># Start with the one with the arrow
188
- <span class="ruby-identifier">pixel_ranges</span> = <span class="ruby-identifier">feature</span>.<span class="ruby-identifier">pixel_range_collection</span>.<span class="ruby-identifier">sort_by</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">pr</span><span class="ruby-operator">|</span> <span class="ruby-identifier">pr</span>.<span class="ruby-identifier">start_pixel</span>}
189
- <span class="ruby-identifier">range_with_arrow</span> = <span class="ruby-keyword kw">nil</span>
190
- <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">feature</span>.<span class="ruby-identifier">strand</span> <span class="ruby-operator">==</span> <span class="ruby-value">-1</span> <span class="ruby-comment cmt"># reverse strand =&gt; box with arrow is first one
191
- <span class="ruby-identifier">range_with_arrow</span> = <span class="ruby-identifier">pixel_ranges</span>.<span class="ruby-identifier">shift</span>
192
- <span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">rectangle</span>((<span class="ruby-identifier">range_with_arrow</span>.<span class="ruby-identifier">start_pixel</span>)<span class="ruby-operator">+</span><span class="ruby-constant">FEATURE_ARROW_LENGTH</span>, <span class="ruby-identifier">top_pixel_of_feature</span>, <span class="ruby-identifier">range_with_arrow</span>.<span class="ruby-identifier">stop_pixel</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">range_with_arrow</span>.<span class="ruby-identifier">start_pixel</span>, <span class="ruby-constant">FEATURE_HEIGHT</span>).<span class="ruby-identifier">fill</span>
193
- <span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">move_to</span>(<span class="ruby-identifier">range_with_arrow</span>.<span class="ruby-identifier">start_pixel</span><span class="ruby-operator">+</span><span class="ruby-constant">FEATURE_ARROW_LENGTH</span>, <span class="ruby-identifier">top_pixel_of_feature</span>)
194
- <span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">rel_line_to</span>(<span class="ruby-operator">-</span><span class="ruby-constant">FEATURE_ARROW_LENGTH</span>, <span class="ruby-constant">FEATURE_HEIGHT</span><span class="ruby-operator">/</span><span class="ruby-value">2</span>)
195
- <span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">rel_line_to</span>(<span class="ruby-constant">FEATURE_ARROW_LENGTH</span>, <span class="ruby-constant">FEATURE_HEIGHT</span><span class="ruby-operator">/</span><span class="ruby-value">2</span>)
196
- <span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">close_path</span>.<span class="ruby-identifier">fill</span>
197
- <span class="ruby-keyword kw">else</span> <span class="ruby-comment cmt"># forward strand =&gt; box with arrow is last one
198
- <span class="ruby-identifier">range_with_arrow</span> = <span class="ruby-identifier">pixel_ranges</span>.<span class="ruby-identifier">pop</span>
199
- <span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">rectangle</span>(<span class="ruby-identifier">range_with_arrow</span>.<span class="ruby-identifier">start_pixel</span><span class="ruby-operator">-</span><span class="ruby-constant">FEATURE_ARROW_LENGTH</span>, <span class="ruby-identifier">top_pixel_of_feature</span>, <span class="ruby-identifier">range_with_arrow</span>.<span class="ruby-identifier">stop_pixel</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">range_with_arrow</span>.<span class="ruby-identifier">start_pixel</span>, <span class="ruby-constant">FEATURE_HEIGHT</span>).<span class="ruby-identifier">fill</span>
200
- <span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">move_to</span>(<span class="ruby-identifier">range_with_arrow</span>.<span class="ruby-identifier">stop_pixel</span><span class="ruby-operator">-</span><span class="ruby-constant">FEATURE_ARROW_LENGTH</span>, <span class="ruby-identifier">top_pixel_of_feature</span>)
201
- <span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">rel_line_to</span>(<span class="ruby-constant">FEATURE_ARROW_LENGTH</span>, <span class="ruby-constant">FEATURE_HEIGHT</span><span class="ruby-operator">/</span><span class="ruby-value">2</span>)
202
- <span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">rel_line_to</span>(<span class="ruby-operator">-</span><span class="ruby-constant">FEATURE_ARROW_LENGTH</span>, <span class="ruby-constant">FEATURE_HEIGHT</span><span class="ruby-operator">/</span><span class="ruby-value">2</span>)
203
- <span class="ruby-keyword kw">end</span>
204
- <span class="ruby-identifier">gap_starts</span>.<span class="ruby-identifier">push</span>(<span class="ruby-identifier">range_with_arrow</span>.<span class="ruby-identifier">stop_pixel</span>)
205
- <span class="ruby-identifier">gap_stops</span>.<span class="ruby-identifier">push</span>(<span class="ruby-identifier">range_with_arrow</span>.<span class="ruby-identifier">start_pixel</span>)
206
-
207
- <span class="ruby-comment cmt"># And then add the others
208
- <span class="ruby-identifier">pixel_ranges</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">range</span><span class="ruby-operator">|</span>
209
- <span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">rectangle</span>(<span class="ruby-identifier">range</span>.<span class="ruby-identifier">start_pixel</span>, <span class="ruby-identifier">top_pixel_of_feature</span>, <span class="ruby-identifier">range</span>.<span class="ruby-identifier">stop_pixel</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">range</span>.<span class="ruby-identifier">start_pixel</span>, <span class="ruby-constant">FEATURE_HEIGHT</span>).<span class="ruby-identifier">fill</span>
210
- <span class="ruby-identifier">gap_starts</span>.<span class="ruby-identifier">push</span>(<span class="ruby-identifier">range</span>.<span class="ruby-identifier">stop_pixel</span>)
211
- <span class="ruby-identifier">gap_stops</span>.<span class="ruby-identifier">push</span>(<span class="ruby-identifier">range</span>.<span class="ruby-identifier">start_pixel</span>)
212
- <span class="ruby-keyword kw">end</span>
213
-
214
- <span class="ruby-comment cmt"># And then draw the connections in the gaps
215
- <span class="ruby-comment cmt"># Start with removing the very first start and the very last stop.
216
- <span class="ruby-identifier">gap_starts</span>.<span class="ruby-identifier">sort!</span>.<span class="ruby-identifier">pop</span>
217
- <span class="ruby-identifier">gap_stops</span>.<span class="ruby-identifier">sort!</span>.<span class="ruby-identifier">shift</span>
218
-
219
- <span class="ruby-identifier">gap_starts</span>.<span class="ruby-identifier">length</span>.<span class="ruby-identifier">times</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">gap_number</span><span class="ruby-operator">|</span>
220
- <span class="ruby-identifier">from</span> = <span class="ruby-identifier">gap_starts</span>[<span class="ruby-identifier">gap_number</span>].<span class="ruby-identifier">to_f</span>
221
- <span class="ruby-identifier">to</span> = <span class="ruby-identifier">gap_stops</span>[<span class="ruby-identifier">gap_number</span>].<span class="ruby-identifier">to_f</span>
222
- <span class="ruby-identifier">middle</span> = <span class="ruby-identifier">from</span> <span class="ruby-operator">+</span> ((<span class="ruby-identifier">to</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">from</span>)<span class="ruby-operator">/</span><span class="ruby-value">2</span>)
223
- <span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">move_to</span>(<span class="ruby-identifier">from</span>, <span class="ruby-identifier">top_pixel_of_feature</span><span class="ruby-operator">+</span><span class="ruby-value">2</span>)
224
- <span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">line_to</span>(<span class="ruby-identifier">middle</span>, <span class="ruby-identifier">top_pixel_of_feature</span><span class="ruby-operator">+</span><span class="ruby-value">7</span>)
225
- <span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">line_to</span>(<span class="ruby-identifier">to</span>, <span class="ruby-identifier">top_pixel_of_feature</span><span class="ruby-operator">+</span><span class="ruby-value">2</span>)
226
- <span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">stroke</span>
227
- <span class="ruby-keyword kw">end</span>
228
-
229
- <span class="ruby-keyword kw">else</span> <span class="ruby-comment cmt">#treat as 'generic'
230
- <span class="ruby-identifier">left_pixel_of_feature</span>, <span class="ruby-identifier">right_pixel_of_feature</span> = <span class="ruby-identifier">feature</span>.<span class="ruby-identifier">pixel_range_collection</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">start_pixel</span>, <span class="ruby-identifier">feature</span>.<span class="ruby-identifier">pixel_range_collection</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">stop_pixel</span>
231
- <span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">rectangle</span>(<span class="ruby-identifier">left_pixel_of_feature</span>, <span class="ruby-identifier">top_pixel_of_feature</span>, (<span class="ruby-identifier">right_pixel_of_feature</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">left_pixel_of_feature</span>), <span class="ruby-constant">FEATURE_HEIGHT</span>).<span class="ruby-identifier">fill</span>
232
- <span class="ruby-keyword kw">end</span>
233
-
234
- <span class="ruby-comment cmt"># And add the region to the image map
235
- <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">panel</span>.<span class="ruby-identifier">clickable</span>
236
- <span class="ruby-comment cmt"># Comment: we have to add the vertical_offset and TRACK_HEADER_HEIGHT!
237
- <span class="ruby-identifier">panel</span>.<span class="ruby-identifier">image_map</span>.<span class="ruby-identifier">elements</span>.<span class="ruby-identifier">push</span>(<span class="ruby-constant">ImageMap</span><span class="ruby-operator">::</span><span class="ruby-constant">ImageMapElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">left_pixel_of_feature</span>,
238
- <span class="ruby-identifier">top_pixel_of_feature</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">vertical_offset</span> <span class="ruby-operator">+</span> <span class="ruby-constant">TRACK_HEADER_HEIGHT</span>,
239
- <span class="ruby-identifier">right_pixel_of_feature</span>,
240
- <span class="ruby-identifier">bottom_pixel_of_feature</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">vertical_offset</span> <span class="ruby-operator">+</span> <span class="ruby-constant">TRACK_HEADER_HEIGHT</span>,
241
- <span class="ruby-identifier">feature</span>.<span class="ruby-identifier">link</span>
242
- ))
243
- <span class="ruby-keyword kw">end</span>
244
-
245
-
246
- <span class="ruby-identifier">feature_drawn</span> = <span class="ruby-keyword kw">true</span>
247
- <span class="ruby-keyword kw">end</span>
248
- <span class="ruby-keyword kw">end</span>
249
- <span class="ruby-keyword kw">end</span>
250
- <span class="ruby-keyword kw">end</span>
251
-
252
- <span class="ruby-keyword kw">end</span>
253
-
254
- <span class="ruby-ivar">@number_of_times_bumped</span> = ( <span class="ruby-identifier">grid</span>.<span class="ruby-identifier">keys</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span> ) <span class="ruby-operator">?</span> <span class="ruby-value">1</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">grid</span>.<span class="ruby-identifier">keys</span>.<span class="ruby-identifier">max</span> <span class="ruby-operator">+</span> <span class="ruby-value">1</span>
255
-
256
- <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">panel_drawing</span>
257
- <span class="ruby-keyword kw">end</span></pre>
258
- </body>
259
- </html>