This commit is contained in:
Jonathas Costa
2017-10-17 18:26:57 -04:00
110 changed files with 2588 additions and 1002 deletions

1
.gitignore vendored
View File

@@ -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/

View File

@@ -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")

View File

@@ -8,4 +8,4 @@ The project stems from the same academic collaboration between Swedens [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).

View File

@@ -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(),

View File

@@ -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.

View File

@@ -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.

View File

@@ -20,6 +20,7 @@ return {
SourceFrame = "J2000",
DestinationFrame = "GALACTIC"
}
}
},
GuiPath = "/Milky Way/Stars"
}
}

View File

@@ -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') ..
@@ -91,10 +102,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

View File

@@ -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"
}
}

View File

@@ -11,7 +11,8 @@ return {
-0.9938214 , -0.1109906, -0.0003515167, 0.0,
-0.09647644, 0.8622859, 0.4971472 , 0.0,
0.0 , 0.0 , 0.0 , 1.0 }
}
},
GuiPath = "/Other/Grids"
},
{
Name = "Equatorial Grid",
@@ -24,7 +25,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"
},
{
Name = "Galactic Grid",
@@ -33,6 +35,7 @@ return {
Type = "RenderableSphericalGrid",
LineWidth = 0.75,
GridColor = { 0.0, 0.75, 0.75, 1.0}
}
},
GuiPath = "/Other/Grids"
}
}

View File

@@ -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",

View File

@@ -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"
}
}

View File

@@ -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"
}
}

View File

@@ -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"
}
}

View File

@@ -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"
}
}

View File

@@ -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"
}
}

View File

@@ -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"
}
}

View File

@@ -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"
}
}

View File

@@ -9,6 +9,7 @@ return {
Alpha = 0.2,
Texture = "textures/DarkUniverse_mellinger_8k.jpg",
Orientation = "Inside/Outside"
}
},
GuiPath = "/Milky Way/Milky Way"
}
}

View File

@@ -8,6 +8,7 @@ return {
Segments = 40,
Texture = "textures/eso0932a_blend.png",
Orientation = "Inside/Outside"
}
},
GuiPath = "/Milky Way/Milky Way"
}
}

View File

@@ -31,7 +31,8 @@ return {
Type = "Spice",
Frame = "IAU_CERES",
Reference = "GALACTIC"
}
},
GuiPath = "/Solar System/Dwarf Planets/Ceres"
},
--[[ Ceres Trail Module
{

View File

@@ -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"
},
}

View File

@@ -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.

View File

@@ -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}" },
}
}

View File

@@ -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"
}
}

View File

@@ -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"
}
}

View File

@@ -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"
}
}

View File

@@ -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"
}
}

View File

@@ -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"
}
}

View File

@@ -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"
}
}

View File

@@ -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" }
}
}
}

View File

@@ -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

View File

@@ -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"
}
}
}

View File

@@ -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"
}
}

View File

@@ -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"
}
}

View File

@@ -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"
}
}

View File

@@ -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"
}
}

View File

@@ -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"
}
}

View File

@@ -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"
}
}

View File

@@ -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"
},
}

View File

@@ -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"
},
}

View File

@@ -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"
},
--[[
{

View File

@@ -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"
}
}

View File

@@ -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"
}
}

View File

@@ -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"
}
}

View File

@@ -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 {

View File

@@ -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 {

View File

@@ -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 {

View File

@@ -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

View File

@@ -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"
}
}

View File

@@ -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"
}
}

View File

@@ -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"
}
}

View File

@@ -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"
}
}

View File

@@ -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"
}
}

View File

@@ -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"
}
}

View File

@@ -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"
}
}

View File

@@ -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"
}
}

View File

@@ -9,5 +9,6 @@ return {
Texture = "textures/halo.png",
ColorMap = "denver_colorbv.cmap"
},
GuiPath = "/Milky Way/Stars"
}
}

View File

@@ -9,5 +9,6 @@ return {
Texture = "textures/halo.png",
ColorMap = "colorbv.cmap"
},
GuiPath = "/Milky Way/Stars"
}
}

View File

@@ -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"
}
}

View File

@@ -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"
}
}

View File

@@ -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"
}
}

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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

View File

@@ -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(),

View File

@@ -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();

View File

@@ -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; }

View File

@@ -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

View File

@@ -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__

View File

@@ -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
);
}

View File

@@ -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__

View File

@@ -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);
}

View File

@@ -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>(

View File

@@ -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;

View File

@@ -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);

View File

@@ -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

View File

@@ -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());
}
);
}
);

View File

@@ -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__

View File

@@ -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__

View File

@@ -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

View File

@@ -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", &currentPosition, 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__

View File

@@ -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);
}

View File

@@ -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

View File

@@ -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);
}
}
}

View File

@@ -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", &currentPosition, 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

View File

@@ -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();
}
}
}

View File

@@ -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();

View File

@@ -41,7 +41,7 @@ size_t RawVolumeWriter<VoxelType>::coordsToIndex(const glm::uvec3& cartesian) co
template <typename VoxelType>
glm::ivec3 RawVolumeWriter<VoxelType>::indexToCoords(size_t linear) const {
return indexToCoords(linear, dimensions());
return volume::indexToCoords(linear, dimensions());
}
template <typename VoxelType>

Some files were not shown because too many files have changed in this diff Show More