Merge master into touch study branch

This commit is contained in:
GPayne
2018-01-18 15:52:48 -07:00
1696 changed files with 58003 additions and 32359 deletions

102
.gitignore vendored
View File

@@ -7,6 +7,7 @@
/documentation
/ext/SGCT
/logs
/sync/
tmp/
Thumbs.db
@@ -32,102 +33,5 @@ install_manifest.txt
shaders/ABuffer/constants.hglsl
ScriptLog.txt
data/scene/atmosphereearth/textures
data/scene/debugglobe/textures
data/scene/earth/textures
data/scene/jupiter/callisto/textures
data/scene/jupiter/europa/textures
data/scene/jupiter/ganymede/textures
data/scene/jupiter/io/textures
data/scene/jupiter/jupiter/textures
data/scene/lodglobes/jupiter/callisto/textures
data/scene/lodglobes/earth/textures
data/scene/lodglobes/jupiter/europa/textures
data/scene/lodglobes/jupiter/ganymede/textures
data/scene/lodglobes/jupiter/io/textures
data/scene/lodglobes/jupiter/jupiter/textures
data/scene/lodglobes/mars/textures
data/scene/lodglobes/mercury/textures
data/scene/lodglobes/moon/textures
data/scene/lodglobes/neptune/textures
data/scene/lodglobes/saturn/textures
data/scene/lodglobes/uranus/textures
data/scene/lodglobes/venus/textures
data/scene/mars/textures
data/scene/mercury/textures
data/scene/milkyway/digitaluniverse/textures
data/scene/milkyway/eso/textures
data/scene/missions/dawn/ceres/textures
data/scene/missions/dawn/dawn/obj
data/scene/missions/dawn/dawn/textures
data/scene/missions/dawn/vestaprojection/textures
data/scene/missions/dawn/vestaprojection/VestaComet
data/scene/missions/juno/juno/Juno.mtl
data/scene/missions/juno/juno/Juno.obj
data/scene/missions/juno/juno/spice
data/scene/missions/juno/juno/textures
data/scene/missions/newhorizons/jupiter/callisto/textures
data/scene/missions/newhorizons/jupiter/europa/textures
data/scene/missions/newhorizons/jupiter/ganymede/textures
data/scene/missions/newhorizons/jupiter/io/textures
data/scene/missions/newhorizons/jupiter/jupiter/ProjectionsOfInterest
data/scene/missions/newhorizons/newhorizons/models
data/scene/missions/newhorizons/newhorizons/textures
data/scene/missions/newhorizons/pluto/charon/textures
data/scene/missions/newhorizons/pluto/pluto/assets
data/scene/missions/newhorizons/pluto/pluto/full_images
data/scene/missions/newhorizons/pluto/pluto/images
data/scene/missions/newhorizons/pluto/pluto/textures
data/scene/missions/osirisrex/bennu/models
data/scene/missions/osirisrex/bennu/textures
data/scene/missions/osirisrex/osirisrex/models
data/scene/missions/osirisrex/osirisrex/textures
data/scene/missions/rosetta/67P/obj
data/scene/missions/rosetta/67P/rosettaimages
data/scene/missions/rosetta/67P/textures
data/scene/missions/rosetta/rosetta/rosetta
data/scene/missions/rosetta/rosetta/textures
data/scene/moon/textures
data/scene/neptune/textures
data/scene/pluto/textures
data/scene/saturn/dione/textures
data/scene/saturn/enceladus/textures
data/scene/saturn/iapetus/textures
data/scene/saturn/mimas/textures
data/scene/saturn/rhea/textures
data/scene/saturn/saturn/textures
data/scene/saturn/tethys/textures
data/scene/saturn/titan/textures
data/scene/stars/digitaluniverse/colorbv.cmap
data/scene/stars/digitaluniverse/speck
data/scene/stars/digitaluniverse/textures
data/scene/stars/denver/denver_colorbv.cmap
data/scene/stars/denver/speck
data/scene/stars/denver/textures
data/scene/sun/textures
data/scene/uranus/textures
data/scene/venus/textures
data/scene/volumetricmilkyway/milkyway
data/spice/DawnKernels
data/spice/de430_1850-2150.bsp
data/spice/jup260.bsp
data/spice/MAR063.BSP
data/spice/NewHorizonsKernels
data/spice/nh_kernels
data/spice/OsirisRexKernels
data/spice/plu055.bsp
data/spice/Rosetta
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/
data/scene/digitaluniverse/*/data/*.dat
data/scene/digitaluniverse/*/data/*.data
data/scene/digitaluniverse/*/speck/*.speck
data/scene/digitaluniverse/*/speck/*.cmap
data/scene/digitaluniverse/*/speck/*.label
data/scene/digitaluniverse/*/textures/*.jpg
data/scene/digitaluniverse/*/textures/*.pbm
data/scene/digitaluniverse/*/textures/*.png
data/scene/digitaluniverse/*/textures/*.sgi
customization.lua
COMMIT.md

4
.gitmodules vendored
View File

@@ -13,6 +13,6 @@
[submodule "modules/touch/ext/libTUIO11"]
path = modules/touch/ext/libTUIO11
url = https://github.com/mkalten/TUIO11_CPP
[submodule "apps/Launcher/ext/libtorrent"]
path = apps/Launcher/ext/libtorrent
[submodule "modules/sync/ext/libtorrent"]
path = modules/sync/ext/libtorrent
url = https://github.com/OpenSpace/libtorrent.git

View File

@@ -2,7 +2,7 @@
# #
# OpenSpace #
# #
# Copyright (c) 2014-2017 #
# Copyright (c) 2014-2018 #
# #
# 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 #
@@ -28,9 +28,9 @@ project(OpenSpace)
message(STATUS "Generating OpenSpace project")
set(OPENSPACE_VERSION_MAJOR 0)
set(OPENSPACE_VERSION_MINOR 10)
set(OPENSPACE_VERSION_MINOR 11)
set(OPENSPACE_VERSION_PATCH 0)
set(OPENSPACE_VERSION_STRING "prerelease-15 (ASTC)")
set(OPENSPACE_VERSION_STRING "Beta-1")
set(OPENSPACE_BASE_DIR "${PROJECT_SOURCE_DIR}")
set(OPENSPACE_APPS_DIR "${OPENSPACE_BASE_DIR}/apps")

View File

@@ -23,6 +23,7 @@ Michael Novén
Oskar Carlbaum
Jonathan Bosson
Klas Eskilson
Christoffer Särevall
Anteige
noahdasanaike

View File

@@ -1,4 +1,4 @@
Copyright (c) 2014-2017
Copyright (c) 2014-2018
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

View File

@@ -6,6 +6,6 @@ The project stems from the same academic collaboration between Swedens [Link
- Utilization of NASAs SPICE observational geometry system with its Planetary Data Service (PDS) to enable space mission visualization that reveal how missions are designed to gather science.
- Globe browsing techniques across spatial and temporal scales to examine scientific campaigns on multiple planets, including close up surface exploration.
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:).
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-macOS). 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/t/openspacesupport/shared_invite/enQtMjUxNzUyMTQ1ODQxLTI4YjNmMTY3ZDI1N2Q1NWM1ZjQ1NTQyNzAxM2YyMGQ5Y2NmYWJiNjI1NjU4YTkyNTc5ZDE5NzdhNGM2YmUzYTk).

View File

@@ -1,82 +0,0 @@
#########################################################################################
# #
# 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(${OPENSPACE_CMAKE_EXT_DIR}/application_definition.cmake)
include(${GHOUL_BASE_DIR}/support/cmake/handle_external_library.cmake)
set(SOURCE_FILES
${CMAKE_CURRENT_SOURCE_DIR}/main.cpp
${CMAKE_CURRENT_SOURCE_DIR}/infowidget.cpp
${CMAKE_CURRENT_SOURCE_DIR}/mainwindow.cpp
${CMAKE_CURRENT_SOURCE_DIR}/shortcutwidget.cpp
${CMAKE_CURRENT_SOURCE_DIR}/syncwidget.cpp
)
set(HEADER_FILES
${CMAKE_CURRENT_SOURCE_DIR}/infowidget.h
${CMAKE_CURRENT_SOURCE_DIR}/mainwindow.h
${CMAKE_CURRENT_SOURCE_DIR}/shortcutwidget.h
${CMAKE_CURRENT_SOURCE_DIR}/syncwidget.h
)
find_package(Qt5 COMPONENTS Core Widgets Network REQUIRED)
qt5_wrap_cpp(MOC_FILES ${HEADER_FILES})
qt5_add_resources(RESOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/files.qrc)
create_new_application(
Launcher
MACOSX_BUNDLE
${SOURCE_FILES}
${HEADER_FILES}
${OPENSPACE_APPS_DIR}/Launcher/openspace.rc
${MOC_FILES}
${RESOURCE_FILES}
)
target_link_libraries(
Launcher
libOpenSpace
Qt5::Widgets
Qt5::Network
)
#####
# Libtorrent
#####
set(Boost_USE_STATIC_LIBS ON)
set(Boost_USE_MULTITHREADED ON)
SET(LIBTORRENT_encryption OFF CACHE BOOL "Use OpenSSL Encryption" FORCE)
SET(LIBTORRENT_shared OFF CACHE BOOL "Use Libtorrent as shared library" FORCE)
include_external_library(
Launcher
torrent-rasterbar
${CMAKE_CURRENT_SOURCE_DIR}/ext/libtorrent
)
target_include_directories(
Launcher
SYSTEM PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/ext/libtorrent/include
)

View File

@@ -1,5 +0,0 @@
<!DOCTYPE RCC><RCC version="1.0">
<qresource>
<file>images/header.png</file>
</qresource>
</RCC>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

View File

@@ -1,132 +0,0 @@
/*****************************************************************************************
* *
* 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 "infowidget.h"
#include "syncwidget.h"
#include <QGridLayout>
#include <QLabel>
#include <QProgressBar>
#include <libtorrent/torrent_status.hpp>
InfoWidget::InfoWidget(QString name, int totalBytes)
: QGroupBox(nullptr)
, _name(nullptr)
, _bytes(nullptr)
, _progress(nullptr)
, _messagesLeft(nullptr)
, _messagesCenter(nullptr)
, _messagesRight(nullptr)
, _totalBytes(totalBytes)
{
setFixedHeight(100);
QGridLayout* layout = new QGridLayout;
layout->setHorizontalSpacing(10);
_name = new QLabel(name);
_name->setObjectName("Name");
//_name->setMaximumWidth(300);
_name->setFixedWidth(450);
layout->addWidget(_name, 0, 0, 1, 2);
layout->setRowStretch(1, 10);
_bytes = new QLabel("");
_bytes->setObjectName("Bytes");
layout->addWidget(_bytes, 2, 0);
_progress = new QProgressBar;
_progress->setTextVisible(false);
_progress->setFixedWidth(285);
layout->addWidget(_progress, 2, 1);
_messagesLeft = new QLabel("");
_messagesLeft->setObjectName("MessageLeft");
_messagesCenter = new QLabel("");
_messagesCenter->setObjectName("MessageCenter");
_messagesRight = new QLabel("");
_messagesRight->setObjectName("MessageRight");
layout->addWidget(_messagesLeft, 3, 0, 1, 2);
layout->addWidget(_messagesCenter, 3, 0, 1, 2, Qt::AlignCenter);
layout->addWidget(_messagesRight, 3, 0, 1, 2, Qt::AlignRight);
setLayout(layout);
}
void InfoWidget::update(std::shared_ptr<openspace::DownloadManager::FileFuture> f) {
_bytes->setText(
QString("%1 / %2")
.arg(f->currentSize)
.arg(f->totalSize)
);
_progress->setValue(static_cast<int>(f->progress * 100));
if (f->errorMessage.empty()) {
QString t = "Time remaining %1 s";
_messagesLeft->setText(t.arg(static_cast<int>(f->secondsRemaining)));
}
else {
_messagesLeft->setText(QString::fromStdString(f->errorMessage));
}
}
void InfoWidget::update(libtorrent::torrent_status s) {
_bytes->setText(
QString("%1 / %2")
.arg(s.total_wanted_done)
.arg(s.total_wanted)
);
float progress = static_cast<float>(s.total_wanted_done) / s.total_wanted;
_progress->setValue(static_cast<int>(progress * 100));
if (s.error.empty()) {
int bytesPerSecond = s.download_rate;
long long remainingBytes = s.total_wanted - s.total_wanted_done;
if (bytesPerSecond > 0 && remainingBytes > 0) {
float seconds = static_cast<float>(remainingBytes) / bytesPerSecond;
QString left = "Remaining: %1 s";
_messagesLeft->setText(left.arg(static_cast<int>(seconds)));
QString center = "Peers: %1 (%2) | Seeds: %3 (%4)";
_messagesCenter->setText(center.arg(s.num_peers).arg(s.list_peers).arg(s.num_seeds).arg(s.list_seeds));
QString right = "%1 KiB/s";
_messagesRight->setText(right.arg(bytesPerSecond / 1024));
}
else
_messagesLeft->setText("");
}
else {
_messagesLeft->setText(QString::fromStdString(s.error));
}
}
void InfoWidget::error(QString message) {
_messagesLeft->setText(message);
}

View File

@@ -1,174 +0,0 @@
/*****************************************************************************************
* *
* 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 <QApplication>
#include <QFile>
#include "mainwindow.h"
#include <ghoul/filesystem/filesystem>
static const QString style = R"style(
QWidget {
/*font-family: "Helvetica";*/
}
QWidget#MainWindow, QTextEdit, QWidget#SyncWidget, QWidget#DownloadArea {
background-color: rgb(40, 40, 40);
}
QTextEdit, QLabel, QComboBox, QCheckBox {
color: #EDEDED;
font-size: 12px;
}
QLabel {
font-size: 13px;
}
QLabel#Image {
margin: -10px 0px -5px 0px;
}
QTextEdit {
border-width: 2px 2px 0px 0px;
border-style: solid;
background-color: rgb(60, 60, 60);
}
QPushButton {
color:#202020;
background-color:
qlineargradient(
x1: 0, y1: 0, x2: 0, y2: 1,
stop: 0 white,
stop: 1 #555555
);
border: 1px solid black;
font-size: 11px;
min-height: 20px;
}
QComboBox {
background-color: rgb(60, 60, 60);
min-height: 20px;
}
QComboBox:focus, QComboBox:focus QAbstractItemView {
color: white;
background-color: rgb(60, 60, 60);
selection-background-color: rgb(75, 75, 75);
}
QCheckBox {
border: none;
}
QCheckBox::indicator {
width: 12px;
height: 12px;
}
QCheckBox::indicator::unchecked {
border: 1px solid #5A5A5A;
background: #A0A0A0;
}
QCheckBox::indicator:unchecked:hover {
border: 1px solid #DDDDDD;
}
QCheckBox::indicator::checked {
border: 1px solid #5A5A5A;
background: #5AB65A;
}
QCheckBox::indicator:checked:hover {
border: 1px solid #DDDDDD;
}
QGroupBox, QScrollArea {
border: 0px;
}
InfoWidget {
border-width: 1px;
border-style: solid;
border-color: #BBBBBB;
margin: 2px 1px 2px 1px;
padding: 7.5px;
}
InfoWidget QLabel#Name {
font-size: 17px;
}
InfoWidget QLabel#Bytes {
font-size: 13px;
font-family: "Lucida Console";
}
InfoWidget QLabel#MessageLeft, QLabel#MessageCenter, QLabel#MessageRight {
font-size: 11.5px;
margin-top: -2px;
}
InfoWidget QProgressBar {
border: 2px solid #BBBBBB;
border-radius: 5px;
background: white;
height: 15px;
}
InfoWidget QProgressBar::chunk {
background: qlineargradient(
x1: 0, y1: 0.5, x2: 1, y2: 0.5,
stop: 0 #444444,
stop: 1 #600000
);
}
QScrollBar {
border: 1px solid #000000;
background: #282828;
width: 15px;
margin: 16px 0px 16px 0px;
}
QScrollBar::handle {
background: #B0B0B0;
border: 1px solid #000000;
border-width: 1px 0px 1px 0px;
min-height: 20px;
}
QScrollBar::add-line, QScrollBar::sub-line {
background:#B0B0B0;
border: 1px solid #5A5A5A;
subcontrol-origin: margin;
}
QScrollBar::add-line {
top: 15px;
height: 15px;
}
QScrollBar::sub-line {
height: 15px;
subcontrol-position: top;
}
QScrollBar::up-arrow, QScrollBar::down-arrow {
border: 1px solid #5A5A5A;
width: 3px;
height: 3px;
background-color: #353535;
}
QScrollBar::add-page, QScrollBar::sub-page {
background: none;
}
)style";
int main(int argc, char** argv) {
QApplication app(argc, argv);
app.setStyleSheet(style);
MainWindow window;
window.show();
return app.exec();
}

View File

