cosmos 3.5.1 → 3.5.2

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 (1158) hide show
  1. checksums.yaml +4 -4
  2. data/.coveralls.yml +1 -1
  3. data/.gitattributes +3 -3
  4. data/.gitignore +48 -48
  5. data/.travis.yml +8 -8
  6. data/CONTRIBUTING.txt +50 -50
  7. data/Gemfile +10 -10
  8. data/Guardfile +27 -27
  9. data/LICENSE.txt +879 -879
  10. data/Manifest.txt +1414 -1414
  11. data/README.md +111 -111
  12. data/Rakefile +218 -214
  13. data/autohotkey/config/data/diamond.STL +57 -57
  14. data/autohotkey/config/system/system.txt +34 -34
  15. data/autohotkey/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
  16. data/autohotkey/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
  17. data/autohotkey/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
  18. data/autohotkey/config/targets/COSMOS/target.txt +5 -5
  19. data/autohotkey/config/targets/INST/cmd_tlm/inst_cmds.txt +121 -121
  20. data/autohotkey/config/targets/INST/cmd_tlm/inst_tlm.txt +270 -270
  21. data/autohotkey/config/targets/INST/cmd_tlm_server.txt +5 -5
  22. data/autohotkey/config/targets/INST/lib/example_limits_response.rb +30 -30
  23. data/autohotkey/config/targets/INST/lib/sim_inst.rb +305 -305
  24. data/autohotkey/config/targets/INST/screens/adcs.txt +46 -46
  25. data/autohotkey/config/targets/INST/screens/array.txt +7 -7
  26. data/autohotkey/config/targets/INST/screens/block.txt +8 -8
  27. data/autohotkey/config/targets/INST/screens/commanding.txt +30 -30
  28. data/autohotkey/config/targets/INST/screens/graphs.txt +14 -14
  29. data/autohotkey/config/targets/INST/screens/ground.txt +25 -25
  30. data/autohotkey/config/targets/INST/screens/health_status.txt +33 -33
  31. data/autohotkey/config/targets/INST/screens/hs.txt +49 -49
  32. data/autohotkey/config/targets/INST/screens/image.txt +21 -21
  33. data/autohotkey/config/targets/INST/screens/latest.txt +23 -23
  34. data/autohotkey/config/targets/INST/screens/mech.txt +25 -25
  35. data/autohotkey/config/targets/INST/screens/other.txt +25 -25
  36. data/autohotkey/config/targets/INST/screens/params.txt +25 -25
  37. data/autohotkey/config/targets/INST/screens/tabs.txt +68 -68
  38. data/autohotkey/config/targets/INST/target.txt +26 -26
  39. data/autohotkey/config/targets/META/cmd_tlm/meta_cmd.txt +10 -10
  40. data/autohotkey/config/targets/META/cmd_tlm/meta_tlm.txt +9 -9
  41. data/autohotkey/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -7
  42. data/autohotkey/config/targets/SYSTEM/screens/error.txt +11 -11
  43. data/autohotkey/config/tools/cmd_tlm_server/cmd_tlm_server.txt +22 -22
  44. data/autohotkey/config/tools/data_viewer/data_viewer.txt +11 -11
  45. data/autohotkey/config/tools/handbook_creator/handbook_creator.txt +49 -49
  46. data/autohotkey/config/tools/handbook_creator/templates/command_packets.html.erb +86 -86
  47. data/autohotkey/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
  48. data/autohotkey/config/tools/handbook_creator/templates/footer.html.erb +9 -9
  49. data/autohotkey/config/tools/handbook_creator/templates/header.html.erb +25 -25
  50. data/autohotkey/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
  51. data/autohotkey/config/tools/handbook_creator/templates/nav.html.erb +27 -27
  52. data/autohotkey/config/tools/handbook_creator/templates/overview.html.erb +1 -1
  53. data/autohotkey/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
  54. data/autohotkey/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
  55. data/autohotkey/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
  56. data/autohotkey/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -80
  57. data/autohotkey/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
  58. data/autohotkey/config/tools/handbook_creator/templates/title.html.erb +1 -1
  59. data/autohotkey/config/tools/launcher/launcher.txt +38 -38
  60. data/autohotkey/config/tools/script_runner/script_runner.txt +3 -3
  61. data/autohotkey/config/tools/table_manager/ConfigTables_def.txt +8 -8
  62. data/autohotkey/config/tools/table_manager/OneDimensionalTable_def.txt +19 -19
  63. data/autohotkey/config/tools/table_manager/TwoDimensionalTable_def.txt +248 -248
  64. data/autohotkey/config/tools/test_runner/test_runner.txt +8 -8
  65. data/autohotkey/config/tools/test_runner/test_runner2.txt +11 -11
  66. data/autohotkey/config/tools/test_runner/test_runner3.txt +6 -6
  67. data/autohotkey/config/tools/test_runner/test_runner4.txt +1 -1
  68. data/autohotkey/config/tools/tlm_extractor/tlm_extractor.txt +13 -13
  69. data/autohotkey/config/tools/tlm_extractor/tlm_extractor2.txt +9 -9
  70. data/autohotkey/config/tools/tlm_grapher/bad.txt +50 -50
  71. data/autohotkey/config/tools/tlm_grapher/temp1-4.txt +51 -51
  72. data/autohotkey/config/tools/tlm_grapher/test2.txt +111 -111
  73. data/autohotkey/config/tools/tlm_viewer/tlm_viewer.txt +24 -24
  74. data/autohotkey/config/tools/tlm_viewer/tlm_viewer2.txt +4 -4
  75. data/autohotkey/config/tools/tlm_viewer/tlm_viewer3.txt +3 -3
  76. data/autohotkey/lib/example_background_task.rb +42 -42
  77. data/autohotkey/lib/user_version.rb +3 -3
  78. data/autohotkey/procedures/clear_util.rb +7 -7
  79. data/autohotkey/procedures/collect_util.rb +14 -14
  80. data/autohotkey/procedures/example_test.rb +67 -67
  81. data/autohotkey/procedures/example_test2.rb +74 -74
  82. data/autohotkey/procedures/script_test.rb +17 -17
  83. data/autohotkey/procedures/syntax_error.rb +18 -18
  84. data/autohotkey/tools/CmdExtractorAHK +16 -16
  85. data/autohotkey/tools/CmdSender +14 -14
  86. data/autohotkey/tools/CmdSenderAHK +18 -18
  87. data/autohotkey/tools/CmdTlmServer +14 -14
  88. data/autohotkey/tools/CmdTlmServerAHK +28 -28
  89. data/autohotkey/tools/CmdTlmServerAHK2 +17 -17
  90. data/autohotkey/tools/DataViewer +14 -14
  91. data/autohotkey/tools/DataViewerAHK +17 -17
  92. data/autohotkey/tools/HandbookCreatorAHK +20 -20
  93. data/autohotkey/tools/LauncherAHK +17 -17
  94. data/autohotkey/tools/LimitsMonitorAHK +20 -20
  95. data/autohotkey/tools/OpenGLBuilderAHK +24 -24
  96. data/autohotkey/tools/PacketViewer +14 -14
  97. data/autohotkey/tools/PacketViewerAHK +18 -18
  98. data/autohotkey/tools/PacketViewerAHK2 +17 -17
  99. data/autohotkey/tools/Replay +14 -14
  100. data/autohotkey/tools/ReplayAHK +17 -17
  101. data/autohotkey/tools/ScriptRunner +14 -14
  102. data/autohotkey/tools/ScriptRunnerAHK +20 -20
  103. data/autohotkey/tools/ScriptRunnerAHK2 +17 -17
  104. data/autohotkey/tools/TableManager +14 -14
  105. data/autohotkey/tools/TableManagerAHK +30 -30
  106. data/autohotkey/tools/TestRunner +15 -15
  107. data/autohotkey/tools/TestRunnerAHK +17 -17
  108. data/autohotkey/tools/TestRunnerAHK2 +17 -17
  109. data/autohotkey/tools/TestRunnerAHK3 +17 -17
  110. data/autohotkey/tools/TestRunnerAHK4 +17 -17
  111. data/autohotkey/tools/TestRunnerAHK5 +17 -17
  112. data/autohotkey/tools/TestRunnerAHK6 +17 -17
  113. data/autohotkey/tools/TlmExtractor +15 -15
  114. data/autohotkey/tools/TlmExtractorAHK +19 -19
  115. data/autohotkey/tools/TlmExtractorAHK2 +16 -16
  116. data/autohotkey/tools/TlmExtractorAHK3 +16 -16
  117. data/autohotkey/tools/TlmGrapher +14 -14
  118. data/autohotkey/tools/TlmGrapherAHK +19 -19
  119. data/autohotkey/tools/TlmGrapherAHK2 +23 -23
  120. data/autohotkey/tools/TlmGrapherAHK3 +17 -17
  121. data/autohotkey/tools/TlmGrapherAHK4 +17 -17
  122. data/autohotkey/tools/TlmViewer +14 -14
  123. data/autohotkey/tools/TlmViewerAHK +28 -28
  124. data/autohotkey/tools/TlmViewerAHK2 +22 -22
  125. data/autohotkey/tools/TlmViewerAHK3 +23 -23
  126. data/autohotkey/tools/TlmViewerAHK4 +22 -22
  127. data/autohotkey/tools/TlmViewerAHK5 +18 -18
  128. data/autohotkey/tools/autohotkey.rb +37 -37
  129. data/autohotkey/tools/cmd_extractor.ahk +33 -33
  130. data/autohotkey/tools/cmd_sender.ahk +182 -182
  131. data/autohotkey/tools/cmd_tlm_server.ahk +90 -90
  132. data/autohotkey/tools/cmd_tlm_server2.ahk +45 -45
  133. data/autohotkey/tools/data_viewer.ahk +141 -141
  134. data/autohotkey/tools/handbook_creator.ahk +32 -32
  135. data/autohotkey/tools/launcher.ahk +41 -41
  136. data/autohotkey/tools/limits_monitor.ahk +123 -123
  137. data/autohotkey/tools/open_gl_builder.ahk +134 -134
  138. data/autohotkey/tools/packet_viewer.ahk +196 -196
  139. data/autohotkey/tools/packet_viewer2.ahk +9 -9
  140. data/autohotkey/tools/replay.ahk +104 -104
  141. data/autohotkey/tools/script_runner.ahk +589 -589
  142. data/autohotkey/tools/script_runner2.ahk +38 -38
  143. data/autohotkey/tools/table_manager.ahk +220 -220
  144. data/autohotkey/tools/test_runner.ahk +262 -262
  145. data/autohotkey/tools/test_runner2.ahk +53 -53
  146. data/autohotkey/tools/test_runner3.ahk +13 -13
  147. data/autohotkey/tools/test_runner5.ahk +8 -8
  148. data/autohotkey/tools/test_runner6.ahk +5 -5
  149. data/autohotkey/tools/tlm_extractor.ahk +296 -296
  150. data/autohotkey/tools/tlm_grapher.ahk +660 -660
  151. data/autohotkey/tools/tlm_grapher2.ahk +115 -115
  152. data/autohotkey/tools/tlm_grapher3.ahk +24 -24
  153. data/autohotkey/tools/tlm_viewer.ahk +133 -133
  154. data/autohotkey/tools/tlm_viewer2.ahk +50 -50
  155. data/autohotkey/tools/tlm_viewer4.ahk +4 -4
  156. data/autohotkey/tools/tlm_viewer5.ahk +20 -20
  157. data/bin/cosmos +96 -96
  158. data/bin/cstol_converter +1166 -1166
  159. data/bin/rubysloc +85 -85
  160. data/cosmos.gemspec +99 -99
  161. data/data/about.txt +4 -4
  162. data/data/crc.txt +326 -326
  163. data/data/diamond.STL +57 -57
  164. data/data/legal.txt +9 -9
  165. data/demo/Gemfile +10 -10
  166. data/demo/Launcher +16 -16
  167. data/demo/Launcher.bat +0 -0
  168. data/demo/Rakefile +77 -77
  169. data/demo/config/data/crc.txt +224 -226
  170. data/demo/config/data/diamond.STL +57 -57
  171. data/demo/config/data/meta_init.txt +4 -4
  172. data/demo/config/system/system.txt +35 -35
  173. data/demo/config/system/system2.txt +33 -33
  174. data/demo/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
  175. data/demo/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
  176. data/demo/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
  177. data/demo/config/targets/COSMOS/screens/limits_change.txt +20 -20
  178. data/demo/config/targets/COSMOS/screens/version.txt +19 -19
  179. data/demo/config/targets/COSMOS/target.txt +11 -11
  180. data/demo/config/targets/EXAMPLE/cmd_tlm/example_cmds.txt +2 -2
  181. data/demo/config/targets/EXAMPLE/cmd_tlm/example_tlm.txt +5 -5
  182. data/demo/config/targets/EXAMPLE/cmd_tlm_server.txt +6 -6
  183. data/demo/config/targets/EXAMPLE/lib/example_interface.rb +22 -22
  184. data/demo/config/targets/EXAMPLE/target.txt +6 -6
  185. data/demo/config/targets/INST/cmd_tlm/inst_cmds.txt +121 -121
  186. data/demo/config/targets/INST/cmd_tlm/inst_tlm.txt +247 -247
  187. data/demo/config/targets/INST/cmd_tlm_server.txt +5 -5
  188. data/demo/config/targets/INST/lib/example_limits_response.rb +30 -30
  189. data/demo/config/targets/INST/lib/sim_inst.rb +305 -305
  190. data/demo/config/targets/INST/screens/adcs.txt +46 -46
  191. data/demo/config/targets/INST/screens/array.txt +15 -15
  192. data/demo/config/targets/INST/screens/block.txt +8 -8
  193. data/demo/config/targets/INST/screens/commanding.txt +30 -30
  194. data/demo/config/targets/INST/screens/graphs.txt +14 -14
  195. data/demo/config/targets/INST/screens/ground.txt +25 -25
  196. data/demo/config/targets/INST/screens/hs.txt +44 -44
  197. data/demo/config/targets/INST/screens/latest.txt +23 -23
  198. data/demo/config/targets/INST/screens/other.txt +29 -29
  199. data/demo/config/targets/INST/screens/tabs.txt +70 -70
  200. data/demo/config/targets/INST/target.txt +33 -33
  201. data/demo/config/targets/META/cmd_tlm/meta_cmd.txt +10 -10
  202. data/demo/config/targets/META/cmd_tlm/meta_tlm.txt +13 -13
  203. data/demo/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -7
  204. data/demo/config/targets/SYSTEM/cmd_tlm/override.txt +29 -29
  205. data/demo/config/targets/SYSTEM/screens/status.txt +12 -12
  206. data/demo/config/targets/TEMPLATED/cmd_tlm/templated_cmds.txt +13 -13
  207. data/demo/config/targets/TEMPLATED/cmd_tlm/templated_tlm.txt +3 -3
  208. data/demo/config/targets/TEMPLATED/cmd_tlm_server.txt +6 -6
  209. data/demo/config/targets/TEMPLATED/lib/templated_interface.rb +56 -56
  210. data/demo/config/targets/TEMPLATED/target.txt +6 -6
  211. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server.txt +39 -39
  212. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server2.txt +34 -34
  213. data/demo/config/tools/data_viewer/data_viewer.txt +11 -11
  214. data/demo/config/tools/handbook_creator/handbook_creator.txt +66 -66
  215. data/demo/config/tools/handbook_creator/templates/command_packets.html.erb +88 -88
  216. data/demo/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
  217. data/demo/config/tools/handbook_creator/templates/footer.html.erb +9 -9
  218. data/demo/config/tools/handbook_creator/templates/header.html.erb +25 -25
  219. data/demo/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
  220. data/demo/config/tools/handbook_creator/templates/nav.html.erb +27 -27
  221. data/demo/config/tools/handbook_creator/templates/overview.html.erb +1 -1
  222. data/demo/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
  223. data/demo/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
  224. data/demo/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
  225. data/demo/config/tools/handbook_creator/templates/telemetry_packets.html.erb +82 -82
  226. data/demo/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
  227. data/demo/config/tools/handbook_creator/templates/title.html.erb +1 -1
  228. data/demo/config/tools/launcher/launcher.txt +45 -45
  229. data/demo/config/tools/launcher/launcher2.txt +45 -45
  230. data/demo/config/tools/script_runner/script_runner.txt +3 -3
  231. data/demo/config/tools/table_manager/ConfigTables_def.txt +8 -8
  232. data/demo/config/tools/table_manager/ExampleTableDefinition.txt +24 -24
  233. data/demo/config/tools/table_manager/MCConfigurationTable_fsw1_def.txt +25 -25
  234. data/demo/config/tools/table_manager/MCConfigurationTable_fsw2_def.txt +25 -25
  235. data/demo/config/tools/table_manager/PPSSelectionTable_def.txt +8 -8
  236. data/demo/config/tools/table_manager/TLMMonitoringTable_def.txt +248 -248
  237. data/demo/config/tools/test_runner/test_runner.txt +17 -17
  238. data/demo/config/tools/tlm_extractor/tlm_extractor.txt +13 -13
  239. data/demo/config/tools/tlm_extractor/tlm_extractor2.txt +2 -2
  240. data/demo/config/tools/tlm_extractor/tlm_extractor3.txt +2 -2
  241. data/demo/config/tools/tlm_extractor/tlm_extractor4.txt +2 -2
  242. data/demo/config/tools/tlm_viewer/tlm_viewer.txt +41 -41
  243. data/demo/lib/example_background_task.rb +57 -57
  244. data/demo/lib/example_target.rb +113 -113
  245. data/demo/lib/scpi_target.rb +74 -74
  246. data/demo/lib/user_version.rb +3 -3
  247. data/demo/procedures/checks.rb +11 -11
  248. data/demo/procedures/clear_util.rb +7 -7
  249. data/demo/procedures/collect.rb +18 -18
  250. data/demo/procedures/collect_util.rb +14 -14
  251. data/demo/procedures/cosmos_api_test.rb +293 -293
  252. data/demo/procedures/disconnect.rb +29 -29
  253. data/demo/procedures/example_test.rb +183 -183
  254. data/demo/procedures/plot_test.rb +8 -8
  255. data/demo/procedures/run_example_test.rb +3 -3
  256. data/demo/procedures/test.rb +51 -51
  257. data/demo/tools/CmdExtractor +16 -16
  258. data/demo/tools/CmdExtractor.bat +0 -0
  259. data/demo/tools/CmdSender +16 -16
  260. data/demo/tools/CmdSender.bat +0 -0
  261. data/demo/tools/CmdTlmServer +16 -16
  262. data/demo/tools/CmdTlmServer.bat +0 -0
  263. data/demo/tools/DataViewer +16 -16
  264. data/demo/tools/DataViewer.bat +0 -0
  265. data/demo/tools/ExampleTarget +16 -16
  266. data/demo/tools/ExampleTarget.bat +0 -0
  267. data/demo/tools/HandbookCreator +16 -16
  268. data/demo/tools/HandbookCreator.bat +0 -0
  269. data/demo/tools/Launcher +16 -16
  270. data/demo/tools/Launcher.bat +0 -0
  271. data/demo/tools/LimitsMonitor +16 -16
  272. data/demo/tools/LimitsMonitor.bat +0 -0
  273. data/demo/tools/OpenGLBuilder +16 -16
  274. data/demo/tools/OpenGLBuilder.bat +0 -0
  275. data/demo/tools/PacketViewer +16 -16
  276. data/demo/tools/PacketViewer.bat +0 -0
  277. data/demo/tools/Replay +16 -16
  278. data/demo/tools/Replay.bat +0 -0
  279. data/demo/tools/ScpiTarget +16 -16
  280. data/demo/tools/ScpiTarget.bat +0 -0
  281. data/demo/tools/ScriptRunner +16 -16
  282. data/demo/tools/ScriptRunner.bat +0 -0
  283. data/demo/tools/TableManager +16 -16
  284. data/demo/tools/TableManager.bat +0 -0
  285. data/demo/tools/TestRunner +16 -16
  286. data/demo/tools/TestRunner.bat +0 -0
  287. data/demo/tools/TlmExtractor +16 -16
  288. data/demo/tools/TlmExtractor.bat +0 -0
  289. data/demo/tools/TlmGrapher +16 -16
  290. data/demo/tools/TlmGrapher.bat +0 -0
  291. data/demo/tools/TlmViewer +16 -16
  292. data/demo/tools/TlmViewer.bat +0 -0
  293. data/demo/tools/ToolLaunch.bat +14 -5
  294. data/demo/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -38
  295. data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +16 -16
  296. data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +10 -10
  297. data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/tool_launch.rb +38 -38
  298. data/demo/tools/mac/CmdSender.app/Contents/Info.plist +38 -38
  299. data/demo/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +16 -16
  300. data/demo/tools/mac/CmdSender.app/Contents/MacOS/main.sh +10 -10
  301. data/demo/tools/mac/CmdSender.app/Contents/MacOS/tool_launch.rb +38 -38
  302. data/demo/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -38
  303. data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +16 -16
  304. data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +10 -10
  305. data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/tool_launch.rb +38 -38
  306. data/demo/tools/mac/DataViewer.app/Contents/Info.plist +38 -38
  307. data/demo/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +16 -16
  308. data/demo/tools/mac/DataViewer.app/Contents/MacOS/main.sh +10 -10
  309. data/demo/tools/mac/DataViewer.app/Contents/MacOS/tool_launch.rb +38 -38
  310. data/demo/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -38
  311. data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +16 -16
  312. data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +10 -10
  313. data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/tool_launch.rb +38 -38
  314. data/demo/tools/mac/Launcher.app/Contents/Info.plist +38 -38
  315. data/demo/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +16 -16
  316. data/demo/tools/mac/Launcher.app/Contents/MacOS/main.sh +10 -10
  317. data/demo/tools/mac/Launcher.app/Contents/MacOS/tool_launch.rb +38 -38
  318. data/demo/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -38
  319. data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +16 -16
  320. data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +10 -10
  321. data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/tool_launch.rb +38 -38
  322. data/demo/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -38
  323. data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +16 -16
  324. data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +10 -10
  325. data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/tool_launch.rb +38 -38
  326. data/demo/tools/mac/PacketViewer.app/Contents/Info.plist +38 -38
  327. data/demo/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +16 -16
  328. data/demo/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +10 -10
  329. data/demo/tools/mac/PacketViewer.app/Contents/MacOS/tool_launch.rb +38 -38
  330. data/demo/tools/mac/Replay.app/Contents/Info.plist +38 -38
  331. data/demo/tools/mac/Replay.app/Contents/MacOS/Replay.rb +16 -16
  332. data/demo/tools/mac/Replay.app/Contents/MacOS/main.sh +10 -10
  333. data/demo/tools/mac/Replay.app/Contents/MacOS/tool_launch.rb +38 -38
  334. data/demo/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -38
  335. data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +16 -16
  336. data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +10 -10
  337. data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/tool_launch.rb +38 -38
  338. data/demo/tools/mac/TableManager.app/Contents/Info.plist +38 -38
  339. data/demo/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +16 -16
  340. data/demo/tools/mac/TableManager.app/Contents/MacOS/main.sh +10 -10
  341. data/demo/tools/mac/TableManager.app/Contents/MacOS/tool_launch.rb +38 -38
  342. data/demo/tools/mac/TestRunner.app/Contents/Info.plist +38 -38
  343. data/demo/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +16 -16
  344. data/demo/tools/mac/TestRunner.app/Contents/MacOS/main.sh +10 -10
  345. data/demo/tools/mac/TestRunner.app/Contents/MacOS/tool_launch.rb +38 -38
  346. data/demo/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -38
  347. data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +16 -16
  348. data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +10 -10
  349. data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/tool_launch.rb +38 -38
  350. data/demo/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -38
  351. data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +16 -16
  352. data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +10 -10
  353. data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/tool_launch.rb +38 -38
  354. data/demo/tools/mac/TlmViewer.app/Contents/Info.plist +38 -38
  355. data/demo/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +16 -16
  356. data/demo/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +10 -10
  357. data/demo/tools/mac/TlmViewer.app/Contents/MacOS/tool_launch.rb +38 -38
  358. data/demo/tools/tool_launch.rb +38 -38
  359. data/ext/cosmos/ext/array/array.c +111 -111
  360. data/ext/cosmos/ext/array/extconf.rb +13 -13
  361. data/ext/cosmos/ext/buffered_file/buffered_file.c +167 -167
  362. data/ext/cosmos/ext/buffered_file/extconf.rb +13 -13
  363. data/ext/cosmos/ext/config_parser/config_parser.c +237 -237
  364. data/ext/cosmos/ext/config_parser/extconf.rb +13 -13
  365. data/ext/cosmos/ext/cosmos_io/cosmos_io.c +117 -117
  366. data/ext/cosmos/ext/cosmos_io/extconf.rb +13 -13
  367. data/ext/cosmos/ext/crc/crc.c +341 -341
  368. data/ext/cosmos/ext/crc/extconf.rb +12 -12
  369. data/ext/cosmos/ext/line_graph/extconf.rb +13 -13
  370. data/ext/cosmos/ext/line_graph/line_graph.c +501 -501
  371. data/ext/cosmos/ext/low_fragmentation_array/extconf.rb +12 -12
  372. data/ext/cosmos/ext/low_fragmentation_array/low_fragmentation_array.c +265 -265
  373. data/ext/cosmos/ext/packet/extconf.rb +13 -13
  374. data/ext/cosmos/ext/packet/packet.c +339 -339
  375. data/ext/cosmos/ext/platform/extconf.rb +13 -13
  376. data/ext/cosmos/ext/platform/platform.c +101 -101
  377. data/ext/cosmos/ext/polynomial_conversion/extconf.rb +13 -13
  378. data/ext/cosmos/ext/polynomial_conversion/polynomial_conversion.c +73 -73
  379. data/ext/cosmos/ext/string/extconf.rb +13 -13
  380. data/ext/cosmos/ext/string/string.c +49 -49
  381. data/ext/cosmos/ext/structure/structure.c +1428 -1428
  382. data/ext/cosmos/ext/tabbed_plots_config/extconf.rb +13 -13
  383. data/ext/cosmos/ext/tabbed_plots_config/tabbed_plots_config.c +51 -51
  384. data/ext/cosmos/ext/telemetry/extconf.rb +13 -13
  385. data/ext/cosmos/ext/telemetry/telemetry.c +307 -307
  386. data/ext/mkrf_conf.rb +40 -40
  387. data/install/Gemfile +10 -10
  388. data/install/Launcher +16 -16
  389. data/install/Launcher.bat +0 -0
  390. data/install/Rakefile +77 -77
  391. data/install/config/data/crc.txt +151 -151
  392. data/install/config/system/system.txt +29 -29
  393. data/install/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
  394. data/install/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
  395. data/install/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
  396. data/install/config/targets/COSMOS/screens/limits_change.txt +20 -20
  397. data/install/config/targets/COSMOS/screens/version.txt +19 -19
  398. data/install/config/targets/COSMOS/target.txt +8 -8
  399. data/install/config/tools/cmd_tlm_server/cmd_tlm_server.txt +2 -2
  400. data/install/config/tools/data_viewer/data_viewer.txt +3 -3
  401. data/install/config/tools/handbook_creator/handbook_creator.txt +49 -49
  402. data/install/config/tools/handbook_creator/templates/command_packets.html.erb +86 -86
  403. data/install/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
  404. data/install/config/tools/handbook_creator/templates/footer.html.erb +9 -9
  405. data/install/config/tools/handbook_creator/templates/header.html.erb +25 -25
  406. data/install/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
  407. data/install/config/tools/handbook_creator/templates/nav.html.erb +27 -27
  408. data/install/config/tools/handbook_creator/templates/overview.html.erb +1 -1
  409. data/install/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
  410. data/install/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
  411. data/install/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
  412. data/install/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -80
  413. data/install/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
  414. data/install/config/tools/handbook_creator/templates/title.html.erb +1 -1
  415. data/install/config/tools/launcher/launcher.txt +40 -40
  416. data/install/config/tools/script_runner/script_runner.txt +3 -3
  417. data/install/config/tools/test_runner/test_runner.txt +8 -8
  418. data/install/config/tools/tlm_viewer/tlm_viewer.txt +5 -5
  419. data/install/lib/user_version.rb +3 -3
  420. data/install/tools/CmdExtractor +16 -16
  421. data/install/tools/CmdExtractor.bat +0 -0
  422. data/install/tools/CmdSender +16 -16
  423. data/install/tools/CmdSender.bat +0 -0
  424. data/install/tools/CmdTlmServer +16 -16
  425. data/install/tools/CmdTlmServer.bat +0 -0
  426. data/install/tools/DataViewer +16 -16
  427. data/install/tools/DataViewer.bat +0 -0
  428. data/install/tools/HandbookCreator +16 -16
  429. data/install/tools/HandbookCreator.bat +0 -0
  430. data/install/tools/Launcher +16 -16
  431. data/install/tools/Launcher.bat +0 -0
  432. data/install/tools/LimitsMonitor +16 -16
  433. data/install/tools/LimitsMonitor.bat +0 -0
  434. data/install/tools/OpenGLBuilder +16 -16
  435. data/install/tools/OpenGLBuilder.bat +0 -0
  436. data/install/tools/PacketViewer +16 -16
  437. data/install/tools/PacketViewer.bat +0 -0
  438. data/install/tools/Replay +16 -16
  439. data/install/tools/Replay.bat +0 -0
  440. data/install/tools/ScriptRunner +16 -16
  441. data/install/tools/ScriptRunner.bat +0 -0
  442. data/install/tools/TableManager +16 -16
  443. data/install/tools/TableManager.bat +0 -0
  444. data/install/tools/TestRunner +16 -16
  445. data/install/tools/TestRunner.bat +0 -0
  446. data/install/tools/TlmExtractor +16 -16
  447. data/install/tools/TlmExtractor.bat +0 -0
  448. data/install/tools/TlmGrapher +16 -16
  449. data/install/tools/TlmGrapher.bat +0 -0
  450. data/install/tools/TlmViewer +16 -16
  451. data/install/tools/TlmViewer.bat +0 -0
  452. data/install/tools/ToolLaunch.bat +14 -5
  453. data/install/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -38
  454. data/install/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +16 -16
  455. data/install/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +10 -10
  456. data/install/tools/mac/CmdExtractor.app/Contents/MacOS/tool_launch.rb +38 -38
  457. data/install/tools/mac/CmdSender.app/Contents/Info.plist +38 -38
  458. data/install/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +16 -16
  459. data/install/tools/mac/CmdSender.app/Contents/MacOS/main.sh +10 -10
  460. data/install/tools/mac/CmdSender.app/Contents/MacOS/tool_launch.rb +38 -38
  461. data/install/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -38
  462. data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +16 -16
  463. data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +10 -10
  464. data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/tool_launch.rb +38 -38
  465. data/install/tools/mac/DataViewer.app/Contents/Info.plist +38 -38
  466. data/install/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +16 -16
  467. data/install/tools/mac/DataViewer.app/Contents/MacOS/main.sh +10 -10
  468. data/install/tools/mac/DataViewer.app/Contents/MacOS/tool_launch.rb +38 -38
  469. data/install/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -38
  470. data/install/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +16 -16
  471. data/install/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +10 -10
  472. data/install/tools/mac/HandbookCreator.app/Contents/MacOS/tool_launch.rb +38 -38
  473. data/install/tools/mac/Launcher.app/Contents/Info.plist +38 -38
  474. data/install/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +16 -16
  475. data/install/tools/mac/Launcher.app/Contents/MacOS/main.sh +10 -10
  476. data/install/tools/mac/Launcher.app/Contents/MacOS/tool_launch.rb +38 -38
  477. data/install/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -38
  478. data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +16 -16
  479. data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +10 -10
  480. data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/tool_launch.rb +38 -38
  481. data/install/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -38
  482. data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +16 -16
  483. data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +10 -10
  484. data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/tool_launch.rb +38 -38
  485. data/install/tools/mac/PacketViewer.app/Contents/Info.plist +38 -38
  486. data/install/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +16 -16
  487. data/install/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +10 -10
  488. data/install/tools/mac/PacketViewer.app/Contents/MacOS/tool_launch.rb +38 -38
  489. data/install/tools/mac/Replay.app/Contents/Info.plist +38 -38
  490. data/install/tools/mac/Replay.app/Contents/MacOS/Replay.rb +16 -16
  491. data/install/tools/mac/Replay.app/Contents/MacOS/main.sh +10 -10
  492. data/install/tools/mac/Replay.app/Contents/MacOS/tool_launch.rb +38 -38
  493. data/install/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -38
  494. data/install/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +16 -16
  495. data/install/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +10 -10
  496. data/install/tools/mac/ScriptRunner.app/Contents/MacOS/tool_launch.rb +38 -38
  497. data/install/tools/mac/TableManager.app/Contents/Info.plist +38 -38
  498. data/install/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +16 -16
  499. data/install/tools/mac/TableManager.app/Contents/MacOS/main.sh +10 -10
  500. data/install/tools/mac/TableManager.app/Contents/MacOS/tool_launch.rb +38 -38
  501. data/install/tools/mac/TestRunner.app/Contents/Info.plist +38 -38
  502. data/install/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +16 -16
  503. data/install/tools/mac/TestRunner.app/Contents/MacOS/main.sh +10 -10
  504. data/install/tools/mac/TestRunner.app/Contents/MacOS/tool_launch.rb +38 -38
  505. data/install/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -38
  506. data/install/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +16 -16
  507. data/install/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +10 -10
  508. data/install/tools/mac/TlmExtractor.app/Contents/MacOS/tool_launch.rb +38 -38
  509. data/install/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -38
  510. data/install/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +16 -16
  511. data/install/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +10 -10
  512. data/install/tools/mac/TlmGrapher.app/Contents/MacOS/tool_launch.rb +38 -38
  513. data/install/tools/mac/TlmViewer.app/Contents/Info.plist +38 -38
  514. data/install/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +16 -16
  515. data/install/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +10 -10
  516. data/install/tools/mac/TlmViewer.app/Contents/MacOS/tool_launch.rb +38 -38
  517. data/install/tools/tool_launch.rb +38 -38
  518. data/lib/cosmos.rb +63 -63
  519. data/lib/cosmos/ccsds/ccsds_packet.rb +63 -63
  520. data/lib/cosmos/ccsds/ccsds_parser.rb +143 -143
  521. data/lib/cosmos/config/config_parser.rb +324 -324
  522. data/lib/cosmos/conversions.rb +13 -13
  523. data/lib/cosmos/conversions/conversion.rb +47 -47
  524. data/lib/cosmos/conversions/generic_conversion.rb +55 -55
  525. data/lib/cosmos/conversions/new_packet_log_conversion.rb +45 -45
  526. data/lib/cosmos/conversions/polynomial_conversion.rb +57 -57
  527. data/lib/cosmos/conversions/processor_conversion.rb +46 -46
  528. data/lib/cosmos/conversions/received_count_conversion.rb +33 -33
  529. data/lib/cosmos/conversions/received_time_formatted_conversion.rb +37 -37
  530. data/lib/cosmos/conversions/received_time_seconds_conversion.rb +37 -37
  531. data/lib/cosmos/conversions/segmented_polynomial_conversion.rb +128 -128
  532. data/lib/cosmos/conversions/unix_time_conversion.rb +50 -50
  533. data/lib/cosmos/conversions/unix_time_formatted_conversion.rb +44 -44
  534. data/lib/cosmos/conversions/unix_time_seconds_conversion.rb +44 -44
  535. data/lib/cosmos/core_ext.rb +18 -18
  536. data/lib/cosmos/core_ext/array.rb +354 -354
  537. data/lib/cosmos/core_ext/class.rb +51 -51
  538. data/lib/cosmos/core_ext/cosmos_io.rb +29 -29
  539. data/lib/cosmos/core_ext/exception.rb +52 -52
  540. data/lib/cosmos/core_ext/file.rb +75 -75
  541. data/lib/cosmos/core_ext/hash.rb +28 -28
  542. data/lib/cosmos/core_ext/io.rb +75 -75
  543. data/lib/cosmos/core_ext/kernel.rb +38 -38
  544. data/lib/cosmos/core_ext/math.rb +119 -119
  545. data/lib/cosmos/core_ext/matrix.rb +146 -146
  546. data/lib/cosmos/core_ext/objectspace.rb +29 -29
  547. data/lib/cosmos/core_ext/range.rb +22 -22
  548. data/lib/cosmos/core_ext/socket.rb +32 -32
  549. data/lib/cosmos/core_ext/string.rb +311 -311
  550. data/lib/cosmos/core_ext/stringio.rb +24 -24
  551. data/lib/cosmos/core_ext/time.rb +448 -448
  552. data/lib/cosmos/gui/choosers/combobox_chooser.rb +130 -130
  553. data/lib/cosmos/gui/choosers/file_chooser.rb +68 -68
  554. data/lib/cosmos/gui/choosers/float_chooser.rb +82 -82
  555. data/lib/cosmos/gui/choosers/integer_chooser.rb +80 -80
  556. data/lib/cosmos/gui/choosers/string_chooser.rb +53 -53
  557. data/lib/cosmos/gui/choosers/telemetry_chooser.rb +326 -326
  558. data/lib/cosmos/gui/dialogs/about_dialog.rb +137 -137
  559. data/lib/cosmos/gui/dialogs/calendar_dialog.rb +136 -136
  560. data/lib/cosmos/gui/dialogs/cmd_details_dialog.rb +52 -52
  561. data/lib/cosmos/gui/dialogs/cmd_tlm_raw_dialog.rb +149 -149
  562. data/lib/cosmos/gui/dialogs/details_dialog.rb +174 -174
  563. data/lib/cosmos/gui/dialogs/exception_dialog.rb +97 -97
  564. data/lib/cosmos/gui/dialogs/exception_list_dialog.rb +59 -59
  565. data/lib/cosmos/gui/dialogs/find_replace_dialog.rb +260 -260
  566. data/lib/cosmos/gui/dialogs/legal_dialog.rb +169 -169
  567. data/lib/cosmos/gui/dialogs/packet_log_dialog.rb +118 -118
  568. data/lib/cosmos/gui/dialogs/progress_dialog.rb +276 -276
  569. data/lib/cosmos/gui/dialogs/pry_dialog.rb +165 -165
  570. data/lib/cosmos/gui/dialogs/scroll_text_dialog.rb +37 -37
  571. data/lib/cosmos/gui/dialogs/select_dialog.rb +54 -54
  572. data/lib/cosmos/gui/dialogs/set_tlm_dialog.rb +131 -131
  573. data/lib/cosmos/gui/dialogs/splash.rb +135 -135
  574. data/lib/cosmos/gui/dialogs/tlm_details_dialog.rb +206 -206
  575. data/lib/cosmos/gui/dialogs/tlm_edit_dialog.rb +81 -81
  576. data/lib/cosmos/gui/line_graph/line_graph.rb +456 -456
  577. data/lib/cosmos/gui/line_graph/line_graph_dialog.rb +34 -34
  578. data/lib/cosmos/gui/line_graph/line_graph_drawing.rb +473 -473
  579. data/lib/cosmos/gui/line_graph/line_graph_popups.rb +116 -116
  580. data/lib/cosmos/gui/line_graph/line_graph_scaling.rb +451 -451
  581. data/lib/cosmos/gui/line_graph/line_graph_script.rb +26 -26
  582. data/lib/cosmos/gui/line_graph/lines.rb +290 -290
  583. data/lib/cosmos/gui/line_graph/overview_graph.rb +469 -469
  584. data/lib/cosmos/gui/opengl/earth_model.rb +22 -22
  585. data/lib/cosmos/gui/opengl/gl_bounds.rb +67 -67
  586. data/lib/cosmos/gui/opengl/gl_light.rb +39 -39
  587. data/lib/cosmos/gui/opengl/gl_material.rb +29 -29
  588. data/lib/cosmos/gui/opengl/gl_scene.rb +72 -72
  589. data/lib/cosmos/gui/opengl/gl_shape.rb +146 -146
  590. data/lib/cosmos/gui/opengl/gl_viewer.rb +724 -724
  591. data/lib/cosmos/gui/opengl/gl_viewport.rb +35 -35
  592. data/lib/cosmos/gui/opengl/moon_model.rb +22 -22
  593. data/lib/cosmos/gui/opengl/opengl.rb +8 -8
  594. data/lib/cosmos/gui/opengl/stl_reader.rb +211 -211
  595. data/lib/cosmos/gui/opengl/stl_shape.rb +124 -124
  596. data/lib/cosmos/gui/opengl/texture_mapped_sphere.rb +202 -202
  597. data/lib/cosmos/gui/qt.rb +860 -860
  598. data/lib/cosmos/gui/qt_tool.rb +380 -380
  599. data/lib/cosmos/gui/text/completion.rb +381 -381
  600. data/lib/cosmos/gui/text/completion_line_edit.rb +30 -30
  601. data/lib/cosmos/gui/text/completion_text_edit.rb +179 -179
  602. data/lib/cosmos/gui/text/ruby_editor.rb +415 -415
  603. data/lib/cosmos/gui/utilities/screenshot.rb +25 -25
  604. data/lib/cosmos/gui/utilities/script_module_gui.rb +330 -330
  605. data/lib/cosmos/gui/widgets/full_text_search_line_edit.rb +161 -161
  606. data/lib/cosmos/gui/widgets/packet_log_frame.rb +305 -305
  607. data/lib/cosmos/gui/widgets/realtime_button_bar.rb +98 -98
  608. data/lib/cosmos/interfaces.rb +11 -11
  609. data/lib/cosmos/interfaces/cmd_tlm_server_interface.rb +153 -153
  610. data/lib/cosmos/interfaces/interface.rb +225 -225
  611. data/lib/cosmos/interfaces/linc_interface.rb +360 -360
  612. data/lib/cosmos/interfaces/serial_interface.rb +76 -76
  613. data/lib/cosmos/interfaces/simulated_target_interface.rb +129 -129
  614. data/lib/cosmos/interfaces/stream_interface.rb +136 -136
  615. data/lib/cosmos/interfaces/tcpip_client_interface.rb +60 -60
  616. data/lib/cosmos/interfaces/tcpip_server_interface.rb +164 -164
  617. data/lib/cosmos/interfaces/udp_interface.rb +161 -161
  618. data/lib/cosmos/io/buffered_file.rb +11 -11
  619. data/lib/cosmos/io/cosmos_snmp.rb +50 -50
  620. data/lib/cosmos/io/io_multiplexer.rb +89 -89
  621. data/lib/cosmos/io/json_drb.rb +376 -376
  622. data/lib/cosmos/io/json_drb_object.rb +198 -198
  623. data/lib/cosmos/io/json_rpc.rb +365 -365
  624. data/lib/cosmos/io/posix_serial_driver.rb +145 -145
  625. data/lib/cosmos/io/raw_logger.rb +174 -174
  626. data/lib/cosmos/io/raw_logger_pair.rb +71 -71
  627. data/lib/cosmos/io/serial_driver.rb +85 -85
  628. data/lib/cosmos/io/stderr.rb +36 -36
  629. data/lib/cosmos/io/stdout.rb +36 -36
  630. data/lib/cosmos/io/tcpip_server.rb +571 -571
  631. data/lib/cosmos/io/udp_sockets.rb +152 -152
  632. data/lib/cosmos/io/win32_serial_driver.rb +145 -145
  633. data/lib/cosmos/packet_logs.rb +7 -7
  634. data/lib/cosmos/packet_logs/ccsds_log_reader.rb +104 -104
  635. data/lib/cosmos/packet_logs/meta_packet_log_writer.rb +107 -107
  636. data/lib/cosmos/packet_logs/packet_log_reader.rb +450 -450
  637. data/lib/cosmos/packet_logs/packet_log_writer.rb +323 -323
  638. data/lib/cosmos/packet_logs/packet_log_writer_pair.rb +30 -30
  639. data/lib/cosmos/packets/binary_accessor.rb +634 -634
  640. data/lib/cosmos/packets/commands.rb +293 -293
  641. data/lib/cosmos/packets/limits.rb +267 -267
  642. data/lib/cosmos/packets/limits_response.rb +38 -38
  643. data/lib/cosmos/packets/packet.rb +786 -786
  644. data/lib/cosmos/packets/packet_config.rb +482 -482
  645. data/lib/cosmos/packets/packet_item.rb +317 -317
  646. data/lib/cosmos/packets/packet_item_limits.rb +128 -128
  647. data/lib/cosmos/packets/parsers/format_string_parser.rb +58 -58
  648. data/lib/cosmos/packets/parsers/limits_parser.rb +146 -146
  649. data/lib/cosmos/packets/parsers/limits_response_parser.rb +52 -52
  650. data/lib/cosmos/packets/parsers/macro_parser.rb +116 -116
  651. data/lib/cosmos/packets/parsers/packet_item_parser.rb +215 -215
  652. data/lib/cosmos/packets/parsers/packet_parser.rb +123 -123
  653. data/lib/cosmos/packets/parsers/processor_parser.rb +63 -63
  654. data/lib/cosmos/packets/parsers/state_parser.rb +116 -116
  655. data/lib/cosmos/packets/structure.rb +458 -458
  656. data/lib/cosmos/packets/structure_item.rb +233 -233
  657. data/lib/cosmos/packets/telemetry.rb +350 -350
  658. data/lib/cosmos/processors.rb +6 -6
  659. data/lib/cosmos/processors/new_packet_log_processor.rb +34 -34
  660. data/lib/cosmos/processors/processor.rb +71 -71
  661. data/lib/cosmos/processors/statistics_processor.rb +65 -65
  662. data/lib/cosmos/processors/watermark_processor.rb +44 -44
  663. data/lib/cosmos/script.rb +9 -9
  664. data/lib/cosmos/script/cmd_tlm_server.rb +110 -110
  665. data/lib/cosmos/script/commands.rb +184 -184
  666. data/lib/cosmos/script/extract.rb +123 -123
  667. data/lib/cosmos/script/limits.rb +114 -114
  668. data/lib/cosmos/script/script.rb +76 -76
  669. data/lib/cosmos/script/scripting.rb +897 -897
  670. data/lib/cosmos/script/telemetry.rb +174 -174
  671. data/lib/cosmos/script/tools.rb +138 -138
  672. data/lib/cosmos/streams/burst_stream_protocol.rb +25 -25
  673. data/lib/cosmos/streams/fixed_stream_protocol.rb +111 -111
  674. data/lib/cosmos/streams/length_stream_protocol.rb +140 -140
  675. data/lib/cosmos/streams/preidentified_stream_protocol.rb +118 -118
  676. data/lib/cosmos/streams/serial_stream.rb +157 -157
  677. data/lib/cosmos/streams/stream.rb +63 -63
  678. data/lib/cosmos/streams/stream_protocol.rb +373 -373
  679. data/lib/cosmos/streams/tcpip_client_stream.rb +113 -113
  680. data/lib/cosmos/streams/tcpip_socket_stream.rb +143 -143
  681. data/lib/cosmos/streams/template_stream_protocol.rb +140 -140
  682. data/lib/cosmos/streams/terminated_stream_protocol.rb +81 -81
  683. data/lib/cosmos/system.rb +4 -4
  684. data/lib/cosmos/system/system.rb +618 -618
  685. data/lib/cosmos/system/target.rb +197 -197
  686. data/lib/cosmos/tools/cmd_extractor/cmd_extractor.rb +255 -255
  687. data/lib/cosmos/tools/cmd_sender/cmd_sender.rb +717 -717
  688. data/lib/cosmos/tools/cmd_sender/cmd_sender_item_delegate.rb +77 -77
  689. data/lib/cosmos/tools/cmd_sender/cmd_sender_text_edit.rb +70 -70
  690. data/lib/cosmos/tools/cmd_tlm_server/api.rb +1034 -1034
  691. data/lib/cosmos/tools/cmd_tlm_server/background_task.rb +46 -46
  692. data/lib/cosmos/tools/cmd_tlm_server/background_tasks.rb +67 -67
  693. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +515 -515
  694. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_config.rb +253 -253
  695. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +408 -408
  696. data/lib/cosmos/tools/cmd_tlm_server/commanding.rb +112 -112
  697. data/lib/cosmos/tools/cmd_tlm_server/connections.rb +175 -175
  698. data/lib/cosmos/tools/cmd_tlm_server/gui/interfaces_tab.rb +200 -200
  699. data/lib/cosmos/tools/cmd_tlm_server/gui/logging_tab.rb +176 -176
  700. data/lib/cosmos/tools/cmd_tlm_server/gui/packets_tab.rb +150 -150
  701. data/lib/cosmos/tools/cmd_tlm_server/gui/status_tab.rb +244 -244
  702. data/lib/cosmos/tools/cmd_tlm_server/gui/targets_tab.rb +90 -90
  703. data/lib/cosmos/tools/cmd_tlm_server/interface_thread.rb +266 -266
  704. data/lib/cosmos/tools/cmd_tlm_server/interfaces.rb +127 -127
  705. data/lib/cosmos/tools/cmd_tlm_server/packet_logging.rb +132 -132
  706. data/lib/cosmos/tools/cmd_tlm_server/router_thread.rb +66 -66
  707. data/lib/cosmos/tools/cmd_tlm_server/routers.rb +97 -97
  708. data/lib/cosmos/tools/data_viewer/data_viewer.rb +621 -621
  709. data/lib/cosmos/tools/data_viewer/data_viewer_component.rb +134 -134
  710. data/lib/cosmos/tools/data_viewer/dump_component.rb +40 -40
  711. data/lib/cosmos/tools/handbook_creator/handbook_creator.rb +156 -156
  712. data/lib/cosmos/tools/handbook_creator/handbook_creator_config.rb +382 -382
  713. data/lib/cosmos/tools/launcher/launcher.rb +188 -188
  714. data/lib/cosmos/tools/launcher/launcher_config.rb +256 -256
  715. data/lib/cosmos/tools/launcher/launcher_multitool.rb +40 -40
  716. data/lib/cosmos/tools/launcher/launcher_tool.rb +116 -116
  717. data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +837 -837
  718. data/lib/cosmos/tools/opengl_builder/opengl_builder.rb +416 -416
  719. data/lib/cosmos/tools/opengl_builder/scene_config.rb +118 -118
  720. data/lib/cosmos/tools/packet_viewer/packet_viewer.rb +542 -542
  721. data/lib/cosmos/tools/replay/replay.rb +501 -501
  722. data/lib/cosmos/tools/replay/replay_server.rb +91 -91
  723. data/lib/cosmos/tools/script_runner/script_audit.rb +147 -147
  724. data/lib/cosmos/tools/script_runner/script_runner.rb +922 -922
  725. data/lib/cosmos/tools/script_runner/script_runner_config.rb +40 -40
  726. data/lib/cosmos/tools/script_runner/script_runner_frame.rb +1798 -1798
  727. data/lib/cosmos/tools/table_manager/table.rb +70 -70
  728. data/lib/cosmos/tools/table_manager/table_config.rb +764 -764
  729. data/lib/cosmos/tools/table_manager/table_item.rb +74 -74
  730. data/lib/cosmos/tools/table_manager/table_manager.rb +1065 -1065
  731. data/lib/cosmos/tools/table_manager/table_manager_core.rb +539 -539
  732. data/lib/cosmos/tools/test_runner/results_writer.rb +283 -283
  733. data/lib/cosmos/tools/test_runner/test.rb +539 -539
  734. data/lib/cosmos/tools/test_runner/test_runner.rb +1189 -1189
  735. data/lib/cosmos/tools/test_runner/test_runner_chooser.rb +341 -341
  736. data/lib/cosmos/tools/tlm_extractor/text_item_chooser.rb +60 -60
  737. data/lib/cosmos/tools/tlm_extractor/tlm_extractor.rb +1016 -1016
  738. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_config.rb +371 -371
  739. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_processor.rb +60 -60
  740. data/lib/cosmos/tools/tlm_grapher/data_object_adders/housekeeping_data_object_adder.rb +75 -75
  741. data/lib/cosmos/tools/tlm_grapher/data_object_adders/singlexy_data_object_adder.rb +44 -44
  742. data/lib/cosmos/tools/tlm_grapher/data_object_adders/xy_data_object_adder.rb +95 -95
  743. data/lib/cosmos/tools/tlm_grapher/data_object_editors/data_object_editor.rb +61 -61
  744. data/lib/cosmos/tools/tlm_grapher/data_object_editors/housekeeping_data_object_editor.rb +181 -181
  745. data/lib/cosmos/tools/tlm_grapher/data_object_editors/linegraph_data_object_editor.rb +141 -141
  746. data/lib/cosmos/tools/tlm_grapher/data_object_editors/singlexy_data_object_editor.rb +30 -30
  747. data/lib/cosmos/tools/tlm_grapher/data_object_editors/xy_data_object_editor.rb +174 -174
  748. data/lib/cosmos/tools/tlm_grapher/data_objects/data_object.rb +193 -193
  749. data/lib/cosmos/tools/tlm_grapher/data_objects/housekeeping_data_object.rb +407 -407
  750. data/lib/cosmos/tools/tlm_grapher/data_objects/linegraph_data_object.rb +176 -176
  751. data/lib/cosmos/tools/tlm_grapher/data_objects/singlexy_data_object.rb +25 -25
  752. data/lib/cosmos/tools/tlm_grapher/data_objects/xy_data_object.rb +323 -323
  753. data/lib/cosmos/tools/tlm_grapher/plot_editors/linegraph_plot_editor.rb +181 -181
  754. data/lib/cosmos/tools/tlm_grapher/plot_editors/plot_editor.rb +28 -28
  755. data/lib/cosmos/tools/tlm_grapher/plot_editors/singlexy_plot_editor.rb +30 -30
  756. data/lib/cosmos/tools/tlm_grapher/plot_editors/xy_plot_editor.rb +59 -59
  757. data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/linegraph_plot_gui_object.rb +172 -172
  758. data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/singlexy_plot_gui_object.rb +27 -27
  759. data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/xy_plot_gui_object.rb +74 -74
  760. data/lib/cosmos/tools/tlm_grapher/plots/linegraph_plot.rb +201 -201
  761. data/lib/cosmos/tools/tlm_grapher/plots/plot.rb +69 -69
  762. data/lib/cosmos/tools/tlm_grapher/plots/singlexy_plot.rb +20 -20
  763. data/lib/cosmos/tools/tlm_grapher/plots/xy_plot.rb +61 -61
  764. data/lib/cosmos/tools/tlm_grapher/tabbed_plots/overview_tabbed_plots.rb +1291 -1291
  765. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_config.rb +430 -430
  766. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_data_object_editor.rb +107 -107
  767. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_logfile_thread.rb +114 -114
  768. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_plot_editor.rb +101 -101
  769. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_realtime_thread.rb +78 -78
  770. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tab.rb +57 -57
  771. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tool.rb +1004 -1004
  772. data/lib/cosmos/tools/tlm_grapher/tlm_grapher.rb +87 -87
  773. data/lib/cosmos/tools/tlm_viewer/screen.rb +486 -486
  774. data/lib/cosmos/tools/tlm_viewer/tlm_viewer.rb +561 -561
  775. data/lib/cosmos/tools/tlm_viewer/tlm_viewer_config.rb +290 -290
  776. data/lib/cosmos/tools/tlm_viewer/widgets.rb +53 -53
  777. data/lib/cosmos/tools/tlm_viewer/widgets/aging_widget.rb +110 -110
  778. data/lib/cosmos/tools/tlm_viewer/widgets/array_widget.rb +66 -66
  779. data/lib/cosmos/tools/tlm_viewer/widgets/block_widget.rb +57 -57
  780. data/lib/cosmos/tools/tlm_viewer/widgets/button_widget.rb +39 -39
  781. data/lib/cosmos/tools/tlm_viewer/widgets/canvas_widget.rb +62 -62
  782. data/lib/cosmos/tools/tlm_viewer/widgets/canvasimage_widget.rb +41 -41
  783. data/lib/cosmos/tools/tlm_viewer/widgets/canvasimagevalue_widget.rb +57 -57
  784. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabel_widget.rb +37 -37
  785. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabelvalue_widget.rb +56 -56
  786. data/lib/cosmos/tools/tlm_viewer/widgets/canvasline_widget.rb +55 -55
  787. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslinevalue_widget.rb +66 -66
  788. data/lib/cosmos/tools/tlm_viewer/widgets/canvasvalue_widget.rb +124 -124
  789. data/lib/cosmos/tools/tlm_viewer/widgets/checkbutton_widget.rb +31 -31
  790. data/lib/cosmos/tools/tlm_viewer/widgets/combobox_widget.rb +30 -30
  791. data/lib/cosmos/tools/tlm_viewer/widgets/formatfontvalue_widget.rb +36 -36
  792. data/lib/cosmos/tools/tlm_viewer/widgets/formatvalue_widget.rb +35 -35
  793. data/lib/cosmos/tools/tlm_viewer/widgets/horizontal_widget.rb +27 -27
  794. data/lib/cosmos/tools/tlm_viewer/widgets/horizontalbox_widget.rb +31 -31
  795. data/lib/cosmos/tools/tlm_viewer/widgets/horizontalline_widget.rb +26 -26
  796. data/lib/cosmos/tools/tlm_viewer/widgets/label_widget.rb +29 -29
  797. data/lib/cosmos/tools/tlm_viewer/widgets/labelformatvalue_widget.rb +39 -39
  798. data/lib/cosmos/tools/tlm_viewer/widgets/labelprogressbar_widget.rb +38 -38
  799. data/lib/cosmos/tools/tlm_viewer/widgets/labeltrendlimitsbar_widget.rb +38 -38
  800. data/lib/cosmos/tools/tlm_viewer/widgets/labelvalue_widget.rb +39 -39
  801. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluedesc_widget.rb +42 -42
  802. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluelimitsbar_widget.rb +37 -37
  803. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluerangebar_widget.rb +37 -37
  804. data/lib/cosmos/tools/tlm_viewer/widgets/layout_widget.rb +34 -34
  805. data/lib/cosmos/tools/tlm_viewer/widgets/limitsbar_widget.rb +178 -178
  806. data/lib/cosmos/tools/tlm_viewer/widgets/linegraph_widget.rb +54 -54
  807. data/lib/cosmos/tools/tlm_viewer/widgets/matrixbycolumns_widget.rb +47 -47
  808. data/lib/cosmos/tools/tlm_viewer/widgets/multi_widget.rb +116 -116
  809. data/lib/cosmos/tools/tlm_viewer/widgets/progressbar_widget.rb +34 -34
  810. data/lib/cosmos/tools/tlm_viewer/widgets/radiobutton_widget.rb +30 -30
  811. data/lib/cosmos/tools/tlm_viewer/widgets/rangebar_widget.rb +57 -57
  812. data/lib/cosmos/tools/tlm_viewer/widgets/screenshotbutton_widget.rb +34 -34
  813. data/lib/cosmos/tools/tlm_viewer/widgets/scrollwindow_widget.rb +35 -35
  814. data/lib/cosmos/tools/tlm_viewer/widgets/sectionheader_widget.rb +33 -33
  815. data/lib/cosmos/tools/tlm_viewer/widgets/tabbook_widget.rb +26 -26
  816. data/lib/cosmos/tools/tlm_viewer/widgets/tabitem_widget.rb +28 -28
  817. data/lib/cosmos/tools/tlm_viewer/widgets/textbox_widget.rb +47 -47
  818. data/lib/cosmos/tools/tlm_viewer/widgets/textfield_widget.rb +26 -26
  819. data/lib/cosmos/tools/tlm_viewer/widgets/timegraph_widget.rb +88 -88
  820. data/lib/cosmos/tools/tlm_viewer/widgets/title_widget.rb +27 -27
  821. data/lib/cosmos/tools/tlm_viewer/widgets/trendbar_widget.rb +130 -130
  822. data/lib/cosmos/tools/tlm_viewer/widgets/trendlimitsbar_widget.rb +46 -46
  823. data/lib/cosmos/tools/tlm_viewer/widgets/value_widget.rb +43 -43
  824. data/lib/cosmos/tools/tlm_viewer/widgets/valuelimitsbar_widget.rb +37 -37
  825. data/lib/cosmos/tools/tlm_viewer/widgets/valuerangebar_widget.rb +37 -37
  826. data/lib/cosmos/tools/tlm_viewer/widgets/vertical_widget.rb +35 -35
  827. data/lib/cosmos/tools/tlm_viewer/widgets/verticalbox_widget.rb +37 -37
  828. data/lib/cosmos/tools/tlm_viewer/widgets/widget.rb +257 -257
  829. data/lib/cosmos/top_level.rb +759 -759
  830. data/lib/cosmos/utilities.rb +11 -11
  831. data/lib/cosmos/utilities/crc.rb +166 -166
  832. data/lib/cosmos/utilities/csv.rb +83 -83
  833. data/lib/cosmos/utilities/logger.rb +137 -137
  834. data/lib/cosmos/utilities/low_fragmentation_array.rb +11 -11
  835. data/lib/cosmos/utilities/message_log.rb +79 -79
  836. data/lib/cosmos/utilities/quaternion.rb +258 -258
  837. data/lib/cosmos/utilities/ruby_lex_utils.rb +313 -313
  838. data/lib/cosmos/utilities/simulated_target.rb +99 -99
  839. data/lib/cosmos/utilities/sleeper.rb +44 -44
  840. data/lib/cosmos/version.rb +12 -12
  841. data/lib/cosmos/win32/excel.rb +66 -66
  842. data/lib/cosmos/win32/win32.rb +387 -387
  843. data/lib/cosmos/win32/win32_main.rb +321 -321
  844. data/roodi.yml +24 -24
  845. data/run_gui_tests.bat +0 -0
  846. data/spec/ccsds/ccsds_packet_spec.rb +67 -67
  847. data/spec/ccsds/ccsds_parser_spec.rb +148 -148
  848. data/spec/config/config_parser_spec.rb +322 -322
  849. data/spec/conversions/conversion_spec.rb +31 -31
  850. data/spec/conversions/generic_conversion_spec.rb +45 -45
  851. data/spec/conversions/new_packet_log_conversion_spec.rb +39 -39
  852. data/spec/conversions/polynomial_conversion_spec.rb +40 -40
  853. data/spec/conversions/processor_conversion_spec.rb +45 -45
  854. data/spec/conversions/received_count_conversion_spec.rb +43 -43
  855. data/spec/conversions/received_time_formatted_conversion_spec.rb +49 -49
  856. data/spec/conversions/received_time_seconds_conversion_spec.rb +50 -50
  857. data/spec/conversions/segmented_polynomial_conversion_spec.rb +51 -51
  858. data/spec/conversions/unix_time_formatted_conversion_spec.rb +74 -74
  859. data/spec/conversions/unix_time_seconds_conversion_spec.rb +76 -76
  860. data/spec/core_ext/array_spec.rb +186 -186
  861. data/spec/core_ext/class_spec.rb +36 -36
  862. data/spec/core_ext/cosmos_io_spec.rb +77 -77
  863. data/spec/core_ext/exception_spec.rb +91 -91
  864. data/spec/core_ext/file_spec.rb +72 -72
  865. data/spec/core_ext/hash_spec.rb +24 -24
  866. data/spec/core_ext/io_spec.rb +46 -46
  867. data/spec/core_ext/kernel_spec.rb +54 -54
  868. data/spec/core_ext/math_spec.rb +116 -116
  869. data/spec/core_ext/matrix_spec.rb +66 -66
  870. data/spec/core_ext/objectspace_spec.rb +29 -29
  871. data/spec/core_ext/range_spec.rb +21 -21
  872. data/spec/core_ext/socket_spec.rb +32 -32
  873. data/spec/core_ext/string_spec.rb +223 -223
  874. data/spec/core_ext/stringio_spec.rb +21 -21
  875. data/spec/core_ext/time_spec.rb +202 -202
  876. data/spec/gui/line_graph/line_clip_spec.rb +322 -322
  877. data/spec/gui/qt_spec.rb +102 -102
  878. data/spec/install/config/system/system.txt +33 -33
  879. data/spec/install/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
  880. data/spec/install/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
  881. data/spec/install/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
  882. data/spec/install/config/targets/COSMOS/screens/limits_change.txt +20 -20
  883. data/spec/install/config/targets/COSMOS/screens/version.txt +19 -19
  884. data/spec/install/config/targets/COSMOS/target.txt +5 -5
  885. data/spec/install/config/targets/INST/cmd_tlm/inst_cmd_linc.txt +30 -30
  886. data/spec/install/config/targets/INST/cmd_tlm/inst_cmds.txt +111 -111
  887. data/spec/install/config/targets/INST/cmd_tlm/inst_tlm.txt +236 -236
  888. data/spec/install/config/targets/INST/cmd_tlm/inst_tlm_linc.txt +25 -25
  889. data/spec/install/config/targets/INST/cmd_tlm_server.txt +5 -5
  890. data/spec/install/config/targets/INST/lib/sim_inst.rb +305 -305
  891. data/spec/install/config/targets/INST/target.txt +10 -10
  892. data/spec/install/config/targets/META/cmd_tlm/meta_cmd.txt +4 -4
  893. data/spec/install/config/targets/META/cmd_tlm/meta_tlm.txt +4 -4
  894. data/spec/install/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -7
  895. data/spec/interfaces/cmd_tlm_server_interface_spec.rb +150 -150
  896. data/spec/interfaces/interface_spec.rb +130 -130
  897. data/spec/interfaces/linc_interface_spec.rb +259 -259
  898. data/spec/interfaces/serial_interface_spec.rb +56 -56
  899. data/spec/interfaces/simulated_target_interface_spec.rb +128 -128
  900. data/spec/interfaces/stream_interface_spec.rb +157 -157
  901. data/spec/interfaces/tcpip_client_interface_spec.rb +55 -55
  902. data/spec/interfaces/tcpip_server_interface_spec.rb +160 -160
  903. data/spec/interfaces/udp_interface_spec.rb +175 -175
  904. data/spec/io/buffered_file_spec.rb +113 -113
  905. data/spec/io/io_multiplexer_spec.rb +94 -94
  906. data/spec/io/json_drb_object_spec.rb +119 -119
  907. data/spec/io/json_drb_spec.rb +311 -311
  908. data/spec/io/json_rpc_spec.rb +264 -264
  909. data/spec/io/raw_logger_pair_spec.rb +76 -76
  910. data/spec/io/raw_logger_spec.rb +133 -133
  911. data/spec/io/serial_driver_spec.rb +60 -60
  912. data/spec/io/stderr_spec.rb +32 -32
  913. data/spec/io/stdout_spec.rb +32 -32
  914. data/spec/io/tcpip_server_spec.rb +338 -338
  915. data/spec/io/udp_sockets_spec.rb +94 -94
  916. data/spec/io/win32_serial_driver_spec.rb +88 -88
  917. data/spec/packet_logs/meta_packet_log_writer_spec.rb +170 -170
  918. data/spec/packet_logs/packet_log_reader_spec.rb +468 -468
  919. data/spec/packet_logs/packet_log_writer_pair_spec.rb +30 -30
  920. data/spec/packet_logs/packet_log_writer_spec.rb +225 -225
  921. data/spec/packets/binary_accessor_spec.rb +2326 -2326
  922. data/spec/packets/commands_spec.rb +369 -369
  923. data/spec/packets/limits_response_spec.rb +25 -25
  924. data/spec/packets/limits_spec.rb +344 -344
  925. data/spec/packets/packet_config_spec.rb +805 -805
  926. data/spec/packets/packet_item_limits_spec.rb +161 -161
  927. data/spec/packets/packet_item_spec.rb +386 -386
  928. data/spec/packets/packet_spec.rb +1317 -1317
  929. data/spec/packets/parsers/format_string_parser_spec.rb +122 -122
  930. data/spec/packets/parsers/limits_parser_spec.rb +282 -282
  931. data/spec/packets/parsers/limits_response_parser_spec.rb +149 -149
  932. data/spec/packets/parsers/macro_parser_spec.rb +212 -212
  933. data/spec/packets/parsers/packet_item_parser_spec.rb +306 -306
  934. data/spec/packets/parsers/packet_parser_spec.rb +99 -99
  935. data/spec/packets/parsers/processor_parser_spec.rb +114 -114
  936. data/spec/packets/parsers/state_parser_spec.rb +156 -156
  937. data/spec/packets/structure_item_spec.rb +195 -195
  938. data/spec/packets/structure_spec.rb +565 -565
  939. data/spec/packets/telemetry_spec.rb +578 -578
  940. data/spec/processors/new_packet_log_processor_spec.rb +39 -39
  941. data/spec/processors/processor_spec.rb +55 -55
  942. data/spec/processors/statistics_processor_spec.rb +60 -60
  943. data/spec/processors/watermark_processor_spec.rb +51 -51
  944. data/spec/script/cmd_tlm_server_spec.rb +110 -110
  945. data/spec/script/commands_disconnect_spec.rb +270 -270
  946. data/spec/script/commands_spec.rb +302 -302
  947. data/spec/script/limits_spec.rb +153 -153
  948. data/spec/script/script_spec.rb +86 -86
  949. data/spec/script/scripting_spec.rb +440 -440
  950. data/spec/script/telemetry_spec.rb +165 -165
  951. data/spec/script/tools_spec.rb +117 -117
  952. data/spec/spec_helper.rb +190 -190
  953. data/spec/streams/burst_stream_protocol_spec.rb +32 -32
  954. data/spec/streams/fixed_stream_protocol_spec.rb +113 -113
  955. data/spec/streams/length_stream_protocol_spec.rb +300 -300
  956. data/spec/streams/preidentified_stream_protocol_spec.rb +121 -121
  957. data/spec/streams/serial_stream_spec.rb +117 -117
  958. data/spec/streams/stream_protocol_spec.rb +346 -346
  959. data/spec/streams/stream_spec.rb +30 -30
  960. data/spec/streams/tcpip_client_stream_spec.rb +57 -57
  961. data/spec/streams/tcpip_socket_stream_spec.rb +193 -193
  962. data/spec/streams/template_stream_protocol_spec.rb +156 -156
  963. data/spec/streams/terminated_stream_protocol_spec.rb +127 -127
  964. data/spec/system/system_spec.rb +665 -665
  965. data/spec/system/target_spec.rb +250 -250
  966. data/spec/tools/cmd_tlm_server/api_spec.rb +1117 -1117
  967. data/spec/tools/cmd_tlm_server/background_task_spec.rb +32 -32
  968. data/spec/tools/cmd_tlm_server/background_tasks_spec.rb +81 -81
  969. data/spec/tools/cmd_tlm_server/cmd_tlm_server_config_spec.rb +453 -453
  970. data/spec/tools/cmd_tlm_server/cmd_tlm_server_spec.rb +415 -415
  971. data/spec/tools/cmd_tlm_server/commanding_spec.rb +151 -151
  972. data/spec/tools/cmd_tlm_server/connections_spec.rb +235 -235
  973. data/spec/tools/cmd_tlm_server/interface_thread_spec.rb +306 -306
  974. data/spec/tools/cmd_tlm_server/interfaces_spec.rb +252 -252
  975. data/spec/tools/cmd_tlm_server/packet_logging_spec.rb +143 -143
  976. data/spec/tools/cmd_tlm_server/router_thread_spec.rb +151 -151
  977. data/spec/tools/cmd_tlm_server/routers_spec.rb +223 -223
  978. data/spec/tools/launcher/launcher_config_spec.rb +464 -464
  979. data/spec/top_level/top_level_spec.rb +334 -334
  980. data/spec/utilities/crc_spec.rb +45 -45
  981. data/spec/utilities/csv_spec.rb +97 -97
  982. data/spec/utilities/logger_spec.rb +102 -102
  983. data/spec/utilities/message_log_spec.rb +89 -89
  984. data/spec/utilities/quaternion_spec.rb +107 -107
  985. data/spec/utilities/ruby_lex_utils_spec.rb +86 -86
  986. data/tasks/manifest.rake +22 -22
  987. data/tasks/spec.rake +23 -23
  988. data/test/benchmarks/binary_accessor_benchmark.rb +14 -14
  989. data/test/benchmarks/gsub_benchmark.rb +152 -152
  990. data/test/benchmarks/is_a_benchmark.rb +34 -34
  991. data/test/performance/PACKETS.bat +0 -0
  992. data/test/performance/Rakefile +77 -77
  993. data/test/performance/THREADS.bat +0 -0
  994. data/test/performance/config/data/crc.txt +196 -196
  995. data/test/performance/config/data/diamond.STL +57 -57
  996. data/test/performance/config/data/meta_init.txt +4 -4
  997. data/test/performance/config/system/system_packets.txt +39 -39
  998. data/test/performance/config/system/system_threads.txt +59 -59
  999. data/test/performance/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +46 -46
  1000. data/test/performance/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
  1001. data/test/performance/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
  1002. data/test/performance/config/targets/COSMOS/screens/limits_change.txt +20 -20
  1003. data/test/performance/config/targets/COSMOS/screens/version.txt +19 -19
  1004. data/test/performance/config/targets/COSMOS/target.txt +11 -11
  1005. data/test/performance/config/targets/PACKET/cmd_tlm/packet_cmds.txt +20 -20
  1006. data/test/performance/config/targets/PACKET/cmd_tlm/packet_tlm.txt +98 -98
  1007. data/test/performance/config/targets/PACKET/cmd_tlm_server.txt +6 -6
  1008. data/test/performance/config/targets/PACKET/lib/packet_interface.rb +22 -22
  1009. data/test/performance/config/targets/PACKET/lib/packet_limits_response.rb +24 -24
  1010. data/test/performance/config/targets/PACKET/screens/status.txt +25 -25
  1011. data/test/performance/config/targets/PACKET/target.txt +28 -28
  1012. data/test/performance/config/targets/SYSTEM/screens/status.txt +12 -12
  1013. data/test/performance/config/targets/THREAD/cmd_tlm/thread_cmds.txt +17 -17
  1014. data/test/performance/config/targets/THREAD/cmd_tlm/thread_tlm.txt +18 -18
  1015. data/test/performance/config/targets/THREAD/cmd_tlm_server.txt +6 -6
  1016. data/test/performance/config/targets/THREAD/lib/thread_interface.rb +22 -22
  1017. data/test/performance/config/targets/THREAD/screens/status.txt +25 -25
  1018. data/test/performance/config/targets/THREAD/target.txt +6 -6
  1019. data/test/performance/config/tools/cmd_tlm_server/cmd_tlm_server_packets.txt +28 -28
  1020. data/test/performance/config/tools/cmd_tlm_server/cmd_tlm_server_threads.txt +68 -68
  1021. data/test/performance/config/tools/data_viewer/data_viewer.txt +11 -11
  1022. data/test/performance/config/tools/handbook_creator/handbook_creator.txt +66 -66
  1023. data/test/performance/config/tools/handbook_creator/templates/command_packets.html.erb +86 -86
  1024. data/test/performance/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
  1025. data/test/performance/config/tools/handbook_creator/templates/footer.html.erb +9 -9
  1026. data/test/performance/config/tools/handbook_creator/templates/header.html.erb +25 -25
  1027. data/test/performance/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
  1028. data/test/performance/config/tools/handbook_creator/templates/nav.html.erb +27 -27
  1029. data/test/performance/config/tools/handbook_creator/templates/overview.html.erb +1 -1
  1030. data/test/performance/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
  1031. data/test/performance/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
  1032. data/test/performance/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
  1033. data/test/performance/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -80
  1034. data/test/performance/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
  1035. data/test/performance/config/tools/handbook_creator/templates/title.html.erb +1 -1
  1036. data/test/performance/config/tools/launcher/launcher_packets.txt +34 -34
  1037. data/test/performance/config/tools/launcher/launcher_threads.txt +83 -83
  1038. data/test/performance/config/tools/script_runner/script_runner.txt +3 -3
  1039. data/test/performance/config/tools/table_manager/ConfigTables_def.txt +8 -8
  1040. data/test/performance/config/tools/table_manager/ExampleTableDefinition.txt +24 -24
  1041. data/test/performance/config/tools/table_manager/MCConfigurationTable_fsw1_def.txt +25 -25
  1042. data/test/performance/config/tools/table_manager/MCConfigurationTable_fsw2_def.txt +25 -25
  1043. data/test/performance/config/tools/table_manager/PPSSelectionTable_def.txt +8 -8
  1044. data/test/performance/config/tools/table_manager/TLMMonitoringTable_def.txt +248 -248
  1045. data/test/performance/config/tools/test_runner/test_runner.txt +17 -17
  1046. data/test/performance/config/tools/tlm_extractor/tlm_extractor.txt +13 -13
  1047. data/test/performance/config/tools/tlm_extractor/tlm_extractor2.txt +2 -2
  1048. data/test/performance/config/tools/tlm_extractor/tlm_extractor3.txt +2 -2
  1049. data/test/performance/config/tools/tlm_extractor/tlm_extractor4.txt +2 -2
  1050. data/test/performance/config/tools/tlm_grapher/tlm_grapher.txt +204 -204
  1051. data/test/performance/config/tools/tlm_viewer/tlm_viewer.txt +13 -13
  1052. data/test/performance/lib/packet_target.rb +126 -126
  1053. data/test/performance/lib/thread_target.rb +120 -120
  1054. data/test/performance/lib/user_version.rb +3 -3
  1055. data/test/performance/procedures/checks.rb +11 -11
  1056. data/test/performance/procedures/clear_util.rb +7 -7
  1057. data/test/performance/procedures/collect.rb +18 -18
  1058. data/test/performance/procedures/collect_util.rb +14 -14
  1059. data/test/performance/procedures/cosmos_api_test.rb +293 -293
  1060. data/test/performance/procedures/disconnect.rb +29 -29
  1061. data/test/performance/procedures/example_test.rb +182 -182
  1062. data/test/performance/procedures/plot_test.rb +8 -8
  1063. data/test/performance/procedures/procedure.rb +2 -2
  1064. data/test/performance/procedures/run_example_test.rb +3 -3
  1065. data/test/performance/procedures/test.rb +51 -51
  1066. data/test/performance/tools/CmdExtractor +14 -14
  1067. data/test/performance/tools/CmdExtractor.bat +0 -0
  1068. data/test/performance/tools/CmdSender +14 -14
  1069. data/test/performance/tools/CmdSender.bat +0 -0
  1070. data/test/performance/tools/CmdTlmServer +16 -16
  1071. data/test/performance/tools/CmdTlmServer.bat +0 -0
  1072. data/test/performance/tools/CmdTlmServerMemProf +20 -20
  1073. data/test/performance/tools/CmdTlmServerMemProf.bat +0 -0
  1074. data/test/performance/tools/DataViewer +14 -14
  1075. data/test/performance/tools/DataViewer.bat +0 -0
  1076. data/test/performance/tools/HandbookCreator +14 -14
  1077. data/test/performance/tools/HandbookCreator.bat +0 -0
  1078. data/test/performance/tools/Launcher +14 -14
  1079. data/test/performance/tools/Launcher.bat +0 -0
  1080. data/test/performance/tools/LimitsMonitor +14 -14
  1081. data/test/performance/tools/LimitsMonitor.bat +0 -0
  1082. data/test/performance/tools/OpenGLBuilder +14 -14
  1083. data/test/performance/tools/OpenGLBuilder.bat +0 -0
  1084. data/test/performance/tools/PacketTarget +14 -14
  1085. data/test/performance/tools/PacketTarget.bat +0 -0
  1086. data/test/performance/tools/PacketViewer +14 -14
  1087. data/test/performance/tools/PacketViewer.bat +0 -0
  1088. data/test/performance/tools/Replay +14 -14
  1089. data/test/performance/tools/Replay.bat +0 -0
  1090. data/test/performance/tools/ScpiTarget +14 -14
  1091. data/test/performance/tools/ScpiTarget.bat +0 -0
  1092. data/test/performance/tools/ScriptRunner +14 -14
  1093. data/test/performance/tools/ScriptRunner.bat +0 -0
  1094. data/test/performance/tools/TableManager +14 -14
  1095. data/test/performance/tools/TableManager.bat +0 -0
  1096. data/test/performance/tools/TestRunner +14 -14
  1097. data/test/performance/tools/TestRunner.bat +0 -0
  1098. data/test/performance/tools/ThreadTarget +14 -14
  1099. data/test/performance/tools/ThreadTarget.bat +0 -0
  1100. data/test/performance/tools/TlmExtractor +14 -14
  1101. data/test/performance/tools/TlmExtractor.bat +0 -0
  1102. data/test/performance/tools/TlmGrapher +14 -14
  1103. data/test/performance/tools/TlmGrapher.bat +0 -0
  1104. data/test/performance/tools/TlmGrapherMemProf +19 -19
  1105. data/test/performance/tools/TlmGrapherMemProf.bat +0 -0
  1106. data/test/performance/tools/TlmViewer +14 -14
  1107. data/test/performance/tools/TlmViewer.bat +0 -0
  1108. data/test/performance/tools/TlmViewerMemProf +19 -19
  1109. data/test/performance/tools/TlmViewerMemProf.bat +0 -0
  1110. data/test/performance/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -38
  1111. data/test/performance/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +15 -15
  1112. data/test/performance/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +6 -6
  1113. data/test/performance/tools/mac/CmdSender.app/Contents/Info.plist +38 -38
  1114. data/test/performance/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +15 -15
  1115. data/test/performance/tools/mac/CmdSender.app/Contents/MacOS/main.sh +6 -6
  1116. data/test/performance/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -38
  1117. data/test/performance/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +15 -15
  1118. data/test/performance/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +6 -6
  1119. data/test/performance/tools/mac/DataViewer.app/Contents/Info.plist +38 -38
  1120. data/test/performance/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +15 -15
  1121. data/test/performance/tools/mac/DataViewer.app/Contents/MacOS/main.sh +6 -6
  1122. data/test/performance/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -38
  1123. data/test/performance/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +15 -15
  1124. data/test/performance/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +6 -6
  1125. data/test/performance/tools/mac/Launcher.app/Contents/Info.plist +38 -38
  1126. data/test/performance/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +15 -15
  1127. data/test/performance/tools/mac/Launcher.app/Contents/MacOS/main.sh +6 -6
  1128. data/test/performance/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -38
  1129. data/test/performance/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +15 -15
  1130. data/test/performance/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +6 -6
  1131. data/test/performance/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -38
  1132. data/test/performance/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +15 -15
  1133. data/test/performance/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +6 -6
  1134. data/test/performance/tools/mac/PacketViewer.app/Contents/Info.plist +38 -38
  1135. data/test/performance/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +15 -15
  1136. data/test/performance/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +6 -6
  1137. data/test/performance/tools/mac/Replay.app/Contents/Info.plist +38 -38
  1138. data/test/performance/tools/mac/Replay.app/Contents/MacOS/Replay.rb +15 -15
  1139. data/test/performance/tools/mac/Replay.app/Contents/MacOS/main.sh +6 -6
  1140. data/test/performance/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -38
  1141. data/test/performance/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +15 -15
  1142. data/test/performance/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +6 -6
  1143. data/test/performance/tools/mac/TableManager.app/Contents/Info.plist +38 -38
  1144. data/test/performance/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +15 -15
  1145. data/test/performance/tools/mac/TableManager.app/Contents/MacOS/main.sh +6 -6
  1146. data/test/performance/tools/mac/TestRunner.app/Contents/Info.plist +38 -38
  1147. data/test/performance/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +15 -15
  1148. data/test/performance/tools/mac/TestRunner.app/Contents/MacOS/main.sh +6 -6
  1149. data/test/performance/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -38
  1150. data/test/performance/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +15 -15
  1151. data/test/performance/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +6 -6
  1152. data/test/performance/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -38
  1153. data/test/performance/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +15 -15
  1154. data/test/performance/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +6 -6
  1155. data/test/performance/tools/mac/TlmViewer.app/Contents/Info.plist +38 -38
  1156. data/test/performance/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +15 -15
  1157. data/test/performance/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +6 -6
  1158. metadata +3 -3
