cosmos 3.0.1 → 3.1.0
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.
- checksums.yaml +4 -4
- data/.coveralls.yml +1 -0
- data/.gitignore +48 -48
- data/.travis.yml +7 -7
- data/CONTRIBUTING.txt +50 -50
- data/Gemfile +6 -6
- data/Guardfile +27 -27
- data/LICENSE.txt +879 -879
- data/Manifest.txt +1116 -1114
- data/README.md +109 -107
- data/Rakefile +214 -214
- data/autohotkey/config/data/diamond.STL +57 -57
- data/autohotkey/config/system/system.txt +34 -34
- data/autohotkey/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
- data/autohotkey/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
- data/autohotkey/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
- data/autohotkey/config/targets/COSMOS/target.txt +5 -5
- data/autohotkey/config/targets/INST/cmd_tlm/inst_cmds.txt +121 -121
- data/autohotkey/config/targets/INST/cmd_tlm/inst_tlm.txt +247 -247
- data/autohotkey/config/targets/INST/cmd_tlm_server.txt +5 -5
- data/autohotkey/config/targets/INST/lib/example_limits_response.rb +30 -30
- data/autohotkey/config/targets/INST/lib/sim_inst.rb +305 -294
- data/autohotkey/config/targets/INST/screens/adcs.txt +46 -46
- data/autohotkey/config/targets/INST/screens/array.txt +7 -7
- data/autohotkey/config/targets/INST/screens/block.txt +8 -8
- data/autohotkey/config/targets/INST/screens/commanding.txt +30 -30
- data/autohotkey/config/targets/INST/screens/graphs.txt +14 -14
- data/autohotkey/config/targets/INST/screens/ground.txt +25 -25
- data/autohotkey/config/targets/INST/screens/health_status.txt +33 -33
- data/autohotkey/config/targets/INST/screens/hs.txt +49 -49
- data/autohotkey/config/targets/INST/screens/image.txt +21 -21
- data/autohotkey/config/targets/INST/screens/latest.txt +23 -23
- data/autohotkey/config/targets/INST/screens/mech.txt +25 -25
- data/autohotkey/config/targets/INST/screens/other.txt +25 -25
- data/autohotkey/config/targets/INST/screens/params.txt +25 -25
- data/autohotkey/config/targets/INST/screens/tabs.txt +68 -68
- data/autohotkey/config/targets/INST/target.txt +26 -26
- data/autohotkey/config/targets/META/cmd_tlm/meta_cmd.txt +10 -10
- data/autohotkey/config/targets/META/cmd_tlm/meta_tlm.txt +9 -9
- data/autohotkey/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -7
- data/autohotkey/config/targets/SYSTEM/screens/error.txt +11 -11
- data/autohotkey/config/tools/cmd_tlm_server/cmd_tlm_server.txt +22 -22
- data/autohotkey/config/tools/data_viewer/data_viewer.txt +11 -11
- data/autohotkey/config/tools/handbook_creator/handbook_creator.txt +49 -49
- data/autohotkey/config/tools/handbook_creator/templates/command_packets.html.erb +86 -86
- data/autohotkey/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
- data/autohotkey/config/tools/handbook_creator/templates/footer.html.erb +9 -9
- data/autohotkey/config/tools/handbook_creator/templates/header.html.erb +25 -25
- data/autohotkey/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
- data/autohotkey/config/tools/handbook_creator/templates/nav.html.erb +27 -27
- data/autohotkey/config/tools/handbook_creator/templates/overview.html.erb +1 -1
- data/autohotkey/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
- data/autohotkey/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
- data/autohotkey/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
- data/autohotkey/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -80
- data/autohotkey/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
- data/autohotkey/config/tools/handbook_creator/templates/title.html.erb +1 -1
- data/autohotkey/config/tools/launcher/launcher.txt +38 -38
- data/autohotkey/config/tools/script_runner/script_runner.txt +3 -3
- data/autohotkey/config/tools/table_manager/ConfigTables_def.txt +8 -8
- data/autohotkey/config/tools/table_manager/OneDimensionalTable_def.txt +19 -19
- data/autohotkey/config/tools/table_manager/TwoDimensionalTable_def.txt +248 -248
- data/autohotkey/config/tools/test_runner/test_runner.txt +8 -8
- data/autohotkey/config/tools/test_runner/test_runner2.txt +11 -11
- data/autohotkey/config/tools/test_runner/test_runner3.txt +6 -6
- data/autohotkey/config/tools/test_runner/test_runner4.txt +1 -1
- data/autohotkey/config/tools/tlm_extractor/tlm_extractor.txt +13 -13
- data/autohotkey/config/tools/tlm_extractor/tlm_extractor2.txt +9 -9
- data/autohotkey/config/tools/tlm_grapher/bad.txt +50 -50
- data/autohotkey/config/tools/tlm_grapher/temp1-4.txt +51 -51
- data/autohotkey/config/tools/tlm_grapher/test2.txt +111 -111
- data/autohotkey/config/tools/tlm_viewer/tlm_viewer.txt +24 -24
- data/autohotkey/config/tools/tlm_viewer/tlm_viewer2.txt +4 -4
- data/autohotkey/config/tools/tlm_viewer/tlm_viewer3.txt +3 -3
- data/autohotkey/lib/example_background_task.rb +42 -42
- data/autohotkey/lib/user_version.rb +3 -3
- data/autohotkey/procedures/clear_util.rb +7 -7
- data/autohotkey/procedures/collect.rb +18 -18
- data/autohotkey/procedures/collect_util.rb +14 -14
- data/autohotkey/procedures/example_test.rb +67 -67
- data/autohotkey/procedures/example_test2.rb +74 -74
- data/autohotkey/procedures/script_test.rb +17 -17
- data/autohotkey/procedures/syntax_error.rb +18 -18
- data/autohotkey/tools/CmdExtractorAHK +16 -16
- data/autohotkey/tools/CmdSender +14 -14
- data/autohotkey/tools/CmdSenderAHK +18 -18
- data/autohotkey/tools/CmdTlmServer +14 -14
- data/autohotkey/tools/CmdTlmServerAHK +28 -28
- data/autohotkey/tools/CmdTlmServerAHK2 +17 -17
- data/autohotkey/tools/DataViewer +14 -14
- data/autohotkey/tools/DataViewerAHK +17 -17
- data/autohotkey/tools/HandbookCreatorAHK +20 -20
- data/autohotkey/tools/LauncherAHK +17 -17
- data/autohotkey/tools/LimitsMonitorAHK +20 -20
- data/autohotkey/tools/OpenGLBuilderAHK +20 -20
- data/autohotkey/tools/PacketViewer +14 -14
- data/autohotkey/tools/PacketViewerAHK +18 -18
- data/autohotkey/tools/PacketViewerAHK2 +17 -17
- data/autohotkey/tools/Replay +14 -14
- data/autohotkey/tools/Replay.bat +59 -59
- data/autohotkey/tools/ReplayAHK +17 -17
- data/autohotkey/tools/ScriptRunner +14 -14
- data/autohotkey/tools/ScriptRunnerAHK +20 -20
- data/autohotkey/tools/ScriptRunnerAHK2 +17 -17
- data/autohotkey/tools/TableManager +14 -14
- data/autohotkey/tools/TableManagerAHK +30 -30
- data/autohotkey/tools/TestRunner +15 -15
- data/autohotkey/tools/TestRunnerAHK +17 -17
- data/autohotkey/tools/TestRunnerAHK2 +17 -17
- data/autohotkey/tools/TestRunnerAHK3 +17 -17
- data/autohotkey/tools/TestRunnerAHK4 +17 -17
- data/autohotkey/tools/TlmExtractor +15 -15
- data/autohotkey/tools/TlmExtractorAHK +19 -19
- data/autohotkey/tools/TlmExtractorAHK2 +16 -16
- data/autohotkey/tools/TlmExtractorAHK3 +16 -16
- data/autohotkey/tools/TlmGrapher +14 -14
- data/autohotkey/tools/TlmGrapherAHK +19 -19
- data/autohotkey/tools/TlmGrapherAHK2 +23 -23
- data/autohotkey/tools/TlmGrapherAHK3 +17 -17
- data/autohotkey/tools/TlmGrapherAHK4 +17 -17
- data/autohotkey/tools/TlmViewer +14 -14
- data/autohotkey/tools/TlmViewerAHK +28 -28
- data/autohotkey/tools/TlmViewerAHK2 +18 -18
- data/autohotkey/tools/TlmViewerAHK3 +18 -18
- data/autohotkey/tools/TlmViewerAHK4 +18 -18
- data/autohotkey/tools/TlmViewerAHK5 +18 -18
- data/autohotkey/tools/autohotkey.rb +37 -37
- data/autohotkey/tools/cmd_extractor.ahk +27 -27
- data/autohotkey/tools/cmd_sender.ahk +182 -162
- data/autohotkey/tools/cmd_tlm_server.ahk +89 -89
- data/autohotkey/tools/cmd_tlm_server2.ahk +45 -45
- data/autohotkey/tools/data_viewer.ahk +135 -135
- data/autohotkey/tools/handbook_creator.ahk +23 -23
- data/autohotkey/tools/launcher.ahk +41 -41
- data/autohotkey/tools/limits_monitor.ahk +70 -70
- data/autohotkey/tools/open_gl_builder.ahk +134 -134
- data/autohotkey/tools/packet_viewer.ahk +143 -143
- data/autohotkey/tools/packet_viewer2.ahk +9 -9
- data/autohotkey/tools/replay.ahk +98 -98
- data/autohotkey/tools/script_runner.ahk +589 -589
- data/autohotkey/tools/script_runner2.ahk +34 -31
- data/autohotkey/tools/table_manager.ahk +220 -220
- data/autohotkey/tools/test_runner.ahk +262 -259
- data/autohotkey/tools/test_runner2.ahk +52 -52
- data/autohotkey/tools/test_runner3.ahk +13 -13
- data/autohotkey/tools/tlm_extractor.ahk +272 -272
- data/autohotkey/tools/tlm_grapher.ahk +642 -642
- data/autohotkey/tools/tlm_grapher2.ahk +115 -115
- data/autohotkey/tools/tlm_grapher3.ahk +24 -24
- data/autohotkey/tools/tlm_viewer.ahk +133 -133
- data/autohotkey/tools/tlm_viewer2.ahk +50 -49
- data/autohotkey/tools/tlm_viewer4.ahk +4 -4
- data/autohotkey/tools/tlm_viewer5.ahk +20 -20
- data/bin/cosmos +96 -96
- data/bin/cstol_converter +1166 -1166
- data/bin/rubysloc +85 -85
- data/cosmos.gemspec +98 -97
- data/data/about.txt +4 -4
- data/data/crc.txt +306 -305
- data/data/diamond.STL +57 -57
- data/data/legal.txt +9 -9
- data/demo/Gemfile +6 -6
- data/demo/Launcher +15 -15
- data/demo/Launcher.bat +59 -59
- data/demo/Rakefile +61 -61
- data/demo/config/data/crc.txt +222 -206
- data/demo/config/data/diamond.STL +57 -57
- data/demo/config/data/meta_init.txt +4 -4
- data/demo/config/system/system.txt +34 -34
- data/demo/config/system/system2.txt +33 -33
- data/demo/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
- data/demo/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
- data/demo/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
- data/demo/config/targets/COSMOS/screens/limits_change.txt +20 -20
- data/demo/config/targets/COSMOS/screens/version.txt +19 -19
- data/demo/config/targets/COSMOS/target.txt +11 -11
- data/demo/config/targets/EXAMPLE/cmd_tlm/example_cmds.txt +2 -2
- data/demo/config/targets/EXAMPLE/cmd_tlm/example_tlm.txt +3 -3
- data/demo/config/targets/EXAMPLE/cmd_tlm_server.txt +6 -6
- data/demo/config/targets/EXAMPLE/lib/example_interface.rb +22 -22
- data/demo/config/targets/EXAMPLE/target.txt +6 -6
- data/demo/config/targets/INST/cmd_tlm/inst_cmds.txt +121 -121
- data/demo/config/targets/INST/cmd_tlm/inst_tlm.txt +247 -247
- data/demo/config/targets/INST/cmd_tlm_server.txt +5 -5
- data/demo/config/targets/INST/lib/example_limits_response.rb +30 -30
- data/demo/config/targets/INST/lib/sim_inst.rb +305 -294
- data/demo/config/targets/INST/screens/adcs.txt +46 -46
- data/demo/config/targets/INST/screens/array.txt +15 -15
- data/demo/config/targets/INST/screens/block.txt +8 -8
- data/demo/config/targets/INST/screens/commanding.txt +30 -30
- data/demo/config/targets/INST/screens/graphs.txt +14 -14
- data/demo/config/targets/INST/screens/ground.txt +25 -25
- data/demo/config/targets/INST/screens/hs.txt +44 -44
- data/demo/config/targets/INST/screens/latest.txt +23 -23
- data/demo/config/targets/INST/screens/other.txt +29 -29
- data/demo/config/targets/INST/screens/tabs.txt +70 -70
- data/demo/config/targets/INST/target.txt +33 -33
- data/demo/config/targets/META/cmd_tlm/meta_cmd.txt +10 -10
- data/demo/config/targets/META/cmd_tlm/meta_tlm.txt +13 -13
- data/demo/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -7
- data/demo/config/targets/SYSTEM/cmd_tlm/override.txt +29 -29
- data/demo/config/targets/SYSTEM/screens/status.txt +12 -12
- data/demo/config/targets/TEMPLATED/cmd_tlm/templated_cmds.txt +13 -12
- data/demo/config/targets/TEMPLATED/cmd_tlm/templated_tlm.txt +3 -3
- data/demo/config/targets/TEMPLATED/cmd_tlm_server.txt +6 -6
- data/demo/config/targets/TEMPLATED/lib/templated_interface.rb +54 -48
- data/demo/config/targets/TEMPLATED/target.txt +6 -6
- data/demo/config/tools/cmd_tlm_server/cmd_tlm_server.txt +33 -33
- data/demo/config/tools/cmd_tlm_server/cmd_tlm_server2.txt +29 -29
- data/demo/config/tools/data_viewer/data_viewer.txt +11 -11
- data/demo/config/tools/handbook_creator/handbook_creator.txt +66 -66
- data/demo/config/tools/handbook_creator/templates/command_packets.html.erb +86 -86
- data/demo/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
- data/demo/config/tools/handbook_creator/templates/footer.html.erb +9 -9
- data/demo/config/tools/handbook_creator/templates/header.html.erb +25 -25
- data/demo/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
- data/demo/config/tools/handbook_creator/templates/nav.html.erb +27 -27
- data/demo/config/tools/handbook_creator/templates/overview.html.erb +1 -1
- data/demo/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
- data/demo/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
- data/demo/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
- data/demo/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -80
- data/demo/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
- data/demo/config/tools/handbook_creator/templates/title.html.erb +1 -1
- data/demo/config/tools/launcher/launcher.txt +45 -45
- data/demo/config/tools/launcher/launcher2.txt +45 -45
- data/demo/config/tools/script_runner/script_runner.txt +3 -3
- data/demo/config/tools/table_manager/ConfigTables_def.txt +8 -8
- data/demo/config/tools/table_manager/ExampleTableDefinition.txt +24 -24
- data/demo/config/tools/table_manager/MCConfigurationTable_fsw1_def.txt +25 -25
- data/demo/config/tools/table_manager/MCConfigurationTable_fsw2_def.txt +25 -25
- data/demo/config/tools/table_manager/PPSSelectionTable_def.txt +8 -8
- data/demo/config/tools/table_manager/TLMMonitoringTable_def.txt +248 -248
- data/demo/config/tools/test_runner/test_runner.txt +17 -17
- data/demo/config/tools/tlm_extractor/tlm_extractor.txt +13 -13
- data/demo/config/tools/tlm_extractor/tlm_extractor2.txt +2 -2
- data/demo/config/tools/tlm_extractor/tlm_extractor3.txt +2 -2
- data/demo/config/tools/tlm_extractor/tlm_extractor4.txt +2 -2
- data/demo/config/tools/tlm_viewer/tlm_viewer.txt +41 -41
- data/demo/lib/example_background_task.rb +57 -52
- data/demo/lib/example_target.rb +113 -108
- data/demo/lib/scpi_target.rb +74 -74
- data/demo/lib/user_version.rb +3 -3
- data/demo/procedures/checks.rb +11 -11
- data/demo/procedures/clear_util.rb +7 -7
- data/demo/procedures/collect.rb +18 -18
- data/demo/procedures/collect_util.rb +14 -14
- data/demo/procedures/cosmos_api_test.rb +293 -293
- data/demo/procedures/disconnect.rb +29 -29
- data/demo/procedures/example_test.rb +182 -182
- data/demo/procedures/plot_test.rb +8 -8
- data/demo/procedures/run_example_test.rb +3 -3
- data/demo/procedures/test.rb +51 -51
- data/demo/tools/CmdExtractor +15 -15
- data/demo/tools/CmdExtractor.bat +59 -59
- data/demo/tools/CmdSender +15 -15
- data/demo/tools/CmdSender.bat +59 -59
- data/demo/tools/CmdTlmServer +15 -15
- data/demo/tools/CmdTlmServer.bat +59 -59
- data/demo/tools/DataViewer +15 -15
- data/demo/tools/DataViewer.bat +59 -59
- data/demo/tools/ExampleTarget +15 -15
- data/demo/tools/ExampleTarget.bat +59 -59
- data/demo/tools/HandbookCreator +15 -15
- data/demo/tools/HandbookCreator.bat +61 -61
- data/demo/tools/Launcher +15 -15
- data/demo/tools/Launcher.bat +59 -59
- data/demo/tools/LimitsMonitor +15 -15
- data/demo/tools/LimitsMonitor.bat +59 -59
- data/demo/tools/OpenGLBuilder +15 -15
- data/demo/tools/OpenGLBuilder.bat +59 -59
- data/demo/tools/PacketViewer +15 -15
- data/demo/tools/PacketViewer.bat +59 -59
- data/demo/tools/Replay +15 -15
- data/demo/tools/Replay.bat +59 -59
- data/demo/tools/ScpiTarget +15 -15
- data/demo/tools/ScpiTarget.bat +59 -59
- data/demo/tools/ScriptRunner +15 -15
- data/demo/tools/ScriptRunner.bat +59 -59
- data/demo/tools/TableManager +15 -15
- data/demo/tools/TableManager.bat +59 -59
- data/demo/tools/TestRunner +15 -15
- data/demo/tools/TestRunner.bat +59 -59
- data/demo/tools/TlmExtractor +15 -15
- data/demo/tools/TlmExtractor.bat +59 -59
- data/demo/tools/TlmGrapher +15 -15
- data/demo/tools/TlmGrapher.bat +59 -59
- data/demo/tools/TlmViewer +15 -15
- data/demo/tools/TlmViewer.bat +59 -59
- data/demo/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +15 -15
- data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +6 -6
- data/demo/tools/mac/CmdSender.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +15 -15
- data/demo/tools/mac/CmdSender.app/Contents/MacOS/main.sh +6 -6
- data/demo/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +15 -15
- data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +6 -6
- data/demo/tools/mac/DataViewer.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +15 -15
- data/demo/tools/mac/DataViewer.app/Contents/MacOS/main.sh +6 -6
- data/demo/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +15 -15
- data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +6 -6
- data/demo/tools/mac/Launcher.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +15 -15
- data/demo/tools/mac/Launcher.app/Contents/MacOS/main.sh +6 -6
- data/demo/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +15 -15
- data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +6 -6
- data/demo/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +15 -15
- data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +6 -6
- data/demo/tools/mac/PacketViewer.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +15 -15
- data/demo/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +6 -6
- data/demo/tools/mac/Replay.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/Replay.app/Contents/MacOS/Replay.rb +15 -15
- data/demo/tools/mac/Replay.app/Contents/MacOS/main.sh +6 -6
- data/demo/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +15 -15
- data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +6 -6
- data/demo/tools/mac/TableManager.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +15 -15
- data/demo/tools/mac/TableManager.app/Contents/MacOS/main.sh +6 -6
- data/demo/tools/mac/TestRunner.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +15 -15
- data/demo/tools/mac/TestRunner.app/Contents/MacOS/main.sh +6 -6
- data/demo/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +15 -15
- data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +6 -6
- data/demo/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +15 -15
- data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +6 -6
- data/demo/tools/mac/TlmViewer.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +15 -15
- data/demo/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +6 -6
- data/ext/cosmos/ext/array/array.c +111 -111
- data/ext/cosmos/ext/array/extconf.rb +13 -13
- data/ext/cosmos/ext/buffered_file/buffered_file.c +167 -167
- data/ext/cosmos/ext/buffered_file/extconf.rb +13 -13
- data/ext/cosmos/ext/config_parser/config_parser.c +237 -237
- data/ext/cosmos/ext/config_parser/extconf.rb +13 -13
- data/ext/cosmos/ext/cosmos_io/cosmos_io.c +117 -117
- data/ext/cosmos/ext/cosmos_io/extconf.rb +13 -13
- data/ext/cosmos/ext/crc/crc.c +341 -341
- data/ext/cosmos/ext/crc/extconf.rb +12 -12
- data/ext/cosmos/ext/line_graph/extconf.rb +13 -13
- data/ext/cosmos/ext/line_graph/line_graph.c +501 -501
- data/ext/cosmos/ext/low_fragmentation_array/extconf.rb +12 -12
- data/ext/cosmos/ext/low_fragmentation_array/low_fragmentation_array.c +261 -261
- data/ext/cosmos/ext/packet/extconf.rb +13 -13
- data/ext/cosmos/ext/packet/packet.c +339 -339
- data/ext/cosmos/ext/platform/extconf.rb +13 -13
- data/ext/cosmos/ext/platform/platform.c +81 -81
- data/ext/cosmos/ext/polynomial_conversion/extconf.rb +13 -13
- data/ext/cosmos/ext/polynomial_conversion/polynomial_conversion.c +73 -73
- data/ext/cosmos/ext/string/extconf.rb +13 -13
- data/ext/cosmos/ext/string/string.c +49 -49
- data/ext/cosmos/ext/structure/structure.c +894 -894
- data/ext/cosmos/ext/tabbed_plots_config/extconf.rb +13 -13
- data/ext/cosmos/ext/tabbed_plots_config/tabbed_plots_config.c +51 -51
- data/ext/cosmos/ext/telemetry/extconf.rb +13 -13
- data/ext/cosmos/ext/telemetry/telemetry.c +306 -306
- data/ext/mkrf_conf.rb +40 -40
- data/install/Gemfile +6 -6
- data/install/Launcher +14 -14
- data/install/Launcher.bat +59 -59
- data/install/Rakefile +61 -61
- data/install/config/data/crc.txt +134 -133
- data/install/config/system/system.txt +29 -29
- data/install/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
- data/install/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
- data/install/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
- data/install/config/targets/COSMOS/screens/limits_change.txt +20 -20
- data/install/config/targets/COSMOS/screens/version.txt +19 -19
- data/install/config/targets/COSMOS/target.txt +8 -8
- data/install/config/tools/cmd_tlm_server/cmd_tlm_server.txt +2 -2
- data/install/config/tools/data_viewer/data_viewer.txt +3 -3
- data/install/config/tools/handbook_creator/handbook_creator.txt +49 -49
- data/install/config/tools/handbook_creator/templates/command_packets.html.erb +86 -86
- data/install/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
- data/install/config/tools/handbook_creator/templates/footer.html.erb +9 -9
- data/install/config/tools/handbook_creator/templates/header.html.erb +25 -25
- data/install/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
- data/install/config/tools/handbook_creator/templates/nav.html.erb +27 -27
- data/install/config/tools/handbook_creator/templates/overview.html.erb +1 -1
- data/install/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
- data/install/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
- data/install/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
- data/install/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -80
- data/install/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
- data/install/config/tools/handbook_creator/templates/title.html.erb +1 -1
- data/install/config/tools/launcher/launcher.txt +39 -39
- data/install/config/tools/script_runner/script_runner.txt +3 -3
- data/install/config/tools/test_runner/test_runner.txt +8 -8
- data/install/config/tools/tlm_viewer/tlm_viewer.txt +5 -5
- data/install/lib/user_version.rb +3 -3
- data/install/tools/CmdExtractor +15 -15
- data/install/tools/CmdExtractor.bat +59 -59
- data/install/tools/CmdSender +15 -15
- data/install/tools/CmdSender.bat +59 -59
- data/install/tools/CmdTlmServer +15 -15
- data/install/tools/CmdTlmServer.bat +59 -59
- data/install/tools/DataViewer +15 -15
- data/install/tools/DataViewer.bat +59 -59
- data/install/tools/HandbookCreator +15 -15
- data/install/tools/HandbookCreator.bat +61 -61
- data/install/tools/Launcher +15 -15
- data/install/tools/Launcher.bat +59 -59
- data/install/tools/LimitsMonitor +15 -15
- data/install/tools/LimitsMonitor.bat +59 -59
- data/install/tools/OpenGLBuilder +15 -15
- data/install/tools/OpenGLBuilder.bat +59 -59
- data/install/tools/PacketViewer +15 -15
- data/install/tools/PacketViewer.bat +59 -59
- data/install/tools/Replay +15 -15
- data/install/tools/Replay.bat +59 -59
- data/install/tools/ScriptRunner +15 -15
- data/install/tools/ScriptRunner.bat +59 -59
- data/install/tools/TableManager +15 -15
- data/install/tools/TableManager.bat +59 -59
- data/install/tools/TestRunner +15 -15
- data/install/tools/TestRunner.bat +59 -59
- data/install/tools/TlmExtractor +15 -15
- data/install/tools/TlmExtractor.bat +59 -59
- data/install/tools/TlmGrapher +15 -15
- data/install/tools/TlmGrapher.bat +59 -59
- data/install/tools/TlmViewer +15 -15
- data/install/tools/TlmViewer.bat +59 -59
- data/install/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -38
- data/install/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +15 -15
- data/install/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +6 -6
- data/install/tools/mac/CmdSender.app/Contents/Info.plist +38 -38
- data/install/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +15 -15
- data/install/tools/mac/CmdSender.app/Contents/MacOS/main.sh +6 -6
- data/install/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -38
- data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +15 -15
- data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +6 -6
- data/install/tools/mac/DataViewer.app/Contents/Info.plist +38 -38
- data/install/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +15 -15
- data/install/tools/mac/DataViewer.app/Contents/MacOS/main.sh +6 -6
- data/install/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -38
- data/install/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +15 -15
- data/install/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +6 -6
- data/install/tools/mac/Launcher.app/Contents/Info.plist +38 -38
- data/install/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +15 -15
- data/install/tools/mac/Launcher.app/Contents/MacOS/main.sh +6 -6
- data/install/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -38
- data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +15 -15
- data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +6 -6
- data/install/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -38
- data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +15 -15
- data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +6 -6
- data/install/tools/mac/PacketViewer.app/Contents/Info.plist +38 -38
- data/install/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +15 -15
- data/install/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +6 -6
- data/install/tools/mac/Replay.app/Contents/Info.plist +38 -38
- data/install/tools/mac/Replay.app/Contents/MacOS/Replay.rb +15 -15
- data/install/tools/mac/Replay.app/Contents/MacOS/main.sh +6 -6
- data/install/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -38
- data/install/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +15 -15
- data/install/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +6 -6
- data/install/tools/mac/TableManager.app/Contents/Info.plist +38 -38
- data/install/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +15 -15
- data/install/tools/mac/TableManager.app/Contents/MacOS/main.sh +6 -6
- data/install/tools/mac/TestRunner.app/Contents/Info.plist +38 -38
- data/install/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +15 -15
- data/install/tools/mac/TestRunner.app/Contents/MacOS/main.sh +6 -6
- data/install/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -38
- data/install/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +15 -15
- data/install/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +6 -6
- data/install/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -38
- data/install/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +15 -15
- data/install/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +6 -6
- data/install/tools/mac/TlmViewer.app/Contents/Info.plist +38 -38
- data/install/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +15 -15
- data/install/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +6 -6
- data/lib/cosmos.rb +63 -63
- data/lib/cosmos/ccsds/ccsds_packet.rb +63 -63
- data/lib/cosmos/ccsds/ccsds_parser.rb +143 -143
- data/lib/cosmos/config/config_parser.rb +324 -324
- data/lib/cosmos/conversions.rb +13 -13
- data/lib/cosmos/conversions/conversion.rb +47 -47
- data/lib/cosmos/conversions/generic_conversion.rb +55 -55
- data/lib/cosmos/conversions/new_packet_log_conversion.rb +45 -45
- data/lib/cosmos/conversions/polynomial_conversion.rb +57 -57
- data/lib/cosmos/conversions/processor_conversion.rb +46 -46
- data/lib/cosmos/conversions/received_count_conversion.rb +33 -33
- data/lib/cosmos/conversions/received_time_formatted_conversion.rb +37 -37
- data/lib/cosmos/conversions/received_time_seconds_conversion.rb +37 -37
- data/lib/cosmos/conversions/segmented_polynomial_conversion.rb +128 -128
- data/lib/cosmos/conversions/unix_time_conversion.rb +50 -50
- data/lib/cosmos/conversions/unix_time_formatted_conversion.rb +44 -44
- data/lib/cosmos/conversions/unix_time_seconds_conversion.rb +44 -44
- data/lib/cosmos/core_ext.rb +18 -18
- data/lib/cosmos/core_ext/array.rb +354 -354
- data/lib/cosmos/core_ext/class.rb +51 -51
- data/lib/cosmos/core_ext/cosmos_io.rb +29 -29
- data/lib/cosmos/core_ext/exception.rb +52 -52
- data/lib/cosmos/core_ext/file.rb +75 -75
- data/lib/cosmos/core_ext/hash.rb +28 -28
- data/lib/cosmos/core_ext/io.rb +75 -75
- data/lib/cosmos/core_ext/kernel.rb +38 -38
- data/lib/cosmos/core_ext/math.rb +119 -119
- data/lib/cosmos/core_ext/matrix.rb +146 -146
- data/lib/cosmos/core_ext/objectspace.rb +29 -29
- data/lib/cosmos/core_ext/range.rb +22 -22
- data/lib/cosmos/core_ext/socket.rb +32 -32
- data/lib/cosmos/core_ext/string.rb +310 -310
- data/lib/cosmos/core_ext/stringio.rb +24 -24
- data/lib/cosmos/core_ext/time.rb +446 -446
- data/lib/cosmos/gui/choosers/combobox_chooser.rb +130 -130
- data/lib/cosmos/gui/choosers/file_chooser.rb +68 -68
- data/lib/cosmos/gui/choosers/float_chooser.rb +82 -82
- data/lib/cosmos/gui/choosers/integer_chooser.rb +80 -80
- data/lib/cosmos/gui/choosers/string_chooser.rb +53 -53
- data/lib/cosmos/gui/choosers/telemetry_chooser.rb +317 -317
- data/lib/cosmos/gui/dialogs/about_dialog.rb +128 -128
- data/lib/cosmos/gui/dialogs/calendar_dialog.rb +136 -136
- data/lib/cosmos/gui/dialogs/cmd_details_dialog.rb +52 -52
- data/lib/cosmos/gui/dialogs/cmd_tlm_raw_dialog.rb +149 -149
- data/lib/cosmos/gui/dialogs/details_dialog.rb +174 -174
- data/lib/cosmos/gui/dialogs/exception_dialog.rb +97 -97
- data/lib/cosmos/gui/dialogs/exception_list_dialog.rb +59 -59
- data/lib/cosmos/gui/dialogs/find_replace_dialog.rb +196 -196
- data/lib/cosmos/gui/dialogs/legal_dialog.rb +169 -168
- data/lib/cosmos/gui/dialogs/packet_log_dialog.rb +118 -118
- data/lib/cosmos/gui/dialogs/progress_dialog.rb +270 -262
- data/lib/cosmos/gui/dialogs/pry_dialog.rb +165 -161
- data/lib/cosmos/gui/dialogs/scroll_text_dialog.rb +37 -37
- data/lib/cosmos/gui/dialogs/select_dialog.rb +54 -54
- data/lib/cosmos/gui/dialogs/set_tlm_dialog.rb +131 -131
- data/lib/cosmos/gui/dialogs/splash.rb +113 -113
- data/lib/cosmos/gui/dialogs/tlm_details_dialog.rb +206 -206
- data/lib/cosmos/gui/dialogs/tlm_edit_dialog.rb +81 -81
- data/lib/cosmos/gui/line_graph/line_graph.rb +456 -456
- data/lib/cosmos/gui/line_graph/line_graph_dialog.rb +34 -34
- data/lib/cosmos/gui/line_graph/line_graph_drawing.rb +494 -494
- data/lib/cosmos/gui/line_graph/line_graph_popups.rb +116 -116
- data/lib/cosmos/gui/line_graph/line_graph_scaling.rb +460 -460
- data/lib/cosmos/gui/line_graph/line_graph_script.rb +26 -26
- data/lib/cosmos/gui/line_graph/lines.rb +290 -290
- data/lib/cosmos/gui/line_graph/overview_graph.rb +459 -459
- data/lib/cosmos/gui/opengl/earth_model.rb +22 -22
- data/lib/cosmos/gui/opengl/gl_bounds.rb +67 -67
- data/lib/cosmos/gui/opengl/gl_light.rb +39 -39
- data/lib/cosmos/gui/opengl/gl_material.rb +29 -29
- data/lib/cosmos/gui/opengl/gl_scene.rb +72 -72
- data/lib/cosmos/gui/opengl/gl_shape.rb +146 -146
- data/lib/cosmos/gui/opengl/gl_viewer.rb +724 -712
- data/lib/cosmos/gui/opengl/gl_viewport.rb +35 -35
- data/lib/cosmos/gui/opengl/moon_model.rb +22 -22
- data/lib/cosmos/gui/opengl/opengl.rb +8 -8
- data/lib/cosmos/gui/opengl/stl_reader.rb +211 -211
- data/lib/cosmos/gui/opengl/stl_shape.rb +124 -124
- data/lib/cosmos/gui/opengl/texture_mapped_sphere.rb +202 -202
- data/lib/cosmos/gui/qt.rb +813 -786
- data/lib/cosmos/gui/qt_tool.rb +378 -373
- data/lib/cosmos/gui/text/completion.rb +381 -381
- data/lib/cosmos/gui/text/completion_line_edit.rb +30 -30
- data/lib/cosmos/gui/text/completion_text_edit.rb +179 -179
- data/lib/cosmos/gui/text/ruby_editor.rb +395 -395
- data/lib/cosmos/gui/utilities/screenshot.rb +25 -25
- data/lib/cosmos/gui/utilities/script_module_gui.rb +203 -203
- data/lib/cosmos/gui/widgets/full_text_search_line_edit.rb +161 -161
- data/lib/cosmos/gui/widgets/packet_log_frame.rb +305 -305
- data/lib/cosmos/gui/widgets/realtime_button_bar.rb +98 -98
- data/lib/cosmos/interfaces.rb +11 -11
- data/lib/cosmos/interfaces/cmd_tlm_server_interface.rb +153 -149
- data/lib/cosmos/interfaces/interface.rb +213 -213
- data/lib/cosmos/interfaces/linc_interface.rb +360 -360
- data/lib/cosmos/interfaces/serial_interface.rb +76 -76
- data/lib/cosmos/interfaces/simulated_target_interface.rb +129 -128
- data/lib/cosmos/interfaces/stream_interface.rb +156 -156
- data/lib/cosmos/interfaces/tcpip_client_interface.rb +60 -60
- data/lib/cosmos/interfaces/tcpip_server_interface.rb +154 -154
- data/lib/cosmos/interfaces/udp_interface.rb +173 -173
- data/lib/cosmos/io/buffered_file.rb +11 -11
- data/lib/cosmos/io/cosmos_snmp.rb +50 -50
- data/lib/cosmos/io/io_multiplexer.rb +89 -89
- data/lib/cosmos/io/json_drb.rb +344 -320
- data/lib/cosmos/io/json_drb_object.rb +137 -137
- data/lib/cosmos/io/json_rpc.rb +365 -365
- data/lib/cosmos/io/posix_serial_driver.rb +145 -145
- data/lib/cosmos/io/raw_logger.rb +174 -174
- data/lib/cosmos/io/raw_logger_pair.rb +71 -71
- data/lib/cosmos/io/serial_driver.rb +85 -85
- data/lib/cosmos/io/stderr.rb +36 -36
- data/lib/cosmos/io/stdout.rb +36 -36
- data/lib/cosmos/io/tcpip_server.rb +583 -532
- data/lib/cosmos/io/udp_sockets.rb +152 -152
- data/lib/cosmos/io/win32_serial_driver.rb +147 -147
- data/lib/cosmos/packet_logs.rb +6 -6
- data/lib/cosmos/packet_logs/meta_packet_log_writer.rb +107 -107
- data/lib/cosmos/packet_logs/packet_log_reader.rb +441 -439
- data/lib/cosmos/packet_logs/packet_log_writer.rb +321 -309
- data/lib/cosmos/packet_logs/packet_log_writer_pair.rb +30 -30
- data/lib/cosmos/packets/binary_accessor.rb +921 -921
- data/lib/cosmos/packets/commands.rb +291 -291
- data/lib/cosmos/packets/limits.rb +263 -263
- data/lib/cosmos/packets/limits_response.rb +38 -38
- data/lib/cosmos/packets/packet.rb +714 -699
- data/lib/cosmos/packets/packet_config.rb +1034 -1034
- data/lib/cosmos/packets/packet_item.rb +317 -317
- data/lib/cosmos/packets/packet_item_limits.rb +128 -128
- data/lib/cosmos/packets/structure.rb +421 -386
- data/lib/cosmos/packets/structure_item.rb +233 -233
- data/lib/cosmos/packets/telemetry.rb +317 -317
- data/lib/cosmos/processors.rb +6 -6
- data/lib/cosmos/processors/new_packet_log_processor.rb +34 -34
- data/lib/cosmos/processors/processor.rb +71 -71
- data/lib/cosmos/processors/statistics_processor.rb +65 -65
- data/lib/cosmos/processors/watermark_processor.rb +44 -44
- data/lib/cosmos/script.rb +9 -9
- data/lib/cosmos/script/extract.rb +115 -115
- data/lib/cosmos/script/script.rb +1513 -1493
- data/lib/cosmos/streams/burst_stream_protocol.rb +25 -25
- data/lib/cosmos/streams/fixed_stream_protocol.rb +111 -111
- data/lib/cosmos/streams/length_stream_protocol.rb +140 -140
- data/lib/cosmos/streams/preidentified_stream_protocol.rb +118 -118
- data/lib/cosmos/streams/serial_stream.rb +152 -143
- data/lib/cosmos/streams/stream.rb +57 -57
- data/lib/cosmos/streams/stream_protocol.rb +369 -369
- data/lib/cosmos/streams/tcpip_client_stream.rb +77 -77
- data/lib/cosmos/streams/tcpip_socket_stream.rb +139 -139
- data/lib/cosmos/streams/template_stream_protocol.rb +140 -140
- data/lib/cosmos/streams/terminated_stream_protocol.rb +81 -81
- data/lib/cosmos/system.rb +4 -4
- data/lib/cosmos/system/system.rb +558 -558
- data/lib/cosmos/system/target.rb +178 -178
- data/lib/cosmos/tools/cmd_extractor/cmd_extractor.rb +254 -253
- data/lib/cosmos/tools/cmd_sender/cmd_sender.rb +716 -716
- data/lib/cosmos/tools/cmd_sender/cmd_sender_item_delegate.rb +77 -77
- data/lib/cosmos/tools/cmd_sender/cmd_sender_text_edit.rb +70 -70
- data/lib/cosmos/tools/cmd_tlm_server/api.rb +936 -940
- data/lib/cosmos/tools/cmd_tlm_server/background_task.rb +46 -46
- data/lib/cosmos/tools/cmd_tlm_server/background_tasks.rb +67 -63
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +511 -497
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_config.rb +241 -241
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +1033 -1008
- data/lib/cosmos/tools/cmd_tlm_server/commanding.rb +112 -112
- data/lib/cosmos/tools/cmd_tlm_server/connections.rb +176 -176
- data/lib/cosmos/tools/cmd_tlm_server/interface_thread.rb +241 -221
- data/lib/cosmos/tools/cmd_tlm_server/interfaces.rb +127 -127
- data/lib/cosmos/tools/cmd_tlm_server/packet_logging.rb +132 -132
- data/lib/cosmos/tools/cmd_tlm_server/router_thread.rb +66 -66
- data/lib/cosmos/tools/cmd_tlm_server/routers.rb +97 -97
- data/lib/cosmos/tools/data_viewer/data_viewer.rb +628 -600
- data/lib/cosmos/tools/data_viewer/data_viewer_component.rb +167 -167
- data/lib/cosmos/tools/data_viewer/dump_component.rb +40 -40
- data/lib/cosmos/tools/handbook_creator/handbook_creator.rb +149 -149
- data/lib/cosmos/tools/handbook_creator/handbook_creator_config.rb +360 -360
- data/lib/cosmos/tools/launcher/launcher.rb +184 -184
- data/lib/cosmos/tools/launcher/launcher_config.rb +175 -167
- data/lib/cosmos/tools/launcher/launcher_multitool.rb +40 -41
- data/lib/cosmos/tools/launcher/launcher_tool.rb +104 -104
- data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +796 -768
- data/lib/cosmos/tools/opengl_builder/opengl_builder.rb +416 -416
- data/lib/cosmos/tools/opengl_builder/scene_config.rb +118 -118
- data/lib/cosmos/tools/packet_viewer/packet_viewer.rb +525 -525
- data/lib/cosmos/tools/replay/replay.rb +495 -488
- data/lib/cosmos/tools/replay/replay_server.rb +91 -91
- data/lib/cosmos/tools/script_runner/script_audit.rb +147 -139
- data/lib/cosmos/tools/script_runner/script_runner.rb +914 -914
- data/lib/cosmos/tools/script_runner/script_runner_config.rb +40 -40
- data/lib/cosmos/tools/script_runner/script_runner_frame.rb +1892 -1859
- data/lib/cosmos/tools/table_manager/table.rb +70 -70
- data/lib/cosmos/tools/table_manager/table_config.rb +764 -764
- data/lib/cosmos/tools/table_manager/table_item.rb +74 -74
- data/lib/cosmos/tools/table_manager/table_manager.rb +1065 -1065
- data/lib/cosmos/tools/table_manager/table_manager_core.rb +539 -539
- data/lib/cosmos/tools/test_runner/results_writer.rb +283 -283
- data/lib/cosmos/tools/test_runner/test.rb +480 -480
- data/lib/cosmos/tools/test_runner/test_runner.rb +1157 -1157
- data/lib/cosmos/tools/test_runner/test_runner_chooser.rb +338 -338
- data/lib/cosmos/tools/tlm_extractor/text_item_chooser.rb +60 -60
- data/lib/cosmos/tools/tlm_extractor/tlm_extractor.rb +1008 -1008
- data/lib/cosmos/tools/tlm_extractor/tlm_extractor_config.rb +371 -371
- data/lib/cosmos/tools/tlm_extractor/tlm_extractor_processor.rb +60 -60
- data/lib/cosmos/tools/tlm_grapher/data_object_adders/housekeeping_data_object_adder.rb +75 -75
- data/lib/cosmos/tools/tlm_grapher/data_object_adders/singlexy_data_object_adder.rb +44 -44
- data/lib/cosmos/tools/tlm_grapher/data_object_adders/xy_data_object_adder.rb +94 -94
- data/lib/cosmos/tools/tlm_grapher/data_object_editors/data_object_editor.rb +61 -61
- data/lib/cosmos/tools/tlm_grapher/data_object_editors/housekeeping_data_object_editor.rb +180 -180
- data/lib/cosmos/tools/tlm_grapher/data_object_editors/linegraph_data_object_editor.rb +141 -141
- data/lib/cosmos/tools/tlm_grapher/data_object_editors/singlexy_data_object_editor.rb +30 -30
- data/lib/cosmos/tools/tlm_grapher/data_object_editors/xy_data_object_editor.rb +173 -173
- data/lib/cosmos/tools/tlm_grapher/data_objects/data_object.rb +177 -177
- data/lib/cosmos/tools/tlm_grapher/data_objects/housekeeping_data_object.rb +412 -409
- data/lib/cosmos/tools/tlm_grapher/data_objects/linegraph_data_object.rb +176 -176
- data/lib/cosmos/tools/tlm_grapher/data_objects/singlexy_data_object.rb +25 -25
- data/lib/cosmos/tools/tlm_grapher/data_objects/xy_data_object.rb +323 -320
- data/lib/cosmos/tools/tlm_grapher/plot_editors/linegraph_plot_editor.rb +181 -181
- data/lib/cosmos/tools/tlm_grapher/plot_editors/plot_editor.rb +28 -28
- data/lib/cosmos/tools/tlm_grapher/plot_editors/singlexy_plot_editor.rb +30 -30
- data/lib/cosmos/tools/tlm_grapher/plot_editors/xy_plot_editor.rb +59 -59
- data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/linegraph_plot_gui_object.rb +172 -172
- data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/singlexy_plot_gui_object.rb +27 -27
- data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/xy_plot_gui_object.rb +74 -74
- data/lib/cosmos/tools/tlm_grapher/plots/linegraph_plot.rb +201 -201
- data/lib/cosmos/tools/tlm_grapher/plots/plot.rb +69 -69
- data/lib/cosmos/tools/tlm_grapher/plots/singlexy_plot.rb +20 -20
- data/lib/cosmos/tools/tlm_grapher/plots/xy_plot.rb +61 -61
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots/overview_tabbed_plots.rb +1278 -1278
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_config.rb +430 -430
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_data_object_editor.rb +107 -107
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_logfile_thread.rb +111 -95
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_plot_editor.rb +101 -101
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_realtime_thread.rb +72 -66
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tab.rb +57 -57
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tool.rb +1004 -1004
- data/lib/cosmos/tools/tlm_grapher/tlm_grapher.rb +87 -87
- data/lib/cosmos/tools/tlm_viewer/screen.rb +486 -458
- data/lib/cosmos/tools/tlm_viewer/tlm_viewer.rb +563 -544
- data/lib/cosmos/tools/tlm_viewer/tlm_viewer_config.rb +287 -287
- data/lib/cosmos/tools/tlm_viewer/widgets.rb +53 -53
- data/lib/cosmos/tools/tlm_viewer/widgets/aging_widget.rb +110 -110
- data/lib/cosmos/tools/tlm_viewer/widgets/array_widget.rb +70 -70
- data/lib/cosmos/tools/tlm_viewer/widgets/block_widget.rb +61 -61
- data/lib/cosmos/tools/tlm_viewer/widgets/button_widget.rb +39 -39
- data/lib/cosmos/tools/tlm_viewer/widgets/canvas_widget.rb +62 -62
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasimage_widget.rb +41 -41
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasimagevalue_widget.rb +57 -57
- data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabel_widget.rb +37 -37
- data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabelvalue_widget.rb +56 -56
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasline_widget.rb +55 -55
- data/lib/cosmos/tools/tlm_viewer/widgets/canvaslinevalue_widget.rb +66 -66
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasvalue_widget.rb +124 -124
- data/lib/cosmos/tools/tlm_viewer/widgets/checkbutton_widget.rb +31 -31
- data/lib/cosmos/tools/tlm_viewer/widgets/combobox_widget.rb +30 -30
- data/lib/cosmos/tools/tlm_viewer/widgets/formatfontvalue_widget.rb +36 -36
- data/lib/cosmos/tools/tlm_viewer/widgets/formatvalue_widget.rb +35 -35
- data/lib/cosmos/tools/tlm_viewer/widgets/horizontal_widget.rb +27 -27
- data/lib/cosmos/tools/tlm_viewer/widgets/horizontalbox_widget.rb +31 -31
- data/lib/cosmos/tools/tlm_viewer/widgets/horizontalline_widget.rb +26 -26
- data/lib/cosmos/tools/tlm_viewer/widgets/label_widget.rb +29 -29
- data/lib/cosmos/tools/tlm_viewer/widgets/labelformatvalue_widget.rb +39 -39
- data/lib/cosmos/tools/tlm_viewer/widgets/labelprogressbar_widget.rb +38 -38
- data/lib/cosmos/tools/tlm_viewer/widgets/labeltrendlimitsbar_widget.rb +38 -38
- data/lib/cosmos/tools/tlm_viewer/widgets/labelvalue_widget.rb +39 -39
- data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluedesc_widget.rb +42 -42
- data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluelimitsbar_widget.rb +37 -37
- data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluerangebar_widget.rb +37 -37
- data/lib/cosmos/tools/tlm_viewer/widgets/layout_widget.rb +34 -34
- data/lib/cosmos/tools/tlm_viewer/widgets/limitsbar_widget.rb +178 -178
- data/lib/cosmos/tools/tlm_viewer/widgets/linegraph_widget.rb +54 -54
- data/lib/cosmos/tools/tlm_viewer/widgets/matrixbycolumns_widget.rb +47 -47
- data/lib/cosmos/tools/tlm_viewer/widgets/multi_widget.rb +116 -116
- data/lib/cosmos/tools/tlm_viewer/widgets/progressbar_widget.rb +34 -34
- data/lib/cosmos/tools/tlm_viewer/widgets/radiobutton_widget.rb +30 -30
- data/lib/cosmos/tools/tlm_viewer/widgets/rangebar_widget.rb +57 -57
- data/lib/cosmos/tools/tlm_viewer/widgets/screenshotbutton_widget.rb +34 -34
- data/lib/cosmos/tools/tlm_viewer/widgets/scrollwindow_widget.rb +35 -35
- data/lib/cosmos/tools/tlm_viewer/widgets/sectionheader_widget.rb +33 -33
- data/lib/cosmos/tools/tlm_viewer/widgets/tabbook_widget.rb +26 -26
- data/lib/cosmos/tools/tlm_viewer/widgets/tabitem_widget.rb +28 -28
- data/lib/cosmos/tools/tlm_viewer/widgets/textbox_widget.rb +47 -47
- data/lib/cosmos/tools/tlm_viewer/widgets/textfield_widget.rb +26 -26
- data/lib/cosmos/tools/tlm_viewer/widgets/timegraph_widget.rb +88 -88
- data/lib/cosmos/tools/tlm_viewer/widgets/title_widget.rb +27 -27
- data/lib/cosmos/tools/tlm_viewer/widgets/trendbar_widget.rb +130 -130
- data/lib/cosmos/tools/tlm_viewer/widgets/trendlimitsbar_widget.rb +46 -46
- data/lib/cosmos/tools/tlm_viewer/widgets/value_widget.rb +43 -43
- data/lib/cosmos/tools/tlm_viewer/widgets/valuelimitsbar_widget.rb +37 -37
- data/lib/cosmos/tools/tlm_viewer/widgets/valuerangebar_widget.rb +37 -37
- data/lib/cosmos/tools/tlm_viewer/widgets/vertical_widget.rb +35 -35
- data/lib/cosmos/tools/tlm_viewer/widgets/verticalbox_widget.rb +37 -37
- data/lib/cosmos/tools/tlm_viewer/widgets/widget.rb +257 -257
- data/lib/cosmos/top_level.rb +647 -596
- data/lib/cosmos/utilities.rb +11 -10
- data/lib/cosmos/utilities/crc.rb +166 -166
- data/lib/cosmos/utilities/csv.rb +83 -83
- data/lib/cosmos/utilities/logger.rb +137 -137
- data/lib/cosmos/utilities/low_fragmentation_array.rb +11 -11
- data/lib/cosmos/utilities/message_log.rb +74 -74
- data/lib/cosmos/utilities/quaternion.rb +258 -258
- data/lib/cosmos/utilities/ruby_lex_utils.rb +313 -313
- data/lib/cosmos/utilities/simulated_target.rb +99 -99
- data/lib/cosmos/utilities/sleeper.rb +44 -0
- data/lib/cosmos/version.rb +12 -12
- data/lib/cosmos/win32/excel.rb +66 -66
- data/lib/cosmos/win32/win32.rb +387 -387
- data/lib/cosmos/win32/win32_main.rb +311 -311
- data/roodi.yml +24 -24
- data/run_gui_tests.bat +32 -32
- data/spec/ccsds/ccsds_packet_spec.rb +67 -67
- data/spec/ccsds/ccsds_parser_spec.rb +148 -148
- data/spec/config/config_parser_spec.rb +322 -322
- data/spec/conversions/conversion_spec.rb +31 -31
- data/spec/conversions/generic_conversion_spec.rb +45 -45
- data/spec/conversions/new_packet_log_conversion_spec.rb +39 -39
- data/spec/conversions/polynomial_conversion_spec.rb +40 -40
- data/spec/conversions/processor_conversion_spec.rb +45 -45
- data/spec/conversions/received_count_conversion_spec.rb +43 -43
- data/spec/conversions/received_time_formatted_conversion_spec.rb +49 -49
- data/spec/conversions/received_time_seconds_conversion_spec.rb +50 -50
- data/spec/conversions/segmented_polynomial_conversion_spec.rb +51 -51
- data/spec/conversions/unix_time_formatted_conversion_spec.rb +74 -74
- data/spec/conversions/unix_time_seconds_conversion_spec.rb +76 -76
- data/spec/core_ext/array_spec.rb +186 -186
- data/spec/core_ext/class_spec.rb +36 -36
- data/spec/core_ext/cosmos_io_spec.rb +77 -77
- data/spec/core_ext/exception_spec.rb +91 -91
- data/spec/core_ext/file_spec.rb +72 -72
- data/spec/core_ext/hash_spec.rb +24 -24
- data/spec/core_ext/io_spec.rb +46 -46
- data/spec/core_ext/kernel_spec.rb +54 -54
- data/spec/core_ext/math_spec.rb +116 -116
- data/spec/core_ext/matrix_spec.rb +66 -66
- data/spec/core_ext/objectspace_spec.rb +29 -29
- data/spec/core_ext/range_spec.rb +21 -21
- data/spec/core_ext/socket_spec.rb +32 -32
- data/spec/core_ext/string_spec.rb +223 -223
- data/spec/core_ext/stringio_spec.rb +21 -21
- data/spec/core_ext/time_spec.rb +151 -151
- data/spec/gui/line_graph/line_clip_spec.rb +322 -322
- data/spec/install/config/system/system.txt +33 -33
- data/spec/install/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
- data/spec/install/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
- data/spec/install/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
- data/spec/install/config/targets/COSMOS/screens/limits_change.txt +20 -20
- data/spec/install/config/targets/COSMOS/screens/version.txt +19 -19
- data/spec/install/config/targets/COSMOS/target.txt +5 -5
- data/spec/install/config/targets/INST/cmd_tlm/inst_cmd_linc.txt +30 -30
- data/spec/install/config/targets/INST/cmd_tlm/inst_cmds.txt +111 -111
- data/spec/install/config/targets/INST/cmd_tlm/inst_tlm.txt +236 -236
- data/spec/install/config/targets/INST/cmd_tlm/inst_tlm_linc.txt +25 -25
- data/spec/install/config/targets/INST/cmd_tlm_server.txt +5 -5
- data/spec/install/config/targets/INST/lib/sim_inst.rb +305 -294
- data/spec/install/config/targets/INST/target.txt +10 -10
- data/spec/install/config/targets/META/cmd_tlm/meta_cmd.txt +4 -4
- data/spec/install/config/targets/META/cmd_tlm/meta_tlm.txt +4 -4
- data/spec/install/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -7
- data/spec/interfaces/cmd_tlm_server_interface_spec.rb +150 -150
- data/spec/interfaces/interface_spec.rb +130 -131
- data/spec/interfaces/linc_interface_spec.rb +199 -199
- data/spec/interfaces/serial_interface_spec.rb +56 -56
- data/spec/interfaces/simulated_target_interface_spec.rb +128 -128
- data/spec/interfaces/stream_interface_spec.rb +157 -157
- data/spec/interfaces/tcpip_client_interface_spec.rb +54 -54
- data/spec/interfaces/tcpip_server_interface_spec.rb +151 -151
- data/spec/interfaces/udp_interface_spec.rb +175 -177
- data/spec/io/buffered_file_spec.rb +113 -113
- data/spec/io/io_multiplexer_spec.rb +94 -94
- data/spec/io/json_drb_object_spec.rb +99 -99
- data/spec/io/json_drb_spec.rb +311 -311
- data/spec/io/json_rpc_spec.rb +264 -264
- data/spec/io/raw_logger_pair_spec.rb +76 -76
- data/spec/io/raw_logger_spec.rb +133 -133
- data/spec/io/serial_driver_spec.rb +61 -61
- data/spec/io/stderr_spec.rb +32 -32
- data/spec/io/stdout_spec.rb +32 -32
- data/spec/io/tcpip_server_spec.rb +338 -338
- data/spec/io/udp_sockets_spec.rb +94 -94
- data/spec/io/win32_serial_driver_spec.rb +88 -88
- data/spec/packet_logs/meta_packet_log_writer_spec.rb +170 -170
- data/spec/packet_logs/packet_log_reader_spec.rb +408 -408
- data/spec/packet_logs/packet_log_writer_pair_spec.rb +30 -30
- data/spec/packet_logs/packet_log_writer_spec.rb +223 -223
- data/spec/packets/binary_accessor_spec.rb +2073 -2073
- data/spec/packets/commands_spec.rb +369 -369
- data/spec/packets/limits_response_spec.rb +25 -25
- data/spec/packets/limits_spec.rb +326 -326
- data/spec/packets/packet_config_spec.rb +1620 -1620
- data/spec/packets/packet_item_limits_spec.rb +161 -161
- data/spec/packets/packet_item_spec.rb +386 -386
- data/spec/packets/packet_spec.rb +1057 -949
- data/spec/packets/structure_item_spec.rb +195 -195
- data/spec/packets/structure_spec.rb +419 -419
- data/spec/packets/telemetry_spec.rb +535 -535
- data/spec/processors/new_packet_log_processor_spec.rb +39 -39
- data/spec/processors/processor_spec.rb +55 -55
- data/spec/processors/statistics_processor_spec.rb +60 -60
- data/spec/processors/watermark_processor_spec.rb +51 -51
- data/spec/script/script_spec.rb +654 -654
- data/spec/spec_helper.rb +154 -148
- data/spec/streams/burst_stream_protocol_spec.rb +32 -32
- data/spec/streams/fixed_stream_protocol_spec.rb +110 -110
- data/spec/streams/length_stream_protocol_spec.rb +297 -297
- data/spec/streams/preidentified_stream_protocol_spec.rb +118 -118
- data/spec/streams/serial_stream_spec.rb +105 -105
- data/spec/streams/stream_protocol_spec.rb +332 -332
- data/spec/streams/stream_spec.rb +29 -29
- data/spec/streams/tcpip_client_stream_spec.rb +54 -54
- data/spec/streams/tcpip_socket_stream_spec.rb +146 -146
- data/spec/streams/template_stream_protocol_spec.rb +151 -151
- data/spec/streams/terminated_stream_protocol_spec.rb +123 -123
- data/spec/system/system_spec.rb +645 -645
- data/spec/system/target_spec.rb +248 -248
- data/spec/tools/cmd_tlm_server/api_spec.rb +1087 -1113
- data/spec/tools/cmd_tlm_server/background_task_spec.rb +32 -32
- data/spec/tools/cmd_tlm_server/background_tasks_spec.rb +81 -81
- data/spec/tools/cmd_tlm_server/cmd_tlm_server_config_spec.rb +411 -411
- data/spec/tools/cmd_tlm_server/cmd_tlm_server_spec.rb +415 -415
- data/spec/tools/cmd_tlm_server/commanding_spec.rb +123 -123
- data/spec/tools/cmd_tlm_server/connections_spec.rb +147 -147
- data/spec/tools/cmd_tlm_server/interface_thread_spec.rb +306 -306
- data/spec/tools/cmd_tlm_server/interfaces_spec.rb +252 -238
- data/spec/tools/cmd_tlm_server/packet_logging_spec.rb +143 -143
- data/spec/tools/cmd_tlm_server/router_thread_spec.rb +98 -101
- data/spec/tools/cmd_tlm_server/routers_spec.rb +223 -208
- data/spec/top_level/top_level_spec.rb +334 -321
- data/spec/utilities/crc_spec.rb +45 -45
- data/spec/utilities/csv_spec.rb +97 -97
- data/spec/utilities/logger_spec.rb +102 -102
- data/spec/utilities/message_log_spec.rb +89 -89
- data/spec/utilities/quaternion_spec.rb +107 -107
- data/spec/utilities/ruby_lex_utils_spec.rb +86 -86
- data/tasks/manifest.rake +22 -22
- data/tasks/spec.rake +23 -23
- metadata +18 -2
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
require 'mkmf'
|
|
2
|
-
|
|
3
|
-
unless $CFLAGS.gsub!(/ -O[\dsz]?/, ' -O3')
|
|
4
|
-
$CFLAGS << ' -O3'
|
|
5
|
-
end
|
|
6
|
-
if CONFIG['CC'] =~ /gcc/
|
|
7
|
-
$CFLAGS << ' -Wall'
|
|
8
|
-
if $DEBUG && !$CFLAGS.gsub!(/ -O[\dsz]?/, ' -O0 -ggdb')
|
|
9
|
-
$CFLAGS << ' -O0 -ggdb'
|
|
10
|
-
end
|
|
11
|
-
end
|
|
12
|
-
|
|
1
|
+
require 'mkmf'
|
|
2
|
+
|
|
3
|
+
unless $CFLAGS.gsub!(/ -O[\dsz]?/, ' -O3')
|
|
4
|
+
$CFLAGS << ' -O3'
|
|
5
|
+
end
|
|
6
|
+
if CONFIG['CC'] =~ /gcc/
|
|
7
|
+
$CFLAGS << ' -Wall'
|
|
8
|
+
if $DEBUG && !$CFLAGS.gsub!(/ -O[\dsz]?/, ' -O0 -ggdb')
|
|
9
|
+
$CFLAGS << ' -O0 -ggdb'
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
13
|
create_makefile 'cosmos/ext/crc'
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
require 'mkmf'
|
|
2
|
-
|
|
3
|
-
unless $CFLAGS.gsub!(/ -O[\dsz]?/, ' -O3')
|
|
4
|
-
$CFLAGS << ' -O3'
|
|
5
|
-
end
|
|
6
|
-
if CONFIG['CC'] =~ /gcc/
|
|
7
|
-
$CFLAGS << ' -Wall'
|
|
8
|
-
if $DEBUG && !$CFLAGS.gsub!(/ -O[\dsz]?/, ' -O0 -ggdb')
|
|
9
|
-
$CFLAGS << ' -O0 -ggdb'
|
|
10
|
-
end
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
create_makefile 'cosmos/ext/line_graph'
|
|
1
|
+
require 'mkmf'
|
|
2
|
+
|
|
3
|
+
unless $CFLAGS.gsub!(/ -O[\dsz]?/, ' -O3')
|
|
4
|
+
$CFLAGS << ' -O3'
|
|
5
|
+
end
|
|
6
|
+
if CONFIG['CC'] =~ /gcc/
|
|
7
|
+
$CFLAGS << ' -Wall'
|
|
8
|
+
if $DEBUG && !$CFLAGS.gsub!(/ -O[\dsz]?/, ' -O0 -ggdb')
|
|
9
|
+
$CFLAGS << ' -O0 -ggdb'
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
create_makefile 'cosmos/ext/line_graph'
|
|
@@ -1,501 +1,501 @@
|
|
|
1
|
-
/*
|
|
2
|
-
# Copyright 2014 Ball Aerospace & Technologies Corp.
|
|
3
|
-
# All Rights Reserved.
|
|
4
|
-
#
|
|
5
|
-
# This program is free software; you can modify and/or redistribute it
|
|
6
|
-
# under the terms of the GNU General Public License
|
|
7
|
-
# as published by the Free Software Foundation; version 3 with
|
|
8
|
-
# attribution addendums as found in the LICENSE.txt
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
#include "ruby.h"
|
|
12
|
-
#include "stdio.h"
|
|
13
|
-
|
|
14
|
-
#ifndef RFLOAT_VALUE
|
|
15
|
-
#define RFLOAT_VALUE(v) (RFLOAT(v)->value)
|
|
16
|
-
#endif
|
|
17
|
-
|
|
18
|
-
/* Cosmos module reference */
|
|
19
|
-
VALUE mCosmos = Qnil;
|
|
20
|
-
|
|
21
|
-
/* LineClip class reference */
|
|
22
|
-
VALUE cLineClip = Qnil;
|
|
23
|
-
|
|
24
|
-
/* Reference to LineGraph class */
|
|
25
|
-
VALUE cLineGraph = Qnil;
|
|
26
|
-
|
|
27
|
-
/* Reference to other needed classes/modules */
|
|
28
|
-
static VALUE mQt = Qnil;
|
|
29
|
-
static VALUE cQtBase = Qnil;
|
|
30
|
-
static VALUE cQtWidget = Qnil;
|
|
31
|
-
|
|
32
|
-
/* Method Ids */
|
|
33
|
-
static ID id_method_to_f = 0;
|
|
34
|
-
static ID id_method_left = 0;
|
|
35
|
-
static ID id_method_right = 0;
|
|
36
|
-
static ID id_method_addLineColor = 0;
|
|
37
|
-
static ID id_method_addRectColorFill = 0;
|
|
38
|
-
|
|
39
|
-
/* Instance Variable Ids */
|
|
40
|
-
static ID id_ivar_x_max = 0;
|
|
41
|
-
static ID id_ivar_x_min = 0;
|
|
42
|
-
static ID id_ivar_x_scale = 0;
|
|
43
|
-
static ID id_ivar_graph_left_x = 0;
|
|
44
|
-
static ID id_ivar_left_y_max = 0;
|
|
45
|
-
static ID id_ivar_left_y_min = 0;
|
|
46
|
-
static ID id_ivar_left_y_scale = 0;
|
|
47
|
-
static ID id_ivar_right_y_max = 0;
|
|
48
|
-
static ID id_ivar_right_y_min = 0;
|
|
49
|
-
static ID id_ivar_right_y_scale = 0;
|
|
50
|
-
static ID id_ivar_graph_top_y = 0;
|
|
51
|
-
static ID id_ivar_lines = 0;
|
|
52
|
-
static ID id_ivar_show_lines = 0;
|
|
53
|
-
static ID id_ivar_point_size = 0;
|
|
54
|
-
|
|
55
|
-
/* Constant Ids */
|
|
56
|
-
static ID id_LEFT = 0;
|
|
57
|
-
static ID id_RIGHT = 0;
|
|
58
|
-
|
|
59
|
-
/* Enumeration of line position codes */
|
|
60
|
-
const long LINE_CLIP_OUTCODES_TOP = 0x1;
|
|
61
|
-
const long LINE_CLIP_OUTCODES_BOTTOM = 0x2;
|
|
62
|
-
const long LINE_CLIP_OUTCODES_RIGHT = 0x4;
|
|
63
|
-
const long LINE_CLIP_OUTCODES_LEFT = 0x8;
|
|
64
|
-
|
|
65
|
-
/*
|
|
66
|
-
* This is part of the line clipping algorithm. This function returns
|
|
67
|
-
* a code that indicates where a point is in relation to the viewable area.
|
|
68
|
-
*/
|
|
69
|
-
static int cal_code (double x, double y, double xmin, double ymin, double xmax, double ymax) {
|
|
70
|
-
int code = 0;
|
|
71
|
-
|
|
72
|
-
if (y > ymax) {
|
|
73
|
-
code |= LINE_CLIP_OUTCODES_TOP;
|
|
74
|
-
} else if (y < ymin) {
|
|
75
|
-
code |= LINE_CLIP_OUTCODES_BOTTOM;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
if (x > xmax) {
|
|
79
|
-
code |= LINE_CLIP_OUTCODES_RIGHT;
|
|
80
|
-
} else if (x < xmin) {
|
|
81
|
-
code |= LINE_CLIP_OUTCODES_LEFT;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
return code;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
/*
|
|
88
|
-
* Internal function to perform clipping
|
|
89
|
-
*/
|
|
90
|
-
static VALUE line_clip_internal(double x0, double y0, double x1, double y1, double xmin, double ymin, double xmax, double ymax, double* result_x0, double* result_y0, double* result_x1, double* result_y1, VALUE* result_clipped0, VALUE* result_clipped1) {
|
|
91
|
-
int code0 = 0;
|
|
92
|
-
int code1 = 0;
|
|
93
|
-
int codeout = 0;
|
|
94
|
-
VALUE accept = Qfalse;
|
|
95
|
-
VALUE done = Qfalse;
|
|
96
|
-
VALUE clipped0 = Qfalse;
|
|
97
|
-
VALUE clipped1 = Qfalse;
|
|
98
|
-
double x = 0.0;
|
|
99
|
-
double y = 0.0;
|
|
100
|
-
|
|
101
|
-
code0 = cal_code(x0, y0, xmin, ymin, xmax, ymax);
|
|
102
|
-
code1 = cal_code(x1, y1, xmin, ymin, xmax, ymax);
|
|
103
|
-
|
|
104
|
-
while (1) {
|
|
105
|
-
if ((code0 | code1) == 0) {
|
|
106
|
-
/* Both points are within the viewable area. The entire line can be
|
|
107
|
-
* graphed. */
|
|
108
|
-
accept = Qtrue;
|
|
109
|
-
done = Qtrue;
|
|
110
|
-
} else if ((code0 & code1) != 0) {
|
|
111
|
-
/* The entire line is outside of the viewable area. No part of the
|
|
112
|
-
* line can be graphed. */
|
|
113
|
-
accept = Qfalse;
|
|
114
|
-
clipped0 = Qtrue;
|
|
115
|
-
clipped1 = Qtrue;
|
|
116
|
-
done = Qtrue;
|
|
117
|
-
} else {
|
|
118
|
-
/* Part of the line is inside the viewable area. Figure out which part
|
|
119
|
-
* of the line can be drawn. */
|
|
120
|
-
x = 0.0;
|
|
121
|
-
y = 0.0;
|
|
122
|
-
|
|
123
|
-
if (code0 != 0) {
|
|
124
|
-
codeout = code0;
|
|
125
|
-
clipped0 = Qtrue;
|
|
126
|
-
} else {
|
|
127
|
-
codeout = code1;
|
|
128
|
-
clipped1 = Qtrue;
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
if ((codeout & LINE_CLIP_OUTCODES_TOP) != 0) {
|
|
132
|
-
x = x0 + (x1 - x0) * (ymax - y0) / (y1 - y0);
|
|
133
|
-
y = ymax;
|
|
134
|
-
} else if ((codeout & LINE_CLIP_OUTCODES_BOTTOM) != 0) {
|
|
135
|
-
x = x0 + (x1 - x0) * (ymin - y0) / (y1 - y0);
|
|
136
|
-
y = ymin;
|
|
137
|
-
} else if ((codeout & LINE_CLIP_OUTCODES_RIGHT) != 0) {
|
|
138
|
-
y = y0 + (y1 - y0) * (xmax - x0) / (x1 - x0);
|
|
139
|
-
x = xmax;
|
|
140
|
-
} else {
|
|
141
|
-
y = y0 + (y1 - y0) * (xmin - x0) / (x1 - x0);
|
|
142
|
-
x = xmin;
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
if (codeout == code0) {
|
|
146
|
-
x0 = x;
|
|
147
|
-
y0 = y;
|
|
148
|
-
code0 = cal_code(x0, y0, xmin, ymin, xmax, ymax);
|
|
149
|
-
} else {
|
|
150
|
-
x1 = x;
|
|
151
|
-
y1 = y;
|
|
152
|
-
code1 = cal_code(x1, y1, xmin, ymin, xmax, ymax);
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
if (done == Qtrue) {
|
|
157
|
-
break;
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
*result_x0 = x0;
|
|
162
|
-
*result_y0 = y0;
|
|
163
|
-
*result_x1 = x1;
|
|
164
|
-
*result_y1 = y1;
|
|
165
|
-
*result_clipped0 = clipped0;
|
|
166
|
-
*result_clipped1 = clipped1;
|
|
167
|
-
|
|
168
|
-
return accept;
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
/*
|
|
172
|
-
* This is a line-clipping algorithm. It takes two points and a viewable
|
|
173
|
-
* area. It returns the part of the line that is within the viewable area.
|
|
174
|
-
* If no part of the line is viewable, it returns nil
|
|
175
|
-
*/
|
|
176
|
-
static VALUE line_clip(VALUE self, VALUE x0, VALUE y0, VALUE x1, VALUE y1, VALUE xmin, VALUE ymin, VALUE xmax, VALUE ymax) {
|
|
177
|
-
VALUE result = Qnil;
|
|
178
|
-
VALUE result_clipped0 = Qnil;
|
|
179
|
-
VALUE result_clipped1 = Qnil;
|
|
180
|
-
VALUE return_value = Qnil;
|
|
181
|
-
double double_x0 = 0.0;
|
|
182
|
-
double double_y0 = 0.0;
|
|
183
|
-
double double_x1 = 0.0;
|
|
184
|
-
double double_y1 = 0.0;
|
|
185
|
-
double double_xmin = 0.0;
|
|
186
|
-
double double_ymin = 0.0;
|
|
187
|
-
double double_xmax = 0.0;
|
|
188
|
-
double double_ymax = 0.0;
|
|
189
|
-
double result_x0 = 0.0;
|
|
190
|
-
double result_y0 = 0.0;
|
|
191
|
-
double result_x1 = 0.0;
|
|
192
|
-
double result_y1 = 0.0;
|
|
193
|
-
|
|
194
|
-
double_x0 = RFLOAT_VALUE(rb_funcall(x0, id_method_to_f, 0));
|
|
195
|
-
double_y0 = RFLOAT_VALUE(rb_funcall(y0, id_method_to_f, 0));
|
|
196
|
-
double_x1 = RFLOAT_VALUE(rb_funcall(x1, id_method_to_f, 0));
|
|
197
|
-
double_y1 = RFLOAT_VALUE(rb_funcall(y1, id_method_to_f, 0));
|
|
198
|
-
double_xmin = RFLOAT_VALUE(rb_funcall(xmin, id_method_to_f, 0));
|
|
199
|
-
double_ymin = RFLOAT_VALUE(rb_funcall(ymin, id_method_to_f, 0));
|
|
200
|
-
double_xmax = RFLOAT_VALUE(rb_funcall(xmax, id_method_to_f, 0));
|
|
201
|
-
double_ymax = RFLOAT_VALUE(rb_funcall(ymax, id_method_to_f, 0));
|
|
202
|
-
|
|
203
|
-
result = line_clip_internal(double_x0, double_y0, double_x1, double_y1, double_xmin, double_ymin, double_xmax, double_ymax, &result_x0, &result_y0, &result_x1, &result_y1, &result_clipped0, &result_clipped1);
|
|
204
|
-
|
|
205
|
-
if (result == Qtrue)
|
|
206
|
-
{
|
|
207
|
-
return_value = rb_ary_new2(6);
|
|
208
|
-
rb_ary_push(return_value, rb_float_new(result_x0));
|
|
209
|
-
rb_ary_push(return_value, rb_float_new(result_y0));
|
|
210
|
-
rb_ary_push(return_value, rb_float_new(result_x1));
|
|
211
|
-
rb_ary_push(return_value, rb_float_new(result_y1));
|
|
212
|
-
rb_ary_push(return_value, result_clipped0);
|
|
213
|
-
rb_ary_push(return_value, result_clipped1);
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
return return_value;
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
/*
|
|
220
|
-
* rounds a double to the nearest integer
|
|
221
|
-
*/
|
|
222
|
-
static long round_nearest (double value) {
|
|
223
|
-
return ((long) (value + 0.5));
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
/*
|
|
227
|
-
* scale_value_to_graph_y internal
|
|
228
|
-
*/
|
|
229
|
-
static long scale_value_to_graph_y_internal (double y, double y_max, double y_scale, long graph_top_y) {
|
|
230
|
-
return (round_nearest((y_max - y) * y_scale) + graph_top_y);
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
/*
|
|
234
|
-
* This function converts a y value to a y coordinate on the graph
|
|
235
|
-
*/
|
|
236
|
-
static VALUE scale_value_to_graph_y(int argc, VALUE* argv, VALUE self) {
|
|
237
|
-
VALUE y = Qnil;
|
|
238
|
-
ID id_axis = 0;
|
|
239
|
-
long long_graph_top_y = 0;
|
|
240
|
-
double double_y = 0.0;
|
|
241
|
-
double double_y_max = 0.0;
|
|
242
|
-
double double_y_scale = 0.0;
|
|
243
|
-
|
|
244
|
-
switch (argc) {
|
|
245
|
-
case 1:
|
|
246
|
-
y = argv[0];
|
|
247
|
-
id_axis = id_LEFT;
|
|
248
|
-
break;
|
|
249
|
-
case 2:
|
|
250
|
-
y = argv[0];
|
|
251
|
-
id_axis = SYM2ID(argv[1]);
|
|
252
|
-
break;
|
|
253
|
-
default:
|
|
254
|
-
/* Invalid number of arguments given */
|
|
255
|
-
rb_raise(rb_eArgError, "wrong number of arguments (%d for 1..2)", argc);
|
|
256
|
-
break;
|
|
257
|
-
};
|
|
258
|
-
|
|
259
|
-
long_graph_top_y = FIX2INT(rb_ivar_get(self, id_ivar_graph_top_y));
|
|
260
|
-
double_y = RFLOAT_VALUE(rb_funcall(y, id_method_to_f, 0));
|
|
261
|
-
|
|
262
|
-
if (id_axis == id_LEFT) {
|
|
263
|
-
double_y_max = RFLOAT_VALUE(rb_funcall(rb_ivar_get(self, id_ivar_left_y_max), id_method_to_f, 0));
|
|
264
|
-
double_y_scale = RFLOAT_VALUE(rb_funcall(rb_ivar_get(self, id_ivar_left_y_scale), id_method_to_f, 0));
|
|
265
|
-
} else /* id_axis == id_RIGHT */ {
|
|
266
|
-
double_y_max = RFLOAT_VALUE(rb_funcall(rb_ivar_get(self, id_ivar_right_y_max), id_method_to_f, 0));
|
|
267
|
-
double_y_scale = RFLOAT_VALUE(rb_funcall(rb_ivar_get(self, id_ivar_right_y_scale), id_method_to_f, 0));
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
return INT2FIX(scale_value_to_graph_y_internal(double_y, double_y_max, double_y_scale, long_graph_top_y));
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
/*
|
|
274
|
-
* Internal function converts an x value to an x coordinate on the graph
|
|
275
|
-
*/
|
|
276
|
-
static long scale_value_to_graph_x_internal (double x, double x_min, double x_scale, long graph_left_x) {
|
|
277
|
-
return (round_nearest((x - x_min) * x_scale) + graph_left_x);
|
|
278
|
-
}
|
|
279
|
-
|
|
280
|
-
/*
|
|
281
|
-
* This function converts an x value to an x coordinate on the graph
|
|
282
|
-
*/
|
|
283
|
-
static VALUE scale_value_to_graph_x(VALUE self, VALUE x) {
|
|
284
|
-
long long_graph_left_x = 0;
|
|
285
|
-
double double_x = 0.0;
|
|
286
|
-
double double_x_min = 0.0;
|
|
287
|
-
double double_x_scale = 0.0;
|
|
288
|
-
|
|
289
|
-
long_graph_left_x = FIX2INT(rb_ivar_get(self, id_ivar_graph_left_x));
|
|
290
|
-
double_x = RFLOAT_VALUE(rb_funcall(x, id_method_to_f, 0));
|
|
291
|
-
double_x_min = RFLOAT_VALUE(rb_funcall(rb_ivar_get(self, id_ivar_x_min), id_method_to_f, 0));
|
|
292
|
-
double_x_scale = RFLOAT_VALUE(rb_funcall(rb_ivar_get(self, id_ivar_x_scale), id_method_to_f, 0));
|
|
293
|
-
|
|
294
|
-
return INT2FIX(scale_value_to_graph_x_internal(double_x, double_x_min, double_x_scale, long_graph_left_x));
|
|
295
|
-
}
|
|
296
|
-
|
|
297
|
-
/*
|
|
298
|
-
* Internal version to draw a line
|
|
299
|
-
*/
|
|
300
|
-
static void draw_line_internal(VALUE dc, double x1, double y1, double x2, double y2, double x_min, double y_min, double x_max, double y_max, double x_scale, double y_scale, long graph_left_x, long graph_top_y, ID id_axis, VALUE show_line, VALUE point_size, VALUE color) {
|
|
301
|
-
VALUE result = Qnil;
|
|
302
|
-
VALUE clipped1 = Qnil;
|
|
303
|
-
VALUE clipped2 = Qnil;
|
|
304
|
-
long x1_scaled = 0;
|
|
305
|
-
long y1_scaled = 0;
|
|
306
|
-
long x2_scaled = 0;
|
|
307
|
-
long y2_scaled = 0;
|
|
308
|
-
double clipped_x1 = 0.0;
|
|
309
|
-
double clipped_y1 = 0.0;
|
|
310
|
-
double clipped_x2 = 0.0;
|
|
311
|
-
double clipped_y2 = 0.0;
|
|
312
|
-
|
|
313
|
-
/* Calculate potentially clipped version of line */
|
|
314
|
-
result = line_clip_internal(x1, y1, x2, y2, x_min, y_min, x_max, y_max, &clipped_x1, &clipped_y1, &clipped_x2, &clipped_y2, &clipped1, &clipped2);
|
|
315
|
-
|
|
316
|
-
if (result == Qtrue) /* Line is visible so draw it */ {
|
|
317
|
-
/* Scale to graph coordinates */
|
|
318
|
-
x1_scaled = scale_value_to_graph_x_internal(clipped_x1, x_min, x_scale, graph_left_x);
|
|
319
|
-
y1_scaled = scale_value_to_graph_y_internal(clipped_y1, y_max, y_scale, graph_top_y);
|
|
320
|
-
x2_scaled = scale_value_to_graph_x_internal(clipped_x2, x_min, x_scale, graph_left_x);
|
|
321
|
-
y2_scaled = scale_value_to_graph_y_internal(clipped_y2, y_max, y_scale, graph_top_y);
|
|
322
|
-
|
|
323
|
-
/* Draw the line */
|
|
324
|
-
if (RTEST(show_line)) {
|
|
325
|
-
rb_funcall(dc, id_method_addLineColor, 5, INT2FIX(x1_scaled), INT2FIX(y1_scaled), INT2FIX(x2_scaled), INT2FIX(y2_scaled), color);
|
|
326
|
-
}
|
|
327
|
-
|
|
328
|
-
/* Draw point at line */
|
|
329
|
-
if (FIX2INT(point_size) > 0) {
|
|
330
|
-
/* Only show point if second point wasn't clipped */
|
|
331
|
-
if (!RTEST(clipped2)) {
|
|
332
|
-
rb_funcall(dc, id_method_addRectColorFill, 5, INT2FIX(x2_scaled - 2), INT2FIX(y2_scaled - 2), point_size, point_size, color);
|
|
333
|
-
}
|
|
334
|
-
}
|
|
335
|
-
}
|
|
336
|
-
}
|
|
337
|
-
|
|
338
|
-
/*
|
|
339
|
-
* Draws a line between two points that is clipped to fit the visible graph if necessary
|
|
340
|
-
*/
|
|
341
|
-
static VALUE draw_line(VALUE self, VALUE dc, VALUE x1, VALUE y1, VALUE x2, VALUE y2, VALUE show_line, VALUE point_size, VALUE axis, VALUE color) {
|
|
342
|
-
long long_graph_left_x = 0;
|
|
343
|
-
long long_graph_top_y = 0;
|
|
344
|
-
ID id_axis = 0;
|
|
345
|
-
double double_x1 = 0.0;
|
|
346
|
-
double double_y1 = 0.0;
|
|
347
|
-
double double_x2 = 0.0;
|
|
348
|
-
double double_y2 = 0.0;
|
|
349
|
-
double double_x_min = 0.0;
|
|
350
|
-
double double_y_min = 0.0;
|
|
351
|
-
double double_x_max = 0.0;
|
|
352
|
-
double double_y_max = 0.0;
|
|
353
|
-
double double_x_scale = 0.0;
|
|
354
|
-
double double_y_scale = 0.0;
|
|
355
|
-
|
|
356
|
-
id_axis = SYM2ID(axis);
|
|
357
|
-
double_x_max = RFLOAT_VALUE(rb_funcall(rb_ivar_get(self, id_ivar_x_max), id_method_to_f, 0));
|
|
358
|
-
double_x_min = RFLOAT_VALUE(rb_funcall(rb_ivar_get(self, id_ivar_x_min), id_method_to_f, 0));
|
|
359
|
-
double_x1 = RFLOAT_VALUE(rb_funcall(x1, id_method_to_f, 0));
|
|
360
|
-
double_y1 = RFLOAT_VALUE(rb_funcall(y1, id_method_to_f, 0));
|
|
361
|
-
double_x2 = RFLOAT_VALUE(rb_funcall(x2, id_method_to_f, 0));
|
|
362
|
-
double_y2 = RFLOAT_VALUE(rb_funcall(y2, id_method_to_f, 0));
|
|
363
|
-
double_x_scale = RFLOAT_VALUE(rb_funcall(rb_ivar_get(self, id_ivar_x_scale), id_method_to_f, 0));
|
|
364
|
-
long_graph_left_x = FIX2INT(rb_ivar_get(self, id_ivar_graph_left_x));
|
|
365
|
-
long_graph_top_y = FIX2INT(rb_ivar_get(self, id_ivar_graph_top_y));
|
|
366
|
-
|
|
367
|
-
if (id_axis == id_LEFT) {
|
|
368
|
-
double_y_max = RFLOAT_VALUE(rb_funcall(rb_ivar_get(self, id_ivar_left_y_max), id_method_to_f, 0));
|
|
369
|
-
double_y_min = RFLOAT_VALUE(rb_funcall(rb_ivar_get(self, id_ivar_left_y_min), id_method_to_f, 0));
|
|
370
|
-
double_y_scale = RFLOAT_VALUE(rb_funcall(rb_ivar_get(self, id_ivar_left_y_scale), id_method_to_f, 0));
|
|
371
|
-
} else /* id_axis == id_RIGHT */ {
|
|
372
|
-
double_y_max = RFLOAT_VALUE(rb_funcall(rb_ivar_get(self, id_ivar_right_y_max), id_method_to_f, 0));
|
|
373
|
-
double_y_min = RFLOAT_VALUE(rb_funcall(rb_ivar_get(self, id_ivar_right_y_min), id_method_to_f, 0));
|
|
374
|
-
double_y_scale = RFLOAT_VALUE(rb_funcall(rb_ivar_get(self, id_ivar_right_y_scale), id_method_to_f, 0));
|
|
375
|
-
}
|
|
376
|
-
|
|
377
|
-
draw_line_internal(dc, double_x1, double_y1, double_x2, double_y2, double_x_min, double_y_min, double_x_max, double_y_max, double_x_scale, double_y_scale, long_graph_left_x, long_graph_top_y, id_axis, show_line, point_size, color);
|
|
378
|
-
|
|
379
|
-
return Qnil;
|
|
380
|
-
}
|
|
381
|
-
|
|
382
|
-
/*
|
|
383
|
-
* Draws all lines for the given axis
|
|
384
|
-
*/
|
|
385
|
-
static VALUE draw_lines (VALUE self, VALUE dc, VALUE axis) {
|
|
386
|
-
long long_graph_left_x = 0;
|
|
387
|
-
long long_graph_top_y = 0;
|
|
388
|
-
long num_lines = 0;
|
|
389
|
-
long line_index = 0;
|
|
390
|
-
long line_length = 0;
|
|
391
|
-
long point_index = 0;
|
|
392
|
-
ID id_axis = 0;
|
|
393
|
-
VALUE lines = Qnil;
|
|
394
|
-
VALUE line = Qnil;
|
|
395
|
-
VALUE x_values = Qnil;
|
|
396
|
-
VALUE y_values = Qnil;
|
|
397
|
-
VALUE color = Qnil;
|
|
398
|
-
VALUE show_lines = Qnil;
|
|
399
|
-
VALUE point_size = Qnil;
|
|
400
|
-
double double_x1 = 0.0;
|
|
401
|
-
double double_y1 = 0.0;
|
|
402
|
-
double double_x2 = 0.0;
|
|
403
|
-
double double_y2 = 0.0;
|
|
404
|
-
double double_x_min = 0.0;
|
|
405
|
-
double double_y_min = 0.0;
|
|
406
|
-
double double_x_max = 0.0;
|
|
407
|
-
double double_y_max = 0.0;
|
|
408
|
-
double double_x_scale = 0.0;
|
|
409
|
-
double double_y_scale = 0.0;
|
|
410
|
-
|
|
411
|
-
id_axis = SYM2ID(axis);
|
|
412
|
-
double_x_max = RFLOAT_VALUE(rb_funcall(rb_ivar_get(self, id_ivar_x_max), id_method_to_f, 0));
|
|
413
|
-
double_x_min = RFLOAT_VALUE(rb_funcall(rb_ivar_get(self, id_ivar_x_min), id_method_to_f, 0));
|
|
414
|
-
double_x_scale = RFLOAT_VALUE(rb_funcall(rb_ivar_get(self, id_ivar_x_scale), id_method_to_f, 0));
|
|
415
|
-
long_graph_left_x = FIX2INT(rb_ivar_get(self, id_ivar_graph_left_x));
|
|
416
|
-
long_graph_top_y = FIX2INT(rb_ivar_get(self, id_ivar_graph_top_y));
|
|
417
|
-
|
|
418
|
-
if (id_axis == id_LEFT) {
|
|
419
|
-
lines = rb_funcall(rb_ivar_get(self, id_ivar_lines), id_method_left, 0);
|
|
420
|
-
double_y_max = RFLOAT_VALUE(rb_funcall(rb_ivar_get(self, id_ivar_left_y_max), id_method_to_f, 0));
|
|
421
|
-
double_y_min = RFLOAT_VALUE(rb_funcall(rb_ivar_get(self, id_ivar_left_y_min), id_method_to_f, 0));
|
|
422
|
-
double_y_scale = RFLOAT_VALUE(rb_funcall(rb_ivar_get(self, id_ivar_left_y_scale), id_method_to_f, 0));
|
|
423
|
-
} else {
|
|
424
|
-
lines = rb_funcall(rb_ivar_get(self, id_ivar_lines), id_method_right, 0);
|
|
425
|
-
double_y_max = RFLOAT_VALUE(rb_funcall(rb_ivar_get(self, id_ivar_right_y_max), id_method_to_f, 0));
|
|
426
|
-
double_y_min = RFLOAT_VALUE(rb_funcall(rb_ivar_get(self, id_ivar_right_y_min), id_method_to_f, 0));
|
|
427
|
-
double_y_scale = RFLOAT_VALUE(rb_funcall(rb_ivar_get(self, id_ivar_right_y_scale), id_method_to_f, 0));
|
|
428
|
-
}
|
|
429
|
-
|
|
430
|
-
show_lines = rb_ivar_get(self, id_ivar_show_lines);
|
|
431
|
-
point_size = rb_ivar_get(self, id_ivar_point_size);
|
|
432
|
-
|
|
433
|
-
num_lines = RARRAY_LEN(lines);
|
|
434
|
-
for (line_index = 0; line_index < num_lines; line_index++) {
|
|
435
|
-
line = rb_ary_entry(lines, line_index);
|
|
436
|
-
x_values = rb_ary_entry(line, 0);
|
|
437
|
-
y_values = rb_ary_entry(line, 1);
|
|
438
|
-
color = rb_ary_entry(line, 6);
|
|
439
|
-
|
|
440
|
-
/* Get the first point of the line */
|
|
441
|
-
double_x1 = RFLOAT_VALUE(rb_ary_entry(x_values, 0));
|
|
442
|
-
double_y1 = RFLOAT_VALUE(rb_ary_entry(y_values, 0));
|
|
443
|
-
|
|
444
|
-
/* Loop over each data point of the line */
|
|
445
|
-
line_length = RARRAY_LEN(x_values);
|
|
446
|
-
for (point_index = 0; point_index < line_length; point_index++) {
|
|
447
|
-
double_x2 = RFLOAT_VALUE(rb_ary_entry(x_values, point_index));
|
|
448
|
-
double_y2 = RFLOAT_VALUE(rb_ary_entry(y_values, point_index));
|
|
449
|
-
|
|
450
|
-
draw_line_internal(dc, double_x1, double_y1, double_x2, double_y2, double_x_min, double_y_min, double_x_max, double_y_max, double_x_scale, double_y_scale, long_graph_left_x, long_graph_top_y, id_axis, show_lines, point_size, color);
|
|
451
|
-
|
|
452
|
-
double_x1 = double_x2;
|
|
453
|
-
double_y1 = double_y2;
|
|
454
|
-
}
|
|
455
|
-
}
|
|
456
|
-
|
|
457
|
-
return Qnil;
|
|
458
|
-
}
|
|
459
|
-
|
|
460
|
-
/*
|
|
461
|
-
* Initialize methods for C LineGraph
|
|
462
|
-
*/
|
|
463
|
-
void Init_line_graph (void)
|
|
464
|
-
{
|
|
465
|
-
rb_require("cosmos");
|
|
466
|
-
mQt = rb_define_module("Qt");
|
|
467
|
-
cQtBase = rb_define_class_under(mQt, "Base", rb_cObject);
|
|
468
|
-
cQtWidget = rb_define_class_under(mQt, "Widget", cQtBase);
|
|
469
|
-
|
|
470
|
-
id_method_left = rb_intern("left");
|
|
471
|
-
id_method_right = rb_intern("right");
|
|
472
|
-
id_method_to_f = rb_intern("to_f");
|
|
473
|
-
id_method_addLineColor = rb_intern("addLineColor");
|
|
474
|
-
id_method_addRectColorFill = rb_intern("addRectColorFill");
|
|
475
|
-
id_ivar_x_max = rb_intern("@x_max");
|
|
476
|
-
id_ivar_x_min = rb_intern("@x_min");
|
|
477
|
-
id_ivar_x_scale = rb_intern("@x_scale");
|
|
478
|
-
id_ivar_graph_left_x = rb_intern("@graph_left_x");
|
|
479
|
-
id_ivar_graph_top_y = rb_intern("@graph_top_y");
|
|
480
|
-
id_ivar_left_y_max = rb_intern("@left_y_max");
|
|
481
|
-
id_ivar_left_y_min = rb_intern("@left_y_min");
|
|
482
|
-
id_ivar_left_y_scale = rb_intern("@left_y_scale");
|
|
483
|
-
id_ivar_right_y_max = rb_intern("@right_y_max");
|
|
484
|
-
id_ivar_right_y_min = rb_intern("@right_y_min");
|
|
485
|
-
id_ivar_right_y_scale = rb_intern("@right_y_scale");
|
|
486
|
-
id_ivar_lines = rb_intern("@lines");
|
|
487
|
-
id_ivar_show_lines = rb_intern("@show_lines");
|
|
488
|
-
id_ivar_point_size = rb_intern("@point_size");
|
|
489
|
-
id_LEFT = rb_intern("LEFT");
|
|
490
|
-
id_RIGHT = rb_intern("RIGHT");
|
|
491
|
-
|
|
492
|
-
mCosmos = rb_define_module("Cosmos");
|
|
493
|
-
cLineClip = rb_define_class_under(mCosmos, "LineClip", rb_cObject);
|
|
494
|
-
rb_define_singleton_method(cLineClip, "line_clip", line_clip, 8);
|
|
495
|
-
|
|
496
|
-
cLineGraph = rb_define_class_under(mCosmos, "LineGraph", cQtWidget);
|
|
497
|
-
rb_define_method(cLineGraph, "scale_value_to_graph_x", scale_value_to_graph_x, 1);
|
|
498
|
-
rb_define_method(cLineGraph, "scale_value_to_graph_y", scale_value_to_graph_y, -1);
|
|
499
|
-
rb_define_method(cLineGraph, "draw_line", draw_line, 9);
|
|
500
|
-
rb_define_method(cLineGraph, "draw_lines", draw_lines, 2);
|
|
501
|
-
}
|
|
1
|
+
/*
|
|
2
|
+
# Copyright 2014 Ball Aerospace & Technologies Corp.
|
|
3
|
+
# All Rights Reserved.
|
|
4
|
+
#
|
|
5
|
+
# This program is free software; you can modify and/or redistribute it
|
|
6
|
+
# under the terms of the GNU General Public License
|
|
7
|
+
# as published by the Free Software Foundation; version 3 with
|
|
8
|
+
# attribution addendums as found in the LICENSE.txt
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
#include "ruby.h"
|
|
12
|
+
#include "stdio.h"
|
|
13
|
+
|
|
14
|
+
#ifndef RFLOAT_VALUE
|
|
15
|
+
#define RFLOAT_VALUE(v) (RFLOAT(v)->value)
|
|
16
|
+
#endif
|
|
17
|
+
|
|
18
|
+
/* Cosmos module reference */
|
|
19
|
+
VALUE mCosmos = Qnil;
|
|
20
|
+
|
|
21
|
+
/* LineClip class reference */
|
|
22
|
+
VALUE cLineClip = Qnil;
|
|
23
|
+
|
|
24
|
+
/* Reference to LineGraph class */
|
|
25
|
+
VALUE cLineGraph = Qnil;
|
|
26
|
+
|
|
27
|
+
/* Reference to other needed classes/modules */
|
|
28
|
+
static VALUE mQt = Qnil;
|
|
29
|
+
static VALUE cQtBase = Qnil;
|
|
30
|
+
static VALUE cQtWidget = Qnil;
|
|
31
|
+
|
|
32
|
+
/* Method Ids */
|
|
33
|
+
static ID id_method_to_f = 0;
|
|
34
|
+
static ID id_method_left = 0;
|
|
35
|
+
static ID id_method_right = 0;
|
|
36
|
+
static ID id_method_addLineColor = 0;
|
|
37
|
+
static ID id_method_addRectColorFill = 0;
|
|
38
|
+
|
|
39
|
+
/* Instance Variable Ids */
|
|
40
|
+
static ID id_ivar_x_max = 0;
|
|
41
|
+
static ID id_ivar_x_min = 0;
|
|
42
|
+
static ID id_ivar_x_scale = 0;
|
|
43
|
+
static ID id_ivar_graph_left_x = 0;
|
|
44
|
+
static ID id_ivar_left_y_max = 0;
|
|
45
|
+
static ID id_ivar_left_y_min = 0;
|
|
46
|
+
static ID id_ivar_left_y_scale = 0;
|
|
47
|
+
static ID id_ivar_right_y_max = 0;
|
|
48
|
+
static ID id_ivar_right_y_min = 0;
|
|
49
|
+
static ID id_ivar_right_y_scale = 0;
|
|
50
|
+
static ID id_ivar_graph_top_y = 0;
|
|
51
|
+
static ID id_ivar_lines = 0;
|
|
52
|
+
static ID id_ivar_show_lines = 0;
|
|
53
|
+
static ID id_ivar_point_size = 0;
|
|
54
|
+
|
|
55
|
+
/* Constant Ids */
|
|
56
|
+
static ID id_LEFT = 0;
|
|
57
|
+
static ID id_RIGHT = 0;
|
|
58
|
+
|
|
59
|
+
/* Enumeration of line position codes */
|
|
60
|
+
const long LINE_CLIP_OUTCODES_TOP = 0x1;
|
|
61
|
+
const long LINE_CLIP_OUTCODES_BOTTOM = 0x2;
|
|
62
|
+
const long LINE_CLIP_OUTCODES_RIGHT = 0x4;
|
|
63
|
+
const long LINE_CLIP_OUTCODES_LEFT = 0x8;
|
|
64
|
+
|
|
65
|
+
/*
|
|
66
|
+
* This is part of the line clipping algorithm. This function returns
|
|
67
|
+
* a code that indicates where a point is in relation to the viewable area.
|
|
68
|
+
*/
|
|
69
|
+
static int cal_code (double x, double y, double xmin, double ymin, double xmax, double ymax) {
|
|
70
|
+
int code = 0;
|
|
71
|
+
|
|
72
|
+
if (y > ymax) {
|
|
73
|
+
code |= LINE_CLIP_OUTCODES_TOP;
|
|
74
|
+
} else if (y < ymin) {
|
|
75
|
+
code |= LINE_CLIP_OUTCODES_BOTTOM;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
if (x > xmax) {
|
|
79
|
+
code |= LINE_CLIP_OUTCODES_RIGHT;
|
|
80
|
+
} else if (x < xmin) {
|
|
81
|
+
code |= LINE_CLIP_OUTCODES_LEFT;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
return code;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/*
|
|
88
|
+
* Internal function to perform clipping
|
|
89
|
+
*/
|
|
90
|
+
static VALUE line_clip_internal(double x0, double y0, double x1, double y1, double xmin, double ymin, double xmax, double ymax, double* result_x0, double* result_y0, double* result_x1, double* result_y1, VALUE* result_clipped0, VALUE* result_clipped1) {
|
|
91
|
+
int code0 = 0;
|
|
92
|
+
int code1 = 0;
|
|
93
|
+
int codeout = 0;
|
|
94
|
+
VALUE accept = Qfalse;
|
|
95
|
+
VALUE done = Qfalse;
|
|
96
|
+
VALUE clipped0 = Qfalse;
|
|
97
|
+
VALUE clipped1 = Qfalse;
|
|
98
|
+
double x = 0.0;
|
|
99
|
+
double y = 0.0;
|
|
100
|
+
|
|
101
|
+
code0 = cal_code(x0, y0, xmin, ymin, xmax, ymax);
|
|
102
|
+
code1 = cal_code(x1, y1, xmin, ymin, xmax, ymax);
|
|
103
|
+
|
|
104
|
+
while (1) {
|
|
105
|
+
if ((code0 | code1) == 0) {
|
|
106
|
+
/* Both points are within the viewable area. The entire line can be
|
|
107
|
+
* graphed. */
|
|
108
|
+
accept = Qtrue;
|
|
109
|
+
done = Qtrue;
|
|
110
|
+
} else if ((code0 & code1) != 0) {
|
|
111
|
+
/* The entire line is outside of the viewable area. No part of the
|
|
112
|
+
* line can be graphed. */
|
|
113
|
+
accept = Qfalse;
|
|
114
|
+
clipped0 = Qtrue;
|
|
115
|
+
clipped1 = Qtrue;
|
|
116
|
+
done = Qtrue;
|
|
117
|
+
} else {
|
|
118
|
+
/* Part of the line is inside the viewable area. Figure out which part
|
|
119
|
+
* of the line can be drawn. */
|
|
120
|
+
x = 0.0;
|
|
121
|
+
y = 0.0;
|
|
122
|
+
|
|
123
|
+
if (code0 != 0) {
|
|
124
|
+
codeout = code0;
|
|
125
|
+
clipped0 = Qtrue;
|
|
126
|
+
} else {
|
|
127
|
+
codeout = code1;
|
|
128
|
+
clipped1 = Qtrue;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
if ((codeout & LINE_CLIP_OUTCODES_TOP) != 0) {
|
|
132
|
+
x = x0 + (x1 - x0) * (ymax - y0) / (y1 - y0);
|
|
133
|
+
y = ymax;
|
|
134
|
+
} else if ((codeout & LINE_CLIP_OUTCODES_BOTTOM) != 0) {
|
|
135
|
+
x = x0 + (x1 - x0) * (ymin - y0) / (y1 - y0);
|
|
136
|
+
y = ymin;
|
|
137
|
+
} else if ((codeout & LINE_CLIP_OUTCODES_RIGHT) != 0) {
|
|
138
|
+
y = y0 + (y1 - y0) * (xmax - x0) / (x1 - x0);
|
|
139
|
+
x = xmax;
|
|
140
|
+
} else {
|
|
141
|
+
y = y0 + (y1 - y0) * (xmin - x0) / (x1 - x0);
|
|
142
|
+
x = xmin;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
if (codeout == code0) {
|
|
146
|
+
x0 = x;
|
|
147
|
+
y0 = y;
|
|
148
|
+
code0 = cal_code(x0, y0, xmin, ymin, xmax, ymax);
|
|
149
|
+
} else {
|
|
150
|
+
x1 = x;
|
|
151
|
+
y1 = y;
|
|
152
|
+
code1 = cal_code(x1, y1, xmin, ymin, xmax, ymax);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
if (done == Qtrue) {
|
|
157
|
+
break;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
*result_x0 = x0;
|
|
162
|
+
*result_y0 = y0;
|
|
163
|
+
*result_x1 = x1;
|
|
164
|
+
*result_y1 = y1;
|
|
165
|
+
*result_clipped0 = clipped0;
|
|
166
|
+
*result_clipped1 = clipped1;
|
|
167
|
+
|
|
168
|
+
return accept;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/*
|
|
172
|
+
* This is a line-clipping algorithm. It takes two points and a viewable
|
|
173
|
+
* area. It returns the part of the line that is within the viewable area.
|
|
174
|
+
* If no part of the line is viewable, it returns nil
|
|
175
|
+
*/
|
|
176
|
+
static VALUE line_clip(VALUE self, VALUE x0, VALUE y0, VALUE x1, VALUE y1, VALUE xmin, VALUE ymin, VALUE xmax, VALUE ymax) {
|
|
177
|
+
VALUE result = Qnil;
|
|
178
|
+
VALUE result_clipped0 = Qnil;
|
|
179
|
+
VALUE result_clipped1 = Qnil;
|
|
180
|
+
VALUE return_value = Qnil;
|
|
181
|
+
double double_x0 = 0.0;
|
|
182
|
+
double double_y0 = 0.0;
|
|
183
|
+
double double_x1 = 0.0;
|
|
184
|
+
double double_y1 = 0.0;
|
|
185
|
+
double double_xmin = 0.0;
|
|
186
|
+
double double_ymin = 0.0;
|
|
187
|
+
double double_xmax = 0.0;
|
|
188
|
+
double double_ymax = 0.0;
|
|
189
|
+
double result_x0 = 0.0;
|
|
190
|
+
double result_y0 = 0.0;
|
|
191
|
+
double result_x1 = 0.0;
|
|
192
|
+
double result_y1 = 0.0;
|
|
193
|
+
|
|
194
|
+
double_x0 = RFLOAT_VALUE(rb_funcall(x0, id_method_to_f, 0));
|
|
195
|
+
double_y0 = RFLOAT_VALUE(rb_funcall(y0, id_method_to_f, 0));
|
|
196
|
+
double_x1 = RFLOAT_VALUE(rb_funcall(x1, id_method_to_f, 0));
|
|
197
|
+
double_y1 = RFLOAT_VALUE(rb_funcall(y1, id_method_to_f, 0));
|
|
198
|
+
double_xmin = RFLOAT_VALUE(rb_funcall(xmin, id_method_to_f, 0));
|
|
199
|
+
double_ymin = RFLOAT_VALUE(rb_funcall(ymin, id_method_to_f, 0));
|
|
200
|
+
double_xmax = RFLOAT_VALUE(rb_funcall(xmax, id_method_to_f, 0));
|
|
201
|
+
double_ymax = RFLOAT_VALUE(rb_funcall(ymax, id_method_to_f, 0));
|
|
202
|
+
|
|
203
|
+
result = line_clip_internal(double_x0, double_y0, double_x1, double_y1, double_xmin, double_ymin, double_xmax, double_ymax, &result_x0, &result_y0, &result_x1, &result_y1, &result_clipped0, &result_clipped1);
|
|
204
|
+
|
|
205
|
+
if (result == Qtrue)
|
|
206
|
+
{
|
|
207
|
+
return_value = rb_ary_new2(6);
|
|
208
|
+
rb_ary_push(return_value, rb_float_new(result_x0));
|
|
209
|
+
rb_ary_push(return_value, rb_float_new(result_y0));
|
|
210
|
+
rb_ary_push(return_value, rb_float_new(result_x1));
|
|
211
|
+
rb_ary_push(return_value, rb_float_new(result_y1));
|
|
212
|
+
rb_ary_push(return_value, result_clipped0);
|
|
213
|
+
rb_ary_push(return_value, result_clipped1);
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
return return_value;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/*
|
|
220
|
+
* rounds a double to the nearest integer
|
|
221
|
+
*/
|
|
222
|
+
static long round_nearest (double value) {
|
|
223
|
+
return ((long) (value + 0.5));
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
/*
|
|
227
|
+
* scale_value_to_graph_y internal
|
|
228
|
+
*/
|
|
229
|
+
static long scale_value_to_graph_y_internal (double y, double y_max, double y_scale, long graph_top_y) {
|
|
230
|
+
return (round_nearest((y_max - y) * y_scale) + graph_top_y);
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
/*
|
|
234
|
+
* This function converts a y value to a y coordinate on the graph
|
|
235
|
+
*/
|
|
236
|
+
static VALUE scale_value_to_graph_y(int argc, VALUE* argv, VALUE self) {
|
|
237
|
+
VALUE y = Qnil;
|
|
238
|
+
ID id_axis = 0;
|
|
239
|
+
long long_graph_top_y = 0;
|
|
240
|
+
double double_y = 0.0;
|
|
241
|
+
double double_y_max = 0.0;
|
|
242
|
+
double double_y_scale = 0.0;
|
|
243
|
+
|
|
244
|
+
switch (argc) {
|
|
245
|
+
case 1:
|
|
246
|
+
y = argv[0];
|
|
247
|
+
id_axis = id_LEFT;
|
|
248
|
+
break;
|
|
249
|
+
case 2:
|
|
250
|
+
y = argv[0];
|
|
251
|
+
id_axis = SYM2ID(argv[1]);
|
|
252
|
+
break;
|
|
253
|
+
default:
|
|
254
|
+
/* Invalid number of arguments given */
|
|
255
|
+
rb_raise(rb_eArgError, "wrong number of arguments (%d for 1..2)", argc);
|
|
256
|
+
break;
|
|
257
|
+
};
|
|
258
|
+
|
|
259
|
+
long_graph_top_y = FIX2INT(rb_ivar_get(self, id_ivar_graph_top_y));
|
|
260
|
+
double_y = RFLOAT_VALUE(rb_funcall(y, id_method_to_f, 0));
|
|
261
|
+
|
|
262
|
+
if (id_axis == id_LEFT) {
|
|
263
|
+
double_y_max = RFLOAT_VALUE(rb_funcall(rb_ivar_get(self, id_ivar_left_y_max), id_method_to_f, 0));
|
|
264
|
+
double_y_scale = RFLOAT_VALUE(rb_funcall(rb_ivar_get(self, id_ivar_left_y_scale), id_method_to_f, 0));
|
|
265
|
+
} else /* id_axis == id_RIGHT */ {
|
|
266
|
+
double_y_max = RFLOAT_VALUE(rb_funcall(rb_ivar_get(self, id_ivar_right_y_max), id_method_to_f, 0));
|
|
267
|
+
double_y_scale = RFLOAT_VALUE(rb_funcall(rb_ivar_get(self, id_ivar_right_y_scale), id_method_to_f, 0));
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
return INT2FIX(scale_value_to_graph_y_internal(double_y, double_y_max, double_y_scale, long_graph_top_y));
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
/*
|
|
274
|
+
* Internal function converts an x value to an x coordinate on the graph
|
|
275
|
+
*/
|
|
276
|
+
static long scale_value_to_graph_x_internal (double x, double x_min, double x_scale, long graph_left_x) {
|
|
277
|
+
return (round_nearest((x - x_min) * x_scale) + graph_left_x);
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
/*
|
|
281
|
+
* This function converts an x value to an x coordinate on the graph
|
|
282
|
+
*/
|
|
283
|
+
static VALUE scale_value_to_graph_x(VALUE self, VALUE x) {
|
|
284
|
+
long long_graph_left_x = 0;
|
|
285
|
+
double double_x = 0.0;
|
|
286
|
+
double double_x_min = 0.0;
|
|
287
|
+
double double_x_scale = 0.0;
|
|
288
|
+
|
|
289
|
+
long_graph_left_x = FIX2INT(rb_ivar_get(self, id_ivar_graph_left_x));
|
|
290
|
+
double_x = RFLOAT_VALUE(rb_funcall(x, id_method_to_f, 0));
|
|
291
|
+
double_x_min = RFLOAT_VALUE(rb_funcall(rb_ivar_get(self, id_ivar_x_min), id_method_to_f, 0));
|
|
292
|
+
double_x_scale = RFLOAT_VALUE(rb_funcall(rb_ivar_get(self, id_ivar_x_scale), id_method_to_f, 0));
|
|
293
|
+
|
|
294
|
+
return INT2FIX(scale_value_to_graph_x_internal(double_x, double_x_min, double_x_scale, long_graph_left_x));
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
/*
|
|
298
|
+
* Internal version to draw a line
|
|
299
|
+
*/
|
|
300
|
+
static void draw_line_internal(VALUE dc, double x1, double y1, double x2, double y2, double x_min, double y_min, double x_max, double y_max, double x_scale, double y_scale, long graph_left_x, long graph_top_y, ID id_axis, VALUE show_line, VALUE point_size, VALUE color) {
|
|
301
|
+
VALUE result = Qnil;
|
|
302
|
+
VALUE clipped1 = Qnil;
|
|
303
|
+
VALUE clipped2 = Qnil;
|
|
304
|
+
long x1_scaled = 0;
|
|
305
|
+
long y1_scaled = 0;
|
|
306
|
+
long x2_scaled = 0;
|
|
307
|
+
long y2_scaled = 0;
|
|
308
|
+
double clipped_x1 = 0.0;
|
|
309
|
+
double clipped_y1 = 0.0;
|
|
310
|
+
double clipped_x2 = 0.0;
|
|
311
|
+
double clipped_y2 = 0.0;
|
|
312
|
+
|
|
313
|
+
/* Calculate potentially clipped version of line */
|
|
314
|
+
result = line_clip_internal(x1, y1, x2, y2, x_min, y_min, x_max, y_max, &clipped_x1, &clipped_y1, &clipped_x2, &clipped_y2, &clipped1, &clipped2);
|
|
315
|
+
|
|
316
|
+
if (result == Qtrue) /* Line is visible so draw it */ {
|
|
317
|
+
/* Scale to graph coordinates */
|
|
318
|
+
x1_scaled = scale_value_to_graph_x_internal(clipped_x1, x_min, x_scale, graph_left_x);
|
|
319
|
+
y1_scaled = scale_value_to_graph_y_internal(clipped_y1, y_max, y_scale, graph_top_y);
|
|
320
|
+
x2_scaled = scale_value_to_graph_x_internal(clipped_x2, x_min, x_scale, graph_left_x);
|
|
321
|
+
y2_scaled = scale_value_to_graph_y_internal(clipped_y2, y_max, y_scale, graph_top_y);
|
|
322
|
+
|
|
323
|
+
/* Draw the line */
|
|
324
|
+
if (RTEST(show_line)) {
|
|
325
|
+
rb_funcall(dc, id_method_addLineColor, 5, INT2FIX(x1_scaled), INT2FIX(y1_scaled), INT2FIX(x2_scaled), INT2FIX(y2_scaled), color);
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
/* Draw point at line */
|
|
329
|
+
if (FIX2INT(point_size) > 0) {
|
|
330
|
+
/* Only show point if second point wasn't clipped */
|
|
331
|
+
if (!RTEST(clipped2)) {
|
|
332
|
+
rb_funcall(dc, id_method_addRectColorFill, 5, INT2FIX(x2_scaled - 2), INT2FIX(y2_scaled - 2), point_size, point_size, color);
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
/*
|
|
339
|
+
* Draws a line between two points that is clipped to fit the visible graph if necessary
|
|
340
|
+
*/
|
|
341
|
+
static VALUE draw_line(VALUE self, VALUE dc, VALUE x1, VALUE y1, VALUE x2, VALUE y2, VALUE show_line, VALUE point_size, VALUE axis, VALUE color) {
|
|
342
|
+
long long_graph_left_x = 0;
|
|
343
|
+
long long_graph_top_y = 0;
|
|
344
|
+
ID id_axis = 0;
|
|
345
|
+
double double_x1 = 0.0;
|
|
346
|
+
double double_y1 = 0.0;
|
|
347
|
+
double double_x2 = 0.0;
|
|
348
|
+
double double_y2 = 0.0;
|
|
349
|
+
double double_x_min = 0.0;
|
|
350
|
+
double double_y_min = 0.0;
|
|
351
|
+
double double_x_max = 0.0;
|
|
352
|
+
double double_y_max = 0.0;
|
|
353
|
+
double double_x_scale = 0.0;
|
|
354
|
+
double double_y_scale = 0.0;
|
|
355
|
+
|
|
356
|
+
id_axis = SYM2ID(axis);
|
|
357
|
+
double_x_max = RFLOAT_VALUE(rb_funcall(rb_ivar_get(self, id_ivar_x_max), id_method_to_f, 0));
|
|
358
|
+
double_x_min = RFLOAT_VALUE(rb_funcall(rb_ivar_get(self, id_ivar_x_min), id_method_to_f, 0));
|
|
359
|
+
double_x1 = RFLOAT_VALUE(rb_funcall(x1, id_method_to_f, 0));
|
|
360
|
+
double_y1 = RFLOAT_VALUE(rb_funcall(y1, id_method_to_f, 0));
|
|
361
|
+
double_x2 = RFLOAT_VALUE(rb_funcall(x2, id_method_to_f, 0));
|
|
362
|
+
double_y2 = RFLOAT_VALUE(rb_funcall(y2, id_method_to_f, 0));
|
|
363
|
+
double_x_scale = RFLOAT_VALUE(rb_funcall(rb_ivar_get(self, id_ivar_x_scale), id_method_to_f, 0));
|
|
364
|
+
long_graph_left_x = FIX2INT(rb_ivar_get(self, id_ivar_graph_left_x));
|
|
365
|
+
long_graph_top_y = FIX2INT(rb_ivar_get(self, id_ivar_graph_top_y));
|
|
366
|
+
|
|
367
|
+
if (id_axis == id_LEFT) {
|
|
368
|
+
double_y_max = RFLOAT_VALUE(rb_funcall(rb_ivar_get(self, id_ivar_left_y_max), id_method_to_f, 0));
|
|
369
|
+
double_y_min = RFLOAT_VALUE(rb_funcall(rb_ivar_get(self, id_ivar_left_y_min), id_method_to_f, 0));
|
|
370
|
+
double_y_scale = RFLOAT_VALUE(rb_funcall(rb_ivar_get(self, id_ivar_left_y_scale), id_method_to_f, 0));
|
|
371
|
+
} else /* id_axis == id_RIGHT */ {
|
|
372
|
+
double_y_max = RFLOAT_VALUE(rb_funcall(rb_ivar_get(self, id_ivar_right_y_max), id_method_to_f, 0));
|
|
373
|
+
double_y_min = RFLOAT_VALUE(rb_funcall(rb_ivar_get(self, id_ivar_right_y_min), id_method_to_f, 0));
|
|
374
|
+
double_y_scale = RFLOAT_VALUE(rb_funcall(rb_ivar_get(self, id_ivar_right_y_scale), id_method_to_f, 0));
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
draw_line_internal(dc, double_x1, double_y1, double_x2, double_y2, double_x_min, double_y_min, double_x_max, double_y_max, double_x_scale, double_y_scale, long_graph_left_x, long_graph_top_y, id_axis, show_line, point_size, color);
|
|
378
|
+
|
|
379
|
+
return Qnil;
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
/*
|
|
383
|
+
* Draws all lines for the given axis
|
|
384
|
+
*/
|
|
385
|
+
static VALUE draw_lines (VALUE self, VALUE dc, VALUE axis) {
|
|
386
|
+
long long_graph_left_x = 0;
|
|
387
|
+
long long_graph_top_y = 0;
|
|
388
|
+
long num_lines = 0;
|
|
389
|
+
long line_index = 0;
|
|
390
|
+
long line_length = 0;
|
|
391
|
+
long point_index = 0;
|
|
392
|
+
ID id_axis = 0;
|
|
393
|
+
VALUE lines = Qnil;
|
|
394
|
+
VALUE line = Qnil;
|
|
395
|
+
VALUE x_values = Qnil;
|
|
396
|
+
VALUE y_values = Qnil;
|
|
397
|
+
VALUE color = Qnil;
|
|
398
|
+
VALUE show_lines = Qnil;
|
|
399
|
+
VALUE point_size = Qnil;
|
|
400
|
+
double double_x1 = 0.0;
|
|
401
|
+
double double_y1 = 0.0;
|
|
402
|
+
double double_x2 = 0.0;
|
|
403
|
+
double double_y2 = 0.0;
|
|
404
|
+
double double_x_min = 0.0;
|
|
405
|
+
double double_y_min = 0.0;
|
|
406
|
+
double double_x_max = 0.0;
|
|
407
|
+
double double_y_max = 0.0;
|
|
408
|
+
double double_x_scale = 0.0;
|
|
409
|
+
double double_y_scale = 0.0;
|
|
410
|
+
|
|
411
|
+
id_axis = SYM2ID(axis);
|
|
412
|
+
double_x_max = RFLOAT_VALUE(rb_funcall(rb_ivar_get(self, id_ivar_x_max), id_method_to_f, 0));
|
|
413
|
+
double_x_min = RFLOAT_VALUE(rb_funcall(rb_ivar_get(self, id_ivar_x_min), id_method_to_f, 0));
|
|
414
|
+
double_x_scale = RFLOAT_VALUE(rb_funcall(rb_ivar_get(self, id_ivar_x_scale), id_method_to_f, 0));
|
|
415
|
+
long_graph_left_x = FIX2INT(rb_ivar_get(self, id_ivar_graph_left_x));
|
|
416
|
+
long_graph_top_y = FIX2INT(rb_ivar_get(self, id_ivar_graph_top_y));
|
|
417
|
+
|
|
418
|
+
if (id_axis == id_LEFT) {
|
|
419
|
+
lines = rb_funcall(rb_ivar_get(self, id_ivar_lines), id_method_left, 0);
|
|
420
|
+
double_y_max = RFLOAT_VALUE(rb_funcall(rb_ivar_get(self, id_ivar_left_y_max), id_method_to_f, 0));
|
|
421
|
+
double_y_min = RFLOAT_VALUE(rb_funcall(rb_ivar_get(self, id_ivar_left_y_min), id_method_to_f, 0));
|
|
422
|
+
double_y_scale = RFLOAT_VALUE(rb_funcall(rb_ivar_get(self, id_ivar_left_y_scale), id_method_to_f, 0));
|
|
423
|
+
} else {
|
|
424
|
+
lines = rb_funcall(rb_ivar_get(self, id_ivar_lines), id_method_right, 0);
|
|
425
|
+
double_y_max = RFLOAT_VALUE(rb_funcall(rb_ivar_get(self, id_ivar_right_y_max), id_method_to_f, 0));
|
|
426
|
+
double_y_min = RFLOAT_VALUE(rb_funcall(rb_ivar_get(self, id_ivar_right_y_min), id_method_to_f, 0));
|
|
427
|
+
double_y_scale = RFLOAT_VALUE(rb_funcall(rb_ivar_get(self, id_ivar_right_y_scale), id_method_to_f, 0));
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
show_lines = rb_ivar_get(self, id_ivar_show_lines);
|
|
431
|
+
point_size = rb_ivar_get(self, id_ivar_point_size);
|
|
432
|
+
|
|
433
|
+
num_lines = RARRAY_LEN(lines);
|
|
434
|
+
for (line_index = 0; line_index < num_lines; line_index++) {
|
|
435
|
+
line = rb_ary_entry(lines, line_index);
|
|
436
|
+
x_values = rb_ary_entry(line, 0);
|
|
437
|
+
y_values = rb_ary_entry(line, 1);
|
|
438
|
+
color = rb_ary_entry(line, 6);
|
|
439
|
+
|
|
440
|
+
/* Get the first point of the line */
|
|
441
|
+
double_x1 = RFLOAT_VALUE(rb_ary_entry(x_values, 0));
|
|
442
|
+
double_y1 = RFLOAT_VALUE(rb_ary_entry(y_values, 0));
|
|
443
|
+
|
|
444
|
+
/* Loop over each data point of the line */
|
|
445
|
+
line_length = RARRAY_LEN(x_values);
|
|
446
|
+
for (point_index = 0; point_index < line_length; point_index++) {
|
|
447
|
+
double_x2 = RFLOAT_VALUE(rb_ary_entry(x_values, point_index));
|
|
448
|
+
double_y2 = RFLOAT_VALUE(rb_ary_entry(y_values, point_index));
|
|
449
|
+
|
|
450
|
+
draw_line_internal(dc, double_x1, double_y1, double_x2, double_y2, double_x_min, double_y_min, double_x_max, double_y_max, double_x_scale, double_y_scale, long_graph_left_x, long_graph_top_y, id_axis, show_lines, point_size, color);
|
|
451
|
+
|
|
452
|
+
double_x1 = double_x2;
|
|
453
|
+
double_y1 = double_y2;
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
return Qnil;
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
/*
|
|
461
|
+
* Initialize methods for C LineGraph
|
|
462
|
+
*/
|
|
463
|
+
void Init_line_graph (void)
|
|
464
|
+
{
|
|
465
|
+
rb_require("cosmos");
|
|
466
|
+
mQt = rb_define_module("Qt");
|
|
467
|
+
cQtBase = rb_define_class_under(mQt, "Base", rb_cObject);
|
|
468
|
+
cQtWidget = rb_define_class_under(mQt, "Widget", cQtBase);
|
|
469
|
+
|
|
470
|
+
id_method_left = rb_intern("left");
|
|
471
|
+
id_method_right = rb_intern("right");
|
|
472
|
+
id_method_to_f = rb_intern("to_f");
|
|
473
|
+
id_method_addLineColor = rb_intern("addLineColor");
|
|
474
|
+
id_method_addRectColorFill = rb_intern("addRectColorFill");
|
|
475
|
+
id_ivar_x_max = rb_intern("@x_max");
|
|
476
|
+
id_ivar_x_min = rb_intern("@x_min");
|
|
477
|
+
id_ivar_x_scale = rb_intern("@x_scale");
|
|
478
|
+
id_ivar_graph_left_x = rb_intern("@graph_left_x");
|
|
479
|
+
id_ivar_graph_top_y = rb_intern("@graph_top_y");
|
|
480
|
+
id_ivar_left_y_max = rb_intern("@left_y_max");
|
|
481
|
+
id_ivar_left_y_min = rb_intern("@left_y_min");
|
|
482
|
+
id_ivar_left_y_scale = rb_intern("@left_y_scale");
|
|
483
|
+
id_ivar_right_y_max = rb_intern("@right_y_max");
|
|
484
|
+
id_ivar_right_y_min = rb_intern("@right_y_min");
|
|
485
|
+
id_ivar_right_y_scale = rb_intern("@right_y_scale");
|
|
486
|
+
id_ivar_lines = rb_intern("@lines");
|
|
487
|
+
id_ivar_show_lines = rb_intern("@show_lines");
|
|
488
|
+
id_ivar_point_size = rb_intern("@point_size");
|
|
489
|
+
id_LEFT = rb_intern("LEFT");
|
|
490
|
+
id_RIGHT = rb_intern("RIGHT");
|
|
491
|
+
|
|
492
|
+
mCosmos = rb_define_module("Cosmos");
|
|
493
|
+
cLineClip = rb_define_class_under(mCosmos, "LineClip", rb_cObject);
|
|
494
|
+
rb_define_singleton_method(cLineClip, "line_clip", line_clip, 8);
|
|
495
|
+
|
|
496
|
+
cLineGraph = rb_define_class_under(mCosmos, "LineGraph", cQtWidget);
|
|
497
|
+
rb_define_method(cLineGraph, "scale_value_to_graph_x", scale_value_to_graph_x, 1);
|
|
498
|
+
rb_define_method(cLineGraph, "scale_value_to_graph_y", scale_value_to_graph_y, -1);
|
|
499
|
+
rb_define_method(cLineGraph, "draw_line", draw_line, 9);
|
|
500
|
+
rb_define_method(cLineGraph, "draw_lines", draw_lines, 2);
|
|
501
|
+
}
|