@@ -1,349 +0,0 @@
/*****************************************************************************************
* *
* 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 "mainwindow.h"
#include "shortcutwidget.h"
#include "syncwidget.h"
#include <openspace/engine/configurationmanager.h>
#include <openspace/engine/openspaceengine.h>
#include <openspace/engine/logfactory.h>
#include <ghoul/filesystem/filesystem.h>
#include <ghoul/logging/log.h>
#include <ghoul/logging/logmanager.h>
#include <ghoul/logging/consolelog.h>
#include <ghoul/logging/htmllog.h>
#include <ghoul/logging/visualstudiooutputlog.h>
#include <QApplication>
#include <QComboBox>
#include <QDir>
#include <QGridLayout>
#include <QHBoxLayout>
#include <QLabel>
#include <QProcess>
#include <QPushButton>
#include <QThread>
namespace {
const QSize WindowSize = QSize(640, 480);
const QString NewsURL = "http://openspaceproject.com/news.txt";
const std::string _configurationFile = "openspace.cfg";
#ifdef WIN32
const QString OpenSpaceExecutable = "OpenSpace.exe";
#else
const QString OpenSpaceExecutable = "./OpenSpace";
#endif
class QLog : public ghoul::logging::Log {
public:
void log(
[[maybe_unused]] ghoul::logging::LogLevel level,
[[maybe_unused]] const std::string& category,
[[maybe_unused]] const std::string& message
) {
//qDebug() << QString::fromStdString(category) << ": " << QString::fromStdString(message);
}
};
}
MainWindow::MainWindow()
: QWidget(nullptr)
, _newsReply(nullptr)
, _informationWidget(nullptr)
, _scenes(nullptr)
, _shortcutWidget(nullptr)
, _syncWidget(nullptr)
{
setObjectName("MainWindow");
setFixedSize(WindowSize);
//setContentsMargins(0, 0, 0, 0);
QGridLayout* layout = new QGridLayout;
layout->setContentsMargins(0, 0, 0, 0);
QLabel* image = new QLabel;
//image->setContentsMargins(0, 0, 0, 0);
image->setObjectName("Image");
QPixmap p = QPixmap(":/images/header.png");
image->setPixmap(p);
layout->addWidget(image, 0, 0, 1, 2);
_informationWidget = new QTextEdit(this);
_informationWidget->setReadOnly(true);
//_informationWidget->setEnabled(false);
layout->addWidget(_informationWidget, 1, 0, 2, 1);
layout->setRowStretch(1, 10);
layout->setColumnStretch(0, 4);
layout->setColumnStretch(1, 5);
QWidget* container = new QWidget;
{
QGridLayout* innerLayout = new QGridLayout;
//QLabel* shortcutLabel = new QLabel("Keyboard Shortcuts:");
//innerLayout->addWidget(shortcutLabel, 0, 0);
//QPushButton* shortcutButton = new QPushButton("Open...");
//QObject::connect(shortcutButton, SIGNAL(clicked(bool)),
// this, SLOT(shortcutButtonPressed())
// );
//innerLayout->addWidget(shortcutButton, 0, 1);
innerLayout->setRowStretch(1, 10);
QLabel* configurationSelectionLabel = new QLabel("Configuration:");
innerLayout->addWidget(configurationSelectionLabel, 2, 0);
_configurations = new QComboBox;
innerLayout->addWidget(_configurations, 2, 1);
QLabel* sceneSelectionLabel = new QLabel("Scenes:");
innerLayout->addWidget(sceneSelectionLabel, 3, 0);
_scenes = new QComboBox;
innerLayout->addWidget(_scenes, 3, 1);
container->setLayout(innerLayout);
}
layout->addWidget(container, 1, 1);
container = new QWidget;
{
QBoxLayout* innerLayout = new QHBoxLayout;
QPushButton* cancelButton = new QPushButton("Exit");
QObject::connect(
cancelButton, SIGNAL(clicked(bool)),
QApplication::instance(), SLOT(quit())
);
innerLayout->addWidget(cancelButton);
QPushButton* syncButton = new QPushButton("Sync");
QObject::connect(
syncButton, SIGNAL(clicked(bool)),
this, SLOT(syncButtonPressed())
);
innerLayout->addWidget(syncButton);
QPushButton* startButton = new QPushButton("Start");
QObject::connect(
startButton, SIGNAL(clicked(bool)),
this, SLOT(startButtonPressed())
);
innerLayout->addWidget(startButton);
container->setLayout(innerLayout);
}
layout->addWidget(container, 2, 1);
setLayout(layout);
initialize();
}
MainWindow::~MainWindow() {
delete _informationWidget;
}
void MainWindow::configureLogging() {
const std::string KeyLogLevel =
openspace::ConfigurationManager::KeyLauncher + '.' + openspace::ConfigurationManager::PartLogLevel;
const std::string KeyLogImmediateFlush =
openspace::ConfigurationManager::KeyLauncher + '.' + openspace::ConfigurationManager::PartImmediateFlush;
const std::string KeyLogs =
openspace::ConfigurationManager::KeyLauncher + '.' + openspace::ConfigurationManager::PartLogs;
ghoul::logging::LogLevel ghoulLogLevel;
std::string logLevel = "None";
bool immediateFlush = false;
if (_optionParser->isSet("d")) {
ghoulLogLevel = static_cast<ghoul::logging::LogLevel>(_optionParser->value("d").toInt());
} else {
if (_configuration->hasKeyAndValue<std::string>(KeyLogLevel)) {
_configuration->getValue(KeyLogLevel, logLevel);
_configuration->getValue(KeyLogImmediateFlush, immediateFlush);
}
ghoulLogLevel = ghoul::logging::levelFromString(logLevel);
}
printf("%d", ghoulLogLevel);
using ImmediateFlush = ghoul::logging::LogManager::ImmediateFlush;
ghoul::logging::LogManager::initialize(
ghoulLogLevel,
immediateFlush ? ImmediateFlush::Yes : ImmediateFlush::No
);
LogMgr.addLog(std::make_unique<ghoul::logging::ConsoleLog>());
// TODO: This can crash the system in cases where the logfile can't be created ---abock
LogMgr.addLog(std::make_unique< ghoul::logging::HTMLLog >("LauncherLog.html", ghoul::logging::HTMLLog::Append::No));
LogMgr.addLog(std::make_unique< QLog >());
if (_configuration->hasKeyAndValue<ghoul::Dictionary>(KeyLogs)) {
ghoul::Dictionary logs;
_configuration->getValue(KeyLogs, logs);
for (size_t i = 1; i <= logs.size(); ++i) {
ghoul::Dictionary logInfo;
logs.getValue(std::to_string(i), logInfo);
try {
LogMgr.addLog(openspace::createLog(logInfo));
}
catch (const ghoul::RuntimeError& e) {
LERRORC(e.component, e.message);
}
}
}
#ifdef WIN32
if (IsDebuggerPresent()) {
LogMgr.addLog(std::make_unique<ghoul::logging::VisualStudioOutputLog>());
}
#endif // WIN32
#ifndef GHOUL_LOGGING_ENABLE_TRACE
if (ghoulLogLevel == ghoul::logging::LogLevel::Trace) {
LWARNING("Desired logging level is set to 'Trace' but application was " <<
"compiled without Trace support");
}
#endif // GHOUL_LOGGING_ENABLE_TRACE
}
void MainWindow::initialize() {
// ParseOptions
generateOptions();
// Get the news information
QNetworkRequest request;
request.setUrl(QUrl(NewsURL));
_newsReply = _networkManager.get(request);
QObject::connect(_newsReply, SIGNAL(finished()),
this, SLOT(newsReadyRead())
);
QObject::connect(_newsReply, SIGNAL(error(QNetworkReply::NetworkError)),
this, SLOT(newsNetworkError())
);
_shortcutWidget = new ShortcutWidget(this, Qt::Popup | Qt::Dialog);
_shortcutWidget->setWindowModality(Qt::WindowModal);
_shortcutWidget->hide();
_syncWidget = new SyncWidget(this, Qt::Popup | Qt::Dialog);
_syncWidget->setWindowModality(Qt::WindowModal);
_syncWidget->hide();
std::string configurationFile = _configurationFile;
_configuration = new openspace::ConfigurationManager;
configurationFile = _configuration->findConfiguration( configurationFile );
_configuration->loadFromFile(configurationFile);
configureLogging();
// Load all available scenes
QString modulesDirectory = QString::fromStdString(absPath("${SCENE}"));
QDir d(modulesDirectory);
d.setFilter(QDir::Files);
QFileInfoList list = d.entryInfoList();
_scenes->addItem("Use Default");
for (const QFileInfo& i : list) {
QString file = i.fileName();
file = file.replace(".scene", "");
_sceneFiles.insert(file, i.absoluteFilePath());
_scenes->addItem(file);
}
_scenes->setCurrentText("Use Default");
_syncWidget->setSceneFiles(_sceneFiles);
// Load all available configuration files
QString configurationDirectory = QString::fromStdString(absPath("${CONFIG}"));
d = QDir(configurationDirectory);
d.setFilter(QDir::Files);
list = d.entryInfoList();
_configurations->addItem("Use Default");
for (const QFileInfo& i : list) {
QString file = i.fileName();
file = file.replace(".xml", "");
_configurationFiles.insert(file, i.absoluteFilePath());
_configurations->addItem(file);
}
_configurations->setCurrentText("Use Default");
}
void MainWindow::shortcutButtonPressed() {
_shortcutWidget->show();
}
void MainWindow::syncButtonPressed() {
_syncWidget->show();
}
void MainWindow::startButtonPressed() {
QString exec = OpenSpaceExecutable;
if (_sceneFiles.contains(_scenes->currentText()))
exec += " -scene \"" + _sceneFiles[_scenes->currentText()] + "\"";
if (_configurationFiles.contains(_configurations->currentText()))
exec += " -sgct \"" + _configurationFiles[_configurations->currentText()] + "\"";
LINFOC("MainWindow", "Executing: " << exec.toStdString());
QProcess::startDetached(exec);
}
void MainWindow::newsNetworkError() {
QString error = _newsReply->errorString();
_informationWidget->setText(error);
_newsReply->deleteLater();
}
void MainWindow::newsReadyRead() {
QByteArray arrayData = _newsReply->readAll();
QString news = QString::fromLatin1(arrayData);
_informationWidget->setText(news);
_newsReply->deleteLater();
}
void MainWindow::generateOptions() {
_optionParser = new QCommandLineParser;
_optionParser->setApplicationDescription("OpenSpace Launcher");
_optionParser->addHelpOption();
_optionParser->addVersionOption();
_optionParser->addOptions({
{ { "d", "debug" },
QCoreApplication::translate("main", "Debug output level"),
QCoreApplication::translate("main", "0, 1, 2, 3, 4, 5, 6, 7"),
QCoreApplication::translate("main", "1"),
}
});
_optionParser->process(*QApplication::instance());
}

View File

@@ -1,725 +0,0 @@
/*****************************************************************************************
* *
* 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 "syncwidget.h"
#include "infowidget.h"
#include <openspace/openspace.h>
#include <ghoul/ghoul.h>
#include <ghoul/filesystem/filesystem.h>
#include <ghoul/filesystem/file.h>
#include <ghoul/logging/logmanager.h>
#include <ghoul/lua/ghoul_lua.h>
#include <ghoul/lua/luastate.h>
#include <ghoul/misc/dictionary.h>
#include <ghoul/misc/onscopeexit.h>
#include <QApplication>
#include <QCheckBox>
#include <QDir>
#include <QDirIterator>
#include <QFileInfo>
#include <QGridLayout>
#include <QGroupBox>
#include <QPushButton>
#include <QScrollArea>
#include <QString>
#include <QThread>
#include <QTimer>
#include <QVBoxLayout>
#include <libtorrent/entry.hpp>
#include <libtorrent/bencode.hpp>
#include <libtorrent/session.hpp>
#include <libtorrent/alert_types.hpp>
#include <libtorrent/torrent_info.hpp>
#include <fstream>
#include <mutex>
namespace {
const std::string _loggerCat = "SyncWidget";
const std::string _configurationFile = "Launcher.config";
const int nColumns = 3;
const int DownloadApplicationVersion = 1;
const std::string FileDownloadKey = "FileDownload";
const std::string FileRequestKey = "FileRequest";
const std::string TorrentFilesKey = "TorrentFiles";
const std::string UrlKey = "URL";
const std::string FileKey = "File";
const std::string DestinationKey = "Destination";
const std::string IdentifierKey = "Identifier";
const std::string VersionKey = "Version";
const bool OverwriteFiles = false;
const bool CleanInfoWidgets = true;
}
SyncWidget::SyncWidget(QWidget* parent, Qt::WindowFlags f)
: QWidget(parent, f)
, _sceneLayout(nullptr)
, _session(new libtorrent::session)
{
setObjectName("SyncWidget");
setFixedSize(500, 500);
QBoxLayout* layout = new QVBoxLayout;
layout->setContentsMargins(0, 0, 0, 0);
{
QGroupBox* sceneBox = new QGroupBox;
_sceneLayout = new QGridLayout;
sceneBox->setLayout(_sceneLayout);
layout->addWidget(sceneBox);
}
{
QPushButton* syncButton = new QPushButton("Synchronize Data");
syncButton->setObjectName("SyncButton");
QObject::connect(
syncButton, SIGNAL(clicked(bool)),
this, SLOT(syncButtonPressed())
);
layout->addWidget(syncButton);
}
{
QScrollArea* area = new QScrollArea;
area->setWidgetResizable(true);
QWidget* w = new QWidget;
w->setObjectName("DownloadArea");
area->setWidget(w);
_downloadLayout = new QVBoxLayout(w);
_downloadLayout->setMargin(0);
_downloadLayout->setSpacing(0);
_downloadLayout->addStretch(100);
layout->addWidget(area);
}
QPushButton* close = new QPushButton("Close");
layout->addWidget(close, Qt::AlignRight);
QObject::connect(
close, SIGNAL(clicked(bool)),
this, SLOT(close())
);
setLayout(layout);
ghoul::initialize();
_downloadManager = std::make_unique<openspace::DownloadManager>(
"http://data.openspaceproject.com/request", DownloadApplicationVersion);
libtorrent::error_code ec;
_session->listen_on(std::make_pair(20280, 20290), ec);
libtorrent::settings_pack settings;
settings.set_str(libtorrent::settings_pack::user_agent, "OpenSpace/" +
std::to_string(openspace::OPENSPACE_VERSION_MAJOR) + "." +
std::to_string(openspace::OPENSPACE_VERSION_MINOR) + "." +
std::to_string(openspace::OPENSPACE_VERSION_PATCH));
settings.set_bool(libtorrent::settings_pack::allow_multiple_connections_per_ip, true);
settings.set_bool(libtorrent::settings_pack::ignore_limits_on_local_network, true);
settings.set_int(libtorrent::settings_pack::connection_speed, 20);
settings.set_int(libtorrent::settings_pack::active_downloads, -1);
settings.set_int(libtorrent::settings_pack::active_seeds, -1);
settings.set_int(libtorrent::settings_pack::active_limit, 30);
settings.set_int(libtorrent::settings_pack::dht_announce_interval, 60);
_session->apply_settings(settings);
if (ec) {
LFATAL("Failed to open socket: " << ec.message());
return;
}
_session->start_upnp();
std::ifstream file(_configurationFile);
if (!file.fail()) {
union {
uint32_t value;
std::array<char, 4> data;
} size;
file.read(size.data.data(), sizeof(uint32_t));
std::vector<char> buffer(size.value);
file.read(buffer.data(), size.value);
file.close();
libtorrent::entry e = libtorrent::bdecode(buffer.begin(), buffer.end());
_session->start_dht(e);
}
else
_session->start_dht();
_session->add_dht_router({ "router.utorrent.com", 6881 });
_session->add_dht_router({ "dht.transmissionbt.com", 6881 });
_session->add_dht_router({ "router.bittorrent.com", 6881 });
_session->add_dht_router({ "router.bitcomet.com", 6881 });
QTimer* timer = new QTimer(this);
QObject::connect(timer, SIGNAL(timeout()), this, SLOT(handleTimer()));
timer->start(100);
_mutex.clear();
_scriptEngine.initialize();
}
SyncWidget::~SyncWidget() {
libtorrent::entry dht = _session->dht_state();
std::vector<char> buffer;
libtorrent::bencode(std::back_inserter(buffer), dht);
std::ofstream f(_configurationFile);
union {
uint32_t value;
std::array<char, 4> data;
} size;
size.value = buffer.size();
f.write(size.data.data(), sizeof(uint32_t));
f.write(buffer.data(), buffer.size());
_downloadManager.reset();
ghoul::deinitialize();
delete _session;
}
void SyncWidget::closeEvent(QCloseEvent* event) {
std::vector<libtorrent::torrent_handle> handles = _session->get_torrents();
for (libtorrent::torrent_handle h : handles) {
h.flush_cache();
_session->remove_torrent(h);
}
}
void SyncWidget::setSceneFiles(QMap<QString, QString> sceneFiles) {
_sceneFiles = std::move(sceneFiles);
QStringList keys = _sceneFiles.keys();
for (int i = 0; i < keys.size(); ++i) {
const QString& sceneName = keys[i];
QCheckBox* checkbox = new QCheckBox(sceneName);
QString defaultName = "default";
if (sceneName == defaultName){
checkbox->setChecked(true);
}
_sceneLayout->addWidget(checkbox, i / nColumns, i % nColumns);
}
}
void SyncWidget::clear() {
for (std::shared_ptr<openspace::DownloadManager::FileFuture> f : _futures)
f->abortDownload = true;
using libtorrent::torrent_handle;
for (QMap<torrent_handle, InfoWidget*>::iterator i = _torrentInfoWidgetMap.begin();
i != _torrentInfoWidgetMap.end();
++i)
{
delete i.value();
}
_torrentInfoWidgetMap.clear();
_session->abort();
_directFiles.clear();
_fileRequests.clear();
_torrentFiles.clear();
}
void SyncWidget::handleDirectFiles() {
LDEBUG("Direct Files");
for (const DirectFile& f : _directFiles) {
LDEBUG(f.url.toStdString() << " -> " << f.destination.toStdString());
std::shared_ptr<openspace::DownloadManager::FileFuture> future = _downloadManager->downloadFile(
f.url.toStdString(),
absPath("${SCENE}/" + f.module.toStdString() + "/" + f.destination.toStdString()),
OverwriteFiles
);
if (future) {
InfoWidget* w = new InfoWidget(f.destination);
_downloadLayout->insertWidget(_downloadLayout->count() - 1, w);
_futures.push_back(future);
_futureInfoWidgetMap[future] = w;
}
}
}
void SyncWidget::handleFileRequest() {
LDEBUG("File Requests");
for (const FileRequest& f : _fileRequests) {
LDEBUG(f.identifier.toStdString() << " (" << f.version << ") -> " << f.destination.toStdString());
ghoul::filesystem::Directory d = FileSys.currentDirectory();
OnExit([&]() { FileSys.setCurrentDirectory(d); });
FileSys.setCurrentDirectory(f.baseDir.toStdString());
std::string identifier = f.identifier.toStdString();
std::string path = absPath(f.destination.toStdString());
int version = f.version;
std::string requestId = path + "$" + identifier;
std::lock_guard<std::mutex> g(_filesDownloadingMutex);
if (_filesDownloading.find(requestId) != _filesDownloading.end()) {
continue; // The file is already being downloaded.
}
_filesDownloading.insert(requestId);
_downloadManager->downloadRequestFilesAsync(
identifier,
path,
version,
OverwriteFiles,
[this, requestId](const std::vector<std::shared_ptr<openspace::DownloadManager::FileFuture>>& futures) {
handleFileFutureAddition(futures);
std::lock_guard<std::mutex> g(_filesDownloadingMutex);
_filesDownloading.erase(requestId);
}
);
}
}
void SyncWidget::handleTorrentFiles() {
LDEBUG("Torrent Files");
for (const TorrentFile& f : _torrentFiles) {
LDEBUG(f.file.toStdString() << " -> " << f.destination.toStdString());
ghoul::filesystem::Directory d = FileSys.currentDirectory();
// std::string thisDirectory = absPath("${SCENE}/" + f.module.toStdString() + "/");
FileSys.setCurrentDirectory(f.baseDir.toStdString());
// FileSys.setCurrentDirectory(thisDirectory);
QString file = QString::fromStdString(absPath(f.file.toStdString()));
if (!QFileInfo(file).exists()) {
LERROR(file.toStdString() << " does not exist");
continue;
}
libtorrent::error_code ec;
libtorrent::add_torrent_params p;
//if (f.destination.isEmpty())
//p.save_path = absPath(fullPath(f.module, ".").toStdString());
//else
//p.save_path =
p.save_path = absPath(f.destination.toStdString());
p.ti = std::make_shared<libtorrent::torrent_info>(file.toStdString(), ec);
p.name = f.file.toStdString();
p.storage_mode = libtorrent::storage_mode_allocate;
if (ec) {
LERROR(f.file.toStdString() << ": " << ec.message());
continue;
}
libtorrent::torrent_handle h = _session->add_torrent(p, ec);
if (ec) {
LERROR(f.file.toStdString() << ": " << ec.message());
continue;
}
if (_torrentInfoWidgetMap.find(h) == _torrentInfoWidgetMap.end()) {
QString fileString = f.file;
QString t = QString(".torrent");
fileString.replace(fileString.indexOf(t), t.size(), "");
fileString = f.module + "/" + fileString;
InfoWidget* w = new InfoWidget(fileString, h.status().total_wanted);
_downloadLayout->insertWidget(_downloadLayout->count() - 1, w);
_torrentInfoWidgetMap[h] = w;
}
FileSys.setCurrentDirectory(d);
}
}
void SyncWidget::syncButtonPressed() {
clear();
ghoul::lua::LuaState state;
_scriptEngine.initializeLuaState(state);
for (const QString& scene : selectedScenes()) {
LDEBUG(scene.toStdString());
ghoul::Dictionary sceneDictionary;
try {
ghoul::lua::loadDictionaryFromFile(
scene.toStdString(),
sceneDictionary,
state
);
} catch (const ghoul::lua::LuaRuntimeException& e) {
LERROR(e.message);
return;
}
ghoul::Dictionary modules;
bool success = sceneDictionary.getValue<ghoul::Dictionary>("Modules", modules);
if (!success) {
LERROR("Could not find 'Modules'");
return;
}
QDir sceneDir(scene);
sceneDir.cdUp();
QList<ModuleInformation> modulesList;
for (int i = 1; i <= modules.size(); ++i) {
std::string module = modules.value<std::string>(std::to_string(i));
std::string shortModule = module;
std::string::size_type pos = module.find_last_of(FileSys.PathSeparator);
if (pos != std::string::npos) {
shortModule = module.substr(pos+1);
}
QString m = QString::fromStdString(module);
QString dataFile = sceneDir.absoluteFilePath(
QString::fromStdString(module) + "/" + QString::fromStdString(shortModule) + ".data"
);
if (QFileInfo(dataFile).exists()) {
modulesList.append({
QString::fromStdString(module),
dataFile,
sceneDir.absolutePath() + "/" + QString::fromStdString(module)
});
}
else {
QDir metaModuleDir = sceneDir;
metaModuleDir.cd(QString::fromStdString(module));
QDirIterator it(metaModuleDir.absolutePath(), QStringList() << "*.data", QDir::Files, QDirIterator::Subdirectories);
while (it.hasNext()) {
QString v = it.next();
QDir d(v);
d.cdUp();
modulesList.append({
d.dirName(),
v,
d.absolutePath()
});
}
}
}
modulesList.append({
"common",
sceneDir.absolutePath() + "/common/common.data",
sceneDir.absolutePath() + "/common"
});
for (const ModuleInformation& module : modulesList) {
QString dataFile = module.moduleDatafile;
// QString dataFile = sceneDir.absoluteFilePath(module + "/" + module + ".data");
if (QFileInfo(dataFile).exists()) {
ghoul::Dictionary dataDictionary;
try {
ghoul::lua::loadDictionaryFromFile(dataFile.toStdString(), dataDictionary);
}
catch (const ghoul::lua::LuaLoadingException& exception) {
LWARNINGC(exception.component, exception.message);
}
ghoul::Dictionary directDownloadFiles;
ghoul::Dictionary fileRequests;
ghoul::Dictionary torrentFiles;
bool found = dataDictionary.getValue<ghoul::Dictionary>(FileDownloadKey, directDownloadFiles);
if (found) {
for (int i = 1; i <= directDownloadFiles.size(); ++i) {
if (!directDownloadFiles.hasKeyAndValue<ghoul::Dictionary>(std::to_string(i))) {
LERROR(dataFile.toStdString() << ": " << FileDownloadKey << " is not a dictionary");
continue;
}
ghoul::Dictionary d = directDownloadFiles.value<ghoul::Dictionary>(std::to_string(i));
if (!d.hasKeyAndValue<std::string>(UrlKey)) {
LERROR(dataFile.toStdString() << ": No " << UrlKey);
continue;
}
std::string url = d.value<std::string>(UrlKey);
std::string dest = "";
if (d.hasKeyAndValue<std::string>(DestinationKey))
dest = d.value<std::string>(DestinationKey);
_directFiles.append({
module.moduleName,
QString::fromStdString(url),
QString::fromStdString(dest),
module.modulePath
});
}
}
found = dataDictionary.getValue<ghoul::Dictionary>(FileRequestKey, fileRequests);
if (found) {
for (int i = 1; i <= fileRequests.size(); ++i) {
ghoul::Dictionary d = fileRequests.value<ghoul::Dictionary>(std::to_string(i));
if (!d.hasKeyAndValue<std::string>(IdentifierKey)) {
LERROR(dataFile.toStdString() << ": No " << IdentifierKey);
continue;
}
std::string url = d.value<std::string>(IdentifierKey);
std::string dest = "";
if (d.hasKeyAndValue<std::string>(DestinationKey))
dest = d.value<std::string>(DestinationKey);
if (!d.hasKeyAndValue<double>(VersionKey)) {
LERROR(dataFile.toStdString() << ": No " << VersionKey);
continue;
}
int version = static_cast<int>(d.value<double>(VersionKey));
_fileRequests.append({
module.moduleName,
QString::fromStdString(url),
QString::fromStdString(dest),
module.modulePath,
version
});
}
}
found = dataDictionary.getValue<ghoul::Dictionary>(TorrentFilesKey, torrentFiles);
if (found) {
for (int i = 1; i <= torrentFiles.size(); ++i) {
ghoul::Dictionary d = torrentFiles.value<ghoul::Dictionary>(std::to_string(i));
if (!d.hasKeyAndValue<std::string>(FileKey)) {
LERROR(dataFile.toStdString() << ": No " << FileKey);
continue;
}
std::string file = d.value<std::string>(FileKey);
std::string dest;
if (d.hasKeyAndValue<std::string>(DestinationKey))
dest = d.value<std::string>(DestinationKey);
else
dest = "";
_torrentFiles.append({
module.moduleName,
QString::fromStdString(file),
QString::fromStdString(dest),
module.modulePath
});
}
}
}
}
}
// Remove duplicates for file requests
std::map<QString, FileRequest> uniqueFileRequests;
for (const FileRequest& f : _fileRequests) {
uniqueFileRequests.emplace(std::make_pair(f.baseDir + "/" + f.destination, f));
}
_fileRequests.clear();
for (const auto& f : uniqueFileRequests) {
_fileRequests.append(f.second);
}
// Remove duplicates for direct files
std::map<QString, DirectFile> uniqueDirectFiles;
for (const DirectFile& f : _directFiles) {
uniqueDirectFiles.emplace(std::make_pair(f.destination, f));
}
_directFiles.clear();
for (const auto& f : uniqueDirectFiles) {
_directFiles.append(f.second);
}
// Remove duplicates for torrents
std::map<QString, TorrentFile> uniqueTorrentFiles;
for (const TorrentFile& f : _torrentFiles) {
uniqueTorrentFiles.emplace(std::make_pair(f.destination, f));
}
_directFiles.clear();
for (const auto& f : uniqueTorrentFiles) {
_torrentFiles.append(f.second);
}
handleDirectFiles();
handleFileRequest();
handleTorrentFiles();
}
QStringList SyncWidget::selectedScenes() const {
QStringList result;
int nChildren = _sceneLayout->count();
for (int i = 0; i < nChildren; ++i) {
QWidget* w = _sceneLayout->itemAt(i)->widget();
QCheckBox* c = static_cast<QCheckBox*>(w);
if (c->isChecked()) {
QString t = c->text();
result.append(_sceneFiles[t]);
}
}
std::string scenes;
for (QString s : result)
scenes += s.toStdString() + "; ";
LDEBUG("Downloading scenes: " << scenes);
return result;
}
void SyncWidget::handleTimer() {
using namespace libtorrent;
using FileFuture = openspace::DownloadManager::FileFuture;
std::vector<std::shared_ptr<FileFuture>> toRemove;
for (std::shared_ptr<FileFuture> f : _futures) {
InfoWidget* w = _futureInfoWidgetMap[f];
if (CleanInfoWidgets && (f->isFinished || f->isAborted)) {
toRemove.push_back(f);
_downloadLayout->removeWidget(w);
_futureInfoWidgetMap.erase(f);
delete w;
}
else
w->update(f);
}
for (std::shared_ptr<FileFuture> f : toRemove) {
_futures.erase(std::remove(_futures.begin(), _futures.end(), f), _futures.end());
}
while (_mutex.test_and_set()) {}
for (std::shared_ptr<FileFuture> f : _futuresToAdd) {
InfoWidget* w = new InfoWidget(QString::fromStdString(f->filePath), -1);
_downloadLayout->insertWidget(_downloadLayout->count() - 1, w);
_futureInfoWidgetMap[f] = w;
_futures.push_back(f);
}
_futuresToAdd.clear();
_mutex.clear();
std::vector<torrent_handle> handles = _session->get_torrents();
for (torrent_handle h : handles) {
torrent_status s = h.status();
InfoWidget* w = _torrentInfoWidgetMap[h];
if (w)
w->update(s);
if (CleanInfoWidgets && (s.state == torrent_status::finished || s.state == torrent_status::seeding)) {
_torrentInfoWidgetMap.remove(h);
delete w;
}
}
// Only close every torrent if all torrents are finished
bool allSeeding = true;
for (torrent_handle h : handles) {
torrent_status s = h.status();
allSeeding &= (s.state == torrent_status::seeding);
}
if (allSeeding) {
for (torrent_handle h : handles)
_session->remove_torrent(h);
}
//_session->post_torrent_updates();
//libtorrent::session_settings settings = _session->settings();
//qDebug() << "Session";
//qDebug() << "nPeers: " << _session->status().num_peers;
//qDebug() << "DHT: " << _session->is_dht_running();
//qDebug() << "Incoming TCP" << settings.enable_incoming_tcp;
//qDebug() << "Outgoing TCP" << settings.enable_outgoing_tcp;
//qDebug() << "Incoming UTP" << settings.enable_incoming_utp;
//qDebug() << "Outgoing UTP" << settings.enable_outgoing_utp;
//qDebug() << "===";
//qDebug() << "Alerts";
//std::deque<alert*> alerts;
//_session->pop_alerts(&alerts);
//for (alert* a : alerts) {
// qDebug() << QString::fromStdString(a->message());
// //if (a->category() == alert::status_notification) {
// // state_update_alert* sua = static_cast<state_update_alert*>(a);
// // for (torrent_status s )
// //}
//}
//qDebug() << "===";
// qDebug() << "Name: " << QString::fromStdString(h.name());
// //torrent_status s = h.status();
// qDebug() << "Error: " << QString::fromStdString(s.error);
// qDebug() << "Total Wanted: " << s.total_wanted;
// qDebug() << "Total Wanted Done: " << s.total_wanted_done;
// qDebug() << "Has Incoming: " << s.has_incoming;
// qDebug() << "Connect Candidates: " << s.connect_candidates;
// qDebug() << "Last Seen Complete: " << s.last_seen_complete;
// qDebug() << "List Peers: " << s.list_peers;
// qDebug() << "List Seeds: " << s.list_seeds;
// qDebug() << "Num Pieces: " << s.num_pieces;
// qDebug() << "Download Rate: " << s.download_rate;
// qDebug() << "List Seeds: " << s.list_seeds;
// qDebug() << "Paused: " << s.paused;
// qDebug() << "Progress: " << s.progress;
// qDebug() << "";
}
void SyncWidget::handleFileFutureAddition(
const std::vector<std::shared_ptr<openspace::DownloadManager::FileFuture>>& futures)
{
while (_mutex.test_and_set()) {}
_futuresToAdd.insert(_futuresToAdd.end(), futures.begin(), futures.end());
_mutex.clear();
}

View File

@@ -1,129 +0,0 @@
/*****************************************************************************************
* *
* 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. *
****************************************************************************************/
#ifndef __OPENSPACE_APP_LAUNCHER___SYNCWIDGET___H__
#define __OPENSPACE_APP_LAUNCHER___SYNCWIDGET___H__
#include <QWidget>
#include <QMap>
#include <openspace/engine/downloadmanager.h>
#include <openspace/scripting/scriptengine.h>
#include <libtorrent/torrent_handle.hpp>
#include <atomic>
//#include <thread>
class QBoxLayout;
class QGridLayout;
class InfoWidget;
namespace libtorrent {
class session;
struct torrent_handle;
}
class SyncWidget : public QWidget {
Q_OBJECT
public:
SyncWidget(QWidget* parent, Qt::WindowFlags f = 0);
~SyncWidget();
void setSceneFiles(QMap<QString, QString> sceneFiles);
private slots:
void syncButtonPressed();
void handleTimer();
void closeEvent(QCloseEvent* event);
private:
struct DirectFile {
QString module;
QString url;
QString destination;
QString baseDir;
};
struct FileRequest {
QString module;
QString identifier;
QString destination;
QString baseDir;
int version;
};
struct TorrentFile {
QString module;
QString file;
QString destination;
QString baseDir;
};
struct ModuleInformation {
QString moduleName;
QString moduleDatafile;
QString modulePath;
};
void clear();
QStringList selectedScenes() const;
void handleFileFutureAddition(const std::vector<std::shared_ptr<openspace::DownloadManager::FileFuture>>& futures);
void handleDirectFiles();
void handleFileRequest();
void handleTorrentFiles();
QMap<QString, QString> _sceneFiles;
QString _modulesDirectory;
QGridLayout* _sceneLayout;
QBoxLayout* _downloadLayout;
libtorrent::session* _session;
QMap<libtorrent::torrent_handle, InfoWidget*> _torrentInfoWidgetMap;
QList<DirectFile> _directFiles;
QList<FileRequest> _fileRequests;
QList<TorrentFile> _torrentFiles;
std::mutex _filesDownloadingMutex;
std::set<std::string> _filesDownloading;
std::vector<std::shared_ptr<openspace::DownloadManager::FileFuture>> _futures;
std::map<std::shared_ptr<openspace::DownloadManager::FileFuture>, InfoWidget*> _futureInfoWidgetMap;
std::vector<std::shared_ptr<openspace::DownloadManager::FileFuture>> _futuresToAdd;
std::atomic_flag _mutex;
std::unique_ptr<openspace::DownloadManager> _downloadManager;
openspace::scripting::ScriptEngine _scriptEngine;
};
#endif // __OPENSPACE_APP_LAUNCHER___SYNCWIDGET___H__

View File