@@ -1,146 +1,146 @@
1
- # encoding: ascii-8bit
2
-
3
- # Copyright 2014 Ball Aerospace & Technologies Corp.
4
- # All Rights Reserved.
5
- #
6
- # This program is free software; you can modify and/or redistribute it
7
- # under the terms of the GNU General Public License
8
- # as published by the Free Software Foundation; version 3 with
9
- # attribution addendums as found in the LICENSE.txt
10
-
11
- require 'cosmos'
12
- require 'cosmos/gui/opengl/opengl'
13
-
14
- module Cosmos
15
-
16
- class GlShape
17
- attr_accessor :base_color
18
- attr_accessor :click_handler
19
- attr_accessor :doubleclick_handler
20
- attr_reader :color
21
- attr_accessor :position
22
- attr_reader :rotation_x
23
- attr_reader :rotation_y
24
- attr_reader :rotation_z
25
- attr_accessor :tipText
26
- attr_accessor :dragable
27
-
28
- #Constructor for the StlShape class
29
- def initialize(x, y, z)
30
- @color = [0.5, 0.5, 0.5, 1.0]
31
- @base_color = [0.5, 0.5, 0.5, 1.0]
32
- @position = [x, y, z]
33
- @rotation_x = nil
34
- @rotation_y = nil
35
- @rotation_z = nil
36
- @viewer = nil
37
- @front_material = GlMaterial.new
38
- @back_material = nil
39
- @tipText = nil
40
- @dragable = true
41
- end
42
-
43
- def draw(viewer)
44
- GL.PushAttrib(GL::CURRENT_BIT | GL::LIGHTING_BIT | GL::POINT_BIT | GL::LINE_BIT)
45
- GL.PushMatrix
46
-
47
- # Object position
48
- GL::Translatef(@position[0], @position[1], @position[2])
49
-
50
- # Shading
51
- GL.Enable(GL::LIGHTING)
52
- GL.Enable(GL::AUTO_NORMAL)
53
- GL.ShadeModel(GL::SMOOTH)
54
-
55
- # Material
56
- if @back_material
57
- GL.Material(GL::FRONT, GL::AMBIENT, @front_material.ambient)
58
- GL.Material(GL::FRONT, GL::DIFFUSE, @front_material.diffuse)
59
- GL.Material(GL::FRONT, GL::SPECULAR, @front_material.specular)
60
- GL.Material(GL::FRONT, GL::EMISSION, @front_material.emission)
61
- GL.Materialf(GL::FRONT, GL::SHININESS, @front_material.shininess)
62
- GL.Material(GL::BACK, GL::AMBIENT, @back_material.ambient)
63
- GL.Material(GL::BACK, GL::DIFFUSE, @back_material.diffuse)
64
- GL.Material(GL::BACK, GL::SPECULAR, @back_material.specular)
65
- GL.Material(GL::BACK, GL::EMISSION, @back_material.emission)
66
- GL.Materialf(GL::BACK, GL::SHININESS, @back_material.shininess)
67
- else
68
- GL.Material(GL::FRONT_AND_BACK, GL::AMBIENT, @front_material.ambient)
69
- GL.Material(GL::FRONT_AND_BACK, GL::DIFFUSE, @front_material.diffuse)
70
- GL.Material(GL::FRONT_AND_BACK, GL::SPECULAR, @front_material.specular)
71
- GL.Material(GL::FRONT_AND_BACK, GL::EMISSION, @front_material.emission)
72
- GL.Materialf(GL::FRONT_AND_BACK, GL::SHININESS, @front_material.shininess)
73
- end
74
-
75
- # Surface
76
- GL.PolygonMode(GL::FRONT_AND_BACK, GL::FILL)
77
- GL.Disable(GL::CULL_FACE);
78
- drawshape(viewer)
79
-
80
- # Restore attributes and matrix
81
- GL.PopMatrix
82
- GL.PopAttrib
83
- end
84
-
85
- # Draw the StlShape
86
- def drawshape(viewer)
87
- raise "drawshape must be implemented by subclass"
88
- end
89
-
90
- def hit(viewer)
91
- draw(viewer)
92
- end
93
-
94
- def identify
95
- return self
96
- end
97
-
98
- def drag(viewer, fx, fy, tx, ty)
99
- if @dragable
100
- zz = viewer.worldToEyeZ(@position)
101
- wf = viewer.eyeToWorld(viewer.screenToEye(fx, fy, zz))
102
- wt = viewer.eyeToWorld(viewer.screenToEye(tx, ty, zz))
103
- wt_minus_wf = [wt[0] - wf[0], wt[1] - wf[1], wt[2] - wf[2]]
104
- @position = [@position[0] + wt_minus_wf[0], @position[1] + wt_minus_wf[1], @position[2] + wt_minus_wf[2]]
105
- return true
106
- else
107
- return false
108
- end
109
- end
110
-
111
- def handle_click
112
- @click_handler.call() if @click_handler
113
- end
114
-
115
- def handle_doubleclick
116
- @doubleclick_handler.call() if @doubleclick_handler
117
- end
118
-
119
- def color= (new_color)
120
- new_color[3] = 1.0 unless new_color[3]
121
- @color = new_color
122
- @viewer.update if @viewer
123
- end
124
-
125
- def rotation_x= (rotation)
126
- @rotation_x = rotation
127
- @viewer.update if @viewer
128
- end
129
-
130
- def rotation_y= (rotation)
131
- @rotation_y = rotation
132
- @viewer.update if @viewer
133
- end
134
-
135
- def rotation_z= (rotation)
136
- @rotation_z = rotation
137
- @viewer.update if @viewer
138
- end
139
-
140
- def export
141
- raise "export must be defined by subclass"
142
- end
143
-
144
- end # Shape
145
-
146
- end # module Cosmos
1
+ # encoding: ascii-8bit
2
+
3
+ # Copyright 2014 Ball Aerospace & Technologies Corp.
4
+ # All Rights Reserved.
5
+ #
6
+ # This program is free software; you can modify and/or redistribute it
7
+ # under the terms of the GNU General Public License
8
+ # as published by the Free Software Foundation; version 3 with
9
+ # attribution addendums as found in the LICENSE.txt
10
+
11
+ require 'cosmos'
12
+ require 'cosmos/gui/opengl/opengl'
13
+
14
+ module Cosmos
15
+
16
+ class GlShape
17
+ attr_accessor :base_color
18
+ attr_accessor :click_handler
19
+ attr_accessor :doubleclick_handler
20
+ attr_reader :color
21
+ attr_accessor :position
22
+ attr_reader :rotation_x
23
+ attr_reader :rotation_y
24
+ attr_reader :rotation_z
25
+ attr_accessor :tipText
26
+ attr_accessor :dragable
27
+
28
+ #Constructor for the StlShape class
29
+ def initialize(x, y, z)
30
+ @color = [0.5, 0.5, 0.5, 1.0]
31
+ @base_color = [0.5, 0.5, 0.5, 1.0]
32
+ @position = [x, y, z]
33
+ @rotation_x = nil
34
+ @rotation_y = nil
35
+ @rotation_z = nil
36
+ @viewer = nil
37
+ @front_material = GlMaterial.new
38
+ @back_material = nil
39
+ @tipText = nil
40
+ @dragable = true
41
+ end
42
+
43
+ def draw(viewer)
44
+ GL.PushAttrib(GL::CURRENT_BIT | GL::LIGHTING_BIT | GL::POINT_BIT | GL::LINE_BIT)
45
+ GL.PushMatrix
46
+
47
+ # Object position
48
+ GL::Translatef(@position[0], @position[1], @position[2])
49
+
50
+ # Shading
51
+ GL.Enable(GL::LIGHTING)
52
+ GL.Enable(GL::AUTO_NORMAL)
53
+ GL.ShadeModel(GL::SMOOTH)
54
+
55
+ # Material
56
+ if @back_material
57
+ GL.Material(GL::FRONT, GL::AMBIENT, @front_material.ambient)
58
+ GL.Material(GL::FRONT, GL::DIFFUSE, @front_material.diffuse)
59
+ GL.Material(GL::FRONT, GL::SPECULAR, @front_material.specular)
60
+ GL.Material(GL::FRONT, GL::EMISSION, @front_material.emission)
61
+ GL.Materialf(GL::FRONT, GL::SHININESS, @front_material.shininess)
62
+ GL.Material(GL::BACK, GL::AMBIENT, @back_material.ambient)
63
+ GL.Material(GL::BACK, GL::DIFFUSE, @back_material.diffuse)
64
+ GL.Material(GL::BACK, GL::SPECULAR, @back_material.specular)
65
+ GL.Material(GL::BACK, GL::EMISSION, @back_material.emission)
66
+ GL.Materialf(GL::BACK, GL::SHININESS, @back_material.shininess)
67
+ else
68
+ GL.Material(GL::FRONT_AND_BACK, GL::AMBIENT, @front_material.ambient)
69
+ GL.Material(GL::FRONT_AND_BACK, GL::DIFFUSE, @front_material.diffuse)
70
+ GL.Material(GL::FRONT_AND_BACK, GL::SPECULAR, @front_material.specular)
71
+ GL.Material(GL::FRONT_AND_BACK, GL::EMISSION, @front_material.emission)
72
+ GL.Materialf(GL::FRONT_AND_BACK, GL::SHININESS, @front_material.shininess)
73
+ end
74
+
75
+ # Surface
76
+ GL.PolygonMode(GL::FRONT_AND_BACK, GL::FILL)
77
+ GL.Disable(GL::CULL_FACE);
78
+ drawshape(viewer)
79
+
80
+ # Restore attributes and matrix
81
+ GL.PopMatrix
82
+ GL.PopAttrib
83
+ end
84
+
85
+ # Draw the StlShape
86
+ def drawshape(viewer)
87
+ raise "drawshape must be implemented by subclass"
88
+ end
89
+
90
+ def hit(viewer)
91
+ draw(viewer)
92
+ end
93
+
94
+ def identify
95
+ return self
96
+ end
97
+
98
+ def drag(viewer, fx, fy, tx, ty)
99
+ if @dragable
100
+ zz = viewer.worldToEyeZ(@position)
101
+ wf = viewer.eyeToWorld(viewer.screenToEye(fx, fy, zz))
102
+ wt = viewer.eyeToWorld(viewer.screenToEye(tx, ty, zz))
103
+ wt_minus_wf = [wt[0] - wf[0], wt[1] - wf[1], wt[2] - wf[2]]
104
+ @position = [@position[0] + wt_minus_wf[0], @position[1] + wt_minus_wf[1], @position[2] + wt_minus_wf[2]]
105
+ return true
106
+ else
107
+ return false
108
+ end
109
+ end
110
+
111
+ def handle_click
112
+ @click_handler.call() if @click_handler
113
+ end
114
+
115
+ def handle_doubleclick
116
+ @doubleclick_handler.call() if @doubleclick_handler
117
+ end
118
+
119
+ def color= (new_color)
120
+ new_color[3] = 1.0 unless new_color[3]
121
+ @color = new_color
122
+ @viewer.update if @viewer
123
+ end
124
+
125
+ def rotation_x= (rotation)
126
+ @rotation_x = rotation
127
+ @viewer.update if @viewer
128
+ end
129
+
130
+ def rotation_y= (rotation)
131
+ @rotation_y = rotation
132
+ @viewer.update if @viewer
133
+ end
134
+
135
+ def rotation_z= (rotation)
136
+ @rotation_z = rotation
137
+ @viewer.update if @viewer
138
+ end
139
+
140
+ def export
141
+ raise "export must be defined by subclass"
142
+ end
143
+
144
+ end # Shape
145
+
146
+ end # module Cosmos
@@ -1,724 +1,724 @@
1
- # encoding: ascii-8bit
2
-
3
- # Copyright 2014 Ball Aerospace & Technologies Corp.
4
- # All Rights Reserved.
5
- #
6
- # This program is free software; you can modify and/or redistribute it
7
- # under the terms of the GNU General Public License
8
- # as published by the Free Software Foundation; version 3 with
9
- # attribution addendums as found in the LICENSE.txt
10
-
11
- # This file is inspired by the FOX Gui toolkit's FXGLViewer class
12
-
13
- require 'cosmos'
14
- require 'cosmos/gui/qt'
15
- require 'cosmos/gui/opengl/opengl'
16
-
17
- module Cosmos
18
-
19
- class GlViewer < Qt::GLWidget
20
- MAX_PICKBUF = 1024
21
- MAX_SELPATH = 64
22
- EPS = 1.0e-2
23
- PICK_TOL = 3
24
- DTOR = 0.0174532925199432957692369077
25
- RTOD = 57.295779513082320876798154814
26
-
27
- attr_accessor :projection # :PARALLEL or :PERSPECTIVE
28
- attr_reader :zoom
29
- attr_reader :fov
30
- attr_reader :wvt
31
- attr_reader :diameter
32
- attr_reader :distance
33
- attr_reader :orientation
34
- attr_reader :center
35
- attr_reader :scale
36
- attr_reader :transform
37
- attr_reader :itransform
38
- attr_reader :maxhits
39
- attr_reader :top_background
40
- attr_reader :bottom_background
41
- attr_reader :ambient
42
- attr_reader :light
43
- attr_reader :material
44
- attr_reader :dropped
45
- attr_reader :selection
46
- attr_reader :scene
47
- attr_reader :smode
48
- attr_reader :options
49
-
50
- attr_accessor :selection_callback
51
- attr_accessor :draw_axis
52
- def initialize(parent)
53
- super(parent)
54
-
55
- @defaultCursor = nil
56
- @dragCursor = nil
57
- @projection = :PERSPECTIVE
58
- @zoom = 1.0
59
- @fov = 30.0
60
- @wvt = GlViewport.new
61
- @diameter = 2.0;
62
- @distance = 7.464116;
63
- @orientation = Quaternion.new([0.0, 0.0, 0.0, 1.0])
64
- @center = [0.0, 0.0, 0.0]
65
- @scale = [1.0, 1.0, 1.0]
66
- updateProjection()
67
- updateTransform()
68
- @maxhits = 512;
69
- @top_background = [0.5, 0.5, 1.0, 1.0]
70
- @bottom_background = [1.0, 1.0, 1.0, 1.0]
71
- @ambient = [0.2, 0.2, 0.2, 1.0]
72
- @light = GlLight.new
73
- @material = GlMaterial.new
74
- @dial = [0, 0, 0]
75
- @dropped = nil
76
- @selection = nil
77
- @scene = nil
78
- @mode = :HOVERING
79
- @draw_axis = nil
80
- @options = []
81
-
82
- @selection_callback = nil
83
- end
84
-
85
- def minimumSizeHint
86
- return Qt::Size.new(100, 100)
87
- end
88
-
89
- def sizeHint
90
- return Qt::Size.new(400, 400)
91
- end
92
-
93
- def scene=(scene)
94
- @scene = scene
95
- @scale = [1.0, 1.0, 1.0]
96
- if @scene
97
- self.bounds = @scene.bounds
98
- @zoom = @scene.zoom
99
- @orientation = @scene.orientation
100
- @center = @scene.center
101
- @projection = @scene.projection
102
- end
103
- updateProjection()
104
- updateTransform()
105
- updateGL()
106
- end
107
-
108
- def fov=(fov)
109
- fov = 2.0 if fov < 2.0
110
- fov = 90.0 if fov > 90.0
111
- @fov = fov
112
- tn = tan(0.5 * DTOR * @fov)
113
- @distance = @diameter / tn
114
- updateProjection()
115
- updateTransform()
116
- updateGL()
117
- end
118
-
119
- def distance=(distance)
120
- distance = @diameter if distance < @diameter
121
- distance = 114.0 * @diameter if distance > (114.0 * @diameter)
122
- if distance != @distance
123
- @distance = distance
124
- @fov = 2.0 * RTOD * atan2(@diameter, @distance)
125
- updateProjection()
126
- updateTransform()
127
- updateGL()
128
- end
129
- end
130
-
131
- def zoom=(zoom)
132
- zoom = 1.0e-30 if zoom < 1.0e-30
133
- if zoom != @zoom
134
- @zoom = zoom
135
- updateProjection()
136
- updateGL()
137
- end
138
- end
139
-
140
- def scale= (scale)
141
- scale[0] = 0.000001 if scale[0] < 0.000001
142
- scale[1] = 0.000001 if scale[1] < 0.000001
143
- scale[2] = 0.000001 if scale[2] < 0.000001
144
- if scale != @scale
145
- @scale = scale
146
- updateTransform()
147
- updateGL()
148
- end
149
- end
150
-
151
- def orientation= (orientation)
152
- if (orientation.q0 != @orientation.q0) or (orientation.q1 != @orientation.q1) or (orientation.q2 != @orientation.q2) or (orientation.q3 != @orientation.q3)
153
- @orientation = orientation.clone.normalize
154
- updateTransform()
155
- update()
156
- end
157
- end
158
-
159
- def bounds= (bounds)
160
- # Model center
161
- @center = bounds.center
162
-
163
- # Model size
164
- @diameter = bounds.longest
165
-
166
- # Fix zero size model
167
- @diameter = 1.0 if @diameter < 1.0e-30
168
-
169
- # Set equal scaling initially
170
- @scale = [1.0, 1.0, 1.0]
171
-
172
- # Reset distance (and thus field of view)
173
- self.distance = 1.1 * @diameter
174
- end
175
-
176
- def center= (center)
177
- if center != @center
178
- @center = center
179
- updateTransform()
180
- updateGL()
181
- end
182
- end
183
-
184
- def selection= (shape)
185
- @selection = shape
186
- @selection_callback.call(shape) if @selection_callback
187
- updateGL()
188
- end
189
-
190
- def translate(vector)
191
- @center[0] += vector[0]
192
- @center[1] += vector[1]
193
- @center[2] += vector[2]
194
- updateTransform()
195
- updateGL()
196
- end
197
-
198
- def selectHits(x, y, w, h)
199
- mh = @maxhits
200
- nhits = 0
201
- makeCurrent()
202
-
203
- # Where to pick
204
- pickx = (@wvt.w - 2.0*x - w) / w.to_f
205
- picky = (2.0*y + h - @wvt.h) / h.to_f
206
- pickw = @wvt.w / w.to_f
207
- pickh = @wvt.h / h.to_f
208
-
209
- # Set pick projection matrix
210
- GL.MatrixMode(GL::PROJECTION);
211
- GL.LoadIdentity()
212
- GL.Translatef(pickx, picky, 0.0)
213
- GL.Scalef(pickw, pickh, 1.0)
214
- case projection
215
- when :PARALLEL
216
- GL.Ortho(@wvt.left, @wvt.right, @wvt.bottom, @wvt.top, @wvt.hither, @wvt.yon)
217
- when :PERSPECTIVE
218
- GL.Frustum(@wvt.left, @wvt.right, @wvt.bottom, @wvt.top, @wvt.hither, @wvt.yon)
219
- end
220
-
221
- # Model matrix
222
- GL.MatrixMode(GL::MODELVIEW);
223
- GL.LoadMatrixf(@transform)
224
-
225
- # Loop until room enough to fit
226
- while true
227
- nhits = 0
228
- buffer = GL.SelectBuffer(mh)
229
- GL.RenderMode(GL::SELECT);
230
- GL.InitNames()
231
- GL.PushName(0)
232
- @scene.hit(self) if @scene
233
- GL.PopName()
234
- nhits = GL.RenderMode(GL::RENDER)
235
- mh <<= 1
236
- break if nhits >= 0
237
- end
238
- doneCurrent()
239
- return buffer.unpack("L*"), nhits
240
- end
241
-
242
- def processHits(pickbuffer, nhits)
243
- if nhits > 0
244
- zmin = 4294967295
245
- zmax = 4294967295
246
- i = 0
247
- while nhits > 0
248
- n = pickbuffer[i]
249
- d1 = pickbuffer[1+i]
250
- d2 = pickbuffer[2+i]
251
- if ((d1 < zmin) || ((d1 == zmin) && (d2<=zmax)))
252
- zmin = d1
253
- zmax = d2
254
- sel = i
255
- end
256
- i += n + 3
257
- nhits -= 1
258
- end
259
- return @scene.identify(pickbuffer[4 + sel])
260
- end
261
- return nil
262
- end
263
-
264
- def pick(x, y)
265
- obj = nil
266
- if @scene and @maxhits
267
- pickbuffer, nhits = selectHits(x-PICK_TOL, y-PICK_TOL, PICK_TOL*2, PICK_TOL*2)
268
- obj = processHits(pickbuffer, nhits) if nhits > 0
269
- end
270
- return obj;
271
- end
272
-
273
- def initializeGL
274
- GL.GetError()
275
-
276
- # Initialize GL context
277
- GL.RenderMode(GL::RENDER)
278
-
279
- # Fast hints
280
- GL.Hint(GL::POLYGON_SMOOTH_HINT, GL::FASTEST)
281
- GL.Hint(GL::PERSPECTIVE_CORRECTION_HINT, GL::FASTEST)
282
- GL.Hint(GL::FOG_HINT, GL::FASTEST)
283
- GL.Hint(GL::LINE_SMOOTH_HINT, GL::FASTEST)
284
- GL.Hint(GL::POINT_SMOOTH_HINT, GL::FASTEST)
285
-
286
- # Z-buffer test on
287
- GL.Enable(GL::DEPTH_TEST)
288
- GL.DepthFunc(GL::LESS)
289
- GL.DepthRange(0.0, 1.0)
290
- GL.ClearDepth(1.0)
291
- GL.ClearColor(@top_background[0], @top_background[1], @top_background[2], @top_background[3])
292
-
293
- # No face culling
294
- GL.Disable(GL::CULL_FACE)
295
- GL.CullFace(GL::BACK)
296
- GL.FrontFace(GL::CCW)
297
-
298
- # Two sided lighting
299
- GL.LightModeli(GL::LIGHT_MODEL_TWO_SIDE, 1)
300
- GL.LightModel(GL::LIGHT_MODEL_AMBIENT, @ambient)
301
-
302
- # Preferred blend over background
303
- GL.BlendFunc(GL::SRC_ALPHA, GL::ONE_MINUS_SRC_ALPHA)
304
-
305
- # Light on
306
- GL.Enable(GL::LIGHT0)
307
- GL.Light(GL::LIGHT0, GL::AMBIENT, @light.ambient)
308
- GL.Light(GL::LIGHT0, GL::DIFFUSE, @light.diffuse)
309
- GL.Light(GL::LIGHT0, GL::SPECULAR, @light.specular)
310
- GL.Light(GL::LIGHT0, GL::POSITION, @light.position)
311
- GL.Light(GL::LIGHT0, GL::SPOT_DIRECTION, @light.direction)
312
- GL.Lightf(GL::LIGHT0, GL::SPOT_EXPONENT, @light.exponent)
313
- GL.Lightf(GL::LIGHT0, GL::SPOT_CUTOFF, @light.cutoff)
314
- GL.Lightf(GL::LIGHT0, GL::CONSTANT_ATTENUATION, @light.c_attn)
315
- GL.Lightf(GL::LIGHT0, GL::LINEAR_ATTENUATION, @light.l_attn)
316
- GL.Lightf(GL::LIGHT0, GL::QUADRATIC_ATTENUATION, @light.q_attn)
317
-
318
- # Viewer is close
319
- GL.LightModeli(GL::LIGHT_MODEL_LOCAL_VIEWER, 1)
320
-
321
- # Material colors
322
- GL.Material(GL::FRONT_AND_BACK, GL::AMBIENT, @material.ambient)
323
- GL.Material(GL::FRONT_AND_BACK, GL::DIFFUSE, @material.diffuse)
324
- GL.Material(GL::FRONT_AND_BACK, GL::SPECULAR, @material.specular)
325
- GL.Material(GL::FRONT_AND_BACK, GL::EMISSION, @material.emission)
326
- GL.Materialf(GL::FRONT_AND_BACK, GL::SHININESS, @material.shininess)
327
-
328
- # Vertex colors change both diffuse and ambient
329
- GL.ColorMaterial(GL::FRONT_AND_BACK, GL::AMBIENT_AND_DIFFUSE)
330
- GL.Disable(GL::COLOR_MATERIAL)
331
-
332
- # Simplest and fastest drawing is default
333
- GL.ShadeModel(GL::FLAT)
334
- GL.Disable(GL::BLEND)
335
- GL.Disable(GL::LINE_SMOOTH)
336
- GL.Disable(GL::POINT_SMOOTH)
337
- GL.Disable(GL::COLOR_MATERIAL)
338
-
339
- # Lighting
340
- GL.Disable(GL::LIGHTING)
341
-
342
- # No normalization of normals (it's broken on some machines anyway)
343
- GL.Disable(GL::NORMALIZE)
344
-
345
- # Dithering if needed
346
- GL.Disable(GL::DITHER)
347
- end
348
-
349
- def paintGL
350
- # Set viewport
351
- GL.Viewport(0, 0, @wvt.w, @wvt.h)
352
-
353
- # Reset important stuff
354
- GL.ShadeModel(GL::SMOOTH)
355
- GL.PolygonMode(GL::FRONT_AND_BACK, GL::FILL)
356
- GL.Disable(GL::LIGHTING)
357
- GL.Disable(GL::ALPHA_TEST)
358
- GL.Disable(GL::BLEND)
359
- GL.Disable(GL::DITHER)
360
- GL.Disable(GL::FOG)
361
- GL.Disable(GL::LOGIC_OP)
362
- GL.Disable(GL::POLYGON_SMOOTH)
363
- GL.Disable(GL::POLYGON_STIPPLE)
364
- GL.Disable(GL::STENCIL_TEST)
365
- GL.Disable(GL::CULL_FACE)
366
- GL.Disable(GL::COLOR_MATERIAL)
367
-
368
- # Reset matrices
369
- GL.MatrixMode(GL::PROJECTION)
370
- GL.LoadIdentity
371
- GL.MatrixMode(GL::MODELVIEW)
372
- GL.LoadIdentity
373
-
374
- # Clear to solid background
375
- GL.ClearDepth(1.0)
376
- GL.ClearColor(@top_background[0], @top_background[1], @top_background[2], @top_background[3])
377
- if @top_background == @bottom_background
378
- begin
379
- GL.Clear(GL::COLOR_BUFFER_BIT | GL::DEPTH_BUFFER_BIT)
380
- rescue
381
- # Raises false error on Mac
382
- end
383
- else # Clear to gradient background
384
- begin
385
- GL.Clear(GL::DEPTH_BUFFER_BIT)
386
- rescue
387
- # Raises false error on Mac
388
- end
389
- GL.Disable(GL::DEPTH_TEST)
390
- GL.DepthMask(GL::FALSE)
391
- GL.Begin(GL::TRIANGLE_STRIP)
392
- GL.Color(@bottom_background); GL.Vertex3f(-1.0, -1.0, 0.0); GL.Vertex3f(1.0, -1.0, 0.0)
393
- GL.Color(@top_background); GL.Vertex3f(-1.0, 1.0, 0.0); GL.Vertex3f(1.0, 1.0, 0.0)
394
- begin
395
- GL.End
396
- rescue
397
- # Raises false error on Mac
398
- end
399
- end
400
-
401
- # Depth test on by default
402
- GL.DepthMask(GL::TRUE)
403
- GL.Enable(GL::DEPTH_TEST)
404
-
405
- # Switch to projection matrix
406
- GL.MatrixMode(GL::PROJECTION)
407
- GL.LoadIdentity
408
- case @projection
409
- when :PARALLEL
410
- GL.Ortho(@wvt.left, @wvt.right, @wvt.bottom, @wvt.top, @wvt.hither, @wvt.yon)
411
- when :PERSPECTIVE
412
- GL.Frustum(@wvt.left, @wvt.right, @wvt.bottom, @wvt.top, @wvt.hither, @wvt.yon)
413
- end
414
-
415
- # Switch to model matrix
416
- GL.MatrixMode(GL::MODELVIEW)
417
- GL.LoadIdentity
418
-
419
- # Set light parameters
420
- GL.Enable(GL::LIGHT0)
421
- GL.Light(GL::LIGHT0, GL::AMBIENT, @light.ambient)
422
- GL.Light(GL::LIGHT0, GL::DIFFUSE, @light.diffuse)
423
- GL.Light(GL::LIGHT0, GL::SPECULAR, @light.specular)
424
- GL.Light(GL::LIGHT0, GL::POSITION, @light.position)
425
- GL.Light(GL::LIGHT0, GL::SPOT_DIRECTION, @light.direction)
426
- GL.Lightf(GL::LIGHT0, GL::SPOT_EXPONENT, @light.exponent)
427
- GL.Lightf(GL::LIGHT0, GL::SPOT_CUTOFF, @light.cutoff)
428
- GL.Lightf(GL::LIGHT0, GL::CONSTANT_ATTENUATION, @light.c_attn)
429
- GL.Lightf(GL::LIGHT0, GL::LINEAR_ATTENUATION, @light.l_attn)
430
- GL.Lightf(GL::LIGHT0, GL::QUADRATIC_ATTENUATION, @light.q_attn)
431
-
432
- # Default material colors
433
- GL.Material(GL::FRONT_AND_BACK, GL::AMBIENT, @material.ambient)
434
- GL.Material(GL::FRONT_AND_BACK, GL::DIFFUSE, @material.diffuse)
435
- GL.Material(GL::FRONT_AND_BACK, GL::SPECULAR, @material.specular)
436
- GL.Material(GL::FRONT_AND_BACK, GL::EMISSION, @material.emission)
437
- GL.Materialf(GL::FRONT_AND_BACK, GL::SHININESS, @material.shininess)
438
-
439
- # Color commands change both
440
- GL.ColorMaterial(GL::FRONT_AND_BACK, GL::AMBIENT_AND_DIFFUSE)
441
-
442
- # Global ambient light
443
- GL.LightModel(GL::LIGHT_MODEL_AMBIENT, @ambient)
444
-
445
- # Enable fog
446
- if @options.include?(:VIEWER_FOG)
447
- GL.Enable(GL::FOG)
448
- GL.Fog(GL::FOG_COLOR, @top_background) # Disappear into the background
449
- GL.Fogf(GL::FOG_START, (@distance - @diameter).to_f) # Range tight around model position
450
- GL.Fogf(GL::FOG_END, (@distance + @diameter).to_f) # Far place same as clip plane:- clipped stuff is in the mist!
451
- GL.Fogi(GL::FOG_MODE, GL::LINEAR) # Simple linear depth cueing
452
- end
453
-
454
- # Dithering
455
- GL.Enable(GL::DITHER) if @options.include?(:VIEWER_DITHER)
456
-
457
- # Enable lighting
458
- GL.Enable(GL::LIGHTING) if @options.include?(:VIEWER_LIGHTING)
459
-
460
- # Set model matrix
461
- GL.LoadMatrixf(@transform)
462
-
463
- if (@draw_axis and @draw_axis > 0)
464
- # Draw axis
465
- GL.PushMatrix
466
- GL.LineWidth(2.5)
467
- GL.Color3f(1.0, 0.0, 0.0)
468
- GL.Begin(GL::LINES)
469
- GL.Vertex3f(-@draw_axis.to_f, 0.0, 0.0)
470
- GL.Vertex3f(@draw_axis.to_f, 0.0, 0.0)
471
- begin
472
- GL.End
473
- rescue
474
- # Raises false error on Mac
475
- end
476
- GL.Color3f(0.0, 1.0, 0.0)
477
- GL.Begin(GL::LINES)
478
- GL.Vertex3f(0, -@draw_axis, 0.0)
479
- GL.Vertex3f(0, @draw_axis, 0)
480
- begin
481
- GL.End
482
- rescue
483
- # Raises false error on Mac
484
- end
485
- GL.Color3f(0.0, 0.0, 1.0)
486
- GL.Begin(GL::LINES)
487
- GL.Vertex3f(0, 0, -@draw_axis)
488
- GL.Vertex3f(0, 0, @draw_axis)
489
- begin
490
- GL.End
491
- rescue
492
- # Raises false error on Mac
493
- end
494
- GL.PopMatrix
495
- end
496
-
497
- # Draw what's visible
498
- @scene.draw(self) if @scene
499
- end
500
-
501
- def resizeGL(width, height)
502
- @wvt.w = width;
503
- @wvt.h = height;
504
- updateProjection()
505
- end
506
-
507
- def screenToEye(sx, sy, eyez)
508
- e = [0.0, 0.0, 0.0]
509
- xp = (@worldpx*sx + @ax).to_f
510
- yp = (@ay - @worldpx*sy).to_f
511
- if @projection == :PERSPECTIVE
512
- if @distance != 0.0
513
- e.x = [((-eyez*xp) / @distance).to_f, ((-eyez*yp) / @distance).to_f, eyez]
514
- end
515
- else
516
- e = [xp, yp, eyez]
517
- end
518
- return e;
519
- end
520
-
521
- def screenToTarget(sx, sy)
522
- [@worldpx*sx.to_f + @ax, @ay - @worldpx*sy.to_f, -@distance.to_f]
523
- end
524
-
525
- def eyeToWorld(e)
526
- [e[0]*@itransform[0][0] + e[1]*@itransform[1][0] + e[2]*@itransform[2][0] + @itransform[3][0],
527
- e[0]*@itransform[0][1] + e[1]*@itransform[1][1] + e[2]*@itransform[2][1] + @itransform[3][1],
528
- e[0]*@itransform[0][2] + e[1]*@itransform[1][2] + e[2]*@itransform[2][2] + @itransform[3][2]]
529
- end
530
-
531
- def worldToEyeZ(w)
532
- w[0]*@transform[0][2] + w[1]*@transform[1][2] + w[2]*@transform[2][2] + @transform[3][2]
533
- end
534
-
535
- def calc_prime(v)
536
- return [v[0]*@itransform[0][0] + v[1]*@itransform[1][0] + v[2]*@itransform[2][0] + @itransform[3][0],
537
- v[0]*@itransform[0][1] + v[1]*@itransform[1][1] + v[2]*@itransform[2][1] + @itransform[3][1],
538
- v[0]*@itransform[0][2] + v[1]*@itransform[1][2] + v[2]*@itransform[2][2] + @itransform[3][2]]
539
- end
540
-
541
- def worldVector(fx, fy, tx, ty)
542
- wfm_prime = calc_prime(screenToTarget(fx, fy))
543
- wto_prime = calc_prime(screenToTarget(tx, ty))
544
- return [wto_prime[0] - wfm_prime[0], wto_prime[1] - wfm_prime[1], wto_prime[2] - wfm_prime[2]]
545
- end
546
-
547
- def spherePoint(x, y)
548
- if @wvt.w > @wvt.h
549
- screenmin = wvt.h.to_f
550
- else
551
- screenmin = wvt.w.to_f
552
- end
553
- v = []
554
- v[0] = 2.0 * (x - 0.5*@wvt.w) / screenmin
555
- v[1] = 2.0 * (0.5 * @wvt.h - y) / screenmin
556
- d = v[0]*v[0] + v[1]*v[1]
557
-
558
- if d < 0.75
559
- v[2] = sqrt(1.0-d)
560
- elsif d < 3.0
561
- d = 1.7320508008 - sqrt(d)
562
- t = 1.0 - d*d
563
- t = 0.0 if t < 0.0
564
- v[2] = 1.0 - sqrt(t)
565
- else
566
- v[2] = 0.0
567
- end
568
-
569
- length = sqrt(v[0]*v[0]+v[1]*v[1]+v[2]*v[2])
570
- if length > 0.0
571
- return [v[0] / length, v[1] / length, v[2] / length]
572
- else
573
- return [0.0, 0.0, 0.0]
574
- end
575
- end
576
-
577
- def turn(fx, fy, tx, ty)
578
- return Quaternion.arc(spherePoint(fx,fy), spherePoint(tx,ty))
579
- end
580
-
581
- def mode=(mode)
582
- @mode = mode
583
- case @mode
584
- when :ZOOMING
585
- Qt::Application.setOverrideCursor(Cosmos.getCursor(Qt::SizeVerCursor))
586
- when :DRAGGING
587
- Qt::Application.setOverrideCursor(Cosmos.getCursor(Qt::ClosedHandCursor))
588
- when :ROTATING
589
- Qt::Application.setOverrideCursor(Cosmos.getCursor(Qt::CrossCursor))
590
- when :TRANSLATING
591
- Qt::Application.setOverrideCursor(Cosmos.getCursor(Qt::SizeAllCursor))
592
- else
593
- Qt::Application.restoreOverrideCursor
594
- end
595
- end
596
-
597
- def mousePressEvent(event)
598
- case event.button
599
- when Qt::LeftButton
600
- self.mode = :PICKING
601
- if (event.buttons & Qt::RightButton.to_i) != 0
602
- self.mode = :ZOOMING
603
- elsif (@selection and @selection.dragable and @selection == pick(event.x, event.y))
604
- self.mode = :DRAGGING
605
- end
606
- when Qt::RightButton
607
- if (event.buttons & Qt::LeftButton.to_i) != 0
608
- self.mode = :ZOOMING
609
- else
610
- self.mode = :POSTING
611
- end
612
- when Qt::MidButton
613
- self.mode = :ZOOMING
614
- end
615
- @lastPos = event.pos
616
- end
617
-
618
- def mouseReleaseEvent(event)
619
- case @mode
620
- when :PICKING
621
- self.selection = pick(event.x, event.y)
622
- end
623
-
624
- if (((event.buttons & Qt::RightButton.to_i) != 0) and ((event.buttons & Qt::LeftButton.to_i) != 0)) or ((event.buttons & Qt::MidButton.to_i) != 0)
625
- self.mode = :ZOOMING
626
- elsif (event.buttons & Qt::LeftButton.to_i) != 0
627
- self.mode = :ROTATING
628
- elsif (event.buttons & Qt::RightButton.to_i) != 0
629
- self.mode = :TRANSLATING
630
- else
631
- self.mode = :HOVERING
632
- end
633
- end
634
-
635
- def mouseMoveEvent(event)
636
- dx = event.x - @lastPos.x
637
- dy = event.y - @lastPos.y
638
-
639
- case @mode
640
- when :PICKING, :POSTING
641
- if dx.abs > 0 or dy.abs > 0
642
- if @mode == :PICKING
643
- self.mode = :ROTATING
644
- else
645
- self.mode = :TRANSLATING
646
- end
647
- end
648
- when :TRANSLATING
649
- vector = worldVector(@lastPos.x, @lastPos.y, event.x, event.y)
650
- translate([-vector[0], -vector[1], -vector[2]])
651
- when :DRAGGING
652
- if @selection and @selection.drag(self, @lastPos.x, @lastPos.y, event.x, event.y)
653
- updateGL()
654
- end
655
- when :ROTATING
656
- self.orientation = turn(@lastPos.x, @lastPos.y, event.x, event.y) * @orientation
657
- when :ZOOMING
658
- delta = 0.005 * dy
659
- self.zoom = @zoom * (2.0 ** delta)
660
- end
661
-
662
- @lastPos = event.pos
663
- end
664
-
665
- def wheelEvent(event)
666
- self.zoom = @zoom * (2.0 ** (-0.1 * event.delta / 120.0))
667
- end
668
-
669
- protected
670
-
671
- def updateProjection
672
- # Should be non-0 size viewport
673
- if @wvt.w > 0 and @wvt.h > 0
674
- # Aspect ratio of viewer
675
- aspect = @wvt.h.to_f / @wvt.w.to_f
676
-
677
- # Get world box
678
- r = 0.5 * @diameter / @zoom
679
- if @wvt.w <= @wvt.h
680
- @wvt.left = -r
681
- @wvt.right = r
682
- @wvt.bottom = -r * aspect
683
- @wvt.top = r * aspect
684
- else
685
- @wvt.left = -r / aspect
686
- @wvt.right = r / aspect
687
- @wvt.bottom = -r
688
- @wvt.top = r
689
- end
690
-
691
- @wvt.yon = @distance + @diameter
692
- @wvt.hither = 0.1 * @wvt.yon
693
-
694
- # Size of a pixel in world and model
695
- @worldpx = (@wvt.right - @wvt.left) / @wvt.w
696
- @modelpx = @worldpx * @diameter
697
-
698
- # Precalc stuff for view->world backmapping
699
- @ax = @wvt.left
700
- @ay = @wvt.top - @worldpx
701
-
702
- # Correction for perspective
703
- if @projection == :PERSPECTIVE
704
- hither_fac= @wvt.hither / @distance
705
- @wvt.left *= hither_fac
706
- @wvt.right *= hither_fac
707
- @wvt.top *= hither_fac
708
- @wvt.bottom *= hither_fac
709
- end
710
- end
711
- end
712
-
713
- def updateTransform
714
- @transform = Matrix.identity(4)
715
- @transform.trans4(0.0, 0.0, -@distance.to_f)
716
- @transform.rot4(@orientation);
717
- @transform.scale4(@scale[0], @scale[1], @scale[2]);
718
- @transform.trans4(-@center[0], -@center[1], -@center[2]);
719
- @itransform = @transform.inverse
720
- end
721
-
722
- end # class OpenGLViewer
723
-
724
- end # module Cosmos
1
+ # encoding: ascii-8bit
2
+
3
+ # Copyright 2014 Ball Aerospace & Technologies Corp.
4
+ # All Rights Reserved.
5
+ #
6
+ # This program is free software; you can modify and/or redistribute it
7
+ # under the terms of the GNU General Public License
8
+ # as published by the Free Software Foundation; version 3 with
9
+ # attribution addendums as found in the LICENSE.txt
10
+
11
+ # This file is inspired by the FOX Gui toolkit's FXGLViewer class
12
+
13
+ require 'cosmos'
14
+ require 'cosmos/gui/qt'
15
+ require 'cosmos/gui/opengl/opengl'
16
+
17
+ module Cosmos
18
+
19
+ class GlViewer < Qt::GLWidget
20
+ MAX_PICKBUF = 1024
21
+ MAX_SELPATH = 64
22
+ EPS = 1.0e-2
23
+ PICK_TOL = 3
24
+ DTOR = 0.0174532925199432957692369077
25
+ RTOD = 57.295779513082320876798154814
26
+
27
+ attr_accessor :projection # :PARALLEL or :PERSPECTIVE
28
+ attr_reader :zoom
29
+ attr_reader :fov
30
+ attr_reader :wvt
31
+ attr_reader :diameter
32
+ attr_reader :distance
33
+ attr_reader :orientation
34
+ attr_reader :center
35
+ attr_reader :scale
36
+ attr_reader :transform
37
+ attr_reader :itransform
38
+ attr_reader :maxhits
39
+ attr_reader :top_background
40
+ attr_reader :bottom_background
41
+ attr_reader :ambient
42
+ attr_reader :light
43
+ attr_reader :material
44
+ attr_reader :dropped
45
+ attr_reader :selection
46
+ attr_reader :scene
47
+ attr_reader :smode
48
+ attr_reader :options
49
+
50
+ attr_accessor :selection_callback
51
+ attr_accessor :draw_axis
52
+ def initialize(parent)
53
+ super(parent)
54
+
55
+ @defaultCursor = nil
56
+ @dragCursor = nil
57
+ @projection = :PERSPECTIVE
58
+ @zoom = 1.0
59
+ @fov = 30.0
60
+ @wvt = GlViewport.new
61
+ @diameter = 2.0;
62
+ @distance = 7.464116;
63
+ @orientation = Quaternion.new([0.0, 0.0, 0.0, 1.0])
64
+ @center = [0.0, 0.0, 0.0]
65
+ @scale = [1.0, 1.0, 1.0]
66
+ updateProjection()
67
+ updateTransform()
68
+ @maxhits = 512;
69
+ @top_background = [0.5, 0.5, 1.0, 1.0]
70
+ @bottom_background = [1.0, 1.0, 1.0, 1.0]
71
+ @ambient = [0.2, 0.2, 0.2, 1.0]
72
+ @light = GlLight.new
73
+ @material = GlMaterial.new
74
+ @dial = [0, 0, 0]
75
+ @dropped = nil
76
+ @selection = nil
77
+ @scene = nil
78
+ @mode = :HOVERING
79
+ @draw_axis = nil
80
+ @options = []
81
+
82
+ @selection_callback = nil
83
+ end
84
+
85
+ def minimumSizeHint
86
+ return Qt::Size.new(100, 100)
87
+ end
88
+
89
+ def sizeHint
90
+ return Qt::Size.new(400, 400)
91
+ end
92
+
93
+ def scene=(scene)
94
+ @scene = scene
95
+ @scale = [1.0, 1.0, 1.0]
96
+ if @scene
97
+ self.bounds = @scene.bounds
98
+ @zoom = @scene.zoom
99
+ @orientation = @scene.orientation
100
+ @center = @scene.center
101
+ @projection = @scene.projection
102
+ end
103
+ updateProjection()
104
+ updateTransform()
105
+ updateGL()
106
+ end
107
+
108
+ def fov=(fov)
109
+ fov = 2.0 if fov < 2.0
110
+ fov = 90.0 if fov > 90.0
111
+ @fov = fov
112
+ tn = tan(0.5 * DTOR * @fov)
113
+ @distance = @diameter / tn
114
+ updateProjection()
115
+ updateTransform()
116
+ updateGL()
117
+ end
118
+
119
+ def distance=(distance)
120
+ distance = @diameter if distance < @diameter
121
+ distance = 114.0 * @diameter if distance > (114.0 * @diameter)
122
+ if distance != @distance
123
+ @distance = distance
124
+ @fov = 2.0 * RTOD * atan2(@diameter, @distance)
125
+ updateProjection()
126
+ updateTransform()
127
+ updateGL()
128
+ end
129
+ end
130
+
131
+ def zoom=(zoom)
132
+ zoom = 1.0e-30 if zoom < 1.0e-30
133
+ if zoom != @zoom
134
+ @zoom = zoom
135
+ updateProjection()
136
+ updateGL()
137
+ end
138
+ end
139
+
140
+ def scale= (scale)
141
+ scale[0] = 0.000001 if scale[0] < 0.000001
142
+ scale[1] = 0.000001 if scale[1] < 0.000001
143
+ scale[2] = 0.000001 if scale[2] < 0.000001
144
+ if scale != @scale
145
+ @scale = scale
146
+ updateTransform()
147
+ updateGL()
148
+ end
149
+ end
150
+
151
+ def orientation= (orientation)
152
+ if (orientation.q0 != @orientation.q0) or (orientation.q1 != @orientation.q1) or (orientation.q2 != @orientation.q2) or (orientation.q3 != @orientation.q3)
153
+ @orientation = orientation.clone.normalize
154
+ updateTransform()
155
+ update()
156
+ end
157
+ end
158
+
159
+ def bounds= (bounds)
160
+ # Model center
161
+ @center = bounds.center
162
+
163
+ # Model size
164
+ @diameter = bounds.longest
165
+
166
+ # Fix zero size model
167
+ @diameter = 1.0 if @diameter < 1.0e-30
168
+
169
+ # Set equal scaling initially
170
+ @scale = [1.0, 1.0, 1.0]
171
+
172
+ # Reset distance (and thus field of view)
173
+ self.distance = 1.1 * @diameter
174
+ end
175
+
176
+ def center= (center)
177
+ if center != @center
178
+ @center = center
179
+ updateTransform()
180
+ updateGL()
181
+ end
182
+ end
183
+
184
+ def selection= (shape)
185
+ @selection = shape
186
+ @selection_callback.call(shape) if @selection_callback
187
+ updateGL()
188
+ end
189
+
190
+ def translate(vector)
191
+ @center[0] += vector[0]
192
+ @center[1] += vector[1]
193
+ @center[2] += vector[2]
194
+ updateTransform()
195
+ updateGL()
196
+ end
197
+
198
+ def selectHits(x, y, w, h)
199
+ mh = @maxhits
200
+ nhits = 0
201
+ makeCurrent()
202
+
203
+ # Where to pick
204
+ pickx = (@wvt.w - 2.0*x - w) / w.to_f
205
+ picky = (2.0*y + h - @wvt.h) / h.to_f
206
+ pickw = @wvt.w / w.to_f
207
+ pickh = @wvt.h / h.to_f
208
+
209
+ # Set pick projection matrix
210
+ GL.MatrixMode(GL::PROJECTION);
211
+ GL.LoadIdentity()
212
+ GL.Translatef(pickx, picky, 0.0)
213
+ GL.Scalef(pickw, pickh, 1.0)
214
+ case projection
215
+ when :PARALLEL
216
+ GL.Ortho(@wvt.left, @wvt.right, @wvt.bottom, @wvt.top, @wvt.hither, @wvt.yon)
217
+ when :PERSPECTIVE
218
+ GL.Frustum(@wvt.left, @wvt.right, @wvt.bottom, @wvt.top, @wvt.hither, @wvt.yon)
219
+ end
220
+
221
+ # Model matrix
222
+ GL.MatrixMode(GL::MODELVIEW);
223
+ GL.LoadMatrixf(@transform)
224
+
225
+ # Loop until room enough to fit
226
+ while true
227
+ nhits = 0
228
+ buffer = GL.SelectBuffer(mh)
229
+ GL.RenderMode(GL::SELECT);
230
+ GL.InitNames()
231
+ GL.PushName(0)
232
+ @scene.hit(self) if @scene
233
+ GL.PopName()
234
+ nhits = GL.RenderMode(GL::RENDER)
235
+ mh <<= 1
236
+ break if nhits >= 0
237
+ end
238
+ doneCurrent()
239
+ return buffer.unpack("L*"), nhits
240
+ end
241
+
242
+ def processHits(pickbuffer, nhits)
243
+ if nhits > 0
244
+ zmin = 4294967295
245
+ zmax = 4294967295
246
+ i = 0
247
+ while nhits > 0
248
+ n = pickbuffer[i]
249
+ d1 = pickbuffer[1+i]
250
+ d2 = pickbuffer[2+i]
251
+ if ((d1 < zmin) || ((d1 == zmin) && (d2<=zmax)))
252
+ zmin = d1
253
+ zmax = d2
254
+ sel = i
255
+ end
256
+ i += n + 3
257
+ nhits -= 1
258
+ end
259
+ return @scene.identify(pickbuffer[4 + sel])
260
+ end
261
+ return nil
262
+ end
263
+
264
+ def pick(x, y)
265
+ obj = nil
266
+ if @scene and @maxhits
267
+ pickbuffer, nhits = selectHits(x-PICK_TOL, y-PICK_TOL, PICK_TOL*2, PICK_TOL*2)
268
+ obj = processHits(pickbuffer, nhits) if nhits > 0
269
+ end
270
+ return obj;
271
+ end
272
+
273
+ def initializeGL
274
+ GL.GetError()
275
+
276
+ # Initialize GL context
277
+ GL.RenderMode(GL::RENDER)
278
+
279
+ # Fast hints
280
+ GL.Hint(GL::POLYGON_SMOOTH_HINT, GL::FASTEST)
281
+ GL.Hint(GL::PERSPECTIVE_CORRECTION_HINT, GL::FASTEST)
282
+ GL.Hint(GL::FOG_HINT, GL::FASTEST)
283
+ GL.Hint(GL::LINE_SMOOTH_HINT, GL::FASTEST)
284
+ GL.Hint(GL::POINT_SMOOTH_HINT, GL::FASTEST)
285
+
286
+ # Z-buffer test on
287
+ GL.Enable(GL::DEPTH_TEST)
288
+ GL.DepthFunc(GL::LESS)
289
+ GL.DepthRange(0.0, 1.0)
290
+ GL.ClearDepth(1.0)
291
+ GL.ClearColor(@top_background[0], @top_background[1], @top_background[2], @top_background[3])
292
+
293
+ # No face culling
294
+ GL.Disable(GL::CULL_FACE)
295
+ GL.CullFace(GL::BACK)
296
+ GL.FrontFace(GL::CCW)
297
+
298
+ # Two sided lighting
299
+ GL.LightModeli(GL::LIGHT_MODEL_TWO_SIDE, 1)
300
+ GL.LightModel(GL::LIGHT_MODEL_AMBIENT, @ambient)
301
+
302
+ # Preferred blend over background
303
+ GL.BlendFunc(GL::SRC_ALPHA, GL::ONE_MINUS_SRC_ALPHA)
304
+
305
+ # Light on
306
+ GL.Enable(GL::LIGHT0)
307
+ GL.Light(GL::LIGHT0, GL::AMBIENT, @light.ambient)
308
+ GL.Light(GL::LIGHT0, GL::DIFFUSE, @light.diffuse)
309
+ GL.Light(GL::LIGHT0, GL::SPECULAR, @light.specular)
310
+ GL.Light(GL::LIGHT0, GL::POSITION, @light.position)
311
+ GL.Light(GL::LIGHT0, GL::SPOT_DIRECTION, @light.direction)
312
+ GL.Lightf(GL::LIGHT0, GL::SPOT_EXPONENT, @light.exponent)
313
+ GL.Lightf(GL::LIGHT0, GL::SPOT_CUTOFF, @light.cutoff)
314
+ GL.Lightf(GL::LIGHT0, GL::CONSTANT_ATTENUATION, @light.c_attn)
315
+ GL.Lightf(GL::LIGHT0, GL::LINEAR_ATTENUATION, @light.l_attn)
316
+ GL.Lightf(GL::LIGHT0, GL::QUADRATIC_ATTENUATION, @light.q_attn)
317
+
318
+ # Viewer is close
319
+ GL.LightModeli(GL::LIGHT_MODEL_LOCAL_VIEWER, 1)
320
+
321
+ # Material colors
322
+ GL.Material(GL::FRONT_AND_BACK, GL::AMBIENT, @material.ambient)
323
+ GL.Material(GL::FRONT_AND_BACK, GL::DIFFUSE, @material.diffuse)
324
+ GL.Material(GL::FRONT_AND_BACK, GL::SPECULAR, @material.specular)
325
+ GL.Material(GL::FRONT_AND_BACK, GL::EMISSION, @material.emission)
326
+ GL.Materialf(GL::FRONT_AND_BACK, GL::SHININESS, @material.shininess)
327
+
328
+ # Vertex colors change both diffuse and ambient
329
+ GL.ColorMaterial(GL::FRONT_AND_BACK, GL::AMBIENT_AND_DIFFUSE)
330
+ GL.Disable(GL::COLOR_MATERIAL)
331
+
332
+ # Simplest and fastest drawing is default
333
+ GL.ShadeModel(GL::FLAT)
334
+ GL.Disable(GL::BLEND)
335
+ GL.Disable(GL::LINE_SMOOTH)
336
+ GL.Disable(GL::POINT_SMOOTH)
337
+ GL.Disable(GL::COLOR_MATERIAL)
338
+
339
+ # Lighting
340
+ GL.Disable(GL::LIGHTING)
341
+
342
+ # No normalization of normals (it's broken on some machines anyway)
343
+ GL.Disable(GL::NORMALIZE)
344
+
345
+ # Dithering if needed
346
+ GL.Disable(GL::DITHER)
347
+ end
348
+
349
+ def paintGL
350
+ # Set viewport
351
+ GL.Viewport(0, 0, @wvt.w, @wvt.h)
352
+
353
+ # Reset important stuff
354
+ GL.ShadeModel(GL::SMOOTH)
355
+ GL.PolygonMode(GL::FRONT_AND_BACK, GL::FILL)
356
+ GL.Disable(GL::LIGHTING)
357
+ GL.Disable(GL::ALPHA_TEST)
358
+ GL.Disable(GL::BLEND)
359
+ GL.Disable(GL::DITHER)
360
+ GL.Disable(GL::FOG)
361
+ GL.Disable(GL::LOGIC_OP)
362
+ GL.Disable(GL::POLYGON_SMOOTH)
363
+ GL.Disable(GL::POLYGON_STIPPLE)
364
+ GL.Disable(GL::STENCIL_TEST)
365
+ GL.Disable(GL::CULL_FACE)
366
+ GL.Disable(GL::COLOR_MATERIAL)
367
+
368
+ # Reset matrices
369
+ GL.MatrixMode(GL::PROJECTION)
370
+ GL.LoadIdentity
371
+ GL.MatrixMode(GL::MODELVIEW)
372
+ GL.LoadIdentity
373
+
374
+ # Clear to solid background
375
+ GL.ClearDepth(1.0)
376
+ GL.ClearColor(@top_background[0], @top_background[1], @top_background[2], @top_background[3])
377
+ if @top_background == @bottom_background
378
+ begin
379
+ GL.Clear(GL::COLOR_BUFFER_BIT | GL::DEPTH_BUFFER_BIT)
380
+ rescue
381
+ # Raises false error on Mac
382
+ end
383
+ else # Clear to gradient background
384
+ begin
385
+ GL.Clear(GL::DEPTH_BUFFER_BIT)
386
+ rescue
387
+ # Raises false error on Mac
388
+ end
389
+ GL.Disable(GL::DEPTH_TEST)
390
+ GL.DepthMask(GL::FALSE)
391
+ GL.Begin(GL::TRIANGLE_STRIP)
392
+ GL.Color(@bottom_background); GL.Vertex3f(-1.0, -1.0, 0.0); GL.Vertex3f(1.0, -1.0, 0.0)
393
+ GL.Color(@top_background); GL.Vertex3f(-1.0, 1.0, 0.0); GL.Vertex3f(1.0, 1.0, 0.0)
394
+ begin
395
+ GL.End
396
+ rescue
397
+ # Raises false error on Mac
398
+ end
399
+ end
400
+
401
+ # Depth test on by default
402
+ GL.DepthMask(GL::TRUE)
403
+ GL.Enable(GL::DEPTH_TEST)
404
+
405
+ # Switch to projection matrix
406
+ GL.MatrixMode(GL::PROJECTION)
407
+ GL.LoadIdentity
408
+ case @projection
409
+ when :PARALLEL
410
+ GL.Ortho(@wvt.left, @wvt.right, @wvt.bottom, @wvt.top, @wvt.hither, @wvt.yon)
411
+ when :PERSPECTIVE
412
+ GL.Frustum(@wvt.left, @wvt.right, @wvt.bottom, @wvt.top, @wvt.hither, @wvt.yon)
413
+ end
414
+
415
+ # Switch to model matrix
416
+ GL.MatrixMode(GL::MODELVIEW)
417
+ GL.LoadIdentity
418
+
419
+ # Set light parameters
420
+ GL.Enable(GL::LIGHT0)
421
+ GL.Light(GL::LIGHT0, GL::AMBIENT, @light.ambient)
422
+ GL.Light(GL::LIGHT0, GL::DIFFUSE, @light.diffuse)
423
+ GL.Light(GL::LIGHT0, GL::SPECULAR, @light.specular)
424
+ GL.Light(GL::LIGHT0, GL::POSITION, @light.position)
425
+ GL.Light(GL::LIGHT0, GL::SPOT_DIRECTION, @light.direction)
426
+ GL.Lightf(GL::LIGHT0, GL::SPOT_EXPONENT, @light.exponent)
427
+ GL.Lightf(GL::LIGHT0, GL::SPOT_CUTOFF, @light.cutoff)
428
+ GL.Lightf(GL::LIGHT0, GL::CONSTANT_ATTENUATION, @light.c_attn)
429
+ GL.Lightf(GL::LIGHT0, GL::LINEAR_ATTENUATION, @light.l_attn)
430
+ GL.Lightf(GL::LIGHT0, GL::QUADRATIC_ATTENUATION, @light.q_attn)
431
+
432
+ # Default material colors
433
+ GL.Material(GL::FRONT_AND_BACK, GL::AMBIENT, @material.ambient)
434
+ GL.Material(GL::FRONT_AND_BACK, GL::DIFFUSE, @material.diffuse)
435
+ GL.Material(GL::FRONT_AND_BACK, GL::SPECULAR, @material.specular)
436
+ GL.Material(GL::FRONT_AND_BACK, GL::EMISSION, @material.emission)
437
+ GL.Materialf(GL::FRONT_AND_BACK, GL::SHININESS, @material.shininess)
438
+
439
+ # Color commands change both
440
+ GL.ColorMaterial(GL::FRONT_AND_BACK, GL::AMBIENT_AND_DIFFUSE)
441
+
442
+ # Global ambient light
443
+ GL.LightModel(GL::LIGHT_MODEL_AMBIENT, @ambient)
444
+
445
+ # Enable fog
446
+ if @options.include?(:VIEWER_FOG)
447
+ GL.Enable(GL::FOG)
448
+ GL.Fog(GL::FOG_COLOR, @top_background) # Disappear into the background
449
+ GL.Fogf(GL::FOG_START, (@distance - @diameter).to_f) # Range tight around model position
450
+ GL.Fogf(GL::FOG_END, (@distance + @diameter).to_f) # Far place same as clip plane:- clipped stuff is in the mist!
451
+ GL.Fogi(GL::FOG_MODE, GL::LINEAR) # Simple linear depth cueing
452
+ end
453
+
454
+ # Dithering
455
+ GL.Enable(GL::DITHER) if @options.include?(:VIEWER_DITHER)
456
+
457
+ # Enable lighting
458
+ GL.Enable(GL::LIGHTING) if @options.include?(:VIEWER_LIGHTING)
459
+
460
+ # Set model matrix
461
+ GL.LoadMatrixf(@transform)
462
+
463
+ if (@draw_axis and @draw_axis > 0)
464
+ # Draw axis
465
+ GL.PushMatrix
466
+ GL.LineWidth(2.5)
467
+ GL.Color3f(1.0, 0.0, 0.0)
468
+ GL.Begin(GL::LINES)
469
+ GL.Vertex3f(-@draw_axis.to_f, 0.0, 0.0)
470
+ GL.Vertex3f(@draw_axis.to_f, 0.0, 0.0)
471
+ begin
472
+ GL.End
473
+ rescue
474
+ # Raises false error on Mac
475
+ end
476
+ GL.Color3f(0.0, 1.0, 0.0)
477
+ GL.Begin(GL::LINES)
478
+ GL.Vertex3f(0, -@draw_axis, 0.0)
479
+ GL.Vertex3f(0, @draw_axis, 0)
480
+ begin
481
+ GL.End
482
+ rescue
483
+ # Raises false error on Mac
484
+ end
485
+ GL.Color3f(0.0, 0.0, 1.0)
486
+ GL.Begin(GL::LINES)
487
+ GL.Vertex3f(0, 0, -@draw_axis)
488
+ GL.Vertex3f(0, 0, @draw_axis)
489
+ begin
490
+ GL.End
491
+ rescue
492
+ # Raises false error on Mac
493
+ end
494
+ GL.PopMatrix
495
+ end
496
+
497
+ # Draw what's visible
498
+ @scene.draw(self) if @scene
499
+ end
500
+
501
+ def resizeGL(width, height)
502
+ @wvt.w = width;
503
+ @wvt.h = height;
504
+ updateProjection()
505
+ end
506
+
507
+ def screenToEye(sx, sy, eyez)
508
+ e = [0.0, 0.0, 0.0]
509
+ xp = (@worldpx*sx + @ax).to_f
510
+ yp = (@ay - @worldpx*sy).to_f
511
+ if @projection == :PERSPECTIVE
512
+ if @distance != 0.0
513
+ e.x = [((-eyez*xp) / @distance).to_f, ((-eyez*yp) / @distance).to_f, eyez]
514
+ end
515
+ else
516
+ e = [xp, yp, eyez]
517
+ end
518
+ return e;
519
+ end
520
+
521
+ def screenToTarget(sx, sy)
522
+ [@worldpx*sx.to_f + @ax, @ay - @worldpx*sy.to_f, -@distance.to_f]
523
+ end
524
+
525
+ def eyeToWorld(e)
526
+ [e[0]*@itransform[0][0] + e[1]*@itransform[1][0] + e[2]*@itransform[2][0] + @itransform[3][0],
527
+ e[0]*@itransform[0][1] + e[1]*@itransform[1][1] + e[2]*@itransform[2][1] + @itransform[3][1],
528
+ e[0]*@itransform[0][2] + e[1]*@itransform[1][2] + e[2]*@itransform[2][2] + @itransform[3][2]]
529
+ end
530
+
531
+ def worldToEyeZ(w)
532
+ w[0]*@transform[0][2] + w[1]*@transform[1][2] + w[2]*@transform[2][2] + @transform[3][2]
533
+ end
534
+
535
+ def calc_prime(v)
536
+ return [v[0]*@itransform[0][0] + v[1]*@itransform[1][0] + v[2]*@itransform[2][0] + @itransform[3][0],
537
+ v[0]*@itransform[0][1] + v[1]*@itransform[1][1] + v[2]*@itransform[2][1] + @itransform[3][1],
538
+ v[0]*@itransform[0][2] + v[1]*@itransform[1][2] + v[2]*@itransform[2][2] + @itransform[3][2]]
539
+ end
540
+
541
+ def worldVector(fx, fy, tx, ty)
542
+ wfm_prime = calc_prime(screenToTarget(fx, fy))
543
+ wto_prime = calc_prime(screenToTarget(tx, ty))
544
+ return [wto_prime[0] - wfm_prime[0], wto_prime[1] - wfm_prime[1], wto_prime[2] - wfm_prime[2]]
545
+ end
546
+
547
+ def spherePoint(x, y)
548
+ if @wvt.w > @wvt.h
549
+ screenmin = wvt.h.to_f
550
+ else
551
+ screenmin = wvt.w.to_f
552
+ end
553
+ v = []
554
+ v[0] = 2.0 * (x - 0.5*@wvt.w) / screenmin
555
+ v[1] = 2.0 * (0.5 * @wvt.h - y) / screenmin
556
+ d = v[0]*v[0] + v[1]*v[1]
557
+
558
+ if d < 0.75
559
+ v[2] = sqrt(1.0-d)
560
+ elsif d < 3.0
561
+ d = 1.7320508008 - sqrt(d)
562
+ t = 1.0 - d*d
563
+ t = 0.0 if t < 0.0
564
+ v[2] = 1.0 - sqrt(t)
565
+ else
566
+ v[2] = 0.0
567
+ end
568
+
569
+ length = sqrt(v[0]*v[0]+v[1]*v[1]+v[2]*v[2])
570
+ if length > 0.0
571
+ return [v[0] / length, v[1] / length, v[2] / length]
572
+ else
573
+ return [0.0, 0.0, 0.0]
574
+ end
575
+ end
576
+
577
+ def turn(fx, fy, tx, ty)
578
+ return Quaternion.arc(spherePoint(fx,fy), spherePoint(tx,ty))
579
+ end
580
+
581
+ def mode=(mode)
582
+ @mode = mode
583
+ case @mode
584
+ when :ZOOMING
585
+ Qt::Application.setOverrideCursor(Cosmos.getCursor(Qt::SizeVerCursor))
586
+ when :DRAGGING
587
+ Qt::Application.setOverrideCursor(Cosmos.getCursor(Qt::ClosedHandCursor))
588
+ when :ROTATING
589
+ Qt::Application.setOverrideCursor(Cosmos.getCursor(Qt::CrossCursor))
590
+ when :TRANSLATING
591
+ Qt::Application.setOverrideCursor(Cosmos.getCursor(Qt::SizeAllCursor))
592
+ else
593
+ Qt::Application.restoreOverrideCursor
594
+ end
595
+ end
596
+
597
+ def mousePressEvent(event)
598
+ case event.button
599
+ when Qt::LeftButton
600
+ self.mode = :PICKING
601
+ if (event.buttons & Qt::RightButton.to_i) != 0
602
+ self.mode = :ZOOMING
603
+ elsif (@selection and @selection.dragable and @selection == pick(event.x, event.y))
604
+ self.mode = :DRAGGING
605
+ end
606
+ when Qt::RightButton
607
+ if (event.buttons & Qt::LeftButton.to_i) != 0
608
+ self.mode = :ZOOMING
609
+ else
610
+ self.mode = :POSTING
611
+ end
612
+ when Qt::MidButton
613
+ self.mode = :ZOOMING
614
+ end
615
+ @lastPos = event.pos
616
+ end
617
+
618
+ def mouseReleaseEvent(event)
619
+ case @mode
620
+ when :PICKING
621
+ self.selection = pick(event.x, event.y)
622
+ end
623
+
624
+ if (((event.buttons & Qt::RightButton.to_i) != 0) and ((event.buttons & Qt::LeftButton.to_i) != 0)) or ((event.buttons & Qt::MidButton.to_i) != 0)
625
+ self.mode = :ZOOMING
626
+ elsif (event.buttons & Qt::LeftButton.to_i) != 0
627
+ self.mode = :ROTATING
628
+ elsif (event.buttons & Qt::RightButton.to_i) != 0
629
+ self.mode = :TRANSLATING
630
+ else
631
+ self.mode = :HOVERING
632
+ end
633
+ end
634
+
635
+ def mouseMoveEvent(event)
636
+ dx = event.x - @lastPos.x
637
+ dy = event.y - @lastPos.y
638
+
639
+ case @mode
640
+ when :PICKING, :POSTING
641
+ if dx.abs > 0 or dy.abs > 0
642
+ if @mode == :PICKING
643
+ self.mode = :ROTATING
644
+ else
645
+ self.mode = :TRANSLATING
646
+ end
647
+ end
648
+ when :TRANSLATING
649
+ vector = worldVector(@lastPos.x, @lastPos.y, event.x, event.y)
650
+ translate([-vector[0], -vector[1], -vector[2]])
651
+ when :DRAGGING
652
+ if @selection and @selection.drag(self, @lastPos.x, @lastPos.y, event.x, event.y)
653
+ updateGL()
654
+ end
655
+ when :ROTATING
656
+ self.orientation = turn(@lastPos.x, @lastPos.y, event.x, event.y) * @orientation
657
+ when :ZOOMING
658
+ delta = 0.005 * dy
659
+ self.zoom = @zoom * (2.0 ** delta)
660
+ end
661
+
662
+ @lastPos = event.pos
663
+ end
664
+
665
+ def wheelEvent(event)
666
+ self.zoom = @zoom * (2.0 ** (-0.1 * event.delta / 120.0))
667
+ end
668
+
669
+ protected
670
+
671
+ def updateProjection
672
+ # Should be non-0 size viewport
673
+ if @wvt.w > 0 and @wvt.h > 0
674
+ # Aspect ratio of viewer
675
+ aspect = @wvt.h.to_f / @wvt.w.to_f
676
+
677
+ # Get world box
678
+ r = 0.5 * @diameter / @zoom
679
+ if @wvt.w <= @wvt.h
680
+ @wvt.left = -r
681
+ @wvt.right = r
682
+ @wvt.bottom = -r * aspect
683
+ @wvt.top = r * aspect
684
+ else
685
+ @wvt.left = -r / aspect
686
+ @wvt.right = r / aspect
687
+ @wvt.bottom = -r
688
+ @wvt.top = r
689
+ end
690
+
691
+ @wvt.yon = @distance + @diameter
692
+ @wvt.hither = 0.1 * @wvt.yon
693
+
694
+ # Size of a pixel in world and model
695
+ @worldpx = (@wvt.right - @wvt.left) / @wvt.w
696
+ @modelpx = @worldpx * @diameter
697
+
698
+ # Precalc stuff for view->world backmapping
699
+ @ax = @wvt.left
700
+ @ay = @wvt.top - @worldpx
701
+
702
+ # Correction for perspective
703
+ if @projection == :PERSPECTIVE
704
+ hither_fac= @wvt.hither / @distance
705
+ @wvt.left *= hither_fac
706
+ @wvt.right *= hither_fac
707
+ @wvt.top *= hither_fac
708
+ @wvt.bottom *= hither_fac
709
+ end
710
+ end
711
+ end
712
+
713
+ def updateTransform
714
+ @transform = Matrix.identity(4)
715
+ @transform.trans4(0.0, 0.0, -@distance.to_f)
716
+ @transform.rot4(@orientation);
717
+ @transform.scale4(@scale[0], @scale[1], @scale[2]);
718
+ @transform.trans4(-@center[0], -@center[1], -@center[2]);
719
+ @itransform = @transform.inverse
720
+ end
721
+
722
+ end # class OpenGLViewer
723
+
724
+ end # module Cosmos