mirror of
https://github.com/OpenSpace/OpenSpace.git
synced 2026-04-24 13:08:49 -05:00
Merge branch 'master' into feature/DU
# Conflicts: # data/scene/grids/grids.mod # ext/sgct
This commit is contained in:
@@ -121,3 +121,4 @@ data/spice/sat375.bsp
|
||||
data/spice/new_horizons/
|
||||
data/scene/mars/map_datasets/mars_COL_v006_mars2000_rgb.tif
|
||||
data/scene/mars/map_datasets/mars_COL_v006_mars2000_rgb.vrt
|
||||
data/spice/Juno/
|
||||
|
||||
+2
-2
@@ -28,9 +28,9 @@ project(OpenSpace)
|
||||
message(STATUS "Generating OpenSpace project")
|
||||
|
||||
set(OPENSPACE_VERSION_MAJOR 0)
|
||||
set(OPENSPACE_VERSION_MINOR 9)
|
||||
set(OPENSPACE_VERSION_MINOR 10)
|
||||
set(OPENSPACE_VERSION_PATCH 0)
|
||||
set(OPENSPACE_VERSION_STRING "prerelease-14 (Astronomy Live)")
|
||||
set(OPENSPACE_VERSION_STRING "prerelease-15 (ASTC)")
|
||||
|
||||
set(OPENSPACE_BASE_DIR "${PROJECT_SOURCE_DIR}")
|
||||
set(OPENSPACE_APPS_DIR "${OPENSPACE_BASE_DIR}/apps")
|
||||
|
||||
@@ -8,4 +8,4 @@ The project stems from the same academic collaboration between Sweden’s [Link
|
||||
|
||||
This repository contains the source code and example scenes for OpenSpace, but does not contain any data. To build and install the client, we refer to the [Wiki](https://github.com/OpenSpace/OpenSpace/wiki) pages here on GitHub, specifically [building](https://github.com/OpenSpace/OpenSpace/wiki/General-Getting-Started-Guide%3A-Compiling-OpenSpace) for [Windows](https://github.com/OpenSpace/OpenSpace/wiki/Guides-Compile-OpenSpace-on-Windows), [Linux](https://github.com/OpenSpace/OpenSpace/wiki/Guides-Compile-OpenSpace-on-Linux), and [MacOS](https://github.com/OpenSpace/OpenSpace/wiki/Guides-Compile-OpenSpace-on-OSX). Required preexisting dependencies are: [Boost](http://www.boost.org/) and [Qt](http://www.qt.io/download). Feel free to create issues for missing features, bug reports, or compile problems or contact us via [email](mailto:alexander.bock@me.com?subject=OpenSpace:).
|
||||
|
||||
Regarding any issues, you are very welcome on our [Slack support channel](https://openspacesupport.slack.com) to which you can freely [sign-up](https://join.slack.com/openspacesupport/shared_invite/MjA4ODY1MDQzNTUzLTE0OTk0MzUyODEtOGZkYTMwNmI5ZA).
|
||||
Regarding any issues, you are very welcome on our [Slack support channel](https://openspacesupport.slack.com) to which you can freely [sign-up](https://join.slack.com/t/openspacesupport/shared_invite/enQtMjUxNzUyMTQ1ODQxLTI4YjNmMTY3ZDI1N2Q1NWM1ZjQ1NTQyNzAxM2YyMGQ5Y2NmYWJiNjI1NjU4YTkyNTc5ZDE5NzdhNGM2YmUzYTk).
|
||||
|
||||
@@ -555,7 +555,8 @@ int main_main(int argc, char** argv) {
|
||||
{ { 4, 2 }, sgct::Engine::RunMode::OpenGL_4_2_Core_Profile },
|
||||
{ { 4, 3 }, sgct::Engine::RunMode::OpenGL_4_3_Core_Profile },
|
||||
{ { 4, 4 }, sgct::Engine::RunMode::OpenGL_4_4_Core_Profile },
|
||||
{ { 4, 5 }, sgct::Engine::RunMode::OpenGL_4_5_Core_Profile }
|
||||
{ { 4, 5 }, sgct::Engine::RunMode::OpenGL_4_5_Core_Profile },
|
||||
{ { 4, 6 }, sgct::Engine::RunMode::OpenGL_4_6_Core_Profile }
|
||||
};
|
||||
ghoul_assert(
|
||||
versionMapping.find(glVersion) != versionMapping.end(),
|
||||
|
||||
@@ -0,0 +1,123 @@
|
||||
Bitstream Vera Fonts Copyright
|
||||
|
||||
The fonts have a generous copyright, allowing derivative works (as
|
||||
long as "Bitstream" or "Vera" are not in the names), and full
|
||||
redistribution (so long as they are not *sold* by themselves). They
|
||||
can be be bundled, redistributed and sold with any software.
|
||||
|
||||
The fonts are distributed under the following copyright:
|
||||
|
||||
Copyright
|
||||
=========
|
||||
|
||||
Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream
|
||||
Vera is a trademark of Bitstream, Inc.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of the fonts accompanying this license ("Fonts") and associated
|
||||
documentation files (the "Font Software"), to reproduce and distribute
|
||||
the Font Software, including without limitation the rights to use,
|
||||
copy, merge, publish, distribute, and/or sell copies of the Font
|
||||
Software, and to permit persons to whom the Font Software is furnished
|
||||
to do so, subject to the following conditions:
|
||||
|
||||
The above copyright and trademark notices and this permission notice
|
||||
shall be included in all copies of one or more of the Font Software
|
||||
typefaces.
|
||||
|
||||
The Font Software may be modified, altered, or added to, and in
|
||||
particular the designs of glyphs or characters in the Fonts may be
|
||||
modified and additional glyphs or characters may be added to the
|
||||
Fonts, only if the fonts are renamed to names not containing either
|
||||
the words "Bitstream" or the word "Vera".
|
||||
|
||||
This License becomes null and void to the extent applicable to Fonts
|
||||
or Font Software that has been modified and is distributed under the
|
||||
"Bitstream Vera" names.
|
||||
|
||||
The Font Software may be sold as part of a larger software package but
|
||||
no copy of one or more of the Font Software typefaces may be sold by
|
||||
itself.
|
||||
|
||||
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL
|
||||
BITSTREAM OR THE GNOME FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL,
|
||||
OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||
OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT
|
||||
SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.
|
||||
|
||||
Except as contained in this notice, the names of Gnome, the Gnome
|
||||
Foundation, and Bitstream Inc., shall not be used in advertising or
|
||||
otherwise to promote the sale, use or other dealings in this Font
|
||||
Software without prior written authorization from the Gnome Foundation
|
||||
or Bitstream Inc., respectively. For further information, contact:
|
||||
fonts at gnome dot org.
|
||||
|
||||
Copyright FAQ
|
||||
=============
|
||||
|
||||
1. I don't understand the resale restriction... What gives?
|
||||
|
||||
Bitstream is giving away these fonts, but wishes to ensure its
|
||||
competitors can't just drop the fonts as is into a font sale system
|
||||
and sell them as is. It seems fair that if Bitstream can't make money
|
||||
from the Bitstream Vera fonts, their competitors should not be able to
|
||||
do so either. You can sell the fonts as part of any software package,
|
||||
however.
|
||||
|
||||
2. I want to package these fonts separately for distribution and
|
||||
sale as part of a larger software package or system. Can I do so?
|
||||
|
||||
Yes. A RPM or Debian package is a "larger software package" to begin
|
||||
with, and you aren't selling them independently by themselves.
|
||||
See 1. above.
|
||||
|
||||
3. Are derivative works allowed?
|
||||
Yes!
|
||||
|
||||
4. Can I change or add to the font(s)?
|
||||
Yes, but you must change the name(s) of the font(s).
|
||||
|
||||
5. Under what terms are derivative works allowed?
|
||||
|
||||
You must change the name(s) of the fonts. This is to ensure the
|
||||
quality of the fonts, both to protect Bitstream and Gnome. We want to
|
||||
ensure that if an application has opened a font specifically of these
|
||||
names, it gets what it expects (though of course, using fontconfig,
|
||||
substitutions could still could have occurred during font
|
||||
opening). You must include the Bitstream copyright. Additional
|
||||
copyrights can be added, as per copyright law. Happy Font Hacking!
|
||||
|
||||
6. If I have improvements for Bitstream Vera, is it possible they might get
|
||||
adopted in future versions?
|
||||
|
||||
Yes. The contract between the Gnome Foundation and Bitstream has
|
||||
provisions for working with Bitstream to ensure quality additions to
|
||||
the Bitstream Vera font family. Please contact us if you have such
|
||||
additions. Note, that in general, we will want such additions for the
|
||||
entire family, not just a single font, and that you'll have to keep
|
||||
both Gnome and Jim Lyles, Vera's designer, happy! To make sense to add
|
||||
glyphs to the font, they must be stylistically in keeping with Vera's
|
||||
design. Vera cannot become a "ransom note" font. Jim Lyles will be
|
||||
providing a document describing the design elements used in Vera, as a
|
||||
guide and aid for people interested in contributing to Vera.
|
||||
|
||||
7. I want to sell a software package that uses these fonts: Can I do so?
|
||||
|
||||
Sure. Bundle the fonts with your software and sell your software
|
||||
with the fonts. That is the intent of the copyright.
|
||||
|
||||
8. If applications have built the names "Bitstream Vera" into them,
|
||||
can I override this somehow to use fonts of my choosing?
|
||||
|
||||
This depends on exact details of the software. Most open source
|
||||
systems and software (e.g., Gnome, KDE, etc.) are now converting to
|
||||
use fontconfig (see www.fontconfig.org) to handle font configuration,
|
||||
selection and substitution; it has provisions for overriding font
|
||||
names and subsituting alternatives. An example is provided by the
|
||||
supplied local.conf file, which chooses the family Bitstream Vera for
|
||||
"sans", "serif" and "monospace". Other software (e.g., the XFree86
|
||||
core server) has other mechanisms for font substitution.
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,202 @@
|
||||
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
@@ -20,6 +20,7 @@ return {
|
||||
SourceFrame = "J2000",
|
||||
DestinationFrame = "GALACTIC"
|
||||
}
|
||||
}
|
||||
},
|
||||
GuiPath = "/Milky Way/Stars"
|
||||
}
|
||||
}
|
||||
+35
-11
@@ -1,13 +1,25 @@
|
||||
-- Add folders to this list that contain .info files describing HiRISE patches
|
||||
local mars_folders = {
|
||||
-- Add a folder here whose contents will be automatically added to the Mars globe
|
||||
-- If multiple folders are added, the results will be added sequentially, meaning that
|
||||
-- if areas overlap (for example CTX and HiRISE) and CTX is specified *after* HiRISE,
|
||||
-- CTX will stomp over the HiRISE
|
||||
--
|
||||
-- tl;dr: Specify CTX folders first, then HiRISE
|
||||
local vrt_folders = {
|
||||
Mars = {
|
||||
-- Add folders here whose contents will be automatically added to the Mars globe
|
||||
-- If multiple folders are added, the results will be added sequentially, meaning that
|
||||
-- if areas overlap (for example CTX and HiRISE) and CTX is specified *after* HiRISE,
|
||||
-- CTX will stomp over the HiRISE
|
||||
--
|
||||
-- tl;dr: Specify CTX folders first, then HiRISE
|
||||
-- example: 'C:/OpenSpace/GlobeBrowsingData/Mars/CTX'
|
||||
},
|
||||
Moon = {
|
||||
-- Add folders here whose contents will be automatically added to the Moon globe
|
||||
-- If multiple folders are added, the results will be added sequentially, meaning that
|
||||
-- if areas overlap, images from the lower results will overwrite the images from former
|
||||
-- results
|
||||
-- example: 'C:/OpenSpace/GlobeBrowsingData/Moon'
|
||||
}
|
||||
}
|
||||
|
||||
dofile(openspace.absPath('${SCRIPTS}/scene_helper.lua'))
|
||||
|
||||
function preInitialization()
|
||||
--[[
|
||||
The scripts in this function are executed after the scene is loaded but before the
|
||||
@@ -22,7 +34,6 @@ function preInitialization()
|
||||
openspace.time.setTime(openspace.time.currentWallTime())
|
||||
dofile(openspace.absPath('${SCRIPTS}/bind_common_keys.lua'))
|
||||
|
||||
|
||||
-- Toggle night texture, shading, atmosphere and water
|
||||
openspace.bindKey("s",
|
||||
helper.property.invert('Earth.RenderableGlobe.Layers.NightLayers.Earth at Night 2012.Enabled') ..
|
||||
@@ -132,10 +143,23 @@ function postInitialization()
|
||||
|
||||
openspace.printInfo("Done setting default values")
|
||||
|
||||
-- Add the CTX and HiRISE patches described at the top of this file
|
||||
for _, file in pairs(mars_folders) do
|
||||
openspace.globebrowsing.addBlendingLayersFromDirectory(file, "Mars")
|
||||
-- Add local patches described at the top of this file
|
||||
for obj, list in pairs(vrt_folders) do
|
||||
print(obj)
|
||||
print(list)
|
||||
for _, dir in pairs(list) do
|
||||
print(dir)
|
||||
openspace.globebrowsing.addBlendingLayersFromDirectory(dir, obj)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
-- Defined in scene_helper.lua
|
||||
-- Used to create focus buttons for a subset of scenegraph nodes
|
||||
mark_interesting_nodes({
|
||||
"Earth", "Mars", "Moon"
|
||||
})
|
||||
end
|
||||
|
||||
|
||||
|
||||
@@ -11,7 +11,8 @@ return {
|
||||
Observer = "SUN",
|
||||
Kernels = "${OPENSPACE_DATA}/spice/de430_1850-2150.bsp"
|
||||
}
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Planets/Earth"
|
||||
},
|
||||
{
|
||||
-- The default reference frame for Earth-orbiting satellites
|
||||
@@ -23,7 +24,8 @@ return {
|
||||
SourceFrame = "J2000",
|
||||
DestinationFrame = "GALACTIC"
|
||||
}
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Planets/Earth"
|
||||
},
|
||||
-- EarthTrail module
|
||||
{
|
||||
@@ -44,7 +46,7 @@ return {
|
||||
Resolution = 1000
|
||||
},
|
||||
Tag = { "planetTrail_solarSystem", "planetTrail_terrestrial" },
|
||||
GuiName = "/Solar/EarthTrail"
|
||||
GuiPath = "/Solar System/Planets/Earth"
|
||||
},
|
||||
-- RenderableGlobe module
|
||||
{
|
||||
@@ -57,7 +59,6 @@ return {
|
||||
DestinationFrame = "GALACTIC",
|
||||
}
|
||||
},
|
||||
Tag = { "planet_solarSystem", "planet_terrestrial" },
|
||||
Renderable = {
|
||||
Type = "RenderableGlobe",
|
||||
Radii = earthEllipsoid,
|
||||
@@ -212,6 +213,8 @@ return {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
Tag = { "planet_solarSystem", "planet_terrestrial" },
|
||||
GuiPath = "/Solar System/Planets/Earth"
|
||||
}
|
||||
}
|
||||
|
||||
+31
-20
@@ -11,8 +11,9 @@ return {
|
||||
GridMatrix = { -0.05487554, 0.4941095, -0.8676661 , 0.0,
|
||||
-0.9938214 , -0.1109906, -0.0003515167, 0.0,
|
||||
-0.09647644, 0.8622859, 0.4971472 , 0.0,
|
||||
0.0 , 0.0 , 0.0 , 1.0 },
|
||||
}
|
||||
0.0 , 0.0 , 0.0 , 1.0 }
|
||||
},
|
||||
GuiPath = "/Other/Grids"
|
||||
},
|
||||
-- Ecliptic Grid Labels
|
||||
{
|
||||
@@ -23,7 +24,7 @@ return {
|
||||
Color = {1.0, 1.0, 1.0},
|
||||
Transparency = 0.65,
|
||||
--ScaleFactor = 10.0,
|
||||
LabelFile = "speck/eclip.label",
|
||||
LabelFile = "speck/eclip.label",
|
||||
TextColor = {0.5, 0.5, 0.5, 1.0},
|
||||
TextSize = 15.4,
|
||||
TextMinSize = 5.0,
|
||||
@@ -33,6 +34,7 @@ return {
|
||||
0.0 , 0.0 , 0.0 , 1.0 },
|
||||
Unit = "pc",
|
||||
},
|
||||
GuiPath = "/Other/Grids"
|
||||
},
|
||||
{
|
||||
Name = "Equatorial Grid",
|
||||
@@ -46,7 +48,8 @@ return {
|
||||
-0.8734371 , -0.4448296, -0.1980764, 0.0,
|
||||
-0.483835 , 0.7469823, 0.4559838, 0.0,
|
||||
0.0 , 0.0 , 0.0 , 1.0 },
|
||||
}
|
||||
},
|
||||
GuiPath = "/Other/Grids"
|
||||
},
|
||||
-- Equatorial Grid Labels
|
||||
{
|
||||
@@ -57,7 +60,7 @@ return {
|
||||
Color = {1.0, 1.0, 1.0},
|
||||
Transparency = 0.65,
|
||||
--ScaleFactor = 10.0,
|
||||
LabelFile = "speck/radec.label",
|
||||
LabelFile = "speck/radec.label",
|
||||
TextColor = {0.5, 0.5, 0.5, 1.0},
|
||||
TextSize = 15.3,
|
||||
TextMinSize = 5.0,
|
||||
@@ -67,6 +70,7 @@ return {
|
||||
0.0 , 0.0 , 0.0 , 1.0 },
|
||||
Unit = "pc",
|
||||
},
|
||||
GuiPath = "/Other/Grids"
|
||||
},
|
||||
{
|
||||
Name = "Galactic Grid",
|
||||
@@ -76,7 +80,8 @@ return {
|
||||
LineWidth = 0.75,
|
||||
Radius = 9.46377307652E18;
|
||||
GridColor = { 0.0, 0.6, 0.6, 0.6}
|
||||
}
|
||||
},
|
||||
GuiPath = "/Other/Grids"
|
||||
},
|
||||
-- Galactic Grid Labels
|
||||
{
|
||||
@@ -87,12 +92,13 @@ return {
|
||||
Color = {1.0, 1.0, 1.0},
|
||||
Transparency = 0.65,
|
||||
--ScaleFactor = 10.0,
|
||||
LabelFile = "speck/galac.label",
|
||||
LabelFile = "speck/galac.label",
|
||||
TextColor = {0.5, 0.5, 0.5, 1.0},
|
||||
TextSize = 16.25,
|
||||
TextMinSize = 5.0,
|
||||
TextMinSize = 5.0,
|
||||
Unit = "pc",
|
||||
},
|
||||
GuiPath = "/Other/Grids"
|
||||
},
|
||||
-- Plane Grids
|
||||
{
|
||||
@@ -106,12 +112,13 @@ return {
|
||||
ScaleFactor = 1.0,
|
||||
File = "speck/100kly.speck",
|
||||
MeshColor = {{0.1, 0.5, 0.6}},
|
||||
LabelFile = "speck/100kly.label",
|
||||
LabelFile = "speck/100kly.label",
|
||||
TextColor = {0.0, 0.2, 0.5, 1.0},
|
||||
TextSize = 18.6,
|
||||
TextMinSize = 7.0,
|
||||
TextMinSize = 7.0,
|
||||
Unit = "Mpc",
|
||||
},
|
||||
GuiPath = "/Other/Grids"
|
||||
},
|
||||
{
|
||||
Name = "1Mly Grid",
|
||||
@@ -124,14 +131,15 @@ return {
|
||||
ScaleFactor = 1.0,
|
||||
File = "speck/1Mly.speck",
|
||||
MeshColor = {{0.1, 0.5, 0.6}},
|
||||
LabelFile = "speck/1Mly.label",
|
||||
LabelFile = "speck/1Mly.label",
|
||||
TextColor = {0.0, 0.2, 0.5, 1.0},
|
||||
TextSize = 19.6,
|
||||
TextMinSize = 7.0,
|
||||
TextMinSize = 7.0,
|
||||
Unit = "Mpc",
|
||||
},
|
||||
GuiPath = "/Other/Grids"
|
||||
},
|
||||
{
|
||||
{
|
||||
Name = "10Mly Grid",
|
||||
Parent = "Root",
|
||||
--Parent = "SolarSystem",
|
||||
@@ -142,14 +150,15 @@ return {
|
||||
ScaleFactor = 1.0,
|
||||
File = "speck/10Mly.speck",
|
||||
MeshColor = {{0.1, 0.5, 0.6}},
|
||||
LabelFile = "speck/10Mly.label",
|
||||
LabelFile = "speck/10Mly.label",
|
||||
TextColor = {0.0, 0.2, 0.5, 1.0},
|
||||
TextSize = 20.6,
|
||||
TextMinSize = 7.0,
|
||||
TextMinSize = 7.0,
|
||||
Unit = "Mpc",
|
||||
},
|
||||
GuiPath = "/Other/Grids"
|
||||
},
|
||||
{
|
||||
{
|
||||
Name = "100Mly Grid",
|
||||
Parent = "Root",
|
||||
--Parent = "SolarSystem",
|
||||
@@ -160,12 +169,13 @@ return {
|
||||
ScaleFactor = 1.0,
|
||||
File = "speck/100Mly.speck",
|
||||
MeshColor = {{0.1, 0.5, 0.6}},
|
||||
LabelFile = "speck/100Mly.label",
|
||||
LabelFile = "speck/100Mly.label",
|
||||
TextColor = {0.0, 0.2, 0.5, 1.0},
|
||||
TextSize = 21.6,
|
||||
TextMinSize = 7.0,
|
||||
TextMinSize = 7.0,
|
||||
Unit = "Mpc",
|
||||
},
|
||||
GuiPath = "/Other/Grids"
|
||||
},
|
||||
{
|
||||
Name = "20Gly Grid",
|
||||
@@ -178,11 +188,12 @@ return {
|
||||
ScaleFactor = 1.0,
|
||||
File = "speck/20Gly.speck",
|
||||
MeshColor = {{0.1, 0.5, 0.6}},
|
||||
LabelFile = "speck/20Gly.label",
|
||||
LabelFile = "speck/20Gly.label",
|
||||
TextColor = {0.0, 0.2, 0.5, 1.0},
|
||||
TextSize = 23.6,
|
||||
TextMinSize = 7.0,
|
||||
TextMinSize = 7.0,
|
||||
Unit = "Mpc",
|
||||
},
|
||||
GuiPath = "/Other/Grids"
|
||||
},
|
||||
}
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
dofile(openspace.absPath('${SCRIPTS}/scene_helper.lua'))
|
||||
|
||||
function preInitialization()
|
||||
--[[
|
||||
The scripts in this function are executed after the scene is loaded but before the
|
||||
@@ -8,7 +10,7 @@ function preInitialization()
|
||||
openspace.spice.loadKernel("${SPICE}/naif0012.tls")
|
||||
openspace.spice.loadKernel("${SPICE}/pck00010.tpc")
|
||||
|
||||
openspace.time.setTime("2016-07-05T10:05:00.00")
|
||||
openspace.time.setTime("2016-07-01T10:05:00.00")
|
||||
|
||||
dofile(openspace.absPath('${SCRIPTS}/common.lua'))
|
||||
openspace.clearKeys()
|
||||
@@ -36,6 +38,10 @@ function postInitialization()
|
||||
openspace.setPropertyValue('Jupiter.renderable.PerformShading', false);
|
||||
|
||||
openspace.printInfo("Done setting default values")
|
||||
|
||||
mark_interesting_nodes({
|
||||
"Jupiter", "Juno"
|
||||
})
|
||||
end
|
||||
|
||||
return {
|
||||
@@ -43,7 +49,8 @@ return {
|
||||
CommonFolder = "common",
|
||||
Camera = {
|
||||
Focus = "Juno",
|
||||
Position = {1, 0, 0, 5},
|
||||
Position = {1837386367.601345, -389860693812.834839, 714830404470.398926},
|
||||
Rotation = {-0.336540, 0.711402, -0.099212, 0.608937},
|
||||
},
|
||||
Modules = {
|
||||
"sun",
|
||||
|
||||
@@ -29,7 +29,8 @@ return {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Planets/Jupiter/Moons"
|
||||
},
|
||||
|
||||
-- Trail module
|
||||
@@ -46,6 +47,7 @@ return {
|
||||
Color = { 0.4, 0.3, 0.01 },
|
||||
Period = 17,
|
||||
Resolution = 1000
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Planets/Jupiter/Moons"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,7 +29,8 @@ return {
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Planets/Jupiter/Moons"
|
||||
},
|
||||
|
||||
-- Trail module
|
||||
@@ -46,6 +47,7 @@ return {
|
||||
Color = { 0.5, 0.3, 0.3 },
|
||||
Period = 85 / 24,
|
||||
Resolution = 1000
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Planets/Jupiter/Moons"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,7 +29,8 @@ return {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Planets/Jupiter/Moons"
|
||||
},
|
||||
-- Trail module
|
||||
{
|
||||
@@ -45,6 +46,7 @@ return {
|
||||
Color = { 0.4, 0.3, 0.3 },
|
||||
Period = 172 / 24,
|
||||
Resolution = 1000
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Planets/Jupiter/Moons"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,7 +29,8 @@ return {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Planets/Jupiter/Moons"
|
||||
},
|
||||
-- Trail module
|
||||
{
|
||||
@@ -45,6 +46,7 @@ return {
|
||||
Color = { 0.4, 0.4, 0.2 },
|
||||
Period = 42 / 24,
|
||||
Resolution = 1000
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Planets/Jupiter/Moons"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,7 +10,8 @@ return {
|
||||
Observer = "SUN",
|
||||
Kernels = "${OPENSPACE_DATA}/spice/de430_1850-2150.bsp"
|
||||
}
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Planets/Jupiter"
|
||||
},
|
||||
-- RenderableGlobe module
|
||||
{
|
||||
@@ -38,6 +39,7 @@ return {
|
||||
}
|
||||
},
|
||||
Tag = { "planet_solarSystem", "planet_giants" },
|
||||
GuiPath = "/Solar System/Planets/Jupiter"
|
||||
},
|
||||
-- Trail module
|
||||
{
|
||||
@@ -54,6 +56,7 @@ return {
|
||||
Period = 4330.595,
|
||||
Resolution = 1000
|
||||
},
|
||||
Tag = { "planetTrail_solarSystem", "planetTrail_giants" }
|
||||
Tag = { "planetTrail_solarSystem", "planetTrail_giants" },
|
||||
GuiPath = "/Solar System/Planets/Jupiter"
|
||||
}
|
||||
}
|
||||
@@ -12,7 +12,8 @@ return {
|
||||
Observer = "SUN",
|
||||
Kernels = "${OPENSPACE_DATA}/spice/de430_1850-2150.bsp"
|
||||
}
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Planets/Mars"
|
||||
},
|
||||
-- RenderableGlobe module
|
||||
{
|
||||
@@ -131,6 +132,7 @@ return {
|
||||
}
|
||||
},
|
||||
Tag = { "planet_solarSystem", "planet_terrestrial" },
|
||||
GuiPath = "/Solar System/Planets/Mars"
|
||||
},
|
||||
|
||||
-- Trail module
|
||||
@@ -148,6 +150,7 @@ return {
|
||||
Period = 686.973,
|
||||
Resolution = 1000
|
||||
},
|
||||
Tag = { "planetTrail_solarSystem", "planetTrail_terrestrial" }
|
||||
Tag = { "planetTrail_solarSystem", "planetTrail_terrestrial" },
|
||||
GuiPath = "/Solar System/Planets/Mars"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,7 +10,8 @@ return {
|
||||
Observer = "SUN",
|
||||
Kernels = "${OPENSPACE_DATA}/spice/de430_1850-2150.bsp"
|
||||
}
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Planets/Mercury"
|
||||
},
|
||||
-- RenderableGlobe module
|
||||
{
|
||||
@@ -55,6 +56,7 @@ return {
|
||||
}
|
||||
},
|
||||
Tag = { "planet_solarSystem", "planet_terrestrial" },
|
||||
GuiPath = "/Solar System/Planets/Mercury"
|
||||
},
|
||||
-- Trail module
|
||||
{
|
||||
@@ -71,6 +73,7 @@ return {
|
||||
Period = 87.968,
|
||||
Resolution = 100
|
||||
},
|
||||
Tag = { "planetTrail_solarSystem", "planetTrail_terrestrial" }
|
||||
Tag = { "planetTrail_solarSystem", "planetTrail_terrestrial" },
|
||||
GuiPath = "/Solar System/Planets/Mercury"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@ return {
|
||||
Alpha = 0.2,
|
||||
Texture = "textures/DarkUniverse_mellinger_8k.jpg",
|
||||
Orientation = "Inside/Outside"
|
||||
}
|
||||
},
|
||||
GuiPath = "/Milky Way/Milky Way"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@ return {
|
||||
Segments = 40,
|
||||
Texture = "textures/eso0932a_blend.png",
|
||||
Orientation = "Inside/Outside"
|
||||
}
|
||||
},
|
||||
GuiPath = "/Milky Way/Milky Way"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,7 +31,8 @@ return {
|
||||
Type = "Spice",
|
||||
Frame = "IAU_CERES",
|
||||
Reference = "GALACTIC"
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Dwarf Planets/Ceres"
|
||||
},
|
||||
--[[ Ceres Trail Module
|
||||
{
|
||||
|
||||
@@ -19,6 +19,7 @@ return {
|
||||
StartTime = "2007 SEP 27 08:15:00",
|
||||
EndTime = "2012 SEP 12 23:57:00"
|
||||
},
|
||||
GuiPath = "/Solar System/Missions/Dawn",
|
||||
Ephemeris = {
|
||||
Type = "Spice",
|
||||
Body = "DAWN",
|
||||
@@ -637,6 +638,7 @@ return {
|
||||
Destination = "GALACTIC"
|
||||
},
|
||||
},
|
||||
GuiPath = "/Solar System/Missions/Dawn"
|
||||
},
|
||||
|
||||
-- Dawn Solar Array module 2
|
||||
@@ -660,6 +662,7 @@ return {
|
||||
StartTime = "2007 SEP 27 08:15:00",
|
||||
EndTime = "2012 SEP 12 12:00:00"
|
||||
},
|
||||
GuiPath = "/Solar System/Missions/Dawn"
|
||||
},
|
||||
|
||||
-- Dawn Trail Module
|
||||
@@ -702,6 +705,7 @@ return {
|
||||
EndTime = "2012 SEP 12 12:00:00",
|
||||
SampleInterval = 3600 * 24
|
||||
},
|
||||
GuiPath = "/Solar System/Missions/Dawn"
|
||||
},
|
||||
--
|
||||
-- -- Dawn Trail Module
|
||||
@@ -753,6 +757,7 @@ return {
|
||||
"CERES"
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Missions/Dawn"
|
||||
},
|
||||
|
||||
-- DawnFov 1
|
||||
@@ -779,5 +784,6 @@ return {
|
||||
"CERES"
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Missions/Dawn"
|
||||
},
|
||||
}
|
||||
|
||||
@@ -93,7 +93,8 @@ return {
|
||||
--"${OPENSPACE_DATA}/spice/DAWN_KERNELS/pck/dawn_vesta_v06.tpc",
|
||||
"${OPENSPACE_DATA}/spice/DawnKernels/spk/sb_vesta_071107.bsp",
|
||||
}
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Asteroid Belt/Vesta"
|
||||
},
|
||||
-- Vesta Trail Module
|
||||
{
|
||||
@@ -110,6 +111,7 @@ return {
|
||||
StartTime = "2007 JUL 20 12:00:00",
|
||||
EndTime = "2018 JAN 22 12:00:00",
|
||||
SampleInterval = 3600 * 24
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Asteroid Belt/Vesta"
|
||||
}
|
||||
}
|
||||
|
||||
Binary file not shown.
@@ -0,0 +1,9 @@
|
||||
return {
|
||||
FileRequest = {
|
||||
{ Identifier = "juno_model", Destination = ".", Version = 1 },
|
||||
{ Identifier = "juno_textures", Destination = "textures", Version = 1 }
|
||||
},
|
||||
TorrentFiles = {
|
||||
{ File = "Juno.torrent", Destination = "${SPICE}" },
|
||||
}
|
||||
}
|
||||
@@ -1,138 +1,160 @@
|
||||
local JunoKernels = {
|
||||
"${SPICE}/Juno/JNO_SCLKSCET.00039.tsc",
|
||||
"${SPICE}/Juno/juno_jade_v00.ti",
|
||||
"${SPICE}/Juno/juno_jedi_v00.ti",
|
||||
"${SPICE}/Juno/juno_jiram_v01.ti",
|
||||
"${SPICE}/Juno/juno_junocam_v00.ti",
|
||||
"${SPICE}/Juno/juno_mag_v00.ti",
|
||||
"${SPICE}/Juno/juno_mwr_v01.ti",
|
||||
"${SPICE}/Juno/juno_struct_v01.ti",
|
||||
"${SPICE}/Juno/juno_uvs_v00.ti",
|
||||
"${SPICE}/Juno/juno_v08.tf",
|
||||
"${SPICE}/Juno/juno_waves_v00.ti",
|
||||
"${SPICE}/Juno/juno_mwr_v01.ti",
|
||||
"${SPICE}/Juno/spk_merge_110805_171017_130515.bsp",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_110930_111028_jc003c01_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_111028_111125_jc004b00_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_111125_111223_jc005b00_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_111223_120127_jc006a02_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_120127_120217_jc007a00_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_120217_120316_jc008b00_v02.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_120316_120413_jc009a00_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_120413_120511_jc010a04_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_120511_120608_jc011a01_v02.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_120608_120706_jc012b01_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_120706_120802_jc013a01_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_120802_120824_jc014b01_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_120824_120928_jc015m00_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_120919_120928_jc015o00_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_120928_121026_jc016c03_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_121026_121123_jc017a01_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_121123_121221_jc018b01_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_121221_130118_jc019a01_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_130118_130215_jc020b01_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_130315_130412_jc022b01_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_130412_130510_jc023b03_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_130510_130607_jc024a01_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_130607_130705_jc025a00_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_130705_130802_jc026a01_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_130726_131020_jx024a02_EFB_v03.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_130802_130830_jc027a02_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_130830_130927_jc028a01_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_130926_131025_jc029a00_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_130927_131025_jc029c01_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_131022_131025_jc029f00_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_131025_131122_jc030b04_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_131122_131220_jc031b01_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_131220_140124_jc032a01_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_140124_140214_jc033a01_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_140214_140314_jc034b01_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_140314_140411_jc035a01_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_140411_140509_jc036b01_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_140509_140606_jc037b02_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_140606_140704_jc038a01_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_140704_140801_jc039b01_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_140801_140829_jc040a01_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_140829_140926_jc041a01_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_140926_141024_jc042a01_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_141024_141121_jc043a01_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_141105_141121_jc043m01_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_141107_141121_jc043s01_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_141121_141219_jc044a01_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_141219_150123_jc045a01_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_150123_150213_jc046a01_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_150213_150313_jc047a01_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_150312_150409_jc048a01_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_150410_150508_jc049a01_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_150508_150605_jc050a01_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_150605_150703_jc051a01_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_150703_150731_jc052a01_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_150731_150828_jc053a01_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_150805_150828_jc053m00_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_150807_150828_jc053s00_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_150828_150924_jc054a00_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_150924_151023_jc055a00_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_151023_151120_jc056a00_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_151120_151218_jc057a00_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_151218_160115_jc058a00_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_160115_160212_jc059a00_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_160212_160311_jc060a00_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_160311_160408_jc061a00_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_160408_160506_jc062a00_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_160506_160603_jc063a00_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_160603_160630_jc064a00_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_160708_160729_jm0001rp_v02.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_160729_160826_jm0002rp_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_160827_160920_jm0003a00_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_160924_161019_jm0004a00_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_161014_161115_jm0005a00_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_161022_161115_jm0005b00_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_161115_161213_jx0405rp_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_161210_170115_jm0031a00_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_170115_170201_jm0032a00_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_170201_170309_jm0041a00_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_170309_170326_jm0042rp_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_170326_170427_jm0051rp_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_170427_170518_jm0052rp_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_170518_170615_jm0061a00_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_170615_170710_jm0062a00_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_170710_170805_jm0071a00_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_170805_170831_jm0072a00_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_170831_170927_jm0081a00_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_170927_171023_jm0082a00_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_171023_171030_jm0091a00_v01.bc",
|
||||
"${SPICE}/Juno/ck/juno_sc_prl_171023_171030_jm0091a00_v01.bc"
|
||||
}
|
||||
|
||||
|
||||
local RotationMatrix = {
|
||||
0, 1, 0,
|
||||
0, 0, 1,
|
||||
1, 0, 0
|
||||
}
|
||||
|
||||
return {
|
||||
-- New Horizons Body module
|
||||
{
|
||||
Name = "Juno",
|
||||
-- Parent = "PlutoBarycenter",
|
||||
-- Parent = "JupiterBarycenter",
|
||||
Parent = "JupiterBarycenter",
|
||||
Parent = "JupiterBarycenter",
|
||||
Renderable = {
|
||||
Type = "RenderableModel",
|
||||
Body = "JUNO",
|
||||
Geometry = {
|
||||
Type = "MultiModelGeometry",
|
||||
GeometryFile = "Juno.obj",
|
||||
Magnification = 4,
|
||||
},
|
||||
ColorTexture = "textures/gray.png",
|
||||
ColorTexture = "textures/gray.png",
|
||||
ModelTransform = RotationMatrix
|
||||
},
|
||||
Transform = {
|
||||
Translation = {
|
||||
Type = "SpiceTranslation",
|
||||
Target = "JUNO",
|
||||
Observer = "JUPITER BARYCENTER",
|
||||
Kernels = JunoKernels
|
||||
},
|
||||
Rotation = {
|
||||
Source = "JUNO_SPACECRAFT",
|
||||
Destination = "GALACTIC",
|
||||
ModelTransform = {
|
||||
1.0, 0.0, 0.0,
|
||||
0.0, 0.0, 1.0,
|
||||
0.0, -1.0, 0.0
|
||||
}
|
||||
Type = "SpiceRotation",
|
||||
SourceFrame = "JUNO_SPACECRAFT",
|
||||
DestinationFrame = "GALACTIC"
|
||||
},
|
||||
},
|
||||
|
||||
Ephemeris = {
|
||||
Type = "Spice",
|
||||
Body = "JUNO",
|
||||
Observer = "JUPITER BARYCENTER",
|
||||
Kernels = {
|
||||
"spice/JNO_SCLKSCET.00039.tsc",
|
||||
"spice/juno_jade_v00.ti",
|
||||
"spice/juno_jedi_v00.ti",
|
||||
"spice/juno_jiram_v01.ti",
|
||||
"spice/juno_junocam_v00.ti",
|
||||
"spice/juno_mag_v00.ti",
|
||||
"spice/juno_mwr_v01.ti",
|
||||
"spice/juno_struct_v01.ti",
|
||||
"spice/juno_uvs_v00.ti",
|
||||
"spice/juno_v08.tf",
|
||||
"spice/juno_waves_v00.ti",
|
||||
"spice/juno_mwr_v01.ti",
|
||||
"spice/spk_merge_110805_171017_130515.bsp",
|
||||
"spice/ck/juno_sc_prl_110930_111028_jc003c01_v01.bc",
|
||||
"spice/ck/juno_sc_prl_111028_111125_jc004b00_v01.bc",
|
||||
"spice/ck/juno_sc_prl_111125_111223_jc005b00_v01.bc",
|
||||
"spice/ck/juno_sc_prl_111223_120127_jc006a02_v01.bc",
|
||||
"spice/ck/juno_sc_prl_120127_120217_jc007a00_v01.bc",
|
||||
"spice/ck/juno_sc_prl_120217_120316_jc008b00_v02.bc",
|
||||
"spice/ck/juno_sc_prl_120316_120413_jc009a00_v01.bc",
|
||||
"spice/ck/juno_sc_prl_120413_120511_jc010a04_v01.bc",
|
||||
"spice/ck/juno_sc_prl_120511_120608_jc011a01_v02.bc",
|
||||
"spice/ck/juno_sc_prl_120608_120706_jc012b01_v01.bc",
|
||||
"spice/ck/juno_sc_prl_120706_120802_jc013a01_v01.bc",
|
||||
"spice/ck/juno_sc_prl_120802_120824_jc014b01_v01.bc",
|
||||
"spice/ck/juno_sc_prl_120824_120928_jc015m00_v01.bc",
|
||||
"spice/ck/juno_sc_prl_120919_120928_jc015o00_v01.bc",
|
||||
"spice/ck/juno_sc_prl_120928_121026_jc016c03_v01.bc",
|
||||
"spice/ck/juno_sc_prl_121026_121123_jc017a01_v01.bc",
|
||||
"spice/ck/juno_sc_prl_121123_121221_jc018b01_v01.bc",
|
||||
"spice/ck/juno_sc_prl_121221_130118_jc019a01_v01.bc",
|
||||
"spice/ck/juno_sc_prl_130118_130215_jc020b01_v01.bc",
|
||||
"spice/ck/juno_sc_prl_130315_130412_jc022b01_v01.bc",
|
||||
"spice/ck/juno_sc_prl_130412_130510_jc023b03_v01.bc",
|
||||
"spice/ck/juno_sc_prl_130510_130607_jc024a01_v01.bc",
|
||||
"spice/ck/juno_sc_prl_130607_130705_jc025a00_v01.bc",
|
||||
"spice/ck/juno_sc_prl_130705_130802_jc026a01_v01.bc",
|
||||
"spice/ck/juno_sc_prl_130726_131020_jx024a02_EFB_v03.bc",
|
||||
"spice/ck/juno_sc_prl_130802_130830_jc027a02_v01.bc",
|
||||
"spice/ck/juno_sc_prl_130830_130927_jc028a01_v01.bc",
|
||||
"spice/ck/juno_sc_prl_130926_131025_jc029a00_v01.bc",
|
||||
"spice/ck/juno_sc_prl_130927_131025_jc029c01_v01.bc",
|
||||
"spice/ck/juno_sc_prl_131022_131025_jc029f00_v01.bc",
|
||||
"spice/ck/juno_sc_prl_131025_131122_jc030b04_v01.bc",
|
||||
"spice/ck/juno_sc_prl_131122_131220_jc031b01_v01.bc",
|
||||
"spice/ck/juno_sc_prl_131220_140124_jc032a01_v01.bc",
|
||||
"spice/ck/juno_sc_prl_140124_140214_jc033a01_v01.bc",
|
||||
"spice/ck/juno_sc_prl_140214_140314_jc034b01_v01.bc",
|
||||
"spice/ck/juno_sc_prl_140314_140411_jc035a01_v01.bc",
|
||||
"spice/ck/juno_sc_prl_140411_140509_jc036b01_v01.bc",
|
||||
"spice/ck/juno_sc_prl_140509_140606_jc037b02_v01.bc",
|
||||
"spice/ck/juno_sc_prl_140606_140704_jc038a01_v01.bc",
|
||||
"spice/ck/juno_sc_prl_140704_140801_jc039b01_v01.bc",
|
||||
"spice/ck/juno_sc_prl_140801_140829_jc040a01_v01.bc",
|
||||
"spice/ck/juno_sc_prl_140829_140926_jc041a01_v01.bc",
|
||||
"spice/ck/juno_sc_prl_140926_141024_jc042a01_v01.bc",
|
||||
"spice/ck/juno_sc_prl_141024_141121_jc043a01_v01.bc",
|
||||
"spice/ck/juno_sc_prl_141105_141121_jc043m01_v01.bc",
|
||||
"spice/ck/juno_sc_prl_141107_141121_jc043s01_v01.bc",
|
||||
"spice/ck/juno_sc_prl_141121_141219_jc044a01_v01.bc",
|
||||
"spice/ck/juno_sc_prl_141219_150123_jc045a01_v01.bc",
|
||||
"spice/ck/juno_sc_prl_150123_150213_jc046a01_v01.bc",
|
||||
"spice/ck/juno_sc_prl_150213_150313_jc047a01_v01.bc",
|
||||
"spice/ck/juno_sc_prl_150312_150409_jc048a01_v01.bc",
|
||||
"spice/ck/juno_sc_prl_150410_150508_jc049a01_v01.bc",
|
||||
"spice/ck/juno_sc_prl_150508_150605_jc050a01_v01.bc",
|
||||
"spice/ck/juno_sc_prl_150605_150703_jc051a01_v01.bc",
|
||||
"spice/ck/juno_sc_prl_150703_150731_jc052a01_v01.bc",
|
||||
"spice/ck/juno_sc_prl_150731_150828_jc053a01_v01.bc",
|
||||
"spice/ck/juno_sc_prl_150805_150828_jc053m00_v01.bc",
|
||||
"spice/ck/juno_sc_prl_150807_150828_jc053s00_v01.bc",
|
||||
"spice/ck/juno_sc_prl_150828_150924_jc054a00_v01.bc",
|
||||
"spice/ck/juno_sc_prl_150924_151023_jc055a00_v01.bc",
|
||||
"spice/ck/juno_sc_prl_151023_151120_jc056a00_v01.bc",
|
||||
"spice/ck/juno_sc_prl_151120_151218_jc057a00_v01.bc",
|
||||
"spice/ck/juno_sc_prl_151218_160115_jc058a00_v01.bc",
|
||||
"spice/ck/juno_sc_prl_160115_160212_jc059a00_v01.bc",
|
||||
"spice/ck/juno_sc_prl_160212_160311_jc060a00_v01.bc",
|
||||
"spice/ck/juno_sc_prl_160311_160408_jc061a00_v01.bc",
|
||||
"spice/ck/juno_sc_prl_160408_160506_jc062a00_v01.bc",
|
||||
"spice/ck/juno_sc_prl_160506_160603_jc063a00_v01.bc",
|
||||
"spice/ck/juno_sc_prl_160603_160630_jc064a00_v01.bc",
|
||||
"spice/ck/juno_sc_prl_160708_160729_jm0001rp_v02.bc",
|
||||
"spice/ck/juno_sc_prl_160729_160826_jm0002rp_v01.bc",
|
||||
"spice/ck/juno_sc_prl_161115_161213_jx0405rp_v01.bc"
|
||||
}
|
||||
}
|
||||
GuiName = "/Solar System/Missions/Juno"
|
||||
},
|
||||
--NewHorizonsTrail module
|
||||
{
|
||||
{
|
||||
Name = "JunoTrail",
|
||||
Parent = "JupiterBarycenter",
|
||||
Renderable = {
|
||||
Type = "RenderableTrailTrajectory",
|
||||
Translation = {
|
||||
Translation = {
|
||||
Type = "SpiceTranslation",
|
||||
Target = "JUNO",
|
||||
Observer = "JUPITER BARYCENTER"
|
||||
Observer = "JUPITER BARYCENTER",
|
||||
Kernels = JunoKernels
|
||||
},
|
||||
Color = { 0.70, 0.50, 0.20 },
|
||||
StartTime = "2016 JUN 28",
|
||||
EndTime = "2016 APR 01",
|
||||
SampleInterval = 3600
|
||||
Color = { 0.70,0.50,0.20 },
|
||||
StartTime = "2016 JUL 01",
|
||||
EndTime = "2016 DEC 13",
|
||||
SampleInterval = 2
|
||||
},
|
||||
},
|
||||
GuiName = "/Solar System/Missions/Juno"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -55,6 +55,7 @@ return {
|
||||
DestinationFrame = "ECLIPJ2000",
|
||||
},
|
||||
},
|
||||
GuiPath = "/Solar System/Planets/Jupiter/Moons"
|
||||
},
|
||||
{
|
||||
Name = "CallistoText",
|
||||
@@ -79,6 +80,7 @@ return {
|
||||
Position = {0, -10000000, 0}
|
||||
},
|
||||
},
|
||||
GuiPath = "/Solar System/Planets/Jupiter/Moons"
|
||||
},
|
||||
-- CallistoTrail module
|
||||
{
|
||||
@@ -94,6 +96,7 @@ return {
|
||||
Color = { 0.4, 0.3, 0.01 },
|
||||
Period = 17,
|
||||
Resolution = 1000
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Planets/Jupiter/Moons"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -55,6 +55,7 @@ return {
|
||||
DestinationFrame = "ECLIPJ2000",
|
||||
},
|
||||
},
|
||||
GuiPath = "/Solar System/Planets/Jupiter/Moons"
|
||||
},
|
||||
{
|
||||
Name = "EuropaText",
|
||||
@@ -79,6 +80,7 @@ return {
|
||||
Position = {0, -10000000, 0}
|
||||
},
|
||||
},
|
||||
GuiPath = "/Solar System/Planets/Jupiter/Moons"
|
||||
},
|
||||
-- EuropaTrail module
|
||||
{
|
||||
@@ -94,6 +96,7 @@ return {
|
||||
Color = { 0.5, 0.3, 0.3 },
|
||||
Period = 85 / 24,
|
||||
Resolution = 1000
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Planets/Jupiter/Moons"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -55,6 +55,7 @@ return {
|
||||
DestinationFrame = "ECLIPJ2000",
|
||||
},
|
||||
},
|
||||
GuiPath = "/Solar System/Planets/Jupiter/Moons"
|
||||
},
|
||||
{
|
||||
Name = "GanymedeText",
|
||||
@@ -73,6 +74,7 @@ return {
|
||||
Position = {0, -10000000, 0}
|
||||
},
|
||||
},
|
||||
GuiPath = "/Solar System/Planets/Jupiter/Moons"
|
||||
},
|
||||
-- GanymedeTrail module
|
||||
{
|
||||
@@ -88,6 +90,7 @@ return {
|
||||
Color = { 0.4, 0.3, 0.3 },
|
||||
Period = 172 / 24,
|
||||
Resolution = 1000
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Planets/Jupiter/Moons"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -55,6 +55,7 @@ return {
|
||||
DestinationFrame = "ECLIPJ2000",
|
||||
},
|
||||
},
|
||||
GuiPath = "/Solar System/Planets/Jupiter/Moons"
|
||||
--[[
|
||||
Ephemeris = {
|
||||
Type = "Spice",
|
||||
@@ -89,6 +90,7 @@ return {
|
||||
Position = {0, -10000000, 0}
|
||||
},
|
||||
},
|
||||
GuiPath = "/Solar System/Planets/Jupiter/Moons"
|
||||
},
|
||||
-- IoTrail module
|
||||
{
|
||||
@@ -104,6 +106,7 @@ return {
|
||||
Color = { 0.4, 0.4, 0.2 },
|
||||
Period = 42 / 24,
|
||||
Resolution = 1000
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Planets/Jupiter/Moons"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -98,6 +98,7 @@ return {
|
||||
DestinationFrame = "GALACTIC",
|
||||
},
|
||||
},
|
||||
GuiPath = "/Solar System/Planets/Jupiter"
|
||||
},
|
||||
{
|
||||
Name = "JupiterText",
|
||||
@@ -116,7 +117,8 @@ return {
|
||||
Position = {0, -100000000, 0}
|
||||
},
|
||||
},
|
||||
},
|
||||
GuiPath = "/Solar System/Planets/Jupiter"
|
||||
},
|
||||
-- JupiterTrail module
|
||||
{
|
||||
Name = "JupiterTrail",
|
||||
@@ -131,7 +133,8 @@ return {
|
||||
Color = { 0.8, 0.7, 0.7 },
|
||||
Period = 4330.595,
|
||||
Resolution = 1000
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Planets/Jupiter"
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,122 @@
|
||||
-- Source: http://pluto.jhuapl.edu/Mission/index.php
|
||||
-- Many of the values (especially days of the month if 01 or 30 or 31 and hh::mm::ss if all 0)
|
||||
-- are approximate and need fixing
|
||||
|
||||
return {
|
||||
Name = "New Horizons",
|
||||
Phases = {
|
||||
{
|
||||
Name = "Cruise Phase",
|
||||
TimeRange = { Start = "2006 JAN 19 00:00:00", End = "2015 JAN 15 00:00:00" },
|
||||
Phases = {
|
||||
{
|
||||
Name = "Jupiter fly-by",
|
||||
TimeRange = { Start = "2007 FEB 28 00:00:00", End = "2007 FEB 28 23:59:59" }
|
||||
},
|
||||
{
|
||||
Name = "Annual checkout 1",
|
||||
TimeRange = { Start = "2007 SEP 01 00:00:00", End = "2007 NOV 30 00:00:00" }
|
||||
},
|
||||
{
|
||||
Name = "Annual checkout 2",
|
||||
TimeRange = { Start = "2008 JUL 01 00:00:00", End = "2008 AUG 31 00:00:00" }
|
||||
},
|
||||
{
|
||||
Name = "Annual checkout 3",
|
||||
TimeRange = { Start = "2009 JUL 01 00:00:00", End = "2009 AUG 31 00:00:00" }
|
||||
},
|
||||
{
|
||||
Name = "Annual checkout 4",
|
||||
TimeRange = { Start = "2010 MAY 01 00:00:00", End = "2010 JUL 31 00:00:00" }
|
||||
},
|
||||
{
|
||||
Name = "Annual checkout 5",
|
||||
TimeRange = { Start = "2011 MAY 01 00:00:00", End = "2011 JUL 31 00:00:00" }
|
||||
},
|
||||
{
|
||||
Name = "Annual checkout 6",
|
||||
TimeRange = { Start = "2012 MAY 01 00:00:00", End = "2012 JUL 31 00:00:00" }
|
||||
},
|
||||
{
|
||||
Name = "Annual checkout 7",
|
||||
TimeRange = { Start = "2013 MAY 01 00:00:00", End = "2013 AUG 31 00:00:00" }
|
||||
},
|
||||
{
|
||||
Name = "Annual checkout 8 and Optical Navigation campaign 1",
|
||||
TimeRange = { Start = "2014 JUN 01 00:00:00", End = "2014 AUG 31 00:00:00" }
|
||||
},
|
||||
{
|
||||
Name = "Final Wakeup from Hibernation",
|
||||
TimeRange = { Start = "2014 DEC 06 00:00:00", End = "2014 DEC 06 23:59:59" }
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
Name = "Pluto Encounter/Approach Phase 1",
|
||||
TimeRange = { Start = "2015 JAN 15 00:00:00", End = "2015 APR 01 00:00:00" },
|
||||
Phases = {
|
||||
{
|
||||
Name = "Optical nagivation campaign 2",
|
||||
TimeRange = { Start = "2015 JAN 25 00:00:00", End = "2015 APR 01 00:00:00" }
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
Name = "Pluto Encounter/Approach Phase 2",
|
||||
TimeRange = { Start = "2015 APR 01 00:00:00", End = "2015 JUN 01 00:00:00" },
|
||||
Phases = {
|
||||
{
|
||||
Name = "Best-ever images of Pluto",
|
||||
TimeRange = { Start = "2015 MAY 01 00:00:00", End = "2015 JUN 01 00:00:00" }
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
Name = "Pluto Encounter/Approach Phase 3",
|
||||
TimeRange = { Start = "2015 JUN 01 00:00:00", End = "2015 JUL 15 00:00:00" },
|
||||
Phases = {
|
||||
{
|
||||
Name = "Closest approach to Pluto",
|
||||
TimeRange = { Start = "2015 JUL 14 11:49:57", End = "2015 JUL 14 11:49:58" }
|
||||
},
|
||||
{
|
||||
Name = "Closest approach to Charon",
|
||||
TimeRange = { Start = "2015 JUL 14 12:03:50", End = "2015 JUL 14 12:03:51" }
|
||||
},
|
||||
{
|
||||
Name = "Pluto-Sun Occultation",
|
||||
TimeRange = { Start = "2015 JUL 14 12:51:25", End = "2015 JUL 14 12:52:00" }
|
||||
},
|
||||
{
|
||||
Name = "Pluto-Earth Occultation",
|
||||
TimeRange = { Start = "2015 JUL 14 12:52:27", End = "2015 JUL 14 12:53:00" }
|
||||
},
|
||||
{
|
||||
Name = "Charon-Sun Occultation",
|
||||
TimeRange = { Start = "2015 JUL 14 14:17:40", End = "2015 JUL 14 14:18:00" }
|
||||
},
|
||||
{
|
||||
Name = "Charon-Earth Occultation",
|
||||
TimeRange = { Start = "2015 JUL 14 14:20:00", End = "2015 JUL 14 14:21:00" }
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
Name = "Departure Phase 1",
|
||||
TimeRange = { Start = "2015 JUL 15 00:00:00", End = "2015 AUG 01 00:00:00" }
|
||||
},
|
||||
{
|
||||
Name = "Departure Phase 2",
|
||||
TimeRange = { Start = "2015 AUG 01 00:00:00", End = "2015 OCT 01 00:00:00" }
|
||||
},
|
||||
{
|
||||
Name = "Departure Phase 3",
|
||||
TimeRange = { Start = "2015 OCT 01 00:00:00", End = "2016 JAN 01 00:00:00" }
|
||||
},
|
||||
{
|
||||
Name = "Data Playback Ends",
|
||||
TimeRange = { Start = "2016 OCT 01 00:00:00", End = "2016 DEC 01 00:00:00" }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -47,7 +47,8 @@ return {
|
||||
SourceFrame = "NH_SPACECRAFT",
|
||||
DestinationFrame = "GALACTIC",
|
||||
},
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Missions/New Horizons"
|
||||
},
|
||||
{
|
||||
Name = "NewHorizons",
|
||||
@@ -67,6 +68,7 @@ return {
|
||||
Ghosting = false,
|
||||
},
|
||||
},
|
||||
GuiPath = "/Solar System/Missions/New Horizons"
|
||||
},
|
||||
--NewHorizonsTrail module
|
||||
--[[{
|
||||
@@ -118,7 +120,8 @@ return {
|
||||
Fadeable = false,
|
||||
Ghosting = false,
|
||||
},
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Missions/New Horizons"
|
||||
},
|
||||
{
|
||||
Name = "NewHorizonsTrailPluto",
|
||||
@@ -140,6 +143,7 @@ return {
|
||||
EnableFade = false,
|
||||
Rendering = "Lines+Points"
|
||||
},
|
||||
GuiPath = "/Solar System/Missions/New Horizons"
|
||||
},
|
||||
--[[
|
||||
-- NewHorizonsPath module
|
||||
|
||||
@@ -28,306 +28,318 @@ return {
|
||||
Type = "StaticTranslation",
|
||||
Position = LorriOffset
|
||||
}
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Missions/New Horizons"
|
||||
},
|
||||
|
||||
-- NewHorizonsFov module NH_RALPH_LEISA
|
||||
{
|
||||
Name = "NH_RALPH_LEISA",
|
||||
Parent = "NewHorizonsPosition",
|
||||
Renderable = {
|
||||
Type = "RenderableFov",
|
||||
Body = "NEW HORIZONS",
|
||||
Frame = "NH_SPACECRAFT",
|
||||
RGB = { 0.8, 0.7, 0.7 },
|
||||
Instrument = {
|
||||
Name = "NH_RALPH_LEISA",
|
||||
Aberration = "NONE"
|
||||
},
|
||||
PotentialTargets = {
|
||||
"Pluto",
|
||||
"Charon",
|
||||
"Jupiter", "Io", "Europa", "Ganymede", "Callisto"
|
||||
}
|
||||
},
|
||||
Transform = {
|
||||
Translation = {
|
||||
Type = "StaticTranslation",
|
||||
Position = RalphOffset
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
-- NewHorizonsFov module NH_RALPH_MVIC_PAN1
|
||||
{
|
||||
Name = "NH_RALPH_MVIC_PAN1",
|
||||
Parent = "NewHorizonsPosition",
|
||||
Renderable = {
|
||||
Type = "RenderableFov",
|
||||
Body = "NEW HORIZONS",
|
||||
Frame = "NH_SPACECRAFT",
|
||||
RGB = { 0.8, 0.7, 0.7 },
|
||||
Instrument = {
|
||||
Name = "NH_RALPH_MVIC_PAN1",
|
||||
Aberration = "NONE"
|
||||
},
|
||||
PotentialTargets = {
|
||||
"Pluto",
|
||||
"Charon",
|
||||
"Jupiter", "Io", "Europa", "Ganymede", "Callisto"
|
||||
}
|
||||
},
|
||||
Transform = {
|
||||
Translation = {
|
||||
Type = "StaticTranslation",
|
||||
Position = RalphOffset
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
-- NewHorizonsFov module NH_RALPH_MVIC_PAN2
|
||||
{
|
||||
Name = "NH_RALPH_MVIC_PAN2",
|
||||
Parent = "NewHorizonsPosition",
|
||||
Renderable = {
|
||||
Type = "RenderableFov",
|
||||
Body = "NEW HORIZONS",
|
||||
Frame = "NH_SPACECRAFT",
|
||||
RGB = { 0.8, 0.7, 0.7 },
|
||||
Instrument = {
|
||||
Name = "NH_RALPH_MVIC_PAN2",
|
||||
Aberration = "NONE"
|
||||
},
|
||||
PotentialTargets = {
|
||||
"Pluto",
|
||||
"Charon",
|
||||
"Jupiter", "Io", "Europa", "Ganymede", "Callisto"
|
||||
}
|
||||
},
|
||||
Transform = {
|
||||
Translation = {
|
||||
Type = "StaticTranslation",
|
||||
Position = RalphOffset
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
-- NewHorizonsFov module NH_RALPH_MVIC_RED
|
||||
{
|
||||
Name = "NH_RALPH_MVIC_RED",
|
||||
Parent = "NewHorizonsPosition",
|
||||
Renderable = {
|
||||
Type = "RenderableFov",
|
||||
Body = "NEW HORIZONS",
|
||||
Frame = "NH_SPACECRAFT",
|
||||
RGB = { 0.8, 0.7, 0.7 },
|
||||
Instrument = {
|
||||
Name = "NH_RALPH_MVIC_RED",
|
||||
Aberration = "NONE"
|
||||
},
|
||||
PotentialTargets = {
|
||||
"Pluto",
|
||||
"Charon",
|
||||
"Jupiter", "Io", "Europa", "Ganymede", "Callisto"
|
||||
}
|
||||
},
|
||||
Transform = {
|
||||
Translation = {
|
||||
Type = "StaticTranslation",
|
||||
Position = RalphOffset
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
-- NewHorizonsFov module NH_RALPH_MVIC_BLUE
|
||||
{
|
||||
Name = "NH_RALPH_MVIC_BLUE",
|
||||
Parent = "NewHorizonsPosition",
|
||||
Renderable = {
|
||||
Type = "RenderableFov",
|
||||
Body = "NEW HORIZONS",
|
||||
Frame = "NH_SPACECRAFT",
|
||||
RGB = { 0.8, 0.7, 0.7 },
|
||||
Instrument = {
|
||||
Name = "NH_RALPH_MVIC_BLUE",
|
||||
Aberration = "NONE"
|
||||
},
|
||||
PotentialTargets = {
|
||||
"Pluto",
|
||||
"Charon",
|
||||
"Jupiter", "Io", "Europa", "Ganymede", "Callisto"
|
||||
}
|
||||
},
|
||||
Transform = {
|
||||
Translation = {
|
||||
Type = "StaticTranslation",
|
||||
Position = RalphOffset
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
-- NewHorizonsFov module NH_RALPH_MVIC_FT
|
||||
{
|
||||
Name = "NH_RALPH_MVIC_FT",
|
||||
Parent = "NewHorizonsPosition",
|
||||
Renderable = {
|
||||
Type = "RenderableFov",
|
||||
Body = "NEW HORIZONS",
|
||||
Frame = "NH_SPACECRAFT",
|
||||
RGB = { 0.8, 0.7, 0.7 },
|
||||
Instrument = {
|
||||
Name = "NH_RALPH_MVIC_FT",
|
||||
Aberration = "NONE"
|
||||
},
|
||||
PotentialTargets = {
|
||||
"Pluto",
|
||||
"Charon",
|
||||
"Jupiter", "Io", "Europa", "Ganymede", "Callisto"
|
||||
}
|
||||
},
|
||||
Transform = {
|
||||
Translation = {
|
||||
Type = "StaticTranslation",
|
||||
Position = RalphOffset
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
-- NewHorizonsFov module NH_RALPH_MVIC_METHANE
|
||||
{
|
||||
Name = "NH_RALPH_MVIC_METHANE",
|
||||
Parent = "NewHorizonsPosition",
|
||||
Renderable = {
|
||||
Type = "RenderableFov",
|
||||
Body = "NEW HORIZONS",
|
||||
Frame = "NH_SPACECRAFT",
|
||||
RGB = { 0.8, 0.7, 0.7 },
|
||||
Instrument = {
|
||||
Name = "NH_RALPH_MVIC_METHANE",
|
||||
Aberration = "NONE"
|
||||
},
|
||||
PotentialTargets = {
|
||||
"Pluto",
|
||||
"Charon",
|
||||
"Jupiter", "Io", "Europa", "Ganymede", "Callisto"
|
||||
}
|
||||
},
|
||||
Transform = {
|
||||
Translation = {
|
||||
Type = "StaticTranslation",
|
||||
Position = RalphOffset
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
-- NewHorizonsFov module NH_RALPH_MVIC_NIR
|
||||
{
|
||||
Name = "NH_RALPH_MVIC_NIR",
|
||||
Parent = "NewHorizonsPosition",
|
||||
Renderable = {
|
||||
Type = "RenderableFov",
|
||||
Body = "NEW HORIZONS",
|
||||
Frame = "NH_SPACECRAFT",
|
||||
RGB = { 0.8, 0.7, 0.7 },
|
||||
Instrument = {
|
||||
Name = "NH_RALPH_MVIC_NIR",
|
||||
Aberration = "NONE"
|
||||
},
|
||||
PotentialTargets = {
|
||||
"Pluto",
|
||||
"Charon",
|
||||
"Jupiter", "Io", "Europa", "Ganymede", "Callisto"
|
||||
}
|
||||
},
|
||||
Transform = {
|
||||
Translation = {
|
||||
Type = "StaticTranslation",
|
||||
Position = RalphOffset
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
-- NewHorizonsFov module NH_ALICE_AIRGLOW
|
||||
{
|
||||
Name = "NH_ALICE_AIRGLOW",
|
||||
Parent = "NewHorizonsPosition",
|
||||
Renderable = {
|
||||
Type = "RenderableFov",
|
||||
Body = "NEW HORIZONS",
|
||||
Frame = "NH_SPACECRAFT",
|
||||
RGB = { 0.8, 0.7, 0.7 },
|
||||
Instrument = {
|
||||
Name = "NH_ALICE_AIRGLOW",
|
||||
Aberration = "NONE"
|
||||
},
|
||||
PotentialTargets = {
|
||||
"Pluto",
|
||||
"Charon",
|
||||
"Jupiter", "Io", "Europa", "Ganymede", "Callisto"
|
||||
}
|
||||
},
|
||||
Transform = {
|
||||
Translation = {
|
||||
Type = "StaticTranslation",
|
||||
Position = AliceOffset
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
-- NewHorizonsFov module NH_ALICE_SOC
|
||||
{
|
||||
Name = "NH_ALICE_SOC",
|
||||
Parent = "NewHorizonsPosition",
|
||||
Renderable = {
|
||||
Type = "RenderableFov",
|
||||
Body = "NEW HORIZONS",
|
||||
Frame = "NH_SPACECRAFT",
|
||||
RGB = { 0.8, 0.7, 0.7 },
|
||||
Instrument = {
|
||||
Name = "NH_ALICE_SOC",
|
||||
Aberration = "NONE"
|
||||
},
|
||||
PotentialTargets = {
|
||||
"Pluto",
|
||||
"Charon",
|
||||
"Jupiter", "Io", "Europa", "Ganymede", "Callisto"
|
||||
}
|
||||
},
|
||||
Transform = {
|
||||
Translation = {
|
||||
Type = "StaticTranslation",
|
||||
Position = AliceOffset
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
-- Module NH_REX
|
||||
{
|
||||
Name = "NH_REX",
|
||||
Parent = "NewHorizonsPosition",
|
||||
Renderable = {
|
||||
Type = "RenderableCrawlingLine",
|
||||
Source = "NH_REX",
|
||||
Target = "EARTH",
|
||||
Instrument = "NH_REX",
|
||||
Color = {
|
||||
Start = { 1.0, 0.7, 0.0, 1.0},
|
||||
End = {0.0, 0.0, 0.0, 0.0 }
|
||||
}
|
||||
},
|
||||
Transform = {
|
||||
Rotation = {
|
||||
Type = "StaticRotation",
|
||||
Rotation = {
|
||||
0.0, 1.0, 0.0,
|
||||
0.0, 0.0, 1.0,
|
||||
1.0, 0.0, 0.0
|
||||
{
|
||||
Name = "NH_RALPH_LEISA",
|
||||
Parent = "NewHorizonsPosition",
|
||||
Renderable = {
|
||||
Type = "RenderableFov",
|
||||
Body = "NEW HORIZONS",
|
||||
Frame = "NH_SPACECRAFT",
|
||||
RGB = { 0.8, 0.7, 0.7 },
|
||||
Instrument = {
|
||||
Name = "NH_RALPH_LEISA",
|
||||
Aberration = "NONE"
|
||||
},
|
||||
PotentialTargets = {
|
||||
"Pluto",
|
||||
"Charon",
|
||||
"Jupiter", "Io", "Europa", "Ganymede", "Callisto"
|
||||
}
|
||||
},
|
||||
Translation = {
|
||||
Type = "StaticTranslation",
|
||||
Position = RexOffset
|
||||
}
|
||||
Transform = {
|
||||
Translation = {
|
||||
Type = "StaticTranslation",
|
||||
Position = RalphOffset
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Missions/New Horizons"
|
||||
},
|
||||
|
||||
-- NewHorizonsFov module NH_RALPH_MVIC_PAN1
|
||||
{
|
||||
Name = "NH_RALPH_MVIC_PAN1",
|
||||
Parent = "NewHorizonsPosition",
|
||||
Renderable = {
|
||||
Type = "RenderableFov",
|
||||
Body = "NEW HORIZONS",
|
||||
Frame = "NH_SPACECRAFT",
|
||||
RGB = { 0.8, 0.7, 0.7 },
|
||||
Instrument = {
|
||||
Name = "NH_RALPH_MVIC_PAN1",
|
||||
Aberration = "NONE"
|
||||
},
|
||||
PotentialTargets = {
|
||||
"Pluto",
|
||||
"Charon",
|
||||
"Jupiter", "Io", "Europa", "Ganymede", "Callisto"
|
||||
}
|
||||
},
|
||||
Transform = {
|
||||
Translation = {
|
||||
Type = "StaticTranslation",
|
||||
Position = RalphOffset
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Missions/New Horizons"
|
||||
},
|
||||
|
||||
-- NewHorizonsFov module NH_RALPH_MVIC_PAN2
|
||||
{
|
||||
Name = "NH_RALPH_MVIC_PAN2",
|
||||
Parent = "NewHorizonsPosition",
|
||||
Renderable = {
|
||||
Type = "RenderableFov",
|
||||
Body = "NEW HORIZONS",
|
||||
Frame = "NH_SPACECRAFT",
|
||||
RGB = { 0.8, 0.7, 0.7 },
|
||||
Instrument = {
|
||||
Name = "NH_RALPH_MVIC_PAN2",
|
||||
Aberration = "NONE"
|
||||
},
|
||||
PotentialTargets = {
|
||||
"Pluto",
|
||||
"Charon",
|
||||
"Jupiter", "Io", "Europa", "Ganymede", "Callisto"
|
||||
}
|
||||
},
|
||||
Transform = {
|
||||
Translation = {
|
||||
Type = "StaticTranslation",
|
||||
Position = RalphOffset
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Missions/New Horizons"
|
||||
},
|
||||
|
||||
-- NewHorizonsFov module NH_RALPH_MVIC_RED
|
||||
{
|
||||
Name = "NH_RALPH_MVIC_RED",
|
||||
Parent = "NewHorizonsPosition",
|
||||
Renderable = {
|
||||
Type = "RenderableFov",
|
||||
Body = "NEW HORIZONS",
|
||||
Frame = "NH_SPACECRAFT",
|
||||
RGB = { 0.8, 0.7, 0.7 },
|
||||
Instrument = {
|
||||
Name = "NH_RALPH_MVIC_RED",
|
||||
Aberration = "NONE"
|
||||
},
|
||||
PotentialTargets = {
|
||||
"Pluto",
|
||||
"Charon",
|
||||
"Jupiter", "Io", "Europa", "Ganymede", "Callisto"
|
||||
}
|
||||
},
|
||||
Transform = {
|
||||
Translation = {
|
||||
Type = "StaticTranslation",
|
||||
Position = RalphOffset
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Missions/New Horizons"
|
||||
},
|
||||
|
||||
-- NewHorizonsFov module NH_RALPH_MVIC_BLUE
|
||||
{
|
||||
Name = "NH_RALPH_MVIC_BLUE",
|
||||
Parent = "NewHorizonsPosition",
|
||||
Renderable = {
|
||||
Type = "RenderableFov",
|
||||
Body = "NEW HORIZONS",
|
||||
Frame = "NH_SPACECRAFT",
|
||||
RGB = { 0.8, 0.7, 0.7 },
|
||||
Instrument = {
|
||||
Name = "NH_RALPH_MVIC_BLUE",
|
||||
Aberration = "NONE"
|
||||
},
|
||||
PotentialTargets = {
|
||||
"Pluto",
|
||||
"Charon",
|
||||
"Jupiter", "Io", "Europa", "Ganymede", "Callisto"
|
||||
}
|
||||
},
|
||||
Transform = {
|
||||
Translation = {
|
||||
Type = "StaticTranslation",
|
||||
Position = RalphOffset
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Missions/New Horizons"
|
||||
},
|
||||
|
||||
-- NewHorizonsFov module NH_RALPH_MVIC_FT
|
||||
{
|
||||
Name = "NH_RALPH_MVIC_FT",
|
||||
Parent = "NewHorizonsPosition",
|
||||
Renderable = {
|
||||
Type = "RenderableFov",
|
||||
Body = "NEW HORIZONS",
|
||||
Frame = "NH_SPACECRAFT",
|
||||
RGB = { 0.8, 0.7, 0.7 },
|
||||
Instrument = {
|
||||
Name = "NH_RALPH_MVIC_FT",
|
||||
Aberration = "NONE"
|
||||
},
|
||||
PotentialTargets = {
|
||||
"Pluto",
|
||||
"Charon",
|
||||
"Jupiter", "Io", "Europa", "Ganymede", "Callisto"
|
||||
}
|
||||
},
|
||||
Transform = {
|
||||
Translation = {
|
||||
Type = "StaticTranslation",
|
||||
Position = RalphOffset
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Missions/New Horizons"
|
||||
},
|
||||
|
||||
-- NewHorizonsFov module NH_RALPH_MVIC_METHANE
|
||||
{
|
||||
Name = "NH_RALPH_MVIC_METHANE",
|
||||
Parent = "NewHorizonsPosition",
|
||||
Renderable = {
|
||||
Type = "RenderableFov",
|
||||
Body = "NEW HORIZONS",
|
||||
Frame = "NH_SPACECRAFT",
|
||||
RGB = { 0.8, 0.7, 0.7 },
|
||||
Instrument = {
|
||||
Name = "NH_RALPH_MVIC_METHANE",
|
||||
Aberration = "NONE"
|
||||
},
|
||||
PotentialTargets = {
|
||||
"Pluto",
|
||||
"Charon",
|
||||
"Jupiter", "Io", "Europa", "Ganymede", "Callisto"
|
||||
}
|
||||
},
|
||||
Transform = {
|
||||
Translation = {
|
||||
Type = "StaticTranslation",
|
||||
Position = RalphOffset
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Missions/New Horizons"
|
||||
},
|
||||
|
||||
-- NewHorizonsFov module NH_RALPH_MVIC_NIR
|
||||
{
|
||||
Name = "NH_RALPH_MVIC_NIR",
|
||||
Parent = "NewHorizonsPosition",
|
||||
Renderable = {
|
||||
Type = "RenderableFov",
|
||||
Body = "NEW HORIZONS",
|
||||
Frame = "NH_SPACECRAFT",
|
||||
RGB = { 0.8, 0.7, 0.7 },
|
||||
Instrument = {
|
||||
Name = "NH_RALPH_MVIC_NIR",
|
||||
Aberration = "NONE"
|
||||
},
|
||||
PotentialTargets = {
|
||||
"Pluto",
|
||||
"Charon",
|
||||
"Jupiter", "Io", "Europa", "Ganymede", "Callisto"
|
||||
}
|
||||
},
|
||||
Transform = {
|
||||
Translation = {
|
||||
Type = "StaticTranslation",
|
||||
Position = RalphOffset
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Missions/New Horizons"
|
||||
},
|
||||
|
||||
-- NewHorizonsFov module NH_ALICE_AIRGLOW
|
||||
{
|
||||
Name = "NH_ALICE_AIRGLOW",
|
||||
Parent = "NewHorizonsPosition",
|
||||
Renderable = {
|
||||
Type = "RenderableFov",
|
||||
Body = "NEW HORIZONS",
|
||||
Frame = "NH_SPACECRAFT",
|
||||
RGB = { 0.8, 0.7, 0.7 },
|
||||
Instrument = {
|
||||
Name = "NH_ALICE_AIRGLOW",
|
||||
Aberration = "NONE"
|
||||
},
|
||||
PotentialTargets = {
|
||||
"Pluto",
|
||||
"Charon",
|
||||
"Jupiter", "Io", "Europa", "Ganymede", "Callisto"
|
||||
}
|
||||
},
|
||||
Transform = {
|
||||
Translation = {
|
||||
Type = "StaticTranslation",
|
||||
Position = AliceOffset
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Missions/New Horizons"
|
||||
},
|
||||
|
||||
-- NewHorizonsFov module NH_ALICE_SOC
|
||||
{
|
||||
Name = "NH_ALICE_SOC",
|
||||
Parent = "NewHorizonsPosition",
|
||||
Renderable = {
|
||||
Type = "RenderableFov",
|
||||
Body = "NEW HORIZONS",
|
||||
Frame = "NH_SPACECRAFT",
|
||||
RGB = { 0.8, 0.7, 0.7 },
|
||||
Instrument = {
|
||||
Name = "NH_ALICE_SOC",
|
||||
Aberration = "NONE"
|
||||
},
|
||||
PotentialTargets = {
|
||||
"Pluto",
|
||||
"Charon",
|
||||
"Jupiter", "Io", "Europa", "Ganymede", "Callisto"
|
||||
}
|
||||
},
|
||||
Transform = {
|
||||
Translation = {
|
||||
Type = "StaticTranslation",
|
||||
Position = AliceOffset
|
||||
},
|
||||
},
|
||||
GuiPath = "/Solar System/Missions/New Horizons"
|
||||
},
|
||||
|
||||
-- Module NH_REX
|
||||
{
|
||||
Name = "NH_REX",
|
||||
Parent = "NewHorizonsPosition",
|
||||
Renderable = {
|
||||
Type = "RenderableCrawlingLine",
|
||||
Source = "NH_REX",
|
||||
Target = "EARTH",
|
||||
Instrument = "NH_REX",
|
||||
Color = {
|
||||
Start = { 1.0, 0.7, 0.0, 1.0},
|
||||
End = {0.0, 0.0, 0.0, 0.0 }
|
||||
}
|
||||
},
|
||||
Transform = {
|
||||
Rotation = {
|
||||
Type = "StaticRotation",
|
||||
Rotation = {
|
||||
0.0, 1.0, 0.0,
|
||||
0.0, 0.0, 1.0,
|
||||
1.0, 0.0, 0.0
|
||||
}
|
||||
},
|
||||
Translation = {
|
||||
Type = "StaticTranslation",
|
||||
Position = RexOffset
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Missions/New Horizons"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -55,6 +55,7 @@ return {
|
||||
DestinationFrame = "GALACTIC"
|
||||
},
|
||||
},
|
||||
GuiPath = "/Solar System/Dwarf Planets/Pluto"
|
||||
},
|
||||
{
|
||||
Name = "CharonText",
|
||||
@@ -73,6 +74,7 @@ return {
|
||||
Position = {0, -1000000, 0}
|
||||
},
|
||||
},
|
||||
GuiPath = "/Solar System/Dwarf Planets/Pluto"
|
||||
},
|
||||
{
|
||||
Name = "CharonShadow",
|
||||
@@ -86,9 +88,10 @@ return {
|
||||
BodyFrame = "IAU_CHARON",
|
||||
Aberration = "NONE",
|
||||
},
|
||||
},
|
||||
GuiPath = "/Solar System/Dwarf Planets/Pluto"
|
||||
},
|
||||
-- CharonTrail module
|
||||
{
|
||||
{
|
||||
Name = "CharonTrail",
|
||||
Parent = "PlutoBarycenter",
|
||||
Renderable = {
|
||||
@@ -102,5 +105,6 @@ return {
|
||||
Period = 6.38725,
|
||||
Resolution = 1000
|
||||
},
|
||||
GuiPath = "/Solar System/Dwarf Planets/Pluto"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -34,6 +34,7 @@ return {
|
||||
DestinationFrame = "ECLIPJ2000"
|
||||
},
|
||||
},
|
||||
GuiPath = "/Solar System/Dwarf Planets/Pluto"
|
||||
},
|
||||
{
|
||||
Name = "HydraText",
|
||||
@@ -51,6 +52,7 @@ return {
|
||||
Position = {1000000, 0, 1000000},
|
||||
},
|
||||
},
|
||||
GuiPath = "/Solar System/Dwarf Planets/Pluto"
|
||||
},
|
||||
-- HydraTrail module
|
||||
{
|
||||
@@ -67,6 +69,7 @@ return {
|
||||
Period = 38.20177,
|
||||
Resolution = 1000
|
||||
},
|
||||
GuiPath = "/Solar System/Dwarf Planets/Pluto"
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -34,6 +34,7 @@ return {
|
||||
DestinationFrame = "ECLIPJ2000"
|
||||
},
|
||||
},
|
||||
GuiPath = "/Solar System/Dwarf Planets/Pluto"
|
||||
},
|
||||
{
|
||||
Name = "KerberosText",
|
||||
@@ -51,7 +52,8 @@ return {
|
||||
Position = {1000000, 0, 1000000},
|
||||
},
|
||||
},
|
||||
},
|
||||
GuiPath = "/Solar System/Dwarf Planets/Pluto"
|
||||
},
|
||||
-- KerberosTrail module
|
||||
{
|
||||
Name = "KerberosTrail",
|
||||
@@ -67,6 +69,6 @@ return {
|
||||
Period = 32.16756,
|
||||
Resolution = 1000
|
||||
},
|
||||
GuiPath = "/Solar System/Dwarf Planets/Pluto"
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -34,6 +34,7 @@ return {
|
||||
DestinationFrame = "ECLIPJ2000"
|
||||
},
|
||||
},
|
||||
GuiPath = "/Solar System/Dwarf Planets/Pluto"
|
||||
},
|
||||
{
|
||||
Name = "NixText",
|
||||
@@ -45,6 +46,7 @@ return {
|
||||
Billboard = true,
|
||||
Texture = "textures/Nix-Text.png"
|
||||
},
|
||||
GuiPath = "/Solar System/Dwarf Planets/Pluto"
|
||||
},
|
||||
-- NixTrail module
|
||||
{
|
||||
@@ -61,6 +63,6 @@ return {
|
||||
Period = 24.85463,
|
||||
Resolution = 1000
|
||||
},
|
||||
GuiPath = "/Solar System/Dwarf Planets/Pluto"
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@ return {
|
||||
Kernels = NewHorizonsKernels
|
||||
},
|
||||
},
|
||||
GuiPath = "/Solar System/Dwarf Planets/Pluto"
|
||||
},
|
||||
-- Pluto module
|
||||
{
|
||||
@@ -122,7 +123,7 @@ return {
|
||||
},
|
||||
},
|
||||
|
||||
Instrument = {
|
||||
Instrument = {
|
||||
Name = "NH_LORRI",
|
||||
Method = "ELLIPSOID",
|
||||
Aberration = "NONE",
|
||||
@@ -155,8 +156,9 @@ return {
|
||||
DestinationFrame = "GALACTIC",
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Dwarf Planets/Pluto"
|
||||
},
|
||||
{
|
||||
{
|
||||
Name = "PlutoBarycenterLabel",
|
||||
Parent = "PlutoBarycenter",
|
||||
Renderable = {
|
||||
@@ -170,6 +172,7 @@ return {
|
||||
MieColor = {1.0, 1.0, 1.0}
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Dwarf Planets/Pluto"
|
||||
},
|
||||
{
|
||||
Name = "PlutoText",
|
||||
@@ -188,6 +191,7 @@ return {
|
||||
Position = {0, -2000000, 0}
|
||||
},
|
||||
},
|
||||
GuiPath = "/Solar System/Dwarf Planets/Pluto"
|
||||
},
|
||||
{
|
||||
Name = "PlutoTexture",
|
||||
@@ -206,6 +210,7 @@ return {
|
||||
Position = {0, -4000000, 0}
|
||||
},
|
||||
},
|
||||
GuiPath = "/Solar System/Dwarf Planets/Pluto"
|
||||
},
|
||||
{
|
||||
Name = "PlutoShadow",
|
||||
@@ -219,6 +224,7 @@ return {
|
||||
BodyFrame = "IAU_PLUTO",
|
||||
Aberration = "NONE",
|
||||
},
|
||||
GuiPath = "/Solar System/Dwarf Planets/Pluto"
|
||||
},
|
||||
-- PlutoBarycentricTrail module
|
||||
{
|
||||
@@ -235,6 +241,7 @@ return {
|
||||
Period = 6.38723,
|
||||
Resolution = 1000
|
||||
},
|
||||
GuiPath = "/Solar System/Dwarf Planets/Pluto"
|
||||
},
|
||||
-- PlutoTrail module
|
||||
{
|
||||
@@ -253,5 +260,6 @@ return {
|
||||
Period = 160 * 365.242,
|
||||
Resolution = 1000
|
||||
},
|
||||
}
|
||||
GuiPath = "/Solar System/Dwarf Planets/Pluto"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -34,6 +34,7 @@ return {
|
||||
DestinationFrame = "ECLIPJ2000"
|
||||
},
|
||||
},
|
||||
GuiPath = "/Solar System/Dwarf Planets/Pluto"
|
||||
},
|
||||
{
|
||||
Name = "StyxText",
|
||||
@@ -52,6 +53,7 @@ return {
|
||||
Position = {1000000, 0, 1000000}
|
||||
},
|
||||
},
|
||||
GuiPath = "/Solar System/Dwarf Planets/Pluto"
|
||||
},
|
||||
-- StyxTrail module
|
||||
{
|
||||
@@ -68,5 +70,6 @@ return {
|
||||
Period = 20.16155,
|
||||
Resolution = 1000
|
||||
},
|
||||
GuiPath = "/Solar System/Dwarf Planets/Pluto"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -82,7 +82,6 @@ return {
|
||||
Far = 1000000,
|
||||
},
|
||||
},
|
||||
|
||||
},
|
||||
|
||||
Transform = {
|
||||
@@ -92,6 +91,7 @@ return {
|
||||
DestinationFrame = "GALACTIC",
|
||||
},
|
||||
},
|
||||
GuiPath = "/Solar System/Asteroid"
|
||||
},
|
||||
{
|
||||
Name = "BennuTrail",
|
||||
@@ -108,5 +108,6 @@ return {
|
||||
EndTime = "2023 MAY 31 00:00:00.000",
|
||||
SampleInterval = 3600,
|
||||
},
|
||||
GuiPath = "/Solar System/Asteroid"
|
||||
},
|
||||
}
|
||||
|
||||
@@ -189,6 +189,7 @@ return {
|
||||
DestinationFrame = "GALACTIC",
|
||||
},
|
||||
},
|
||||
GuiPath = "/Solar System/Missions/OSIRIS REx"
|
||||
},
|
||||
{
|
||||
Name = "ORX_OCAMS_POLYCAM",
|
||||
@@ -219,6 +220,7 @@ return {
|
||||
DestinationFrame = "ORX_SPACECRAFT",
|
||||
},
|
||||
},
|
||||
GuiPath = "/Solar System/Missions/OSIRIS REx"
|
||||
},
|
||||
{
|
||||
Name = "ORX_REXIS",
|
||||
@@ -249,6 +251,7 @@ return {
|
||||
DestinationFrame = "ORX_SPACECRAFT",
|
||||
},
|
||||
},
|
||||
GuiPath = "/Solar System/Missions/OSIRIS REx"
|
||||
},
|
||||
{
|
||||
Name = "POLYCAM FOV",
|
||||
@@ -267,6 +270,7 @@ return {
|
||||
BENNU_BODY -- Bennu
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Missions/OSIRIS REx"
|
||||
},
|
||||
{
|
||||
Name = "REXIS FOV",
|
||||
@@ -288,6 +292,7 @@ return {
|
||||
[BENNU_BODY] = "IAU_BENNU"
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Missions/OSIRIS REx"
|
||||
},
|
||||
--[[
|
||||
-- Latest image taken by POLYCAM
|
||||
@@ -345,6 +350,7 @@ return {
|
||||
EndTime = "2016 SEP 9 00:05:00",
|
||||
SampleInterval = 60,
|
||||
},
|
||||
GuiPath = "/Solar System/Missions/OSIRIS REx"
|
||||
},
|
||||
|
||||
-- Trail relative to solar system barycenter
|
||||
@@ -363,6 +369,7 @@ return {
|
||||
EndTime = "2023 SEP 24 12:00:00",
|
||||
SampleInterval = 3600,
|
||||
},
|
||||
GuiPath = "/Solar System/Missions/OSIRIS REx"
|
||||
},
|
||||
|
||||
-- Trail relative to Bennu
|
||||
@@ -381,5 +388,6 @@ return {
|
||||
EndTime = "2023 SEP 24 12:00:00",
|
||||
SampleInterval = 3600,
|
||||
},
|
||||
GuiPath = "/Solar System/Missions/OSIRIS REx"
|
||||
},
|
||||
}
|
||||
|
||||
@@ -10,8 +10,9 @@ return {
|
||||
Observer = "SUN",
|
||||
},
|
||||
},
|
||||
GuiPath = "/Solar System/Comets/67P Churymov-Gerasimenko"
|
||||
},
|
||||
{
|
||||
{
|
||||
Name = "67P",
|
||||
Parent = "67PBarycenter",
|
||||
|
||||
@@ -78,6 +79,7 @@ return {
|
||||
DestinationFrame = "GALACTIC",
|
||||
},
|
||||
},
|
||||
GuiPath = "/Solar System/Comets/67P Churymov-Gerasimenko"
|
||||
},
|
||||
-- -- 67P Trail Module
|
||||
{
|
||||
@@ -95,6 +97,7 @@ return {
|
||||
EndTime = "2017 JAN 01 00:00:00.000",
|
||||
SampleInterval = 3600,
|
||||
},
|
||||
GuiPath = "/Solar System/Comets/67P Churymov-Gerasimenko"
|
||||
},
|
||||
--[[
|
||||
{
|
||||
|
||||
@@ -72,7 +72,8 @@ return {
|
||||
SourceFrame = "ROS_SPACECRAFT",
|
||||
DestinationFrame = "GALACTIC",
|
||||
}
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Missions/Rosetta"
|
||||
},
|
||||
{
|
||||
Name = "RosettaModel",
|
||||
@@ -83,7 +84,8 @@ return {
|
||||
-- The scale of the model is in cm; OpenSpace is in m
|
||||
Scale = 0.01
|
||||
}
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Missions/Rosetta"
|
||||
},
|
||||
{
|
||||
Name = "Rosetta_black_foil",
|
||||
@@ -97,7 +99,8 @@ return {
|
||||
},
|
||||
ColorTexture = "textures/foil_silver_ramp.png",
|
||||
ModelTransform = RotationMatrix
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Missions/Rosetta"
|
||||
},
|
||||
{
|
||||
Name = "Rosetta_black_parts",
|
||||
@@ -111,7 +114,8 @@ return {
|
||||
},
|
||||
ColorTexture = "textures/foil_silver_ramp.png",
|
||||
ModelTransform = RotationMatrix
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Missions/Rosetta"
|
||||
},
|
||||
{
|
||||
Name = "Rosetta_dish",
|
||||
@@ -126,6 +130,7 @@ return {
|
||||
ColorTexture = "textures/dish_AO.png",
|
||||
ModelTransform = RotationMatrix
|
||||
},
|
||||
GuiPath = "/Solar System/Missions/Rosetta"
|
||||
},
|
||||
{
|
||||
Name = "Rosetta_parts",
|
||||
@@ -139,7 +144,8 @@ return {
|
||||
},
|
||||
ColorTexture = "textures/parts2_AO.png",
|
||||
ModelTransform = RotationMatrix
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Missions/Rosetta"
|
||||
},
|
||||
{
|
||||
Name = "Rosetta_silver_foil",
|
||||
@@ -153,7 +159,8 @@ return {
|
||||
},
|
||||
ColorTexture = "textures/foil_silver_ramp.png",
|
||||
ModelTransform = RotationMatrix
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Missions/Rosetta"
|
||||
},
|
||||
{
|
||||
Name = "Rosetta_vents",
|
||||
@@ -167,7 +174,8 @@ return {
|
||||
},
|
||||
ColorTexture = "textures/tex_01.png",
|
||||
ModelTransform = RotationMatrix
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Missions/Rosetta"
|
||||
},
|
||||
{
|
||||
Name = "Rosetta_wing_a",
|
||||
@@ -182,6 +190,7 @@ return {
|
||||
ColorTexture = "textures/tex_01.png",
|
||||
ModelTransform = RotationMatrix
|
||||
},
|
||||
GuiPath = "/Solar System/Missions/Rosetta"
|
||||
},
|
||||
{
|
||||
Name = "Rosetta_wing_b",
|
||||
@@ -196,6 +205,7 @@ return {
|
||||
ColorTexture = "textures/tex_01.png",
|
||||
ModelTransform = RotationMatrix
|
||||
},
|
||||
GuiPath = "/Solar System/Missions/Rosetta"
|
||||
-- Transform = {
|
||||
-- Rotation = {
|
||||
-- Type = "SpiceRotation",
|
||||
@@ -216,7 +226,8 @@ return {
|
||||
},
|
||||
ColorTexture = "textures/foil_gold_ramp.png",
|
||||
ModelTransform = RotationMatrix
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Missions/Rosetta"
|
||||
},
|
||||
{
|
||||
Name = "Philae",
|
||||
@@ -240,7 +251,8 @@ return {
|
||||
-- The scale of the model is in cm; OpenSpace is in m
|
||||
Scale = 0.01
|
||||
}
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Missions/Rosetta"
|
||||
},
|
||||
{
|
||||
Name = "Philae_foil",
|
||||
@@ -254,7 +266,8 @@ return {
|
||||
},
|
||||
ColorTexture = "textures/foil_silver_ramp.png",
|
||||
ModelTransform = RotationMatrix
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Missions/Rosetta"
|
||||
},
|
||||
{
|
||||
Name = "Philae_lids",
|
||||
@@ -268,7 +281,8 @@ return {
|
||||
},
|
||||
ColorTexture = "textures/parts2_AO.png",
|
||||
ModelTransform = RotationMatrix
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Missions/Rosetta"
|
||||
},
|
||||
{
|
||||
Name = "Philae_parts",
|
||||
@@ -282,7 +296,8 @@ return {
|
||||
},
|
||||
ColorTexture = "textures/foil_silver_ramp.png",
|
||||
ModelTransform = RotationMatrix
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Missions/Rosetta"
|
||||
},
|
||||
{
|
||||
Name = "Philae_solarp",
|
||||
@@ -296,7 +311,8 @@ return {
|
||||
},
|
||||
ColorTexture = "textures/tex_01.png",
|
||||
ModelTransform = RotationMatrix
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Missions/Rosetta"
|
||||
},
|
||||
{
|
||||
Name = "RosettaCometTrail",
|
||||
@@ -313,6 +329,7 @@ return {
|
||||
EndTime = "2016 SEP 30 12:00:00",
|
||||
SampleInterval = 3600,
|
||||
},
|
||||
GuiPath = "/Solar System/Missions/Rosetta"
|
||||
},
|
||||
{
|
||||
Name = "PhilaeTrail",
|
||||
@@ -329,12 +346,14 @@ return {
|
||||
EndTime = "2014 NOV 12 17:00:00",
|
||||
SampleInterval = 2,
|
||||
},
|
||||
},
|
||||
GuiPath = "/Solar System/Missions/Rosetta"
|
||||
},
|
||||
{
|
||||
Name = "NAVCAM",
|
||||
Parent = "Rosetta",
|
||||
GuiPath = "/Solar System/Missions/Rosetta"
|
||||
},
|
||||
{
|
||||
{
|
||||
Name = "NAVCAM FOV",
|
||||
Parent = "NAVCAM",
|
||||
Renderable = {
|
||||
@@ -359,6 +378,7 @@ return {
|
||||
["CHURYUMOV-GERASIMENKO"] = "67P/C-G_CK"
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Missions/Rosetta"
|
||||
},
|
||||
-- Latest image taken by NAVCAM
|
||||
{
|
||||
@@ -372,6 +392,7 @@ return {
|
||||
Instrument = "ROS_NAVCAM-A",
|
||||
Moving = false,
|
||||
Texture = "textures/defaultProj.png",
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Missions/Rosetta"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,7 +26,6 @@ return {
|
||||
{
|
||||
Name = "LRO WAC Mosaic [OnMoon]",
|
||||
FilePath = "map_service_configs/OnMoonColor.xml",
|
||||
Enabled = true,
|
||||
},
|
||||
-- Utah based servers
|
||||
{
|
||||
@@ -38,8 +37,9 @@ return {
|
||||
FilePath = "map_service_configs/Utah/Kaguya.wms"
|
||||
},
|
||||
{
|
||||
Name = "WAC",
|
||||
FilePath = "map_service_configs/Utah/Wac.wms"
|
||||
Name = "WAC [Utah]",
|
||||
FilePath = "map_service_configs/Utah/Wac.wms",
|
||||
Enabled = true,
|
||||
}
|
||||
},
|
||||
HeightLayers = {
|
||||
@@ -61,7 +61,8 @@ return {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Planets/Earth/Moon"
|
||||
},
|
||||
-- MoonTrail module
|
||||
{
|
||||
@@ -77,6 +78,7 @@ return {
|
||||
Color = { 0.5, 0.3, 0.3 },
|
||||
Period = 27,
|
||||
Resolution = 1000
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Planets/Earth/Moon"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,7 +10,8 @@ return {
|
||||
Observer = "SUN",
|
||||
Kernels = "${OPENSPACE_DATA}/spice/de430_1850-2150.bsp"
|
||||
}
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Planets/Neptune"
|
||||
},
|
||||
-- RenderableGlobe module
|
||||
{
|
||||
@@ -38,6 +39,7 @@ return {
|
||||
}
|
||||
},
|
||||
Tag = { "planet_solarSystem", "planet_giants" },
|
||||
GuiPath = "/Solar System/Planets/Neptune"
|
||||
|
||||
},
|
||||
-- Trail module
|
||||
@@ -55,6 +57,7 @@ return {
|
||||
Period = 60200,
|
||||
Resolution = 1000
|
||||
},
|
||||
Tag = { "planetTrail_solarSystem", "planetTrail_giants" }
|
||||
Tag = { "planetTrail_solarSystem", "planetTrail_giants" },
|
||||
GuiPath = "/Solar System/Planets/Neptune"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,6 +19,8 @@ charon_image = "textures/NH_Charon_mosaic.png"
|
||||
charon_height = "textures/NH_Charon_DTM.png"
|
||||
-- charon_height = "textures/NH_Charon_DTM_8192.png"
|
||||
|
||||
dofile(openspace.absPath('${SCRIPTS}/scene_helper.lua'))
|
||||
|
||||
function preInitialization()
|
||||
--[[
|
||||
The scripts in this function are executed after the scene is loaded but before the
|
||||
@@ -185,6 +187,14 @@ function postInitialization()
|
||||
openspace.setPropertyValue("MilkyWay.renderable.Segments", 50)
|
||||
|
||||
openspace.printInfo("Done setting default values")
|
||||
|
||||
openspace.loadMission("${OPENSPACE_DATA}/scene/missions/newhorizons/newhorizons/newhorizons.mission")
|
||||
|
||||
-- Defined in scene_helper.lua
|
||||
-- Used to create focus buttons for a subset of scenegraph nodes
|
||||
mark_interesting_nodes({
|
||||
"Pluto", "NewHorizons", "Charon"
|
||||
})
|
||||
end
|
||||
|
||||
return {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
KernelCase = 2 -- Right now we only have the image times for case 2
|
||||
|
||||
dofile(openspace.absPath('${SCRIPTS}/scene_helper.lua'))
|
||||
|
||||
function preInitialization()
|
||||
--[[
|
||||
@@ -102,6 +103,10 @@ function postInitialization()
|
||||
openspace.loadMission("${OPENSPACE_DATA}/scene/missions/osirisrex/osirisrex/osirisrex.mission")
|
||||
|
||||
openspace.navigation.resetCameraDirection()
|
||||
|
||||
mark_interesting_nodes({
|
||||
"OsirisRex", "BennuBarycenter", "Earth"
|
||||
})
|
||||
end
|
||||
|
||||
return {
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
dofile(openspace.absPath('${SCRIPTS}/scene_helper.lua'))
|
||||
|
||||
function preInitialization()
|
||||
--[[
|
||||
The scripts in this function are executed after the scene is loaded but before the
|
||||
@@ -102,6 +104,10 @@ function postInitialization()
|
||||
openspace.setPropertyValue('67P.renderable.PerformShading', false);
|
||||
|
||||
openspace.printInfo("Done setting default values")
|
||||
|
||||
mark_interesting_nodes({
|
||||
"Pluto", "NewHorizons", "Charon"
|
||||
})
|
||||
end
|
||||
|
||||
return {
|
||||
|
||||
@@ -76,7 +76,8 @@ function getSat(title, file, lineNum)
|
||||
Type = "StaticScale",
|
||||
Scale = 1,
|
||||
}
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Planets/Earth/Satellites"
|
||||
}
|
||||
end
|
||||
|
||||
@@ -99,7 +100,7 @@ function getSatTrail(title, file, lineNum, per, color)
|
||||
Period = per,
|
||||
Resolution = 160
|
||||
},
|
||||
GuiName = "/Satellites/" .. trailName
|
||||
GuiPath = "/Solar System/Planets/Earth/Satellites"
|
||||
}
|
||||
end
|
||||
|
||||
|
||||
@@ -28,7 +28,8 @@ return {
|
||||
SourceFrame = "IAU_ENCELADUS",
|
||||
DestinationFrame = "GALACTIC"
|
||||
}
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Planets/Saturn/Moons"
|
||||
},
|
||||
{
|
||||
Name = "DioneTrail",
|
||||
@@ -43,6 +44,7 @@ return {
|
||||
Color = { 0.5, 0.3, 0.3 },
|
||||
Period = 66 / 24,
|
||||
Resolution = 1000
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Planets/Saturn/Moons"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,7 +28,8 @@ return {
|
||||
SourceFrame = "IAU_ENCELADUS",
|
||||
DestinationFrame = "GALACTIC"
|
||||
}
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Planets/Saturn/Moons"
|
||||
},
|
||||
{
|
||||
Name = "EnceladusTrail",
|
||||
@@ -43,6 +44,7 @@ return {
|
||||
Color = { 0.5, 0.3, 0.3 },
|
||||
Period = 33 / 24,
|
||||
Resolution = 1000
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Planets/Saturn/Moons"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,7 +28,8 @@ return {
|
||||
SourceFrame = "IAU_ENCELADUS",
|
||||
DestinationFrame = "GALACTIC"
|
||||
}
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Planets/Saturn/Moons"
|
||||
},
|
||||
{
|
||||
Name = "IapetusTrail",
|
||||
@@ -43,6 +44,7 @@ return {
|
||||
Color = { 0.5, 0.3, 0.3 },
|
||||
Period = 79,
|
||||
Resolution = 1000
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Planets/Saturn/Moons"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,7 +28,8 @@ return {
|
||||
SourceFrame = "IAU_MIMAS",
|
||||
DestinationFrame = "GALACTIC"
|
||||
}
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Planets/Saturn/Moons"
|
||||
},
|
||||
{
|
||||
Name = "MimasTrail",
|
||||
@@ -43,6 +44,7 @@ return {
|
||||
Color = { 0.5, 0.3, 0.3 },
|
||||
Period = 23 / 24,
|
||||
Resolution = 1000
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Planets/Saturn/Moons"
|
||||
}
|
||||
}
|
||||
@@ -28,7 +28,8 @@ return {
|
||||
SourceFrame = "IAU_ENCELADUS",
|
||||
DestinationFrame = "GALACTIC"
|
||||
}
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Planets/Saturn/Moons"
|
||||
},
|
||||
{
|
||||
Name = "RheaTrail",
|
||||
@@ -43,6 +44,7 @@ return {
|
||||
Color = { 0.5, 0.3, 0.3 },
|
||||
Period = 108 / 24,
|
||||
Resolution = 1000
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Planets/Saturn/Moons"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,7 +10,8 @@ return {
|
||||
Observer = "SUN",
|
||||
Kernels = "${OPENSPACE_DATA}/spice/de430_1850-2150.bsp"
|
||||
}
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Planets/Saturn"
|
||||
},
|
||||
|
||||
-- Saturn module
|
||||
@@ -38,7 +39,8 @@ return {
|
||||
SourceFrame = "IAU_SATURN",
|
||||
DestinationFrame = "GALACTIC"
|
||||
}
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Planets/Saturn"
|
||||
},
|
||||
{
|
||||
Name = "SaturnRings",
|
||||
@@ -48,7 +50,8 @@ return {
|
||||
Texture = "textures/saturn_rings.png",
|
||||
Size = 140220000,
|
||||
Offset = { 74500 / 140445.100671159, 1.0 } -- min / max extend
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Planets/Saturn"
|
||||
},
|
||||
-- SaturnTrail module
|
||||
{
|
||||
@@ -65,6 +68,7 @@ return {
|
||||
Period = 10746.94,
|
||||
Resolution = 1000,
|
||||
},
|
||||
Tag = { "planetTrail_solarSystem", "planetTrail_giants" }
|
||||
Tag = { "planetTrail_solarSystem", "planetTrail_giants" },
|
||||
GuiPath = "/Solar System/Planets/Saturn"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,7 +28,8 @@ return {
|
||||
SourceFrame = "IAU_ENCELADUS",
|
||||
DestinationFrame = "GALACTIC"
|
||||
}
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Planets/Saturn/Moons"
|
||||
},
|
||||
{
|
||||
Name = "TethysTrail",
|
||||
@@ -43,6 +44,7 @@ return {
|
||||
Color = { 0.5, 0.3, 0.3 },
|
||||
Period = 45 / 24,
|
||||
Resolution = 1000
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Planets/Saturn/Moons"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,7 +28,8 @@ return {
|
||||
SourceFrame = "IAU_ENCELADUS",
|
||||
DestinationFrame = "GALACTIC"
|
||||
}
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Planets/Saturn/Moons"
|
||||
},
|
||||
{
|
||||
Name = "TitanTrail",
|
||||
@@ -43,6 +44,7 @@ return {
|
||||
Color = { 0.5, 0.3, 0.3 },
|
||||
Period = 16,
|
||||
Resolution = 1000
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Planets/Saturn/Moons"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,5 +9,6 @@ return {
|
||||
Texture = "textures/halo.png",
|
||||
ColorMap = "denver_colorbv.cmap"
|
||||
},
|
||||
GuiPath = "/Milky Way/Stars"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,5 +9,6 @@ return {
|
||||
Texture = "textures/halo.png",
|
||||
ColorMap = "colorbv.cmap"
|
||||
},
|
||||
GuiPath = "/Milky Way/Stars"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,7 +39,8 @@ return {
|
||||
SourceFrame = "IAU_SUN",
|
||||
DestinationFrame = "GALACTIC"
|
||||
}
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Sun"
|
||||
},
|
||||
|
||||
{
|
||||
@@ -60,7 +61,8 @@ return {
|
||||
Observer = "SSB",
|
||||
Kernels = "${OPENSPACE_DATA}/spice/de430_1850-2150.bsp"
|
||||
}
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Sun"
|
||||
},
|
||||
|
||||
{
|
||||
@@ -79,6 +81,7 @@ return {
|
||||
Type = "StaticTranslation",
|
||||
Position = {0, 0, 0, 5}
|
||||
}
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Sun"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,7 +10,8 @@ return {
|
||||
Observer = "SUN",
|
||||
Kernels = "${OPENSPACE_DATA}/spice/de430_1850-2150.bsp"
|
||||
}
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Planets/Uranus"
|
||||
},
|
||||
-- RenderableGlobe module
|
||||
{
|
||||
@@ -37,7 +38,8 @@ return {
|
||||
}
|
||||
}
|
||||
},
|
||||
Tag = { "planet_solarSystem", "planet_giants" }
|
||||
Tag = { "planet_solarSystem", "planet_giants" },
|
||||
GuiPath = "/Solar System/Planets/Uranus"
|
||||
},
|
||||
-- Trail module
|
||||
{
|
||||
@@ -54,6 +56,7 @@ return {
|
||||
Period = 30588.740,
|
||||
Resolution = 1000
|
||||
},
|
||||
Tag = { "planetTrail_solarSystem", "planetTrail_giants" }
|
||||
Tag = { "planetTrail_solarSystem", "planetTrail_giants" },
|
||||
GuiPath = "/Solar System/Planets/Uranus"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,7 +10,8 @@ return {
|
||||
Observer = "SUN",
|
||||
Kernels = "${OPENSPACE_DATA}/spice/de430_1850-2150.bsp"
|
||||
}
|
||||
}
|
||||
},
|
||||
GuiPath = "/Solar System/Planets/Venus"
|
||||
},
|
||||
-- RenderableGlobe module
|
||||
{
|
||||
@@ -44,6 +45,7 @@ return {
|
||||
}
|
||||
},
|
||||
Tag = { "planet_solarSystem", "planet_terrestrial" },
|
||||
GuiPath = "/Solar System/Planets/Venus"
|
||||
},
|
||||
-- Trail module
|
||||
{
|
||||
@@ -60,6 +62,7 @@ return {
|
||||
Period = 224.695,
|
||||
Resolution = 1000
|
||||
},
|
||||
Tag = { "planetTrail_solarSystem", "planetTrail_terrestrial" }
|
||||
Tag = { "planetTrail_solarSystem", "planetTrail_terrestrial" },
|
||||
GuiPath = "/Solar System/Planets/Venus"
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
Submodule ext/ghoul updated: 4c16717c9f...9f9db85720
+1
-1
Submodule ext/sgct updated: f1c7ddb602...ee29d15894
@@ -55,13 +55,14 @@ public:
|
||||
const ghoul::Dictionary& dictionary);
|
||||
|
||||
ScreenSpaceRenderable(const ghoul::Dictionary& dictionary);
|
||||
virtual ~ScreenSpaceRenderable();
|
||||
virtual ~ScreenSpaceRenderable() = default;
|
||||
|
||||
virtual void render() = 0;
|
||||
virtual bool initialize() = 0;
|
||||
virtual bool deinitialize() = 0;
|
||||
virtual void render();
|
||||
|
||||
virtual bool initialize();
|
||||
virtual bool deinitialize();
|
||||
virtual void update() = 0;
|
||||
virtual bool isReady() const = 0;
|
||||
virtual bool isReady() const;
|
||||
bool isEnabled() const;
|
||||
|
||||
glm::vec3 euclideanPosition() const;
|
||||
|
||||
@@ -124,6 +124,8 @@ public:
|
||||
const Renderable* renderable() const;
|
||||
Renderable* renderable();
|
||||
|
||||
const std::string& guiPath() const;
|
||||
|
||||
static documentation::Documentation Documentation();
|
||||
|
||||
private:
|
||||
@@ -141,6 +143,8 @@ private:
|
||||
|
||||
std::unique_ptr<Renderable> _renderable;
|
||||
|
||||
std::string _guiPath;
|
||||
|
||||
// Transformation defined by ephemeris, rotation and scale
|
||||
struct {
|
||||
std::unique_ptr<Translation> translation;
|
||||
|
||||
@@ -44,8 +44,9 @@ public:
|
||||
void clearKeyframes();
|
||||
void setTimeNextFrame(Time t);
|
||||
size_t nKeyframes() const;
|
||||
|
||||
private:
|
||||
bool _shouldSetTime;
|
||||
bool _shouldSetTime = false;
|
||||
Time _timeNextFrame;
|
||||
Timeline<Time> _timeline;
|
||||
SyncData<Time> _currentTime;
|
||||
|
||||
@@ -35,7 +35,8 @@ set(HEADER_FILES
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/rendering/renderabletrailorbit.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/rendering/renderabletrailtrajectory.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/rendering/screenspaceframebuffer.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/rendering/screenspaceimage.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/rendering/screenspaceimagelocal.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/rendering/screenspaceimageonline.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/translation/statictranslation.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/rotation/staticrotation.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/scale/staticscale.h
|
||||
@@ -53,7 +54,8 @@ set(SOURCE_FILES
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/rendering/renderabletrailorbit.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/rendering/renderabletrailtrajectory.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/rendering/screenspaceframebuffer.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/rendering/screenspaceimage.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/rendering/screenspaceimagelocal.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/rendering/screenspaceimageonline.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/translation/statictranslation.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/rotation/staticrotation.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/scale/staticscale.cpp
|
||||
|
||||
@@ -39,7 +39,8 @@
|
||||
#include <modules/base/rendering/renderableplane.h>
|
||||
#include <modules/base/rendering/modelgeometry.h>
|
||||
#include <modules/base/rendering/multimodelgeometry.h>
|
||||
#include <modules/base/rendering/screenspaceimage.h>
|
||||
#include <modules/base/rendering/screenspaceimagelocal.h>
|
||||
#include <modules/base/rendering/screenspaceimageonline.h>
|
||||
#include <modules/base/rendering/screenspaceframebuffer.h>
|
||||
|
||||
#include <modules/base/translation/statictranslation.h>
|
||||
@@ -67,7 +68,8 @@ void BaseModule::internalInitialize() {
|
||||
auto fScreenSpaceRenderable = FactoryManager::ref().factory<ScreenSpaceRenderable>();
|
||||
ghoul_assert(fScreenSpaceRenderable, "ScreenSpaceRenderable factory was not created");
|
||||
|
||||
fScreenSpaceRenderable->registerClass<ScreenSpaceImage>("ScreenSpaceImage");
|
||||
fScreenSpaceRenderable->registerClass<ScreenSpaceImageLocal>("ScreenSpaceImageLocal");
|
||||
fScreenSpaceRenderable->registerClass<ScreenSpaceImageOnline>("ScreenSpaceImageOnline");
|
||||
fScreenSpaceRenderable->registerClass<ScreenSpaceFramebuffer>("ScreenSpaceFramebuffer");
|
||||
|
||||
auto fRenderable = FactoryManager::ref().factory<Renderable>();
|
||||
@@ -108,7 +110,8 @@ std::vector<documentation::Documentation> BaseModule::documentations() const {
|
||||
RenderableTrailOrbit::Documentation(),
|
||||
RenderableTrailTrajectory::Documentation(),
|
||||
ScreenSpaceFramebuffer::Documentation(),
|
||||
ScreenSpaceImage::Documentation(),
|
||||
ScreenSpaceImageLocal::Documentation(),
|
||||
ScreenSpaceImageOnline::Documentation(),
|
||||
StaticRotation::Documentation(),
|
||||
StaticScale::Documentation(),
|
||||
StaticTranslation::Documentation(),
|
||||
|
||||
@@ -76,29 +76,14 @@ ScreenSpaceFramebuffer::ScreenSpaceFramebuffer(const ghoul::Dictionary& dictiona
|
||||
ScreenSpaceFramebuffer::~ScreenSpaceFramebuffer() {}
|
||||
|
||||
bool ScreenSpaceFramebuffer::initialize() {
|
||||
_originalViewportSize = OsEng.windowWrapper().currentWindowResolution();
|
||||
|
||||
createPlane();
|
||||
createShaders();
|
||||
ScreenSpaceRenderable::initialize();
|
||||
createFragmentbuffer();
|
||||
|
||||
return isReady();
|
||||
}
|
||||
|
||||
bool ScreenSpaceFramebuffer::deinitialize() {
|
||||
glDeleteVertexArrays(1, &_quad);
|
||||
_quad = 0;
|
||||
|
||||
glDeleteBuffers(1, &_vertexPositionBuffer);
|
||||
_vertexPositionBuffer = 0;
|
||||
|
||||
_texture = nullptr;
|
||||
|
||||
RenderEngine& renderEngine = OsEng.renderEngine();
|
||||
if (_shader) {
|
||||
renderEngine.removeRenderProgram(_shader);
|
||||
_shader = nullptr;
|
||||
}
|
||||
ScreenSpaceRenderable::deinitialize();
|
||||
|
||||
_framebuffer->detachAll();
|
||||
removeAllRenderFunctions();
|
||||
|
||||
@@ -31,8 +31,6 @@
|
||||
#include <ghoul/opengl/framebufferobject.h>
|
||||
#include <ghoul/opengl/textureunit.h>
|
||||
|
||||
#include <modules/base/rendering/screenspaceimage.h>
|
||||
|
||||
namespace openspace {
|
||||
|
||||
namespace documentation { struct Documentation; }
|
||||
|
||||
@@ -0,0 +1,127 @@
|
||||
/*****************************************************************************************
|
||||
* *
|
||||
* OpenSpace *
|
||||
* *
|
||||
* Copyright (c) 2014-2017 *
|
||||
* *
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this *
|
||||
* software and associated documentation files (the "Software"), to deal in the Software *
|
||||
* without restriction, including without limitation the rights to use, copy, modify, *
|
||||
* merge, publish, distribute, sublicense, and/or sell copies of the Software, and to *
|
||||
* permit persons to whom the Software is furnished to do so, subject to the following *
|
||||
* conditions: *
|
||||
* *
|
||||
* The above copyright notice and this permission notice shall be included in all copies *
|
||||
* or substantial portions of the Software. *
|
||||
* *
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, *
|
||||
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A *
|
||||
* PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT *
|
||||
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF *
|
||||
* CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE *
|
||||
* OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
|
||||
****************************************************************************************/
|
||||
|
||||
#include <modules/base/rendering/screenspaceimagelocal.h>
|
||||
|
||||
#include <openspace/documentation/documentation.h>
|
||||
#include <openspace/documentation/verifier.h>
|
||||
|
||||
#include <openspace/engine/openspaceengine.h>
|
||||
#include <openspace/engine/wrapper/windowwrapper.h>
|
||||
#include <openspace/rendering/renderengine.h>
|
||||
|
||||
#include <ghoul/opengl/programobject.h>
|
||||
#include <ghoul/io/texture/texturereader.h>
|
||||
#include <ghoul/filesystem/filesystem>
|
||||
#include <ghoul/opengl/textureconversion.h>
|
||||
|
||||
namespace {
|
||||
const char* KeyName = "Name";
|
||||
const char* KeyUrl = "URL";
|
||||
|
||||
static const openspace::properties::Property::PropertyInfo TexturePathInfo = {
|
||||
"TexturePath",
|
||||
"Texture path",
|
||||
"Sets the path of the texture that is displayed on this screen space plane. If "
|
||||
"this value is changed, the image at the new path will automatically be loaded "
|
||||
"and displayed. The size of the image will also automatically set the default "
|
||||
"size of this plane."
|
||||
};
|
||||
} // namespace
|
||||
|
||||
namespace openspace {
|
||||
|
||||
documentation::Documentation ScreenSpaceImageLocal::Documentation() {
|
||||
using namespace openspace::documentation;
|
||||
return {
|
||||
"ScreenSpace Local Image",
|
||||
"base_screenspace_image_local",
|
||||
{
|
||||
{
|
||||
KeyName,
|
||||
new StringVerifier,
|
||||
Optional::Yes,
|
||||
"Specifies the GUI name of the ScreenspaceImage"
|
||||
},
|
||||
{
|
||||
TexturePathInfo.identifier,
|
||||
new StringVerifier,
|
||||
Optional::Yes,
|
||||
TexturePathInfo.description
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
ScreenSpaceImageLocal::ScreenSpaceImageLocal(const ghoul::Dictionary& dictionary)
|
||||
: ScreenSpaceRenderable(dictionary)
|
||||
, _texturePath(TexturePathInfo)
|
||||
, _textureIsDirty(false)
|
||||
{
|
||||
documentation::testSpecificationAndThrow(
|
||||
Documentation(),
|
||||
dictionary,
|
||||
"ScreenSpaceImageLocal"
|
||||
);
|
||||
|
||||
if (dictionary.hasKey(KeyName)) {
|
||||
setName(dictionary.value<std::string>(KeyName));
|
||||
}
|
||||
else {
|
||||
static int id = 0;
|
||||
setName("ScreenSpaceImageLocal " + std::to_string(id));
|
||||
++id;
|
||||
}
|
||||
|
||||
_texturePath.onChange([this]() { _textureIsDirty = true; });
|
||||
addProperty(_texturePath);
|
||||
|
||||
if (dictionary.hasKey(TexturePathInfo.identifier)) {
|
||||
_texturePath = dictionary.value<std::string>(TexturePathInfo.identifier);
|
||||
}
|
||||
}
|
||||
|
||||
void ScreenSpaceImageLocal::update() {
|
||||
if (_textureIsDirty && !_texturePath.value().empty()) {
|
||||
std::unique_ptr<ghoul::opengl::Texture> texture =
|
||||
ghoul::io::TextureReader::ref().loadTexture(absPath(_texturePath));
|
||||
|
||||
if (texture) {
|
||||
// Images don't need to start on 4-byte boundaries, for example if the
|
||||
// image is only RGB
|
||||
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
|
||||
|
||||
texture->uploadTexture();
|
||||
|
||||
// Textures of planets looks much smoother with AnisotropicMipMap rather than linear
|
||||
texture->setFilter(ghoul::opengl::Texture::FilterMode::Linear);
|
||||
|
||||
_texture = std::move(texture);
|
||||
_textureIsDirty = false;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace openspace
|
||||
@@ -22,55 +22,32 @@
|
||||
* OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
|
||||
****************************************************************************************/
|
||||
|
||||
#include <openspace/engine/moduleengine.h>
|
||||
#ifndef __OPENSPACE_MODULE_BASE___SCREENSPACEIMAGELOCAL___H__
|
||||
#define __OPENSPACE_MODULE_BASE___SCREENSPACEIMAGELOCAL___H__
|
||||
|
||||
namespace openspace::gui::luascriptfunctions {
|
||||
|
||||
/**
|
||||
* \ingroup LuaScripts
|
||||
* show():
|
||||
* Shows the GUI
|
||||
*/
|
||||
int show(lua_State* L) {
|
||||
int nArguments = lua_gettop(L);
|
||||
if (nArguments != 0) {
|
||||
return luaL_error(L, "Expected %i arguments, got %i", 0, nArguments);
|
||||
}
|
||||
#include <openspace/rendering/screenspacerenderable.h>
|
||||
|
||||
OsEng.moduleEngine().module<ImGUIModule>()->gui.setEnabled(true);
|
||||
return 0;
|
||||
}
|
||||
#include <openspace/properties/stringproperty.h>
|
||||
|
||||
/**
|
||||
* \ingroup LuaScripts
|
||||
* hide():
|
||||
* Hides the console
|
||||
*/
|
||||
int hide(lua_State* L) {
|
||||
int nArguments = lua_gettop(L);
|
||||
if (nArguments != 0) {
|
||||
return luaL_error(L, "Expected %i arguments, got %i", 0, nArguments);
|
||||
}
|
||||
#include <ghoul/opengl/texture.h>
|
||||
|
||||
namespace openspace {
|
||||
|
||||
namespace documentation { struct Documentation; }
|
||||
|
||||
OsEng.moduleEngine().module<ImGUIModule>()->gui.setEnabled(false);
|
||||
return 0;
|
||||
}
|
||||
class ScreenSpaceImageLocal : public ScreenSpaceRenderable {
|
||||
public:
|
||||
ScreenSpaceImageLocal(const ghoul::Dictionary& dictionary);
|
||||
|
||||
/**
|
||||
* \ingroup LuaScripts
|
||||
* toggle():
|
||||
* Toggles the console
|
||||
*/
|
||||
int toggle(lua_State* L) {
|
||||
int nArguments = lua_gettop(L);
|
||||
if (nArguments != 0) {
|
||||
return luaL_error(L, "Expected %i arguments, got %i", 0, nArguments);
|
||||
}
|
||||
void update() override;
|
||||
|
||||
OsEng.moduleEngine().module<ImGUIModule>()->gui.setEnabled(
|
||||
!OsEng.moduleEngine().module<ImGUIModule>()->gui.isEnabled()
|
||||
);
|
||||
return 0;
|
||||
}
|
||||
static documentation::Documentation Documentation();
|
||||
|
||||
} // namespace openspace::gui::luascriptfunctions
|
||||
private:
|
||||
properties::StringProperty _texturePath;
|
||||
bool _textureIsDirty;
|
||||
};
|
||||
|
||||
} // namespace openspace
|
||||
|
||||
#endif // __OPENSPACE_MODULE_BASE___SCREENSPACEIMAGELOCAL___H__
|
||||
+47
-110
@@ -22,7 +22,7 @@
|
||||
* OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
|
||||
****************************************************************************************/
|
||||
|
||||
#include <modules/base/rendering/screenspaceimage.h>
|
||||
#include <modules/base/rendering/screenspaceimageonline.h>
|
||||
|
||||
#include <openspace/documentation/documentation.h>
|
||||
#include <openspace/documentation/verifier.h>
|
||||
@@ -38,12 +38,11 @@
|
||||
namespace {
|
||||
const char* KeyName = "Name";
|
||||
const char* KeyTexturePath = "TexturePath";
|
||||
const char* KeyUrl = "URL";
|
||||
|
||||
static const openspace::properties::Property::PropertyInfo TexturePathInfo = {
|
||||
"TexturePath",
|
||||
"Texture path",
|
||||
"Sets the path of the texture that is displayed on this screen space plane. If "
|
||||
"Sets the URL of the texture that is displayed on this screen space plane. If "
|
||||
"this value is changed, the image at the new path will automatically be loaded "
|
||||
"and displayed. The size of the image will also automatically set the default "
|
||||
"size of this plane."
|
||||
@@ -52,11 +51,11 @@ namespace {
|
||||
|
||||
namespace openspace {
|
||||
|
||||
documentation::Documentation ScreenSpaceImage::Documentation() {
|
||||
documentation::Documentation ScreenSpaceImageOnline::Documentation() {
|
||||
using namespace openspace::documentation;
|
||||
return {
|
||||
"ScreenSpace Image",
|
||||
"base_screenspace_image",
|
||||
"ScreenSpace Online Image",
|
||||
"base_screenspace_image_online",
|
||||
{
|
||||
{
|
||||
KeyName,
|
||||
@@ -68,16 +67,14 @@ documentation::Documentation ScreenSpaceImage::Documentation() {
|
||||
KeyTexturePath,
|
||||
new StringVerifier,
|
||||
Optional::Yes,
|
||||
"Specifies the image that is shown on the screenspace-aligned plane. If "
|
||||
"this value is set and the URL is not, the disk image is used."
|
||||
TexturePathInfo.description
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
ScreenSpaceImage::ScreenSpaceImage(const ghoul::Dictionary& dictionary)
|
||||
ScreenSpaceImageOnline::ScreenSpaceImageOnline(const ghoul::Dictionary& dictionary)
|
||||
: ScreenSpaceRenderable(dictionary)
|
||||
, _downloadImage(false)
|
||||
, _textureIsDirty(false)
|
||||
, _texturePath(TexturePathInfo)
|
||||
{
|
||||
@@ -92,138 +89,78 @@ ScreenSpaceImage::ScreenSpaceImage(const ghoul::Dictionary& dictionary)
|
||||
}
|
||||
else {
|
||||
static int id = 0;
|
||||
setName("ScreenSpaceImage " + std::to_string(id));
|
||||
setName("ScreenSpaceImageOnline " + std::to_string(id));
|
||||
++id;
|
||||
}
|
||||
|
||||
std::string texturePath;
|
||||
if (dictionary.getValue(KeyTexturePath, texturePath)) {
|
||||
_texturePath = dictionary.value<std::string>(KeyTexturePath);
|
||||
}
|
||||
|
||||
if (dictionary.getValue(KeyUrl, _url)) {
|
||||
_downloadImage = true;
|
||||
}
|
||||
|
||||
_texturePath.onChange([this]() { _textureIsDirty = true; });
|
||||
addProperty(_texturePath);
|
||||
}
|
||||
|
||||
bool ScreenSpaceImage::initialize() {
|
||||
_originalViewportSize = OsEng.windowWrapper().currentWindowResolution();
|
||||
|
||||
createPlane();
|
||||
createShaders();
|
||||
updateTexture();
|
||||
|
||||
return isReady();
|
||||
}
|
||||
|
||||
bool ScreenSpaceImage::deinitialize() {
|
||||
glDeleteVertexArrays(1, &_quad);
|
||||
_quad = 0;
|
||||
|
||||
glDeleteBuffers(1, &_vertexPositionBuffer);
|
||||
_vertexPositionBuffer = 0;
|
||||
|
||||
_texturePath = "";
|
||||
_texture = nullptr;
|
||||
|
||||
if (_shader) {
|
||||
OsEng.renderEngine().removeRenderProgram(_shader);
|
||||
_shader = nullptr;
|
||||
std::string texturePath;
|
||||
if (dictionary.hasKey(TexturePathInfo.identifier)) {
|
||||
_texturePath = dictionary.value<std::string>(TexturePathInfo.identifier);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void ScreenSpaceImage::render() {
|
||||
draw(rotationMatrix() * translationMatrix() * scaleMatrix());
|
||||
}
|
||||
void ScreenSpaceImageOnline::update() {
|
||||
if (_textureIsDirty) {
|
||||
if (!_imageFuture.valid()) {
|
||||
std::future<DownloadManager::MemoryFile> future = downloadImageToMemory(_texturePath);
|
||||
if (future.valid()) {
|
||||
_imageFuture = std::move(future);
|
||||
}
|
||||
}
|
||||
|
||||
void ScreenSpaceImage::update() {
|
||||
bool download = _downloadImage ? (_futureImage.valid() && DownloadManager::futureReady(_futureImage)) : true;
|
||||
if (download && _textureIsDirty) {
|
||||
loadTexture();
|
||||
}
|
||||
}
|
||||
if (_imageFuture.valid() && DownloadManager::futureReady(_imageFuture)) {
|
||||
DownloadManager::MemoryFile imageFile = _imageFuture.get();
|
||||
|
||||
bool ScreenSpaceImage::isReady() const {
|
||||
return _shader && _texture;
|
||||
}
|
||||
if (imageFile.corrupted) {
|
||||
LERRORC(
|
||||
"ScreenSpaceImageOnline",
|
||||
"Error loading image from URL '" << _texturePath << "'"
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
void ScreenSpaceImage::loadTexture() {
|
||||
std::unique_ptr<ghoul::opengl::Texture> texture = nullptr;
|
||||
if (!_downloadImage)
|
||||
texture = loadFromDisk();
|
||||
else
|
||||
texture = loadFromMemory();
|
||||
std::unique_ptr<ghoul::opengl::Texture> texture =
|
||||
ghoul::io::TextureReader::ref().loadTexture(
|
||||
reinterpret_cast<void*>(imageFile.buffer),
|
||||
imageFile.size,
|
||||
imageFile.format
|
||||
);
|
||||
|
||||
if (texture) {
|
||||
// LDEBUG("Loaded texture from '" << absPath(_texturePath) << "'");
|
||||
texture->uploadTexture();
|
||||
if (texture) {
|
||||
// Images don't need to start on 4-byte boundaries, for example if the
|
||||
// image is only RGB
|
||||
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
|
||||
|
||||
// Textures of planets looks much smoother with AnisotropicMipMap rather than linear
|
||||
texture->setFilter(ghoul::opengl::Texture::FilterMode::Linear);
|
||||
texture->uploadTexture();
|
||||
|
||||
_texture = std::move(texture);
|
||||
_textureIsDirty = false;
|
||||
}
|
||||
}
|
||||
// Textures of planets looks much smoother with AnisotropicMipMap rather than linear
|
||||
texture->setFilter(ghoul::opengl::Texture::FilterMode::Linear);
|
||||
|
||||
void ScreenSpaceImage::updateTexture() {
|
||||
if (!_downloadImage) {
|
||||
loadTexture();
|
||||
} else {
|
||||
if (_futureImage.valid())
|
||||
return;
|
||||
|
||||
std::future<DownloadManager::MemoryFile> future = downloadImageToMemory(_url);
|
||||
if (future.valid()) {
|
||||
_futureImage = std::move(future);
|
||||
_texture = std::move(texture);
|
||||
_textureIsDirty = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
std::unique_ptr<ghoul::opengl::Texture> ScreenSpaceImage::loadFromDisk() {
|
||||
if (_texturePath.value() != "")
|
||||
return (ghoul::io::TextureReader::ref().loadTexture(absPath(_texturePath.value())));
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
std::unique_ptr<ghoul::opengl::Texture> ScreenSpaceImage::loadFromMemory() {
|
||||
if (_futureImage.valid() && DownloadManager::futureReady(_futureImage)) {
|
||||
DownloadManager::MemoryFile imageFile = _futureImage.get();
|
||||
|
||||
if (imageFile.corrupted) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
return (ghoul::io::TextureReader::ref().loadTexture(
|
||||
reinterpret_cast<void*>(imageFile.buffer),
|
||||
imageFile.size,
|
||||
imageFile.format)
|
||||
);
|
||||
}
|
||||
else {
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
std::future<DownloadManager::MemoryFile> ScreenSpaceImage::downloadImageToMemory(
|
||||
std::future<DownloadManager::MemoryFile> ScreenSpaceImageOnline::downloadImageToMemory(
|
||||
std::string url)
|
||||
{
|
||||
return OsEng.downloadManager().fetchFile(
|
||||
url,
|
||||
[url](const DownloadManager::MemoryFile&) {
|
||||
LDEBUGC(
|
||||
"ScreenSpaceImage",
|
||||
"ScreenSpaceImageOnline",
|
||||
"Download to memory finished for screen space image"
|
||||
);
|
||||
},
|
||||
[url](const std::string& err) {
|
||||
LDEBUGC(
|
||||
"ScreenSpaceImage",
|
||||
"ScreenSpaceImageOnline",
|
||||
"Download to memory failer for screen space image: " + err
|
||||
);
|
||||
}
|
||||
+8
-21
@@ -22,8 +22,8 @@
|
||||
* OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
|
||||
****************************************************************************************/
|
||||
|
||||
#ifndef __OPENSPACE_MODULE_BASE___SCREENSPACEIMAGE___H__
|
||||
#define __OPENSPACE_MODULE_BASE___SCREENSPACEIMAGE___H__
|
||||
#ifndef __OPENSPACE_MODULE_BASE___SCREENSPACEIMAGEONLINE___H__
|
||||
#define __OPENSPACE_MODULE_BASE___SCREENSPACEIMAGEONLINE___H__
|
||||
|
||||
#include <openspace/rendering/screenspacerenderable.h>
|
||||
|
||||
@@ -36,37 +36,24 @@ namespace openspace {
|
||||
|
||||
namespace documentation { struct Documentation; }
|
||||
|
||||
class ScreenSpaceImage : public ScreenSpaceRenderable {
|
||||
class ScreenSpaceImageOnline : public ScreenSpaceRenderable {
|
||||
public:
|
||||
ScreenSpaceImage(const ghoul::Dictionary& dictionary);
|
||||
ScreenSpaceImageOnline(const ghoul::Dictionary& dictionary);
|
||||
|
||||
bool initialize() override;
|
||||
bool deinitialize() override;
|
||||
void render() override;
|
||||
void update() override;
|
||||
bool isReady() const override;
|
||||
|
||||
static documentation::Documentation Documentation();
|
||||
|
||||
protected:
|
||||
void loadTexture();
|
||||
void updateTexture();
|
||||
|
||||
std::string _url;
|
||||
bool _downloadImage;
|
||||
bool _textureIsDirty;
|
||||
std::future<DownloadManager::MemoryFile> _futureImage;
|
||||
|
||||
private:
|
||||
std::future<DownloadManager::MemoryFile> downloadImageToMemory(std::string url);
|
||||
std::unique_ptr<ghoul::opengl::Texture> loadFromDisk();
|
||||
std::unique_ptr<ghoul::opengl::Texture> loadFromMemory();
|
||||
|
||||
std::future<DownloadManager::MemoryFile> _imageFuture;
|
||||
properties::StringProperty _texturePath;
|
||||
|
||||
|
||||
private:
|
||||
std::future<DownloadManager::MemoryFile> downloadImageToMemory(std::string url);
|
||||
};
|
||||
|
||||
} // namespace openspace
|
||||
|
||||
#endif // __OPENSPACE_MODULE_BASE___SCREENSPACEIMAGE___H__
|
||||
#endif // __OPENSPACE_MODULE_BASE___SCREENSPACEIMAGEONLINE___H__
|
||||
@@ -24,7 +24,7 @@
|
||||
|
||||
#version __CONTEXT__
|
||||
|
||||
layout(location = 0) in vec4 in_position;
|
||||
layout(location = 0) in vec2 in_position;
|
||||
layout(location = 1) in vec2 in_st;
|
||||
|
||||
out vec2 vs_st;
|
||||
@@ -36,6 +36,6 @@ uniform mat4 ViewProjectionMatrix;
|
||||
|
||||
void main() {
|
||||
vs_st = in_st;
|
||||
vs_position = ViewProjectionMatrix * ModelTransform * in_position;
|
||||
vs_position = ViewProjectionMatrix * ModelTransform * vec4(in_position, 0.0, 1.0);
|
||||
gl_Position = vec4(vs_position);
|
||||
}
|
||||
|
||||
@@ -158,7 +158,7 @@ void RenderableGalaxy::initialize() {
|
||||
_aspect = static_cast<glm::vec3>(_volumeDimensions);
|
||||
_aspect = _aspect / std::max(std::max(_aspect.x, _aspect.y), _aspect.z);
|
||||
|
||||
RawVolumeReader<glm::tvec4<GLfloat>> reader(_volumeFilename, _volumeDimensions);
|
||||
volume::RawVolumeReader<glm::tvec4<GLfloat>> reader(_volumeFilename, _volumeDimensions);
|
||||
_volume = reader.read();
|
||||
|
||||
_texture = std::make_unique<ghoul::opengl::Texture>(
|
||||
|
||||
@@ -63,7 +63,7 @@ private:
|
||||
std::string _pointsFilename;
|
||||
|
||||
std::unique_ptr<GalaxyRaycaster> _raycaster;
|
||||
std::unique_ptr<RawVolume<glm::tvec4<GLfloat>>> _volume;
|
||||
std::unique_ptr<volume::RawVolume<glm::tvec4<GLfloat>>> _volume;
|
||||
std::unique_ptr<ghoul::opengl::Texture> _texture;
|
||||
glm::mat4 _pointTransform;
|
||||
glm::vec3 _aspect;
|
||||
|
||||
@@ -83,6 +83,8 @@ std::string MilkywayConversionTask::description()
|
||||
}
|
||||
|
||||
void MilkywayConversionTask::perform(const Task::ProgressCallback& progressCallback) {
|
||||
using namespace openspace::volume;
|
||||
|
||||
std::vector<std::string> filenames;
|
||||
for (int i = 0; i < _inNSlices; i++) {
|
||||
filenames.push_back(_inFilenamePrefix + std::to_string(i + _inFirstIndex) + _inFilenameSuffix);
|
||||
|
||||
@@ -32,11 +32,11 @@ set(HEADER_FILES
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/include/guifilepathcomponent.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/include/guiglobebrowsingcomponent.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/include/guihelpcomponent.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/include/guiorigincomponent.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/include/guimissioncomponent.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/include/guiperformancecomponent.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/include/guiparallelcomponent.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/include/guipropertycomponent.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/include/guitimecomponent.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/include/guispacetimecomponent.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/include/guiiswacomponent.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/include/imgui_include.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/include/renderproperties.h
|
||||
@@ -45,16 +45,15 @@ source_group("Header Files" FILES ${HEADER_FILES})
|
||||
|
||||
set(SOURCE_FILES
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/src/gui.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/src/gui_lua.inl
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/src/guicomponent.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/src/guifilepathcomponent.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/src/guiglobebrowsingcomponent.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/src/guihelpcomponent.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/src/guiorigincomponent.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/src/guimissioncomponent.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/src/guiperformancecomponent.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/src/guiparallelcomponent.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/src/guipropertycomponent.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/src/guitimecomponent.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/src/guispacetimecomponent.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/src/guiiswacomponent.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/src/renderproperties.cpp
|
||||
|
||||
|
||||
@@ -99,6 +99,27 @@ ImGUIModule::ImGUIModule() : OpenSpaceModule(Name) {
|
||||
return res;
|
||||
}
|
||||
);
|
||||
|
||||
gui._featuredProperties.setSource(
|
||||
[](){
|
||||
std::vector<SceneGraphNode*> nodes =
|
||||
OsEng.renderEngine().scene()->allSceneGraphNodes();
|
||||
|
||||
nodes.erase(
|
||||
std::remove_if(
|
||||
nodes.begin(),
|
||||
nodes.end(),
|
||||
[](SceneGraphNode* n) {
|
||||
const std::vector<std::string>& tags = n->tags();
|
||||
auto it = std::find(tags.begin(), tags.end(), "GUI.Interesting");
|
||||
return it == tags.end();
|
||||
}
|
||||
),
|
||||
nodes.end()
|
||||
);
|
||||
return std::vector<properties::PropertyOwner*>(nodes.begin(), nodes.end());
|
||||
}
|
||||
);
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
@@ -29,15 +29,15 @@
|
||||
#include <modules/imgui/include/guifilepathcomponent.h>
|
||||
#include <modules/imgui/include/guiglobebrowsingcomponent.h>
|
||||
#include <modules/imgui/include/guihelpcomponent.h>
|
||||
#include <modules/imgui/include/guiiswacomponent.h>
|
||||
#include <modules/imgui/include/guimissioncomponent.h>
|
||||
#include <modules/imgui/include/guiparallelcomponent.h>
|
||||
#include <modules/imgui/include/guiperformancecomponent.h>
|
||||
#include <modules/imgui/include/guipropertycomponent.h>
|
||||
#include <modules/imgui/include/guiorigincomponent.h>
|
||||
#include <modules/imgui/include/guitimecomponent.h>
|
||||
#include <modules/imgui/include/guiiswacomponent.h>
|
||||
#include <modules/imgui/include/guiparallelcomponent.h>
|
||||
#include <openspace/scripting/scriptengine.h>
|
||||
#include <openspace/properties/property.h>
|
||||
#include <modules/imgui/include/guispacetimecomponent.h>
|
||||
|
||||
#include <openspace/properties/property.h>
|
||||
#include <openspace/scripting/scriptengine.h>
|
||||
#include <openspace/util/keys.h>
|
||||
#include <openspace/util/mouse.h>
|
||||
|
||||
@@ -70,17 +70,18 @@ public:
|
||||
#ifdef GLOBEBROWSING_USE_GDAL
|
||||
GuiGlobeBrowsingComponent _globeBrowsing;
|
||||
#endif // GLOBEBROWSING_USE_GDAL
|
||||
GuiOriginComponent _origin;
|
||||
GuiPerformanceComponent _performance;
|
||||
GuiPropertyComponent _globalProperty;
|
||||
GuiPropertyComponent _property;
|
||||
GuiPropertyComponent _screenSpaceProperty;
|
||||
GuiPropertyComponent _virtualProperty;
|
||||
GuiTimeComponent _time;
|
||||
GuiSpaceTimeComponent _spaceTime;
|
||||
GuiMissionComponent _mission;
|
||||
#ifdef OPENSPACE_MODULE_ISWA_ENABLED
|
||||
GuiIswaComponent _iswa;
|
||||
#endif // OPENSPACE_MODULE_ISWA_ENABLED
|
||||
GuiParallelComponent _parallel;
|
||||
GuiPropertyComponent _featuredProperties;
|
||||
|
||||
bool _showInternals;
|
||||
|
||||
@@ -91,6 +92,8 @@ private:
|
||||
|
||||
};
|
||||
|
||||
void CaptionText(const char* text);
|
||||
|
||||
} // namespace openspace::gui
|
||||
|
||||
#endif // __OPENSPACE_MODULE_IMGUI___GUI___H__
|
||||
|
||||
+5
-5
@@ -22,20 +22,20 @@
|
||||
* OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
|
||||
****************************************************************************************/
|
||||
|
||||
#ifndef __OPENSPACE_MODULE_IMGUI___GUIORIGINCOMPONENT___H__
|
||||
#define __OPENSPACE_MODULE_IMGUI___GUIORIGINCOMPONENT___H__
|
||||
#ifndef __OPENSPACE_MODULE_IMGUI___GUIMISSIONCOMPONENT___H__
|
||||
#define __OPENSPACE_MODULE_IMGUI___GUIMISSIONCOMPONENT___H__
|
||||
|
||||
#include <modules/imgui/include/guicomponent.h>
|
||||
|
||||
namespace openspace::gui {
|
||||
|
||||
class GuiOriginComponent : public GuiComponent {
|
||||
class GuiMissionComponent: public GuiComponent {
|
||||
public:
|
||||
GuiOriginComponent();
|
||||
GuiMissionComponent();
|
||||
|
||||
void render() override;
|
||||
};
|
||||
|
||||
} // namespace openspace::gui
|
||||
|
||||
#endif // __OPENSPACE_MODULE_IMGUI___GUIORIGINCOMPONENT___H__
|
||||
#endif // __OPENSPACE_MODULE_IMGUI___GUIMISSIONCOMPONENT___H__
|
||||
@@ -29,6 +29,8 @@
|
||||
|
||||
#include <openspace/properties/property.h>
|
||||
|
||||
#include <ghoul/misc/boolean.h>
|
||||
|
||||
#include <functional>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
@@ -44,7 +46,12 @@ class GuiPropertyComponent : public GuiComponent {
|
||||
public:
|
||||
using SourceFunction = std::function<std::vector<properties::PropertyOwner*>()>;
|
||||
|
||||
GuiPropertyComponent(std::string name);
|
||||
using UseTreeLayout = ghoul::Boolean;
|
||||
using IsTopLevelWindow = ghoul::Boolean;
|
||||
|
||||
|
||||
GuiPropertyComponent(std::string name, UseTreeLayout useTree = UseTreeLayout::No,
|
||||
IsTopLevelWindow isTopLevel = IsTopLevelWindow::No);
|
||||
|
||||
// This is the function that evaluates to the list of Propertyowners that this
|
||||
// component should render
|
||||
@@ -66,6 +73,9 @@ protected:
|
||||
/// are regular, i.e., not containing wildcards, regex, or groups
|
||||
/// This variable only has an impact on which \c setPropertyValue function is called
|
||||
bool _hasOnlyRegularProperties = false;
|
||||
UseTreeLayout _useTreeLayout;
|
||||
bool _currentUseTreeLayout;
|
||||
IsTopLevelWindow _isTopLevel;
|
||||
};
|
||||
|
||||
} // namespace openspace::gui
|
||||
|
||||
+10
-48
@@ -22,58 +22,20 @@
|
||||
* OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
|
||||
****************************************************************************************/
|
||||
|
||||
#include <modules/imgui/include/guiorigincomponent.h>
|
||||
#ifndef __OPENSPACE_MODULE_IMGUI___GUISPACETIMECOMPONENT___H__
|
||||
#define __OPENSPACE_MODULE_IMGUI___GUISPACETIMECOMPONENT___H__
|
||||
|
||||
#include <modules/imgui/include/imgui_include.h>
|
||||
|
||||
#include <openspace/engine/openspaceengine.h>
|
||||
#include <openspace/interaction/navigationhandler.h>
|
||||
#include <openspace/rendering/renderengine.h>
|
||||
#include <openspace/scene/scenegraphnode.h>
|
||||
#include <openspace/scene/scene.h>
|
||||
|
||||
#include <ghoul/misc/assert.h>
|
||||
#include <modules/imgui/include/guicomponent.h>
|
||||
|
||||
namespace openspace::gui {
|
||||
|
||||
GuiOriginComponent::GuiOriginComponent()
|
||||
: GuiComponent("Origin")
|
||||
{}
|
||||
class GuiSpaceTimeComponent : public GuiComponent {
|
||||
public:
|
||||
GuiSpaceTimeComponent();
|
||||
|
||||
void GuiOriginComponent::render() {
|
||||
SceneGraphNode* currentFocus = OsEng.navigationHandler().focusNode();
|
||||
|
||||
std::vector<SceneGraphNode*> nodes =
|
||||
OsEng.renderEngine().scene()->allSceneGraphNodes();
|
||||
|
||||
std::sort(
|
||||
nodes.begin(),
|
||||
nodes.end(),
|
||||
[](SceneGraphNode* lhs, SceneGraphNode* rhs) {
|
||||
return lhs->name() < rhs->name();
|
||||
}
|
||||
);
|
||||
std::string nodeNames = "";
|
||||
for (SceneGraphNode* n : nodes) {
|
||||
nodeNames += n->name() + '\0';
|
||||
}
|
||||
|
||||
auto iCurrentFocus = std::find(nodes.begin(), nodes.end(), currentFocus);
|
||||
if (!nodes.empty()) {
|
||||
// Only check if we found the current focus node if we have any nodes at all
|
||||
// only then it would be a real error
|
||||
ghoul_assert(iCurrentFocus != nodes.end(), "Focus node not found");
|
||||
}
|
||||
int currentPosition = static_cast<int>(std::distance(nodes.begin(), iCurrentFocus));
|
||||
|
||||
bool hasChanged = ImGui::Combo("Origin", ¤tPosition, nodeNames.c_str());
|
||||
if (hasChanged) {
|
||||
OsEng.scriptEngine().queueScript(
|
||||
"openspace.setPropertyValue('NavigationHandler.Origin', '" +
|
||||
nodes[currentPosition]->name() + "');",
|
||||
scripting::ScriptEngine::RemoteScripting::Yes
|
||||
);
|
||||
}
|
||||
}
|
||||
void render() override;
|
||||
};
|
||||
|
||||
} // namespace openspace::gui
|
||||
|
||||
#endif // __OPENSPACE_MODULE_IMGUI___GUISPACETIMECOMPONENT___H__
|
||||
+127
-42
@@ -27,6 +27,7 @@
|
||||
#include <modules/imgui/imguimodule.h>
|
||||
|
||||
#include <openspace/engine/openspaceengine.h>
|
||||
#include <openspace/mission/missionmanager.h>
|
||||
#include <openspace/rendering/renderengine.h>
|
||||
#include <openspace/util/keys.h>
|
||||
|
||||
@@ -39,15 +40,15 @@
|
||||
|
||||
#include <modules/imgui/include/imgui_include.h>
|
||||
|
||||
#include "gui_lua.inl"
|
||||
|
||||
//#define SHOW_IMGUI_HELPERS
|
||||
|
||||
namespace {
|
||||
|
||||
const char* _loggerCat = "GUI";
|
||||
const char* configurationFile = "imgui.ini";
|
||||
const char* GuiFont = "${FONTS}/Roboto/Roboto-Regular.ttf";
|
||||
//const char* GuiFont = "${FONTS}/ubuntu/Ubuntu-Regular.ttf";
|
||||
const char* GuiFont = "${FONTS}/arimo/Arimo-Regular.ttf";
|
||||
const float FontSize = 14.f;
|
||||
const ImVec2 size = ImVec2(350, 500);
|
||||
|
||||
//GLuint fontTex = 0;
|
||||
@@ -60,6 +61,8 @@ std::unique_ptr<ghoul::opengl::ProgramObject> _program;
|
||||
std::unique_ptr<ghoul::opengl::Texture> _fontTexture;
|
||||
char* iniFileBuffer = nullptr;
|
||||
|
||||
ImFont* captionFont = nullptr;
|
||||
|
||||
static void RenderDrawLists(ImDrawData* drawData) {
|
||||
// Avoid rendering when minimized, scale coordinates for retina displays
|
||||
// (screen coordinates != framebuffer coordinates)
|
||||
@@ -211,32 +214,51 @@ static void RenderDrawLists(ImDrawData* drawData) {
|
||||
}
|
||||
|
||||
|
||||
void addScreenSpaceRenderable(std::string texturePath) {
|
||||
void addScreenSpaceRenderableLocal(std::string texturePath) {
|
||||
if (!FileSys.fileExists(texturePath)) {
|
||||
LWARNING("Could not find image '" << texturePath << "'");
|
||||
return;
|
||||
}
|
||||
|
||||
const std::string luaTable =
|
||||
"{Type = 'ScreenSpaceImage', TexturePath = openspace.absPath('" + texturePath + "') }";
|
||||
"{Type = 'ScreenSpaceImageLocal', TexturePath = openspace.absPath('" + texturePath + "') }";
|
||||
const std::string script = "openspace.registerScreenSpaceRenderable(" + luaTable + ");";
|
||||
OsEng.scriptEngine().queueScript(script, openspace::scripting::ScriptEngine::RemoteScripting::Yes);
|
||||
}
|
||||
|
||||
void addScreenSpaceRenderableOnline(std::string texturePath) {
|
||||
const std::string luaTable =
|
||||
"{Type = 'ScreenSpaceImageOnline', TexturePath = '" + texturePath + "' }";
|
||||
const std::string script = "openspace.registerScreenSpaceRenderable(" + luaTable + ");";
|
||||
OsEng.scriptEngine().queueScript(script, openspace::scripting::ScriptEngine::RemoteScripting::Yes);
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
namespace openspace::gui {
|
||||
|
||||
void CaptionText(const char* text) {
|
||||
ImGui::PushFont(captionFont);
|
||||
ImGui::Text("%s", text);
|
||||
ImGui::PopFont();
|
||||
}
|
||||
|
||||
GUI::GUI()
|
||||
: GuiComponent("Main")
|
||||
, _globalProperty("Global")
|
||||
, _property("Properties")
|
||||
, _property(
|
||||
"Properties",
|
||||
GuiPropertyComponent::UseTreeLayout::Yes
|
||||
)
|
||||
, _screenSpaceProperty("ScreenSpace Properties")
|
||||
, _virtualProperty("Virtual Properties")
|
||||
, _featuredProperties("Featured Properties",
|
||||
GuiPropertyComponent::UseTreeLayout::No,
|
||||
GuiPropertyComponent::IsTopLevelWindow::Yes)
|
||||
, _showInternals(false)
|
||||
, _currentVisibility(properties::Property::Visibility::Developer)
|
||||
{
|
||||
addPropertySubOwner(_help);
|
||||
addPropertySubOwner(_origin);
|
||||
addPropertySubOwner(_performance);
|
||||
addPropertySubOwner(_globalProperty);
|
||||
addPropertySubOwner(_property);
|
||||
@@ -246,7 +268,8 @@ GUI::GUI()
|
||||
addPropertySubOwner(_globeBrowsing);
|
||||
#endif // GLOBEBROWSING_USE_GDAL
|
||||
addPropertySubOwner(_filePath);
|
||||
addPropertySubOwner(_time);
|
||||
addPropertySubOwner(_spaceTime);
|
||||
addPropertySubOwner(_mission);
|
||||
#ifdef OPENSPACE_MODULE_ISWA_ENABLED
|
||||
addPropertySubOwner(_iswa);
|
||||
#endif // OPENSPACE_MODULE_ISWA_ENABLED
|
||||
@@ -289,7 +312,12 @@ void GUI::initialize() {
|
||||
io.RenderDrawListsFn = RenderDrawLists;
|
||||
io.Fonts->AddFontFromFileTTF(
|
||||
absPath(GuiFont).c_str(),
|
||||
16.f
|
||||
FontSize
|
||||
);
|
||||
|
||||
captionFont = io.Fonts->AddFontFromFileTTF(
|
||||
absPath(GuiFont).c_str(),
|
||||
FontSize * 1.5f
|
||||
);
|
||||
|
||||
ImGuiStyle& style = ImGui::GetStyle();
|
||||
@@ -297,32 +325,58 @@ void GUI::initialize() {
|
||||
style.WindowRounding = 0.f;
|
||||
style.FramePadding = { 3.f, 3.f };
|
||||
style.FrameRounding = 0.f;
|
||||
style.ScrollbarSize = 15.f;
|
||||
style.ItemSpacing = { 3.f, 2.f };
|
||||
style.ItemInnerSpacing = { 3.f, 2.f };
|
||||
style.TouchExtraPadding = { 1.f, 1.f };
|
||||
style.IndentSpacing = 15.f;
|
||||
style.ScrollbarSize = 10.f;
|
||||
style.ScrollbarRounding = 0.f;
|
||||
style.IndentSpacing = 25;
|
||||
style.ItemSpacing = { 4.f, 2.f };
|
||||
style.GrabMinSize = 10.f;
|
||||
style.GrabRounding = 16.f;
|
||||
|
||||
style.Colors[ImGuiCol_WindowBg] = ImVec4(0.0f, 0.21f, 0.24f, 1.0f);
|
||||
style.Colors[ImGuiCol_Border] = ImVec4(0.1f, 0.39f, 0.42f, 0.59f);
|
||||
style.Colors[ImGuiCol_BorderShadow] = ImVec4(0.0f, 0.0f, 0.0f, 0.0f);
|
||||
style.Colors[ImGuiCol_TitleBg] = ImVec4(0.5f, 0.94f, 1.0f, 0.45f);
|
||||
style.Colors[ImGuiCol_TitleBgCollapsed] = ImVec4(0.5f, 0.94f, 1.0f, 0.45f);
|
||||
style.Colors[ImGuiCol_ScrollbarBg] = ImVec4(0.0f, 0.0f, 0.0f, 0.0f);
|
||||
style.Colors[ImGuiCol_ScrollbarGrab] = ImVec4(0.12f, 0.71f, 0.8f, 0.43f);
|
||||
style.Colors[ImGuiCol_ScrollbarGrabHovered] = ImVec4(0.4f, 0.75f, 0.8f, 0.65f);
|
||||
style.Colors[ImGuiCol_ScrollbarGrabActive] = ImVec4(0.4f, 0.75f, 0.8f, 0.65f);
|
||||
style.Colors[ImGuiCol_ComboBg] = ImVec4(0.18f, 0.51f, 0.78f, 1.f);
|
||||
style.Colors[ImGuiCol_SliderGrabActive] = ImVec4(0.5f, 0.8f, 0.76f, 1.0f);
|
||||
style.Colors[ImGuiCol_Button] = ImVec4(0.0f, 0.36f, 0.67f, 0.6f);
|
||||
style.Colors[ImGuiCol_ButtonHovered] = ImVec4(0.0f, 0.51f, 0.94f, 1.0f);
|
||||
style.Colors[ImGuiCol_ButtonActive] = ImVec4(0.0f, 0.43f, 0.8f, 1.0f);
|
||||
style.Colors[ImGuiCol_Header] = ImVec4(0.f, 0.36f, 0.67f, 0.45f);
|
||||
style.Colors[ImGuiCol_HeaderHovered] = ImVec4(0.f, 0.54f, 1.0f, 0.8f);
|
||||
style.Colors[ImGuiCol_HeaderActive] = ImVec4(0.53f, 0.63f, 0.87f, 0.8f);
|
||||
style.Colors[ImGuiCol_ResizeGrip] = ImVec4(1.0f, 1.0f, 1.0f, 1.0f);
|
||||
style.Colors[ImGuiCol_CloseButton] = ImVec4(0.75f, 0.75f, 0.75f, 1.0f);
|
||||
style.Colors[ImGuiCol_CloseButtonHovered] = ImVec4(0.52f, 0.52f, 0.52f, 0.6f);
|
||||
style.Colors[ImGuiCol_CloseButtonActive] = ImVec4(0.52f, 0.52f, 0.52f, 1.0f);
|
||||
style.Colors[ImGuiCol_WindowBg] = ImVec4(0.13f, 0.13f, 0.13f, 0.96f);
|
||||
style.Colors[ImGuiCol_Border] = ImVec4(0.65f, 0.65f, 0.65f, 0.59f);
|
||||
style.Colors[ImGuiCol_TitleBg] = ImVec4(0.71f, 0.81f, 1.00f, 0.45f);
|
||||
style.Colors[ImGuiCol_TitleBgCollapsed] = ImVec4(0.71f, 0.81f, 1.00f, 0.45f);
|
||||
style.Colors[ImGuiCol_TitleBgActive] = ImVec4(0.51f, 0.69f, 1.00f, 0.63f);
|
||||
style.Colors[ImGuiCol_ScrollbarBg] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f);
|
||||
style.Colors[ImGuiCol_ScrollbarGrab] = ImVec4(0.12f, 0.71f, 0.80f, 0.43f);
|
||||
style.Colors[ImGuiCol_ScrollbarGrabHovered] = ImVec4(0.40f, 0.75f, 0.80f, 0.65f);
|
||||
style.Colors[ImGuiCol_ScrollbarGrabActive] = ImVec4(0.40f, 0.75f, 0.80f, 0.65f);
|
||||
style.Colors[ImGuiCol_ComboBg] = ImVec4(0.18f, 0.51f, 0.78f, 1.00f);
|
||||
style.Colors[ImGuiCol_SliderGrabActive] = ImVec4(0.50f, 0.80f, 0.76f, 1.00f);
|
||||
style.Colors[ImGuiCol_Button] = ImVec4(0.36f, 0.54f, 0.68f, 0.62f);
|
||||
style.Colors[ImGuiCol_ButtonHovered] = ImVec4(0.00f, 0.51f, 0.94f, 1.00f);
|
||||
style.Colors[ImGuiCol_ButtonActive] = ImVec4(0.00f, 0.43f, 0.80f, 1.00f);
|
||||
style.Colors[ImGuiCol_Header] = ImVec4(0.69f, 0.69f, 0.69f, 0.45f);
|
||||
style.Colors[ImGuiCol_HeaderHovered] = ImVec4(0.36f, 0.54f, 0.68f, 0.62f);
|
||||
style.Colors[ImGuiCol_HeaderActive] = ImVec4(0.53f, 0.63f, 0.87f, 0.80f);
|
||||
style.Colors[ImGuiCol_ResizeGrip] = ImVec4(1.00f, 1.00f, 1.00f, 1.00f);
|
||||
style.Colors[ImGuiCol_CloseButton] = ImVec4(0.75f, 0.75f, 0.75f, 1.00f);
|
||||
style.Colors[ImGuiCol_CloseButtonHovered] = ImVec4(0.52f, 0.52f, 0.52f, 0.60f);
|
||||
style.Colors[ImGuiCol_CloseButtonActive] = ImVec4(0.52f, 0.52f, 0.52f, 1.00f);
|
||||
|
||||
//style.Colors[ImGuiCol_WindowBg] = ImVec4(0.0f, 0.21f, 0.24f, 1.0f);
|
||||
//style.Colors[ImGuiCol_Border] = ImVec4(0.1f, 0.39f, 0.42f, 0.59f);
|
||||
//style.Colors[ImGuiCol_BorderShadow] = ImVec4(0.0f, 0.0f, 0.0f, 0.0f);
|
||||
//style.Colors[ImGuiCol_TitleBg] = ImVec4(0.5f, 0.94f, 1.0f, 0.45f);
|
||||
//style.Colors[ImGuiCol_TitleBgCollapsed] = ImVec4(0.5f, 0.94f, 1.0f, 0.45f);
|
||||
//style.Colors[ImGuiCol_ScrollbarBg] = ImVec4(0.0f, 0.0f, 0.0f, 0.0f);
|
||||
//style.Colors[ImGuiCol_ScrollbarGrab] = ImVec4(0.12f, 0.71f, 0.8f, 0.43f);
|
||||
//style.Colors[ImGuiCol_ScrollbarGrabHovered] = ImVec4(0.4f, 0.75f, 0.8f, 0.65f);
|
||||
//style.Colors[ImGuiCol_ScrollbarGrabActive] = ImVec4(0.4f, 0.75f, 0.8f, 0.65f);
|
||||
//style.Colors[ImGuiCol_ComboBg] = ImVec4(0.18f, 0.51f, 0.78f, 1.f);
|
||||
//style.Colors[ImGuiCol_SliderGrabActive] = ImVec4(0.5f, 0.8f, 0.76f, 1.0f);
|
||||
//style.Colors[ImGuiCol_Button] = ImVec4(0.0f, 0.36f, 0.67f, 0.6f);
|
||||
//style.Colors[ImGuiCol_ButtonHovered] = ImVec4(0.0f, 0.51f, 0.94f, 1.0f);
|
||||
//style.Colors[ImGuiCol_ButtonActive] = ImVec4(0.0f, 0.43f, 0.8f, 1.0f);
|
||||
//style.Colors[ImGuiCol_Header] = ImVec4(0.f, 0.36f, 0.67f, 0.45f);
|
||||
//style.Colors[ImGuiCol_HeaderHovered] = ImVec4(0.f, 0.54f, 1.0f, 0.8f);
|
||||
//style.Colors[ImGuiCol_HeaderActive] = ImVec4(0.53f, 0.63f, 0.87f, 0.8f);
|
||||
//style.Colors[ImGuiCol_ResizeGrip] = ImVec4(1.0f, 1.0f, 1.0f, 1.0f);
|
||||
//style.Colors[ImGuiCol_CloseButton] = ImVec4(0.75f, 0.75f, 0.75f, 1.0f);
|
||||
//style.Colors[ImGuiCol_CloseButtonHovered] = ImVec4(0.52f, 0.52f, 0.52f, 0.6f);
|
||||
//style.Colors[ImGuiCol_CloseButtonActive] = ImVec4(0.52f, 0.52f, 0.52f, 1.0f);
|
||||
|
||||
_property.initialize();
|
||||
_property.setHasRegularProperties(true);
|
||||
@@ -330,6 +384,7 @@ void GUI::initialize() {
|
||||
_screenSpaceProperty.setHasRegularProperties(true);
|
||||
_globalProperty.initialize();
|
||||
_globalProperty.setHasRegularProperties(true);
|
||||
_featuredProperties.initialize();
|
||||
_virtualProperty.initialize();
|
||||
_filePath.initialize();
|
||||
#ifdef GLOBEBROWSING_USE_GDAL
|
||||
@@ -338,6 +393,7 @@ void GUI::initialize() {
|
||||
_performance.initialize();
|
||||
_help.initialize();
|
||||
_parallel.initialize();
|
||||
_mission.initialize();
|
||||
#ifdef OPENSPACE_MODULE_ISWA_ENABLED
|
||||
_iswa.initialize();
|
||||
#endif // OPENSPACE_MODULE_ISWA_ENABLED
|
||||
@@ -349,10 +405,12 @@ void GUI::deinitialize() {
|
||||
#ifdef OPENSPACE_MODULE_ISWA_ENABLED
|
||||
_iswa.deinitialize();
|
||||
#endif // OPENSPACE_MODULE_ISWA_ENABLED
|
||||
_mission.deinitialize();
|
||||
_parallel.deinitialize();
|
||||
_help.deinitialize();
|
||||
_performance.deinitialize();
|
||||
_globalProperty.deinitialize();
|
||||
_featuredProperties.deinitialize();
|
||||
_screenSpaceProperty.deinitialize();
|
||||
_virtualProperty.deinitialize();
|
||||
_filePath.deinitialize();
|
||||
@@ -432,6 +490,7 @@ void GUI::initializeGL() {
|
||||
_property.initializeGL();
|
||||
_screenSpaceProperty.initializeGL();
|
||||
_globalProperty.initializeGL();
|
||||
_featuredProperties.initializeGL();
|
||||
_performance.initializeGL();
|
||||
_help.initializeGL();
|
||||
#ifdef GLOBEBROWSING_USE_GDAL
|
||||
@@ -439,6 +498,7 @@ void GUI::initializeGL() {
|
||||
#endif // GLOBEBROWSING_USE_GDAL
|
||||
_filePath.initializeGL();
|
||||
_parallel.initializeGL();
|
||||
_mission.initializeGL();
|
||||
#ifdef OPENSPACE_MODULE_ISWA_ENABLED
|
||||
_iswa.initializeGL();
|
||||
#endif // OPENSPACE_MODULE_ISWA_ENABLED
|
||||
@@ -462,9 +522,11 @@ void GUI::deinitializeGL() {
|
||||
#ifdef OPENSPACE_MODULE_ISWA_ENABLED
|
||||
_iswa.deinitializeGL();
|
||||
#endif // OPENSPACE_MODULE_ISWA_ENABLED
|
||||
_mission.deinitializeGL();
|
||||
_parallel.deinitializeGL();
|
||||
_help.deinitializeGL();
|
||||
_performance.deinitializeGL();
|
||||
_featuredProperties.deinitializeGL();
|
||||
_globalProperty.deinitializeGL();
|
||||
_screenSpaceProperty.deinitializeGL();
|
||||
#ifdef GLOBEBROWSING_USE_GDAL
|
||||
@@ -535,6 +597,16 @@ void GUI::endFrame() {
|
||||
_globeBrowsing.render();
|
||||
}
|
||||
#endif // GLOBEBROWSING_USE_GDAL
|
||||
|
||||
if (_mission.isEnabled() && MissionManager::ref().hasCurrentMission()) {
|
||||
_mission.render();
|
||||
}
|
||||
|
||||
// We always want to render the Space/Time component
|
||||
_spaceTime.render();
|
||||
|
||||
// We always want to render the featured properties component
|
||||
_featuredProperties.render();
|
||||
}
|
||||
|
||||
ImGui::Render();
|
||||
@@ -630,6 +702,10 @@ void GUI::render() {
|
||||
ImGui::Checkbox("Virtual Properties", &virtualProperty);
|
||||
_virtualProperty.setEnabled(virtualProperty);
|
||||
|
||||
bool mission = _mission.isEnabled();
|
||||
ImGui::Checkbox("Mission Information", &mission);
|
||||
_mission.setEnabled(mission);
|
||||
|
||||
bool filePath = _filePath.isEnabled();
|
||||
ImGui::Checkbox("File Paths", &filePath);
|
||||
_filePath.setEnabled(filePath);
|
||||
@@ -646,9 +722,6 @@ void GUI::render() {
|
||||
_iswa.setEnabled(iswa);
|
||||
#endif // OPENSPACE_MODULE_ISWA_ENABLED
|
||||
|
||||
_origin.render();
|
||||
_time.render();
|
||||
|
||||
bool help = _help.isEnabled();
|
||||
ImGui::Checkbox("Help", &help);
|
||||
_help.setEnabled(help);
|
||||
@@ -656,16 +729,27 @@ void GUI::render() {
|
||||
renderAndUpdatePropertyVisibility();
|
||||
|
||||
static const int addImageBufferSize = 256;
|
||||
static char addImageBuffer[addImageBufferSize];
|
||||
static char addImageLocalBuffer[addImageBufferSize];
|
||||
static char addImageOnlineBuffer[addImageBufferSize];
|
||||
|
||||
bool addImage = ImGui::InputText(
|
||||
"addImage",
|
||||
addImageBuffer,
|
||||
bool addImageLocal = ImGui::InputText(
|
||||
"Add Local Image",
|
||||
addImageLocalBuffer,
|
||||
addImageBufferSize,
|
||||
ImGuiInputTextFlags_EnterReturnsTrue
|
||||
);
|
||||
if (addImage) {
|
||||
addScreenSpaceRenderable(std::string(addImageBuffer));
|
||||
if (addImageLocal) {
|
||||
addScreenSpaceRenderableLocal(std::string(addImageLocalBuffer));
|
||||
}
|
||||
|
||||
bool addImageOnline = ImGui::InputText(
|
||||
"Add Online Image",
|
||||
addImageOnlineBuffer,
|
||||
addImageBufferSize,
|
||||
ImGuiInputTextFlags_EnterReturnsTrue
|
||||
);
|
||||
if (addImageOnline) {
|
||||
addScreenSpaceRenderableOnline(std::string(addImageOnlineBuffer));
|
||||
}
|
||||
|
||||
ImGui::Checkbox("ImGUI Internals", &_showInternals);
|
||||
@@ -700,6 +784,7 @@ void GUI::renderAndUpdatePropertyVisibility() {
|
||||
_property.setVisibility(_currentVisibility);
|
||||
_screenSpaceProperty.setVisibility(_currentVisibility);
|
||||
_virtualProperty.setVisibility(_currentVisibility);
|
||||
_featuredProperties.setVisibility(_currentVisibility);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,104 @@
|
||||
/*****************************************************************************************
|
||||
* *
|
||||
* OpenSpace *
|
||||
* *
|
||||
* Copyright (c) 2014-2017 *
|
||||
* *
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this *
|
||||
* software and associated documentation files (the "Software"), to deal in the Software *
|
||||
* without restriction, including without limitation the rights to use, copy, modify, *
|
||||
* merge, publish, distribute, sublicense, and/or sell copies of the Software, and to *
|
||||
* permit persons to whom the Software is furnished to do so, subject to the following *
|
||||
* conditions: *
|
||||
* *
|
||||
* The above copyright notice and this permission notice shall be included in all copies *
|
||||
* or substantial portions of the Software. *
|
||||
* *
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, *
|
||||
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A *
|
||||
* PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT *
|
||||
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF *
|
||||
* CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE *
|
||||
* OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
|
||||
****************************************************************************************/
|
||||
|
||||
#include <modules/imgui/include/guimissioncomponent.h>
|
||||
|
||||
#include <modules/imgui/include/gui.h>
|
||||
#include <modules/imgui/include/imgui_include.h>
|
||||
|
||||
#include <openspace/engine/openspaceengine.h>
|
||||
#include <openspace/mission/mission.h>
|
||||
#include <openspace/mission/missionmanager.h>
|
||||
#include <openspace/util/timerange.h>
|
||||
#include <openspace/util/time.h>
|
||||
#include <openspace/util/timemanager.h>
|
||||
|
||||
namespace {
|
||||
const ImVec2 size = ImVec2(350, 500);
|
||||
|
||||
void renderMission(const openspace::Mission& mission) {
|
||||
// The hashname is necessary since ImGui computes a hash based off the name of the
|
||||
// elements. This does not play well with using %s as the name
|
||||
std::string missionHashname = "##" + mission.name();
|
||||
|
||||
|
||||
double currentTime = OsEng.timeManager().time().j2000Seconds();
|
||||
openspace::MissionPhase::Trace t = mission.phaseTrace(currentTime, 0);
|
||||
|
||||
int treeOption = t.empty() ? 0 : ImGuiTreeNodeFlags_DefaultOpen;
|
||||
if (ImGui::TreeNodeEx(("%s" + missionHashname).c_str(), treeOption, mission.name().c_str())) {
|
||||
if (!mission.description().empty()) {
|
||||
ImGui::Text("%s", mission.description().c_str());
|
||||
}
|
||||
|
||||
openspace::TimeRange range = mission.timeRange();
|
||||
openspace::Time startTime = openspace::Time(range.start);
|
||||
openspace::Time endTime = openspace::Time(range.end);
|
||||
|
||||
openspace::gui::CaptionText("Mission Progress");
|
||||
|
||||
ImGui::Text("%s", startTime.UTC().c_str());
|
||||
ImGui::SameLine();
|
||||
float v = static_cast<float>(currentTime);
|
||||
float s = static_cast<float>(startTime.j2000Seconds());
|
||||
float e = static_cast<float>(endTime.j2000Seconds());
|
||||
|
||||
ImGui::SliderFloat(missionHashname.c_str(), &v, s, e, OsEng.timeManager().time().UTC().c_str());
|
||||
ImGui::SameLine();
|
||||
ImGui::Text("%s", endTime.UTC().c_str());
|
||||
|
||||
openspace::gui::CaptionText("Phases");
|
||||
|
||||
for (const openspace::Mission& m : mission.phases()) {
|
||||
renderMission(m);
|
||||
}
|
||||
|
||||
|
||||
ImGui::TreePop();
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
namespace openspace::gui {
|
||||
|
||||
GuiMissionComponent::GuiMissionComponent() : GuiComponent("Mission Information") {}
|
||||
|
||||
void GuiMissionComponent::render() {
|
||||
bool v = _isEnabled;
|
||||
ImGui::Begin(name().c_str(), &v, size, 0.75f);
|
||||
_isEnabled = v;
|
||||
|
||||
ghoul_assert(
|
||||
MissionManager::ref().hasCurrentMission(),
|
||||
"Must have a current mission"
|
||||
);
|
||||
|
||||
const Mission& currentMission = MissionManager::ref().currentMission();
|
||||
renderMission(currentMission);
|
||||
|
||||
ImGui::End();
|
||||
}
|
||||
|
||||
} // namespace openspace gui
|
||||
@@ -28,6 +28,9 @@
|
||||
#include <modules/imgui/include/renderproperties.h>
|
||||
|
||||
#include <openspace/properties/propertyowner.h>
|
||||
#include <openspace/scene/scenegraphnode.h>
|
||||
|
||||
#include <ghoul/misc/misc.h>
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
@@ -57,12 +60,95 @@ namespace {
|
||||
ImGui::SetTooltip("%s", propOwner->description().c_str());
|
||||
}
|
||||
}
|
||||
|
||||
struct TreeNode {
|
||||
TreeNode(std::string p) : path(std::move(p)) {}
|
||||
std::string path;
|
||||
std::vector<std::unique_ptr<TreeNode>> children;
|
||||
std::vector<openspace::SceneGraphNode*> nodes;
|
||||
};
|
||||
|
||||
void addPathToTree(TreeNode& node, const std::vector<std::string>& path,
|
||||
openspace::SceneGraphNode* owner)
|
||||
{
|
||||
if (path.empty()) {
|
||||
// No more path, so we have reached a leaf
|
||||
node.nodes.push_back(owner);
|
||||
return;
|
||||
}
|
||||
|
||||
// Check if any of the children's paths contains the first part of the path
|
||||
auto it = std::find_if(
|
||||
node.children.begin(),
|
||||
node.children.end(),
|
||||
[p = *path.begin()](const std::unique_ptr<TreeNode>& c) {
|
||||
return c.get()->path == p;
|
||||
}
|
||||
);
|
||||
|
||||
TreeNode* n;
|
||||
if (it != node.children.end()) {
|
||||
// We have a child, so we use it
|
||||
n = it->get();
|
||||
}
|
||||
else {
|
||||
// We don't have a child, so we must generate it
|
||||
std::unique_ptr<TreeNode> newNode = std::make_unique<TreeNode>(*path.begin());
|
||||
n = newNode.get();
|
||||
node.children.push_back(std::move(newNode));
|
||||
|
||||
}
|
||||
|
||||
// Recurse into the tree and chop off the first path
|
||||
addPathToTree(
|
||||
*n,
|
||||
std::vector<std::string>(path.begin() + 1, path.end()),
|
||||
owner
|
||||
);
|
||||
};
|
||||
|
||||
void simplifyTree(TreeNode& node) {
|
||||
// Merging consecutive nodes if they only have a single child
|
||||
|
||||
for (const std::unique_ptr<TreeNode>& c : node.children) {
|
||||
simplifyTree(*c);
|
||||
}
|
||||
|
||||
if ((node.children.size() == 1) && (node.nodes.empty())) {
|
||||
node.path = node.path + "/" + node.children[0]->path;
|
||||
node.nodes = std::move(node.children[0]->nodes);
|
||||
std::vector<std::unique_ptr<TreeNode>> cld = std::move(
|
||||
node.children[0]->children
|
||||
);
|
||||
node.children = std::move(cld);
|
||||
}
|
||||
}
|
||||
|
||||
void renderTree(const TreeNode& node, const std::function<void (openspace::properties::PropertyOwner*)>& renderFunc) {
|
||||
if (node.path.empty() || ImGui::TreeNode(node.path.c_str())) {
|
||||
for (const std::unique_ptr<TreeNode>& c : node.children) {
|
||||
renderTree(*c, renderFunc);
|
||||
}
|
||||
|
||||
for (openspace::SceneGraphNode* n : node.nodes) {
|
||||
renderFunc(n);
|
||||
}
|
||||
|
||||
if (!node.path.empty()) {
|
||||
ImGui::TreePop();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
namespace openspace::gui {
|
||||
|
||||
GuiPropertyComponent::GuiPropertyComponent(std::string name)
|
||||
GuiPropertyComponent::GuiPropertyComponent(std::string name, UseTreeLayout useTree, IsTopLevelWindow topLevel)
|
||||
: GuiComponent(std::move(name))
|
||||
, _useTreeLayout(useTree)
|
||||
, _isTopLevel(topLevel)
|
||||
, _currentUseTreeLayout(useTree)
|
||||
{}
|
||||
|
||||
void GuiPropertyComponent::setSource(SourceFunction function) {
|
||||
@@ -142,12 +228,23 @@ void GuiPropertyComponent::renderPropertyOwner(properties::PropertyOwner* owner)
|
||||
}
|
||||
|
||||
void GuiPropertyComponent::render() {
|
||||
bool v = _isEnabled;
|
||||
ImGui::Begin(name().c_str(), &v, size, 0.5f);
|
||||
_isEnabled = v;
|
||||
if (_isTopLevel) {
|
||||
ImGui::Begin(name().c_str(), nullptr, size, 0.75f);
|
||||
}
|
||||
else {
|
||||
bool v = _isEnabled;
|
||||
ImGui::Begin(name().c_str(), &v, size, 0.75f);
|
||||
_isEnabled = v;
|
||||
}
|
||||
|
||||
if (_function) {
|
||||
if (_useTreeLayout) {
|
||||
ImGui::Checkbox("Use Tree layout", &_currentUseTreeLayout);
|
||||
}
|
||||
|
||||
|
||||
std::vector<properties::PropertyOwner*> owners = _function();
|
||||
|
||||
std::sort(
|
||||
owners.begin(),
|
||||
owners.end(),
|
||||
@@ -156,11 +253,49 @@ void GuiPropertyComponent::render() {
|
||||
}
|
||||
);
|
||||
|
||||
for (properties::PropertyOwner* pOwner : owners) {
|
||||
if (_currentUseTreeLayout) {
|
||||
for (properties::PropertyOwner* owner : owners) {
|
||||
ghoul_assert(
|
||||
dynamic_cast<SceneGraphNode*>(owner),
|
||||
"When using the tree layout, all owners must be SceneGraphNodes"
|
||||
);
|
||||
}
|
||||
|
||||
// Sort:
|
||||
// if guigrouping, sort by name and shortest first
|
||||
// then all w/o guigroup
|
||||
std::stable_sort(
|
||||
owners.begin(),
|
||||
owners.end(),
|
||||
[](properties::PropertyOwner* lhs, properties::PropertyOwner* rhs) {
|
||||
std::string lhsGroup = static_cast<SceneGraphNode*>(lhs)->guiPath();
|
||||
std::string rhsGroup = static_cast<SceneGraphNode*>(rhs)->guiPath();
|
||||
|
||||
if (lhsGroup.empty()) {
|
||||
return false;
|
||||
}
|
||||
if (rhsGroup.empty()) {
|
||||
return true;
|
||||
}
|
||||
return lhsGroup < rhsGroup;
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
// If the owners list is empty, we wnat to do the normal thing (-> nothing)
|
||||
// Otherwise, check if the first owner has a GUI group
|
||||
// This makes the assumption that the tree layout is only used if the owners are
|
||||
// SceenGraphNodes (checked above)
|
||||
bool noGuiGroups =
|
||||
owners.empty() ||
|
||||
(dynamic_cast<SceneGraphNode*>(*owners.begin()) &&
|
||||
dynamic_cast<SceneGraphNode*>(*owners.begin())->guiPath().empty());
|
||||
|
||||
auto renderProp = [&](properties::PropertyOwner* pOwner) {
|
||||
int count = nVisibleProperties(pOwner->propertiesRecursive(), _visibility);
|
||||
|
||||
if (count == 0) {
|
||||
continue;
|
||||
return;
|
||||
}
|
||||
|
||||
auto header = [&]() -> bool {
|
||||
@@ -182,6 +317,47 @@ void GuiPropertyComponent::render() {
|
||||
|
||||
if (header()) {
|
||||
renderPropertyOwner(pOwner);
|
||||
}
|
||||
};
|
||||
|
||||
if (!_currentUseTreeLayout || noGuiGroups) {
|
||||
std::for_each(owners.begin(), owners.end(), renderProp);
|
||||
}
|
||||
else { // _useTreeLayout && gui groups exist
|
||||
TreeNode root("");
|
||||
|
||||
for (properties::PropertyOwner* pOwner : owners) {
|
||||
// We checked above that pOwner is a SceneGraphNode
|
||||
SceneGraphNode* nOwner = static_cast<SceneGraphNode*>(pOwner);
|
||||
|
||||
if (nOwner->guiPath().empty()) {
|
||||
// We know that we are done now since we stable_sort:ed them above
|
||||
break;
|
||||
}
|
||||
|
||||
std::vector<std::string> paths = ghoul::tokenizeString(
|
||||
nOwner->guiPath().substr(1),
|
||||
'/'
|
||||
);
|
||||
|
||||
addPathToTree(root, paths, nOwner);
|
||||
}
|
||||
|
||||
simplifyTree(root);
|
||||
|
||||
renderTree(root, renderProp);
|
||||
|
||||
ImGui::SetCursorPosY(ImGui::GetCursorPosY() + 20.f);
|
||||
|
||||
for (properties::PropertyOwner* pOwner : owners) {
|
||||
// We checked above that pOwner is a SceneGraphNode
|
||||
SceneGraphNode* nOwner = static_cast<SceneGraphNode*>(pOwner);
|
||||
|
||||
if (!nOwner->guiPath().empty()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
renderProp(pOwner);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,361 @@
|
||||
/*****************************************************************************************
|
||||
* *
|
||||
* OpenSpace *
|
||||
* *
|
||||
* Copyright (c) 2014-2017 *
|
||||
* *
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this *
|
||||
* software and associated documentation files (the "Software"), to deal in the Software *
|
||||
* without restriction, including without limitation the rights to use, copy, modify, *
|
||||
* merge, publish, distribute, sublicense, and/or sell copies of the Software, and to *
|
||||
* permit persons to whom the Software is furnished to do so, subject to the following *
|
||||
* conditions: *
|
||||
* *
|
||||
* The above copyright notice and this permission notice shall be included in all copies *
|
||||
* or substantial portions of the Software. *
|
||||
* *
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, *
|
||||
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A *
|
||||
* PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT *
|
||||
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF *
|
||||
* CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE *
|
||||
* OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
|
||||
****************************************************************************************/
|
||||
|
||||
#include <modules/imgui/include/guispacetimecomponent.h>
|
||||
|
||||
#include <modules/imgui/include/gui.h>
|
||||
#include <modules/imgui/include/imgui_include.h>
|
||||
|
||||
|
||||
#include <openspace/engine/openspaceengine.h>
|
||||
#include <openspace/util/timemanager.h>
|
||||
#include <openspace/util/time.h>
|
||||
#include <openspace/interaction/navigationhandler.h>
|
||||
#include <openspace/rendering/renderengine.h>
|
||||
#include <openspace/scene/scenegraphnode.h>
|
||||
#include <openspace/scene/scene.h>
|
||||
|
||||
namespace {
|
||||
const ImVec2 size = ImVec2(350, 500);
|
||||
} // namespace
|
||||
|
||||
namespace openspace::gui {
|
||||
|
||||
GuiSpaceTimeComponent::GuiSpaceTimeComponent() : GuiComponent("Space/Time") {}
|
||||
|
||||
void GuiSpaceTimeComponent::render() {
|
||||
ImGui::Begin(name().c_str(), nullptr, size, 0.5f, ImGuiWindowFlags_AlwaysAutoResize);
|
||||
|
||||
std::vector<SceneGraphNode*> nodes =
|
||||
OsEng.renderEngine().scene()->allSceneGraphNodes();
|
||||
|
||||
std::sort(
|
||||
nodes.begin(),
|
||||
nodes.end(),
|
||||
[](SceneGraphNode* lhs, SceneGraphNode* rhs) {
|
||||
return lhs->name() < rhs->name();
|
||||
}
|
||||
);
|
||||
|
||||
ImGui::BeginGroup();
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip(
|
||||
"%s",
|
||||
"These buttons and the dropdown menu determine the focus object in the scene "
|
||||
"that is the center of all camera movement"
|
||||
);
|
||||
}
|
||||
|
||||
CaptionText("Focus Selection");
|
||||
|
||||
ImGui::SetCursorPosY(ImGui::GetCursorPosY() + 10.f);
|
||||
|
||||
ImGui::Text("%s", "Focus on:");
|
||||
ImGui::SameLine();
|
||||
// Buttons for important SceneGraphNodes
|
||||
for (SceneGraphNode* n : nodes) {
|
||||
const std::vector<std::string>& tags = n->tags();
|
||||
auto it = std::find(tags.begin(), tags.end(), "GUI.Interesting");
|
||||
if (it != tags.end()) {
|
||||
bool pressed = ImGui::Button(n->name().c_str());
|
||||
ImGui::SameLine();
|
||||
if (pressed) {
|
||||
OsEng.scriptEngine().queueScript(
|
||||
"openspace.setPropertyValue('NavigationHandler.Origin', '" +
|
||||
n->name() + "');",
|
||||
scripting::ScriptEngine::RemoteScripting::Yes
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ImGui::NewLine();
|
||||
ImGui::SetCursorPosY(ImGui::GetCursorPosY() + 10.f);
|
||||
|
||||
SceneGraphNode* currentFocus = OsEng.navigationHandler().focusNode();
|
||||
|
||||
std::string nodeNames = "";
|
||||
for (SceneGraphNode* n : nodes) {
|
||||
nodeNames += n->name() + '\0';
|
||||
}
|
||||
|
||||
auto iCurrentFocus = std::find(nodes.begin(), nodes.end(), currentFocus);
|
||||
if (!nodes.empty()) {
|
||||
// Only check if we found the current focus node if we have any nodes at all
|
||||
// only then it would be a real error
|
||||
ghoul_assert(iCurrentFocus != nodes.end(), "Focus node not found");
|
||||
}
|
||||
int currentPosition = static_cast<int>(std::distance(nodes.begin(), iCurrentFocus));
|
||||
|
||||
bool hasChanged = ImGui::Combo("Focus Node", ¤tPosition, nodeNames.c_str());
|
||||
if (hasChanged) {
|
||||
OsEng.scriptEngine().queueScript(
|
||||
"openspace.setPropertyValue('NavigationHandler.Origin', '" +
|
||||
nodes[currentPosition]->name() + "');",
|
||||
scripting::ScriptEngine::RemoteScripting::Yes
|
||||
);
|
||||
}
|
||||
|
||||
ImGui::EndGroup();
|
||||
|
||||
ImGui::SetCursorPosY(ImGui::GetCursorPosY() + 20.f);
|
||||
|
||||
ImGui::Separator();
|
||||
ImGui::Separator();
|
||||
ImGui::Separator();
|
||||
|
||||
ImGui::SetCursorPosY(ImGui::GetCursorPosY() + 20.f);
|
||||
|
||||
|
||||
ImGui::BeginGroup();
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip(
|
||||
"%s",
|
||||
"These elements determine the simulation time inside OpenSpace."
|
||||
);
|
||||
}
|
||||
|
||||
CaptionText("Time Controls");
|
||||
ImGui::SetCursorPosY(ImGui::GetCursorPosY() + 10.f);
|
||||
|
||||
constexpr int BufferSize = 256;
|
||||
static char Buffer[BufferSize];
|
||||
bool dateChanged = ImGui::InputText(
|
||||
"Date",
|
||||
Buffer,
|
||||
BufferSize,
|
||||
ImGuiInputTextFlags_EnterReturnsTrue
|
||||
);
|
||||
if (dateChanged) {
|
||||
OsEng.scriptEngine().queueScript(
|
||||
"openspace.time.setTime(\"" + std::string(Buffer) + "\")",
|
||||
scripting::ScriptEngine::RemoteScripting::Yes
|
||||
);
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip(
|
||||
"%s",
|
||||
"Entering a date here and confirming with ENTER sets the current simulation "
|
||||
"time to the entered date. The format of the date has to be either ISO 8601 "
|
||||
"YYYY-MM-DDThh:mm:ss (2017-08-27T04:00:00) or YYYY MMM DD hh:mm:ss "
|
||||
"(2017 MAY 01 12:00:00). The hours are in 24h and specified as UTC."
|
||||
);
|
||||
}
|
||||
|
||||
auto incrementTime = [](int days) {
|
||||
using namespace std::chrono;
|
||||
double j2000 = OsEng.timeManager().time().j2000Seconds();
|
||||
|
||||
long long seconds = duration_cast<std::chrono::seconds>(
|
||||
std::chrono::hours(24) * std::abs(days)
|
||||
).count();
|
||||
|
||||
double newTime = [days, j2000, seconds](){
|
||||
if (days < 0) {
|
||||
return static_cast<double>(j2000 - seconds);
|
||||
}
|
||||
else {
|
||||
return static_cast<double>(j2000 + seconds);
|
||||
}
|
||||
}();
|
||||
|
||||
OsEng.scriptEngine().queueScript(
|
||||
"openspace.time.setTime(" + std::to_string(newTime) + ")",
|
||||
scripting::ScriptEngine::RemoteScripting::Yes
|
||||
);
|
||||
};
|
||||
|
||||
bool minusMonth = ImGui::Button("-Month");
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip(
|
||||
"%s",
|
||||
"OBS: A month here equals 30 days."
|
||||
);
|
||||
}
|
||||
if (minusMonth) {
|
||||
incrementTime(-30);
|
||||
}
|
||||
ImGui::SameLine();
|
||||
bool minusWeek = ImGui::Button("-Week");
|
||||
if (minusWeek) {
|
||||
incrementTime(-7);
|
||||
}
|
||||
ImGui::SameLine();
|
||||
bool minusDay = ImGui::Button("-Day");
|
||||
if (minusDay) {
|
||||
incrementTime(-1);
|
||||
}
|
||||
ImGui::SameLine();
|
||||
|
||||
ImGui::SetCursorPosX(ImGui::GetCursorPosX() + 55.f);
|
||||
|
||||
bool plusDay = ImGui::Button("+Day");
|
||||
if (plusDay) {
|
||||
incrementTime(1);
|
||||
}
|
||||
ImGui::SameLine();
|
||||
bool plusWeek = ImGui::Button("+Week");
|
||||
if (plusWeek) {
|
||||
incrementTime(7);
|
||||
}
|
||||
ImGui::SameLine();
|
||||
bool plusMonth = ImGui::Button("+Month");
|
||||
if (plusMonth) {
|
||||
incrementTime(30);
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip(
|
||||
"%s",
|
||||
"OBS: A month here equals 30 days."
|
||||
);
|
||||
}
|
||||
|
||||
ImGui::SetCursorPosY(ImGui::GetCursorPosY() + 20.f);
|
||||
|
||||
|
||||
float deltaTime = static_cast<float>(OsEng.timeManager().time().deltaTime());
|
||||
bool changed = ImGui::SliderFloat("Delta Time", &deltaTime, -100000.f, 100000.f, "%.3f", 5.f);
|
||||
if (changed) {
|
||||
OsEng.scriptEngine().queueScript(
|
||||
"openspace.time.setDeltaTime(" + std::to_string(deltaTime) + ")",
|
||||
scripting::ScriptEngine::RemoteScripting::Yes
|
||||
);
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip(
|
||||
"%s",
|
||||
"This determines the simulation time increment, that is the passage "
|
||||
"of time in OpenSpace relative to a wall clock. Times are expressed as "
|
||||
"simulation time / real world time."
|
||||
);
|
||||
}
|
||||
|
||||
bool isPaused = OsEng.timeManager().time().paused();
|
||||
|
||||
|
||||
bool pauseChanged = ImGui::Button(isPaused ? "Resume" : "Pause", { ImGui::GetWindowWidth() - 7.5f, 0.f } );
|
||||
if (pauseChanged) {
|
||||
OsEng.scriptEngine().queueScript(
|
||||
"openspace.time.togglePause()",
|
||||
scripting::ScriptEngine::RemoteScripting::Yes
|
||||
);
|
||||
}
|
||||
|
||||
auto setDeltaTime = [](std::chrono::seconds dt) {
|
||||
OsEng.scriptEngine().queueScript(
|
||||
"openspace.time.setDeltaTime(" + std::to_string(dt.count()) + ")",
|
||||
scripting::ScriptEngine::RemoteScripting::Yes
|
||||
);
|
||||
};
|
||||
|
||||
bool minusDs = ImGui::Button("-1d/s");
|
||||
if (minusDs) {
|
||||
OsEng.scriptEngine().queueScript(
|
||||
"openspace.time.setDeltaTime(" + std::to_string(-24 * 60 * 60) + ")",
|
||||
scripting::ScriptEngine::RemoteScripting::Yes
|
||||
);
|
||||
}
|
||||
ImGui::SameLine();
|
||||
|
||||
bool minusHs = ImGui::Button("-1h/s");
|
||||
if (minusHs) {
|
||||
OsEng.scriptEngine().queueScript(
|
||||
"openspace.time.setDeltaTime(" + std::to_string(-60 * 60) + ")",
|
||||
scripting::ScriptEngine::RemoteScripting::Yes
|
||||
);
|
||||
}
|
||||
ImGui::SameLine();
|
||||
|
||||
bool minusMs = ImGui::Button("-1min/s");
|
||||
if (minusMs) {
|
||||
OsEng.scriptEngine().queueScript(
|
||||
"openspace.time.setDeltaTime(" + std::to_string(-60) + ")",
|
||||
scripting::ScriptEngine::RemoteScripting::Yes
|
||||
);
|
||||
}
|
||||
ImGui::SameLine();
|
||||
|
||||
bool minusSs = ImGui::Button("-1s/s");
|
||||
if (minusSs) {
|
||||
OsEng.scriptEngine().queueScript(
|
||||
"openspace.time.setDeltaTime(" + std::to_string(-1) + ")",
|
||||
scripting::ScriptEngine::RemoteScripting::Yes
|
||||
);
|
||||
}
|
||||
ImGui::SameLine();
|
||||
|
||||
bool zero = ImGui::Button("0");
|
||||
if (zero) {
|
||||
OsEng.scriptEngine().queueScript(
|
||||
"openspace.time.setDeltaTime(" + std::to_string(0) + ")",
|
||||
scripting::ScriptEngine::RemoteScripting::Yes
|
||||
);
|
||||
}
|
||||
ImGui::SameLine();
|
||||
|
||||
|
||||
bool plusSs = ImGui::Button("+1s/s");
|
||||
if (plusSs) {
|
||||
OsEng.scriptEngine().queueScript(
|
||||
"openspace.time.setDeltaTime(" + std::to_string(1) + ")",
|
||||
scripting::ScriptEngine::RemoteScripting::Yes
|
||||
);
|
||||
}
|
||||
ImGui::SameLine();
|
||||
|
||||
bool plusMs = ImGui::Button("1min/s");
|
||||
if (plusMs) {
|
||||
OsEng.scriptEngine().queueScript(
|
||||
"openspace.time.setDeltaTime(" + std::to_string(60) + ")",
|
||||
scripting::ScriptEngine::RemoteScripting::Yes
|
||||
);
|
||||
}
|
||||
ImGui::SameLine();
|
||||
|
||||
bool plusHs = ImGui::Button("1h/s");
|
||||
if (plusHs) {
|
||||
OsEng.scriptEngine().queueScript(
|
||||
"openspace.time.setDeltaTime(" + std::to_string(60 * 60) + ")",
|
||||
scripting::ScriptEngine::RemoteScripting::Yes
|
||||
);
|
||||
}
|
||||
ImGui::SameLine();
|
||||
|
||||
bool plusDs = ImGui::Button("1d/s");
|
||||
if (plusDs) {
|
||||
OsEng.scriptEngine().queueScript(
|
||||
"openspace.time.setDeltaTime(" + std::to_string(24 * 60 * 60) + ")",
|
||||
scripting::ScriptEngine::RemoteScripting::Yes
|
||||
);
|
||||
}
|
||||
ImGui::SameLine();
|
||||
|
||||
|
||||
ImGui::EndGroup();
|
||||
|
||||
ImGui::End();
|
||||
|
||||
}
|
||||
|
||||
} // namespace openspace gui
|
||||
@@ -36,7 +36,7 @@ namespace {
|
||||
namespace openspace {
|
||||
|
||||
ScreenSpaceCygnet::ScreenSpaceCygnet(const ghoul::Dictionary& dictionary)
|
||||
: ScreenSpaceImage(dictionary)
|
||||
: ScreenSpaceImageOnline(dictionary)
|
||||
{
|
||||
// hacky, have to first get as float and then cast to int.
|
||||
float cygnetid;
|
||||
@@ -48,7 +48,7 @@ ScreenSpaceCygnet::ScreenSpaceCygnet(const ghoul::Dictionary& dictionary)
|
||||
_updateTime = (int) interval;
|
||||
|
||||
_downloadImage = true;
|
||||
_url = IswaManager::ref().iswaUrl(_cygnetId);
|
||||
_texturePath = IswaManager::ref().iswaUrl(_cygnetId);
|
||||
|
||||
_openSpaceTime = OsEng.timeManager().time().j2000Seconds();
|
||||
_lastUpdateOpenSpaceTime = _openSpaceTime;
|
||||
@@ -77,14 +77,9 @@ void ScreenSpaceCygnet::update(){
|
||||
(_realTime.count()-_lastUpdateRealTime.count()) > _minRealTimeUpdateInterval);
|
||||
|
||||
if((OsEng.timeManager().time().timeJumped() || timeToUpdate )){
|
||||
_url = IswaManager::ref().iswaUrl(_cygnetId);
|
||||
updateTexture();
|
||||
_texturePath = IswaManager::ref().iswaUrl(_cygnetId);
|
||||
_lastUpdateRealTime = _realTime;
|
||||
_lastUpdateOpenSpaceTime = _openSpaceTime;
|
||||
}
|
||||
|
||||
if(_futureImage.valid() && DownloadManager::futureReady(_futureImage)) {
|
||||
loadTexture();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,14 +28,14 @@
|
||||
#include <chrono>
|
||||
#include <future>
|
||||
#include <openspace/rendering/screenspacerenderable.h>
|
||||
#include <modules/base/rendering/screenspaceimage.h>
|
||||
#include <modules/base/rendering/screenspaceimageonline.h>
|
||||
|
||||
#include <openspace/engine/downloadmanager.h>
|
||||
#include <modules/iswa/util/iswamanager.h>
|
||||
|
||||
namespace openspace {
|
||||
|
||||
class ScreenSpaceCygnet : public ScreenSpaceImage {
|
||||
class ScreenSpaceCygnet : public ScreenSpaceImageOnline {
|
||||
public:
|
||||
ScreenSpaceCygnet(const ghoul::Dictionary& dictionary);
|
||||
~ScreenSpaceCygnet();
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user