@@ -2,7 +2,7 @@
# #
# OpenSpace #
# #
# Copyright (c) 2014-2017 #
# Copyright (c) 2014-2018 #
# #
# 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 #
@@ -87,10 +87,18 @@ if (OPENSPACE_SPOUT_SUPPORT)
add_external_library_dependencies(${CMAKE_CURRENT_SOURCE_DIR}/ext/spout/SpoutLibrary.dll)
endif ()
set(MACOSX_BUNDLE_ICON_FILE openspace.icns)
create_new_application(OpenSpace
${SGCT_OPENVR_FILES}
${CMAKE_CURRENT_SOURCE_DIR}/main.cpp
${CMAKE_CURRENT_SOURCE_DIR}/openspace.rc
${CMAKE_CURRENT_SOURCE_DIR}/openspace.icns
)
set_source_files_properties(
${CMAKE_CURRENT_SOURCE_DIR}/openspace.icns
PROPERTIES MACOSX_PACKAGE_LOCATION "Resources"
)
target_include_directories(

View File

@@ -2,7 +2,7 @@
* *
* OpenSpace *
* *
* Copyright (c) 2014-2017 *
* Copyright (c) 2014-2018 *
* *
* 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 *
@@ -28,7 +28,7 @@
#include <ghoul/logging/logmanager.h>
#include <ghoul/misc/assert.h>
//#include <ghoul/opengl/ghoul_gl.h>
#include <ghoul/misc/boolean.h>
#include <sgct.h>
@@ -67,11 +67,11 @@
namespace {
const char* _loggerCat = "main";
constexpr const char* _loggerCat = "main";
sgct::Engine* SgctEngine;
const char* OpenVRTag = "OpenVR";
const char* SpoutTag = "Spout";
constexpr const char* OpenVRTag = "OpenVR";
constexpr const char* SpoutTag = "Spout";
#ifdef WIN32
@@ -268,7 +268,7 @@ void mainInitFunc() {
const sgct::SGCTWindow::StereoMode sm = windowPtr->getStereoMode();
const bool hasStereo =
(sm != sgct::SGCTWindow::No_Stereo) &&
(sm != sgct::SGCTWindow::No_Stereo) &&
(sm < sgct::SGCTWindow::Side_By_Side_Stereo);
if (hasStereo) {
@@ -351,14 +351,37 @@ void mainRenderFunc() {
}
#endif
OsEng.render(
SgctEngine->getModelMatrix(),
viewMatrix,
projectionMatrix
);
try {
OsEng.render(
SgctEngine->getModelMatrix(),
viewMatrix,
projectionMatrix
);
}
catch (const ghoul::RuntimeError& e) {
LERRORC(e.component, e.message);
}
LTRACE("main::mainRenderFunc(end)");
}
void mainDraw2DFunc() {
LTRACE("main::mainDraw2DFunc(begin)");
try {
OsEng.drawOverlays();
}
catch (const ghoul::RuntimeError& e) {
LERRORC(e.component, e.message);
}
// SGCT gets angry if we change this in our function
glEnable(GL_BLEND);
glDisable(GL_CULL_FACE);
glDisable(GL_DEPTH_TEST);
LTRACE("main::mainDraw2DFunc(end)");
}
void mainPostDrawFunc() {
LTRACE("main::mainPostDrawFunc(begin)");
@@ -525,6 +548,7 @@ int main_main(int argc, char** argv) {
SgctEngine->setPreSyncFunction(mainPreSyncFunc);
SgctEngine->setPostSyncPreDrawFunction(mainPostSyncPreDrawFunc);
SgctEngine->setDrawFunction(mainRenderFunc);
SgctEngine->setDraw2DFunction(mainDraw2DFunc);
SgctEngine->setPostDrawFunction(mainPostDrawFunc);
SgctEngine->setKeyboardCallbackFunction(mainKeyboardCallback);
SgctEngine->setMouseButtonCallbackFunction(mainMouseButtonCallback);
@@ -560,8 +584,11 @@ int main_main(int argc, char** argv) {
"Unknown OpenGL version. Missing statement in version mapping map"
);
auto cleanup = [&](){
OsEng.deinitialize();
using IsInitialized = ghoul::Boolean;
auto cleanup = [&](IsInitialized isInitialized){
if (isInitialized) {
OsEng.deinitialize();
}
// Clear function bindings to avoid crash after destroying the OpenSpace Engine
sgct::MessageHandler::instance()->setLogToCallback(false);
@@ -597,19 +624,19 @@ int main_main(int argc, char** argv) {
if (!initSuccess) {
LFATAL("Initializing failed");
cleanup();
cleanup(IsInitialized::No);
return EXIT_FAILURE;
}
// Main loop
LDEBUG("Starting rendering loop");
LINFO("Starting rendering loop");
SgctEngine->render();
LDEBUG("Ending rendering loop");
LINFO("Ending rendering loop");
cleanup();
cleanup(IsInitialized::Yes);
// Exit program
exit(EXIT_SUCCESS);
exit(EXIT_SUCCESS);
}
} // namespace

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 88 KiB

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 1.3 MiB

45
apps/Sync/CMakeLists.txt Normal file
View File

@@ -0,0 +1,45 @@
##########################################################################################
# #
# OpenSpace #
# #
# Copyright (c) 2014-2018 #
# #
# 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(${OPENSPACE_CMAKE_EXT_DIR}/application_definition.cmake)
set_source_files_properties(
${CMAKE_CURRENT_SOURCE_DIR}/openspace.icns
PROPERTIES MACOSX_PACKAGE_LOCATION "Resources"
)
set(MACOSX_BUNDLE_ICON_FILE openspace.icns)
create_new_application(
Sync
MACOSX_BUNDLE
${CMAKE_CURRENT_SOURCE_DIR}/main.cpp
${CMAKE_CURRENT_SOURCE_DIR}/openspace.rc
${CMAKE_CURRENT_SOURCE_DIR}/openspace.icns
)
target_link_libraries(
Sync
libOpenSpace
)

66
apps/Sync/main.cpp Normal file
View File

@@ -0,0 +1,66 @@
/*****************************************************************************************
* *
* OpenSpace *
* *
* Copyright (c) 2014-2018 *
* *
* 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 <openspace/engine/openspaceengine.h>
#include <openspace/engine/configurationmanager.h>
#include <openspace/engine/moduleengine.h>
#include <openspace/engine/wrapper/windowwrapper.h>
#include <openspace/util/factorymanager.h>
#include <openspace/util/progressbar.h>
#include <openspace/util/resourcesynchronization.h>
#include <openspace/util/taskloader.h>
#include <ghoul/ghoul.h>
#include <ghoul/filesystem/filesystem.h>
#include <ghoul/logging/logmanager.h>
#include <ghoul/logging/consolelog.h>
int main(int argc, char** argv) {
using namespace openspace;
std::vector<std::string> unusedStringlist;
bool unusedBool;
OpenSpaceEngine::create(argc, argv, nullptr, unusedStringlist, unusedBool);
TaskLoader taskLoader;
std::vector<std::unique_ptr<Task>> tasks = taskLoader.tasksFromFile(
absPath("${TASKS}/full_sync.task")
);
for (size_t i = 0; i < tasks.size(); i++) {
Task& task = *tasks[i].get();
LINFOC(
"Sync",
"Synchronizing scene " << (i + 1) << " out of " <<
tasks.size() << ": " << task.description()
);
ProgressBar progressBar(100);
task.perform([&progressBar](float progress) {
progressBar.print(static_cast<int>(progress * 100.f));
});
}
std::cout << "Done synchronizing." << std::endl;
return 0;
};

BIN
apps/Sync/openspace.icns Normal file

Binary file not shown.

View File

Before

Width:  |  Height:  |  Size: 88 KiB

After

Width:  |  Height:  |  Size: 88 KiB

View File

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 28 KiB

View File

@@ -2,7 +2,7 @@
# #
# OpenSpace #
# #
# Copyright (c) 2014-2017 #
# Copyright (c) 2014-2018 #
# #
# 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 #
@@ -24,10 +24,19 @@
include(${OPENSPACE_CMAKE_EXT_DIR}/application_definition.cmake)
set_source_files_properties(
${CMAKE_CURRENT_SOURCE_DIR}/openspace.icns
PROPERTIES MACOSX_PACKAGE_LOCATION "Resources"
)
set(MACOSX_BUNDLE_ICON_FILE openspace.icns)
create_new_application(
TaskRunner
MACOSX_BUNDLE
${CMAKE_CURRENT_SOURCE_DIR}/main.cpp
${CMAKE_CURRENT_SOURCE_DIR}/openspace.rc
${CMAKE_CURRENT_SOURCE_DIR}/openspace.icns
)
target_link_libraries(

View File

@@ -0,0 +1 @@
set(DEFAULT_APPLICATION ON)

View File

@@ -2,7 +2,7 @@
* *
* OpenSpace *
* *
* Copyright (c) 2014-2017 *
* Copyright (c) 2014-2018 *
* *
* 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 *
@@ -38,13 +38,16 @@
#include <ghoul/cmdparser/commandlineparser.h>
#include <ghoul/cmdparser/singlecommand.h>
#include <openspace/engine/wrapper/windowwrapper.h>
#include <openspace/scripting/scriptengine.h>
#include <openspace/rendering/renderable.h>
#include <openspace/rendering/dashboarditem.h>
#include <openspace/util/progressbar.h>
#include <openspace/engine/openspaceengine.h>
#include <openspace/engine/configurationmanager.h>
#include <openspace/util/taskloader.h>
#include <openspace/util/factorymanager.h>
#include <openspace/util/resourcesynchronization.h>
#include <openspace/util/task.h>
#include <openspace/scene/translation.h>
#include <openspace/scene/rotation.h>
@@ -58,10 +61,14 @@ namespace {
void initTextureReaders() {
#ifdef GHOUL_USE_DEVIL
ghoul::io::TextureReader::ref().addReader(std::make_shared<ghoul::io::TextureReaderDevIL>());
ghoul::io::TextureReader::ref().addReader(
std::make_shared<ghoul::io::TextureReaderDevIL>()
);
#endif // GHOUL_USE_DEVIL
#ifdef GHOUL_USE_FREEIMAGE
ghoul::io::TextureReader::ref().addReader(std::make_shared<ghoul::io::TextureReaderFreeImage>());
ghoul::io::TextureReader::ref().addReader(
std::make_shared<ghoul::io::TextureReaderFreeImage>()
);
#endif // GHOUL_USE_FREEIMAGE
}
@@ -81,10 +88,13 @@ void performTasks(const std::string& path) {
for (size_t i = 0; i < tasks.size(); i++) {
Task& task = *tasks[i].get();
LINFO("Performing task " << (i + 1) << " out of " << tasks.size() << ": " << task.description());
LINFO(
"Performing task " << (i + 1) << " out of " <<
tasks.size() << ": " << task.description()
);
ProgressBar progressBar(100);
auto onProgress = [&progressBar](float progress) {
progressBar.print(progress * 100);
progressBar.print(static_cast<int>(progress * 100.f));
};
task.perform(onProgress);
}
@@ -94,61 +104,9 @@ void performTasks(const std::string& path) {
int main(int argc, char** argv) {
using namespace openspace;
ghoul::initialize();
ghoul::logging::LogManager::initialize(
ghoul::logging::LogLevel::Debug,
ghoul::logging::LogManager::ImmediateFlush::Yes
);
LogMgr.addLog(std::make_unique< ghoul::logging::ConsoleLog>());
LDEBUG("Initialize FileSystem");
ghoul::filesystem::Directory launchDirectory = FileSys.currentDirectory();
#ifdef __APPLE__
ghoul::filesystem::File app(argv[0]);
std::string dirName = app.directoryName();
LINFO("Setting starting directory to '" << dirName << "'");
FileSys.setCurrentDirectory(dirName);
#endif
initTextureReaders();
FactoryManager::initialize();
FactoryManager::ref().addFactory(
std::make_unique<ghoul::TemplateFactory<Renderable>>(),
"Renderable"
);
FactoryManager::ref().addFactory(
std::make_unique<ghoul::TemplateFactory<Task>>(),
"Task"
);
FactoryManager::ref().addFactory(
std::make_unique<ghoul::TemplateFactory<Translation>>(),
"Translation"
);
FactoryManager::ref().addFactory(
std::make_unique<ghoul::TemplateFactory<Rotation>>(),
"Rotation"
);
FactoryManager::ref().addFactory(
std::make_unique<ghoul::TemplateFactory<Scale>>(),
"Scale"
);
openspace::ConfigurationManager configuration;
std::string configurationFile = configuration.findConfiguration(ConfigurationFile);
configuration.loadFromFile(configurationFile);
ModuleEngine moduleEngine;
moduleEngine.initialize();
LINFO("Initialization done.");
// Parse commandline arguments
std::vector<std::string> args(argv, argv + argc);
std::vector<std::string> remainingArguments;
bool unusedBool;
OpenSpaceEngine::create(argc, argv, nullptr, remainingArguments, unusedBool);
ghoul::cmdparser::CommandlineParser commandlineParser(
"OpenSpace TaskRunner",
@@ -158,17 +116,17 @@ int main(int argc, char** argv) {
std::string tasksPath = "";
commandlineParser.addCommand(
std::make_unique<ghoul::cmdparser::SingleCommand<std::string>>(
&tasksPath,
tasksPath,
"--task",
"-t",
"Provides the path to a task file to execute"
)
);
commandlineParser.setCommandLine(args);
commandlineParser.setCommandLine(remainingArguments);
commandlineParser.execute();
FileSys.setCurrentDirectory(launchDirectory);
//FileSys.setCurrentDirectory(launchDirectory);
if (tasksPath != "") {
performTasks(tasksPath);
@@ -177,16 +135,13 @@ int main(int argc, char** argv) {
// If no task file was specified in as argument, run in CLI mode.
std::string tasksRoot;
if (configuration.getValue(ConfigurationManager::KeyConfigTasksRoot, tasksRoot)) {
LINFO("Task root: " << tasksRoot);
FileSys.setCurrentDirectory(ghoul::filesystem::Directory(absPath(tasksRoot)));
}
LINFO("Task root: " << absPath("${TASKS}"));
FileSys.setCurrentDirectory(ghoul::filesystem::Directory(absPath("${TASKS}")));
std::cout << "TASK >";
std::cout << "TASK > ";
while (std::cin >> tasksPath) {
performTasks(tasksPath);
std::cout << "TASK >";
std::cout << "TASK > ";
}
return 0;

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

View File

@@ -0,0 +1 @@
IDI_ICON1 ICON DISCARDABLE "openspace.ico"

View File

@@ -1,26 +1,26 @@
#########################################################################################
# #
# 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. #
#########################################################################################
##########################################################################################
# #
# OpenSpace #
# #
# Copyright (c) 2014-2018 #
# #
# 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(${OPENSPACE_CMAKE_EXT_DIR}/application_definition.cmake)

View File

@@ -2,7 +2,7 @@
* *
* OpenSpace *
* *
* Copyright (c) 2014-2017 *
* Copyright (c) 2014-2018 *
* *
* 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 *

View File

@@ -2,7 +2,7 @@
* *
* OpenSpace *
* *
* Copyright (c) 2014-2017 *
* Copyright (c) 2014-2018 *
* *
* 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 *

View File

@@ -2,7 +2,7 @@
* *
* OpenSpace *
* *
* Copyright (c) 2014-2017 *
* Copyright (c) 2014-2018 *
* *
* 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 *

View File

@@ -2,7 +2,7 @@
* *
* OpenSpace *
* *
* Copyright (c) 2014-2017 *
* Copyright (c) 2014-2018 *
* *
* 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 *
@@ -253,7 +253,8 @@ void ControlWidget::onDateChange() {
QString script =
"openspace.time.setTime('" + date + "');\
openspace.setPropertyValue('Interaction.origin', '" + focus + "');\
openspace.setPropertyValue('Interaction.coordinateSystem', '" + coordinateSystem + "')";
openspace.setPropertyValue('Interaction.coordinateSystem', '" +
coordinateSystem + "')";
emit scriptActivity(script);
}
_setTime->blockSignals(true);
@@ -265,18 +266,28 @@ void ControlWidget::onFocusChange() {
int index = _focusNode->currentIndex();
QString name = FocusNodes[index].name;
QString coordinateSystem = FocusNodes[index].coordinateSystem;
QString script = "openspace.setPropertyValue('Interaction.origin', '" + name + "');openspace.setPropertyValue('Interaction.coordinateSystem', '" + coordinateSystem + "');";
QString script = "openspace.setPropertyValue('Interaction.origin', '" + name +
"');openspace.setPropertyValue('Interaction.coordinateSystem', '" +
coordinateSystem + "');";
emit scriptActivity(script);
}
void ControlWidget::onFocusToTargetButton() {
std::string target = reinterpret_cast<MainWindow*>(parent())->nextTarget();
if (!target.empty()) {
auto it = std::find_if(std::begin(FocusNodes), std::end(FocusNodes), [target](const FocusNode& n) { return n.guiName.toLower() == QString::fromStdString(target).toLower(); });
auto it = std::find_if(
std::begin(FocusNodes),
std::end(FocusNodes),
[target](const FocusNode& n) {
return n.guiName.toLower() == QString::fromStdString(target).toLower();
});
if (it != std::end(FocusNodes)) {
QString name = it->name;
QString coordinateSystem = it->coordinateSystem;
QString script = "openspace.setPropertyValue('Interaction.origin', '" + name + "');openspace.setPropertyValue('Interaction.coordinateSystem', '" + coordinateSystem + "');";
QString script =
"openspace.setPropertyValue('Interaction.origin', '" + name +
"');openspace.setPropertyValue('Interaction.coordinateSystem', '" +
coordinateSystem + "');";
emit scriptActivity(script);
}
}
@@ -292,7 +303,9 @@ void ControlWidget::onFocusToNewHorizonsButton() {
else
coordinateSystem = "Pluto";
QString script = "openspace.setPropertyValue('Interaction.origin', 'NewHorizons');openspace.setPropertyValue('Interaction.coordinateSystem', '" + coordinateSystem + "');";
QString script = "openspace.setPropertyValue('Interaction.origin', 'NewHorizons');\
openspace.setPropertyValue('Interaction.coordinateSystem', '" + coordinateSystem +
"');";
emit scriptActivity(script);
}

View File

@@ -2,7 +2,7 @@
* *
* OpenSpace *
* *
* Copyright (c) 2014-2017 *
* Copyright (c) 2014-2018 *
* *
* 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 *

View File

@@ -2,7 +2,7 @@
* *
* OpenSpace *
* *
* Copyright (c) 2014-2017 *
* Copyright (c) 2014-2018 *
* *
* 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 *

View File

@@ -2,7 +2,7 @@
* *
* OpenSpace *
* *
* Copyright (c) 2014-2017 *
* Copyright (c) 2014-2018 *
* *
* 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 *

View File

@@ -2,7 +2,7 @@
* *
* OpenSpace *
* *
* Copyright (c) 2014-2017 *
* Copyright (c) 2014-2018 *
* *
* 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 *
@@ -58,7 +58,9 @@ QLineEdit {
QSlider::groove:horizontal {
border: 1px solid #999999;
height: 8px; /* the groove expands to the size of the slider by default. by giving it a height, it has a fixed size */
/* the groove expands to the size of the slider by default. by giving it a height,
it has a fixed size */
height: 8px;
background: qlineargradient(
x1:0, y1:0, x2:1, y2:0,
stop:0 #c4c4c4,
@@ -72,7 +74,9 @@ QSlider::handle:horizontal {
background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #b4b4b4, stop:1 #8f8f8f);
border: 1px solid #5c5c5c;
width: 18px;
margin: -2px 0; /* handle is placed by default on the contents rect of the groove. Expand outside the groove */
/* handle is placed by default on the contents rect of the groove.
Expand outside the groove */
margin: -2px 0;
border-radius: 3px;
}
@@ -112,7 +116,7 @@ QCombobox {
}
QComboBox:editable {
background: lightgrey;
background: lightgrey;
}
QComboBox QAbstractItemView {

View File

@@ -2,7 +2,7 @@
* *
* OpenSpace *
* *
* Copyright (c) 2014-2017 *
* Copyright (c) 2014-2018 *
* *
* 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 *
@@ -257,17 +257,23 @@ void MainWindow::handleStatusMessage(QByteArray data) {
QString::fromStdString(std::string(timeString.begin(), timeString.end())),
QString::number(delta.value)
);
_timelineWidget->setCurrentTime(std::string(timeString.begin(), timeString.end()), et.value);
_timelineWidget->setCurrentTime(
std::string(timeString.begin(), timeString.end()),
et.value
);
}
std::vector<std::string> instrumentsFromId(uint16_t instrumentId, std::map<uint16_t, std::string> instrumentMap) {
std::vector<std::string> instrumentsFromId(uint16_t instrumentId,
std::map<uint16_t, std::string> instrumentMap)
{
std::vector<std::string> results;
for (int i = 0; i < 16; ++i) {
uint16_t testValue = 1 << i;
if ((testValue & instrumentId) != 0) {
std::string t = instrumentMap.at(testValue);
if (t.empty())
if (t.empty()) {
qDebug() << "Empty instrument";
}
results.push_back(t);
}
}
@@ -318,15 +324,21 @@ QByteArray MainWindow::handlePlaybook(QByteArray data) {
qDebug() << "Instruments were empty";
images.push_back(image);
}
_timelineWidget->setData(std::move(images), std::move(targetMap), std::move(instrumentMap));
_timelineWidget->setData(
std::move(images),
std::move(targetMap),
std::move(instrumentMap)
);
auto dataSize = data.size();
auto readSize = currentReadLocation;
auto extraBytes = dataSize - readSize;
if (extraBytes > 0)
if (extraBytes > 0) {
return data.mid(currentReadLocation);
else
}
else {
return QByteArray();
}
}
void MainWindow::sendScript(QString script) {
@@ -361,7 +373,10 @@ std::string MainWindow::nextTarget() const {
}
void MainWindow::fullyConnected() {
_informationWidget->logInformation("Connected to " + _socket->peerName() + " on port " + QString::number(_socket->peerPort()) + ".");
_informationWidget->logInformation(
"Connected to " + _socket->peerName() + " on port " +
QString::number(_socket->peerPort()) + "."
);
_configurationWidget->socketConnected();
_timeControlWidget->socketConnected();
@@ -379,6 +394,5 @@ void MainWindow::printMapping(QByteArray data) {
std::string mapping = readFromBuffer<std::string>(buffer, currentReadPosition);
qDebug() << identifier << ": " << QString::fromStdString(mapping);
}
}

View File

@@ -2,7 +2,7 @@
* *
* OpenSpace *
* *
* Copyright (c) 2014-2017 *
* Copyright (c) 2014-2018 *
* *
* 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 *

View File

@@ -2,7 +2,7 @@
* *
* OpenSpace *
* *
* Copyright (c) 2014-2017 *
* Copyright (c) 2014-2018 *
* *
* 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 *
@@ -89,7 +89,12 @@ void TimelineWidget::paintEvent(QPaintEvent* event) {
QRectF fullRect = contentsRect();
QRectF contentRect(0, 0, fullRect.width() - 1, fullRect.height() - LegendHeight);
QRectF legendRect(0, fullRect.bottom() - LegendHeight, fullRect.right(), fullRect.bottom());
QRectF legendRect(
0,
fullRect.bottom() - LegendHeight,
fullRect.right(),
fullRect.bottom()
);
painter.save();
drawContent(painter, contentRect);
@@ -101,10 +106,17 @@ void TimelineWidget::paintEvent(QPaintEvent* event) {
painter.restore();
}
void TimelineWidget::setData(std::vector<Image> images, std::map<uint8_t, std::string> targetMap, std::map<uint16_t, std::string> instrumentMap) {
void TimelineWidget::setData(std::vector<Image> images,
std::map<uint8_t, std::string> targetMap,
std::map<uint16_t, std::string> instrumentMap)
{
_images.insert(_images.end(), images.begin(), images.end());
std::sort(_images.begin(), _images.end(), [](const Image& a, const Image& b) { return a.beginning < b.beginning; });
std::sort(
_images.begin(),
_images.end(),
[](const Image& a, const Image& b) { return a.beginning < b.beginning; }
);
_targetMap.insert(targetMap.begin(), targetMap.end());
_instrumentMap.insert(instrumentMap.begin(), instrumentMap.end());
@@ -148,8 +160,15 @@ void TimelineWidget::drawContent(QPainter& painter, QRectF rect) {
// Draw current time
painter.setBrush(QBrush(Qt::black));
painter.setPen(QPen(Qt::black, 2));
painter.drawLine(QPointF(0, timelineRect.height() / 2), QPointF(timelineRect.width(), timelineRect.height() / 2));
painter.drawText(timelineRect.width(), timelineRect.height() / 2 + TextOffset, QString::fromStdString(_currentTime.time));
painter.drawLine(
QPointF(0, timelineRect.height() / 2),
QPointF(timelineRect.width(), timelineRect.height() / 2)
);
painter.drawText(
timelineRect.width(),
timelineRect.height() / 2 + TextOffset,
QString::fromStdString(_currentTime.time)
);
}
void TimelineWidget::drawLegend(QPainter& painter, QRectF rect) {
@@ -171,14 +190,21 @@ void TimelineWidget::drawLegend(QPainter& painter, QRectF rect) {
;
painter.setBrush(QBrush(InstrumentColors[QString::fromStdString(instrument)]));
painter.setPen(QPen(InstrumentColors[QString::fromStdString(instrument)]));
painter.drawRect(currentHorizontalPosition, currentVerticalPosition, BoxSize, BoxSize);
painter.drawRect(
currentHorizontalPosition,
currentVerticalPosition,
BoxSize,
BoxSize
);
currentHorizontalPosition += BoxSize + Padding;
painter.setPen(QPen(QColor(200, 200, 200)));
//painter.setPen(QPen(Qt::black));
painter.drawText(currentHorizontalPosition, currentVerticalPosition + BoxSize / 2 + TextOffset, InstrumentConversion[QString::fromStdString(instrument)]);
// int textWidth = painter.boundingRect(QRect(), QString::fromStdString(instrument)).width();
//currentHorizontalPosition += std::max(textWidth, 25) + Padding;
painter.drawText(
currentHorizontalPosition,
currentVerticalPosition + BoxSize / 2 + TextOffset,
InstrumentConversion[QString::fromStdString(instrument)]
);
currentHorizontalPosition += 125;
}
}
@@ -198,11 +224,12 @@ void TimelineWidget::drawImages(
{
std::set<std::string> instrumentSet;
for (Image* i : images) {
for (std::string instrument : i->instruments)
for (std::string instrument : i->instruments) {
instrumentSet.insert(instrument);
}
}
std::map<std::string, int> instruments;
for (std::set<std::string>::const_iterator it = instrumentSet.begin(); it != instrumentSet.end(); ++it)
for (auto it = instrumentSet.begin(); it != instrumentSet.end(); ++it)
instruments[*it] = std::distance(instrumentSet.begin(), it);
for (Image* i : images) {
@@ -215,8 +242,9 @@ void TimelineWidget::drawImages(
int height = (timelineRect.top() + timelineRect.height() * tEnd) - loc;
height = std::max(height, 5);
if (loc + height > timelineRect.height())
if (loc + height > timelineRect.height()) {
height = timelineRect.height() - loc;
}
std::string target = i->target;
auto it = std::find(_targets.begin(), _targets.end(), target);
@@ -224,10 +252,13 @@ void TimelineWidget::drawImages(
for (std::string instrument : i->instruments) {
auto it = std::find(_instruments.begin(), _instruments.end(), instrument);
if (it == _instruments.end())
if (it == _instruments.end()) {
qDebug() << "Instrument not found";
}
painter.setBrush(QBrush(InstrumentColors[QString::fromStdString(instrument)]));
painter.setBrush(
QBrush(InstrumentColors[QString::fromStdString(instrument)])
);
double width = timelineRect.width() / instruments.size();
double pos = instruments[instrument] * width;
@@ -238,7 +269,8 @@ void TimelineWidget::drawImages(
if (height >= 5) {
painter.setBrush(QBrush(Qt::black));
painter.setPen(QPen(Qt::black));
QString line = QString::fromStdString(i->beginningString) + QString(" (") + QString::fromStdString(i->target) + QString(")");
QString line = QString::fromStdString(i->beginningString) + QString(" (") +
QString::fromStdString(i->target) + QString(")");
painter.drawText(timelineRect.width(), loc + height / 2 + TextOffset, line);
}
@@ -257,9 +289,16 @@ void TimelineWidget::socketDisconnected() {
}
std::string TimelineWidget::nextTarget() const {
auto it = std::lower_bound(_images.begin(), _images.end(), _currentTime.et, [](const Image& i, double et) { return i.beginning < et; });
if (it != _images.end())
auto it = std::lower_bound(
_images.begin(),
_images.end(),
_currentTime.et,
[](const Image& i, double et) { return i.beginning < et; }
);
if (it != _images.end()) {
return it->target;
else
}
else {
return "";
}
}

View File

@@ -2,7 +2,7 @@
* *
* OpenSpace *
* *
* Copyright (c) 2014-2017 *
* Copyright (c) 2014-2018 *
* *
* 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 *
@@ -40,7 +40,8 @@ Q_OBJECT
public:
TimelineWidget(QWidget* parent);
void setData(std::vector<Image> images, std::map<uint8_t, std::string> targetMap, std::map<uint16_t, std::string> instrumentMap);
void setData(std::vector<Image> images, std::map<uint8_t, std::string> targetMap,
std::map<uint16_t, std::string> instrumentMap);
void setCurrentTime(std::string currentTime, double et);
void socketConnected();
void socketDisconnected();
@@ -48,10 +49,11 @@ public:
std::string nextTarget() const;
protected:
void paintEvent(QPaintEvent* event);
void paintEvent(QPaintEvent* event);
void drawContent(QPainter& painter, QRectF rect);
void drawLegend(QPainter& painter, QRectF rect);
void drawImages(QPainter& painter, QRectF timelineRect, std::vector<Image*> images, double minimumTime, double maximumTime);
void drawImages(QPainter& painter, QRectF timelineRect, std::vector<Image*> images,
double minimumTime, double maximumTime);
private:
std::vector<Image> _images;

View File

@@ -13,7 +13,7 @@
</PlanarProjection>
</Viewport>
</Window>
<Window fullScreen="false" numberOfSamples="8" border="false">
<Window fullScreen="false" numberOfSamples="8" border="true">
<Pos x="340" y="100" />
<Size x="1280" y="720" />
<Viewport>

View File

@@ -1,31 +1,23 @@
<?xml version="1.0" ?>
<Cluster masterAddress="localhost">
<!-- <Settings>
<Display swapInterval="0" />
</Settings>
-->
<!-- <Scene>
<Orientation yaw="0.0" pitch="-27.0" roll="0.0" />
<Offset x="0.0" y="0.0" z="0.0" />
<Scale value="1.0" />
</Scene> -->
</Scene>
-->
<Node address="localhost" port="20401">
<Window fullScreen="false" numberOfSamples="8" name="OpenSpace">
<Window fullScreen="false" numberOfSamples="4" name="OpenSpace">
<Stereo type="none" />
<!-- 16:9 aspect ratio -->
<Size x="1024" y="1024" />
<!-- Frame buffer resolution
<Res x="4096" y="4096" /> -->
<!--
quality options (cubemap size):
- low (256)
- medium (512)
- high/1k (1024)
- 2k (2048)
- 4k (4096)
- 8k (8192)
tilt specifies the dome tilt angle in degrees from the horizontal
-->
<Viewport name="Spout">
<Pos x="0.0" y="0.0" />
<Size x="1.0" y="1.0" />
<SpoutOutputProjection quality="2k">
<SpoutOutputProjection quality="1.5k">
<Background r="0.1" g="0.1" b="0.1" a="1.0" />
</SpoutOutputProjection>
</Viewport>

View File

@@ -0,0 +1,36 @@
-- Add require statements for assets exporting the neccessary globes
-- example:
-- asset.require('../scene/solarsystem/planets/mars/mars')
-- Add folders to this list that contain .info files describing HiRISE patches
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'
'',
''
}
}
asset.onInitialize(function ()
-- Add local patches described at the top of this file
for obj, list in pairs(vrt_folders) do
for _, dir in pairs(list) do
openspace.globebrowsing.addBlendingLayersFromDirectory(dir, obj)
end
end
end)

51
data/assets/dawn.scene Normal file
View File

@@ -0,0 +1,51 @@
local assetHelper = asset.require('util/asset_helper')
local sceneHelper = asset.require('util/scene_helper')
-- Specifying which other assets should be loaded in this scene
asset.require('spice/base')
assetHelper.requestAll(asset, 'scene/solarsystem/sun')
assetHelper.requestAll(asset, 'scene/solarsystem/planets')
asset.request('scene/digitaluniverse/stars')
asset.request('scene/digitaluniverse/milkyway')
asset.require('scene/solarsystem/missions/dawn/ceres')
asset.require('scene/solarsystem/missions/dawn/dawn')
asset.require('scene/solarsystem/missions/dawn/vesta')
-- Load default key bindings applicable to most scenes
asset.require('util/default_keybindings')
local DawnAsset = asset.require('scene/solarsystem/missions/dawn/dawn')
asset.onInitialize(function ()
openspace.time.setTime("2011 AUG 06 00:00:00")
openspace.setDefaultDashboard()
openspace.setDefaultGuiSorting()
openspace.markInterestingNodes({
"Dawn", "Ceres", "Vesta"
})
openspace.addVirtualProperty(
"BoolProperty",
"Show Trails",
"*Trail.renderable.Enabled",
"Disable or enable all trails of the scene at the same time",
true,
nil,
nil
)
openspace.navigation.setCameraState({
Focus = DawnAsset.Dawn.Name,
Position = { 526781518487.171326, 257168309890.072144, -1381125204152.817383 },
Rotation = { -0.106166, 0.981574, -0.084545, 0.134513 },
})
end)
asset.onDeinitialize(function ()
openspace.removeVirtualProperty("*Trail.renderable.Enabled")
openspace.removeInterestingNodes({
"Dawn", "Ceres", "Vesta"
})
end)

102
data/assets/default.scene Normal file
View File

@@ -0,0 +1,102 @@
local assetHelper = asset.require('util/asset_helper')
local sceneHelper = asset.require('util/scene_helper')
-- Specifying which other assets should be loaded in this scene
asset.require('spice/base')
assetHelper.requestAll(asset, 'scene/solarsystem/sun')
asset.require('scene/solarsystem/planets')
asset.require('scene/solarsystem/planets/mars/moons/phobos')
asset.require('scene/solarsystem/planets/mars/moons/deimos')
assetHelper.requestAll(asset, 'scene/digitaluniverse')
-- Load default key bindings applicable to most scenes
asset.require('util/default_keybindings')
asset.request('customization/globebrowsing')
-- Keybindings that are specific for this scene
local Keybindings = {
{
Key = "s",
Command = sceneHelper.property.invert('Earth.RenderableGlobe.Layers.NightLayers.Earth at Night 2012.Enabled') ..
sceneHelper.property.invert('Earth.RenderableGlobe.PerformShading') ..
sceneHelper.property.invert('Earth.RenderableGlobe.Atmosphere') ..
sceneHelper.property.invert('Earth.RenderableGlobe.Layers.WaterMasks.MODIS_Water_Mask.Enabled'),
Documentation = "Toggle night texture, shading, atmosphere, and water for Earth.",
Local = false
},
{
Key = "b",
Command = sceneHelper.property.invert('MilkyWay.renderable.Enabled') ..
sceneHelper.property.invert('Stars.renderable.Enabled'),
Documentation = "Toggle background (Stars and Milkyway).",
Local = false
},
{
Key = "g",
Command = sceneHelper.property.invert('MilkyWay.renderable.Enabled') ..
sceneHelper.property.invert('Stars.renderable.Enabled') ..
sceneHelper.property.invert('Earth.RenderableGlobe.Layers.NightLayers.Earth at Night 2012.Enabled') ..
sceneHelper.property.invert('Earth.RenderableGlobe.PerformShading') ..
sceneHelper.property.invert('Mars.RenderableGlobe.PerformShading') ..
sceneHelper.property.invert('Earth.RenderableGlobe.Atmosphere') ..
sceneHelper.property.invert('Earth.RenderableGlobe.Layers.WaterMasks.MODIS_Water_Mask.Enabled') ..
sceneHelper.property.invert('Moon.RenderableGlobe.Enabled') ..
sceneHelper.property.invert('Sun.renderable.Enabled'),
Documentation = "Toogles background and shading mode on the Earth and Mars alongside visibility of the Moon and the Sun",
Local = false
},
{
Key = "h",
Command = "openspace.setPropertyValue('*Trail.renderable.Enabled', false)",
Documentation = "Disables visibility of the trails",
Local = false
},
}
local earthAsset = asset.require('scene/solarsystem/planets/earth/earth')
asset.onInitialize(function ()
openspace.time.setTime(openspace.time.currentWallTime())
sceneHelper.bindKeys(Keybindings)
openspace.setDefaultDashboard()
openspace.setDefaultGuiSorting()
openspace.globebrowsing.loadWMSServersFromFile(
openspace.absPath("${DATA}/globebrowsing_servers.lua")
)
openspace.markInterestingNodes({
"Earth", "Mars", "Moon"
})
openspace.addVirtualProperty(
"BoolProperty",
"Show Trails",
"*Trail.renderable.Enabled",
"Disable or enable all trails of the scene at the same time",
true,
nil,
nil
)
openspace.navigation.setCameraState({
Focus = earthAsset.Earth.Name,
Position = { 0, 0, 0 },
Rotation = { 0.758797, 0.221490, -0.605693, -0.091135 },
})
openspace.globebrowsing.goToGeo(58.5877, 16.1924, 20000000)
end)
asset.onDeinitialize(function ()
sceneHelper.unbindKeys(Keybindings)
openspace.removeVirtualProperty("*Trail.renderable.Enabled")
openspace.removeInterestingNodes({
"Earth", "Mars", "Moon"
})
end)

View File

@@ -0,0 +1,7 @@
asset.require('./default')
asset.require('scene/solarsystem/planets/jupiter/minor_moons')
asset.require('scene/solarsystem/planets/saturn/minor_moons')
asset.require('scene/solarsystem/planets/uranus/minor_moons')
asset.require('scene/solarsystem/planets/neptune/inner_moons')
asset.require('scene/solarsystem/planets/neptune/irregular_prograde_moons')
asset.require('scene/solarsystem/planets/neptune/irregular_retrograde_moons')

55
data/assets/juno.scene Normal file
View File

@@ -0,0 +1,55 @@
local assetHelper = asset.require('util/asset_helper')
local sceneHelper = asset.require('util/scene_helper')
-- Specifying which other assets should be loaded in this scene
asset.require('spice/base')
assetHelper.requestAll(asset, 'scene/solarsystem/sun')
assetHelper.requestAll(asset, 'scene/solarsystem/planets')
asset.request('scene/digitaluniverse/stars')
asset.request('scene/digitaluniverse/milkyway')
assetHelper.requireAll(asset, 'scene/solarsystem/missions/juno')
-- Load default key bindings applicable to most scenes
asset.require('util/default_keybindings')
local junoAsset = asset.require('scene/solarsystem/missions/juno/juno')
asset.onInitialize(function ()
openspace.time.setTime("2016-07-01T10:05:00.00")
openspace.setDefaultDashboard()
openspace.setDefaultGuiSorting()
sceneHelper.setDeltaTimeKeys({
1, 5, 10, 20, 40, 90, 360, 720, 2880, 14400,
28800, 57600, 115200, 230400, 460800, 921600, 1843200, 3686400, 7372800, 14745600
})
openspace.markInterestingNodes({
"Jupiter", "Juno"
})
openspace.addVirtualProperty(
"BoolProperty",
"Show Trails",
"*Trail.renderable.Enabled",
"Disable or enable all trails of the scene at the same time",
true,
nil,
nil
)
openspace.navigation.setCameraState({
Focus = junoAsset.Juno.Name,
Position = { 1837386367.601345, -389860693812.834839, 714830404470.398926 },
Rotation = { -0.336540, 0.711402, -0.099212, 0.608937 },
})
end)
asset.onDeinitialize(function ()
openspace.removeVirtualProperty("*Trail.renderable.Enabled")
openspace.removeInterestingNodes({
"Jupiter", "Juno"
})
end)

View File

@@ -0,0 +1,189 @@
local assetHelper = asset.require('util/asset_helper')
local sceneHelper = asset.require('util/scene_helper')
-- Specifying which other assets should be loaded in this scene
asset.require('spice/base')
assetHelper.requestAll(asset, 'scene/solarsystem/sun')
asset.require('scene/solarsystem/planets')
asset.request('scene/digitaluniverse/stars')
asset.request('scene/digitaluniverse/milkyway')
asset.require('scene/solarsystem/missions/newhorizons/newhorizons')
-- Load default key bindings applicable to most scenes
asset.require('util/default_keybindings')
-- Custom Keybindings
local Keybindings = {
{
Key = "a",
Command = "openspace.setPropertyValue('NavigationHandler.Origin', 'NewHorizons')",
Documentation = "Sets the focus of the camera on 'NewHorizons'.",
Local = false
},
{
Key = "s",
Command = "openspace.setPropertyValue('NavigationHandler.Origin', 'Pluto')",
Documentation = "Sets the focus of the camera on 'Pluto'",
Local = false
},
{
Key = "d",
Command = "openspace.setPropertyValue('NavigationHandler.Origin', 'Charon')",
Documentation = "Sets the focus of the camera on 'Charon'.",
Local = false
},
{
Key = "F8",
Command = "openspace.setPropertyValue('Pluto.renderable.ProjectionComponent.ClearAllProjections', true);" ..
"openspace.setPropertyValue('Charon.renderable.ProjectionComponent.ClearAllProjections', true);",
Documentation = "Removes all image projections from Pluto and Charon.",
Local = false
},
{
Key = "F9",
Command = "openspace.time.setTime('2015-07-14T09:00:00.00');" ..
"openspace.setPropertyValue('Pluto.renderable.ClearAllProjections', true);" ..
"openspace.setPropertyValue('Charon.renderable.ClearAllProjections', true);",
Documentation = "Jumps to the 14th of July 2015 at 0900 UTC and clears all projections.",
Local = false
},
{
Key = "KP_8",
Command = sceneHelper.property.increment('Pluto.renderable.HeightExaggeration', 5000000),
Documentation = "Increases the height map exaggeration on Pluto.",
Local = false
},
{
Key = "KP_2",
Command = sceneHelper.property.decrement('Pluto.renderable.HeightExaggeration', 5000000),
Documentation = "Decreases the height map exaggeration on Pluto.",
Local = false
},
{
Key = "KP_9",
Command = sceneHelper.property.increment('Charon.renderable.HeightExaggeration', 5000000),
Documentation = "Increases the height map exaggeration on Charon.",
Local = false
},
{
Key = "KP_3",
Command = sceneHelper.property.decrement('Charon.renderable.HeightExaggeration', 5000000),
Documentation = "Decreases the height map exaggeration on Charon.",
Local = false
},
{
Key = "q",
Command = sceneHelper.property.invert('SunMarker.renderable.Enabled'),
Documentation = "Toggles the visibility of the text marking the location of the Sun.",
Local = false
},
{
Key = "e",
Command = sceneHelper.property.invert('EarthMarker.renderable.Enabled'),
Documentation = "Toggles the visibility of the text marking the location of the Earth.",
Local = false
},
{
Key = "o",
Command = sceneHelper.property.invert('PlutoTrail.renderable.Enabled'),
Documentation = "Toggles the visibility of the trail behind Pluto.",
Local = false
},
{
Key = "j",
Command = sceneHelper.renderable.toggle('PlutoText') .. sceneHelper.renderable.toggle('CharonText') ..
sceneHelper.renderable.toggle('HydraText') .. sceneHelper.renderable.toggle('NixText') ..
sceneHelper.renderable.toggle('KerberosText') .. sceneHelper.renderable.toggle('StyxText'),
Documentation = "Toggles the visibility of the text labels of Pluto, Charon, Hydra, Nix, Kerberos, and Styx.",
Local = false
},
{
Key = "l",
Command = sceneHelper.property.invert('Labels.renderable.performFading'),
Documentation = "Toggles the visibility of the labels for the New Horizons instruments.",
Local = false
},
{
Key = "m",
Command = sceneHelper.property.invert('NH_LORRI.renderable.SolidDraw') ..
sceneHelper.property.invert('NH_RALPH_LEISA.renderable.SolidDraw') ..
sceneHelper.property.invert('NH_RALPH_MVIC_PAN1.renderable.SolidDraw') ..
sceneHelper.property.invert('NH_RALPH_MVIC_PAN2.renderable.SolidDraw') ..
sceneHelper.property.invert('NH_RALPH_MVIC_RED.renderable.SolidDraw') ..
sceneHelper.property.invert('NH_RALPH_MVIC_BLUE.renderable.SolidDraw') ..
sceneHelper.property.invert('NH_RALPH_MVIC_FT.renderable.SolidDraw') ..
sceneHelper.property.invert('NH_RALPH_MVIC_METHANE.renderable.SolidDraw') ..
sceneHelper.property.invert('NH_RALPH_MVIC_NIR.renderable.SolidDraw') ..
sceneHelper.property.invert('NH_ALICE_AIRGLOW.renderable.SolidDraw') ..
sceneHelper.property.invert('NH_ALICE_SOC.renderable.SolidDraw'),
Documentation = "Draws the instrument field of views in a solid color or as lines.",
Local = false
},
{
Key = "t",
Command = sceneHelper.renderable.toggle('PlutoShadow') .. sceneHelper.renderable.toggle('CharonShadow'),
Documentation = "Toggles the visibility of the shadow visualization of Pluto and Charon.",
Local = false
}
}
local NewHorizonsAsset = asset.require('scene/solarsystem/missions/newhorizons/model')
asset.onInitialize(function ()
openspace.time.setTime("2015-07-14T08:00:00.00")
sceneHelper.bindKeys(Keybindings)
openspace.setDefaultDashboard()
openspace.dashboard.addDashboardItem({
Type = "DashboardItemSpacing",
Spacing = 25
})
openspace.dashboard.addDashboardItem({
Type = "DashboardItemDistance",
SourceType = "Node",
SourceNodeName = "NewHorizons",
DestinationType = "Node Surface",
DestinationNodeName = "Pluto"
})
openspace.dashboard.addDashboardItem({
Type = "DashboardItemInstruments"
})
openspace.setDefaultGuiSorting()
sceneHelper.setDeltaTimeKeys({
1, 5, 10, 20, 40, 60, 120, 360, 540, 1080,
2160, 4320, 8640
})
openspace.markInterestingNodes({
"Pluto", "NewHorizons", "Charon"
})
openspace.addVirtualProperty(
"BoolProperty",
"Show Trails",
"*Trail.renderable.Enabled",
"Disable or enable all trails of the scene at the same time",
true,
nil,
nil
)
openspace.navigation.setCameraState({
Focus = NewHorizonsAsset.NewHorizons.Name,
Position = { 4662120063743.592773, 1263245003503.724854, -955413856565.788086 },
Rotation = { 0.683224, -0.165934, 0.701234, 0.118073 },
})
end)
asset.onDeinitialize(function ()
sceneHelper.unbindKeys(Keybindings)
openspace.removeVirtualProperty("*Trail.renderable.Enabled")
openspace.removeInterestingNodes({
"Pluto", "NewHorizons", "Charon"
})
end)

139
data/assets/osirisrex.scene Normal file
View File

@@ -0,0 +1,139 @@
local assetHelper = asset.require('util/asset_helper')
local sceneHelper = asset.require('util/scene_helper')
-- Specifying which other assets should be loaded in this scene
asset.require('spice/base')
assetHelper.requestAll(asset, 'scene/solarsystem/sun')
asset.require('scene/solarsystem/planets')
asset.request('scene/digitaluniverse/stars')
asset.request('scene/digitaluniverse/milkyway')
asset.require('scene/solarsystem/missions/osirisrex/osirisrex')
-- Load default key bindings applicable to most scenes
asset.require('util/default_keybindings')
-- Custom Keybindings
local Keybindings = {
{
Key = "a",
Command = "openspace.setPropertyValue('NavigationHandler.Origin', 'OsirisRex')",
Documentation = "Sets the focus of the camera on 'OsirisRex'.",
Local = false
},
{
Key = "s",
Command = "openspace.setPropertyValue('NavigationHandler.Origin', 'BennuBarycenter')",
Documentation = "Sets the focus of the camera on 'Bennu'",
Local = false
},
{
Key = "F6",
Command = "openspace.printInfo('Set time: Launch');openspace.time.setTime('2016 SEP 08 23:05:00');",
Documentation = "Sets the time to the launch.",
Local = false
},
{
Key = "F7",
Command = "openspace.printInfo('Set time: Gravity Assist');openspace.time.setTime('2017 SEP 22 15:00:00');",
Documentation = "Sets the time to the Earth gravity assist.",
Local = false
},
{
Key = "F8",
Command = "openspace.printInfo('Set time: Approach');openspace.time.setTime('2018-SEP-11 21:31:01.183');",
Documentation = "Sets the time to the approach at Bennu.",
Local = false
},
{
Key = "F9",
Command = "openspace.printInfo('Set time: Preliminary Survey');openspace.time.setTime('2018-NOV-20 01:13:12.183');",
Documentation = "Sets the time to the preliminary survey of Bennu.",
Local = false
},
{
Key = "F10",
Command = "openspace.printInfo('Set time: Orbital B');openspace.time.setTime('2019-APR-08 10:35:27.186');",
Documentation = "Sets the time to the orbital B event.",
Local = false
},
{
Key = "F11",
Command = "openspace.printInfo('Set time: Recon');openspace.time.setTime('2019-MAY-25 03:50:31.195');",
Documentation = "Sets the time to the recon event.",
Local = false
},
{
Key = "q",
Command = sceneHelper.property.invert('SunMarker.renderable.Enabled'),
Documentation = "Toggles the visibility of the text marking the location of the Sun.",
Local = false
},
{
Key = "e",
Command = sceneHelper.property.invert('EarthMarker.renderable.Enabled'),
Documentation = "Toggles the visibility of the text marking the location of the Earth.",
Local = false
}
}
local OsirisRexAsset = asset.require('scene/solarsystem/missions/osirisrex/model')
asset.onInitialize(function ()
-- openspace.time.setTime("2019 APR 16 12:03:00.00")
openspace.time.setTime("2016 SEP 8 23:00:00.500")
sceneHelper.bindKeys(Keybindings)
openspace.setDefaultDashboard()
openspace.dashboard.addDashboardItem({
Type = "DashboardItemSpacing",
Spacing = 25
})
openspace.dashboard.addDashboardItem({
Type = "DashboardItemDistance",
SourceType = "Node",
SourceNodeName = "OsirisRex",
DestinationType = "Node",
DestinationNodeName = "BennuBarycenter"
})
openspace.dashboard.addDashboardItem({
Type = "DashboardItemInstruments"
})
openspace.setDefaultGuiSorting()
sceneHelper.setDeltaTimeKeys({
1, 5, 10, 20, 40, 60, 120, 360, 540, 1080,
2160, 4320, 8640
})
openspace.markInterestingNodes({
"OsirisRex", "BennuBarycenter", "Earth"
})
openspace.addVirtualProperty(
"BoolProperty",
"Show Trails",
"*Trail.renderable.Enabled",
"Disable or enable all trails of the scene at the same time",
true,
nil,
nil
)
openspace.navigation.setCameraState({
Focus = OsirisRexAsset.OsirisRex.Name,
Position = { 26974590199.661884, 76314608558.908020, -127086452897.101791 },
Rotation = { 0.729548, -0.126024, 0.416827, 0.527382 },
})
end)
asset.onDeinitialize(function ()
sceneHelper.unbindKeys(Keybindings)
openspace.removeVirtualProperty("*Trail.renderable.Enabled")
openspace.removeInterestingNodes({
"OsirisRex", "BennuBarycenter", "Earth"
})
end)

142
data/assets/rosetta.scene Normal file
View File

@@ -0,0 +1,142 @@
local assetHelper = asset.require('util/asset_helper')
local sceneHelper = asset.require('util/scene_helper')
-- Specifying which other assets should be loaded in this scene
asset.require('spice/base')
assetHelper.requestAll(asset, 'scene/solarsystem/sun')
asset.require('scene/solarsystem/planets')
asset.request('scene/digitaluniverse/stars')
asset.request('scene/digitaluniverse/milkyway')
asset.require('scene/solarsystem/missions/rosetta/67p')
asset.require('scene/solarsystem/missions/rosetta/rosetta')
-- Load default key bindings applicable to most scenes
asset.require('util/default_keybindings')
-- Custom Keybindings
local Keybindings = {
{
Key = "a",
Command = "openspace.setPropertyValue('NavigationHandler.Origin', '67P')",
Documentation = "Sets the focus of the camera on '67P'.",
Local = false
},
{
Key = "s",
Command = "openspace.setPropertyValue('NavigationHandler.Origin', 'Rosetta')",
Documentation = "Sets the focus of the camera on 'Rosetta'",
Local = false
},
{
Key = "F5",
Command = "openspace.time.setTime('2014-08-01T03:05:18.101')",
Documentation = "Jumps to the time of initial approach of Rosetta to 67P.",
Local = false
},
{
Key = "F6",
Command = "openspace.time.setTime('2014-11-12T08:20:00.00')",
Documentation = "Jumps to the time when the Philae lander is released.",
Local = false
},
{
Key = "F8",
Command = "openspace.setPropertyValue('67P.renderable.ProjectionComponent.clearAllProjections', true)",
Documentation = "Removes all image projections from 67P.",
Local = false
},
{
Key = "q",
Command = sceneHelper.property.invert('SunMarker.renderable.Enabled'),
Documentation = "Toggles the visibility of the text marking the location of the Sun.",
Local = false
},
{
Key = "e",
Command = helper.renderable.toggle('JupiterTrail') .. helper.renderable.toggle('SaturnTrail') ..
helper.renderable.toggle('UranusTrail') .. helper.renderable.toggle('NeptuneTrail'),
Documentation = "Toggles the visibility of all trails further from the Sun than 67P.",
Local = false
},
{
Key = "i",
Command = sceneHelper.renderable.toggle('ImagePlaneRosetta'),
Documentation = "Toggles the visibility of the free floating image plane.",
Local = false
},
{
Key = "f",
Command = sceneHelper.renderable.toggle('PhilaeTrail'),
Documentation = "Toggles the visibility of Philae's trail.",
Local = false
},
{
Key = "p",
Command = sceneHelper.property.invert('67P.renderable.ProjectionComponent.performProjection'),
Documentation = "Enables or disables the image projection on 67P.",
Local = false
}
}
local Comet67PAsset = asset.require('scene/solarsystem/missions/rosetta/67p')
asset.onInitialize(function ()
openspace.time.setTime("2014-08-01T03:05:00.000")
sceneHelper.bindKeys(Keybindings)
openspace.setDefaultDashboard()
openspace.dashboard.addDashboardItem({
Type = "DashboardItemSpacing",
Spacing = 25
})
openspace.dashboard.addDashboardItem({
Type = "DashboardItemDistance",
SourceType = "Node",
SourceNodeName = "Rosetta",
DestinationType = "Node",
DestinationNodeName = "67P"
})
openspace.dashboard.addDashboardItem({
Type = "DashboardItemInstruments"
})
openspace.setDefaultGuiSorting()
sceneHelper.setDeltaTimeKeys({
1, 5, 10, 20, 40, 90, 360, 720, 2880, 14400,
28800, 57600, 115200, 230400, 460800, 921600, 1843200, 3686400, 7372800, 14745600
})
openspace.markInterestingNodes({
"67P", "Rosetta", "Philae"
})
openspace.addVirtualProperty(
"BoolProperty",
"Show Trails",
"*Trail.renderable.Enabled",
"Disable or enable all trails of the scene at the same time",
true,
nil,
nil
)
openspace.navigation.setCameraState({
Focus = Comet67PAsset.Comet67P.Name,
Position = { 526781518487.171326, 257168309890.072144, -1381125204152.817383 },
Rotation = { -0.106166, 0.981574, -0.084545, 0.134513 },
})
openspace.setPropertyValue('67P.renderable.PerformShading', false);
end)
asset.onDeinitialize(function ()
sceneHelper.unbindKeys(Keybindings)
openspace.removeVirtualProperty("*Trail.renderable.Enabled")
openspace.removeInterestingNodes({
"67PBarycenter", "Rosetta", "Philae"
})
end)

View File

@@ -0,0 +1,39 @@
local assetHelper = asset.require('util/asset_helper')
local textures = asset.syncedResource({
Name = "2dF Textures",
Type = "HttpSynchronization",
Identifier = "digitaluniverse_2dF_textures",
Version = 1
})
local speck = asset.syncedResource({
Name = "2dF Speck Files",
Type = "HttpSynchronization",
Identifier = "digitaluniverse_2dF_speck",
Version = 1
})
local object = {
Name = "2dF Galaxies",
Renderable = {
Type = "RenderableBillboardsCloud",
Enabled = false,
Color = { 1.0, 1.0, 1.0 },
Transparency = 1.0,
File = speck .. "/2dF.speck",
Texture = textures .. "/point3.png",
ColorMap = speck .. "/lss.cmap",
ColorOption = { "redshift", "prox5Mpc" },
ColorRange = { { 0.0, 0.075 }, { 1.0, 50.0 } },
Unit = "Mpc",
ScaleFactor = 508.0
},
GuiPath = "/Universe/Galaxies"
}
assetHelper.registerSceneGraphNodesAndExport(asset, { object })

View File

@@ -0,0 +1,39 @@
local assetHelper = asset.require('util/asset_helper')
local textures = asset.syncedResource({
Name = "2MASS Textures",
Type = "HttpSynchronization",
Identifier = "digitaluniverse_2mass_textures",
Version = 1
})
local speck = asset.syncedResource({
Name = "2MASS Speck Files",
Type = "HttpSynchronization",
Identifier = "digitaluniverse_2mass_speck",
Version = 1
})
local object = {
Name = "2MASS Galaxies",
Renderable = {
Type = "RenderableBillboardsCloud",
Enabled = false,
Color = { 1.0, 0.4, 0.2 },
Transparency = 1.0,
File = speck .. "/2MASS.speck",
Texture = textures .. "/point3.png",
ColorMap = speck .. "/lss.cmap",
ColorOption = { "redshift", "prox5Mpc" },
ColorRange = { { 0.0, 0.075 }, { 1.0, 50.0 } },
Unit = "Mpc",
ScaleFactor = 508.0
},
GuiPath = "/Universe/Galaxies"
}
assetHelper.registerSceneGraphNodesAndExport(asset, { object })

View File

@@ -0,0 +1,38 @@
local assetHelper = asset.require('util/asset_helper')
local textures = asset.syncedResource({
Name = "6dF Textures",
Type = "HttpSynchronization",
Identifier = "digitaluniverse_6dF_textures",
Version = 1
})
local speck = asset.syncedResource({
Name = "6dF Speck Files",
Type = "HttpSynchronization",
Identifier = "digitaluniverse_6dF_speck",
Version = 1
})
local object = {
Name = "6dF Galaxies",
Renderable = {
Type = "RenderableBillboardsCloud",
Enabled = false,
Color = { 1.0, 1.0, 1.0 },
Transparency = 1.0,
File = speck .. "/6dF.speck",
Texture = textures .. "/point3.png",
ColorMap = speck .. "/lss.cmap",
ColorOption = { "redshift", "prox5Mpc" },
ColorRange = { { 0.0, 0.075 }, { 1.0, 50.0 } },
Unit = "Mpc"
},
GuiPath = "/Universe/Galaxies"
}
assetHelper.registerSceneGraphNodesAndExport(asset, { object })

View File

@@ -0,0 +1,46 @@
local assetHelper = asset.require('util/asset_helper')
local textures = asset.syncedResource({
Name = "Abell Textures",
Type = "HttpSynchronization",
Identifier = "digitaluniverse_abell_textures",
Version = 1
})
local speck = asset.syncedResource({
Name = "Abell Speck Files",
Type = "HttpSynchronization",
Identifier = "digitaluniverse_abell_speck",
Version = 1
})
local object = {
Name = "Abell Galaxy Clusters",
Renderable = {
Type = "RenderableBillboardsCloud",
Enabled = false,
Color = { 1.0, 0.4, 0.2 },
Transparency = 1.0,
ScaleFactor = 525.0,
File = speck .. "/abell.speck",
Texture = textures .. "/point3.png",
LabelFile = speck .. "/abell.label",
TextColor = { 0.0, 0.8, 0.0, 1.0 },
TextSize = 22,
TextMinSize = 10.0,
Unit = "Mpc",
TransformationMatrix = {
-0.7357425748, 0.67726129641, 0.0, 0.0,
-0.074553778365, -0.080991471307, 0.9939225904, 0.0,
0.67314530211, 0.73127116582, 0.11008126223, 0.0,
0.0, 0.0, 0.0, 1.0
}
},
GuiPath = "/Universe/Galaxies"
}
assetHelper.registerSceneGraphNodesAndExport(asset, { object })

View File

@@ -0,0 +1,31 @@
local assetHelper = asset.require('util/asset_helper')
local speck = asset.syncedResource({
Name = "Alternate Star Labels Speck Files",
Type = "HttpSynchronization",
Identifier = "digitaluniverse_alternatestarlabels_speck",
Version = 1
})
local object = {
Name = "Stars Labels - Alternate",
Renderable = {
Type = "RenderableBillboardsCloud",
Enabled = false,
Color = { 1.0, 1.0, 1.0 },
Transparency = 0.65,
LabelFile = speck .. "/stars-altlbl.label",
TextColor = { 0.4, 0.4, 0.4, 1.0 },
DrawLabels = true,
TextSize = 14.7,
TextMinSize = 6.0,
Unit = "pc"
},
GuiPath = "/Milky Way/Stars"
}
assetHelper.registerSceneGraphNodesAndExport(asset, { object })

View File

@@ -0,0 +1,67 @@
local assetHelper = asset.require('util/asset_helper')
local textures = asset.syncedResource({
Name = "Background Radiation Textures",
Type = "HttpSynchronization",
Identifier = "digitaluniverse_backgroundradiation_textures",
Version = 1
})
local speck = asset.syncedResource({
Name = "Background Radiation Speck Files",
Type = "HttpSynchronization",
Identifier = "digitaluniverse_backgroundradiation_speck",
Version = 1
})
local wmap = {
Name = "Wilkinson Microwave Anisotropy Probe (WMAP)",
Renderable = {
Type = "RenderableSphere",
Enabled = false,
Size = 3975.41417036064E23,
Segments = 80,
Alpha = 0.5,
Texture = textures .. "/wmap_ilc_7yr_v4_200uK_RGB_sos.png",
Orientation = "Inside/Outside",
FadeInThreshould = 8E26
},
GuiPath = "/Universe/Cosmic Microwave Background"
}
local cbe = {
Name = "Cosmic Background Explorer",
Renderable = {
Type = "RenderableSphere",
Enabled = false,
Size = 3975.41417036064E23,
Segments = 80,
Alpha = 0.5,
Texture = textures .. "/COBErect.png",
Orientation = "Inside/Outside",
FadeInThreshould = 8E26
},
GuiPath = "/Universe/Cosmic Microwave Background"
}
local planck = {
Name = "Planck",
Renderable = {
Type = "RenderableSphere",
Enabled = false,
Size = 3975.41417036064E23,
Segments = 80,
Alpha = 0.3,
Texture = textures .. "/cmb4k.jpg",
Orientation = "Inside/Outside",
FadeInThreshould = 8E26
},
GuiPath = "/Universe/Cosmic Microwave Background"
}
assetHelper.registerSceneGraphNodesAndExport(asset, { wmap, cbe, planck })

View File

@@ -0,0 +1,31 @@
local assetHelper = asset.require('util/asset_helper')
local speck = asset.syncedResource({
Name = "Clusters Speck Files",
Type = "HttpSynchronization",
Identifier = "digitaluniverse_clusters_speck",
Version = 1
})
local object = {
Name = "Galaxy Cluster Labels",
Renderable = {
Type = "RenderableBillboardsCloud",
Enabled = false,
Color = { 1.0, 1.0, 1.0 },
Transparency = 0.65,
LabelFile = speck .. "/galclust.label",
TextColor = { 0.7, 0.3, 0.0, 1.0 },
DrawLabels = true,
TextSize = 22,
TextMinSize = 8.0,
Unit = "Mpc"
},
GuiPath = "/Universe/Galaxies"
}
assetHelper.registerSceneGraphNodesAndExport(asset, { object })

View File

@@ -0,0 +1,42 @@
local assetHelper = asset.require('util/asset_helper')
local data = asset.syncedResource({
Name = "Constellation Bounds Data",
Type = "HttpSynchronization",
Identifier = "digitaluniverse_constellationbounds_data",
Version = 1
})
local zodiacs = {
"Cancer", "Taurus", "Pisces", "Aries", "Libra", "Aquarius", "Capricornus", "Scorpius",
"Virgo", "Sagittarius", "Gemini", "Leo"
}
local object = {
Name = "Constellation Bounds",
Renderable = {
Type = "RenderableConstellationBounds",
Enabled = false,
File = data .. "/bound_20.dat",
ConstellationFile = data .. "/constellations.dat"
-- ConstellationSelection = zodiacs
},
Transform = {
Rotation = {
Type = "SpiceRotation",
SourceFrame = "J2000",
DestinationFrame = "GALACTIC"
},
Scale = {
Type = "StaticScale",
Scale = 10e17
}
},
GuiPath = "/Milky Way/Constellations"
}
assetHelper.registerSceneGraphNodesAndExport(asset, { object })

View File

@@ -0,0 +1,54 @@
local assetHelper = asset.require('util/asset_helper')
local speck = asset.syncedResource({
Name = "Constellation Speck Files",
Type = "HttpSynchronization",
Identifier = "digitaluniverse_constellations_speck",
Version = 1
})
local constellationsExtragalactic = {
Name = "Constellations (Extragalactic)",
Renderable = {
Type = "RenderableDUMeshes",
Enabled = false,
Color = { 1.0, 0.4, 0.2 },
Transparency = 1.0,
ScaleFactor = 1.0,
File = speck .. "/constellationsEXGAL.speck",
LabelFile = speck .. "/constellationsEXGAL.label",
TextColor = { 0.8, 0.8, 0.8, 1.0 },
TextSize = 20.0,
TextMinSize = 20.0,
TextMaxSize = 30.0,
MeshColor = { { 0.6, 0.4, 0.4 }, { 0.8, 0.0, 0.0 }, { 0.0, 0.3, 0.8 } },
Unit = "Mpc"
},
GuiPath = "/Milky Way/Constellations"
}
local constellations = {
Name = "Constellations",
Renderable = {
Type = "RenderableDUMeshes",
Enabled = false,
Color = { 1.0, 0.4, 0.2 },
Transparency = 1.0,
ScaleFactor = 1.0,
File = speck .. "/constellations.speck",
LabelFile = speck .. "/constellations.label",
TextColor = { 0.8, 0.8, 0.8, 1.0 },
TextMinSize = 10.0,
TextMaxSize = 30.0,
TextMinSize = 8.0,
MeshColor = { { 0.6, 0.4, 0.4 }, { 0.8, 0.0, 0.0 }, { 0.0, 0.3, 0.8 } },
Unit = "pc"
},
GuiPath = "/Milky Way/Constellations"
}
assetHelper.registerSceneGraphNodesAndExport(asset, { constellationsExtragalactic, constellations })

View File

@@ -0,0 +1,40 @@
local assetHelper = asset.require('util/asset_helper')
local textures = asset.syncedResource({
Name = "Brown Dwarf Textures",
Type = "HttpSynchronization",
Identifier = "digitaluniverse_dwarfs_textures",
Version = 1
})
local speck = asset.syncedResource({
Name = "Brown Dwarf Speck Files",
Type = "HttpSynchronization",
Identifier = "digitaluniverse_dwarfs_speck",
Version = 1
})
local object = {
Name = "Dwarfs",
Renderable = {
Type = "RenderableBillboardsCloud",
Enabled = false,
Color = { 0.5, 1.0, 0.2 },
Transparency = 0.999,
File = speck .. "/dwarfs.speck",
Texture = textures .. "/point3.png",
LabelFile = speck .. "/dwarfs.label",
TextColor = { 0.5, 0.1, 0.2, 1.0 },
TextSize = 14.6,
TextMinSize = 10.0,
ScaleFactor = 360,
Unit = "pc"
},
GuiPath = "/Milky Way/Brown Dwarfs"
}
assetHelper.registerSceneGraphNodesAndExport(asset, { object })

View File

@@ -0,0 +1,42 @@
local assetHelper = asset.require('util/asset_helper')
local textures = asset.syncedResource({
Name = "Exoplanets Textures",
Type = "HttpSynchronization",
Identifier = "digitaluniverse_exoplanets_textures",
Version = 1
})
local speck = asset.syncedResource({
Name = "Exoplanets Speck Files",
Type = "HttpSynchronization",
Identifier = "digitaluniverse_exoplanets_speck",
Version = 1
})
local object = {
Name = "Exoplanets",
Renderable = {
Type = "RenderableBillboardsCloud",
Enabled = false,
Color = { 1.0, 1.0, 1.0 },
Transparency = 0.65,
ScaleFactor = 10.0,
Texture = textures .. "/target-blue.pbm",
File = speck .. "/expl.speck",
LabelFile = speck .. "/expl.label",
ScaleFactor = 380.0,
TextColor = { 0.3, 0.3, 0.8, 1.0 },
TextSize = 14.8,
TextMaxSize = 200.0,
TextMinSize = 10.0,
Unit = "pc"
},
GuiPath = "/Milky Way/Exoplanets"
}
assetHelper.registerSceneGraphNodesAndExport(asset, { object })

View File

@@ -0,0 +1,41 @@
local assetHelper = asset.require('util/asset_helper')
local textures = asset.syncedResource({
Name = "Globular Clusters Textures",
Type = "HttpSynchronization",
Identifier = "digitaluniverse_globularclusters_textures",
Version = 1
})
local speck = asset.syncedResource({
Name = "Globular Clusters Speck Files",
Type = "HttpSynchronization",
Identifier = "digitaluniverse_globularclusters_speck",
Version = 1
})
local object = {
Name = "Globular Clusters",
Renderable = {
Type = "RenderableBillboardsCloud",
Enabled = false,
Color = { 0.8, 0.8, 0.0 },
Transparency = 0.35,
File = speck .. "/gc.speck",
Texture = textures .. "/point4.png",
PolygonSides = 5,
LabelFile = speck .. "/gc.label",
TextColor = { 0.5, 0.5, 0.0, 1.0 },
ScaleFactor = 440.0,
TextSize = 17.5,
TextMinSize = 10.0,
Unit = "pc"
},
GuiPath = "/Milky Way/Globular Clusters"
}
assetHelper.registerSceneGraphNodesAndExport(asset, { object })

View File

@@ -0,0 +1,220 @@
local assetHelper = asset.require('util/asset_helper')
local transforms = asset.require('scene/solarsystem/sun/transforms')
local speck = asset.syncedResource({
Name = "Grids Speck Files",
Type = "HttpSynchronization",
Identifier = "digitaluniverse_grids_speck",
Version = 1
})
local ecliptic = {
Name = "Ecliptic Sphere",
Parent = transforms.SolarSystemBarycenter.Name,
Renderable = {
Type = "RenderableSphericalGrid",
Enabled = false,
GridColor = { 0.7, 0.0, 0.0, 0.5},
LineWidth = 2.0,
Radius = 9.46377307652E17;
GridMatrix = { -0.05487554, 0.4941095, -0.8676661 , 0.0,
-0.9938214 , -0.1109906, -0.0003515167, 0.0,
-0.09647644, 0.8622859, 0.4971472 , 0.0,
0.0 , 0.0 , 0.0 , 1.0 }
},
GuiPath = "/Other/Grids"
}
local eclipticLabels = {
Name = "Ecliptic Sphere Labels",
Parent = transforms.SolarSystemBarycenter.Name,
Renderable = {
Type = "RenderableBillboardsCloud",
Enabled = false,
Color = { 1.0, 1.0, 1.0 },
Transparency = 0.65,
LabelFile = speck .. "/eclip.label",
TextColor = { 0.5, 0.5, 0.5, 1.0 },
TextSize = 15.4,
TextMinSize = 5.0,
Unit = "pc",
TransformationMatrix = {
-0.05487554, 0.4941095, -0.8676661, 0.0,
-0.9938214 , -0.1109906, -0.0003515167, 0.0,
-0.09647644, 0.8622859, 0.4971472, 0.0,
0.0, 0.0, 0.0, 1.0
}
},
GuiPath = "/Other/Grids"
}
local equatorial = {
Name = "Equatorial Sphere",
Parent = transforms.SolarSystemBarycenter.Name,
Renderable = {
Type = "RenderableSphericalGrid",
Enabled = false,
GridColor = { 0.0, 0.0, 1.0, 0.8},
LineWidth = 2.0,
Radius = 6.2440846E17,
GridMatrix = { -0.05487554, 0.4941095, -0.8676661, 0.0,
-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"
}
local equatorialLabels = {
Name = "Equatorial Sphere Labels",
Parent = transforms.SolarSystemBarycenter.Name,
Renderable = {
Type = "RenderableBillboardsCloud",
Enabled = false,
Color = { 1.0, 1.0, 1.0 },
Transparency = 0.65,
LabelFile = speck .. "/radec.label",
TextColor = { 0.5, 0.5, 0.5, 1.0 },
TextSize = 15.3,
TextMinSize = 5.0,
Unit = "pc",
TransformationMatrix = {
-0.05487554, 0.4941095, -0.8676661, 0.0,
-0.9938214 , -0.1109906, -0.0003515167, 0.0,
-0.09647644, 0.8622859, 0.4971472, 0.0,
0.0, 0.0, 0.0, 1.0
}
},
GuiPath = "/Other/Grids"
}
local galactic = {
Name = "Galactic Sphere",
Parent = transforms.SolarSystemBarycenter.Name,
Renderable = {
Type = "RenderableSphericalGrid",
Enabled = false,
LineWidth = 2.0,
Radius = 9.46377307652E18;
GridColor = { 0.0, 0.6, 0.6, 0.6}
},
GuiPath = "/Other/Grids"
}
local galacticLabels = {
Name = "Galactic Sphere Labels",
Parent = transforms.SolarSystemBarycenter.Name,
Renderable = {
Type = "RenderableBillboardsCloud",
Enabled = false,
Color = { 1.0, 1.0, 1.0 },
Transparency = 0.65,
LabelFile = speck .. "/galac.label",
TextColor = { 0.5, 0.5, 0.5, 1.0 },
TextSize = 16.25,
TextMinSize = 5.0,
Unit = "pc"
},
GuiPath = "/Other/Grids"
}
local plane100kly = {
Name = "100kly Grid",
Renderable = {
Type = "RenderableDUMeshes",
Enabled = false,
Color = { 1.0, 1.0, 1.0 },
Transparency = 0.4,
ScaleFactor = 1.0,
File = speck .. "/100kly.speck",
MeshColor = {{ 0.1, 0.5, 0.6 }},
LabelFile = speck .. "/100kly.label",
TextColor = { 0.0, 0.2, 0.5, 1.0 },
TextSize = 18.6,
TextMinSize = 7.0,
Unit = "Mpc"
},
GuiPath = "/Other/Grids"
}
local plane1Mly = {
Name = "1Mly Grid",
Renderable = {
Type = "RenderableDUMeshes",
Enabled = false,
Color = { 1.0, 1.0, 1.0 },
Transparency = 0.4,
ScaleFactor = 1.0,
File = speck .. "/1Mly.speck",
MeshColor = {{ 0.1, 0.5, 0.6 }},
LabelFile = speck .. "/1Mly.label",
TextColor = { 0.0, 0.2, 0.5, 1.0 },
TextSize = 19.6,
TextMinSize = 7.0,
Unit = "Mpc"
},
GuiPath = "/Other/Grids"
}
local plane10Mly = {
Name = "10Mly Grid",
Renderable = {
Type = "RenderableDUMeshes",
Enabled = false,
Color = { 1.0, 1.0, 1.0 },
Transparency = 0.4,
ScaleFactor = 1.0,
File = speck .. "/10Mly.speck",
MeshColor = {{ 0.1, 0.5, 0.6 }},
LabelFile = speck .. "/10Mly.label",
TextColor = { 0.0, 0.2, 0.5, 1.0 },
TextSize = 20.6,
TextMinSize = 7.0,
Unit = "Mpc"
},
GuiPath = "/Other/Grids"
}
local plane100Mly = {
Name = "100Mly Grid",
Renderable = {
Type = "RenderableDUMeshes",
Enabled = false,
Color = { 1.0, 1.0, 1.0 },
Transparency = 0.4,
ScaleFactor = 1.0,
File = speck .. "/100Mly.speck",
MeshColor = {{ 0.1, 0.5, 0.6 }},
LabelFile = speck .. "/100Mly.label",
TextColor = { 0.0, 0.2, 0.5, 1.0 },
TextSize = 21.6,
TextMinSize = 7.0,
Unit = "Mpc"
},
GuiPath = "/Other/Grids"
}
local plane20Gly = {
Name = "20Gly Grid",
Renderable = {
Type = "RenderableDUMeshes",
Enabled = false,
Color = { 1.0, 1.0, 1.0 },
Transparency = 0.4,
ScaleFactor = 1.0,
File = speck .. "/20Gly.speck",
MeshColor = {{ 0.1, 0.5, 0.6 }},
LabelFile = speck .. "/20Gly.label",
TextColor = { 0.0, 0.2, 0.5, 1.0 },
TextSize = 23.6,
TextMinSize = 7.0,
Unit = "Mpc"
},
GuiPath = "/Other/Grids"
}
assetHelper.registerSceneGraphNodesAndExport(asset, {
ecliptic, eclipticLabels, equatorial, equatorialLabels, galactic, galacticLabels,
plane100kly, plane1Mly, plane10Mly, plane100Mly, plane20Gly
})

View File

@@ -0,0 +1,31 @@
local assetHelper = asset.require('util/asset_helper')
local speck = asset.syncedResource({
Name = "Galaxy Groups Speck Files",
Type = "HttpSynchronization",
Identifier = "digitaluniverse_groups_speck",
Version = 1
})
local object = {
Name = "Nearby Galaxy Groups",
Renderable = {
Type = "RenderableBillboardsCloud",
Enabled = false,
Color = { 1.0, 1.0, 1.0 },
Transparency = 0.65,
--ScaleFactor = 10.0,
LabelFile = speck .. "/groups.label",
TextColor = { 0.1, 0.6, 0.2, 1.0 },
TextSize = 21.5,
TextMinSize = 8.0,
Unit = "Mpc"
},
GuiPath = "/Universe/Galaxies"
}
assetHelper.registerSceneGraphNodesAndExport(asset, { object })

View File

@@ -0,0 +1,41 @@
local assetHelper = asset.require('util/asset_helper')
local textures = asset.syncedResource({
Name = "HII Regions Textures",
Type = "HttpSynchronization",
Identifier = "digitaluniverse_h2regions_textures",
Version = 1
})
local speck = asset.syncedResource({
Name = "HII Regions Speck Files",
Type = "HttpSynchronization",
Identifier = "digitaluniverse_h2regions_speck",
Version = 2
})
local object = {
Name = "HII Regions",
Renderable = {
Type = "RenderableBillboardsCloud",
Enabled = false,
Color = { 0.0, 0.5, 1.0 },
Transparency = 0.35,
File = speck .. "/h2.speck",
Texture = textures .."/point4.png",
PolygonSides = 6,
LabelFile = speck .. "/h2.label",
TextColor = { 0.5, 0.5, 0.5, 1.0 },
ScaleFactor = 420,
TextSize = 17.25,
TextMinSize = 2.0,
Unit = "pc"
},
GuiPath = "/Milky Way/HII"
}
assetHelper.registerSceneGraphNodesAndExport(asset, { object })

View File

@@ -0,0 +1,36 @@
local assetHelper = asset.require('util/asset_helper')
local textures = asset.syncedResource({
Name = "Kepler Textures",
Type = "HttpSynchronization",
Identifier = "digitaluniverse_kepler_textures",
Version = 1
})
local speck = asset.syncedResource({
Name = "Kepler Speck Files",
Type = "HttpSynchronization",
Identifier = "digitaluniverse_kepler_speck",
Version = 1
})
local object = {
Name = "Kepler Planetary Candidates",
Renderable = {
Type = "RenderableBillboardsCloud",
Enabled = false,
Color = { 1.0, 1.0, 0.0 },
Transparency = 0.99,
ScaleFactor = 395.0,
File = speck .. "/kepler.speck",
Texture = textures .. "/halo.png",
Unit = "pc"
},
GuiPath = "/Milky Way/Exoplanets"
}
assetHelper.registerSceneGraphNodesAndExport(asset, { object })

View File

@@ -0,0 +1,41 @@
local assetHelper = asset.require('util/asset_helper')
local textures = asset.syncedResource({
Name = "Local Dwarfs Textures",
Type = "HttpSynchronization",
Identifier = "digitaluniverse_localdwarfs_textures",
Version = 1
})
local speck = asset.syncedResource({
Name = "Local Dwarfs Speck Files",
Type = "HttpSynchronization",
Identifier = "digitaluniverse_localdwarfs_speck",
Version = 1
})
local object = {
Name = "Local Dwarf Galaxies",
Renderable = {
Type = "RenderableBillboardsCloud",
Enabled = false,
Color = { 0.5, 1.0, 0.2 },
Transparency = 0.3,
File = speck .. "/localdwarfs.speck",
Texture = textures .. "/point4.png",
PolygonSides = 12,
LabelFile = speck .. "/localdwarfs.label",
TextColor = { 0.3, 0.3, 1.0, 1.0 },
ScaleFactor = 478,
TextSize = 19.2,
TextMinSize = 7.3,
Unit = "Mpc"
},
GuiPath = "/Universe/Galaxies"
}
assetHelper.registerSceneGraphNodesAndExport(asset, { object })

View File

@@ -0,0 +1,64 @@
local assetHelper = asset.require('util/asset_helper')
local sphereTextures = asset.syncedResource({
Name = "Milky Way Sphere Textures",
Type = "HttpSynchronization",
Identifier = "milkyway_textures",
Version = 2
})
local planeTextures = asset.syncedResource({
Name = "Milky Way Plane Textures",
Type = "HttpSynchronization",
Identifier = "digitaluniverse_milkyway_textures",
Version = 1
})
local planeSpeck = asset.syncedResource({
Name = "Milky Way Plane Speck",
Type = "HttpSynchronization",
Identifier = "digitaluniverse_milkyway_speck",
Version = 1
})
local sphere = {
Name = "MilkyWay",
Renderable = {
Type = "RenderableSphere",
Size = 9.2E20,
Segments = 40,
Alpha = 0.4,
Texture = sphereTextures .. "/DarkUniverse_mellinger_4k.jpg",
Orientation = "Inside/Outside",
FadeOutThreshould = 0.25
},
GuiPath = "/Milky Way/Milky Way"
}
local plane = {
Name = "Milky Way Galaxy Image",
Parent = "Root",
Renderable = {
Type = "RenderablePlanesCloud",
Enabled = true,
Color = { 1.0, 1.0, 1.0 },
Transparency = 0.90,
ScaleFactor = 2.8,
File = planeSpeck .. "/galaxy.speck",
TexturePath = planeTextures,
Luminosity = "size",
ScaleLuminosity = 1.0,
-- Fade in value in the same unit as "Unit"
FadeInThreshould = 119441,
FadeInDistances = { 1400.0, 119441.0 },
PlaneMinSize = 5.0,
Unit = "pc"
},
GuiPath = "/Universe/Galaxies"
}
assetHelper.registerSceneGraphNodesAndExport(asset, { sphere, plane })

View File

@@ -0,0 +1,41 @@
local assetHelper = asset.require('util/asset_helper')
local textures = asset.syncedResource({
Name = "OB Associations Textures",
Type = "HttpSynchronization",
Identifier = "digitaluniverse_obassociations_textures",
Version = 1
})
local speck = asset.syncedResource({
Name = "OB Associations Speck Files",
Type = "HttpSynchronization",
Identifier = "digitaluniverse_obassociations_speck",
Version = 1
})
local object = {
Name = "OB Associations",
Renderable = {
Type = "RenderableBillboardsCloud",
Enabled = false,
Color = { 0.0, 0.0, 1.0 },
Transparency = 0.5,
File = speck .. "/ob.speck",
Texture = textures .. "/point4.png",
PolygonSides = 7,
LabelFile = speck .. "/ob.label",
TextColor = { 0.4, 0.5, 1.0, 1.0 },
ScaleFactor = 428.0,
TextSize = 17.0,
TextMinSize = 5.76,
Unit = "pc"
},
GuiPath = "/Milky Way/OB Associations"
}
assetHelper.registerSceneGraphNodesAndExport(asset, { object })

View File

@@ -0,0 +1,41 @@
local assetHelper = asset.require('util/asset_helper')
local textures = asset.syncedResource({
Name = "Open Clusters Textures",
Type = "HttpSynchronization",
Identifier = "digitaluniverse_openclusters_textures",
Version = 1
})
local speck = asset.syncedResource({
Name = "Open Clusters Speck Files",
Type = "HttpSynchronization",
Identifier = "digitaluniverse_openclusters_speck",
Version = 1
})
local object = {
Name = "Open Star Clusters",
Renderable = {
Type = "RenderableBillboardsCloud",
Enabled = false,
Color = { 0.1, 0.8, 0.4 },
Transparency = 0.5,
File = speck .. "/oc.speck",
Texture = textures .. "/point4.png",
PolygonSides = 12,
TextColor = { 0.05, 0.4, 0.2, 1.0 },
LabelFile = speck .. "/oc.label",
ScaleFactor = 418.33,
TextSize = 16.68,
TextMinSize = 4.5,
Unit = "pc"
},
GuiPath = "/Milky Way/Open Clusters"
}
assetHelper.registerSceneGraphNodesAndExport(asset, { object })

View File

@@ -0,0 +1,41 @@
local assetHelper = asset.require('util/asset_helper')
local textures = asset.syncedResource({
Name = "Planetary Nebulae Textures",
Type = "HttpSynchronization",
Identifier = "digitaluniverse_planetarynebulae_textures",
Version = 1
})
local speck = asset.syncedResource({
Name = "Planetary Nebulae Speck Files",
Type = "HttpSynchronization",
Identifier = "digitaluniverse_planetarynebulae_speck",
Version = 1
})
local object = {
Name = "Planetary Nebulae",
Renderable = {
Type = "RenderableBillboardsCloud",
Enabled = false,
Color = { 0.4, 0.4, 0.9 },
Transparency = 0.35,
File = speck .. "/pn.speck",
Texture = textures .. "/point4.png",
PolygonSides = 3,
LabelFile = speck .. "/pn.label",
TextColor = { 0.25, 0.25, 0.65, 1.0 },
ScaleFactor = 418.33,
TextSize = 16.68,
TextMinSize = 4.5,
Unit = "pc"
},
GuiPath = "/Milky Way/Planetary Nebulae"
}
assetHelper.registerSceneGraphNodesAndExport(asset, { object })

View File

@@ -0,0 +1,41 @@
local assetHelper = asset.require('util/asset_helper')
local textures = asset.syncedResource({
Name = "Pulsars Textures",
Type = "HttpSynchronization",
Identifier = "digitaluniverse_pulsars_textures",
Version = 1
})
local speck = asset.syncedResource({
Name = "Pulsars Speck Files",
Type = "HttpSynchronization",
Identifier = "digitaluniverse_pulsars_speck",
Version = 1
})
local object = {
Name = "Pulsars",
Renderable = {
Type = "RenderableBillboardsCloud",
Enabled = false,
Color = { 0.7, 0.0, 0.0 },
Transparency = 0.5,
File = speck .. "/pulsar.speck",
Texture = textures .. "/point4.png",
PolygonSides = 4,
LabelFile = speck .. "/pulsar.label",
TextColor = { 0.7, 0.0, 0.0, 1.0 },
ScaleFactor = 418.33,
TextSize = 16.68,
TextMinSize = 4.5,
Unit = "pc"
},
GuiPath = "/Milky Way/Pulsars"
}
assetHelper.registerSceneGraphNodesAndExport(asset, { object })

View File

@@ -0,0 +1,40 @@
local assetHelper = asset.require('util/asset_helper')
local textures = asset.syncedResource({
Name = "Quasars Textures",
Type = "HttpSynchronization",
Identifier = "digitaluniverse_quasars_textures",
Version = 1
})
local speck = asset.syncedResource({
Name = "Quasars Speck Files",
Type = "HttpSynchronization",
Identifier = "digitaluniverse_quasars_speck",
Version = 1
})
local object = {
Name = "Quasars",
Renderable = {
Type = "RenderableBillboardsCloud",
Enabled = false,
Color = { 1.0, 0.4, 0.2 },
Transparency = 1.0,
File = speck .. "/quasars.speck",
Texture = textures .. "/point3.png",
Unit = "Mpc",
ScaleFactor = 537.31,
-- Fade in value in the same unit as "Unit"
FadeInDistances = { 1000.0, 10000.0 },
BillboardMaxSize = 30.0,
BillboardMinSize = 0.0,
},
GuiPath = "/Universe/Quasars"
}
assetHelper.registerSceneGraphNodesAndExport(asset, { object })

View File

@@ -0,0 +1,46 @@
local assetHelper = asset.require('util/asset_helper')
local textures = asset.syncedResource({
Name = "Sloan Digital Sky Survey Textures",
Type = "HttpSynchronization",
Identifier = "digitaluniverse_sloandss_textures",
Version = 1
})
local speck = asset.syncedResource({
Name = "Sloan Digital Sky Survey Speck Files",
Type = "HttpSynchronization",
Identifier = "digitaluniverse_sloandss_speck",
Version = 1
})
local object = {
Name = "Sloan Digital Sky Survey",
Renderable = {
Type = "RenderableBillboardsCloud",
Enabled = false,
Color = { 0.8, 0.8, 1.0 },
Transparency = 1.0,
ScaleFactor = 507.88,
File = speck .. "/SDSSgals.speck",
ColorMap = speck .. "/lss.cmap",
ColorOption = { "redshift", "prox5Mpc" },
ColorRange = { { 0.0, 0.075 }, { 1.0, 50.0 } },
Texture = textures .. "/point3.png",
Unit = "Mpc",
-- Fade in value in the same unit as "Unit"
FadeInDistances = { 220.0, 650.0 },
BillboardMaxSize = 50.0,
BillboardMinSize = 0.0,
TextSize = 14.8,
TextMinSize = 10.0,
TextMaxSize = 50.0
},
GuiPath = "/Universe/Galaxies"
}
assetHelper.registerSceneGraphNodesAndExport(asset, { object })

View File

@@ -0,0 +1,32 @@
local assetHelper = asset.require('util/asset_helper')
local speck = asset.syncedResource({
Name = "Star Labels Speck Files",
Type = "HttpSynchronization",
Identifier = "digitaluniverse_starlabels_speck",
Version = 2
})
local object = {
Name = "Stars Labels",
Renderable = {
Type = "RenderableBillboardsCloud",
Enabled = false,
Color = { 1.0, 1.0, 1.0 },
Transparency = 0.65,
LabelFile = speck .. "/stars.label",
TextColor = { 0.4, 0.4, 0.4, 1.0 },
DrawLabels = true,
TextSize = 14.7,
TextMinSize = 6.0,
TextMaxSize = 50.0,
Unit = "pc"
},
GuiPath = "/Milky Way/Stars"
}
assetHelper.registerSceneGraphNodesAndExport(asset, { object })

View File

@@ -0,0 +1,39 @@
local assetHelper = asset.require('util/asset_helper')
local textures = asset.syncedResource({
Name = "Stars Textures",
Type = "HttpSynchronization",
Identifier = "stars_textures",
Version = 1
})
local speck = asset.syncedResource({
Name = "Stars Speck Files",
Type = "HttpSynchronization",
Identifier = "stars_du",
Version = 1
})
local colorLUT = asset.syncedResource({
Name = "Stars Color Table",
Type = "HttpSynchronization",
Identifier = "stars_colormap",
Version = 1
})
local object = {
Name = "Stars",
Renderable = {
Type = "RenderableStars",
File = speck .. "/stars.speck",
Texture = textures .. "/halo.png",
ColorMap = colorLUT .. "/colorbv.cmap"
},
GuiPath = "/Milky Way/Stars"
}
assetHelper.registerSceneGraphNodesAndExport(asset, { object })

View File

@@ -0,0 +1,40 @@
local assetHelper = asset.require('util/asset_helper')
local textures = asset.syncedResource({
Name = "Galaxy Superclusters Textures",
Type = "HttpSynchronization",
Identifier = "digitaluniverse_superclusters_textures",
Version = 1
})
local speck = asset.syncedResource({
Name = "Galaxy Superclusters Speck Files",
Type = "HttpSynchronization",
Identifier = "digitaluniverse_superclusters_speck",
Version = 1
})
local object = {
Name = "Galaxy Superclusters",
Renderable = {
Type = "RenderableBillboardsCloud",
Enabled = false,
Color = { 1.0, 1.0, 1.0 },
Transparency = 0.65,
File = speck .. "/superclust.speck",
Texture = textures .. "/point3.png",
LabelFile = speck .. "/superclust.label",
TextColor = { 0.6, 0.6, 0.6, 1.0 },
ScaleFactor = 531.0,
TextSize = 22.44,
TextMinSize = 8.0,
Unit = "Mpc"
},
GuiPath = "/Universe/Galaxies"
}
assetHelper.registerSceneGraphNodesAndExport(asset, { object })

View File

@@ -0,0 +1,41 @@
local assetHelper = asset.require('util/asset_helper')
local textures = asset.syncedResource({
Name = "Supernova Remnants Textures",
Type = "HttpSynchronization",
Identifier = "digitaluniverse_supernovaremnants_textures",
Version = 1
})
local speck = asset.syncedResource({
Name = "Supernova Remnants Speck Files",
Type = "HttpSynchronization",
Identifier = "digitaluniverse_supernovaremnants_speck",
Version = 1
})
local object = {
Name = "Supernova Remnants",
Renderable = {
Type = "RenderableBillboardsCloud",
Enabled = false,
Color = { 1.0, 0.5, 0.0 },
Transparency = 0.5,
File = speck .. "/snr.speck",
Texture = textures .. "/point4.png",
PolygonSides = 7,
LabelFile = speck .. "/snr.label",
TextColor = { 0.6, 0.3, 0.0, 1.0 },
ScaleFactor = 440.08,
TextSize = 17.5,
TextMinSize = 8.0,
Unit = "pc"
},
GuiPath = "/Milky Way/Supernova Remnants"
}
assetHelper.registerSceneGraphNodesAndExport(asset, { object })

View File

@@ -0,0 +1,80 @@
local assetHelper = asset.require('util/asset_helper')
local textures = asset.syncedResource({
Name = "Tully Textures",
Type = "HttpSynchronization",
Identifier = "digitaluniverse_tully_textures",
Version = 1
})
local speck = asset.syncedResource({
Name = "Tully Speck Files",
Type = "HttpSynchronization",
Identifier = "digitaluniverse_tully_speck",
Version = 1
})
local tullyPoints = {
Name = "Tully Galaxies",
Renderable = {
Type = "RenderableBillboardsCloud",
Enabled = false,
Color = { 1.0, 0.4, 0.2 },
Transparency = 0.99,
ScaleFactor = 502.77,
File = speck .. "/tully.speck",
Texture = textures .. "/point3.png",
ColorMap = speck .. "/lss.cmap",
ColorOption = { "prox5Mpc" },
ColorRange = { { 1.0, 80.0 } },
LabelFile = speck .. "/tully.label",
TextColor = { 0.7, 0.7, 0.7, 1.0 },
TextSize = 20.50,
TextMinSize = 16.0,
TransformationMatrix = {
-0.7357425748, 0.67726129641, 0.0, 0.0,
-0.074553778365, -0.080991471307, 0.9939225904, 0.0,
0.67314530211, 0.73127116582, 0.11008126223, 0.0,
0.0, 0.0, 0.0, 1.0
},
Unit = "Mpc",
-- Fade in value in the same unit as "Unit"
FadeInDistances = { 0.05, 1.0 },
-- Max size in pixels
BillboardMaxSize = 50.0,
BillboardMinSize = 0.0,
},
GuiPath = "/Universe/Galaxies"
}
local tullyImages = {
Name = "Tully Galaxies Images",
Renderable = {
Type = "RenderablePlanesCloud",
Enabled = false,
Color = { 1.0, 1.0, 1.0 },
Transparency = 0.99,
ScaleFactor = 1.0,
File = speck .. "/tully.speck",
TexturePath = textures,
Luminosity = "diamkpc",
ScaleLuminosity = 0.001,
TransformationMatrix = {
-0.7357425748, 0.67726129641, 0.0, 0.0,
-0.074553778365, -0.080991471307, 0.9939225904, 0.0,
0.67314530211, 0.73127116582, 0.11008126223, 0.0,
0.0, 0.0, 0.0, 1.0
},
Unit = "Mpc",
-- Fade in value in the same unit as "Unit"
FadeInDistances = {0.05, 0.1},
PlaneMinSize = 5.0
},
GuiPath = "/Universe/Galaxies"
}
assetHelper.registerSceneGraphNodesAndExport(asset, { tullyPoints, tullyImages })

View File

@@ -0,0 +1,30 @@
local assetHelper = asset.require('util/asset_helper')
local speck = asset.syncedResource({
Name = "Voids Speck Files",
Type = "HttpSynchronization",
Identifier = "digitaluniverse_voids_speck",
Version = 1
})
local object = {
Name = "Voids",
Renderable = {
Type = "RenderableBillboardsCloud",
Enabled = false,
Color = { 1.0, 1.0, 1.0 },
Transparency = 0.65,
LabelFile = speck .. "/voids.label",
TextColor = { 0.0, 0.4, 0.7, 1.0 },
TextSize = 21.9,
TextMinSize = 8.0,
Unit = "Mpc"
},
GuiPath = "/Universe/Galaxies"
}
assetHelper.registerSceneGraphNodesAndExport(asset, { object })

View File

@@ -0,0 +1,28 @@
local assetHelper = asset.require('util/asset_helper')
local textures = asset.syncedResource({
Name = "ESO Milky Way Textures",
Type = "HttpSynchronization",
Identifier = "milkyway-eso_textures",
Version = 1
})
local object = {
Name = "MilkyWay (ESO)",
Renderable = {
Type = "RenderableSphere",
Size = 9.2E20,
Segments = 40,
Alpha = 0.4,
Texture = textures .. "/eso0932a_blend.png",
Orientation = "Inside/Outside",
FadeOutThreshould = 0.01
},
GuiPath = "/Milky Way/Milky Way"
}
assetHelper.registerSceneGraphNodesAndExport(asset, { object })

View File

@@ -0,0 +1,39 @@
local assetHelper = asset.require('util/asset_helper')
local textures = asset.syncedResource({
Name = "Stars Textures",
Type = "HttpSynchronization",
Identifier = "stars-denver_textures",
Version = 1
})
local speck = asset.syncedResource({
Name = "Stars Speck Files",
Type = "HttpSynchronization",
Identifier = "stars-denver_speck",
Version = 1
})
local colorLUT = asset.syncedResource({
Name = "Stars Color Table",
Type = "HttpSynchronization",
Identifier = "stars-denver_colormap",
Version = 1
})
local object = {
Name = "Stars (Denver)",
Renderable = {
Type = "RenderableStars",
File = speck .. "/denver_stars.speck",
Texture = textures .. "/halo.png",
ColorMap = colorLUT .. "/denver_colorbv.cmap"
},
GuiPath = "/Milky Way/Stars"
}
assetHelper.registerSceneGraphNodesAndExport(asset, { object })

View File

@@ -0,0 +1,58 @@
local assetHelper = asset.require('util/asset_helper')
local transforms = asset.require('scene/solarsystem/sun/transforms')
local kernels = asset.require('./dawn_kernels').Kernels
local textures = asset.syncedResource({
Name = "Ceres Textures",
Type = "HttpSynchronization",
Identifier = "ceres_textures",
Version = 1
})
local Ceres = {
Name = "Ceres",
Parent = transforms.SolarSystemBarycenter.Name,
Transform = {
Rotation = {
Type = "SpiceRotation",
SourceFrame = "IAU_CERES",
DestinationFrame = "GALACTIC",
Kernels = {
kernels .. "/pck/dawn_ceres_v01.tpc",
kernels .. "/spk/sb_ceres_140724.bsp",
kernels .. "/spk/sb_ceres_110211.bsp"
}
},
Translation = {
Type = "SpiceTranslation",
Target = "CERES",
Observer = "SSB",
Kernels = {
kernels .. "/pck/dawn_ceres_v01.tpc",
kernels .. "/spk/sb_ceres_140724.bsp",
kernels .. "/spk/sb_ceres_110211.bsp"
}
}
},
Renderable = {
Type = "RenderableGlobe",
Radii = { 6.390E5, 6.390E5, 6.390E5 },
SegmentsPerPatch = 64,
Layers = {
ColorLayers = {
{
Name = "Texture",
FilePath = textures .. "/gray.png",
Enabled = true
}
}
}
},
GuiPath = "/Solar System/Dwarf Planets/Ceres"
}
assetHelper.registerSceneGraphNodesAndExport(asset, { Ceres })

View File

@@ -0,0 +1,761 @@
local assetHelper = asset.require('util/asset_helper')
local transforms = asset.require('scene/solarsystem/sun/transforms')
local kernels = asset.require('./dawn_kernels').Kernels
local textures = asset.syncedResource({
Name = "Dawn Textures",
Type = "HttpSynchronization",
Identifier = "dawn_textures",
Version = 1
})
local models = asset.syncedResource({
Name = "Dawn Models",
Type = "HttpSynchronization",
Identifier = "dawn_model",
Version = 1
})
local KernelFiles = {
kernels .. "/DawnKernels/spk/dawn_ref_070926-150201_070829.bsp",
--ik
kernels .. "/DawnKernels/ik/dawn_fc_v10.ti",
-- SPK
kernels .. "/DawnKernels/spk/sb_ceres_110211.bsp",
kernels .. "/DawnKernels/spk/sb_ceres_140724.bsp",
kernels .. "/DawnKernels/spk/sb_vesta_071107.bsp",
kernels .. "/DawnKernels/spk/dawn_rec_070927_070930_081218_v1.bsp",
--[[kernels .. "/DawnKernels/spk/dawn_rec_070930_071201_081218_v1.bsp",
kernels .. "/DawnKernels/spk/dawn_rec_071201_080205_081218_v1.bsp",
kernels .. "/DawnKernels/spk/dawn_rec_080205_080325_081218_v1.bsp",
kernels .. "/DawnKernels/spk/dawn_rec_080325_080503_081218_v1.bsp",
kernels .. "/DawnKernels/spk/dawn_rec_080503_080601_081218_v1.bsp",
kernels .. "/DawnKernels/spk/dawn_rec_080601_080718_081218_v1.bsp",
kernels .. "/DawnKernels/spk/dawn_rec_080718_080910_081218_v1.bsp",
kernels .. "/DawnKernels/spk/dawn_rec_080910_081022_090218_v1.bsp",
kernels .. "/DawnKernels/spk/dawn_rec_081022_081109_090218_v1.bsp",
kernels .. "/DawnKernels/spk/dawn_rec_081109_090228_090306_v1.bsp",
kernels .. "/DawnKernels/spk/dawn_rec_090228_090501_090702_v1.bsp",
kernels .. "/DawnKernels/spk/dawn_rec_090501_090801_090916_v1.bsp",
kernels .. "/DawnKernels/spk/dawn_rec_090801_090915_090923_v1.bsp",
kernels .. "/DawnKernels/spk/dawn_rec_090915_091201_091202_v1.bsp",
kernels .. "/DawnKernels/spk/dawn_rec_091201_100208_100209_v1.bsp",
kernels .. "/DawnKernels/spk/dawn_rec_100208_100316_100323_v1.bsp",
kernels .. "/DawnKernels/spk/dawn_rec_100316_100413_100422_v1.bsp",
kernels .. "/DawnKernels/spk/dawn_rec_100413_100622_100830_v1.bsp",
kernels .. "/DawnKernels/spk/dawn_rec_100622_100824_100830_v1.bsp",
kernels .. "/DawnKernels/spk/dawn_rec_100824_101130_101202_v1.bsp",
kernels .. "/DawnKernels/spk/dawn_rec_101130_110201_110201_v1.bsp",
kernels .. "/DawnKernels/spk/dawn_rec_110201_110328_110328_v1.bsp",
kernels .. "/DawnKernels/spk/dawn_rec_110328_110419_110420_v1.bsp",--]]
kernels .. "/DawnKernels/spk/dawn_rec_110416_110802_110913_v1.bsp",
kernels .. "/DawnKernels/spk/dawn_rec_110802_110831_110922_v1.bsp",
--[[kernels .. "/spk/dawn_rec_110831_110928_111221_v1.bsp",
kernels .. "/DawnKernels/spk/dawn_rec_110928_111102_120615_v1.bsp",
kernels .. "/DawnKernels/spk/dawn_rec_111102_111210_120618_v1.bsp",
kernels .. "/DawnKernels/spk/dawn_rec_111211_120501_120620_v1.bsp",
kernels .. "/DawnKernels/spk/dawn_rec_120501_120611_120625_v1.bsp",
kernels .. "/DawnKernels/spk/dawn_rec_120611_120724_121101_v1.bsp",--]]
kernels .. "/DawnKernels/spk/dawn_rec_120724_120913_121213_v1.bsp",
--PCK
--kernels .. "/pck/dawn_vesta_v06.tpc",
--kernels .. "/pck/dawn_ceres_v01.tpc",
--kernels .. "/pck/pck00008.tpc",
-- FK
kernels .. "/DawnKernels/fk/dawn_vesta_v00.tf",
kernels .. "/DawnKernels/fk/dawn_v12.tf",
--SCLK
kernels .. "/DawnKernels/sclk/dawn_203_sclkscet_00039.tsc",
-- CK
kernels .. "/DawnKernels/ck/dawn_sc_070927_070930.bc",
kernels .. "/DawnKernels/ck/dawn_sc_110801_110807.bc",
kernels .. "/DawnKernels/ck/dawn_sc_110808_110814.bc",
kernels .. "/DawnKernels/ck/dawn_sc_120910_120916.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_111226_120101.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_120102_120108.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_120109_120115.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_120116_120122.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_120123_120129.bc",
-- all space craft CK files, ~10 gb
-- kernels .. "/DawnKernels/ck/dawn_sc_120123_120129.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_070927_070930.bc",
--[[kernels .. "/ck/dawn_sc_071001_071007.bc",
kernels .. "/DawnKernels/ck/dawn_sc_071008_071014_v2.bc",
kernels .. "/DawnKernels/ck/dawn_sc_071015_071021.bc",
kernels .. "/DawnKernels/ck/dawn_sc_071022_071028_v2.bc",
kernels .. "/DawnKernels/ck/dawn_sc_071029_071104.bc",
kernels .. "/DawnKernels/ck/dawn_sc_071105_071111.bc",
kernels .. "/DawnKernels/ck/dawn_sc_071112_071118.bc",
kernels .. "/DawnKernels/ck/dawn_sc_071119_071125.bc",
kernels .. "/DawnKernels/ck/dawn_sc_071126_071202.bc",
kernels .. "/DawnKernels/ck/dawn_sc_071203_071209.bc",
kernels .. "/DawnKernels/ck/dawn_sc_071210_071216.bc",
kernels .. "/DawnKernels/ck/dawn_sc_071217_071223.bc",
kernels .. "/DawnKernels/ck/dawn_sc_071224_071230.bc",
kernels .. "/DawnKernels/ck/dawn_sc_071231_080106.bc",
kernels .. "/DawnKernels/ck/dawn_sc_080107_080113.bc",
kernels .. "/DawnKernels/ck/dawn_sc_080114_080120.bc",
kernels .. "/DawnKernels/ck/dawn_sc_080121_080127.bc",
kernels .. "/DawnKernels/ck/dawn_sc_080128_080203.bc",
kernels .. "/DawnKernels/ck/dawn_sc_080204_080210.bc",
kernels .. "/DawnKernels/ck/dawn_sc_080211_080217.bc",
kernels .. "/DawnKernels/ck/dawn_sc_080218_080224.bc",
kernels .. "/DawnKernels/ck/dawn_sc_080225_080302.bc",
kernels .. "/DawnKernels/ck/dawn_sc_080303_080309.bc",
kernels .. "/DawnKernels/ck/dawn_sc_080310_080316.bc",
kernels .. "/DawnKernels/ck/dawn_sc_080317_080323.bc",
kernels .. "/DawnKernels/ck/dawn_sc_080324_080330.bc",
kernels .. "/DawnKernels/ck/dawn_sc_080331_080406.bc",
kernels .. "/DawnKernels/ck/dawn_sc_080407_080413.bc",
kernels .. "/DawnKernels/ck/dawn_sc_080414_080420.bc",
kernels .. "/DawnKernels/ck/dawn_sc_080421_080427.bc",
kernels .. "/DawnKernels/ck/dawn_sc_080428_080504.bc",
kernels .. "/DawnKernels/ck/dawn_sc_080505_080511.bc",
kernels .. "/DawnKernels/ck/dawn_sc_080512_080518.bc",
kernels .. "/DawnKernels/ck/dawn_sc_080519_080525.bc",
kernels .. "/DawnKernels/ck/dawn_sc_080526_080601.bc",
kernels .. "/DawnKernels/ck/dawn_sc_080602_080608.bc",
kernels .. "/DawnKernels/ck/dawn_sc_080609_080615.bc",
kernels .. "/DawnKernels/ck/dawn_sc_080616_080622.bc",
kernels .. "/DawnKernels/ck/dawn_sc_080623_080629.bc",
kernels .. "/DawnKernels/ck/dawn_sc_080630_080706.bc",
kernels .. "/DawnKernels/ck/dawn_sc_080707_080713.bc",
kernels .. "/DawnKernels/ck/dawn_sc_080714_080720.bc",
kernels .. "/DawnKernels/ck/dawn_sc_080721_080727.bc",
kernels .. "/DawnKernels/ck/dawn_sc_080728_080803.bc",
kernels .. "/DawnKernels/ck/dawn_sc_080804_080810.bc",
kernels .. "/DawnKernels/ck/dawn_sc_080811_080817.bc",
kernels .. "/DawnKernels/ck/dawn_sc_080818_080824.bc",
kernels .. "/DawnKernels/ck/dawn_sc_080825_080831.bc",
kernels .. "/DawnKernels/ck/dawn_sc_080901_080907.bc",
kernels .. "/DawnKernels/ck/dawn_sc_080908_080914.bc",
kernels .. "/DawnKernels/ck/dawn_sc_080915_080921.bc",
kernels .. "/DawnKernels/ck/dawn_sc_080922_080928.bc",
kernels .. "/DawnKernels/ck/dawn_sc_080929_081005.bc",
kernels .. "/DawnKernels/ck/dawn_sc_081006_081012.bc",
kernels .. "/DawnKernels/ck/dawn_sc_081013_081019.bc",
kernels .. "/DawnKernels/ck/dawn_sc_081020_081026.bc",
kernels .. "/DawnKernels/ck/dawn_sc_081027_081102.bc",
kernels .. "/DawnKernels/ck/dawn_sc_081103_081109.bc",
kernels .. "/DawnKernels/ck/dawn_sc_081110_081116.bc",
kernels .. "/DawnKernels/ck/dawn_sc_081117_081123.bc",
kernels .. "/DawnKernels/ck/dawn_sc_081124_081130.bc",
kernels .. "/DawnKernels/ck/dawn_sc_081201_081207.bc",
kernels .. "/DawnKernels/ck/dawn_sc_081208_081214.bc",
kernels .. "/DawnKernels/ck/dawn_sc_081215_081221.bc",
kernels .. "/DawnKernels/ck/dawn_sc_081222_081228.bc",
kernels .. "/DawnKernels/ck/dawn_sc_081229_090104.bc",
kernels .. "/DawnKernels/ck/dawn_sc_090105_090111.bc",
kernels .. "/DawnKernels/ck/dawn_sc_090112_090118.bc",
kernels .. "/DawnKernels/ck/dawn_sc_090119_090125.bc",
kernels .. "/DawnKernels/ck/dawn_sc_090126_090201.bc",
kernels .. "/DawnKernels/ck/dawn_sc_090202_090208.bc",
kernels .. "/DawnKernels/ck/dawn_sc_090209_090215.bc",
kernels .. "/DawnKernels/ck/dawn_sc_090216_090222.bc",
kernels .. "/DawnKernels/ck/dawn_sc_090223_090301.bc",
kernels .. "/DawnKernels/ck/dawn_sc_090302_090308.bc",
kernels .. "/DawnKernels/ck/dawn_sc_090309_090315.bc",
kernels .. "/DawnKernels/ck/dawn_sc_090316_090322.bc",
kernels .. "/DawnKernels/ck/dawn_sc_090323_090329.bc",
kernels .. "/DawnKernels/ck/dawn_sc_090330_090405.bc",
kernels .. "/DawnKernels/ck/dawn_sc_090406_090412.bc",
kernels .. "/DawnKernels/ck/dawn_sc_090413_090419.bc",
kernels .. "/DawnKernels/ck/dawn_sc_090420_090426.bc",
kernels .. "/DawnKernels/ck/dawn_sc_090427_090503.bc",
kernels .. "/DawnKernels/ck/dawn_sc_090504_090510.bc",
kernels .. "/DawnKernels/ck/dawn_sc_090511_090517.bc",
kernels .. "/DawnKernels/ck/dawn_sc_090518_090524.bc",
kernels .. "/DawnKernels/ck/dawn_sc_090525_090531.bc",
kernels .. "/DawnKernels/ck/dawn_sc_090601_090607.bc",
kernels .. "/DawnKernels/ck/dawn_sc_090608_090614.bc",
kernels .. "/DawnKernels/ck/dawn_sc_090615_090621.bc",
kernels .. "/DawnKernels/ck/dawn_sc_090622_090628.bc",
kernels .. "/DawnKernels/ck/dawn_sc_090629_090705.bc",
kernels .. "/DawnKernels/ck/dawn_sc_090706_090712.bc",
kernels .. "/DawnKernels/ck/dawn_sc_090713_090719.bc",
kernels .. "/DawnKernels/ck/dawn_sc_090720_090726.bc",
kernels .. "/DawnKernels/ck/dawn_sc_090727_090802.bc",
kernels .. "/DawnKernels/ck/dawn_sc_090803_090809.bc",
kernels .. "/DawnKernels/ck/dawn_sc_090810_090816.bc",
kernels .. "/DawnKernels/ck/dawn_sc_090817_090823.bc",
kernels .. "/DawnKernels/ck/dawn_sc_090824_090830.bc",
kernels .. "/DawnKernels/ck/dawn_sc_090831_090906.bc",
kernels .. "/DawnKernels/ck/dawn_sc_090907_090913.bc",
kernels .. "/DawnKernels/ck/dawn_sc_090914_090920.bc",
kernels .. "/DawnKernels/ck/dawn_sc_090921_090927.bc",
kernels .. "/DawnKernels/ck/dawn_sc_090928_091004.bc",
kernels .. "/DawnKernels/ck/dawn_sc_091005_091011.bc",
kernels .. "/DawnKernels/ck/dawn_sc_091012_091018.bc",
kernels .. "/DawnKernels/ck/dawn_sc_091019_091025.bc",
kernels .. "/DawnKernels/ck/dawn_sc_091026_091101.bc",
kernels .. "/DawnKernels/ck/dawn_sc_091102_091108.bc",
kernels .. "/DawnKernels/ck/dawn_sc_091109_091115.bc",
kernels .. "/DawnKernels/ck/dawn_sc_091116_091122.bc",
kernels .. "/DawnKernels/ck/dawn_sc_091123_091129.bc",
kernels .. "/DawnKernels/ck/dawn_sc_091130_091206.bc",
kernels .. "/DawnKernels/ck/dawn_sc_091207_091213.bc",
kernels .. "/DawnKernels/ck/dawn_sc_091214_091220.bc",
kernels .. "/DawnKernels/ck/dawn_sc_091221_091227.bc",
kernels .. "/DawnKernels/ck/dawn_sc_091228_100103.bc",
kernels .. "/DawnKernels/ck/dawn_sc_100104_100110_v2.bc",
kernels .. "/DawnKernels/ck/dawn_sc_100111_100117_v2.bc",--]]
-- kernels .. "/DawnKernels/ck/dawn_sc_100118_100124.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_100125_100131.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_100201_100207.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_100208_100214.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_100215_100221.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_100222_100228.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_100301_100307.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_100308_100314.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_100315_100321.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_100322_100328.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_100329_100404.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_100405_100411.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_100412_100418.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_100419_100425.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_100426_100502.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_100503_100509.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_100510_100516.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_100517_100523.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_100524_100530.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_100531_100606.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_100607_100613.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_100614_100620.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_100621_100627.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_100628_100704.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_100705_100711.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_100712_100718.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_100719_100725.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_100726_100801.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_100802_100808.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_100809_100815.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_100816_100822.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_100823_100829.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_100830_100905.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_100906_100912.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_100913_100919.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_100920_100926.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_100927_101003.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_101004_101010.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_101011_101017.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_101018_101024.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_101025_101031.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_101101_101107.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_101108_101114.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_101115_101121.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_101122_101128.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_101129_101205.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_101206_101212.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_101213_101219.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_101220_101226.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_101227_110102.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_110103_110109.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_110110_110116.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_110117_110123.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_110124_110130.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_110131_110206.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_110207_110213.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_110214_110220.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_110221_110227.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_110228_110306.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_110307_110313.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_110314_110320.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_110321_110327.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_110328_110403.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_110404_110410.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_110411_110417.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_110418_110424.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_110425_110501.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_110502_110508.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_110509_110515.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_110516_110522.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_110523_110529.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_110530_110605.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_110606_110612.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_110613_110619.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_110620_110626.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_110627_110703.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_110704_110710.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_110711_110717.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_110718_110724.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_110725_110731.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_110801_110807.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_110808_110814.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_110815_110821.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_110822_110828.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_110829_110904.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_110905_110911.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_110912_110918.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_110919_110925.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_110926_111002.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_111003_111009.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_111010_111016.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_111017_111023.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_111024_111030.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_111031_111106.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_111107_111113.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_111114_111120.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_111121_111127.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_111128_111204.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_111205_111211.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_111212_111218.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_111219_111225.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_111226_120101.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_120102_120108.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_120109_120115.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_120116_120122.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_120123_120129.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_120130_120205.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_120206_120212.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_120213_120219.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_120220_120226.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_120227_120304.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_120305_120311.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_120312_120318.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_120319_120325.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_120326_120401.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_120402_120408.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_120409_120415.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_120416_120422.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_120423_120429.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_120430_120506.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_120507_120513.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_120514_120520.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_120521_120527.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_120528_120603.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_120604_120610.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_120611_120617.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_120618_120624.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_120625_120701.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_120702_120708.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_120709_120715.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_120716_120722.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_120723_120729.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_120730_120805.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_120806_120812.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_120813_120819.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_120820_120826.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_120827_120902.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_120903_120909.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_120910_120916.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_f2_3942xxxxx.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_pred_da028b_00_eu.bc",
-- kernels .. "/DawnKernels/ck/dawn_sc_pred_dc041a_00.bc",
-- Solar array rotation kernels ~ 2gb
kernels .. "/DawnKernels/ck/dawn_sa_070927_070930.bc",
--[[kernels .. "/ck/dawn_sa_071001_071007.bc",
kernels .. "/DawnKernels/ck/dawn_sa_071008_071014.bc",
kernels .. "/DawnKernels/ck/dawn_sa_071015_071021.bc",
kernels .. "/DawnKernels/ck/dawn_sa_071022_071028_v2.bc",
kernels .. "/DawnKernels/ck/dawn_sa_071029_071104.bc",
kernels .. "/DawnKernels/ck/dawn_sa_071105_071111.bc",
kernels .. "/DawnKernels/ck/dawn_sa_071112_071118.bc",
kernels .. "/DawnKernels/ck/dawn_sa_071119_071125.bc",
kernels .. "/DawnKernels/ck/dawn_sa_071126_071202.bc",
kernels .. "/DawnKernels/ck/dawn_sa_071203_071209.bc",
kernels .. "/DawnKernels/ck/dawn_sa_071210_071216.bc",
kernels .. "/DawnKernels/ck/dawn_sa_071217_071223.bc",
kernels .. "/DawnKernels/ck/dawn_sa_071224_071230.bc",
kernels .. "/DawnKernels/ck/dawn_sa_071231_080106.bc",
kernels .. "/DawnKernels/ck/dawn_sa_080107_080113.bc",
kernels .. "/DawnKernels/ck/dawn_sa_080114_080120.bc",
kernels .. "/DawnKernels/ck/dawn_sa_080121_080127.bc",
kernels .. "/DawnKernels/ck/dawn_sa_080128_080203.bc",
kernels .. "/DawnKernels/ck/dawn_sa_080204_080210.bc",
kernels .. "/DawnKernels/ck/dawn_sa_080211_080217.bc",
kernels .. "/DawnKernels/ck/dawn_sa_080218_080224.bc",
kernels .. "/DawnKernels/ck/dawn_sa_080225_080302.bc",
kernels .. "/DawnKernels/ck/dawn_sa_080303_080309.bc",
kernels .. "/DawnKernels/ck/dawn_sa_080310_080316.bc",
kernels .. "/DawnKernels/ck/dawn_sa_080317_080323.bc",
kernels .. "/DawnKernels/ck/dawn_sa_080324_080330.bc",
kernels .. "/DawnKernels/ck/dawn_sa_080331_080406.bc",
kernels .. "/DawnKernels/ck/dawn_sa_080407_080413.bc",
kernels .. "/DawnKernels/ck/dawn_sa_080414_080420.bc",
kernels .. "/DawnKernels/ck/dawn_sa_080421_080427.bc",
kernels .. "/DawnKernels/ck/dawn_sa_080428_080504.bc",
kernels .. "/DawnKernels/ck/dawn_sa_080505_080511.bc",
kernels .. "/DawnKernels/ck/dawn_sa_080512_080518.bc",
kernels .. "/DawnKernels/ck/dawn_sa_080519_080525.bc",
kernels .. "/DawnKernels/ck/dawn_sa_080526_080601.bc",
kernels .. "/DawnKernels/ck/dawn_sa_080602_080608.bc",
kernels .. "/DawnKernels/ck/dawn_sa_080609_080615.bc",
kernels .. "/DawnKernels/ck/dawn_sa_080616_080622.bc",
kernels .. "/DawnKernels/ck/dawn_sa_080623_080629.bc",
kernels .. "/DawnKernels/ck/dawn_sa_080630_080706.bc",
kernels .. "/DawnKernels/ck/dawn_sa_080707_080713.bc",
kernels .. "/DawnKernels/ck/dawn_sa_080714_080720.bc",
kernels .. "/DawnKernels/ck/dawn_sa_080721_080727.bc",
kernels .. "/DawnKernels/ck/dawn_sa_080728_080803.bc",
kernels .. "/DawnKernels/ck/dawn_sa_080804_080810.bc",
kernels .. "/DawnKernels/ck/dawn_sa_080811_080817.bc",
kernels .. "/DawnKernels/ck/dawn_sa_080818_080824.bc",
kernels .. "/DawnKernels/ck/dawn_sa_080825_080831.bc",
kernels .. "/DawnKernels/ck/dawn_sa_080901_080907.bc",
kernels .. "/DawnKernels/ck/dawn_sa_080908_080914.bc",
kernels .. "/DawnKernels/ck/dawn_sa_080915_080921.bc",
kernels .. "/DawnKernels/ck/dawn_sa_080922_080928.bc",
kernels .. "/DawnKernels/ck/dawn_sa_080929_081005.bc",
kernels .. "/DawnKernels/ck/dawn_sa_081006_081012.bc",
kernels .. "/DawnKernels/ck/dawn_sa_081013_081019.bc",
kernels .. "/DawnKernels/ck/dawn_sa_081020_081026.bc",
kernels .. "/DawnKernels/ck/dawn_sa_081027_081102.bc",
kernels .. "/DawnKernels/ck/dawn_sa_081103_081109.bc",
kernels .. "/DawnKernels/ck/dawn_sa_081110_081116.bc",
kernels .. "/DawnKernels/ck/dawn_sa_081117_081123.bc",
kernels .. "/DawnKernels/ck/dawn_sa_081124_081130.bc",
kernels .. "/DawnKernels/ck/dawn_sa_081201_081207.bc",
kernels .. "/DawnKernels/ck/dawn_sa_081208_081214.bc",
kernels .. "/DawnKernels/ck/dawn_sa_081215_081221.bc",
kernels .. "/DawnKernels/ck/dawn_sa_081222_081228.bc",
kernels .. "/DawnKernels/ck/dawn_sa_081229_090104.bc",
kernels .. "/DawnKernels/ck/dawn_sa_090105_090111.bc",
kernels .. "/DawnKernels/ck/dawn_sa_090112_090118.bc",
kernels .. "/DawnKernels/ck/dawn_sa_090119_090125.bc",
kernels .. "/DawnKernels/ck/dawn_sa_090126_090201.bc",
kernels .. "/DawnKernels/ck/dawn_sa_090202_090208.bc",
kernels .. "/DawnKernels/ck/dawn_sa_090209_090215.bc",
kernels .. "/DawnKernels/ck/dawn_sa_090216_090222.bc",
kernels .. "/DawnKernels/ck/dawn_sa_090223_090301.bc",
kernels .. "/DawnKernels/ck/dawn_sa_090302_090308.bc",
kernels .. "/DawnKernels/ck/dawn_sa_090309_090315.bc",
kernels .. "/DawnKernels/ck/dawn_sa_090316_090322.bc",
kernels .. "/DawnKernels/ck/dawn_sa_090323_090329.bc",
kernels .. "/DawnKernels/ck/dawn_sa_090330_090405.bc",
kernels .. "/DawnKernels/ck/dawn_sa_090406_090412.bc",
kernels .. "/DawnKernels/ck/dawn_sa_090413_090419.bc",
kernels .. "/DawnKernels/ck/dawn_sa_090420_090426.bc",
kernels .. "/DawnKernels/ck/dawn_sa_090427_090503.bc",
kernels .. "/DawnKernels/ck/dawn_sa_090504_090510.bc",
kernels .. "/DawnKernels/ck/dawn_sa_090511_090517.bc",
kernels .. "/DawnKernels/ck/dawn_sa_090518_090524.bc",
kernels .. "/DawnKernels/ck/dawn_sa_090525_090531.bc",
kernels .. "/DawnKernels/ck/dawn_sa_090601_090607.bc",
kernels .. "/DawnKernels/ck/dawn_sa_090608_090614.bc",
kernels .. "/DawnKernels/ck/dawn_sa_090615_090621.bc",
kernels .. "/DawnKernels/ck/dawn_sa_090622_090628.bc",
kernels .. "/DawnKernels/ck/dawn_sa_090629_090705.bc",
kernels .. "/DawnKernels/ck/dawn_sa_090706_090712.bc",
kernels .. "/DawnKernels/ck/dawn_sa_090713_090719.bc",
kernels .. "/DawnKernels/ck/dawn_sa_090720_090726.bc",
kernels .. "/DawnKernels/ck/dawn_sa_090727_090802.bc",
kernels .. "/DawnKernels/ck/dawn_sa_090803_090809.bc",
kernels .. "/DawnKernels/ck/dawn_sa_090810_090816.bc",
kernels .. "/DawnKernels/ck/dawn_sa_090817_090823.bc",
kernels .. "/DawnKernels/ck/dawn_sa_090824_090830.bc",
kernels .. "/DawnKernels/ck/dawn_sa_090831_090906.bc",
kernels .. "/DawnKernels/ck/dawn_sa_090907_090913.bc",
kernels .. "/DawnKernels/ck/dawn_sa_090914_090920.bc",
kernels .. "/DawnKernels/ck/dawn_sa_090921_090927.bc",
kernels .. "/DawnKernels/ck/dawn_sa_090928_091004.bc",
kernels .. "/DawnKernels/ck/dawn_sa_091005_091011.bc",
kernels .. "/DawnKernels/ck/dawn_sa_091012_091018.bc",
kernels .. "/DawnKernels/ck/dawn_sa_091019_091025.bc",
kernels .. "/DawnKernels/ck/dawn_sa_091026_091101.bc",
kernels .. "/DawnKernels/ck/dawn_sa_091102_091108.bc",
kernels .. "/DawnKernels/ck/dawn_sa_091109_091115.bc",
kernels .. "/DawnKernels/ck/dawn_sa_091116_091122.bc",
kernels .. "/DawnKernels/ck/dawn_sa_091123_091129.bc",
kernels .. "/DawnKernels/ck/dawn_sa_091130_091206.bc",
kernels .. "/DawnKernels/ck/dawn_sa_091207_091213.bc",
kernels .. "/DawnKernels/ck/dawn_sa_091214_091220.bc",
kernels .. "/DawnKernels/ck/dawn_sa_091221_091227.bc",
kernels .. "/DawnKernels/ck/dawn_sa_091228_100103.bc",
kernels .. "/DawnKernels/ck/dawn_sa_100104_100110_v2.bc",
kernels .. "/DawnKernels/ck/dawn_sa_100111_100117_v2.bc",
kernels .. "/DawnKernels/ck/dawn_sa_100118_100124.bc",
kernels .. "/DawnKernels/ck/dawn_sa_100125_100131.bc",
kernels .. "/DawnKernels/ck/dawn_sa_100201_100207.bc",
kernels .. "/DawnKernels/ck/dawn_sa_100208_100214.bc",
kernels .. "/DawnKernels/ck/dawn_sa_100215_100221.bc",
kernels .. "/DawnKernels/ck/dawn_sa_100222_100228.bc",
kernels .. "/DawnKernels/ck/dawn_sa_100301_100307.bc",
kernels .. "/DawnKernels/ck/dawn_sa_100308_100314.bc",
kernels .. "/DawnKernels/ck/dawn_sa_100315_100321.bc",
kernels .. "/DawnKernels/ck/dawn_sa_100322_100328.bc",
kernels .. "/DawnKernels/ck/dawn_sa_100329_100404.bc",
kernels .. "/DawnKernels/ck/dawn_sa_100405_100411.bc",
kernels .. "/DawnKernels/ck/dawn_sa_100412_100418.bc",
kernels .. "/DawnKernels/ck/dawn_sa_100419_100425.bc",
kernels .. "/DawnKernels/ck/dawn_sa_100426_100502.bc",
kernels .. "/DawnKernels/ck/dawn_sa_100503_100509.bc",
kernels .. "/DawnKernels/ck/dawn_sa_100510_100516.bc",
kernels .. "/DawnKernels/ck/dawn_sa_100517_100523.bc",
kernels .. "/DawnKernels/ck/dawn_sa_100524_100530.bc",
kernels .. "/DawnKernels/ck/dawn_sa_100531_100606.bc",
kernels .. "/DawnKernels/ck/dawn_sa_100607_100613.bc",
kernels .. "/DawnKernels/ck/dawn_sa_100614_100620.bc",
kernels .. "/DawnKernels/ck/dawn_sa_100621_100627.bc",
kernels .. "/DawnKernels/ck/dawn_sa_100628_100704.bc",
kernels .. "/DawnKernels/ck/dawn_sa_100705_100711.bc",
kernels .. "/DawnKernels/ck/dawn_sa_100712_100718.bc",
kernels .. "/DawnKernels/ck/dawn_sa_100719_100725.bc",
kernels .. "/DawnKernels/ck/dawn_sa_100726_100801.bc",
kernels .. "/DawnKernels/ck/dawn_sa_100802_100808.bc",
kernels .. "/DawnKernels/ck/dawn_sa_100809_100815.bc",
kernels .. "/DawnKernels/ck/dawn_sa_100816_100822.bc",
kernels .. "/DawnKernels/ck/dawn_sa_100823_100829.bc",
kernels .. "/DawnKernels/ck/dawn_sa_100830_100905.bc",
kernels .. "/DawnKernels/ck/dawn_sa_100906_100912.bc",
kernels .. "/DawnKernels/ck/dawn_sa_100913_100919.bc",
kernels .. "/DawnKernels/ck/dawn_sa_100920_100926.bc",
kernels .. "/DawnKernels/ck/dawn_sa_100927_101003.bc",
kernels .. "/DawnKernels/ck/dawn_sa_101004_101010.bc",
kernels .. "/DawnKernels/ck/dawn_sa_101011_101017.bc", --]]
-- kernels .. "/DawnKernels/ck/dawn_sa_101018_101024.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_101025_101031.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_101101_101107.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_101108_101114.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_101115_101121.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_101122_101128.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_101129_101205.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_101206_101212.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_101213_101219.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_101220_101226.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_101227_110102.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_110103_110109.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_110110_110116.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_110117_110123.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_110124_110130.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_110131_110206.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_110207_110213.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_110214_110220.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_110221_110227.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_110228_110306.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_110307_110313.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_110314_110320.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_110321_110327.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_110328_110403.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_110404_110410.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_110411_110417.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_110418_110424.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_110425_110501.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_110502_110508.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_110509_110515.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_110516_110522.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_110523_110529.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_110530_110605.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_110606_110612.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_110613_110619.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_110620_110626.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_110627_110703.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_110704_110710.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_110711_110717.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_110718_110724.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_110725_110731.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_110801_110807.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_110808_110814.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_110815_110821.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_110822_110828.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_110829_110904.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_110905_110911.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_110912_110918.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_110919_110925.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_110926_111002.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_111003_111009.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_111010_111016.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_111017_111023.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_111024_111030.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_111031_111106.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_111107_111113.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_111114_111120.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_111121_111127.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_111128_111204.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_111205_111211.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_111212_111218.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_111219_111225.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_111226_120101.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_120102_120108.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_120109_120115.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_120116_120122.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_120123_120129.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_120130_120205.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_120206_120212.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_120213_120219.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_120220_120226.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_120227_120304.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_120305_120311.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_120312_120318.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_120319_120325.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_120326_120401.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_120402_120408.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_120409_120415.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_120416_120422.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_120423_120429.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_120430_120506.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_120507_120513.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_120514_120520.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_120521_120527.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_120528_120603.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_120604_120610.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_120611_120617.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_120618_120624.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_120625_120701.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_120702_120708.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_120709_120715.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_120716_120722.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_120723_120729.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_120730_120805.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_120806_120812.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_120813_120819.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_120820_120826.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_120827_120902.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_120903_120909.bc",
-- kernels .. "/DawnKernels/ck/dawn_sa_120910_120916.bc",
}
local Dawn = {
Name = "Dawn",
Parent = transforms.SolarSystemBarycenter.Name,
Transform = {
Translation = {
Type = "SpiceTranslation",
Target = "DAWN",
Observer = "SUN",
Kernels = KernelFiles
},
Rotation = {
Type = "SpiceRotation",
SourceFrame = "DAWN_SPACECRAFT",
DestinationFrame = "GALACTIC",
Kernels = KernelFiles
}
},
Renderable = {
Type = "RenderableModel",
Body = "DAWN",
Geometry = {
Type = "MultiModelGeometry",
GeometryFile = models .. "/mainbodydawn.obj"
},
ColorTexture = textures .. "/gray.png"
},
GuiPath = "/Solar System/Missions/Dawn"
}
-- Dawn Solar Array module 1
local DawnSolarArray1 = {
Name = "DawnSolar1",
Parent = Dawn.Name,
Transformation = {
Rotation = {
Type = "SpiceRotation",
SourceFrame = "DAWN_SA-Y",
DestinationFrame = "DAWN_SPACECRAFT"
}
},
Renderable = {
Type = "RenderableModel",
Body = "DAWN",
Geometry = {
Type = "MultiModelGeometry",
GeometryFile = models .. "/solarpanelleft.obj"
},
ColorTexture = textures .. "/gray.png"
},
GuiPath = "/Solar System/Missions/Dawn"
}
-- Dawn Solar Array module 2
local DawnSolarArray2 = {
Name = "DawnSolar2",
Parent = Dawn.Name,
Transformation = {
Rotation = {
Type = "SpiceRotation",
SourceFrame = "DAWN_SA+Y",
DestinationFrame = "DAWN_SPACECRAFT"
}
},
Renderable = {
Type = "RenderableModel",
Body = "DAWN",
Geometry = {
Type = "MultiModelGeometry",
GeometryFile = models .. "/solarpanelright.obj"
},
ColorTexture = textures .. "/gray.png"
},
GuiPath = "/Solar System/Missions/Dawn"
}
local DawnTrail = {
Name = "DawnTrail",
Parent = transforms.SolarSystemBarycenter.Name,
Renderable = {
Type = "RenderableTrailTrajectory",
Translation = {
Type = "SpiceTranslation",
Target = "DAWN",
Observer = "SUN"
},
Color = { 1.0, 0.8, 0.4 },
ShowFullTrail = true,
StartTime = "2007 SEP 26 13:28:00",
EndTime = "2012 SEP 12 12:00:00",
PointSize = 5,
SampleInterval = 3600,
TimeStampSubsampleFactor = 4,
EnableFade = false,
Rendering = "Lines+Points"
},
GuiPath = "/Solar System/Missions/Dawn"
}
-- DawnFov 1
local DawnFramingCamera1 = {
Name = "Dawn_framing_camera_1",
Parent = Dawn.Name,
Renderable = {
Type = "RenderableFov",
Body = "DAWN",
Frame = "DAWN_SPACECRAFT",
Color = { 0.8, 0.7, 0.7 },
Instrument = {
Name = "DAWN_FC1",
Method = "ELLIPSOID",
Aberration = "NONE"
},
PotentialTargets = { "VESTA", "CERES" }
},
GuiPath = "/Solar System/Missions/Dawn"
}
local DawnFramingCamera2 = {
Name = "Dawn_framing_camera_2",
Parent = Dawn.Name,
Renderable = {
Type = "RenderableFov",
Body = "DAWN",
Frame = "DAWN_SPACECRAFT",
Color = { 0.8, 0.7, 0.7 },
Instrument = {
Name = "DAWN_FC2",
Method = "ELLIPSOID",
Aberration = "NONE"
},
PotentialTargets = { "VESTA", "CERES" }
},
GuiPath = "/Solar System/Missions/Dawn"
}
assetHelper.registerSceneGraphNodesAndExport(asset, {
Dawn,
DawnSolarArray1,
DawnSolarArray2,
DawnTrail,
DawnFramingCamera1,
DawnFramingCamera2
})

View File

@@ -0,0 +1,8 @@
local Kernels = asset.syncedResource({
Name = "Dawn Kernels",
Type = "TorrentSynchronization",
Identifier = "dawn_kernels",
Magnet = "magnet:?xt=urn:btih:31997fff4bffa6959c7144d24a13f5fad4604fa6&dn=DawnKernels"
})
asset.export("Kernels", Kernels)

View File

@@ -0,0 +1,134 @@
local assetHelper = asset.require('util/asset_helper')
local transforms = asset.require('scene/solarsystem/sun/transforms')
local kernels = asset.require('./dawn_kernels').Kernels
local textures = asset.syncedResource({
Name = "Vesta Textures",
Type = "HttpSynchronization",
Identifier = "vesta_textures",
Version = 1
})
local images = asset.syncedResource({
Name = "Vesta Images",
Type = "HttpSynchronization",
Identifier = "vesta_images",
Version = 1
})
local models = asset.syncedResource({
Name = "Vesta Models",
Type = "TorrentSynchronization",
Identifier = "vesta_comet",
Magnet = "magnet:?xt=urn:btih:4250685907FAEC6AE242485AB3E2018DE0377559&dn=VestaComet"
})
local Vesta = {
Name = "Vesta",
Parent = transforms.SolarSystemBarycenter.Name,
Transform = {
Translation = {
Type = "SpiceTranslation",
Target = "VESTA",
Observer = "SUN",
Kernels = {
--kernels .. "/pck/dawn_vesta_v06.tpc",
kernels .. "/DawnKernels/spk/sb_vesta_071107.bsp"
}
},
Rotation = {
Type = "SpiceRotation",
SourceFrame = "IAU_VESTA",
DestinationFrame = "GALACTIC"
}
},
Renderable = {
Type = "RenderableModelProjection",
Geometry = {
Type = "MultiModelGeometry",
GeometryFile = models .. "/VestaComet/VestaComet_5000.obj"
},
ColorTexture = textures .. "/dummy.jpg",
Projection = {
Sequence = images,
SequenceType = "image-sequence",
Observer = "DAWN",
Target = "VESTA",
Aberration = "NONE",
DataInputTranslation = {
Instrument = {
-- FC1 = {
-- DetectorType = "Camera",
-- Spice = { "DAWN_FC1" },
-- },
FC2 = {
DetectorType = "Camera",
Spice = { "DAWN_FC2" }
}
},
Target = {
Read = {
"TARGET_NAME",
"INSTRUMENT_HOST_NAME",
"INSTRUMENT_ID",
"START_TIME",
"STOP_TIME",
--"DETECTOR_TYPE",
--"SEQUENCE_ID"
},
Convert = {
VESTA = { "VESTA" },
DAWN = { "DAWN" },
--FRAMINGCAMERA1 = { "DAWN_FC1" },
FRAMINGCAMERA2 = { "DAWN_FC2" },
--FC1 = { "DAWN_FC1" },
FC2 = { "DAWN_FC2" }
}
}
},
Instrument = {
Name = "DAWN_FC2",
Method = "ELLIPSOID",
Aberration = "NONE",
Fovy = 5.46,
Aspect = 1
},
--[[ Instrument = {
Name = "DAWN_FC1",
Method = "ELLIPSOID",
Aberration = "NONE",
Fovy = 5.46,
Aspect = 1,
Near = 0.2,
Far = 10000
},--]]
PotentialTargets = { "VESTA" }
}
},
GuiPath = "/Solar System/Asteroid Belt/Vesta"
}
local VestaTrail = {
Name = "VestaTrail",
Parent = transforms.SolarSystemBarycenter.Name,
Renderable = {
Type = "RenderableTrailOrbit",
Translation = {
Type = "SpiceTranslation",
Target = "VESTA",
Observer = "SUN"
},
Color = { 0.7, 0.8, 0.7 },
StartTime = "2007 JUL 20 12:00:00",
EndTime = "2018 JAN 22 12:00:00",
Period = 1325.0,
Resolution = 3600 * 24
},
GuiPath = "/Solar System/Asteroid Belt/Vesta"
}
assetHelper.registerSceneGraphNodesAndExport(asset, { Vesta, VestaTrail })

View File

@@ -0,0 +1,188 @@
local assetHelper = asset.require('util/asset_helper')
local transforms = asset.require('scene/solarsystem/planets/jupiter/transforms')
local textures = asset.syncedResource({
Name = "Juno Textures",
Type = "HttpSynchronization",
Identifier = "juno_textures",
Version = 1
})
local model = asset.syncedResource({
Name = "Juno Model",
Type = "HttpSynchronization",
Identifier = "juno_model",
Version = 1
})
local kernels = asset.syncedResource({
Name = "Juno Kernels",
Type = "TorrentSynchronization",
Identifier = "juno_kernels",
Magnet = "magnet:?xt=urn:btih:5A14C9E647C689A54BAB7A7DAEB5F312E8199C91&dn=Juno&tr=udp%3a%2f%2ftracker.openbittorrent.com%3a80%2fannounce&tr=udp%3a%2f%2ftracker.opentrackr.org%3a1337%2fannounce"
})
local JunoKernels = {
kernels .. "/Juno/JNO_SCLKSCET.00039.tsc",
kernels .. "/Juno/juno_jade_v00.ti",
kernels .. "/Juno/juno_jedi_v00.ti",
kernels .. "/Juno/juno_jiram_v01.ti",
kernels .. "/Juno/juno_junocam_v00.ti",
kernels .. "/Juno/juno_mag_v00.ti",
kernels .. "/Juno/juno_mwr_v01.ti",
kernels .. "/Juno/juno_struct_v01.ti",
kernels .. "/Juno/juno_uvs_v00.ti",
kernels .. "/Juno/juno_v08.tf",
kernels .. "/Juno/juno_waves_v00.ti",
kernels .. "/Juno/juno_mwr_v01.ti",
kernels .. "/Juno/spk_merge_110805_171017_130515.bsp",
kernels .. "/Juno/ck/juno_sc_prl_110930_111028_jc003c01_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_111028_111125_jc004b00_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_111125_111223_jc005b00_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_111223_120127_jc006a02_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_120127_120217_jc007a00_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_120217_120316_jc008b00_v02.bc",
kernels .. "/Juno/ck/juno_sc_prl_120316_120413_jc009a00_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_120413_120511_jc010a04_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_120511_120608_jc011a01_v02.bc",
kernels .. "/Juno/ck/juno_sc_prl_120608_120706_jc012b01_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_120706_120802_jc013a01_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_120802_120824_jc014b01_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_120824_120928_jc015m00_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_120919_120928_jc015o00_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_120928_121026_jc016c03_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_121026_121123_jc017a01_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_121123_121221_jc018b01_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_121221_130118_jc019a01_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_130118_130215_jc020b01_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_130315_130412_jc022b01_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_130412_130510_jc023b03_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_130510_130607_jc024a01_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_130607_130705_jc025a00_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_130705_130802_jc026a01_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_130726_131020_jx024a02_EFB_v03.bc",
kernels .. "/Juno/ck/juno_sc_prl_130802_130830_jc027a02_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_130830_130927_jc028a01_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_130926_131025_jc029a00_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_130927_131025_jc029c01_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_131022_131025_jc029f00_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_131025_131122_jc030b04_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_131122_131220_jc031b01_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_131220_140124_jc032a01_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_140124_140214_jc033a01_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_140214_140314_jc034b01_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_140314_140411_jc035a01_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_140411_140509_jc036b01_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_140509_140606_jc037b02_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_140606_140704_jc038a01_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_140704_140801_jc039b01_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_140801_140829_jc040a01_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_140829_140926_jc041a01_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_140926_141024_jc042a01_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_141024_141121_jc043a01_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_141105_141121_jc043m01_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_141107_141121_jc043s01_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_141121_141219_jc044a01_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_141219_150123_jc045a01_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_150123_150213_jc046a01_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_150213_150313_jc047a01_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_150312_150409_jc048a01_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_150410_150508_jc049a01_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_150508_150605_jc050a01_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_150605_150703_jc051a01_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_150703_150731_jc052a01_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_150731_150828_jc053a01_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_150805_150828_jc053m00_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_150807_150828_jc053s00_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_150828_150924_jc054a00_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_150924_151023_jc055a00_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_151023_151120_jc056a00_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_151120_151218_jc057a00_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_151218_160115_jc058a00_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_160115_160212_jc059a00_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_160212_160311_jc060a00_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_160311_160408_jc061a00_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_160408_160506_jc062a00_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_160506_160603_jc063a00_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_160603_160630_jc064a00_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_160708_160729_jm0001rp_v02.bc",
kernels .. "/Juno/ck/juno_sc_prl_160729_160826_jm0002rp_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_160827_160920_jm0003a00_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_160924_161019_jm0004a00_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_161014_161115_jm0005a00_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_161022_161115_jm0005b00_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_161115_161213_jx0405rp_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_161210_170115_jm0031a00_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_170115_170201_jm0032a00_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_170201_170309_jm0041a00_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_170309_170326_jm0042rp_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_170326_170427_jm0051rp_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_170427_170518_jm0052rp_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_170518_170615_jm0061a00_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_170615_170710_jm0062a00_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_170710_170805_jm0071a00_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_170805_170831_jm0072a00_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_170831_170927_jm0081a00_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_170927_171023_jm0082a00_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_171023_171030_jm0091a00_v01.bc",
kernels .. "/Juno/ck/juno_sc_prl_171023_171030_jm0091a00_v01.bc"
}
local RotationMatrix = {
0, 1, 0,
0, 0, 1,
1, 0, 0
}
local Juno = {
Name = "Juno",
Parent = transforms.JupiterBarycenter.Name,
Transform = {
Translation = {
Type = "SpiceTranslation",
Target = "JUNO",
Observer = "JUPITER BARYCENTER",
Kernels = JunoKernels
},
Rotation = {
Type = "SpiceRotation",
SourceFrame = "JUNO_SPACECRAFT",
DestinationFrame = "GALACTIC",
Kernels = JunoKernels
}
},
Renderable = {
Type = "RenderableModel",
Geometry = {
Type = "MultiModelGeometry",
GeometryFile = model .. "/Juno.obj"
},
ColorTexture = textures .. "/gray.png",
ModelTransform = RotationMatrix
},
GuiName = "/Solar System/Missions/Juno"
}
local JunoTrail = {
Name = "JunoTrail",
Parent = "JupiterBarycenter",
Renderable = {
Type = "RenderableTrailTrajectory",
Translation = {
Type = "SpiceTranslation",
Target = "JUNO",
Observer = "JUPITER BARYCENTER",
Kernels = JunoKernels
},
Color = { 0.70, 0.50, 0.20 },
StartTime = "2016 JUL 01",
EndTime = "2016 DEC 13",
SampleInterval = 2
},
GuiName = "/Solar System/Missions/Juno"
}
assetHelper.registerSceneGraphNodesAndExport(asset, { Juno, JunoTrail })

View File

@@ -0,0 +1,129 @@
local assetHelper = asset.require('util/asset_helper')
local transforms = asset.require('./transforms')
local sunTransforms = asset.require('scene/solarsystem/sun/transforms')
local kernels = asset.require('./kernels')
local textures = asset.syncedResource({
Name = "Charon Textures",
Type = "HttpSynchronization",
Identifier = "charon_textures",
Version = 3
})
local charonRadius = 6.035E5
local Charon = {
Name = "Charon",
Parent = transforms.PlutoBarycenter.Name,
Transform = {
Translation = {
Type = "SpiceTranslation",
Target = "CHARON",
Observer = "PLUTO BARYCENTER"
},
Rotation = {
Type = "SpiceRotation",
SourceFrame = "IAU_CHARON",
DestinationFrame = "GALACTIC"
}
},
Renderable = {
Type = "RenderablePlanetProjection",
Geometry = {
Type = "SimpleSphere",
Radius = charonRadius,
Segments = 350
},
ColorTexturePaths = {
textures .. "/NH_Charon_mosaic.png",
textures .. "/NH_Charon_mosaic_8192.png"
},
HeightTexturePaths = {
textures .. "/NH_Charon_DTM.png",
textures .. "/NH_Charon_DTM_8192.png"
},
Projection = {
Observer = "NEW HORIZONS",
Target = "CHARON",
Aberration = "NONE",
AspectRatio = 2,
Instrument = {
Name = "NH_LORRI",
Method = "ELLIPSOID",
Aberration = "NONE",
Fovy = 0.2907,
Aspect = 1,
Near = 0.2,
Far = 10000
},
PotentialTargets = {
"PLUTO",
"CHARON"
}
}
},
GuiPath = "/Solar System/Dwarf Planets/Pluto"
}
local CharonText = {
Name = "CharonText",
Parent = Charon.Name,
Transform = {
Translation = {
Type = "StaticTranslation",
Position = {0, -1000000.0, 0}
}
},
Renderable = {
Type = "RenderablePlane",
Size = 10^6.3,
Origin = "Center",
Billboard = true,
Texture = textures .. "/Charon-Text.png",
BlendMode = "Additive"
},
GuiPath = "/Solar System/Dwarf Planets/Pluto"
}
local CharonShadow = {
Name = "CharonShadow",
Parent = Charon.Name,
Renderable = {
Type = "RenderableShadowCylinder",
TerminatorType = "PENUMBRAL",
LightSource = "SUN",
Observer = "NEW HORIZONS",
Body = "CHARON",
BodyFrame = "IAU_CHARON",
Aberration = "NONE"
},
GuiPath = "/Solar System/Dwarf Planets/Pluto"
}
local CharonTrail = {
Name = "CharonTrail",
Parent = transforms.PlutoBarycenter.Name,
Renderable = {
Type = "RenderableTrailOrbit",
Translation = {
Type = "SpiceTranslation",
Target = "CHARON",
Observer = "PLUTO BARYCENTER"
},
Color = { 0.00, 0.62, 1.00 },
Period = 6.38725,
Resolution = 1000
},
GuiPath = "/Solar System/Dwarf Planets/Pluto"
}
assetHelper.registerSceneGraphNodesAndExport(asset, {
Charon,
CharonText,
CharonShadow,
CharonTrail
})

View File

@@ -0,0 +1,351 @@
local assetHelper = asset.require('util/asset_helper')
local transforms = asset.require('./transforms')
local LorriOffset = { -6.626, -4.1, -3.23 }
local RalphOffset = { -6.9, -4.6, 8.7 }
local AliceOffset = { -7.9, -1.7, 8.3 }
local RexOffset = { 0, 0, 0 }
local Lorri = {
Name = "NH_LORRI",
Parent = transforms.NewHorizonsPosition.Name,
Renderable = {
Type = "RenderableFov",
Body = "NEW HORIZONS",
Frame = "NH_SPACECRAFT",
Color = { 0.8, 0.7, 0.7 },
Instrument = {
Name = "NH_LORRI",
Aberration = "NONE"
},
PotentialTargets = {
"Pluto",
"Charon",
-- "Jupiter", "Io", "Europa", "Ganymede", "Callisto"
}
},
Transform = {
Translation = {
Type = "StaticTranslation",
Position = LorriOffset
}
},
GuiPath = "/Solar System/Missions/New Horizons"
}
local RalphLeisa = {
Name = "NH_RALPH_LEISA",
Parent = transforms.NewHorizonsPosition.Name,
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
}
},
GuiPath = "/Solar System/Missions/New Horizons"
}
local RalphMvicPan1 = {
Name = "NH_RALPH_MVIC_PAN1",
Parent = transforms.NewHorizonsPosition.Name,
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"
}
local RalphMvicPan2 = {
Name = "NH_RALPH_MVIC_PAN2",
Parent = transforms.NewHorizonsPosition.Name,
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"
}
local RalphMvicRed = {
Name = "NH_RALPH_MVIC_RED",
Parent = transforms.NewHorizonsPosition.Name,
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"
}
local RalphMvicBlue = {
Name = "NH_RALPH_MVIC_BLUE",
Parent = transforms.NewHorizonsPosition.Name,
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"
}
local RalphMvicFt = {
Name = "NH_RALPH_MVIC_FT",
Parent = transforms.NewHorizonsPosition.Name,
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"
}
local RalphMvicMethane = {
Name = "NH_RALPH_MVIC_METHANE",
Parent = transforms.NewHorizonsPosition.Name,
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"
}
local RalphMvicNir = {
Name = "NH_RALPH_MVIC_NIR",
Parent = transforms.NewHorizonsPosition.Name,
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"
}
local AliceAirglow = {
Name = "NH_ALICE_AIRGLOW",
Parent = transforms.NewHorizonsPosition.Name,
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"
}
local AliceSoc = {
Name = "NH_ALICE_SOC",
Parent = transforms.NewHorizonsPosition.Name,
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"
}
local Rex = {
Name = "NH_REX",
Parent = transforms.NewHorizonsPosition.Name,
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"
}
assetHelper.registerSceneGraphNodesAndExport(asset, {
Lorri,
RalphLeisa,
RalphMvicPan1,
RalphMvicPan2,
RalphMvicRed,
RalphMvicBlue,
RalphMvicFt,
RalphMvicMethane,
RalphMvicNir,
AliceAirglow,
AliceSoc,
Rex
})

View File

@@ -0,0 +1,88 @@
local assetHelper = asset.require('util/asset_helper')
local transforms = asset.require('./transforms')
local kernels = asset.require('./kernels').Kernels
local textures = asset.syncedResource({
Name = "Hydra Textures",
Type = "HttpSynchronization",
Identifier = "hydra_textures",
Version = 1
})
local Hydra = {
Name = "Hydra",
Parent = transforms.PlutoBarycenter.Name,
Transform = {
Translation = {
Type = "SpiceTranslation",
Target = "HYDRA",
Observer = "PLUTO BARYCENTER",
Kernels = kernels .. "/new_horizons/spk/NavSE_plu047_od122.bsp"
},
Rotation = {
Type = "SpiceRotation",
SourceFrame = "IAU_HYDRA",
DestinationFrame = "GALACTIC"
},
},
Renderable = {
Type = "RenderablePlanet",
Frame = "IAU_PLUTO",
Body = "HYDRA",
Radius = hydra_radius,
Geometry = {
Type = "SimpleSphere",
Radius = 0.53E5,
Segments = 100
},
ColorTexture = textures .. "/gray.jpg"
},
GuiPath = "/Solar System/Dwarf Planets/Pluto"
}
local HydraText = {
Name = "HydraText",
Parent = Hydra.Name,
Transform = {
Translation = {
Type = "StaticTranslation",
Position = { 1000000, 0, 1000000 },
},
},
Renderable = {
Type = "RenderablePlane",
Size = 10.0^6.3,
Origin = "Center",
Billboard = true,
Texture = textures .. "/Hydra-Text.png",
BlendMode = "Additive"
},
GuiPath = "/Solar System/Dwarf Planets/Pluto"
}
local HydraTrail = {
Name = "HydraTrail",
Parent = transforms.PlutoBarycenter.Name,
Renderable = {
Type = "RenderableTrailOrbit",
Translation = {
Type = "SpiceTranslation",
Target = "HYDRA",
Observer = "PLUTO BARYCENTER",
},
Color = { 0.00, 0.62, 1.00 },
Period = 38.20177,
Resolution = 1000
},
GuiPath = "/Solar System/Dwarf Planets/Pluto"
}
assetHelper.registerSceneGraphNodesAndExport(asset, {
Hydra,
HydraText,
HydraTrail
})

View File

@@ -0,0 +1,84 @@
local assetHelper = asset.require('util/asset_helper')
local transforms = asset.require('./transforms')
local kernels = asset.require('./kernels')
local textures = asset.syncedResource({
Name = "Kerberos Textures",
Type = "HttpSynchronization",
Identifier = "kerberos_textures",
Version = 1
})
local Kerberos = {
Name = "Kerberos",
Parent = transforms.PlutoBarycenter.Name,
Transform = {
Translation = {
Type = "SpiceTranslation",
Target = "KERBEROS",
Observer = "PLUTO BARYCENTER",
Kernels = kernels.Kernels .. "/new_horizons/spk/NavSE_plu047_od122.bsp"
},
Rotation = {
Type = "SpiceRotation",
SourceFrame = "IAU_KERBEROS",
DestinationFrame = "GALACTIC"
}
},
Renderable = {
Type = "RenderablePlanet",
Frame = "IAU_PLUTO",
Body = "KERBEROS",
Geometry = {
Type = "SimpleSphere",
Radius = 0.1E5,
Segments = 100
},
ColorTexture = textures .. "/gray.jpg"
},
GuiPath = "/Solar System/Dwarf Planets/Pluto"
}
local KerberosText = {
Name = "KerberosText",
Parent = Kerberos.Name,
Transform = {
Translation = {
Type = "StaticTranslation",
Position = { 1000000.0, 0, 1000000.0 }
},
},
Renderable = {
Type = "RenderablePlane",
Size = 10^6.3,
Origin = "Center",
Billboard = true,
Texture = textures .. "/Kerberos-Text.png"
},
GuiPath = "/Solar System/Dwarf Planets/Pluto"
}
local KerberosTrail = {
Name = "KerberosTrail",
Parent = transforms.PlutoBarycenter.Name,
Renderable = {
Type = "RenderableTrailOrbit",
Translation = {
Type = "SpiceTranslation",
Target = "KERBEROS",
Observer = "PLUTO BARYCENTER"
},
Color = { 0.00, 0.62, 1.00 },
Period = 32.16756,
Resolution = 1000
},
GuiPath = "/Solar System/Dwarf Planets/Pluto"
}
assetHelper.registerSceneGraphNodesAndExport(asset, {
Kerberos,
KerberosText,
KerberosTrail
})

View File

@@ -0,0 +1,46 @@
local Kernels = asset.syncedResource({
Name = "New Horizons Kernels",
Type = "TorrentSynchronization",
Identifier = "newhorizons_kernels",
Magnet = "magnet:?xt=urn:btih:4AF38BDD42C5B29A0EF1CE4AB274CD91C017B8CC&dn=new_horizons&tr=udp%3a%2f%2ftracker.ccc.de%3a80%2fannounce&tr=udp%3a%2f%2ftracker.openbittorrent.com%3a80%2fannounce&tr=udp%3a%2f%2ftracker.opentrackr.org%3a1337%2fannounce"
})
local NewHorizonsKernels = {
Kernels .. "/new_horizons/spk/nh_pred_20141201_20190301_od122.bsp",
Kernels .. "/new_horizons/spk/NavSE_plu047_od122.bsp",
Kernels .. "/new_horizons/spk/NavPE_de433_od122.bsp",
Kernels .. "/new_horizons/ck/nh_scispi_2015_pred.bc",
Kernels .. "/new_horizons/ck/nh_scispi_2015_recon.bc",
Kernels .. "/new_horizons/ck/nh_lorri_wcs.bc",
Kernels .. "/new_horizons/smithed_pc_and_sp/PLU_LORRI_ALL_161216.bc",
Kernels .. "/new_horizons/sclk/new-horizons_1121.tsc",
Kernels .. "/new_horizons/pck/nh_targets_v001.tpc",
Kernels .. "/new_horizons/pck/nh_pcnh_005.tpc",
Kernels .. "/new_horizons/fk/nh_v220.tf",
Kernels .. "/new_horizons/ik/nh_allinstruments_v002.ti",
Kernels .. "/new_horizons/ik/nh_alice_v200.ti",
Kernels .. "/new_horizons/ik/nh_lorri_v201.ti",
Kernels .. "/new_horizons/ik/nh_pepssi_v110.ti",
Kernels .. "/new_horizons/ik/nh_ralph_v100.ti",
Kernels .. "/new_horizons/ik/nh_rex_v100.ti",
Kernels .. "/new_horizons/ik/nh_sdc_v101.ti",
Kernels .. "/new_horizons/ik/nh_swap_v100.ti",
Kernels .. "/new_horizons/ik/nh_astr_v000.ti",
Kernels .. "/new_horizons/ik/nh_fss_v000.ti",
Kernels .. "/new_horizons/fk/nh_soc_misc_v001.tf",
Kernels .. "/new_horizons/spk/nh_stars.bsp",
}
local PlutoKernels = {
Kernels .. "/new_horizons/spk/NavPE_de433_od122.bsp",
Kernels .. "/new_horizons/spk/NavSE_plu047_od122.bsp"
}
asset.export("Kernels", Kernels)
asset.export("NewHorizonsKernels", NewHorizonsKernels)
asset.export("PlutoKernels", PlutoKernels)

View File

@@ -0,0 +1,28 @@
local assetHelper = asset.require('util/asset_helper')
local sunTransforms = asset.require('scene/solarsystem/sun/transforms')
local transforms = asset.require('./transforms')
local NewHorizonsModel = asset.require('./model')
local textures = NewHorizonsModel.NewHorizonsTextures
local models = NewHorizonsModel.NewHorizonsModels
local Labels = {
Name = "Labels",
Parent = NewHorizonsModel.NewHorizons.Name,
Renderable = {
Type = "RenderableModel",
Body = "NEW HORIZONS",
Geometry = {
Type = "MultiModelGeometry",
GeometryFile = models .. "/Labels.obj"
},
ColorTexture = textures .. "/labels.png"
},
GuiPath = "/Solar System/Missions/New Horizons"
}
assetHelper.registerSceneGraphNodesAndExport(asset, { Labels })

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