diff --git a/.clang_tidy b/.clang_tidy new file mode 100644 index 0000000000..60ff8d9752 --- /dev/null +++ b/.clang_tidy @@ -0,0 +1,85 @@ +Checks: >- + -*, + bugprone-*, + -bugprone-argument-comment, + -bugprone-easily-swappable-parameters, + -bugprone-implicit-widening-of-multiplication-result, + -bugprone-narrowing-conversions, + -bugprone-suspicious-include, + -bugprone-switch-missing-default-case, + -bugprone-unchecked-optional-access, + clang-analyzer-*, + -clang-analyzer-apiModeling*, + -clang-analyzer-osx*, + -clang-analyzer-security.FloatLoopCounter, + -clang-analyzer-webkit*, + cppcoreguidelines-*, + -cppcoreguidelines-avoid-do-while, + -cppcoreguidelines-avoid-magic-numbers, + -cppcoreguidelines-avoid-non-const-global-variables, + -cppcoreguidelines-narrowing-conversions, + -cppcoreguidelines-no-malloc, + -cppcoreguidelines-owning-memory, + -cppcoreguidelines-pro-bounds-array-to-pointer-decay, + -cppcoreguidelines-pro-bounds-constant-array-index, + -cppcoreguidelines-pro-bounds-pointer-arithmetic, + -cppcoreguidelines-pro-type-member-init, + -cppcoreguidelines-pro-type-reinterpret-cast, + -cppcoreguidelines-pro-type-static-cast-downcast, + -cppcoreguidelines-pro-type-union-access, + -cppcoreguidelines-pro-type-vararg, + google-*, + -google-objc-*, + -google-build-using-namespace, + -google-default-arguments, + -google-readability-casting, + -google-readability-function-size, + -google-readability-namespace-comments, + -google-explicit-constructor, + -google-runtime-int, + llvm-*, + -llvm-else-after-return, + -llvm-include-order, + -llvm-qualified-auto, + misc-*, + -misc-include-cleaner, + -misc-no-recursion, + modernize-*, + -modernize-raw-string-literal, + -modernize-return-braced-init-list, + -modernize-use-trailing-return-type, + -modernize-use-auto, + performance-*, + -performance-no-int-to-ptr, + readability-*, + -readability-avoid-unconditional-preprocessor-if, + -readability-else-after-return, + -readability-function-cognitive-complexity, + -readability-identifier-length, + -readability-implicit-bool-conversion, + -readability-magic-numbers, + -readability-named-parameter, + -readability-uppercase-literal-suffix, + -readability-use-anyofallof + +CheckOptions: + - key: bugprone-assert-side-effect.AssertMacros + value: ghoul_assert,ghoul_precondition + - key: cppcoreguidelines-rvalue-reference-param-not-moved.AllowPartialMove + value: True + - key: misc-non-private-member-variables-in-classes.IgnoreClassesWithAllMemberVariablesBeingPublic + value: True + - key: modernize-loop-convert.UseCxx20ReverseRanges + value: False + - key: performance-move-const-arg.CheckTriviallyCopyableMove + value: False + - key: performance-unnecessary-value-param.AllowedTypes + value: glm::vec2;glm::vec3;glm::vec4;glm::ivec2;glm::ivec3;glm::ivec4;glm::dvec2;glm::dvec3;glm::dvec4;glm::uvec2;glm::uvec3;glm::uvec4;glm::mat2;glm::mat3;glm::mat4;glm::mat[2-4]x[2-4];glm::dmat2;glm::dmat3;glm::dmat4;glm::dmat[2-4]x[2-4];glm::quat;glm::dquat + - key: readability-inconsistent-declaration-parameter-name.Strict + value: True + - key: readability-qualified-auto.AddConstToQualified + value: False + - key: readability-simplify-boolean-expr.ChainedConditionalReturn + value: True + - key: readability-simplify-boolean-expr.ChainedConditionalAssignment + value: True diff --git a/.editorconfig b/.editorconfig index ea67455ec4..5a1c0f0d3c 100644 --- a/.editorconfig +++ b/.editorconfig @@ -9,3 +9,7 @@ charset = utf-8 indent_style = space indent_size = 4 insert_final_newline = true +trim_trailing_whitespace = true + +[data/**.asset] +indent_size = 2 diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 2366bc69ea..bf5141c61e 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -1,4 +1,10 @@ -## How to contribute -The easiest way to contribute is through a separate fork of the repository and submitting a pull-request. One of the core developers will judge the pull request and integrate it into the main `master` branch. Preferably, there is an accompanying issue (created by you or not) which is solved by the PR. In this case, feel free to use the phrase "(closes #XXX)" in the text of the pull request, where `XXX` is the number of the issue that you have solved. The PR should be in its own separate branch following the naming `pr/feature`, where `feature` is a short, descripting name of the additional feature or bug contained in the PR. +# How to contribute +Contributions to OpenSpace are welcomed and highly encouraged! They can take many forms and all forms of contributions, for example reporting bugs, fixing bugs, creating and sharing new content, writing documentation, and many many other forms. Even creating interesting pictures and videos and sharing them helps. -For more information we refer to the [Wiki](https://openspace.github.io). If there are any questions, feel free to contact us via [email](mailto:mail@alexanderbock.eu?subject=OpenSpace: Contributing). \ No newline at end of file +## :book: Code of Conduct +Please review our [Code of Conduct](../CODE_OF_CONDUCT.md). It is in effect at all times and we expect it to be honored by everyone at all times. + +## Code changes +The easiest way to contribute is through a separate fork of the repository and submitting a Pull Request. One of the core developers will review the pull request and integrate it into the `master` branch. Preferably, for each Pull Request, there is an accompanying issue (created by you or not) which the Pull Request addresses. In this case, feel free to use the phrase "(closes #XXX)" in the text of the Pull Request, where `XXX` is the number of the issue that you have solved. The PR should be in its own separate branch following the naming `pr/feature`, where `feature` is a short, descripting name of the additional feature or bug contained in the PR. + +For more information we refer to the [Documentation](https://docs.openspaceproject.com). If there are any questions, feel free to contact us via [email](mailto:support@openspaceproject.com?subject=OpenSpace: Contributing). diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md deleted file mode 100644 index 6a26096403..0000000000 --- a/.github/ISSUE_TEMPLATE.md +++ /dev/null @@ -1,7 +0,0 @@ -<< Description of the problem >> - -<< What did you expect to happen >> -<< What did happen? >> - - -<< Attach screenshots, if possible >> \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000000..31613c3feb --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,45 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '' +labels: 'Type: Bug' +assignees: '' +body: + - type: dropdown + id: version + attributes: + label: Version + description: What version of OpenSpace are you running? + options: + - master branch + - 0.19.2 + - 0.19.1 + - 0.19.0 + - 0.18.2 + - 0.18.1 + - 0.18.0 + default: 0 +--- + +**Describe the bug** +A clear and concise description of what the bug is. + +**To Reproduce** +Steps to reproduce the behavior: +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error + +**Expected behavior** +A clear and concise description of what you expected to happen. + +**Screenshots** +If applicable, add screenshots to help explain your problem. + +**Desktop (please complete the following information):** + - OS: [e.g. Windows, Linux (which distribution), MacOS] + - Version [e.g. 22] + +**Additional context** +Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000000..f06d14875e --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,4 @@ +contact_links: + - name: Slack Community Support + url: https://github.com/orgs/community/discussions + about: Please ask and answer questions here. Slack is the easiest and most reliable way of getting in touch with the project members. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000000..a6caefe08d --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,20 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: '' +labels: 'Type: Enhancement' +assignees: '' + +--- + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** +Add any other context or screenshots about the feature request here. diff --git a/.github/ISSUE_TEMPLATE/general-issue.md b/.github/ISSUE_TEMPLATE/general-issue.md new file mode 100644 index 0000000000..91b21568de --- /dev/null +++ b/.github/ISSUE_TEMPLATE/general-issue.md @@ -0,0 +1,10 @@ +--- +name: General issue +about: An issue without prefilled fields +title: '' +labels: '' +assignees: '' + +--- + + diff --git a/.github/SECURITY.md b/.github/SECURITY.md new file mode 100644 index 0000000000..f1f4116f2f --- /dev/null +++ b/.github/SECURITY.md @@ -0,0 +1,3 @@ +If you find any security issues with OpenSpace of any of its components, please __do not report the issue here on GitHub__. Instead send an email to support@openspaceproject.com, preferrably with the prefix "Vulnerability: " as these are processed immediately. Alternatively, you can also report it @Alex Bock or @Megan Villa on the public Slack for which you can sign up [here](https://join.slack.com/t/openspacesupport/shared_invite/zt-37niq6y9-T0JaCIk4UoFLI4VF5U9Vsw). Please do not report it in the general channel, but as a private message instead. + +Thank you! diff --git a/.github/SUPPORT.md b/.github/SUPPORT.md new file mode 100644 index 0000000000..7489d59feb --- /dev/null +++ b/.github/SUPPORT.md @@ -0,0 +1 @@ +In order to get in touch with the developers and to get support about using and contribution to OpenSpace either send an email to support@openspaceproject.com or join our Slack [here](https://join.slack.com/t/openspacesupport/shared_invite/zt-37niq6y9-T0JaCIk4UoFLI4VF5U9Vsw). diff --git a/.gitignore b/.gitignore index 78bfbc5a7d..46e1be12b5 100644 --- a/.gitignore +++ b/.gitignore @@ -42,3 +42,5 @@ COMMIT.md /modules/skybrowser/wwtimagedata doc config/schema/sgct.schema.json +settings.json +openspace.cfg.override diff --git a/.gitmodules b/.gitmodules index b21d2f936d..5a065afbb7 100644 --- a/.gitmodules +++ b/.gitmodules @@ -38,3 +38,10 @@ [submodule "documentation"] path = documentation url = https://github.com/OpenSpace/OpenSpace-Documentation-Dist.git +[submodule "support/doxygen/css"] + path = support/doxygen/css + url = https://github.com/jothepro/doxygen-awesome-css.git + +[submodule "modules/audio/ext/soloud"] + path = modules/audio/ext/soloud + url = https://github.com/jarikomppa/soloud diff --git a/.mailmap b/.mailmap new file mode 100644 index 0000000000..d7ab0d7d56 --- /dev/null +++ b/.mailmap @@ -0,0 +1,156 @@ +Adam Rohdin +Adam Rohdin Arohdin +Adam Rohdin Arohdin +Adam Rohdin Arohdin + +Agnes Heppich Agnes + +Alex Bergman Alex + +Alexander Bock +Alexander Bock + +Andreas Engberg +Andreas Engberg <48772850+engbergandreas@users.noreply.github.com> + +Anders Lundkvist Lundkvist +Anders Lundkvist lundkvistarn + +Anton Arbring antar420 + +Axel Kollberg Kollberg + +Caroline Gard carolinegard +Caroline Gard CarolineGard + +Chris Paulusson Christoffer Paulusson + +Elon Olsson Elon +Elon Olsson ElonOlsson +Elon Olsson OLSSON + +Emil Axelsson +Emil Axelsson = +Emil Axelsson +Emil Axelsson +Emil Axelsson + +Emilie Ho Emilie + +Emma Broman +Emma Broman +Emma Broman + +Emma Segolsson emmasegolsson +Emma Segolsson + +Eric Myers + +Erik Broberg +Erik Broberg nusic + +Erik Salsborn eriksalsborn + +Erik Sunden eriksunden +Erik Sunden eriksunden + +Gene Payne GPayne +Gene Payne +Gene Payne + +Hans-Christian Helltegen HC Helltegen +Hans-Christian Helltegen + +Ingela Rossing Lingis +Ingela Rossing unknown + +Jacob Molin JACOB MOLIN +Jacob Molin Jacob Molin <34372356+jacobmolin@users.noreply.github.com> + +Joakim Kilby + +Johanna Granström johannagranstrom +Johanna Granström Johann Granström +Johanna Granström johannagranstroem +Johanna Granström + +Jonas Strandstedt jonasstrandstedt + +Jonathan Grangien jon-grangien +Jonathan Grangien codingInSpace + +Jonathas Costa + +Kalle Bladin kalbl +Kalle Bladin Kalle +Kalle Bladin kbladin +Kalle Bladin Karl Bladin + +Karin Reidarman KarRei + +Kristin Back kristinbackgit config --global user.name kristinback +Kristin Back kristinback + +Lovisa Hassler liuloppan +Lovisa Hassler +Lovisa Hassler Your Name +Lovisa Hassler +Lovisa Hassler + +Malin Ejdbo Malin E +Malin Ejdbo Malin +Malin Ejdbo <16215103+Roxeena@users.noreply.github.com> + +Mathis Brossier mathis +Mathis Brossier + +Matthew Territo +Matthew Territo +Matthew Territo +Matthew Territo +Matthew Territo wundahlful +Matthew Territo wundahful +Matthew Territo +Matthew Territo + +Matthias Berg +Matthias Berg farbrorberg +Matthias Berg Berg + +Micah Acinapura +Micah Acinapura micahnyc +Micah Acinapura Micah +Micah Acinapura Micah + +Michal Marcinkowski michal + +Michael Novén novalain + +Michael Sjöström MichaelSjostrom + +Mikael Pettersson Mikael + +Nisse Bergman nissebergman + +Oskar Carlbaum Carlbaum + +Rickard Lindstedt Rickard Lindstedt + +Robin Skånberg scanberg +Robin Skånberg + +Sebastian Piwell piwell + +Simon Brefält Simon + +Stefan Seibert +Stefan Seibert stefanseibert + +Victor Lindquist VLLindqvist +Victor Lindquist + +Ylva Selling +Ylva Selling +Ylva Selling +Ylva Selling ENG-VIDAVIZ-0\ylvas +Ylva Selling sylvass diff --git a/CMakeLists.txt b/CMakeLists.txt index 2d26714a60..f5c36c3087 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,7 +2,7 @@ # # # OpenSpace # # # -# Copyright (c) 2014-2023 # +# Copyright (c) 2014-2025 # # # # 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 # @@ -27,10 +27,11 @@ cmake_policy(VERSION 3.25) project(OpenSpace) -set(OPENSPACE_VERSION_MAJOR 0) -set(OPENSPACE_VERSION_MINOR 19) -set(OPENSPACE_VERSION_PATCH 0) -set(OPENSPACE_VERSION_STRING "") +set(OPENSPACE_RELEASE_BUILD OFF) +set(OPENSPACE_VERSION_MAJOR) +set(OPENSPACE_VERSION_MINOR) +set(OPENSPACE_VERSION_PATCH) +set(OPENSPACE_VERSION_STRING) include(${PROJECT_SOURCE_DIR}/support/cmake/module_common.cmake) include(${PROJECT_SOURCE_DIR}/ext/ghoul/support/cmake/message_macros.cmake) @@ -88,18 +89,6 @@ execute_process( OUTPUT_STRIP_TRAILING_WHITESPACE ) -# See if working directory is clean or not -execute_process( - COMMAND git diff-index --quiet HEAD -- - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - RESULT_VARIABLE OPENSPACE_GIT_STATUS_RETURN -) -if (NOT OPENSPACE_GIT_STATUS_RETURN EQUAL 0) - set(OPENSPACE_GIT_STATUS "uncommitted changes") -else () - set(OPENSPACE_GIT_STATUS "") -endif () - if (MSVC) option(OPENSPACE_BREAK_ON_FLOATING_POINT_EXCEPTION "Raise exceptions when encountering Inf's or Nan's in floating point numbers" OFF) @@ -189,27 +178,11 @@ if (APPLE) ) endif () -if (MSVC) - option(OPENSPACE_NVTOOLS_ENABLED "Include support for Nvidia Tools Extensions" OFF) - set(OPENSPACE_NVTOOLS_PATH "C:/Program Files/NVIDIA Corporation/NvToolsExt") - if (OPENSPACE_NVTOOLS_ENABLED) - begin_dependency("Nvidia Tools Extension") - target_compile_definitions(openspace-core PUBLIC "OPENSPACE_HAS_NVTOOLS") - target_include_directories(openspace-core PUBLIC "${OPENSPACE_NVTOOLS_PATH}/include") - end_dependency() - endif () -endif () - begin_header("Configuring Modules") add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/modules") end_header("End: Configuring Modules") -add_subdirectory(support/coding/codegen/tests) -set_target_properties(run_test_codegen PROPERTIES FOLDER "Unit Tests/support") -set_target_properties(codegentest PROPERTIES FOLDER "Unit Tests") - - begin_header("Configuring Applications") add_subdirectory(apps) end_header("End: Configuring Applications") @@ -222,6 +195,10 @@ endif () option(OPENSPACE_HAVE_TESTS "Activate the OpenSpace unit tests" ON) if (OPENSPACE_HAVE_TESTS) + add_subdirectory(support/coding/codegen/tests) + set_target_properties(run_test_codegen PROPERTIES FOLDER "Unit Tests/support") + set_target_properties(codegentest PROPERTIES FOLDER "Unit Tests") + begin_header("Generating OpenSpace unit test") add_subdirectory(tests) end_header() diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index f8489b2b7a..c6c9c1b098 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -4,11 +4,11 @@ In the interest of fostering an open and welcoming environment, we as contributo ## Our Standards Examples of behavior that contributes to creating a positive environment include: - - Using welcoming and inclusive language + - Using welcoming and inclusive language. Politeness is expected at all times. Be kind and courteous. - Being respectful of differing viewpoints and experiences - Gracefully accepting constructive criticism - Focusing on what is best for the community - - Showing empathy towards other community members + - Showing empathy towards other community members and always assume positive intent from others. Examples of unacceptable behavior by participants include: diff --git a/CREDITS.md b/CREDITS.md index c8c08729da..b3a6cb1f93 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -1,56 +1,22 @@ # Core Team Alexander Bock Emma Broman -Emil Axelsson -Gene Payne -Kalle Bladin -Jonathas Costa Malin Ejdbo +Ylva Selling +Gene Payne Elon Olsson Micah Acinapura +Joakim Kilby +Adam Rohdin +Andreas Engberg +Megan Villa + + +Jonathas Costa +Emil Axelsson +Kalle Bladin Jonas Strandstedt Michal Marcinkowski -Joakim Kilby Lovisa Hassler -Mikael Petterson -Erik Sundén -Stefan Lindblad Corrie Roe Eric Myers - -Sebastian Piwell -Erik Broberg -Jonathan Bosson -Michael Nilsson -Jonathan Franzen -ChristianAdamsson -Emilie Ho -Karin Reidarman -Hans-Christian Helltegen -Anton Arbring -Oskar Carlbaum -Matthew Territo -Jonathan Grangien -Klas Eskilson -Aniisa Bihi -Tomas Forsyth Rosin -Niclas Hultberg -Rickard Lindtstedt -Ingela Rossing -Michael Sjöström -Michael Novén -Christoffer Särevall - -# Community Support -Anteige -arfon -DavidLaidlaw -ethanejohnsons -johnriedel -mik3caprio -mingenuity -nbartzokas -nealmcb -noahdasanaike -PTrottier -sa5bke diff --git a/Doxyfile b/Doxyfile index 8166b80b51..6417b0167a 100644 --- a/Doxyfile +++ b/Doxyfile @@ -34,7 +34,7 @@ # https://www.gnu.org/software/libiconv/ for the list of possible encodings. # The default value is: UTF-8. -DOXYFILE_ENCODING = UTF-8 +DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded by # double-quotes, unless you are using Doxywizard) that should identify the @@ -42,33 +42,33 @@ DOXYFILE_ENCODING = UTF-8 # title of most generated pages and in a few other places. # The default value is: My Project. -PROJECT_NAME = OpenSpace +PROJECT_NAME = OpenSpace # The PROJECT_NUMBER tag can be used to enter a project or revision number. This # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = +PROJECT_NUMBER = # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a # quick idea about the purpose of the project. Keep the description short. -PROJECT_BRIEF = +PROJECT_BRIEF = # With the PROJECT_LOGO tag one can specify a logo or an icon that is included # in the documentation. The maximum height of the logo should not exceed 55 # pixels and the maximum width should not exceed 200 pixels. Doxygen will copy # the logo to the output directory. -PROJECT_LOGO = data/openspace-icon.png +PROJECT_LOGO = data/openspace-icon.png # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path # into which the generated documentation will be written. If a relative path is # entered, it will be relative to the location where doxygen was started. If # left blank the current directory will be used. -OUTPUT_DIRECTORY = doc/ +OUTPUT_DIRECTORY = doc/ # If the CREATE_SUBDIRS tag is set to YES then doxygen will create up to 4096 # sub-directories (in 2 levels) under the output directory of each output format @@ -79,7 +79,7 @@ OUTPUT_DIRECTORY = doc/ # control the number of sub-directories. # The default value is: NO. -CREATE_SUBDIRS = YES +CREATE_SUBDIRS = YES # Controls the number of sub-directories that will be created when # CREATE_SUBDIRS tag is set to YES. Level 0 represents 16 directories, and every @@ -90,7 +90,7 @@ CREATE_SUBDIRS = YES # Minimum value: 0, maximum value: 8, default value: 8. # This tag requires that the tag CREATE_SUBDIRS is set to YES. -CREATE_SUBDIRS_LEVEL = 8 +CREATE_SUBDIRS_LEVEL = 8 # If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII # characters to appear in the names of generated files. If set to NO, non-ASCII @@ -98,7 +98,7 @@ CREATE_SUBDIRS_LEVEL = 8 # U+3044. # The default value is: NO. -ALLOW_UNICODE_NAMES = NO +ALLOW_UNICODE_NAMES = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this @@ -113,14 +113,14 @@ ALLOW_UNICODE_NAMES = NO # Swedish, Turkish, Ukrainian and Vietnamese. # The default value is: English. -OUTPUT_LANGUAGE = English +OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member # descriptions after the members that are listed in the file and class # documentation (similar to Javadoc). Set to NO to disable this. # The default value is: YES. -BRIEF_MEMBER_DESC = YES +BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief # description of a member or function before the detailed description @@ -129,7 +129,7 @@ BRIEF_MEMBER_DESC = YES # brief descriptions will be completely suppressed. # The default value is: YES. -REPEAT_BRIEF = YES +REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator that is # used to form the text in various listings. Each string in this list, if found @@ -140,24 +140,24 @@ REPEAT_BRIEF = YES # the entity):The $name class, The $name widget, The $name file, is, provides, # specifies, contains, represents, a, an and the. -ABBREVIATE_BRIEF = "The $name class" \ - "The $name widget" \ - "The $name file" \ - is \ - provides \ - specifies \ - contains \ - represents \ - a \ - an \ - the +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # doxygen will generate a detailed section even if there is only a brief # description. # The default value is: NO. -ALWAYS_DETAILED_SEC = YES +ALWAYS_DETAILED_SEC = YES # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those @@ -165,14 +165,14 @@ ALWAYS_DETAILED_SEC = YES # operators of the base classes will not be shown. # The default value is: NO. -INLINE_INHERITED_MEMB = NO +INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path # before files name in the file list and in the header files. If set to NO the # shortest path that makes the file name unique will be used # The default value is: YES. -FULL_PATH_NAMES = YES +FULL_PATH_NAMES = YES # The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. # Stripping is only done if one of the specified strings matches the left-hand @@ -184,7 +184,7 @@ FULL_PATH_NAMES = YES # will be relative from the directory where doxygen is started. # This tag requires that the tag FULL_PATH_NAMES is set to YES. -STRIP_FROM_PATH = +STRIP_FROM_PATH = # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the # path mentioned in the documentation of a class, which tells the reader which @@ -193,14 +193,14 @@ STRIP_FROM_PATH = # specify the list of include paths that are normally passed to the compiler # using the -I flag. -STRIP_FROM_INC_PATH = +STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but # less readable) file names. This can be useful is your file systems doesn't # support long names like on DOS, Mac, or CD-ROM. # The default value is: NO. -SHORT_NAMES = NO +SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the # first line (until the first dot) of a Javadoc-style comment as the brief @@ -209,7 +209,7 @@ SHORT_NAMES = NO # description.) # The default value is: NO. -JAVADOC_AUTOBRIEF = YES +JAVADOC_AUTOBRIEF = YES # If the JAVADOC_BANNER tag is set to YES then doxygen will interpret a line # such as @@ -219,7 +219,7 @@ JAVADOC_AUTOBRIEF = YES # interpreted by doxygen. # The default value is: NO. -JAVADOC_BANNER = NO +JAVADOC_BANNER = NO # If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first # line (until the first dot) of a Qt-style comment as the brief description. If @@ -227,7 +227,7 @@ JAVADOC_BANNER = NO # requiring an explicit \brief command for a brief description.) # The default value is: NO. -QT_AUTOBRIEF = YES +QT_AUTOBRIEF = YES # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a # multi-line C++ special comment block (i.e. a block of //! or /// comments) as @@ -247,26 +247,26 @@ MULTILINE_CPP_IS_BRIEF = NO # documentation blocks is shown as doxygen documentation. # The default value is: YES. -PYTHON_DOCSTRING = YES +PYTHON_DOCSTRING = YES # If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the # documentation from any documented member that it re-implements. # The default value is: YES. -INHERIT_DOCS = YES +INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new # page for each member. If set to NO, the documentation of a member will be part # of the file/class/namespace that contains it. # The default value is: NO. -SEPARATE_MEMBER_PAGES = NO +SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen # uses this value to replace tabs by spaces in code fragments. # Minimum value: 1, maximum value: 16, default value: 4. -TAB_SIZE = 4 +TAB_SIZE = 4 # This tag can be used to specify a number of aliases that act as commands in # the documentation. An alias has the form: @@ -283,7 +283,7 @@ TAB_SIZE = 4 # with the commands \{ and \} for these it is advised to use the version @{ and # @} or use a double escape (\\{ and \\}) -ALIASES = +ALIASES = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources # only. Doxygen will then generate output that is more tailored for C. For @@ -291,7 +291,7 @@ ALIASES = # members will be omitted, etc. # The default value is: NO. -OPTIMIZE_OUTPUT_FOR_C = NO +OPTIMIZE_OUTPUT_FOR_C = NO # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or # Python sources only. Doxygen will then generate output that is more tailored @@ -299,19 +299,19 @@ OPTIMIZE_OUTPUT_FOR_C = NO # qualified scopes will look different, etc. # The default value is: NO. -OPTIMIZE_OUTPUT_JAVA = NO +OPTIMIZE_OUTPUT_JAVA = NO # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran # sources. Doxygen will then generate output that is tailored for Fortran. # The default value is: NO. -OPTIMIZE_FOR_FORTRAN = NO +OPTIMIZE_FOR_FORTRAN = NO # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL # sources. Doxygen will then generate output that is tailored for VHDL. # The default value is: NO. -OPTIMIZE_OUTPUT_VHDL = NO +OPTIMIZE_OUTPUT_VHDL = NO # Set the OPTIMIZE_OUTPUT_SLICE tag to YES if your project consists of Slice # sources only. Doxygen will then generate output that is more tailored for that @@ -319,7 +319,7 @@ OPTIMIZE_OUTPUT_VHDL = NO # separated into more groups, etc. # The default value is: NO. -OPTIMIZE_OUTPUT_SLICE = NO +OPTIMIZE_OUTPUT_SLICE = NO # Doxygen selects the parser to use depending on the extension of the files it # parses. With this tag you can assign which parser to use for a given @@ -342,7 +342,7 @@ OPTIMIZE_OUTPUT_SLICE = NO # # Note see also the list of default file extension mappings. -EXTENSION_MAPPING = inl=C++ +EXTENSION_MAPPING = inl=C++ # If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments # according to the Markdown format, which allows for more readable @@ -352,7 +352,7 @@ EXTENSION_MAPPING = inl=C++ # case of backward compatibilities issues. # The default value is: YES. -MARKDOWN_SUPPORT = YES +MARKDOWN_SUPPORT = YES # When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up # to that level are automatically included in the table of contents, even if @@ -361,7 +361,18 @@ MARKDOWN_SUPPORT = YES # Minimum value: 0, maximum value: 99, default value: 5. # This tag requires that the tag MARKDOWN_SUPPORT is set to YES. -TOC_INCLUDE_HEADINGS = 5 +TOC_INCLUDE_HEADINGS = 5 + +# The MARKDOWN_ID_STYLE tag can be used to specify the algorithm used to +# generate identifiers for the Markdown headings. Note: Every identifier is +# unique. +# Possible values are: DOXYGEN use a fixed 'autotoc_md' string followed by a +# sequence number starting at 0 and GITHUB use the lower case version of title +# with any whitespace replaced by '-' and punctuation characters removed. +# The default value is: DOXYGEN. +# This tag requires that the tag MARKDOWN_SUPPORT is set to YES. + +MARKDOWN_ID_STYLE = DOXYGEN # When enabled doxygen tries to link words that correspond to documented # classes, or namespaces to their corresponding documentation. Such a link can @@ -369,7 +380,7 @@ TOC_INCLUDE_HEADINGS = 5 # globally by setting AUTOLINK_SUPPORT to NO. # The default value is: YES. -AUTOLINK_SUPPORT = YES +AUTOLINK_SUPPORT = YES # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should set this @@ -379,13 +390,13 @@ AUTOLINK_SUPPORT = YES # diagrams that involve STL classes more complete and accurate. # The default value is: NO. -BUILTIN_STL_SUPPORT = YES +BUILTIN_STL_SUPPORT = YES # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. # The default value is: NO. -CPP_CLI_SUPPORT = NO +CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip (see: # https://www.riverbankcomputing.com/software/sip/intro) sources only. Doxygen @@ -393,7 +404,7 @@ CPP_CLI_SUPPORT = NO # of private inheritance when no explicit protection keyword is present. # The default value is: NO. -SIP_SUPPORT = NO +SIP_SUPPORT = NO # For Microsoft's IDL there are propget and propput attributes to indicate # getter and setter methods for a property. Setting this option to YES will make @@ -403,7 +414,7 @@ SIP_SUPPORT = NO # should set this option to NO. # The default value is: YES. -IDL_PROPERTY_SUPPORT = YES +IDL_PROPERTY_SUPPORT = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES then doxygen will reuse the documentation of the first @@ -411,7 +422,7 @@ IDL_PROPERTY_SUPPORT = YES # all members of a group must be documented explicitly. # The default value is: NO. -DISTRIBUTE_GROUP_DOC = NO +DISTRIBUTE_GROUP_DOC = NO # If one adds a struct or class to a group and this option is enabled, then also # any nested class or struct is added to the same group. By default this option @@ -427,7 +438,7 @@ GROUP_NESTED_COMPOUNDS = NO # \nosubgrouping command. # The default value is: YES. -SUBGROUPING = YES +SUBGROUPING = YES # When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions # are shown inside the group in which they are included (e.g. using \ingroup) @@ -448,7 +459,7 @@ INLINE_GROUPED_CLASSES = NO # Man pages) or section (for LaTeX and RTF). # The default value is: NO. -INLINE_SIMPLE_STRUCTS = YES +INLINE_SIMPLE_STRUCTS = YES # When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or # enum is documented as struct, union, or enum with the name of the typedef. So @@ -459,7 +470,7 @@ INLINE_SIMPLE_STRUCTS = YES # types are typedef'ed and only the typedef is referenced, never the tag name. # The default value is: NO. -TYPEDEF_HIDES_STRUCT = NO +TYPEDEF_HIDES_STRUCT = NO # The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This # cache is used to resolve symbols given their name and scope. Since this can be @@ -472,7 +483,7 @@ TYPEDEF_HIDES_STRUCT = NO # the optimal cache size from a speed point of view. # Minimum value: 0, maximum value: 9, default value: 0. -LOOKUP_CACHE_SIZE = 9 +LOOKUP_CACHE_SIZE = 9 # The NUM_PROC_THREADS specifies the number of threads doxygen is allowed to use # during processing. When set to 0 doxygen will based this on the number of @@ -485,7 +496,15 @@ LOOKUP_CACHE_SIZE = 9 # DOT_NUM_THREADS setting. # Minimum value: 0, maximum value: 32, default value: 1. -NUM_PROC_THREADS = 1 +NUM_PROC_THREADS = 1 + +# If the TIMESTAMP tag is set different from NO then each generated page will +# contain the date or date and time when the page was generated. Setting this to +# NO can help when comparing the output of multiple runs. +# Possible values are: YES, NO, DATETIME and DATE. +# The default value is: NO. + +TIMESTAMP = DATE #--------------------------------------------------------------------------- # Build related configuration options @@ -499,31 +518,31 @@ NUM_PROC_THREADS = 1 # normally produced when WARNINGS is set to YES. # The default value is: NO. -EXTRACT_ALL = YES +EXTRACT_ALL = YES # If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will # be included in the documentation. # The default value is: NO. -EXTRACT_PRIVATE = YES +EXTRACT_PRIVATE = YES # If the EXTRACT_PRIV_VIRTUAL tag is set to YES, documented private virtual # methods of a class will be included in the documentation. # The default value is: NO. -EXTRACT_PRIV_VIRTUAL = YES +EXTRACT_PRIV_VIRTUAL = YES # If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal # scope will be included in the documentation. # The default value is: NO. -EXTRACT_PACKAGE = NO +EXTRACT_PACKAGE = NO # If the EXTRACT_STATIC tag is set to YES, all static members of a file will be # included in the documentation. # The default value is: NO. -EXTRACT_STATIC = YES +EXTRACT_STATIC = YES # If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined # locally in source files will be included in the documentation. If set to NO, @@ -531,7 +550,7 @@ EXTRACT_STATIC = YES # for Java sources. # The default value is: YES. -EXTRACT_LOCAL_CLASSES = YES +EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. If set to YES, local methods, # which are defined in the implementation section but not in the interface are @@ -539,7 +558,7 @@ EXTRACT_LOCAL_CLASSES = YES # included. # The default value is: NO. -EXTRACT_LOCAL_METHODS = NO +EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called @@ -548,7 +567,7 @@ EXTRACT_LOCAL_METHODS = NO # are hidden. # The default value is: NO. -EXTRACT_ANON_NSPACES = NO +EXTRACT_ANON_NSPACES = NO # If this flag is set to YES, the name of an unnamed parameter in a declaration # will be determined by the corresponding definition. By default unnamed @@ -563,7 +582,7 @@ RESOLVE_UNNAMED_PARAMS = YES # section is generated. This option has no effect if EXTRACT_ALL is enabled. # The default value is: NO. -HIDE_UNDOC_MEMBERS = NO +HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. If set @@ -572,28 +591,28 @@ HIDE_UNDOC_MEMBERS = NO # if EXTRACT_ALL is enabled. # The default value is: NO. -HIDE_UNDOC_CLASSES = NO +HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend # declarations. If set to NO, these declarations will be included in the # documentation. # The default value is: NO. -HIDE_FRIEND_COMPOUNDS = NO +HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any # documentation blocks found inside the body of a function. If set to NO, these # blocks will be appended to the function's detailed documentation block. # The default value is: NO. -HIDE_IN_BODY_DOCS = NO +HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation that is typed after a # \internal command is included. If the tag is set to NO then the documentation # will be excluded. Set it to YES to include the internal documentation. # The default value is: NO. -INTERNAL_DOCS = NO +INTERNAL_DOCS = NO # With the correct setting of option CASE_SENSE_NAMES doxygen will better be # able to match the capabilities of the underlying filesystem. In case the @@ -610,59 +629,59 @@ INTERNAL_DOCS = NO # Possible values are: SYSTEM, NO and YES. # The default value is: SYSTEM. -CASE_SENSE_NAMES = SYSTEM +CASE_SENSE_NAMES = SYSTEM # If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with # their full class and namespace scopes in the documentation. If set to YES, the # scope will be hidden. # The default value is: NO. -HIDE_SCOPE_NAMES = YES +HIDE_SCOPE_NAMES = YES # If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will # append additional text to a page's title, such as Class Reference. If set to # YES the compound reference will be hidden. # The default value is: NO. -HIDE_COMPOUND_REFERENCE= NO +HIDE_COMPOUND_REFERENCE = NO # If the SHOW_HEADERFILE tag is set to YES then the documentation for a class # will show which file needs to be included to use the class. # The default value is: YES. -SHOW_HEADERFILE = YES +SHOW_HEADERFILE = YES # If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of # the files that are included by a file in the documentation of that file. # The default value is: YES. -SHOW_INCLUDE_FILES = YES +SHOW_INCLUDE_FILES = YES # If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each # grouped member an include statement to the documentation, telling the reader # which file to include in order to use the member. # The default value is: NO. -SHOW_GROUPED_MEMB_INC = NO +SHOW_GROUPED_MEMB_INC = NO # If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include # files with double quotes in the documentation rather than with sharp brackets. # The default value is: NO. -FORCE_LOCAL_INCLUDES = NO +FORCE_LOCAL_INCLUDES = NO # If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the # documentation for inline members. # The default value is: YES. -INLINE_INFO = YES +INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the # (detailed) documentation of file and class members alphabetically by member # name. If set to NO, the members will appear in declaration order. # The default value is: YES. -SORT_MEMBER_DOCS = YES +SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief # descriptions of file, namespace and class members alphabetically by member @@ -670,7 +689,7 @@ SORT_MEMBER_DOCS = YES # this will also influence the order of the classes in the class list. # The default value is: NO. -SORT_BRIEF_DOCS = YES +SORT_BRIEF_DOCS = YES # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the # (brief and detailed) documentation of class members so that constructors and @@ -689,7 +708,7 @@ SORT_MEMBERS_CTORS_1ST = YES # appear in their defined order. # The default value is: NO. -SORT_GROUP_NAMES = NO +SORT_GROUP_NAMES = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by # fully-qualified names, including namespaces. If set to NO, the class list will @@ -699,7 +718,7 @@ SORT_GROUP_NAMES = NO # list. # The default value is: NO. -SORT_BY_SCOPE_NAME = NO +SORT_BY_SCOPE_NAME = NO # If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper # type resolution of all parameters of a function it will reject a match between @@ -709,38 +728,38 @@ SORT_BY_SCOPE_NAME = NO # accept a match between prototype and implementation in such cases. # The default value is: NO. -STRICT_PROTO_MATCHING = NO +STRICT_PROTO_MATCHING = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo # list. This list is created by putting \todo commands in the documentation. # The default value is: YES. -GENERATE_TODOLIST = YES +GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test # list. This list is created by putting \test commands in the documentation. # The default value is: YES. -GENERATE_TESTLIST = NO +GENERATE_TESTLIST = NO # The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug # list. This list is created by putting \bug commands in the documentation. # The default value is: YES. -GENERATE_BUGLIST = NO +GENERATE_BUGLIST = NO # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO) # the deprecated list. This list is created by putting \deprecated commands in # the documentation. # The default value is: YES. -GENERATE_DEPRECATEDLIST= YES +GENERATE_DEPRECATEDLIST = YES # The ENABLED_SECTIONS tag can be used to enable conditional documentation # sections, marked by \if ... \endif and \cond # ... \endcond blocks. -ENABLED_SECTIONS = +ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the # initial value of a variable or macro / define can have for it to appear in the @@ -751,28 +770,28 @@ ENABLED_SECTIONS = # documentation regardless of this setting. # Minimum value: 0, maximum value: 10000, default value: 30. -MAX_INITIALIZER_LINES = 30 +MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated at # the bottom of the documentation of classes and structs. If set to YES, the # list will mention the files that were used to generate the documentation. # The default value is: YES. -SHOW_USED_FILES = NO +SHOW_USED_FILES = NO # Set the SHOW_FILES tag to NO to disable the generation of the Files page. This # will remove the Files entry from the Quick Index and from the Folder Tree View # (if specified). # The default value is: YES. -SHOW_FILES = YES +SHOW_FILES = YES # Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces # page. This will remove the Namespaces entry from the Quick Index and from the # Folder Tree View (if specified). # The default value is: YES. -SHOW_NAMESPACES = YES +SHOW_NAMESPACES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from @@ -782,7 +801,7 @@ SHOW_NAMESPACES = YES # by doxygen. Whatever the program writes to standard output is used as the file # version. For an example see the documentation. -FILE_VERSION_FILTER = +FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed # by doxygen. The layout file controls the global structure of the generated @@ -796,7 +815,7 @@ FILE_VERSION_FILTER = # DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE # tag is left empty. -LAYOUT_FILE = +LAYOUT_FILE = # The CITE_BIB_FILES tag can be used to specify one or more bib files containing # the reference definitions. This must be a list of .bib files. The .bib @@ -806,7 +825,7 @@ LAYOUT_FILE = # LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the # search path. See also \cite for info how to create references. -CITE_BIB_FILES = +CITE_BIB_FILES = #--------------------------------------------------------------------------- # Configuration options related to warning and progress messages @@ -817,7 +836,7 @@ CITE_BIB_FILES = # messages are off. # The default value is: NO. -QUIET = YES +QUIET = YES # The WARNINGS tag can be used to turn on/off the warning messages that are # generated to standard error (stderr) by doxygen. If WARNINGS is set to YES @@ -826,14 +845,14 @@ QUIET = YES # Tip: Turn warnings on while writing the documentation. # The default value is: YES. -WARNINGS = YES +WARNINGS = YES # If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate # warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag # will automatically be disabled. # The default value is: YES. -WARN_IF_UNDOCUMENTED = YES +WARN_IF_UNDOCUMENTED = YES # If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as documenting some parameters in @@ -841,7 +860,7 @@ WARN_IF_UNDOCUMENTED = YES # using markup commands wrongly. # The default value is: YES. -WARN_IF_DOC_ERROR = YES +WARN_IF_DOC_ERROR = YES # If WARN_IF_INCOMPLETE_DOC is set to YES, doxygen will warn about incomplete # function parameter documentation. If set to NO, doxygen will accept that some @@ -858,7 +877,7 @@ WARN_IF_INCOMPLETE_DOC = YES # WARN_IF_INCOMPLETE_DOC # The default value is: NO. -WARN_NO_PARAMDOC = NO +WARN_NO_PARAMDOC = NO # If WARN_IF_UNDOC_ENUM_VAL option is set to YES, doxygen will warn about # undocumented enumeration values. If set to NO, doxygen will accept @@ -872,10 +891,17 @@ WARN_IF_UNDOC_ENUM_VAL = YES # a warning is encountered. If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS # then doxygen will continue running as if WARN_AS_ERROR tag is set to NO, but # at the end of the doxygen process doxygen will return with a non-zero status. -# Possible values are: NO, YES and FAIL_ON_WARNINGS. +# If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS_PRINT then doxygen behaves +# like FAIL_ON_WARNINGS but in case no WARN_LOGFILE is defined doxygen will not +# write the warning messages in between other messages but write them at the end +# of a run, in case a WARN_LOGFILE is defined the warning messages will be +# besides being in the defined file also be shown at the end of a run, unless +# the WARN_LOGFILE is defined as - i.e. standard output (stdout) in that case +# the behavior will remain as with the setting FAIL_ON_WARNINGS. +# Possible values are: NO, YES, FAIL_ON_WARNINGS and FAIL_ON_WARNINGS_PRINT. # The default value is: NO. -WARN_AS_ERROR = NO +WARN_AS_ERROR = NO # The WARN_FORMAT tag determines the format of the warning messages that doxygen # can produce. The string should contain the $file, $line, and $text tags, which @@ -886,7 +912,7 @@ WARN_AS_ERROR = NO # See also: WARN_LINE_FORMAT # The default value is: $file:$line: $text. -WARN_FORMAT = "$file:$line: $text" +WARN_FORMAT = "$file:$line: $text" # In the $text part of the WARN_FORMAT command it is possible that a reference # to a more specific place is given. To make it easier to jump to this place @@ -896,7 +922,7 @@ WARN_FORMAT = "$file:$line: $text" # See also: WARN_FORMAT # The default value is: at line $line of file $file. -WARN_LINE_FORMAT = "at line $line of file $file" +WARN_LINE_FORMAT = "at line $line of file $file" # The WARN_LOGFILE tag can be used to specify a file to which warning and error # messages should be written. If left blank the output is written to standard @@ -905,7 +931,7 @@ WARN_LINE_FORMAT = "at line $line of file $file" # specified the warning and error messages are written to standard output # (stdout). -WARN_LOGFILE = +WARN_LOGFILE = #--------------------------------------------------------------------------- # Configuration options related to the input files @@ -917,10 +943,12 @@ WARN_LOGFILE = # spaces. See also FILE_PATTERNS and EXTENSION_MAPPING # Note: If this tag is empty the current directory is searched. -INPUT = src \ - include \ - modules \ - apps +INPUT = src \ + include \ + modules \ + apps \ + ext/ghoul \ + support/doxygen/README.md # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses @@ -930,7 +958,7 @@ INPUT = src \ # See also: INPUT_FILE_ENCODING # The default value is: UTF-8. -INPUT_ENCODING = UTF-8 +INPUT_ENCODING = UTF-8 # This tag can be used to specify the character encoding of the source files # that doxygen parses The INPUT_FILE_ENCODING tag can be used to specify @@ -940,7 +968,7 @@ INPUT_ENCODING = UTF-8 # form: pattern=encoding (like *.php=ISO-8859-1). See cfg_input_encoding # "INPUT_ENCODING" for further information on supported encodings. -INPUT_FILE_ENCODING = +INPUT_FILE_ENCODING = # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and @@ -953,22 +981,20 @@ INPUT_FILE_ENCODING = # Note the list of default checked file patterns might differ from the list of # default file extension mappings. # -# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, -# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, -# *.hh, *.hxx, *.hpp, *.h++, *.l, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, -# *.inc, *.m, *.markdown, *.md, *.mm, *.dox (to be provided as doxygen C -# comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, *.f18, *.f, *.for, *.vhd, -# *.vhdl, *.ucf, *.qsf and *.ice. +# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cxxm, +# *.cpp, *.cppm, *.c++, *.c++m, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, +# *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, *.h++, *.ixx, *.l, *.cs, *.d, *.php, +# *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, *.md, *.mm, *.dox (to be +# provided as doxygen C comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, +# *.f18, *.f, *.for, *.vhd, *.vhdl, *.ucf, *.qsf and *.ice. -FILE_PATTERNS = *.cpp \ - *.h \ - *.inl +FILE_PATTERNS = *.cpp *.h *.inl # The RECURSIVE tag can be used to specify whether or not subdirectories should # be searched for input files as well. # The default value is: NO. -RECURSIVE = YES +RECURSIVE = YES # The EXCLUDE tag can be used to specify files and/or directories that should be # excluded from the INPUT source files. This way you can easily exclude a @@ -977,14 +1003,14 @@ RECURSIVE = YES # Note that relative paths are relative to the directory from which doxygen is # run. -EXCLUDE = +EXCLUDE = # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or # directories that are symbolic links (a Unix file system feature) are excluded # from the input. # The default value is: NO. -EXCLUDE_SYMLINKS = NO +EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude @@ -993,53 +1019,50 @@ EXCLUDE_SYMLINKS = NO # Note that the wildcards are matched against the file with absolute path, so to # exclude all test directories for example use the pattern */test/* -EXCLUDE_PATTERNS = ext/* \ - bin/* \ - build/* \ - config/* \ - gui/* \ - kernels/* \ - data/* \ - scripts/* \ - shaders/* \ - **/ext/** +EXCLUDE_PATTERNS = */ext/curl \ + */ext/date \ + */ext/json \ + */ext/spice \ + */ext/vld \ + */ext/tinythread \ + */ext/ghoul/ext/* \ + */modules/*/ext/* \ + */apps/OpenSpace-MinVR/ext/* \ + */apps/OpenSpace/ext/sgct/ext/* # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # ANamespace::AClass, ANamespace::*Test -# -# Note that the wildcards are matched against the file with absolute path, so to -# exclude all test directories use the pattern */test/* -EXCLUDE_SYMBOLS = +EXCLUDE_SYMBOLS = # The EXAMPLE_PATH tag can be used to specify one or more files or directories # that contain example code fragments that are included (see the \include # command). -EXAMPLE_PATH = +EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and # *.h) to filter out the source-files in the directories. If left blank all # files are included. -EXAMPLE_PATTERNS = * +EXAMPLE_PATTERNS = * # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude commands # irrespective of the value of the RECURSIVE tag. # The default value is: NO. -EXAMPLE_RECURSIVE = NO +EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or directories # that contain images that are to be included in the documentation (see the # \image command). -IMAGE_PATH = +IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program @@ -1065,7 +1088,7 @@ IMAGE_PATH = # need to set EXTENSION_MAPPING for the extension otherwise the files are not # properly processed by doxygen. -INPUT_FILTER = +INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. Doxygen will compare the file name with each pattern and apply the @@ -1078,14 +1101,14 @@ INPUT_FILTER = # need to set EXTENSION_MAPPING for the extension otherwise the files are not # properly processed by doxygen. -FILTER_PATTERNS = +FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will also be used to filter the input files that are used for # producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). # The default value is: NO. -FILTER_SOURCE_FILES = NO +FILTER_SOURCE_FILES = NO # The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file # pattern. A pattern will override the setting for FILTER_PATTERN (if any) and @@ -1100,7 +1123,7 @@ FILTER_SOURCE_PATTERNS = # (index.html). This can be useful if you have a project on for instance GitHub # and want to reuse the introduction page also for the doxygen output. -USE_MDFILE_AS_MAINPAGE = README.md +USE_MDFILE_AS_MAINPAGE = support/doxygen/README.md # The Fortran standard specifies that for fixed formatted Fortran code all # characters from position 72 are to be considered as comment. A common @@ -1109,7 +1132,7 @@ USE_MDFILE_AS_MAINPAGE = README.md # be processed before the automatic comment starts. # Minimum value: 7, maximum value: 10000, default value: 72. -FORTRAN_COMMENT_AFTER = 72 +FORTRAN_COMMENT_AFTER = 72 #--------------------------------------------------------------------------- # Configuration options related to source browsing @@ -1122,20 +1145,20 @@ FORTRAN_COMMENT_AFTER = 72 # also VERBATIM_HEADERS is set to NO. # The default value is: NO. -SOURCE_BROWSER = YES +SOURCE_BROWSER = YES # Setting the INLINE_SOURCES tag to YES will include the body of functions, # classes and enums directly into the documentation. # The default value is: NO. -INLINE_SOURCES = NO +INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any # special comment blocks from generated source code fragments. Normal C, C++ and # Fortran comments will always remain visible. # The default value is: YES. -STRIP_CODE_COMMENTS = YES +STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES then for each documented # entity all documented functions referencing it will be listed. @@ -1147,7 +1170,7 @@ REFERENCED_BY_RELATION = NO # all documented entities called/used by that function will be listed. # The default value is: NO. -REFERENCES_RELATION = NO +REFERENCES_RELATION = NO # If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set # to YES then the hyperlinks from functions in REFERENCES_RELATION and @@ -1165,7 +1188,7 @@ REFERENCES_LINK_SOURCE = YES # The default value is: YES. # This tag requires that the tag SOURCE_BROWSER is set to YES. -SOURCE_TOOLTIPS = YES +SOURCE_TOOLTIPS = YES # If the USE_HTAGS tag is set to YES then the references to source code will # point to the HTML generated by the htags(1) tool instead of doxygen built-in @@ -1187,7 +1210,7 @@ SOURCE_TOOLTIPS = YES # The default value is: NO. # This tag requires that the tag SOURCE_BROWSER is set to YES. -USE_HTAGS = NO +USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a # verbatim copy of the header file for each class for which an include is @@ -1195,7 +1218,7 @@ USE_HTAGS = NO # See also: Section \class. # The default value is: YES. -VERBATIM_HEADERS = NO +VERBATIM_HEADERS = NO # If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the # clang parser (see: @@ -1214,7 +1237,7 @@ CLANG_ASSISTED_PARSING = NO # The default value is: YES. # This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. -CLANG_ADD_INC_PATHS = YES +CLANG_ADD_INC_PATHS = YES # If clang assisted parsing is enabled you can provide the compiler with command # line options that you would normally use when invoking the compiler. Note that @@ -1222,7 +1245,7 @@ CLANG_ADD_INC_PATHS = YES # specified with INPUT and INCLUDE_PATH. # This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. -CLANG_OPTIONS = +CLANG_OPTIONS = # If clang assisted parsing is enabled you can provide the clang parser with the # path to the directory containing a file called compile_commands.json. This @@ -1235,7 +1258,7 @@ CLANG_OPTIONS = # Note: The availability of this option depends on whether or not doxygen was # generated with the -Duse_libclang=ON option for CMake. -CLANG_DATABASE_PATH = +CLANG_DATABASE_PATH = #--------------------------------------------------------------------------- # Configuration options related to the alphabetical class index @@ -1246,7 +1269,7 @@ CLANG_DATABASE_PATH = # classes, structs, unions or interfaces. # The default value is: YES. -ALPHABETICAL_INDEX = YES +ALPHABETICAL_INDEX = YES # The IGNORE_PREFIX tag can be used to specify a prefix (or a list of prefixes) # that should be ignored while generating the index headers. The IGNORE_PREFIX @@ -1255,7 +1278,7 @@ ALPHABETICAL_INDEX = YES # after removing the prefix. # This tag requires that the tag ALPHABETICAL_INDEX is set to YES. -IGNORE_PREFIX = +IGNORE_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the HTML output @@ -1264,7 +1287,7 @@ IGNORE_PREFIX = # If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output # The default value is: YES. -GENERATE_HTML = YES +GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of @@ -1272,14 +1295,14 @@ GENERATE_HTML = YES # The default directory is: html. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_OUTPUT = html +HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for each # generated HTML page (for example: .htm, .php, .asp). # The default value is: .html. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_FILE_EXTENSION = .html +HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a user-defined HTML header file for # each generated HTML page. If the tag is left blank doxygen will generate a @@ -1299,7 +1322,7 @@ HTML_FILE_EXTENSION = .html # of the possible markers and block names see the documentation. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_HEADER = +HTML_HEADER = # The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each # generated HTML page. If the tag is left blank doxygen will generate a standard @@ -1309,7 +1332,7 @@ HTML_HEADER = # that doxygen normally uses. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_FOOTER = +HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading style # sheet that is used by each HTML page. It can be used to fine-tune the look of @@ -1321,7 +1344,7 @@ HTML_FOOTER = # obsolete. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_STYLESHEET = +HTML_STYLESHEET = # The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined # cascading style sheets that are included after the standard style sheets @@ -1339,7 +1362,7 @@ HTML_STYLESHEET = # documentation. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_EXTRA_STYLESHEET = +HTML_EXTRA_STYLESHEET = support/doxygen/css/doxygen-awesome.css # The HTML_EXTRA_FILES tag can be used to specify one or more extra images or # other source files which should be copied to the HTML output directory. Note @@ -1349,7 +1372,7 @@ HTML_EXTRA_STYLESHEET = # files will be copied as-is; there are no commands or markers available. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_EXTRA_FILES = +HTML_EXTRA_FILES = # The HTML_COLORSTYLE tag can be used to specify if the generated HTML output # should be rendered with a dark or light theme. @@ -1362,7 +1385,7 @@ HTML_EXTRA_FILES = # The default value is: AUTO_LIGHT. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_COLORSTYLE = DARK +HTML_COLORSTYLE = DARK # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen # will adjust the colors in the style sheet and background images according to @@ -1373,7 +1396,7 @@ HTML_COLORSTYLE = DARK # Minimum value: 0, maximum value: 359, default value: 220. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_COLORSTYLE_HUE = 225 +HTML_COLORSTYLE_HUE = 225 # The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors # in the HTML output. For a value of 0 the output will use gray-scales only. A @@ -1381,7 +1404,7 @@ HTML_COLORSTYLE_HUE = 225 # Minimum value: 0, maximum value: 255, default value: 100. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_COLORSTYLE_SAT = 18 +HTML_COLORSTYLE_SAT = 18 # The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the # luminance component of the colors in the HTML output. Values below 100 @@ -1392,16 +1415,7 @@ HTML_COLORSTYLE_SAT = 18 # Minimum value: 40, maximum value: 240, default value: 80. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_COLORSTYLE_GAMMA = 100 - -# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML -# page will contain the date and time when the page was generated. Setting this -# to YES can help to show when doxygen was last run and thus if the -# documentation is up to date. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_TIMESTAMP = YES +HTML_COLORSTYLE_GAMMA = 100 # If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML # documentation will contain a main index with vertical navigation menus that @@ -1412,7 +1426,7 @@ HTML_TIMESTAMP = YES # The default value is: YES. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_DYNAMIC_MENUS = YES +HTML_DYNAMIC_MENUS = YES # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the @@ -1420,7 +1434,14 @@ HTML_DYNAMIC_MENUS = YES # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_DYNAMIC_SECTIONS = YES +HTML_DYNAMIC_SECTIONS = YES + +# If the HTML_CODE_FOLDING tag is set to YES then classes and functions can be +# dynamically folded and expanded in the generated HTML source code. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_CODE_FOLDING = YES # With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries # shown in the various tree structured indices initially; the user can expand @@ -1448,7 +1469,7 @@ HTML_INDEX_NUM_ENTRIES = 100 # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. -GENERATE_DOCSET = NO +GENERATE_DOCSET = NO # This tag determines the name of the docset feed. A documentation feed provides # an umbrella under which multiple documentation sets from a single provider @@ -1456,14 +1477,14 @@ GENERATE_DOCSET = NO # The default value is: Doxygen generated docs. # This tag requires that the tag GENERATE_DOCSET is set to YES. -DOCSET_FEEDNAME = "Doxygen generated docs" +DOCSET_FEEDNAME = "Doxygen generated docs" # This tag determines the URL of the docset feed. A documentation feed provides # an umbrella under which multiple documentation sets from a single provider # (such as a company or product suite) can be grouped. # This tag requires that the tag GENERATE_DOCSET is set to YES. -DOCSET_FEEDURL = +DOCSET_FEEDURL = # This tag specifies a string that should uniquely identify the documentation # set bundle. This should be a reverse domain-name style string, e.g. @@ -1471,7 +1492,7 @@ DOCSET_FEEDURL = # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_DOCSET is set to YES. -DOCSET_BUNDLE_ID = org.doxygen.Project +DOCSET_BUNDLE_ID = org.doxygen.Project # The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify # the documentation publisher. This should be a reverse domain-name style @@ -1479,13 +1500,13 @@ DOCSET_BUNDLE_ID = org.doxygen.Project # The default value is: org.doxygen.Publisher. # This tag requires that the tag GENERATE_DOCSET is set to YES. -DOCSET_PUBLISHER_ID = org.doxygen.Publisher +DOCSET_PUBLISHER_ID = org.doxygen.Publisher # The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. # The default value is: Publisher. # This tag requires that the tag GENERATE_DOCSET is set to YES. -DOCSET_PUBLISHER_NAME = Publisher +DOCSET_PUBLISHER_NAME = Publisher # If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three # additional HTML index files: index.hhp, index.hhc, and index.hhk. The @@ -1507,14 +1528,14 @@ DOCSET_PUBLISHER_NAME = Publisher # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. -GENERATE_HTMLHELP = NO +GENERATE_HTMLHELP = NO # The CHM_FILE tag can be used to specify the file name of the resulting .chm # file. You can add a path in front of the file if the result should not be # written to the html output directory. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. -CHM_FILE = +CHM_FILE = # The HHC_LOCATION tag can be used to specify the location (absolute path # including file name) of the HTML help compiler (hhc.exe). If non-empty, @@ -1522,20 +1543,20 @@ CHM_FILE = # The file has to be specified with full path. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. -HHC_LOCATION = +HHC_LOCATION = # The GENERATE_CHI flag controls if a separate .chi index file is generated # (YES) or that it should be included in the main .chm file (NO). # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. -GENERATE_CHI = NO +GENERATE_CHI = NO # The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) # and project file content. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. -CHM_INDEX_ENCODING = +CHM_INDEX_ENCODING = # The BINARY_TOC flag controls whether a binary table of contents is generated # (YES) or a normal table of contents (NO) in the .chm file. Furthermore it @@ -1543,14 +1564,24 @@ CHM_INDEX_ENCODING = # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. -BINARY_TOC = NO +BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members to # the table of contents of the HTML help documentation and to the tree view. # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. -TOC_EXPAND = NO +TOC_EXPAND = NO + +# The SITEMAP_URL tag is used to specify the full URL of the place where the +# generated documentation will be placed on the server by the user during the +# deployment of the documentation. The generated sitemap is called sitemap.xml +# and placed on the directory specified by HTML_OUTPUT. In case no SITEMAP_URL +# is specified no sitemap is generated. For information about the sitemap +# protocol see https://www.sitemaps.org +# This tag requires that the tag GENERATE_HTML is set to YES. + +SITEMAP_URL = # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and # QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that @@ -1559,14 +1590,14 @@ TOC_EXPAND = NO # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. -GENERATE_QHP = NO +GENERATE_QHP = NO # If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify # the file name of the resulting .qch file. The path specified is relative to # the HTML output folder. # This tag requires that the tag GENERATE_QHP is set to YES. -QCH_FILE = +QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help # Project output. For more information please see Qt Help Project / Namespace @@ -1575,7 +1606,7 @@ QCH_FILE = # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_QHP is set to YES. -QHP_NAMESPACE = org.doxygen.Project +QHP_NAMESPACE = org.doxygen.Project # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt # Help Project output. For more information please see Qt Help Project / Virtual @@ -1584,7 +1615,7 @@ QHP_NAMESPACE = org.doxygen.Project # The default value is: doc. # This tag requires that the tag GENERATE_QHP is set to YES. -QHP_VIRTUAL_FOLDER = doc +QHP_VIRTUAL_FOLDER = doc # If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom # filter to add. For more information please see Qt Help Project / Custom @@ -1592,7 +1623,7 @@ QHP_VIRTUAL_FOLDER = doc # https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters). # This tag requires that the tag GENERATE_QHP is set to YES. -QHP_CUST_FILTER_NAME = +QHP_CUST_FILTER_NAME = # The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the # custom filter to add. For more information please see Qt Help Project / Custom @@ -1600,21 +1631,21 @@ QHP_CUST_FILTER_NAME = # https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters). # This tag requires that the tag GENERATE_QHP is set to YES. -QHP_CUST_FILTER_ATTRS = +QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this # project's filter section matches. Qt Help Project / Filter Attributes (see: # https://doc.qt.io/archives/qt-4.8/qthelpproject.html#filter-attributes). # This tag requires that the tag GENERATE_QHP is set to YES. -QHP_SECT_FILTER_ATTRS = +QHP_SECT_FILTER_ATTRS = # The QHG_LOCATION tag can be used to specify the location (absolute path # including file name) of Qt's qhelpgenerator. If non-empty doxygen will try to # run qhelpgenerator on the generated .qhp file. # This tag requires that the tag GENERATE_QHP is set to YES. -QHG_LOCATION = +QHG_LOCATION = # If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be # generated, together with the HTML files, they form an Eclipse help plugin. To @@ -1626,7 +1657,7 @@ QHG_LOCATION = # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. -GENERATE_ECLIPSEHELP = NO +GENERATE_ECLIPSEHELP = NO # A unique identifier for the Eclipse help plugin. When installing the plugin # the directory name containing the HTML and XML files should also have this @@ -1634,7 +1665,7 @@ GENERATE_ECLIPSEHELP = NO # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. -ECLIPSE_DOC_ID = org.doxygen.Project +ECLIPSE_DOC_ID = org.doxygen.Project # If you want full control over the layout of the generated HTML pages it might # be necessary to disable the index and replace it with your own. The @@ -1645,7 +1676,7 @@ ECLIPSE_DOC_ID = org.doxygen.Project # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. -DISABLE_INDEX = NO +DISABLE_INDEX = NO # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index # structure should be generated to display hierarchical information. If the tag @@ -1662,7 +1693,7 @@ DISABLE_INDEX = NO # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. -GENERATE_TREEVIEW = YES +GENERATE_TREEVIEW = YES # When both GENERATE_TREEVIEW and DISABLE_INDEX are set to YES, then the # FULL_SIDEBAR option determines if the side bar is limited to only the treeview @@ -1674,7 +1705,7 @@ GENERATE_TREEVIEW = YES # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. -FULL_SIDEBAR = NO +FULL_SIDEBAR = NO # The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that # doxygen will group on one line in the generated HTML documentation. @@ -1684,28 +1715,28 @@ FULL_SIDEBAR = NO # Minimum value: 0, maximum value: 20, default value: 4. # This tag requires that the tag GENERATE_HTML is set to YES. -ENUM_VALUES_PER_LINE = 6 +ENUM_VALUES_PER_LINE = 6 # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used # to set the initial width (in pixels) of the frame in which the tree is shown. # Minimum value: 0, maximum value: 1500, default value: 250. # This tag requires that the tag GENERATE_HTML is set to YES. -TREEVIEW_WIDTH = 300 +TREEVIEW_WIDTH = 300 # If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to # external symbols imported via tag files in a separate window. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. -EXT_LINKS_IN_WINDOW = NO +EXT_LINKS_IN_WINDOW = NO # If the OBFUSCATE_EMAILS tag is set to YES, doxygen will obfuscate email # addresses. # The default value is: YES. # This tag requires that the tag GENERATE_HTML is set to YES. -OBFUSCATE_EMAILS = NO +OBFUSCATE_EMAILS = NO # If the HTML_FORMULA_FORMAT option is set to svg, doxygen will use the pdf2svg # tool (see https://github.com/dawbarton/pdf2svg) or inkscape (see @@ -1716,7 +1747,7 @@ OBFUSCATE_EMAILS = NO # The default value is: png. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_FORMULA_FORMAT = png +HTML_FORMULA_FORMAT = png # Use this tag to change the font size of LaTeX formulas included as images in # the HTML documentation. When you change the font size after a successful @@ -1725,13 +1756,13 @@ HTML_FORMULA_FORMAT = png # Minimum value: 8, maximum value: 50, default value: 10. # This tag requires that the tag GENERATE_HTML is set to YES. -FORMULA_FONTSIZE = 10 +FORMULA_FONTSIZE = 10 # The FORMULA_MACROFILE can contain LaTeX \newcommand and \renewcommand commands # to create new LaTeX commands to be used in formulas as building blocks. See # the section "Including formulas" for details. -FORMULA_MACROFILE = +FORMULA_MACROFILE = # Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see # https://www.mathjax.org) which uses client side JavaScript for the rendering @@ -1742,7 +1773,7 @@ FORMULA_MACROFILE = # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. -USE_MATHJAX = NO +USE_MATHJAX = NO # With MATHJAX_VERSION it is possible to specify the MathJax version to be used. # Note that the different versions of MathJax have different requirements with @@ -1753,7 +1784,7 @@ USE_MATHJAX = NO # The default value is: MathJax_2. # This tag requires that the tag USE_MATHJAX is set to YES. -MATHJAX_VERSION = MathJax_2 +MATHJAX_VERSION = MathJax_2 # When MathJax is enabled you can set the default output format to be used for # the MathJax output. For more details about the output format see MathJax @@ -1770,7 +1801,7 @@ MATHJAX_VERSION = MathJax_2 # The default value is: HTML-CSS. # This tag requires that the tag USE_MATHJAX is set to YES. -MATHJAX_FORMAT = HTML-CSS +MATHJAX_FORMAT = HTML-CSS # When MathJax is enabled you need to specify the location relative to the HTML # output directory using the MATHJAX_RELPATH option. The destination directory @@ -1784,7 +1815,7 @@ MATHJAX_FORMAT = HTML-CSS # - in case of MathJax version 3: https://cdn.jsdelivr.net/npm/mathjax@3 # This tag requires that the tag USE_MATHJAX is set to YES. -MATHJAX_RELPATH = +MATHJAX_RELPATH = # The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax # extension names that should be enabled during MathJax rendering. For example @@ -1796,7 +1827,7 @@ MATHJAX_RELPATH = # MATHJAX_EXTENSIONS = ams # This tag requires that the tag USE_MATHJAX is set to YES. -MATHJAX_EXTENSIONS = +MATHJAX_EXTENSIONS = # The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces # of code that will be used on startup of the MathJax code. See the MathJax site @@ -1805,7 +1836,7 @@ MATHJAX_EXTENSIONS = # example see the documentation. # This tag requires that the tag USE_MATHJAX is set to YES. -MATHJAX_CODEFILE = +MATHJAX_CODEFILE = # When the SEARCHENGINE tag is enabled doxygen will generate a search box for # the HTML output. The underlying search engine uses javascript and DHTML and @@ -1826,7 +1857,7 @@ MATHJAX_CODEFILE = # The default value is: YES. # This tag requires that the tag GENERATE_HTML is set to YES. -SEARCHENGINE = YES +SEARCHENGINE = YES # When the SERVER_BASED_SEARCH tag is enabled the search engine will be # implemented using a web server instead of a web client using JavaScript. There @@ -1838,7 +1869,7 @@ SEARCHENGINE = YES # The default value is: NO. # This tag requires that the tag SEARCHENGINE is set to YES. -SERVER_BASED_SEARCH = NO +SERVER_BASED_SEARCH = NO # When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP # script for searching. Instead the search results are written to an XML file @@ -1855,7 +1886,7 @@ SERVER_BASED_SEARCH = NO # The default value is: NO. # This tag requires that the tag SEARCHENGINE is set to YES. -EXTERNAL_SEARCH = NO +EXTERNAL_SEARCH = NO # The SEARCHENGINE_URL should point to a search engine hosted by a web server # which will return the search results when EXTERNAL_SEARCH is enabled. @@ -1867,7 +1898,7 @@ EXTERNAL_SEARCH = NO # details. # This tag requires that the tag SEARCHENGINE is set to YES. -SEARCHENGINE_URL = +SEARCHENGINE_URL = # When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed # search data is written to a file for indexing by an external tool. With the @@ -1875,7 +1906,7 @@ SEARCHENGINE_URL = # The default file is: searchdata.xml. # This tag requires that the tag SEARCHENGINE is set to YES. -SEARCHDATA_FILE = searchdata.xml +SEARCHDATA_FILE = searchdata.xml # When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the # EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is @@ -1883,7 +1914,7 @@ SEARCHDATA_FILE = searchdata.xml # projects and redirect the results back to the right project. # This tag requires that the tag SEARCHENGINE is set to YES. -EXTERNAL_SEARCH_ID = +EXTERNAL_SEARCH_ID = # The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen # projects other than the one defined by this configuration file, but that are @@ -1893,7 +1924,7 @@ EXTERNAL_SEARCH_ID = # EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... # This tag requires that the tag SEARCHENGINE is set to YES. -EXTRA_SEARCH_MAPPINGS = +EXTRA_SEARCH_MAPPINGS = #--------------------------------------------------------------------------- # Configuration options related to the LaTeX output @@ -1902,7 +1933,7 @@ EXTRA_SEARCH_MAPPINGS = # If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. # The default value is: YES. -GENERATE_LATEX = NO +GENERATE_LATEX = NO # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of @@ -1910,7 +1941,7 @@ GENERATE_LATEX = NO # The default directory is: latex. # This tag requires that the tag GENERATE_LATEX is set to YES. -LATEX_OUTPUT = latex +LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. @@ -1922,7 +1953,7 @@ LATEX_OUTPUT = latex # the output language. # This tag requires that the tag GENERATE_LATEX is set to YES. -LATEX_CMD_NAME = +LATEX_CMD_NAME = # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate # index for LaTeX. @@ -1932,7 +1963,7 @@ LATEX_CMD_NAME = # The default file is: makeindex. # This tag requires that the tag GENERATE_LATEX is set to YES. -MAKEINDEX_CMD_NAME = makeindex +MAKEINDEX_CMD_NAME = makeindex # The LATEX_MAKEINDEX_CMD tag can be used to specify the command name to # generate index for LaTeX. In case there is no backslash (\) as first character @@ -1942,7 +1973,7 @@ MAKEINDEX_CMD_NAME = makeindex # The default value is: makeindex. # This tag requires that the tag GENERATE_LATEX is set to YES. -LATEX_MAKEINDEX_CMD = makeindex +LATEX_MAKEINDEX_CMD = makeindex # If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX # documents. This may be useful for small projects and may help to save some @@ -1950,7 +1981,7 @@ LATEX_MAKEINDEX_CMD = makeindex # The default value is: NO. # This tag requires that the tag GENERATE_LATEX is set to YES. -COMPACT_LATEX = NO +COMPACT_LATEX = NO # The PAPER_TYPE tag can be used to set the paper type that is used by the # printer. @@ -1959,7 +1990,7 @@ COMPACT_LATEX = NO # The default value is: a4. # This tag requires that the tag GENERATE_LATEX is set to YES. -PAPER_TYPE = a4 +PAPER_TYPE = a4 # The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names # that should be included in the LaTeX output. The package can be specified just @@ -1971,7 +2002,7 @@ PAPER_TYPE = a4 # If left blank no extra packages will be included. # This tag requires that the tag GENERATE_LATEX is set to YES. -EXTRA_PACKAGES = +EXTRA_PACKAGES = # The LATEX_HEADER tag can be used to specify a user-defined LaTeX header for # the generated LaTeX document. The header should contain everything until the @@ -1988,7 +2019,7 @@ EXTRA_PACKAGES = # description of the possible markers and block names see the documentation. # This tag requires that the tag GENERATE_LATEX is set to YES. -LATEX_HEADER = +LATEX_HEADER = # The LATEX_FOOTER tag can be used to specify a user-defined LaTeX footer for # the generated LaTeX document. The footer should contain everything after the @@ -2000,7 +2031,7 @@ LATEX_HEADER = # doing! # This tag requires that the tag GENERATE_LATEX is set to YES. -LATEX_FOOTER = +LATEX_FOOTER = # The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined # LaTeX style sheets that are included after the standard style sheets created @@ -2019,7 +2050,7 @@ LATEX_EXTRA_STYLESHEET = # markers available. # This tag requires that the tag GENERATE_LATEX is set to YES. -LATEX_EXTRA_FILES = +LATEX_EXTRA_FILES = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is # prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will @@ -2028,7 +2059,7 @@ LATEX_EXTRA_FILES = # The default value is: YES. # This tag requires that the tag GENERATE_LATEX is set to YES. -PDF_HYPERLINKS = YES +PDF_HYPERLINKS = YES # If the USE_PDFLATEX tag is set to YES, doxygen will use the engine as # specified with LATEX_CMD_NAME to generate the PDF file directly from the LaTeX @@ -2038,22 +2069,29 @@ PDF_HYPERLINKS = YES # The default value is: YES. # This tag requires that the tag GENERATE_LATEX is set to YES. -USE_PDFLATEX = YES +USE_PDFLATEX = YES -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode -# command to the generated LaTeX files. This will instruct LaTeX to keep running -# if errors occur, instead of asking the user for help. +# The LATEX_BATCHMODE tag signals the behavior of LaTeX in case of an error. +# Possible values are: NO same as ERROR_STOP, YES same as BATCH, BATCH In batch +# mode nothing is printed on the terminal, errors are scrolled as if is +# hit at every error; missing files that TeX tries to input or request from +# keyboard input (\read on a not open input stream) cause the job to abort, +# NON_STOP In nonstop mode the diagnostic message will appear on the terminal, +# but there is no possibility of user interaction just like in batch mode, +# SCROLL In scroll mode, TeX will stop only for missing files to input or if +# keyboard input is necessary and ERROR_STOP In errorstop mode, TeX will stop at +# each error, asking for user intervention. # The default value is: NO. # This tag requires that the tag GENERATE_LATEX is set to YES. -LATEX_BATCHMODE = NO +LATEX_BATCHMODE = NO # If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the # index chapters (such as File Index, Compound Index, etc.) in the output. # The default value is: NO. # This tag requires that the tag GENERATE_LATEX is set to YES. -LATEX_HIDE_INDICES = NO +LATEX_HIDE_INDICES = NO # The LATEX_BIB_STYLE tag can be used to specify the style to use for the # bibliography, e.g. plainnat, or ieeetr. See @@ -2061,15 +2099,7 @@ LATEX_HIDE_INDICES = NO # The default value is: plain. # This tag requires that the tag GENERATE_LATEX is set to YES. -LATEX_BIB_STYLE = plain - -# If the LATEX_TIMESTAMP tag is set to YES then the footer of each generated -# page will contain the date and time when the page was generated. Setting this -# to NO can help when comparing the output of multiple runs. -# The default value is: NO. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -LATEX_TIMESTAMP = NO +LATEX_BIB_STYLE = plain # The LATEX_EMOJI_DIRECTORY tag is used to specify the (relative or absolute) # path from which the emoji images will be read. If a relative path is entered, @@ -2077,7 +2107,7 @@ LATEX_TIMESTAMP = NO # LATEX_OUTPUT directory will be used. # This tag requires that the tag GENERATE_LATEX is set to YES. -LATEX_EMOJI_DIRECTORY = +LATEX_EMOJI_DIRECTORY = #--------------------------------------------------------------------------- # Configuration options related to the RTF output @@ -2088,7 +2118,7 @@ LATEX_EMOJI_DIRECTORY = # readers/editors. # The default value is: NO. -GENERATE_RTF = NO +GENERATE_RTF = NO # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of @@ -2096,7 +2126,7 @@ GENERATE_RTF = NO # The default directory is: rtf. # This tag requires that the tag GENERATE_RTF is set to YES. -RTF_OUTPUT = rtf +RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF # documents. This may be useful for small projects and may help to save some @@ -2104,7 +2134,7 @@ RTF_OUTPUT = rtf # The default value is: NO. # This tag requires that the tag GENERATE_RTF is set to YES. -COMPACT_RTF = NO +COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will # contain hyperlink fields. The RTF file will contain links (just like the HTML @@ -2116,7 +2146,7 @@ COMPACT_RTF = NO # The default value is: NO. # This tag requires that the tag GENERATE_RTF is set to YES. -RTF_HYPERLINKS = NO +RTF_HYPERLINKS = NO # Load stylesheet definitions from file. Syntax is similar to doxygen's # configuration file, i.e. a series of assignments. You only have to provide @@ -2126,14 +2156,14 @@ RTF_HYPERLINKS = NO # default style sheet that doxygen normally uses. # This tag requires that the tag GENERATE_RTF is set to YES. -RTF_STYLESHEET_FILE = +RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an RTF document. Syntax is # similar to doxygen's configuration file. A template extensions file can be # generated using doxygen -e rtf extensionFile. # This tag requires that the tag GENERATE_RTF is set to YES. -RTF_EXTENSIONS_FILE = +RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # Configuration options related to the man page output @@ -2143,7 +2173,7 @@ RTF_EXTENSIONS_FILE = # classes and files. # The default value is: NO. -GENERATE_MAN = NO +GENERATE_MAN = NO # The MAN_OUTPUT tag is used to specify where the man pages will be put. If a # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of @@ -2152,7 +2182,7 @@ GENERATE_MAN = NO # The default directory is: man. # This tag requires that the tag GENERATE_MAN is set to YES. -MAN_OUTPUT = man +MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to the generated # man pages. In case the manual section does not start with a number, the number @@ -2161,14 +2191,14 @@ MAN_OUTPUT = man # The default value is: .3. # This tag requires that the tag GENERATE_MAN is set to YES. -MAN_EXTENSION = .3 +MAN_EXTENSION = .3 # The MAN_SUBDIR tag determines the name of the directory created within # MAN_OUTPUT in which the man pages are placed. If defaults to man followed by # MAN_EXTENSION with the initial . removed. # This tag requires that the tag GENERATE_MAN is set to YES. -MAN_SUBDIR = +MAN_SUBDIR = # If the MAN_LINKS tag is set to YES and doxygen generates man output, then it # will generate one additional man file for each entity documented in the real @@ -2177,7 +2207,7 @@ MAN_SUBDIR = # The default value is: NO. # This tag requires that the tag GENERATE_MAN is set to YES. -MAN_LINKS = NO +MAN_LINKS = NO #--------------------------------------------------------------------------- # Configuration options related to the XML output @@ -2187,7 +2217,7 @@ MAN_LINKS = NO # captures the structure of the code including all documentation. # The default value is: NO. -GENERATE_XML = NO +GENERATE_XML = NO # The XML_OUTPUT tag is used to specify where the XML pages will be put. If a # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of @@ -2195,7 +2225,7 @@ GENERATE_XML = NO # The default directory is: xml. # This tag requires that the tag GENERATE_XML is set to YES. -XML_OUTPUT = xml +XML_OUTPUT = xml # If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program # listings (including syntax highlighting and cross-referencing information) to @@ -2204,7 +2234,7 @@ XML_OUTPUT = xml # The default value is: YES. # This tag requires that the tag GENERATE_XML is set to YES. -XML_PROGRAMLISTING = YES +XML_PROGRAMLISTING = YES # If the XML_NS_MEMB_FILE_SCOPE tag is set to YES, doxygen will include # namespace members in file scope as well, matching the HTML output. @@ -2221,7 +2251,7 @@ XML_NS_MEMB_FILE_SCOPE = NO # that can be used to generate PDF. # The default value is: NO. -GENERATE_DOCBOOK = NO +GENERATE_DOCBOOK = NO # The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be put in @@ -2229,7 +2259,7 @@ GENERATE_DOCBOOK = NO # The default directory is: docbook. # This tag requires that the tag GENERATE_DOCBOOK is set to YES. -DOCBOOK_OUTPUT = docbook +DOCBOOK_OUTPUT = docbook #--------------------------------------------------------------------------- # Configuration options for the AutoGen Definitions output @@ -2241,12 +2271,34 @@ DOCBOOK_OUTPUT = docbook # is still experimental and incomplete at the moment. # The default value is: NO. -GENERATE_AUTOGEN_DEF = NO +GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # Configuration options related to Sqlite3 output #--------------------------------------------------------------------------- +# If the GENERATE_SQLITE3 tag is set to YES doxygen will generate a Sqlite3 +# database with symbols found by doxygen stored in tables. +# The default value is: NO. + +GENERATE_SQLITE3 = NO + +# The SQLITE3_OUTPUT tag is used to specify where the Sqlite3 database will be +# put. If a relative path is entered the value of OUTPUT_DIRECTORY will be put +# in front of it. +# The default directory is: sqlite3. +# This tag requires that the tag GENERATE_SQLITE3 is set to YES. + +SQLITE3_OUTPUT = sqlite3 + +# The SQLITE3_OVERWRITE_DB tag is set to YES, the existing doxygen_sqlite3.db +# database file will be recreated with each doxygen run. If set to NO, doxygen +# will warn if an a database file is already found and not modify it. +# The default value is: YES. +# This tag requires that the tag GENERATE_SQLITE3 is set to YES. + +SQLITE3_RECREATE_DB = YES + #--------------------------------------------------------------------------- # Configuration options related to the Perl module output #--------------------------------------------------------------------------- @@ -2257,7 +2309,7 @@ GENERATE_AUTOGEN_DEF = NO # Note that this feature is still experimental and incomplete at the moment. # The default value is: NO. -GENERATE_PERLMOD = NO +GENERATE_PERLMOD = NO # If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary # Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI @@ -2265,7 +2317,7 @@ GENERATE_PERLMOD = NO # The default value is: NO. # This tag requires that the tag GENERATE_PERLMOD is set to YES. -PERLMOD_LATEX = NO +PERLMOD_LATEX = NO # If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely # formatted so it can be parsed by a human reader. This is useful if you want to @@ -2275,7 +2327,7 @@ PERLMOD_LATEX = NO # The default value is: YES. # This tag requires that the tag GENERATE_PERLMOD is set to YES. -PERLMOD_PRETTY = YES +PERLMOD_PRETTY = YES # The names of the make variables in the generated doxyrules.make file are # prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful @@ -2293,7 +2345,7 @@ PERLMOD_MAKEVAR_PREFIX = # C-preprocessor directives found in the sources and include files. # The default value is: YES. -ENABLE_PREPROCESSING = YES +ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names # in the source code. If set to NO, only conditional compilation will be @@ -2302,7 +2354,7 @@ ENABLE_PREPROCESSING = YES # The default value is: NO. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. -MACRO_EXPANSION = YES +MACRO_EXPANSION = YES # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then # the macro expansion is limited to the macros specified with the PREDEFINED and @@ -2310,14 +2362,14 @@ MACRO_EXPANSION = YES # The default value is: NO. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. -EXPAND_ONLY_PREDEF = YES +EXPAND_ONLY_PREDEF = YES # If the SEARCH_INCLUDES tag is set to YES, the include files in the # INCLUDE_PATH will be searched if a #include is found. # The default value is: YES. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. -SEARCH_INCLUDES = YES +SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by the @@ -2325,7 +2377,7 @@ SEARCH_INCLUDES = YES # RECURSIVE has no effect here. # This tag requires that the tag SEARCH_INCLUDES is set to YES. -INCLUDE_PATH = +INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the @@ -2333,7 +2385,7 @@ INCLUDE_PATH = # used. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. -INCLUDE_FILE_PATTERNS = +INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that are # defined before the preprocessor is started (similar to the -D option of e.g. @@ -2343,7 +2395,7 @@ INCLUDE_FILE_PATTERNS = # recursively expanded use the := operator instead of the = operator. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. -PREDEFINED = +PREDEFINED = # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this # tag can be used to specify a list of macro names that should be expanded. The @@ -2352,7 +2404,7 @@ PREDEFINED = # definition found in the source code. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. -EXPAND_AS_DEFINED = YES +EXPAND_AS_DEFINED = YES # If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will # remove all references to function-like macros that are alone on a line, have @@ -2362,7 +2414,7 @@ EXPAND_AS_DEFINED = YES # The default value is: YES. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. -SKIP_FUNCTION_MACROS = NO +SKIP_FUNCTION_MACROS = NO #--------------------------------------------------------------------------- # Configuration options related to external references @@ -2381,51 +2433,44 @@ SKIP_FUNCTION_MACROS = NO # the path). If a tag file is not located in the directory in which doxygen is # run, you must also specify the path to the tagfile here. -TAGFILES = +TAGFILES = # When a file name is specified after GENERATE_TAGFILE, doxygen will create a # tag file that is based on the input files it reads. See section "Linking to # external documentation" for more information about the usage of tag files. -GENERATE_TAGFILE = +GENERATE_TAGFILE = -# If the ALLEXTERNALS tag is set to YES, all external class will be listed in -# the class index. If set to NO, only the inherited external classes will be -# listed. +# If the ALLEXTERNALS tag is set to YES, all external classes and namespaces +# will be listed in the class and namespace index. If set to NO, only the +# inherited external classes will be listed. # The default value is: NO. -ALLEXTERNALS = NO +ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed # in the modules index. If set to NO, only the current project's groups will be # listed. # The default value is: YES. -EXTERNAL_GROUPS = YES +EXTERNAL_GROUPS = YES # If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in # the related pages index. If set to NO, only the current project's pages will # be listed. # The default value is: YES. -EXTERNAL_PAGES = YES +EXTERNAL_PAGES = YES #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- -# You can include diagrams made with dia in doxygen documentation. Doxygen will -# then run dia to produce the diagram and insert it in the documentation. The -# DIA_PATH tag allows you to specify the directory where the dia binary resides. -# If left empty dia is assumed to be found in the default search path. - -DIA_PATH = - # If set to YES the inheritance and collaboration graphs will hide inheritance # and usage relations if the target is undocumented or is not a class. # The default value is: YES. -HIDE_UNDOC_RELATIONS = YES +HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz (see: @@ -2434,7 +2479,7 @@ HIDE_UNDOC_RELATIONS = YES # set to NO # The default value is: NO. -HAVE_DOT = NO +HAVE_DOT = NO # The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed # to run in parallel. When set to 0 doxygen will base this on the number of @@ -2444,7 +2489,7 @@ HAVE_DOT = NO # Minimum value: 0, maximum value: 32, default value: 0. # This tag requires that the tag HAVE_DOT is set to YES. -DOT_NUM_THREADS = 0 +DOT_NUM_THREADS = 0 # DOT_COMMON_ATTR is common attributes for nodes, edges and labels of # subgraphs. When you want a differently looking font in the dot files that @@ -2457,7 +2502,7 @@ DOT_NUM_THREADS = 0 # The default value is: fontname=Helvetica,fontsize=10. # This tag requires that the tag HAVE_DOT is set to YES. -DOT_COMMON_ATTR = "fontname=Helvetica,fontsize=10" +DOT_COMMON_ATTR = "fontname=Helvetica,fontsize=10" # DOT_EDGE_ATTR is concatenated with DOT_COMMON_ATTR. For elegant style you can # add 'arrowhead=open, arrowtail=open, arrowsize=0.5'. -o . The external tool should support +# output file formats "png", "eps", "svg", and "ismap". + +MSCGEN_TOOL = + +# The MSCFILE_DIRS tag can be used to specify one or more directories that +# contain msc files that are included in the documentation (see the \mscfile +# command). + +MSCFILE_DIRS = diff --git a/Jenkinsfile b/Jenkinsfile index 69935d0b96..5a435c5893 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -51,16 +51,15 @@ parallel tools: { stage('tools/scm') { deleteDir(); gitHelper.checkoutGit(url, branch, false); - helper.createDirectory('build'); } stage('tools/cppcheck') { sh( - script: 'cppcheck --enable=all --xml --xml-version=2 -i ext --suppressions-list=support/cppcheck/suppressions.txt include modules src tests 2> build/cppcheck.xml', + script: 'cppcheck --enable=all --xml --xml-version=2 -i ext --suppressions-list=support/cppcheck/suppressions.txt include modules src tests 2> cppcheck.xml', label: 'CPPCheck' ) recordIssues( id: 'tools-cppcheck', - tool: cppCheck(pattern: 'build/cppcheck.xml') + tool: cppCheck(pattern: 'cppcheck.xml') ) } cleanWs() @@ -112,50 +111,50 @@ linux_gcc_make: { } // node('linux') } }, -linux_gcc_ninja: { - if (env.USE_BUILD_OS_LINUX == 'true') { - node('linux-gcc') { - stage('linux-gcc-ninja/scm') { - deleteDir(); - gitHelper.checkoutGit(url, branch); - } - - stage('linux-gcc-ninja/build') { - def cmakeCompileOptions = moduleCMakeFlags(); - cmakeCompileOptions += '-DMAKE_BUILD_TYPE=Release'; - // Not sure why the linking of OpenSpaceTest takes so long - compileHelper.build(compileHelper.Ninja(), compileHelper.Gcc(), cmakeCompileOptions, '', 'build-ninja'); - } - - if (env.RUN_UNIT_TESTS == 'true') { - stage('linux-gcc-ninja/test-codegen') { - timeout(time: 2, unit: 'MINUTES') { - testHelper.runUnitTests('bin/codegentest'); - } - } - - stage('linux-gcc-ninja/test-sgct') { - timeout(time: 2, unit: 'MINUTES') { - testHelper.runUnitTests('bin/SGCTTest'); - } - } - - stage('linux-gcc-ninja/test-ghoul') { - timeout(time: 2, unit: 'MINUTES') { - testHelper.runUnitTests('bin/GhoulTest'); - } - } - - stage('linux-gcc-ninja/test-openspace') { - timeout(time: 2, unit: 'MINUTES') { - testHelper.runUnitTests('bin/OpenSpaceTest'); - } - } - } - cleanWs() - } // node('linux') - } -}, +// linux_gcc_ninja: { +// if (env.USE_BUILD_OS_LINUX == 'true') { +// node('linux-gcc') { +// stage('linux-gcc-ninja/scm') { +// deleteDir(); +// gitHelper.checkoutGit(url, branch); +// } +// +// stage('linux-gcc-ninja/build') { +// def cmakeCompileOptions = moduleCMakeFlags(); +// cmakeCompileOptions += '-DMAKE_BUILD_TYPE=Release'; +// // Not sure why the linking of OpenSpaceTest takes so long +// compileHelper.build(compileHelper.Ninja(), compileHelper.Gcc(), cmakeCompileOptions, '', 'build-ninja'); +// } +// +// if (env.RUN_UNIT_TESTS == 'true') { +// stage('linux-gcc-ninja/test-codegen') { +// timeout(time: 2, unit: 'MINUTES') { +// testHelper.runUnitTests('bin/codegentest'); +// } +// } +// +// stage('linux-gcc-ninja/test-sgct') { +// timeout(time: 2, unit: 'MINUTES') { +// testHelper.runUnitTests('bin/SGCTTest'); +// } +// } +// +// stage('linux-gcc-ninja/test-ghoul') { +// timeout(time: 2, unit: 'MINUTES') { +// testHelper.runUnitTests('bin/GhoulTest'); +// } +// } +// +// stage('linux-gcc-ninja/test-openspace') { +// timeout(time: 2, unit: 'MINUTES') { +// testHelper.runUnitTests('bin/OpenSpaceTest'); +// } +// } +// } +// cleanWs() +// } // node('linux') +// } +// }, linux_clang_make: { if (env.USE_BUILD_OS_LINUX == 'true') { node('linux-clang') { @@ -201,50 +200,50 @@ linux_clang_make: { } // node('linux') } }, -linux_clang_ninja: { - if (env.USE_BUILD_OS_LINUX == 'true') { - node('linux-clang') { - stage('linux-clang-ninja/scm') { - deleteDir() - gitHelper.checkoutGit(url, branch); - } - - stage('linux-clang-ninja/build') { - def cmakeCompileOptions = moduleCMakeFlags() - cmakeCompileOptions += '-DMAKE_BUILD_TYPE=Release' - // Not sure why the linking of OpenSpaceTest takes so long - compileHelper.build(compileHelper.Ninja(), compileHelper.Clang(), cmakeCompileOptions, '', 'build-ninja'); - } - - if (env.RUN_UNIT_TESTS == 'true') { - stage('linux-clang-ninja/test-codegen') { - timeout(time: 2, unit: 'MINUTES') { - testHelper.runUnitTests('bin/codegentest'); - } - } - - stage('linux-clang-ninja/test-sgct') { - timeout(time: 2, unit: 'MINUTES') { - testHelper.runUnitTests('bin/SGCTTest'); - } - } - - stage('linux-clang-ninja/test-ghoul') { - timeout(time: 2, unit: 'MINUTES') { - testHelper.runUnitTests('bin/GhoulTest'); - } - } - - stage('linux-clang-ninja/test-openspace') { - timeout(time: 2, unit: 'MINUTES') { - testHelper.runUnitTests('bin/OpenSpaceTest'); - } - } - } - cleanWs() - } // node('linux') - } -}, +// linux_clang_ninja: { +// if (env.USE_BUILD_OS_LINUX == 'true') { +// node('linux-clang') { +// stage('linux-clang-ninja/scm') { +// deleteDir() +// gitHelper.checkoutGit(url, branch); +// } +// +// stage('linux-clang-ninja/build') { +// def cmakeCompileOptions = moduleCMakeFlags() +// cmakeCompileOptions += '-DMAKE_BUILD_TYPE=Release' +// // Not sure why the linking of OpenSpaceTest takes so long +// compileHelper.build(compileHelper.Ninja(), compileHelper.Clang(), cmakeCompileOptions, '', 'build-ninja'); +// } +// +// if (env.RUN_UNIT_TESTS == 'true') { +// stage('linux-clang-ninja/test-codegen') { +// timeout(time: 2, unit: 'MINUTES') { +// testHelper.runUnitTests('bin/codegentest'); +// } +// } +// +// stage('linux-clang-ninja/test-sgct') { +// timeout(time: 2, unit: 'MINUTES') { +// testHelper.runUnitTests('bin/SGCTTest'); +// } +// } +// +// stage('linux-clang-ninja/test-ghoul') { +// timeout(time: 2, unit: 'MINUTES') { +// testHelper.runUnitTests('bin/GhoulTest'); +// } +// } +// +// stage('linux-clang-ninja/test-openspace') { +// timeout(time: 2, unit: 'MINUTES') { +// testHelper.runUnitTests('bin/OpenSpaceTest'); +// } +// } +// } +// cleanWs() +// } // node('linux') +// } +// }, windows_msvc: { if (env.USE_BUILD_OS_WINDOWS == 'true') { node('windows') { diff --git a/LICENSE.md b/LICENSE.md index 7c377d85c8..5d0c0b2827 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,4 +1,4 @@ -Copyright (c) 2014-2023 +Copyright (c) 2014-2025 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 @@ -16,3 +16,6 @@ PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIG 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. + +See the THIRD_PARTY_LICENSES.md for a list an acknowledgement of all external libraries that +SGCT uses. diff --git a/README.md b/README.md index c5f30645b6..7d004cea5a 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ ![OpenSpace Logo](/data/openspace-horiz-logo-crop.png) -[OpenSpace](http://openspaceproject.com) is an open source, non-commercial, and freely available interactive data visualization software designed to visualize the entire known universe and portray our ongoing efforts to investigate the cosmos. Bringing the latest techniques from data visualization research to the general public, OpenSpace supports interactive presentation of dynamic data from observations, simulations, and space mission planning and operations. The software works on multiple operating systems (Windows, Linux, MacOS) with an extensible architecture capable of powering both personal computers and also high resolution tiled displays and planetarium domes. In addition, OpenSpace enables simultaneous connections across the globe creating opportunity for shared experiences among audiences worldwide. The target audience of the software reaches from the general public who wishes to explore our universe, enthusiasts interested in hacking the underlying components in OpenSpace to create unique experiences, informal science institutions wishing to create a low-cost, yet powerful exhibition piece, but also scientists desiring to visualize their datasets in a contextualized, powerful software. +[OpenSpace](http://openspaceproject.com) is an open source, non-commercial, and freely available interactive data visualization software designed to visualize the entire known universe and portray our ongoing efforts to investigate the cosmos. Bringing the latest techniques from data visualization research to the general public, OpenSpace supports interactive presentation of dynamic data from observations, simulations, and space mission planning and operations. The software works on multiple operating systems (Windows, Linux, MacOS) with an extensible architecture capable of powering both personal computers and also high resolution tiled displays and planetarium domes. In addition, OpenSpace enables simultaneous connections across the globe creating opportunity for shared experiences among audiences worldwide. The target audience of the software reaches from the general public who wishes to explore our universe, enthusiasts interested in hacking the underlying components in OpenSpace to create unique experiences, informal science institutions wishing to create a low-cost, yet powerful exhibition piece, but also scientists desiring to visualize their datasets in a contextualized, powerful software. [![License](https://img.shields.io/badge/License-MIT-purple.svg?style=flat-square)](LICENSE) [![Download](https://img.shields.io/github/v/tag/OpenSpace/OpenSpace?label=Version&color=maroon&style=flat-square)](https://www.openspaceproject.com/installation) @@ -11,40 +11,54 @@ ![Contributors](https://img.shields.io/github/contributors/OpenSpace/OpenSpace?style=flat-square) ![Commits](https://img.shields.io/github/commit-activity/m/OpenSpace/OpenSpace?color=green&style=flat-square) -![Image](https://github.com/OpenSpace/openspace.github.io/raw/master/assets/images/collection.jpg) +![Image](https://docs.openspaceproject.com/latest/_static/images/collection.jpg) + # Background -OpenSpace started as a collaboration between Sweden's [Linköping University](https://scivis.github.io) (LiU) and the [American Museum of Natural History](https://www.amnh.org) (AMNH). Development of the software began several years ago through a close collaboration with NASA Goddard's [Community Coordinated Modeling Center](https://ccmc.gsfc.nasa.gov) (CCMC) to model space weather forecasting and continued with visualizations of NASA's New Horizons mission to Pluto and ESA's Rosetta mission to 67P/Churyumov-Gerasimenko. This promising set of preliminary work provided a foundation for continued funding from NASA, the Swedish eScience Research Centre, and the Knut and Alice Wallenberg foundation, which has extended the collaboration to include the University of Utah's [Scientific Computing and Imaging](https://www.sci.utah.edu) (SCI) Institute, [New York University](https://www.nyu.edu)'s Tandon School of Engineering, multiple informal science institutions across the world, and multiple, international vendors. +OpenSpace started as a collaboration between Sweden's [Linköping University](https://immvis.github.io) (LiU) and the [American Museum of Natural History](https://www.amnh.org) (AMNH). Development of the software began several years ago through a close collaboration with NASA Goddard's [Community Coordinated Modeling Center](https://ccmc.gsfc.nasa.gov) (CCMC) to model space weather forecasting and continued with visualizations of NASA's New Horizons mission to Pluto and ESA's Rosetta mission to 67P/Churyumov-Gerasimenko. This promising set of preliminary work provided a foundation for continued funding from NASA, the Swedish eScience Research Centre, and the Knut and Alice Wallenberg foundation, which has extended the collaboration to include the University of Utah's [Scientific Computing and Imaging](https://www.sci.utah.edu) (SCI) Institute, [New York University](https://www.nyu.edu)'s Tandon School of Engineering, multiple informal science institutions across the world, and multiple, international vendors. + +![Image](https://docs.openspaceproject.com/latest/_static/images/presentation.jpg) -![Image](https://github.com/OpenSpace/openspace.github.io/raw/master/assets/images/presentation.jpg) # Features Some of the high-level features supported in OpenSpace are: - - AMNH's Digital Universe catalog of extrasolar datasets (stars, galaxies, quasars, ...) - - High-resolution planetary images for major objects in the solar system (Earth, Moon, Mars, Venus, ...) - - Animated 3D models representing space missions (ISS, New Horizons, JWST, ...) - - Support for custom profiles with arbitrary user-defined content - - Ability to drive any type of display environment (flat screen, multi-projector, planetariums, ...) - - Lua and JavaScript interface into the engine allowing highly customized controls - - Native support to export an interactive sessions as individual frames for video export - - much much more (see our [Changelog](http://wiki.openspaceproject.com/docs/general/releases)) + - AMNH's Digital Universe catalog of extrasolar datasets (stars, galaxies, quasars, ...) + - High-resolution planetary images for major objects in the solar system (Earth, Moon, Mars, Venus, ...) + - Animated 3D models representing space missions (ISS, New Horizons, JWST, ...) + - Support for custom profiles with arbitrary user-defined content + - Ability to drive any type of display environment (flat screen, multi-projector, planetariums, ...) + - Lua and JavaScript interface into the engine allowing highly customized controls + - Native support to export an interactive sessions as individual frames for video export + - much much more (see our [Changelog](http://wiki.openspaceproject.com/docs/general/releases)) OpenSpace requires at least support for [OpenGL](https://www.opengl.org/) version 3.3, some custom components require at least version 4.2. -![Image](https://github.com/OpenSpace/openspace.github.io/raw/master/assets/images/display-systems.jpg) +![Image](https://docs.openspaceproject.com/latest/_static/images/display-systems.jpg) + # Getting Started -This repository contains the source code and example profiles for OpenSpace, but does not contain any data. To build and install the application, please check out the [GitHub Wiki](https://github.com/OpenSpace/OpenSpace/wiki). Here, you will find two pages, a [build instruction](https://github.com/OpenSpace/OpenSpace/wiki/Compiling) for all operating systems and then additional instructions for [Windows](https://github.com/OpenSpace/OpenSpace/wiki/Compiling-Windows), [Linux (Ubuntu)](https://github.com/OpenSpace/OpenSpace/wiki/Compiling-Ubuntu), and [MacOS](https://github.com/OpenSpace/OpenSpace/wiki/Compiling-MacOS). Please note that the Apple Silicon series of chips do not support OpenGL natively and Metal 2 does not support `double` precision accuracy (see [here](https://developer.apple.com/metal/Metal-Shading-Language-Specification.pdf) Section 2.1), therefore only the Intel processors for MacOS are supported and maintained. +This repository contains the source code and example profiles for OpenSpace, but does not contain any data. To build and install the application, please check out the [Documentation](https://docs.openspaceproject.com). Here, you will find the build instructions for all operating systems. Please note that the Apple Silicon series of chips do not support OpenGL natively and Metal 2 does not support `double` precision accuracy (see [here](https://developer.apple.com/metal/Metal-Shading-Language-Specification.pdf) Section 2.1), therefore only the Intel processors for MacOS are supported and maintained. Requirements for compiling are: - - CMake version 3.25 or above - - C++ compiler supporting C++20 (MSVC 19.31, GCC11, Clang14, AppleClang 13.1.6) - - [Boost](http://www.boost.org/) - - [Qt](http://www.qt.io/download) + - CMake version 3.25 or above + - C++ compiler supporting C++20/C++23 (Visual Studio 2022 17.11, GCC13, Clang17, AppleClang 15.0.0) + - [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:openspace@amnh.org?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/zt-37niq6y9-T0JaCIk4UoFLI4VF5U9Vsw). -![Image](https://github.com/OpenSpace/openspace.github.io/raw/master/assets/images/himalaya-nkpg-dome.jpg) +## :bulb: Asking Questions +Feel free to create issues for missing features, bug reports, or compile problems or contact us via [email](mailto:support@openspaceproject.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/zt-24uhn3wvo-gCGHgjg2m9tHzKUEb_FyMQ). + +## :heart: Contributing +Any contributions to the software are very welcome and can take a multitude of forms, from reporting a bug, fixing bugs, creating new content, writing new features, and even creating and sharing images and videos you have made with the software. Please feel free to share anything you want in the #sharespace channel on the Slack. + +![Image](https://docs.openspaceproject.com/latest/_static/images/himalaya-nkpg-dome.jpg) + # License -The contents of this repository is under an [MIT license](https://github.com/OpenSpace/OpenSpace/blob/master/LICENSE.md). +The contents of this repository provided under an [MIT license](https://github.com/OpenSpace/OpenSpace/blob/master/LICENSE.md). + + +# Support +OpenSpace is supported by the following institutions: + +![Image](https://docs.openspaceproject.com/latest/_static/logos/sponsors.png) diff --git a/THIRD_PARTY_LICENSES.md b/THIRD_PARTY_LICENSES.md new file mode 100644 index 0000000000..5761b146e4 --- /dev/null +++ b/THIRD_PARTY_LICENSES.md @@ -0,0 +1,1167 @@ +# Third Party Licenses +This file lists all of the licenses for third-party libraries that are used to make OpenSpace. + + + +## curl +https://curl.se + + +Copyright (c) 1996 - 2024, Daniel Stenberg, daniel@haxx.se, and many contributors, see the THANKS file. + +All rights reserved. + +Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. + +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 OF THIRD PARTY RIGHTS. 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. + +Except as contained in this notice, the name of a copyright holder shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization of the copyright holder. + + + +## date +https://howardhinnant.github.io/date/date.html + + +The MIT License (MIT) + +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. + + + +## Ghoul - General Helpful Open Utility Library +https://github.com/OpenSpace/Ghoul + + +Copyright (c) 2012-2024 + +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. + + + +### catch2 +https://github.com/catchorg/Catch2 + + +Boost Software License - Version 1.0 - August 17th, 2003 + +Permission is hereby granted, free of charge, to any person or organization +obtaining a copy of the software and accompanying documentation covered by +this license (the "Software") to use, reproduce, display, distribute, +execute, and transmit the Software, and to prepare derivative works of the +Software, and to permit third-parties to whom the Software is furnished to +do so, all subject to the following: + +The copyright notices in the Software and this entire statement, including +the above license grant, this restriction and the following disclaimer, +must be included in all copies of the Software, in whole or in part, and +all derivative works of the Software, unless such copies or derivative +works are solely in the form of machine-executable object code generated by +a source language processor. + +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, TITLE AND NON-INFRINGEMENT. IN NO EVENT +SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + + + +### glbinding +https://glbinding.org/ + + +Copyright (c) 2014-2023 Computer Graphics Systems Group at the Hasso-Plattner-Institute, Digital Engineering Company, University of Potsdam and CG Internals, Germany. + +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. + + + +### GLM +https://github.com/g-truc/glm + + +Copyright (c) 2005 - G-Truc Creation + +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. + + + +### JSON for Modern C++ +https://github.com/nlohmann/json + + + __ _____ _____ _____ + __| | __| | | | JSON for Modern C++ +| | |__ | | | | | | version 3.9.1 +|_____|_____|_____|_|___| https://github.com/nlohmann/json + +Licensed under the MIT License . +SPDX-License-Identifier: MIT +Copyright (c) 2013-2019 Niels Lohmann . + +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. + + + +### Lua +https://lua.org/ + + +Copyright (C) 1994-2017 Lua.org, PUC-Rio. + +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. + + + +### LZ4 +https://lz4.org/ + + +LZ4 Library +Copyright (c) 2011-2014, Yann Collet +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + + +### RenderDoc +https://renderdoc.org/ + + +Copyright (c) 2019-2023 Baldur Karlsson + +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. + + + +### scnlib +scnlib/blob/master/LICENSE + + +Copyright 2017 Elias Kosunen + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + + + +### Open Asset Import Library (assimp) +https://www.assimp.org/ + + +Copyright (c) 2006-2021, assimp team +All rights reserved. + +Redistribution and use of this software in source and binary forms, +with or without modification, are permitted provided that the +following conditions are met: + +* Redistributions of source code must retain the above + copyright notice, this list of conditions and the + following disclaimer. + +* Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the + following disclaimer in the documentation and/or other + materials provided with the distribution. + +* Neither the name of the assimp team, nor the names of its + contributors may be used to endorse or promote products + derived from this software without specific prior + written permission of the assimp team. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + + +#### Poly2Tri +http://code.google.com/p/poly2tri/ + + +Poly2Tri Copyright (c) 2009-2010, Poly2Tri Contributors +http://code.google.com/p/poly2tri/ + +All rights reserved. +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. +* Neither the name of Poly2Tri nor the names of its contributors may be + used to endorse or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + + +### Freetype2 +https://www.freetype.org + + +Portions of this software are copyright © 2024 The FreeType +Project (www.freetype.org). All rights reserved. + + + +### Stackwalker +https://github.com/JochenKalmbach/StackWalker + + +Copyright (c) 2005 - 2019, Jochen Kalmbach +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + + + +### stb_image +https://github.com/nothings/stb + + +This is free and unencumbered software released into the public domain. +Anyone is free to copy, modify, publish, use, compile, sell, or distribute this +software, either in source code form or as a compiled binary, for any purpose, +commercial or non-commercial, and by any means. +In jurisdictions that recognize copyright laws, the author or authors of this +software dedicate any and all copyright interest in the software to the public +domain. We make this dedication for the benefit of the public at large and to +the detriment of our heirs and successors. We intend this dedication to be an +overt act of relinquishment in perpetuity of all present and future rights to +this software under copyright law. +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 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. + + +### Tiny Process Library +https://github.com/eidheim/tiny-process-library + + +Copyright (c) 2015-2020 Ole Christian Eidheim + +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. + + + +### Tracy +https://github.com/wolfpld/tracy + + +Copyright (c) 2017-2023, Bartosz Taudul +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of the nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + + + +### WebsocketPP +https://www.zaphoyd.com/projects/websocketpp/ + + +Copyright (c) 2014, Peter Thorson. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of the WebSocket++ Project nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL PETER THORSON BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + + +#### base64 library +https://github.com/ReneNyffenegger/cpp-base64 + + +Copyright (C) 2004-2008 René Nyffenegger + +This source code is provided 'as-is', without any express or implied +warranty. In no event will the author be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this source code must not be misrepresented; you must not + claim that you wrote the original source code. If you use this source code + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original source code. + +3. This notice may not be removed or altered from any source distribution. + +René Nyffenegger rene.nyffenegger@adp-gmbh.ch + + + +### MD5 Library +Copyright (C) 1999, 2002 Aladdin Enterprises. All rights reserved. + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. + +L. Peter Deutsch +ghost@aladdin.com + + +#### SHA-1 library +http://code.google.com/p/smallsha1/ + + +Copyright (c) 2011, Micael Hildenborg +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of Micael Hildenborg nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY Micael Hildenborg ''AS IS'' AND ANY +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL Micael Hildenborg BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +#### UTF8 Validation logic +Copyright (c) 2008-2009 Bjoern Hoehrmann + +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. + + +## JSON for Modern C++ +https://github.com/nlohmann/json + + + __ _____ _____ _____ + __| | __| | | | JSON for Modern C++ +| | |__ | | | | | | version 3.9.1 +|_____|_____|_____|_|___| https://github.com/nlohmann/json + +Licensed under the MIT License . +SPDX-License-Identifier: MIT +Copyright (c) 2013-2019 Niels Lohmann . + +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. + + + +## Simple Graphics Cluster Toolkit +https://github.com/sgct/sgct + + +Simple Graphics Cluster Toolkit + +Copyright (c) 2012-2023 +Miroslav Andel, Linköping University +Alexander Bock, Linköping University + +Contributors: Alexander Fridlund, Joel Kronander, Daniel Jönsson, Erik Sundén, Gene Payne, + Peter Steneteg + +For any questions or information about the project contact: alexander.bock@liu.se + +Redistribution and use in source and binary forms, with or without modification, are +permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of + conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, this list of + conditions and the following disclaimer in the documentation and/or other materials + provided with the distribution. +3. Neither the name of the copyright holder nor the names of its contributors may be used + to endorse or promote products derived from this software without specific prior + written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' AND ANY +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR +TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + + +### catch2 +https://github.com/catchorg/Catch2 + + +Boost Software License - Version 1.0 - August 17th, 2003 + +Permission is hereby granted, free of charge, to any person or organization +obtaining a copy of the software and accompanying documentation covered by +this license (the "Software") to use, reproduce, display, distribute, +execute, and transmit the Software, and to prepare derivative works of the +Software, and to permit third-parties to whom the Software is furnished to +do so, all subject to the following: + +The copyright notices in the Software and this entire statement, including +the above license grant, this restriction and the following disclaimer, +must be included in all copies of the Software, in whole or in part, and +all derivative works of the Software, unless such copies or derivative +works are solely in the form of machine-executable object code generated by +a source language processor. + +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, TITLE AND NON-INFRINGEMENT. IN NO EVENT +SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + + + +### Freetype2 +https://www.freetype.org + + +Portions of this software are copyright © 2024 The FreeType +Project (www.freetype.org). All rights reserved. + + + +### GLAD +https://github.com/Dav1dde/glad + + +The MIT License (MIT) + +Copyright (c) 2013-2022 David Herberth + +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. + + + +### GLFW +https://www.glfw.org/ + + +Copyright (c) 2002-2006 Marcus Geelnard + +Copyright (c) 2006-2019 Camilla Löwy + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would + be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and must not + be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source + distribution. + + + +### GLM +https://github.com/g-truc/glm + + +Copyright (c) 2005 - G-Truc Creation + +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. + + + +### JSON for Modern C++ +https://github.com/nlohmann/json + + + __ _____ _____ _____ + __| | __| | | | JSON for Modern C++ +| | |__ | | | | | | version 3.9.1 +|_____|_____|_____|_|___| https://github.com/nlohmann/json + +Licensed under the MIT License . +SPDX-License-Identifier: MIT +Copyright (c) 2013-2019 Niels Lohmann . + +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. + + + +### Modern C++ JSON schema validator +https://github.com/pboettch/json-schema-validator + + +Modern C++ JSON schema validator is licensed under the MIT License +: + +Copyright (c) 2016 Patrick Boettcher + +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. + + + +### LIBPNG + There is no warranty against interference with your enjoyment of the + library or against infringement. There is no warranty that our + efforts or the library will fulfill any of your particular purposes + or needs. This library is provided with all faults, and the entire + risk of satisfactory quality, performance, accuracy, and effort is with + the user. + +libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are +Copyright (c) 1998, 1999 Glenn Randers-Pehrson, and are +distributed according to the same disclaimer and license as libpng-0.96, +with the following individuals added to the list of Contributing Authors: + + Tom Lane + Glenn Randers-Pehrson + Willem van Schaik + +libpng versions 0.89, June 1996, through 0.96, May 1997, are +Copyright (c) 1996, 1997 Andreas Dilger +Distributed according to the same disclaimer and license as libpng-0.88, +with the following individuals added to the list of Contributing Authors: + + John Bowler + Kevin Bracey + Sam Bushell + Magnus Holmgren + Greg Roelofs + Tom Tanner + +libpng versions 0.5, May 1995, through 0.88, January 1996, are +Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc. + +For the purposes of this copyright and license, "Contributing Authors" +is defined as the following set of individuals: + + Andreas Dilger + Dave Martindale + Guy Eric Schalnat + Paul Schmidt + Tim Wegner + +The PNG Reference Library is supplied "AS IS". The Contributing Authors +and Group 42, Inc. disclaim all warranties, expressed or implied, +including, without limitation, the warranties of merchantability and of +fitness for any purpose. The Contributing Authors and Group 42, Inc. +assume no liability for direct, indirect, incidental, special, exemplary, +or consequential damages, which may result from the use of the PNG +Reference Library, even if advised of the possibility of such damage. + +Permission is hereby granted to use, copy, modify, and distribute this +source code, or portions hereof, for any purpose, without fee, subject +to the following restrictions: + +1. The origin of this source code must not be misrepresented. + +2. Altered versions must be plainly marked as such and must not + be misrepresented as being the original source. + +3. This Copyright notice may not be removed or altered from any + source or altered source distribution. + +The Contributing Authors and Group 42, Inc. specifically permit, without +fee, and encourage the use of this source code as a component to +supporting the PNG file format in commercial products. If you use this +source code in a product, acknowledgment is not required but would be +appreciated. + + + +### OpenVR +https://github.com/ValveSoftware/openvr + + +Copyright (c) 2015, Valve Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation and/or +other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its contributors +may be used to endorse or promote products derived from this software without +specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + + +### scnlib +scnlib/blob/master/LICENSE + + +Copyright 2017 Elias Kosunen + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + + + +### SPOUT +https://github.com/leadedge/Spout2 + + +Copyright (c) 2020-2024, Lynn Jarvis +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + + +### stb_image +https://github.com/nothings/stb + + +This is free and unencumbered software released into the public domain. +Anyone is free to copy, modify, publish, use, compile, sell, or distribute this +software, either in source code form or as a compiled binary, for any purpose, +commercial or non-commercial, and by any means. +In jurisdictions that recognize copyright laws, the author or authors of this +software dedicate any and all copyright interest in the software to the public +domain. We make this dedication for the benefit of the public at large and to +the detriment of our heirs and successors. We intend this dedication to be an +overt act of relinquishment in perpetuity of all present and future rights to +this software under copyright law. +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 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. + + + +### TinyXML +https://github.com/leethomason/tinyxml2 + + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must +not claim that you wrote the original software. If you use this +software in a product, an acknowledgment in the product documentation +would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + + + +### Tracy +https://github.com/wolfpld/tracy + + +Copyright (c) 2017-2023, Bartosz Taudul +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of the nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + + +### VRPN +https://vrpn.github.io/ + + +Boost Software License 1.0 (BSL1.0) + +Permission is hereby granted, free of charge, to any person or organization obtaining a copy of the software and accompanying documentation covered by this license (the "Software") to use, reproduce, display, distribute, execute, and transmit the Software, and to prepare derivative works of the Software, and to permit third-parties to whom the Software is furnished to do so, all subject to the following: + +The copyright notices in the Software and this entire statement, including the above license grant, this restriction and the following disclaimer, must be included in all copies of the Software, in whole or in part, and all derivative works of the Software, unless such copies or derivative works are solely in the form of machine-executable object code generated by a source language processor. + +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, TITLE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Additional requests follow: + +1. Please acknowledge this library in any publication, written, videotaped, + or otherwise produced, that results from making programs using it. + The acknowledgement will credit + + CISMM Project + University of North Carolina at Chapel Hill, + Supported by the NIH/NCRR and the NIH/NIBIB. + +2. Please furnish us a copy of any publication, including videotape, + that you produce and disseminate outside your group using our + program. These should be addressed to Professor R.M. Taylor + at taylorr@cs.unc.edu. + +3. Please send us derived classes and drivers for new devices that you + create for the library. We will attempt to include them in + future releases of the library for you and others to use. This + is the fastest way to get a working system for everyone. + + + +### zlib +http://zlib.net/ + + +Copyright (C) 1995-2013 Jean-loup Gailly and Mark Adler + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. + +Jean-loup Gailly Mark Adler +jloup@gzip.org madler@alumni.caltech.edu + + +The data format used by the zlib library is described by RFCs (Request for +Comments) 1950 to 1952 in the files http://tools.ietf.org/html/rfc1950 +(zlib format), rfc1951 (deflate format) and rfc1952 (gzip format). + + + +## SPICE +https://naif.jpl.nasa.gov + + +The SPICE system is implemented and maintained by Caltech/Jet Propulsion Laboratory under contract to the National Aeronautics and Space Administration. It is sponsored by the Planetary Science Division of NASA's Science Mission Directorate. + +THIS SOFTWARE AND ANY RELATED MATERIALS WERE CREATED BY THE CALIFORNIA INSTITUTE OF TECHNOLOGY (CALTECH) UNDER A U.S. GOVERNMENT CONTRACT WITH THE NATIONAL AERONAUTICS AND SPACE ADMINISTRATION (NASA). THE SOFTWARE IS TECHNOLOGY AND SOFTWARE PUBLICLY AVAILABLE UNDER U.S. EXPORT LAWS AND IS PROVIDED "AS-IS" TO THE RECIPIENT WITHOUT WARRANTY OF ANY KIND, INCLUDING ANY WARRANTIES OF PERFORMANCE OR MERCHANTABILITY OR FITNESS FOR A PARTICULAR USE OR PURPOSE (AS SET FORTH IN UNITED STATES UCC§2312-§2313) OR FOR ANY PURPOSE WHATSOEVER, FOR THE SOFTWARE AND RELATED MATERIALS, HOWEVER USED. + +IN NO EVENT SHALL CALTECH, ITS JET PROPULSION LABORATORY, OR NASA BE LIABLE FOR ANY DAMAGES AND/OR COSTS, INCLUDING, BUT NOT LIMITED TO, INCIDENTAL OR CONSEQUENTIAL DAMAGES OF ANY KIND, INCLUDING ECONOMIC DAMAGE OR INJURY TO PROPERTY AND LOST PROFITS, REGARDLESS OF WHETHER CALTECH, JPL, OR NASA BE ADVISED, HAVE REASON TO KNOW, OR, IN FACT, SHALL KNOW OF THE POSSIBILITY. + +RECIPIENT BEARS ALL RISK RELATING TO QUALITY AND PERFORMANCE OF THE SOFTWARE AND ANY RELATED MATERIALS, AND AGREES TO INDEMNIFY CALTECH AND NASA FOR ALL THIRD-PARTY CLAIMS RESULTING FROM THE ACTIONS OF RECIPIENT IN THE USE OF THE SOFTWARE diff --git a/apps/CMakeLists.txt b/apps/CMakeLists.txt index d28a99f874..c4158fd6fa 100644 --- a/apps/CMakeLists.txt +++ b/apps/CMakeLists.txt @@ -2,7 +2,7 @@ # # # OpenSpace # # # -# Copyright (c) 2014-2023 # +# Copyright (c) 2014-2025 # # # # 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 # diff --git a/apps/DocsWriter/CMakeLists.txt b/apps/DocsWriter/CMakeLists.txt new file mode 100644 index 0000000000..05891d8830 --- /dev/null +++ b/apps/DocsWriter/CMakeLists.txt @@ -0,0 +1,53 @@ +########################################################################################## +# # +# OpenSpace # +# # +# Copyright (c) 2014-2025 # +# # +# 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(${PROJECT_SOURCE_DIR}/support/cmake/application_definition.cmake) + +create_new_application(DocsWriter + main.cpp +) + +target_link_libraries(DocsWriter PRIVATE openspace-core openspace-module-collection) + +# Web Browser and Web gui +# Why not put these in the module's path? Because they do not have access to the +# target as of July 2017, which is needed. +if (OPENSPACE_MODULE_WEBBROWSER AND CEF_ROOT) + # wanted by CEF + set(CMAKE_BUILD_TYPE Debug CACHE STRING "CMAKE_BUILD_TYPE") + + if (WIN32) + set(RESOURCE_FILE openspace.rc) + endif () + + # Add the CEF binary distribution's cmake/ directory to the module path and + # find CEF to initialize it properly. + set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${WEBBROWSER_MODULE_PATH}/cmake") + include(webbrowser_helpers) + + set_cef_targets("${CEF_ROOT}" DocsWriter) + run_cef_platform_config("${CEF_ROOT}" "${CEF_TARGET}" "${WEBBROWSER_MODULE_PATH}") +elseif (OPENSPACE_MODULE_WEBBROWSER) + message(WARNING "Web configured to be included, but no CEF_ROOT was found, please try configuring CMake again.") +endif () diff --git a/apps/DocsWriter/include.cmake b/apps/DocsWriter/include.cmake new file mode 100644 index 0000000000..99cad555da --- /dev/null +++ b/apps/DocsWriter/include.cmake @@ -0,0 +1 @@ +set(DEFAULT_APPLICATION OFF) diff --git a/apps/DocsWriter/main.cpp b/apps/DocsWriter/main.cpp new file mode 100644 index 0000000000..1bfe2e79b2 --- /dev/null +++ b/apps/DocsWriter/main.cpp @@ -0,0 +1,75 @@ +/***************************************************************************************** + * * + * OpenSpace * + * * + * Copyright (c) 2014-2025 * + * * + * 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 +#include +#include +#include +#include +#include +#include +#include + +int main(int argc, char** argv) { + using namespace openspace; + + ghoul::logging::LogManager::initialize( + ghoul::logging::LogLevel::Debug, + ghoul::logging::LogManager::ImmediateFlush::Yes + ); + + ghoul::initialize(); + global::create(); + + // In order to initialize the engine, we need to specify the tokens + // We start by registering the path of the executable, + // to make it possible to find other files in the same directory + FileSys.registerPathToken( + "${BIN}", + std::filesystem::path(argv[0]).parent_path(), + ghoul::filesystem::FileSystem::Override::Yes + ); + + std::filesystem::path configFile = findConfiguration(); + + // Register the base path as the directory where the configuration file lives + std::filesystem::path base = configFile.parent_path(); + FileSys.registerPathToken("${BASE}", base); + + *global::configuration = loadConfigurationFromFile( + configFile.string(), + "", + glm::ivec2(0) + ); + openspace::global::openSpaceEngine->registerPathTokens(); + + // Now that we have the tokens we can initialize the engine + global::openSpaceEngine->initialize(); + + // Print out the documentation to the documentation folder + // @TODO (ylvse, 2024-05-02) change this directory when integrating with jenkins? + DocEng.writeJsonDocumentation(); + + return 0; +}; diff --git a/apps/OpenSpace-MinVR/main.cpp b/apps/OpenSpace-MinVR/main.cpp index 6b43cfa748..961bb15b9c 100644 --- a/apps/OpenSpace-MinVR/main.cpp +++ b/apps/OpenSpace-MinVR/main.cpp @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -29,10 +29,10 @@ #include #include #include -#include -#include #include #include +#include +#include #include #include #include @@ -49,7 +49,6 @@ using namespace MinVR; using namespace openspace; -namespace { class Handler : public VREventHandler, public VRRenderHandler, public VRInputDevice { public: @@ -60,6 +59,8 @@ public: void appendNewInputEventsSinceLastCall(VRDataQueue* queue) override; }; +namespace { + constexpr std::string_view _loggerCat = "main_minvr"; VRMain engine; @@ -103,7 +104,7 @@ void Handler::onVREvent(const VRDataIndex& eventData) { else { LERRORC( "onVREvent()", - fmt::format("Received an event named {} of unknown type", eventData.getName()) + std::format("Received an event named {} of unknown type", eventData.getName()) ); } @@ -243,7 +244,7 @@ void Handler::onVREvent(const VRDataIndex& eventData) { global::openSpaceEngine.decode(std::move(synchronizationBuffer)); } else { - LERRORC("onVREvent()", fmt::format("Received an event of unknown type {}", type)); + LERRORC("onVREvent()", std::format("Received an event of unknown type {}", type)); } } @@ -371,7 +372,7 @@ int main(int argc, char** argv) { LFATALC("main", "Could not find configuration: " + configurationFilePath); exit(EXIT_FAILURE); } - LINFO(fmt::format("Configuration Path: '{}'", configurationFilePath)); + LINFO(std::format("Configuration Path: '{}'", configurationFilePath)); // Loading configuration from disk LDEBUG("Loading configuration from disk"); diff --git a/apps/OpenSpace/CMakeLists.txt b/apps/OpenSpace/CMakeLists.txt index f79ee8f174..240d706377 100644 --- a/apps/OpenSpace/CMakeLists.txt +++ b/apps/OpenSpace/CMakeLists.txt @@ -2,7 +2,7 @@ # # # OpenSpace # # # -# Copyright (c) 2014-2023 # +# Copyright (c) 2014-2025 # # # # 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 # @@ -116,6 +116,10 @@ set(SGCT_DEP_INCLUDE_FMT OFF CACHE BOOL "" FORCE) set(SGCT_DEP_INCLUDE_SCN OFF CACHE BOOL "" FORCE) set(SGCT_DEP_INCLUDE_CATCH2 OFF CACHE BOOL "" FORCE) +if (NOT OPENSPACE_HAVE_TESTS) + # Unless overriden, disable sgct tests if OpenSpace tests are disabled + set(SGCT_BUILD_TESTS FALSE CACHE BOOL "Enable ghoul unit tests") +endif() add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/ext/sgct) target_link_libraries(OpenSpace PRIVATE sgct) @@ -147,10 +151,9 @@ if (WIN32) # Find the windeployqt application get_target_property(_qmake_executable Qt6::qmake IMPORTED_LOCATION) get_filename_component(_qt_bin_dir "${_qmake_executable}" DIRECTORY) - find_program(WINDEPLOYQT_EXECUTABLE windeployqt HINTS "${_qt_bin_dir}") add_custom_command( TARGET OpenSpace POST_BUILD - COMMAND "${CMAKE_COMMAND}" -E env PATH="${_qt_bin_dir}" "${WINDEPLOYQT_EXECUTABLE}" --verbose 0 --no-compiler-runtime --no-translations \"$\" + COMMAND "${WINDEPLOYQT_EXECUTABLE}" --verbose 0 --no-compiler-runtime --no-translations \"$\" COMMENT "Deploying Qt libraries" ) endif () diff --git a/apps/OpenSpace/ext/launcher/CMakeLists.txt b/apps/OpenSpace/ext/launcher/CMakeLists.txt index f7a465bd3c..68e32b60ab 100644 --- a/apps/OpenSpace/ext/launcher/CMakeLists.txt +++ b/apps/OpenSpace/ext/launcher/CMakeLists.txt @@ -2,7 +2,7 @@ # # # OpenSpace # # # -# Copyright (c) 2014-2023 # +# Copyright (c) 2014-2025 # # # # 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 # @@ -27,6 +27,7 @@ include(${PROJECT_SOURCE_DIR}/support/cmake/set_openspace_compile_settings.cmake set(HEADER_FILES include/filesystemaccess.h include/launcherwindow.h + include/settingsdialog.h include/profile/actiondialog.h include/profile/additionalscriptsdialog.h include/profile/assetsdialog.h @@ -55,6 +56,7 @@ set(HEADER_FILES set(SOURCE_FILES src/launcherwindow.cpp src/filesystemaccess.cpp + src/settingsdialog.cpp src/profile/actiondialog.cpp src/profile/additionalscriptsdialog.cpp src/profile/assetsdialog.cpp diff --git a/apps/OpenSpace/ext/launcher/include/filesystemaccess.h b/apps/OpenSpace/ext/launcher/include/filesystemaccess.h index 9db6b4d972..0817c93efc 100644 --- a/apps/OpenSpace/ext/launcher/include/filesystemaccess.h +++ b/apps/OpenSpace/ext/launcher/include/filesystemaccess.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -30,33 +30,32 @@ class FileSystemAccess { public: /** - * Constructor for filesystemAccess class + * Constructor for filesystemAccess class. * - * \param fileExtension string that defines the filter used to find files. Only - * files with this extension will be recognized (e.g. '.xml') - * \param hideFileExtensions if true then file extensions will be removed from the - * listed files in the output - * \param useCheckboxes if true then the text output format will contain a '0' as - * the first character in the line (this first character is - * used to represent checked ('1'), uncheck ('0') or doesn't - * exist in filesystem ('x') states. + * \param fileExtension The file extensiopn filter used to find files. Only files with + * this extension will be recognized (e.g. '.json') + * \param hideFileExtensions If `true` then file extensions will be removed from the + * listed files in the output + * \param useCheckboxes If `true` then the text output format will contain a '0' as + * the first character in the line (this first character is used to represent + * checked ('1'), uncheck ('0') or doesn't exist in filesystem ('x') states */ FileSystemAccess(std::string fileExtension, bool hideFileExtensions, bool useCheckboxes); /** - * Function that uses the #QtFileSystemModel class to search the given directory + * Function that uses the QtFileSystemModel class to search the given directory. * * \param dir The directory from which to start the search from */ - std::string useQtFileSystemModelToTraverseDir(std::string dir, - bool usersAssets = false); + std::string useQtFileSystemModelToTraverseDir(const std::string& dir, + bool userAssets = false); private: - void parseChildDirElements(QFileInfo item, std::string space, int level, - std::vector& dirNames, std::vector& output, + void parseChildDirElements(const QFileInfo& fileInfo, const std::string& space, + int level, std::vector& dirNames, std::vector& output, bool userAssets); - void parseChildFile(std::string res, bool& hasDirHeaderBeenAdded, + void parseChildFile(std::string filename, bool& hasDirHeaderBeenAdded, std::vector& dirNames, std::vector& output); QFileSystemModel _filesystemModel; diff --git a/apps/OpenSpace/ext/launcher/include/launcherwindow.h b/apps/OpenSpace/ext/launcher/include/launcherwindow.h index f925167355..a8e311f078 100644 --- a/apps/OpenSpace/ext/launcher/include/launcherwindow.h +++ b/apps/OpenSpace/ext/launcher/include/launcherwindow.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -29,12 +29,13 @@ #include "sgctedit/sgctedit.h" #include +#include #include -#include #include +#include #include -namespace openspace::configuration { struct Configuration; } +namespace openspace { struct Configuration; } class QComboBox; class QLabel; @@ -43,74 +44,78 @@ class LauncherWindow final : public QMainWindow { Q_OBJECT public: /** - * Constructor for LauncherWindow class + * Constructor for LauncherWindow class. * - * \param profileEnabled true if profile selection combo box will be enabled - * \param globalConfig reference to global configuration for OpenSpace settings - * \param sgctConfigEnabled true if window selection combo box will be enabled - * \param sgctConfigName the name of the sgct configuration function used to - * generate window config (blank if file is used) - * \param parentItem The parent that contains this (and possibly other) children - * in the tree structure. + * \param profileEnabled `true` if profile selection combo box will be enabled + * \param globalConfig Reference to global configuration for OpenSpace settings + * \param sgctConfigEnabled `true` if window selection combo box will be enabled + * \param sgctConfigName The name of the sgct configuration function used to generate + * window config (blank if file is used) + * \param parent The parent that contains this (and possibly other) children in the + * tree structure. */ - LauncherWindow(bool profileEnabled, - const openspace::configuration::Configuration& globalConfig, - bool sgctConfigEnabled, std::string sgctConfigName, QWidget* parent); + LauncherWindow(bool profileEnabled, const openspace::Configuration& globalConfig, + bool sgctConfigEnabled, std::string sgctConfigName, QWidget* parent); /** - * Returns bool for whether "start OpenSpace" was chosen when this window closed. - * OpenSpace will not start if false + * Returns whether "Start OpenSpace" was chosen when this window closed. * - * \return true if the "start OpenSpace" button was clicked + * \return `true` if the "Start OpenSpace" button was clicked */ bool wasLaunchSelected() const; /** - * Returns the selected profile name when launcher window closed + * Returns the selected profile name when launcher window closed. * - * \return name of selected profile (this is only the name without file extension + * \return The name of selected profile (this is only the name without file extension * and without path) */ std::string selectedProfile() const; /** - * Returns the selected sgct window configuration when launcher window closed + * Returns the selected sgct window configuration when launcher window closed. * - * \return name of selected profile (this is only the name without file extension + * \return The name of selected profile (this is only the name without file extension * and without path) */ std::string selectedWindowConfig() const; /** - * Returns true if the window configuration filename selected in the combo box - * is a file in the user configurations section + * Returns `true` if the window configuration filename selected in the combo box + * is a file in the user configurations section. * - * \return true if window configuration is a user configuration file + * \return `true` if window configuration is a user configuration file */ bool isUserConfigSelected() const; + /** + * Handles keypresses while the Qt launcher window is open. + * + * \param evt QKeyEevent object of the key press event + */ + void keyPressEvent(QKeyEvent* evt) override; + private: QWidget* createCentralWidget(); - void setBackgroundImage(const std::string& syncPath); + void setBackgroundImage(const std::filesystem::path& syncPath); void openProfileEditor(const std::string& profile, bool isUserProfile); void openWindowEditor(const std::string& winCfg, bool isUserWinCfg); void editRefusalDialog(const std::string& title, const std::string& msg, const std::string& detailedText); - void populateProfilesList(std::string preset); - void populateWindowConfigsList(std::string preset); + void populateProfilesList(const std::string& preset); + void populateWindowConfigsList(const std::string& preset); void handleReturnFromWindowEditor(const sgct::config::Cluster& cluster, - std::filesystem::path savePath, const std::string& saveWindowCfgPath); + std::filesystem::path savePath, const std::filesystem::path& saveWindowCfgPath); void onNewWindowConfigSelection(int newIndex); - bool versionCheck(sgct::config::GeneratorVersion& v) const; - const std::string _assetPath; - const std::string _userAssetPath; - const std::string _configPath; - const std::string _userConfigPath; - const std::string _profilePath; - const std::string _userProfilePath; + const std::filesystem::path _assetPath; + const std::filesystem::path _userAssetPath; + const std::filesystem::path _configPath; + const std::filesystem::path _userConfigPath; + const std::filesystem::path _profilePath; + const std::filesystem::path _userProfilePath; bool _shouldLaunch = false; int _userAssetCount = 0; int _userConfigStartingIdx = 0; diff --git a/apps/OpenSpace/ext/launcher/include/profile/actiondialog.h b/apps/OpenSpace/ext/launcher/include/profile/actiondialog.h index 8f7f91fe4e..e7ae11d8ea 100644 --- a/apps/OpenSpace/ext/launcher/include/profile/actiondialog.h +++ b/apps/OpenSpace/ext/launcher/include/profile/actiondialog.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -32,6 +32,7 @@ class QCheckBox; class QComboBox; class QDialogButtonBox; +class QErrorMessage; class QGridLayout; class QLabel; class QLineEdit; @@ -56,18 +57,18 @@ private: void actionRemove(); void actionSelected(); void actionSaved(); - void clearActionFields(); + void clearActionFields() const; void actionRejected(); void chooseScripts(); - void appendScriptsToTextfield(std::vector scripts); + void appendScriptsToTextfield(const std::vector& scripts) const; openspace::Profile::Keybinding* selectedKeybinding(); void keybindingAdd(); void keybindingRemove(); void keybindingSelected(); - void keybindingActionSelected(int); + void keybindingActionSelected(int) const; void keybindingSaved(); - void clearKeybindingFields(); + void clearKeybindingFields() const; void keybindingRejected(); std::vector* _actions = nullptr; @@ -78,7 +79,7 @@ private: struct { QListWidget* list = nullptr; QLineEdit* identifier = nullptr; - QLabel* infoText = nullptr; + QErrorMessage* infoText = nullptr; QLineEdit* name = nullptr; QLineEdit* guiPath = nullptr; QLineEdit* documentation = nullptr; diff --git a/apps/OpenSpace/ext/launcher/include/profile/additionalscriptsdialog.h b/apps/OpenSpace/ext/launcher/include/profile/additionalscriptsdialog.h index bfde6ff809..031e364f3e 100644 --- a/apps/OpenSpace/ext/launcher/include/profile/additionalscriptsdialog.h +++ b/apps/OpenSpace/ext/launcher/include/profile/additionalscriptsdialog.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -33,11 +33,11 @@ class AdditionalScriptsDialog final : public QDialog { Q_OBJECT public: /** - * Constructor for addedScripts class + * Constructor for addedScripts class. * - * \param profile The #openspace::Profile object containing all data of the - * new or imported profile. * \param parent Pointer to parent Qt widget + * \param scripts The list of scripts containing all data of the new or imported + * profile */ AdditionalScriptsDialog(QWidget* parent, std::vector* scripts); @@ -48,11 +48,11 @@ private: void chooseScripts(); /** - * Adds scripts to the _scriptEdit from outside dialogs + * Adds scripts to the _scriptEdit from outside dialogs. * - * \param scripts #std::string scripts to be appended + * \param scripts The scripts to be appended */ - void appendScriptsToTextfield(std::vector scripts); + void appendScriptsToTextfield(const std::vector& scripts); std::vector* _scripts = nullptr; std::vector _scriptsData; diff --git a/apps/OpenSpace/ext/launcher/include/profile/assetedit.h b/apps/OpenSpace/ext/launcher/include/profile/assetedit.h index 01d976a3c4..7df6c18957 100644 --- a/apps/OpenSpace/ext/launcher/include/profile/assetedit.h +++ b/apps/OpenSpace/ext/launcher/include/profile/assetedit.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -48,8 +48,6 @@ private: QBoxLayout* _layout = nullptr; QLineEdit* _nameEdit = nullptr; - - QLabel* _errorMsg = nullptr; }; #endif // __OPENSPACE_UI_LAUNCHER___ASSETEDIT___H__ diff --git a/apps/OpenSpace/ext/launcher/include/profile/assetsdialog.h b/apps/OpenSpace/ext/launcher/include/profile/assetsdialog.h index 85714b26bb..84e8da3b00 100644 --- a/apps/OpenSpace/ext/launcher/include/profile/assetsdialog.h +++ b/apps/OpenSpace/ext/launcher/include/profile/assetsdialog.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -26,42 +26,79 @@ #define __OPENSPACE_UI_LAUNCHER___ASSETSDIALOG___H__ #include - +#include +#include #include "assettreemodel.h" class QTextEdit; class QTreeView; +class SearchProxyModel : public QSortFilterProxyModel { +Q_OBJECT +public: + /** + * Constructor for SearchProxyModel class. + * + * \param parent The parent object of this object + */ + SearchProxyModel(QObject* parent = nullptr); + +public slots: + /** + * Sets the regular expression pattern to apply to the filter. + * + * \param pattern The regex pattern used for filtering + */ + void setFilterRegularExpression(const QString& pattern); + +protected: + bool filterAcceptsRow(int sourceRow, const QModelIndex& sourceParent) const override; + +private: + bool acceptIndex(const QModelIndex& idx) const; + + QRegularExpression* _regExPattern = nullptr; +}; + class AssetsDialog final : public QDialog { Q_OBJECT public: /** - * Constructor for assets class + * Constructor for assets class. * - * \param profile The #openspace::Profile object containing all data of the - * new or imported profile. + * \param parent Pointer to parent Qt widget + * \param profile The #openspace::Profile object containing all data of the new or + * imported profile * \param assetBasePath The path to the folder in which all of the assets are living * \param userAssetBasePath The path to the folder in which the users' assets are * living - * \param parent Pointer to parent Qt widget */ AssetsDialog(QWidget* parent, openspace::Profile* profile, - const std::string& assetBasePath, const std::string& userAssetBasePath); + const std::filesystem::path& assetBasePath, + const std::filesystem::path& userAssetBasePath); + +private slots: + void searchTextChanged(const QString& text); private: void createWidgets(); - + void setViewToBaseModel(); void parseSelections(); void selected(const QModelIndex&); - /// Creates a text summary of all assets and their paths + /** + * Creates a text summary of all assets and their paths. + */ QString createTextSummary(); void openAssetEditor(); openspace::Profile* _profile = nullptr; AssetTreeModel _assetTreeModel; QTreeView* _assetTree = nullptr; + QLineEdit* _searchTextBox = nullptr; QTextEdit* _summary = nullptr; + QSortFilterProxyModel* _assetProxyModel = nullptr; + SearchProxyModel* _searchProxyModel = nullptr; }; #endif // __OPENSPACE_UI_LAUNCHER___ASSETSDIALOG___H__ diff --git a/apps/OpenSpace/ext/launcher/include/profile/assettreeitem.h b/apps/OpenSpace/ext/launcher/include/profile/assettreeitem.h index 0e1055bcbc..a4100b9e3b 100644 --- a/apps/OpenSpace/ext/launcher/include/profile/assettreeitem.h +++ b/apps/OpenSpace/ext/launcher/include/profile/assettreeitem.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -36,8 +36,8 @@ public: * Constructor for assetTreeItem class. * * \param data QVector containing the data contained in this tree view item - * \param parentItem The parent that contains this (and possibly other) children - * in the tree structure (optional). + * \param parentItem The parent that contains this (and possibly other) children in + * the tree structure (optional) */ AssetTreeItem(std::vector data, AssetTreeItem* parentItem = nullptr); @@ -49,7 +49,7 @@ public: /** * Returns pointer to this tree item's child at position \p row. * - * \param row int of the row number of the child to get pointer + * \param row The row number of the child to get pointer */ AssetTreeItem* child(int row) const; @@ -78,27 +78,27 @@ public: /** * Inserts children item(s) to the current item. * - * \param position where in this item's children to insert new children - * \param count number of children to insert - * \param columns number of data columns in each child + * \param position Where in this item's children to insert new children + * \param count Number of children to insert + * \param columns Number of data columns in each child * - * \return true if new children were successfully inserted + * \return `true` if new children were successfully inserted */ bool insertChildren(int position, int count, int columns); /** * Inserts data column(s) in the current item. * - * \param position column number at which to insert column(s) - * \param columns number of columns to insert - * \return true if columns were successfully inserted + * \param position Column number at which to insert column(s) + * \param columns Number of columns to insert + * \return `true` if columns were successfully inserted */ bool insertColumns(int position, int columns); /** * Returns a pointer to the current item's parent. * - * \return pointer to the \p assetTreeItem parent + * \return Pointer to the \p assetTreeItem parent */ AssetTreeItem* parent(); @@ -112,10 +112,10 @@ public: /** * Returns the data at column \p column of this item. * - * \param position The position of the child(ren) to remove from the current - * item (which is parent) + * \param position The position of the child(ren) to remove from the current item + * (which is parent) * \param count The number of children to remove - * \return true if child item(s) successfully removed + * \return `true` if child item(s) successfully removed */ bool removeChildren(int position, int count); @@ -124,7 +124,7 @@ public: * * \param column The data column number to set * \param value The #QVariant data element to store at column \p column - * \return true if the data set was successful + * \return `true` if the data set was successful */ bool setData(int column, const QVariant& value); @@ -132,30 +132,30 @@ public: * Returns the checked state of this item. If an asset is selected to be included * in a profile, then it is checked. * - * \return true if this item is checked + * \return `true` if this item is checked */ bool isChecked() const; /** * Sets the checked state of this item (whether or not it is selected for a profile). * - * \param set bool for whether or not this is checked + * \param set Whether or not this item is checked */ void setChecked(bool set); /** - * Returns a bool for whether or not this is an asset. If it is a file - * (has no children in the filesystem tree), then it is an asset. + * Returns a bool for whether or not this is an asset. If it is a file (has no + * children in the filesystem tree), then it is an asset. * - * \return true if this is an asset file and not a directory containing asset(s) + * \return `true` if this is an asset file and not a directory containing asset(s) */ bool isAsset() const; /** - * Returns a bool for whether or not this is a category. If it is a directory - * and not an asset (file), then it is a category. + * Returns a bool for whether or not this is a category. If it is a directory and not + * an asset (file), then it is a category. * - * \return true if this is a category + * \return `true` if this is a category */ bool isCategory() const; @@ -164,14 +164,14 @@ public: * possible that an imported profile lists an asset from another system that is not * included on the current filesystem. * - * \param set to true if the asset file exists in the current filesystem + * \param fileExists `true` if the asset file exists in the current filesystem */ void setExistsInFilesystem(bool fileExists); /** * Returns bool for whether or not the asset exists in the current filesystem. * - * \return true if the asset exists in the current filesystem + * \return `true` if the asset exists in the current filesystem */ bool doesExistInFilesystem() const; diff --git a/apps/OpenSpace/ext/launcher/include/profile/assettreemodel.h b/apps/OpenSpace/ext/launcher/include/profile/assettreemodel.h index 6103897deb..f8a8b903b0 100644 --- a/apps/OpenSpace/ext/launcher/include/profile/assettreemodel.h +++ b/apps/OpenSpace/ext/launcher/include/profile/assettreemodel.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -39,9 +39,9 @@ public: /** * Returns the data contained at an index. * - * \param index that defines where the item is located in the tree model - * \param role Qt-defined role that describes the reason Qt is calling the - * function (can be multiple times) + * \param index The index defining where the item is located in the tree model + * \param role Qt-defined role that describes the reason Qt is calling the function + * (can be multiple times) * \return QVariant data object */ QVariant data(const QModelIndex& index, int role) const final; @@ -49,22 +49,22 @@ public: /** * Returns the header data of the tree view. * - * \param section of data to be obtained from header - * \param orientation of the query (e.g. Qt::horizontal) - * \param role Qt-defined role that describes the reason Qt is calling the - * function (can be multiple times) + * \param section The data to be obtained from header + * \param orientation The orientation of the query (e.g. Qt::horizontal) + * \param role Qt-defined role that describes the reason Qt is calling the function + * (can be multiple times) * \return QVariant data object in the header */ QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const final; /** - * Returns the index of item in #QModelIndex object form. + * Returns the index of item in QModelIndex object form. * - * \param row the row number - * \param column the column number - * \param parent index of parent - * \return #QModelIndex index of the item at specified position + * \param row The row number + * \param column The column number + * \param parent Index of parent + * \return QModelIndex index of the item at specified position */ QModelIndex index(int row, int column, const QModelIndex& parent = QModelIndex()) const final; @@ -72,18 +72,18 @@ public: /** * Returns the index of the parent of the item specified by input param. * - * \param index of item that is a child of the parent - * \return #QModelIndex index of the parent + * \param index The index of item that is a child of the parent + * \return QModelIndex index of the parent */ QModelIndex parent(const QModelIndex& index) const final; /** * Returns the index of the parent of the item specified by the input params. * - * \param row the row number - * \param column the column number - * \param parent index of parent - * \return #QModelIndex index of the parent + * \param row The row number + * \param column The column number + * \param parent Index of parent + * \return QModelIndex index of the parent */ QModelIndex parent(int row, int column, const QModelIndex& parent = QModelIndex()) const; @@ -91,24 +91,24 @@ public: /** * Returns asset item at specified index. * - * \param index of item that is a child of the parent - * \return #assetTreeItem pointer to the item at the provided index + * \param index The index of item that is a child of the parent + * \return Pointer to the item at the provided index */ AssetTreeItem* assetItem(const QModelIndex& index); /** * Returns number of children/rows of the parent. * - * \param parent #QModelIndex of the parent item - * \return number of children/rows of this parent + * \param parent QModelIndex of the parent item + * \return The number of children/rows of this parent */ int rowCount(const QModelIndex& parent = QModelIndex()) const final; /** * Returns the number of columns of data in each item of the tree. * - * \param parent specified by the #QModelIndex index - * \return the number of data columns + * \param parent The parent specified by the QModelIndex index + * \return The number of data columns */ int columnCount(const QModelIndex& parent = QModelIndex()) const final; @@ -116,28 +116,27 @@ public: * Return the Qt flags of the item specified by index, which can include * Qt::ItemIsEnabled, Qt::ItemIsSelectable. * - * \param index specified by the #QModelIndex index - * \return the Qt flags + * \param index The index specified by the QModelIndex index + * \return The Qt flags */ Qt::ItemFlags flags(const QModelIndex& index) const final; /** * Set data at index \p index. * - * \param index location of the item to set - * \param value The #QVariant data element to store at column \p column + * \param index Location of the item to set + * \param value The QVariant data element to store at column \p column * \param role Qt-specific role to define context of the call - * \return true if the data set was successful + * \return `true` if the data set was successful */ bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole) final; /** - * Returns a vector of all #Assets selected in the tree view. + * Returns a vector of all #Asset%s selected in the tree view. * - * \param outputPaths vector of #openspace::Profile::Asset objects, each of which are - * selected - * \param outputItems vector of #assetTreeItem * objects, each of which are selected + * \param outputPaths The vector of paths that were selected + * \param outputItems The vector of AssetTreeItem that were selected */ void getSelectedAssets(std::vector& outputPaths, std::vector& outputItems); @@ -145,6 +144,7 @@ public: /** * Imports asset tree data for this model by recursively traversing the folder * structure. + * * \param assetBasePath The base path where to find all assets * \param assetBasePath The base path where to find user assets */ @@ -154,72 +154,72 @@ public: /** * Returns bool for if item is checked/selected. * - * \param index location of the item to set - * \return true if the item is checked + * \param index Location of the item to set + * \return `true` if the item is checked */ bool isChecked(QModelIndex& index) const; /** * Answers query about whether or not item is an asset. * - * \param index location of the item to query - * \return true if the item is an asset (and not a directory) + * \param index Location of the item to query + * \return `true` if the item is an asset (and not a directory) */ bool isAsset(QModelIndex& index) const; /** * Answers query about whether or not item is in the current filesystem. * - * \param index location of the item to query - * \return true if the data is in the filesystem + * \param index Location of the item to query + * \return `true` if the data is in the filesystem */ bool inFilesystem(QModelIndex& index) const; /** * Returns number of child items of referenced item. * - * \param index location of the item to query - * \return number of child items + * \param index Location of the item to query + * \return Number of child items */ int childCount(QModelIndex& index) const; /** * Returns a pointer to a child item of the current item. * - * \param row the child number of the current item - * \return assetTreeItem pointer to the child + * \param row The child number of the current item + * \return The pointer to the child */ AssetTreeItem* child(int row) const; /** * Returns the asset name of the specified item. * - * \param index location of the item to query - * \return the asset name of the item + * \param index Location of the item to query + * \return The asset name of the item */ QString name(QModelIndex& index) const; /** * Set asset name at specified index. * - * \param index location of the item to set - * \param name the asset name to set + * \param index Location of the item to set + * \param name The asset name to set */ - void setName(QModelIndex& index, QString name); + void setName(QModelIndex& index, const QString& name); /** * Set state of checked/selected of an item. * - * \param index location of the item to set - * \param checked true if item is checked/selected + * \param index Location of the item to set + * \param checked `true` if item is checked/selected */ void setChecked(QModelIndex& index, bool checked); /** * Set state of whether or not asset exists in filesystem. * - * \param index location of the item to set - * \param fileExists true if asset exists in filesystem + * \param index Location of the item to set + * \param fileExists `true` if asset exists in filesystem */ void setExistenceInFilesystem(QModelIndex& index, bool fileExists); diff --git a/apps/OpenSpace/ext/launcher/include/profile/cameradialog.h b/apps/OpenSpace/ext/launcher/include/profile/cameradialog.h index aa6c018e4a..ae86162acb 100644 --- a/apps/OpenSpace/ext/launcher/include/profile/cameradialog.h +++ b/apps/OpenSpace/ext/launcher/include/profile/cameradialog.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -32,6 +32,7 @@ class QLabel; class QLineEdit; +class QMessageBox; class QTabWidget; class CameraDialog final : public QDialog { @@ -40,9 +41,9 @@ public: /** * Constructor for camera gui class * - * \param profile The #openspace::Profile object containing all data of the - * new or imported profile. - * \param parent Pointer to parent Qt widget (optional) + * \param parent Pointer to parent Qt widget + * \param camera The #openspace::Profile::CameraType object containing all data of the + * new or imported profile */ CameraDialog(QWidget* parent, std::optional* camera); @@ -56,7 +57,7 @@ private: QWidget* createNavStateWidget(); QWidget* createGeoWidget(); - void addErrorMsg(QString errorDescription); + void addErrorMsg(const QString& errorDescription); bool areRequiredFormsFilledAndValid(); std::optional* _camera = nullptr; @@ -88,7 +89,7 @@ private: QLineEdit* altitude = nullptr; } _geoState; - QLabel* _errorMsg = nullptr; + QMessageBox* _errorMsg = nullptr; }; #endif // __OPENSPACE_UI_LAUNCHER___CAMERA___H__ diff --git a/apps/OpenSpace/ext/launcher/include/profile/deltatimesdialog.h b/apps/OpenSpace/ext/launcher/include/profile/deltatimesdialog.h index 8061117d30..856ac4d8be 100644 --- a/apps/OpenSpace/ext/launcher/include/profile/deltatimesdialog.h +++ b/apps/OpenSpace/ext/launcher/include/profile/deltatimesdialog.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -37,27 +37,27 @@ class DeltaTimesDialog final : public QDialog { Q_OBJECT public: /** - * Constructor for deltaTimes class + * Constructor for deltaTimes class. * - * \param profile The #openspace::Profile object containing all data of the - * new or imported profile. * \param parent Pointer to parent Qt widget + * \param deltaTimes The list of delta times containing all data of the new or + * imported profile */ DeltaTimesDialog(QWidget* parent, std::vector* deltaTimes); /** - * Returns a text summary of the delta time list for display purposes + * Returns a text summary of the delta time list for display purposes. * * \param idx index in dt list - * \param forListView true if this summary is for the Qt list view, false if - * it is used for a different display mode + * \param forListView true if this summary is for the Qt list view, false if it is + * used for a different display mode */ std::string createSummaryForDeltaTime(size_t idx, bool forListView); /** - * Handles keypress while the Qt dialog window is open + * Handles keypress while the Qt dialog window is open. * - * \param evt #QKeyEvent object for the key press event + * \param evt QKeyEvent object for the key press event */ virtual void keyPressEvent(QKeyEvent* evt) override; @@ -73,14 +73,14 @@ private: void parseSelections(); /** - * Called to transition to editing a particular dt value (gui settings) + * Called to transition to editing a particular dt value (gui settings). * - * \param index index in dt list + * \param index Index in dt list * \param state `true` if the edit mode should be turned on, `false` otherwise */ void transitionEditMode(int index, bool state); - void setLabelForKey(int index, bool editMode, std::string color); + void setLabelForKey(int index, bool editMode, std::string_view color); bool isLineEmpty(int index); std::vector* _deltaTimes = nullptr; @@ -97,8 +97,6 @@ private: QPushButton* _saveButton = nullptr; QPushButton* _discardButton = nullptr; QDialogButtonBox* _buttonBox = nullptr; - - QLabel* _errorMsg = nullptr; }; #endif // __OPENSPACE_UI_LAUNCHER___DELTATIMESDIALOG___H__ diff --git a/apps/OpenSpace/ext/launcher/include/profile/horizonsdialog.h b/apps/OpenSpace/ext/launcher/include/profile/horizonsdialog.h index 8f8dec8c60..f1cee0e0ea 100644 --- a/apps/OpenSpace/ext/launcher/include/profile/horizonsdialog.h +++ b/apps/OpenSpace/ext/launcher/include/profile/horizonsdialog.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -71,7 +71,7 @@ private: void openSaveAs(); void typeOnChange(int index); - void downloadProgress(int value, int max); + void downloadProgress(int value, int total); void importTimeRange(); void approved(); @@ -121,7 +121,6 @@ private: QLabel* _downloadLabel = nullptr; QPlainTextEdit* _log = nullptr; - QLabel* _errorMsg = nullptr; std::string _latestHorizonsError; }; diff --git a/apps/OpenSpace/ext/launcher/include/profile/line.h b/apps/OpenSpace/ext/launcher/include/profile/line.h index 4f51297604..b7602b726d 100644 --- a/apps/OpenSpace/ext/launcher/include/profile/line.h +++ b/apps/OpenSpace/ext/launcher/include/profile/line.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * diff --git a/apps/OpenSpace/ext/launcher/include/profile/marknodesdialog.h b/apps/OpenSpace/ext/launcher/include/profile/marknodesdialog.h index 89cfd94a08..3ddf7aceac 100644 --- a/apps/OpenSpace/ext/launcher/include/profile/marknodesdialog.h +++ b/apps/OpenSpace/ext/launcher/include/profile/marknodesdialog.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -36,18 +36,18 @@ class MarkNodesDialog final : public QDialog { Q_OBJECT public: /** - * Constructor for markNodes class + * Constructor for markNodes class. * - * \param profile The #openspace::Profile object containing all data of the - * new or imported profile. * \param parent Pointer to parent Qt widget + * \param markedNodes The list of marked nodes containing all data of the new or + * imported profile */ MarkNodesDialog(QWidget* parent, std::vector* markedNodes); /** - * Handles keypress while the Qt dialog window is open + * Handles keypress while the Qt dialog window is open. * - * \param evt #QKeyEvent object for the key press event + * \param evt QKeyEvent object for the key press event */ void keyPressEvent(QKeyEvent* evt) override; diff --git a/apps/OpenSpace/ext/launcher/include/profile/metadialog.h b/apps/OpenSpace/ext/launcher/include/profile/metadialog.h index a496605a81..25268a5c8e 100644 --- a/apps/OpenSpace/ext/launcher/include/profile/metadialog.h +++ b/apps/OpenSpace/ext/launcher/include/profile/metadialog.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -39,9 +39,9 @@ public: /** * Constructor for meta class. * - * \param profile The #openspace::Profile object containing all data of the - * new or imported profile. * \param parent Pointer to parent Qt widget + * \param meta The #openspace::Profile::Meta object containing all data of the new or + * imported profile */ MetaDialog(QWidget* parent, std::optional* meta); diff --git a/apps/OpenSpace/ext/launcher/include/profile/modulesdialog.h b/apps/OpenSpace/ext/launcher/include/profile/modulesdialog.h index f334a786dd..96a961023b 100644 --- a/apps/OpenSpace/ext/launcher/include/profile/modulesdialog.h +++ b/apps/OpenSpace/ext/launcher/include/profile/modulesdialog.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -39,18 +39,18 @@ class ModulesDialog final : public QDialog { Q_OBJECT public: /** - * Constructor for osmodules class + * Constructor for modules class. * - * \param profile The #openspace::Profile object containing all data of the - * new or imported profile. * \param parent Pointer to parent Qt widget + * \param modules The #openspace::Profile::Module object containing all data of the + * new or imported profile */ ModulesDialog(QWidget* parent, std::vector* modules); /** - * Handles keypress while the Qt dialog window is open + * Handles keypress while the Qt dialog window is open. * - * \param evt #QKeyEvent object for the key press event + * \param evt QKeyEvent object for the key press event */ virtual void keyPressEvent(QKeyEvent* evt) override; @@ -65,7 +65,6 @@ private: void transitionToEditMode(); void parseSelections(); - QString createOneLineSummary(openspace::Profile::Module m); void transitionFromEditMode(); void editBoxDisabled(bool disabled); bool isLineEmpty(int index) const; @@ -87,8 +86,6 @@ private: QPushButton* _buttonSave = nullptr; QPushButton* _buttonCancel = nullptr; QDialogButtonBox* _buttonBox = nullptr; - - QLabel* _errorMsg = nullptr; }; #endif // __OPENSPACE_UI_LAUNCHER___MODULESDIALOG___H__ diff --git a/apps/OpenSpace/ext/launcher/include/profile/profileedit.h b/apps/OpenSpace/ext/launcher/include/profile/profileedit.h index 5f79490fd8..fc75e289e0 100644 --- a/apps/OpenSpace/ext/launcher/include/profile/profileedit.h +++ b/apps/OpenSpace/ext/launcher/include/profile/profileedit.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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,10 +40,10 @@ class ProfileEdit final : public QDialog { Q_OBJECT public: /** - * Constructor for ProfileEdit class + * Constructor for ProfileEdit class. * - * \param profile The #openspace::Profile object containing all data of the - * new or imported profile. + * \param profile The #openspace::Profile object containing all data of the new or + * imported profile * \param profileName The name of the profile to create * \param assetBasePath The path to the folder where the assets live * \param userAssetBasePath The path to the folder where the user assets live @@ -53,13 +53,14 @@ public: * \param parent Pointer to parent Qt widget */ ProfileEdit(openspace::Profile& profile, const std::string& profileName, - std::string assetBasePath, std::string userAssetBasePath, - std::string builtInProfileBasePath, std::string profileBasePath, QWidget* parent); + std::filesystem::path assetBasePath, std::filesystem::path userAssetBasePath, + std::filesystem::path builtInProfileBasePath, + std::filesystem::path profileBasePath, QWidget* parent); /** * Gets the status of the save when the window is closed; was the file saved? * - * \return true if the file was saved (false if cancel) + * \return `true` if the file was saved (false if cancel) */ bool wasSaved() const; @@ -67,17 +68,24 @@ public: * Gets the profile name from the top save/edit window. This can be changed by user in * order to save to a different file. * - * \return the profile name + * \return The profile name */ std::string specifiedFilename() const; /** - * Handles keypress while the Qt dialog window is open + * Handles keypress while the Qt dialog window is open. * - * \param evt #QKeyEvent object for the key press event + * \param evt The QKeyEvent object for the key press event */ virtual void keyPressEvent(QKeyEvent* evt) override; + void reject() override; + void closeWithoutSaving(); + void promptUserOfUnsavedChanges(); + +signals: + void raiseExitWindow(); + private slots: void duplicateProfile(); void openMeta(); @@ -90,7 +98,6 @@ private slots: void openDeltaTimes(); void openCamera(); void openMarkNodes(); - void cancel(); void approved(); private: @@ -98,10 +105,10 @@ private: void initSummaryTextForEachCategory(); openspace::Profile& _profile; - const std::string _assetBasePath; - const std::string _userAssetBasePath; - const std::string _profileBasePath; - const std::string _builtInProfilesPath; + const std::filesystem::path _assetBasePath; + const std::filesystem::path _userAssetBasePath; + const std::filesystem::path _profileBasePath; + const std::filesystem::path _builtInProfilesPath; bool _saveSelected = false; QLineEdit* _profileEdit = nullptr; @@ -118,8 +125,6 @@ private: QLabel* _timeLabel = nullptr; QLabel* _metaLabel = nullptr; QLabel* _additionalScriptsLabel = nullptr; - - QLabel* _errorMsg = nullptr; }; #endif // __OPENSPACE_UI_LAUNCHER___PROFILEEDIT___H__ diff --git a/apps/OpenSpace/ext/launcher/include/profile/propertiesdialog.h b/apps/OpenSpace/ext/launcher/include/profile/propertiesdialog.h index 6522de4035..99f6cac5b1 100644 --- a/apps/OpenSpace/ext/launcher/include/profile/propertiesdialog.h +++ b/apps/OpenSpace/ext/launcher/include/profile/propertiesdialog.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -34,25 +34,26 @@ class QDialogButtonBox; class QLabel; class QLineEdit; class QListWidget; +class QMessageBox; class QPushButton; class PropertiesDialog final : public QDialog { Q_OBJECT public: /** - * Constructor for properties class + * Constructor for properties class. * - * \param profile The #openspace::Profile object containing all data of the - * new or imported profile. * \param parent Pointer to parent Qt widget + * \param properties The #openspace::Profile::Property object containing all data of + * the new or imported profile */ PropertiesDialog(QWidget* parent, std::vector* properties); /** - * Handles keypress while the Qt dialog window is open + * Handles keypress while the Qt dialog window is open. * - * \param evt #QKeyEvent object for the key press event + * \param evt The QKeyEvent object for the key press event */ virtual void keyPressEvent(QKeyEvent* evt) override; @@ -69,7 +70,6 @@ private: void selectLineFromScriptLog(); - QString createOneLineSummary(openspace::Profile::Property p); void transitionFromEditMode(); void editBoxDisabled(bool disabled); bool areRequiredFormsFilled(); @@ -94,7 +94,7 @@ private: QPushButton* _cancelButton = nullptr; QDialogButtonBox* _buttonBox = nullptr; - QLabel* _errorMsg = nullptr; + QMessageBox* _errorMsg = nullptr; }; #endif // __OPENSPACE_UI_LAUNCHER___PROPERTIESDIALOG___H__ diff --git a/apps/OpenSpace/ext/launcher/include/profile/scriptlogdialog.h b/apps/OpenSpace/ext/launcher/include/profile/scriptlogdialog.h index b3014f0e31..582741433d 100644 --- a/apps/OpenSpace/ext/launcher/include/profile/scriptlogdialog.h +++ b/apps/OpenSpace/ext/launcher/include/profile/scriptlogdialog.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -31,20 +31,20 @@ class QLineEdit; class QListWidget; class QPushButton; -class ScriptlogDialog final : public QDialog { +class ScriptLogDialog final : public QDialog { Q_OBJECT public: - ScriptlogDialog(QWidget* parent, std::string filter = ""); + explicit ScriptLogDialog(QWidget* parent, std::string filter = ""); signals: void scriptsSelected(std::vector script); private: void createWidgets(); - + void loadScriptFile(); void saveChosenScripts(); - + void updateScriptList(); QListWidget* _scriptlogList = nullptr; diff --git a/apps/OpenSpace/ext/launcher/include/profile/timedialog.h b/apps/OpenSpace/ext/launcher/include/profile/timedialog.h index 268c688976..13eaf03910 100644 --- a/apps/OpenSpace/ext/launcher/include/profile/timedialog.h +++ b/apps/OpenSpace/ext/launcher/include/profile/timedialog.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -39,11 +39,11 @@ class TimeDialog final : public QDialog { Q_OBJECT public: /** - * Constructor for ostime class + * Constructor for ostime class. * - * \param profile The #openspace::Profile object containing all data of the - * new or imported profile. * \param parent Pointer to parent Qt widget + * \param time The #openspace::Profile::Time object containing all data of the new or + * imported profile. */ TimeDialog(QWidget* parent, std::optional* time); diff --git a/apps/OpenSpace/ext/launcher/include/settingsdialog.h b/apps/OpenSpace/ext/launcher/include/settingsdialog.h new file mode 100644 index 0000000000..d28bf3f8f6 --- /dev/null +++ b/apps/OpenSpace/ext/launcher/include/settingsdialog.h @@ -0,0 +1,75 @@ +/***************************************************************************************** + * * + * OpenSpace * + * * + * Copyright (c) 2014-2025 * + * * + * 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_UI_LAUNCHER___SETTINGSDIALOG___H__ +#define __OPENSPACE_UI_LAUNCHER___SETTINGSDIALOG___H__ + +#include + +#include + +class QCheckBox; +class QComboBox; +class QDialogButtonBox; +class QLabel; +class QLineEdit; + +class SettingsDialog : public QDialog { +Q_OBJECT +public: + SettingsDialog(openspace::Settings settings, + QWidget* parent = nullptr); + +signals: + void saveSettings(openspace::Settings settings); + +private: + void createWidgets(); + void loadFromSettings(const openspace::Settings& settings); + void updateSaveButton(); + + void save(); + void reject() override; + + QLineEdit* _configuration = nullptr; + QCheckBox* _rememberLastConfiguration = nullptr; + QLineEdit* _profile = nullptr; + QCheckBox* _rememberLastProfile = nullptr; + QComboBox* _propertyVisibility = nullptr; + QCheckBox* _bypassLauncher = nullptr; + QLabel* _bypassInformation = nullptr; + QComboBox* _layerServer = nullptr; + + struct { + QCheckBox* isEnabled = nullptr; + QLineEdit* location = nullptr; + } _mrf; + + QDialogButtonBox* _dialogButtons = nullptr; + + // The set of settings that we have while editing + openspace::Settings _currentEdit; +}; + +#endif // __OPENSPACE_UI_LAUNCHER___SETTINGSDIALOG___H__ diff --git a/apps/OpenSpace/ext/launcher/include/sgctedit/displaywindowunion.h b/apps/OpenSpace/ext/launcher/include/sgctedit/displaywindowunion.h index d4d67968c3..251d10e63b 100644 --- a/apps/OpenSpace/ext/launcher/include/sgctedit/displaywindowunion.h +++ b/apps/OpenSpace/ext/launcher/include/sgctedit/displaywindowunion.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -39,27 +39,27 @@ Q_OBJECT public: /** * Constructor for DisplayWindowUnion class, which manages the overall control layout - * including monitorBox, multiple WindowControl columns, and additional controls + * including monitorBox, multiple WindowControl columns, and additional controls. * - * \param monitorSizeList A vector containing QRect objects containing pixel dims - * of each monitor - * \param nMaxWindows The maximum number of windows allowed (depends on the number - * of monitors in the system) - * \param winColors An array of QColor objects for window colors. The indexing of - * this array matches the window indexing used elsewhere in the - * class. This allows for a unique color for each window. + * \param monitorSizeList A vector containing QRect objects containing pixel dims of + * each monitor + * \param nMaxWindows The maximum number of windows allowed (depends on the number of + * monitors in the system) + * \param windowColors An array of QColor objects for window colors. The indexing of + * this array matches the window indexing used elsewhere in the class. This + * allows for a unique color for each window * \param resetToDefault If set to true, all display and window settings will be - * initialized to their default values. + * initialized to their default values * \param parent The parent to which this widget belongs */ DisplayWindowUnion(const std::vector& monitorSizeList, int nMaxWindows, const std::array& windowColors, bool resetToDefault, QWidget* parent = nullptr); - + /** * Returns a vector of pointers to the WindowControl objects for all visible windows. * - * \return vector of pointers of WindowControl objects + * \return The vector of pointers of WindowControl objects */ std::vector activeWindowControls() const; @@ -67,7 +67,7 @@ public: * Returns a vector of pointers to the WindowControl objects for all windows, whether * they are visible or not. * - * \return vector of pointers of all WindowControl objects + * \return The vector of pointers of all WindowControl objects */ std::vector& windowControls(); @@ -87,14 +87,14 @@ public: * Returns the number of windows that are displayed (there can be more window * objects than are currently displayed). * - * \return the number of displayed windows in the current configuration + * \return The number of displayed windows in the current configuration */ unsigned int numWindowsDisplayed() const; signals: /** - * This signal is emitted when a windowhas changed. - * + * This signal is emitted when a window has changed. + * * \param monitorIndex The 0-based index of the monitor to which the window belongs to * \param windowIndex The 0-based index of the window that was changed * \param newDimensions The pixel sizes of the window after the change @@ -103,13 +103,13 @@ signals: /** * This signal is emitted when the total number of windows has changed. - * + * * \param newCount The new total number of windows */ void nWindowsChanged(int newCount); private: - void createWidgets(int nMaxWindows, std::vector monitorResolutions, + void createWidgets(int nMaxWindows, const std::vector& monitorResolutions, std::array windowColors, bool resetToDefault); void showWindows(); diff --git a/apps/OpenSpace/ext/launcher/include/sgctedit/monitorbox.h b/apps/OpenSpace/ext/launcher/include/sgctedit/monitorbox.h index c8f080fc24..02bcb05ebc 100644 --- a/apps/OpenSpace/ext/launcher/include/sgctedit/monitorbox.h +++ b/apps/OpenSpace/ext/launcher/include/sgctedit/monitorbox.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -35,16 +35,16 @@ class MonitorBox final : public QWidget { Q_OBJECT public: /** - * Constructor for MonitorBox class, which displays the system's monitor(s), - * their relative position and size, and window(s) that they contain + * Constructor for MonitorBox class, which displays the system's monitor(s), their + * relative position and size, and window(s) that they contain. * * \param widgetDims The size of the display widget in pixels, stored in QRect - * \param monitorResolution A vector containing the monitor's maximum display - * size in pixels in a QRect object + * \param monitorResolution A vector containing the monitor's maximum display size in + * pixels in a QRect object * \param nWindows The current number of windows that has been selected by the user - * \param winColors An array of QColor objects for window colors. The indexing of - * this array matches the window indexing used elsewhere in the - * class. This allows for a unique color for each window. + * \param winColors An array of QColor objects for window colors. The indexing of this + * array matches the window indexing used elsewhere in the class. This allows + * for a unique color for each window * \param parent The parent which to which this MonitorBox belongs */ MonitorBox(QRect widgetDims, const std::vector& monitorResolutions, @@ -65,10 +65,10 @@ public: /** * Called when the number of windows that should be displayed changes. - * - * \param newCount The new number of windows included + * + * \param nWindows The new number of windows included */ - void nWindowsDisplayedChanged(int newCount); + void nWindowsDisplayedChanged(int nWindows); protected: void paintEvent(QPaintEvent* event) override; diff --git a/apps/OpenSpace/ext/launcher/include/sgctedit/orientationdialog.h b/apps/OpenSpace/ext/launcher/include/sgctedit/orientationdialog.h index 5e4f62d370..51b088fe41 100644 --- a/apps/OpenSpace/ext/launcher/include/sgctedit/orientationdialog.h +++ b/apps/OpenSpace/ext/launcher/include/sgctedit/orientationdialog.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -37,16 +37,16 @@ Q_OBJECT public: /** * Constructor for OrientationDialog object which contains the input text boxes for - * orientation x,y,z values + * orientation x,y,z values, * - * \param orientation x,y,z angles in degrees contained in sgct::quat object - * \param parent pointer to Qt QWidget parent object + * \param orientation The x,y,z angles in degrees contained in sgct::quat object + * \param parent Pointer to Qt QWidget parent object */ OrientationDialog(sgct::quat& orientation, QWidget* parent); private: void ok(); - + QLineEdit* _linePitch = nullptr; QLineEdit* _lineRoll = nullptr; QLineEdit* _lineYaw = nullptr; diff --git a/apps/OpenSpace/ext/launcher/include/sgctedit/settingswidget.h b/apps/OpenSpace/ext/launcher/include/sgctedit/settingswidget.h index 393f739837..86cfaac759 100644 --- a/apps/OpenSpace/ext/launcher/include/sgctedit/settingswidget.h +++ b/apps/OpenSpace/ext/launcher/include/sgctedit/settingswidget.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -39,45 +39,44 @@ Q_OBJECT public: /** * Constructor for Orientation class, which manages the overall control layout - * including monitorBox, multiple WindowControl columns, and additional controls + * including monitorBox, multiple WindowControl columns, and additional controls. */ SettingsWidget(sgct::quat orientation, QWidget* parent = nullptr); - + /** - * Gets the user-provided x,y,z orientation values (degrees) + * Gets the user-provided x,y,z orientation values (degrees). * - * \return the orientation angles provided in sgct::quat object + * \return The orientation angles provided in sgct::quat object */ sgct::quat orientation() const; - + /** - * Gets the value for if VSync is enabled + * Gets the value for if VSync is enabled. * - * \return true if the VSync option is checked/enabled + * \return `true` if the VSync option is checked/enabled */ bool vsync() const; /** - * Gets whether the UI should be restricted to the first window - * - * \return true if the UI should only be on the first window + * Gets whether the UI should be restricted to the first window. + * + * \return `true` if the UI should only be on the first window */ bool showUiOnFirstWindow() const; /** - * Sets the value of the checkbox for putting the GUI only on the first window. - * If this is enabled, then the first window will draw2D but not draw3D. All - * subsequent windows will be the opposite of this. - * - * \param setUiOnFirstWindow boolean value, if set true then the GUI will only - * be on the first window + * Sets the value of the checkbox for putting the GUI only on the first window. If + * this is enabled, then the first window will draw2D but not draw3D. All subsequent + * windows will be the opposite of this. + * + * \param setUiOnFirstWindow If `true` then the GUI will only be on the first window */ void setShowUiOnFirstWindow(bool setUiOnFirstWindow); /** * Sets value for whether or not the checkbox for having the UI only on the first * window is enabled. This checkbox should only be clickable if the number of - * windows is 2 or more. + * windows is 2 or more. */ void setEnableShowUiOnFirstWindowCheckbox(bool enable); @@ -85,48 +84,48 @@ public: * Gets the value of the selection for which display first window should mirror if * the option to show the Ui in the first window is enabled. Note that this will * return a value even if the checkbox is not enabled. - * - * \return -1 if in a disabled state (e.g. when showUiOnFirstWindow() returns false) - * 0 if no window graphics are selected (only the UI will appear) - * (1-4) for which window's setting will be used for window 1 graphics + * + * \return `-1` if in a disabled state (e.g. when showUiOnFirstWindow() returns + * false). `0` if no window graphics are selected (only the UI will appear). + * `(1-4)` for which window's setting will be used for window 1 graphics */ int graphicsSelectionForShowUiOnFirstWindow() const; /** * Sets value of the graphics selection combo box for which other window that the * first window will mirror. - * - * \param selection int value for the combo box selection. - * 0 if no window graphics are selected (only the UI will appear) - * (1-4) for which window's setting to use for window 1 graphics + * + * \param selection integer value for the combo box selection. `0` if no window + * graphics are selected (only the UI will appear). `(1-4)` for which window's + * setting to use for window 1 graphics */ void setGraphicsSelectionForShowUiOnFirstWindow(int selection); /** * Sets the value of the checkbox for enabling VSync. - * - * \param enableVsync boolean value, if set true then VSync is enabled + * + * \param enableVsync If set `true` then VSync is enabled */ void setVsync(bool enableVsync); /** * Called when the number of windows that should be displayed changes. - * + * * \param newCount The new number of windows included */ void nWindowsDisplayedChanged(int newCount); /** - * Gets the pointer to the QComboBox that selects the graphics for first window - * - * \return pointer to the QComboBox object + * Gets the pointer to the QComboBox that selects the graphics for first window. + * + * \return Pointer to the QComboBox object */ QComboBox* firstWindowGraphicsSelection(); /** - * Gets the pointer to the QCheckBox that selects if UI is in first window only - * - * \return pointer to the QCheckBox object + * Gets the pointer to the QCheckBox that selects if UI is in first window only. + * + * \return Pointer to the QCheckBox object */ QCheckBox* showUiOnFirstWindowCheckbox(); @@ -135,7 +134,7 @@ signals: private: void showUiOnFirstWindowClicked(bool checked); - void firstWindowGraphicsSelectionChanged(const QString &text); + void firstWindowGraphicsSelectionChanged(const QString& text); sgct::quat _orientationValue = sgct::quat(0.f, 0.f, 0.f, 0.f); QCheckBox* _checkBoxVsync = nullptr; diff --git a/apps/OpenSpace/ext/launcher/include/sgctedit/sgctedit.h b/apps/OpenSpace/ext/launcher/include/sgctedit/sgctedit.h index 8168f17bf5..8991fdb1da 100644 --- a/apps/OpenSpace/ext/launcher/include/sgctedit/sgctedit.h +++ b/apps/OpenSpace/ext/launcher/include/sgctedit/sgctedit.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -52,9 +52,9 @@ public: * * \param parent The Qt QWidget parent object * \param userConfigPath A string containing the file path of the user config - * directory where all window configs are stored + * directory where all window configs are stored */ - SgctEdit(QWidget* parent, std::string userConfigPath); + SgctEdit(QWidget* parent, std::filesystem::path userConfigPath); /** * Constructor for SgctEdit class, the underlying class for the full window @@ -66,41 +66,41 @@ public: * \param configBasePath The path to the folder where default config files reside * \param parent Pointer to parent Qt widget */ - SgctEdit(sgct::config::Cluster& cluster, const std::string& configName, - std::string& configBasePath, QWidget* parent); + SgctEdit(sgct::config::Cluster& cluster, std::string configName, + std::filesystem::path& configBasePath, QWidget* parent); /** - * Returns the saved filename + * Returns the saved filename. * - * \return saved filename in std::string + * \return The saved filename in std::string */ std::filesystem::path saveFilename() const; /** * Returns the generated Cluster object. - * + * * \return The generated Cluster object */ sgct::config::Cluster cluster() const; /** * Called when the number of windows that should be displayed changes. - * + * * \param newCount The new number of windows included */ void nWindowsDisplayedChanged(int newCount); /** * Called when the checkbox for GUI only on first window is clicked. - * - * \param checked true if GUI is selected for first window only. + * + * \param checked `true` if GUI is selected for first window only. */ void firstWindowGuiOptionClicked(bool checked); /** * Called when the QComboBox is selected and has a new value - * - * \param text the QString of the selected value + * + * \param text The QString of the selected value */ void firstWindowGraphicsSelectionChanged(const QString& text); @@ -124,7 +124,7 @@ private: DisplayWindowUnion* _displayWidget = nullptr; SettingsWidget* _settingsWidget = nullptr; sgct::config::Cluster _cluster; - const std::string _userConfigPath; + const std::filesystem::path _userConfigPath; const std::array _colorsForWindows = { QColor(0x2B, 0x9E, 0xC3), QColor(0xFC, 0xAB, 0x10), diff --git a/apps/OpenSpace/ext/launcher/include/sgctedit/windowcontrol.h b/apps/OpenSpace/ext/launcher/include/sgctedit/windowcontrol.h index f7ae463f5f..8a66b6922f 100644 --- a/apps/OpenSpace/ext/launcher/include/sgctedit/windowcontrol.h +++ b/apps/OpenSpace/ext/launcher/include/sgctedit/windowcontrol.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -50,66 +50,74 @@ public: }; /** - * Constructor for WindowControl class, which contains settings and configuration - * for individual windows + * Constructor for WindowControl class, which contains settings and configuration for + * individual windows. * * \param monitorIndex The zero-based index for monitor number that this window - * resides in + * resides in * \param windowIndex The zero-based window index * \param monitorDims Vector of monitor dimensions in QRect form * \param winColor A QColor object for this window's unique color + * \param resetToDefault If this is `true`, the widgets will be initialized to their + * default values + * \param parent The parent widget */ WindowControl(int monitorIndex, int windowIndex, const std::vector& monitorDims, const QColor& winColor, bool resetToDefault, QWidget* parent); - + /** - * Makes the window label at top of a window control column visible + * Makes the window label at top of a window control column visible. * - * \param bool Shows the window label if true + * \param show Shows the window label if true */ void showWindowLabel(bool show); /** - * Resets all controls for this window to default settings + * Resets all controls for this window to default settings. */ void resetToDefaults(); /** - * Sets the window dimensions + * Sets the window dimensions. * * \param newDims The x, y dimensions to set the window to */ void setDimensions(QRectF newDims); - + /** - * Sets the monitor selection combobox + * Sets the monitor selection combobox. * * \param monitorIndex The zero-based monitor index to set the combobox selection to */ void setMonitorSelection(int monitorIndex); /** - * Sets the window name in the text edit box + * Sets the window name in the text edit box. * * \param windowName The window title to set */ void setWindowName(const std::string& windowName); /** - * Sets the window's decoration status. If set to true, then the window has a - * border. If false it is borderless + * Sets the window's decoration status. If set to true, then the window has a border. + * If false it is borderless. * * \param hasWindowDecoration boolean for if window has decoration (border) */ void setDecorationState(bool hasWindowDecoration); + /** + * Sets whether the window is shared using spout. + */ + void setSpoutOutputState(bool shouldSpoutOutput); + /** * Generates window configuration (sgct::config::Window struct) based on the - * GUI settings. + * GUI settings. * - * \param window The sgct::config::Window struct that is passed into the function - * and modified with the generated window content + * \param window The sgct::config::Window struct that is passed into the function and + * modified with the generated window content */ void generateWindowInformation(sgct::config::Window& window) const; @@ -117,67 +125,65 @@ public: * Sets the window's projection type to planar, with the accompanying parameters * for horizontal and vertical FOV. * - * \param hfov float value for horizontal field of view angle (degrees) - * \param vfov float value for vertical field of view angle (degrees) + * \param hfov The horizontal field of view angle in degrees + * \param vfov The vertical field of view angle in degrees */ void setProjectionPlanar(float hfov, float vfov); /** * Sets the window's projection type to fisheye, with the accompanying quality - * setting and spout option + * setting. * - * \param quality int value for number of vertical lines of resolution. This will - * be compared against the QualityValues array in order to set the - * correct combobox index - * \param spoutOutput bool for enabling the spout output option + * \param quality The value for number of vertical lines of resolution. This will be + * compared against the QualityValues array in order to set the correct + * combobox index */ - void setProjectionFisheye(int quality, bool spoutOutput); + void setProjectionFisheye(int quality); /** * Sets the window's projection type to spherical mirror, with the accompanying - * quality setting + * quality setting. * - * \param quality int value for number of vertical lines of resolution. This will - * be compared against the QualityValues array in order to set the - * correct combobox index + * \param quality The value for number of vertical lines of resolution. This will be + * compared against the QualityValues array in order to set the correct + * combobox index */ void setProjectionSphericalMirror(int quality); /** * Sets the window's projection type to cylindrical, with the accompanying quality - * setting and height offset value + * setting and height offset value. * - * \param quality int value for number of vertical lines of resolution. This will - * be compared against the QualityValues array in order to set the - * correct combobox index - * \param heightOffset float value for height offset to be applied + * \param quality The value for number of vertical lines of resolution. This will be + * compared against the QualityValues array in order to set the correct + * combobox index + * \param heightOffset The height offset to be applied */ void setProjectionCylindrical(int quality, float heightOffset); /** * Sets the window's projection type to equirectangular, with the accompanying - * quality setting and spout option + * quality setting. * - * \param quality int value for number of vertical lines of resolution. This will - * be compared against the QualityValues array in order to set the - * correct combobox index - * \param spoutOutput bool for enabling the spout output option + * \param quality The value for number of vertical lines of resolution. This will be + * compared against the QualityValues array in order to set the correct + * combobox index */ - void setProjectionEquirectangular(int quality, bool spoutOutput); + void setProjectionEquirectangular(int quality); /** - * Controls the visibility of all projection controls, including those - * that are only shown when the projection type is set to certain values. + * Controls the visibility of all projection controls, including those that are only + * shown when the projection type is set to certain values. * - * \param enable bool true if the projections controls should be visible + * \param enable `true` if the projections controls should be visible */ void setVisibilityOfProjectionGui(bool enable); /** - * Returns an sgct::config::Projections struct containing the projection - * information for this window. + * Returns an #sgct::config::Projections struct containing the projection information + * for this window. * - * \return sgct::config::Projections object containing the projection information + * \return The object containing the projection information */ sgct::config::Projections generateProjectionInformation() const; @@ -196,7 +202,7 @@ private: void onSizeYChanged(int newValue); void onOffsetXChanged(int newValue); void onOffsetYChanged(int newValue); - void onProjectionChanged(int newSelection); + void onProjectionChanged(int newSelection) const; void onFullscreenClicked(); void onAspectRatioLockClicked(); void onFovLockClicked(); @@ -213,7 +219,7 @@ private: bool _fovLocked = true; std::vector _monitorResolutions; QRectF _windowDimensions; - + QLabel* _windowNumber = nullptr; QLineEdit* _windowName = nullptr; QComboBox* _monitor = nullptr; @@ -224,6 +230,7 @@ private: QCheckBox* _windowDecoration = nullptr; QComboBox* _projectionType = nullptr; QLabel* _projectionLabel = nullptr; + QCheckBox* _spoutOutput = nullptr; struct { QWidget* widget = nullptr; @@ -240,7 +247,6 @@ private: QLabel* labelInfo = nullptr; QComboBox* quality = nullptr; QLabel* labelQuality = nullptr; - QCheckBox* spoutOutput = nullptr; } _fisheye; struct { @@ -264,7 +270,6 @@ private: QLabel* labelInfo = nullptr; QComboBox* quality = nullptr; QLabel* labelQuality = nullptr; - QCheckBox* spoutOutput = nullptr; } _equirectangular; const QIcon _lockIcon; diff --git a/apps/OpenSpace/ext/launcher/resources/images/cogwheel-highlight.png b/apps/OpenSpace/ext/launcher/resources/images/cogwheel-highlight.png new file mode 100644 index 0000000000..c4b46943ce Binary files /dev/null and b/apps/OpenSpace/ext/launcher/resources/images/cogwheel-highlight.png differ diff --git a/apps/OpenSpace/ext/launcher/resources/images/cogwheel.png b/apps/OpenSpace/ext/launcher/resources/images/cogwheel.png new file mode 100644 index 0000000000..9f3465f332 Binary files /dev/null and b/apps/OpenSpace/ext/launcher/resources/images/cogwheel.png differ diff --git a/apps/OpenSpace/ext/launcher/resources/qss/launcher.qss b/apps/OpenSpace/ext/launcher/resources/qss/launcher.qss index 5c920457bb..c30323e20e 100644 --- a/apps/OpenSpace/ext/launcher/resources/qss/launcher.qss +++ b/apps/OpenSpace/ext/launcher/resources/qss/launcher.qss @@ -9,8 +9,13 @@ QLabel#heading { font-size: 12pt; } -QLabel#error-message { - color: rgb(221, 17, 17); +QPushButton:focus, +QTextEdit:focus, +QTabWidget:focus, +QCheckBox:focus, +QComboBox:focus { + outline: none; + border: 2px solid rgb(61, 189, 238); } /* @@ -22,7 +27,7 @@ LauncherWindow QLabel { } LauncherWindow QLabel#label_choose, QLabel#label_options { - color: #dddddd; + color: rgb(255, 255, 255); font-size: 10pt; } @@ -30,11 +35,15 @@ LauncherWindow QLabel#clear { background-color: rgba(0, 0, 0, 0%); } +LauncherWindow QLabel#version-info { + font-size: 10pt; + color: #dfdfdf; +} + LauncherWindow QComboBox#config { - background: rgb(96, 96, 96); - border: 1px solid rgb(128, 128, 128); - border-radius: 3px; - border-color: rgb(225, 225, 225); + background: rgb(86, 86, 86); + border: 1px solid rgb(225, 225, 225); + border-radius: 2px; padding: 1px 18px 1px 3px; min-width: 14em; font-size: 10pt; @@ -44,7 +53,7 @@ LauncherWindow QComboBox#config { } LauncherWindow QComboBox#config:hover { - background: rgb(120, 120, 120); + background: rgb(110, 110, 110); } LauncherWindow QComboBox#config:disabled { @@ -52,26 +61,25 @@ LauncherWindow QComboBox#config:disabled { color: rgb(225, 225, 225); } -LauncherWindow QPushButton#large { - background: rgb(128, 128, 128); +LauncherWindow QPushButton#start { + background: rgb(96, 96, 96); + border: 2px solid rgb(225, 225, 225); border-radius: 2px; border-style: outset; - border-width: 2px; - border-color: rgb(225, 225, 225); font-size: 16pt; font-weight: bold; - color: rgb(239, 239, 239); + letter-spacing: 1px; + color: rgb(255, 255, 255); } -LauncherWindow QPushButton#large:hover { - background: rgb(150, 150, 150); +LauncherWindow QPushButton#start:hover { + background: rgb(120, 120, 120); } LauncherWindow QPushButton#small { - background: rgb(96, 96, 96); + background: rgb(86, 86, 86); + border: 1px solid rgb(225, 225, 225); border-radius: 2px; border-style: outset; - border-width: 1px; - border-color: rgb(225, 225, 225); min-height: 1em; font-size: 10pt; font-weight: bold; @@ -79,14 +87,34 @@ LauncherWindow QPushButton#small { } LauncherWindow QPushButton#small:hover { - background: rgb(120, 120, 120); + background: rgb(110, 110, 110); } LauncherWindow QPushButton#small:disabled { - color: rgb(180, 180, 180); - background: rgb(160, 160, 160); + background: rgb(204, 204, 204); + color: rgb(86, 86, 86); } +LauncherWindow QPushButton#settings { + border-image: url(:/images/cogwheel); + background-repeat: no-repeat; +} + +LauncherWindow QPushButton#settings:hover { + border-image: url(:/images/cogwheel-highlight); +} + +LauncherWindow QPushButton#small:focus, +LauncherWindow QPushButton#start:focus, +LauncherWindow QComboBox#config:focus +{ + outline: none; + border: 2px solid rgb(61, 189, 238); +} + +LauncherWindow QPushButton#settings:focus { + outline: 2px solid rgb(61, 189, 238); +} /* * ProfileEdit */ @@ -150,12 +178,7 @@ DeltaTimesDialog QListWidget { /* * Camera */ -CameraDialog QLabel#error-message { - min-width: 10em; -} - CameraDialog QLabel#camera-description { - color:rgb(96, 96, 96); margin: 1em; margin-top: 0.2em; margin-bottom: 0.4em; @@ -183,10 +206,6 @@ HorizonsDialog QLabel#thin { font-weight: normal; } -HorizonsDialog QLabel#error { - color: rgb(221, 17, 17); -} - HorizonsDialog QLabel#normal { color: rgb(0, 0, 0); } @@ -204,3 +223,17 @@ WindowControl QLabel#notice { font-weight: normal; font-size: 11pt; } + +/* + * Settings + */ +SettingsDialog QLabel#information { + font-style: italic; + font-weight: normal; + font-size: 8pt; +} + +SettingsDialog QComboBox#dropdown:focus { + outline: none; + border: 2px solid rgb(61, 189, 238); +} diff --git a/apps/OpenSpace/ext/launcher/resources/resources.qrc b/apps/OpenSpace/ext/launcher/resources/resources.qrc index 6942acaf81..e0c8417403 100644 --- a/apps/OpenSpace/ext/launcher/resources/resources.qrc +++ b/apps/OpenSpace/ext/launcher/resources/resources.qrc @@ -1,8 +1,10 @@ qss/launcher.qss - images/openspace-horiz-logo-small.png + images/cogwheel.png + images/cogwheel-highlight.png images/launcher-background.png + images/openspace-horiz-logo-small.png images/outline_locked.png images/outline_unlocked.png diff --git a/apps/OpenSpace/ext/launcher/src/filesystemaccess.cpp b/apps/OpenSpace/ext/launcher/src/filesystemaccess.cpp index e48303b9b9..858570061e 100644 --- a/apps/OpenSpace/ext/launcher/src/filesystemaccess.cpp +++ b/apps/OpenSpace/ext/launcher/src/filesystemaccess.cpp @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -31,11 +31,12 @@ FileSystemAccess::FileSystemAccess(std::string fileExtension, , _useCheckboxes(useCheckboxes) {} -std::string FileSystemAccess::useQtFileSystemModelToTraverseDir(std::string dir, - bool userAssets) { +std::string FileSystemAccess::useQtFileSystemModelToTraverseDir(const std::string& dir, + bool userAssets) +{ _filesystemModel.setRootPath(QString::fromStdString(dir)); - QModelIndex index = _filesystemModel.index(_filesystemModel.rootPath()); - QFileInfo fileInfo = _filesystemModel.fileInfo(index); + const QModelIndex index = _filesystemModel.index(_filesystemModel.rootPath()); + const QFileInfo fileInfo = _filesystemModel.fileInfo(index); std::vector dirsNested; std::vector out; parseChildDirElements(fileInfo, "", 0, dirsNested, out, userAssets); @@ -46,32 +47,38 @@ std::string FileSystemAccess::useQtFileSystemModelToTraverseDir(std::string dir, return combined; } -void FileSystemAccess::parseChildDirElements(QFileInfo fileInfo, std::string space, - int level, +void FileSystemAccess::parseChildDirElements(const QFileInfo& fileInfo, + const std::string& space, int level, std::vector& dirNames, std::vector& output, bool userAssets) { - QDir dir(fileInfo.filePath()); + const QDir dir = QDir(fileInfo.filePath()); bool hasDirHeaderBeenAdded = false; - QFileInfoList fileList = dir.entryInfoList(_fileFilterOptions); - for (int i = 0; i < fileList.size(); i++) { - QFileInfo fi = fileList[i]; + const QFileInfoList fileList = dir.entryInfoList(_fileFilterOptions); + for (const QFileInfo& fi : fileList) { std::string res = space + fi.fileName().toStdString(); if (level == 0 && userAssets) { - res = "${USER_ASSETS}/" + res; + res = std::format("${{USER_ASSETS}}/{}", res); } if (fi.isDir()) { dirNames.push_back(res); - parseChildDirElements(fi, (space + " "), level + 1, dirNames, output, userAssets); + parseChildDirElements( + fi, + (space + " "), + level + 1, + dirNames, + output, + userAssets + ); } else { parseChildFile(res, hasDirHeaderBeenAdded, dirNames, output); } } - bool isThisDirAnEmptyDeadEnd = !hasDirHeaderBeenAdded; - if (isThisDirAnEmptyDeadEnd && (dirNames.size() != 0)) { + const bool isThisDirAnEmptyDeadEnd = !hasDirHeaderBeenAdded; + if (isThisDirAnEmptyDeadEnd && !dirNames.empty()) { dirNames.pop_back(); } } @@ -80,12 +87,12 @@ void FileSystemAccess::parseChildFile(std::string filename, bool& hasDirHeaderBe std::vector& dirNames, std::vector& output) { - std::string cbox = (_useCheckboxes) ? "0" : ""; + const std::string cbox = _useCheckboxes ? "0" : ""; if (filename.length() <= _fileExtension.length()) { return; } else { - std::string extension = filename.substr(filename.length() + const std::string extension = filename.substr(filename.length() - _fileExtension.length()); if (extension != _fileExtension) { return; @@ -94,7 +101,7 @@ void FileSystemAccess::parseChildFile(std::string filename, bool& hasDirHeaderBe if (!hasDirHeaderBeenAdded) { for (const std::string& d : dirNames) { - if (d.length() > 0) { + if (!d.empty()) { output.push_back(cbox + d); } } diff --git a/apps/OpenSpace/ext/launcher/src/launcherwindow.cpp b/apps/OpenSpace/ext/launcher/src/launcherwindow.cpp index 9675293ae2..d8fba39c29 100644 --- a/apps/OpenSpace/ext/launcher/src/launcherwindow.cpp +++ b/apps/OpenSpace/ext/launcher/src/launcherwindow.cpp @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -25,17 +25,21 @@ #include "launcherwindow.h" #include "profile/profileedit.h" +#include "settingsdialog.h" #include #include #include -#include +#include #include -#include +#include #include +#include #include +#include #include #include +#include #include #include #include @@ -50,6 +54,8 @@ using namespace openspace; namespace { + constexpr std::string_view _loggerCat = "LauncherWindow"; + constexpr int ScreenWidth = 480; constexpr int ScreenHeight = 640; @@ -60,10 +66,12 @@ namespace { constexpr int SmallItemWidth = 100; constexpr int SmallItemHeight = SmallItemWidth / 4; + constexpr int SettingsIconSize = 35; + namespace geometry { constexpr QRect BackgroundImage(0, 0, ScreenWidth, ScreenHeight); constexpr QRect LogoImage(LeftRuler, TopRuler, ItemWidth, ItemHeight); - constexpr QRect ChooseLabel(LeftRuler, TopRuler + 80, 151, 24); + constexpr QRect ChooseLabel(LeftRuler + 10, TopRuler + 80, 151, 24); constexpr QRect ProfileBox(LeftRuler, TopRuler + 110, ItemWidth, ItemHeight); constexpr QRect NewProfileButton( LeftRuler + 160, TopRuler + 180, SmallItemWidth, SmallItemHeight @@ -71,7 +79,7 @@ namespace { constexpr QRect EditProfileButton( LeftRuler, TopRuler + 180, SmallItemWidth, SmallItemHeight ); - constexpr QRect OptionsLabel(LeftRuler, TopRuler + 230, 151, 24); + constexpr QRect OptionsLabel(LeftRuler + 10, TopRuler + 230, 151, 24); constexpr QRect WindowConfigBox(LeftRuler, TopRuler + 260, ItemWidth, ItemHeight); constexpr QRect NewWindowButton( LeftRuler + 160, TopRuler + 330, SmallItemWidth, SmallItemHeight @@ -82,15 +90,26 @@ namespace { constexpr QRect StartButton( LeftRuler, TopRuler + 400, ItemWidth, ItemHeight ); - } // geometry + constexpr QRect VersionString( + 5, ScreenHeight - SmallItemHeight, ItemWidth, SmallItemHeight + ); + constexpr QRect SettingsButton( + ScreenWidth - SettingsIconSize - 5, + ScreenHeight - SettingsIconSize - 5, + SettingsIconSize, + SettingsIconSize + ); + } // namespace geometry - std::optional loadProfileFromFile(QWidget* parent, std::string filename) { + std::optional loadProfileFromFile(QWidget* parent, + std::filesystem::path filename) + { // Verify that the file actually exists if (!std::filesystem::exists(filename)) { QMessageBox::critical( parent, "Exception", - QString::fromStdString(fmt::format( + QString::fromStdString(std::format( "Could not open profile file '{}'", filename )) ); @@ -98,29 +117,15 @@ namespace { return std::nullopt; } - std::ifstream inFile; try { - inFile.open(filename, std::ifstream::in); - } - catch (const std::ifstream::failure& e) { - throw ghoul::RuntimeError(fmt::format( - "Exception opening {} profile for read: {}", filename, e.what() - )); - } - std::string content; - std::string line; - while (std::getline(inFile, line)) { - content += line; - } - try { - return Profile(content); + return Profile(filename); } catch (const Profile::ParsingError& e) { QMessageBox::critical( parent, "Exception", - QString::fromStdString(fmt::format( - "ParsingError exception in {}: {}, {}", + QString::fromStdString(std::format( + "ParsingError exception in '{}': {}, {}", filename, e.component, e.message )) ); @@ -130,8 +135,8 @@ namespace { QMessageBox::critical( parent, "Exception", - QString::fromStdString(fmt::format( - "RuntimeError exception in {}, component {}: {}", + QString::fromStdString(std::format( + "RuntimeError exception in '{}', component {}: {}", filename, e.component, e.message )) ); @@ -155,8 +160,8 @@ namespace { QMessageBox::critical( parent, "Exception", - QString::fromStdString(fmt::format( - "Error writing data to file: '{}' as file is marked hidden", + QString::fromStdString(std::format( + "Error writing data to file '{}' as file is marked hidden", path )) ); @@ -167,8 +172,8 @@ namespace { QMessageBox::critical( parent, "Exception", - QString::fromStdString(fmt::format( - "Error writing data to file: {} ({})", path, e.what() + QString::fromStdString(std::format( + "Error writing data to file '{}': {}", path, e.what() )) ); } @@ -190,37 +195,42 @@ namespace { QMessageBox::critical( parent, "Exception", - QString::fromStdString(fmt::format( - "Error writing data to file: {} ({})", path, e.what() + QString::fromStdString(std::format( + "Error writing data to file '{}': {}", path, e.what() )) ); } } + + bool versionCheck(sgct::config::GeneratorVersion& v) { + return + v.versionCheck(versionMin) || + v == versionLegacy18 || + v == versionLegacy19; + } } // namespace using namespace openspace; LauncherWindow::LauncherWindow(bool profileEnabled, - const configuration::Configuration& globalConfig, + const Configuration& globalConfig, bool sgctConfigEnabled, std::string sgctConfigName, QWidget* parent) : QMainWindow(parent) - , _assetPath(absPath(globalConfig.pathTokens.at("ASSETS")).string() + '/') - , _userAssetPath(absPath(globalConfig.pathTokens.at("USER_ASSETS")).string() + '/') - , _configPath(absPath(globalConfig.pathTokens.at("CONFIG")).string() + '/') - , _userConfigPath(absPath(globalConfig.pathTokens.at("USER_CONFIG")).string() + '/') - , _profilePath(absPath(globalConfig.pathTokens.at("PROFILES")).string() + '/') - , _userProfilePath( - absPath(globalConfig.pathTokens.at("USER_PROFILES")).string() + '/' - ) - , _sgctConfigName(sgctConfigName) + , _assetPath(absPath(globalConfig.pathTokens.at("ASSETS")) / "") + , _userAssetPath(absPath(globalConfig.pathTokens.at("USER_ASSETS")) / "") + , _configPath(absPath(globalConfig.pathTokens.at("CONFIG")) / "") + , _userConfigPath(absPath(globalConfig.pathTokens.at("USER_CONFIG")) / "") + , _profilePath(absPath(globalConfig.pathTokens.at("PROFILES")) / "") + , _userProfilePath(absPath(globalConfig.pathTokens.at("USER_PROFILES")) / "") + , _sgctConfigName(std::move(sgctConfigName)) { Q_INIT_RESOURCE(resources); qInstallMessageHandler( [](QtMsgType type, const QMessageLogContext&, const QString& msg) { - if (type == QtCriticalMsg || type == QtFatalMsg || type == QtSystemMsg) { - std::cerr << msg.toStdString() << std::endl; + if (type == QtCriticalMsg || type == QtFatalMsg || type == QtCriticalMsg) { + std::cerr << msg.toStdString() << '\n'; } } ); @@ -232,11 +242,15 @@ LauncherWindow::LauncherWindow(bool profileEnabled, { QFile file(":/qss/launcher.qss"); file.open(QFile::ReadOnly); - QString styleSheet = QLatin1String(file.readAll()); + const QString styleSheet = QLatin1String(file.readAll()); setStyleSheet(styleSheet); } setCentralWidget(createCentralWidget()); + QPushButton* startButton = centralWidget()->findChild("start"); + if (startButton) { + startButton->setFocus(Qt::OtherFocusReason); + } populateProfilesList(globalConfig.profile); _profileBox->setEnabled(profileEnabled); @@ -246,12 +260,12 @@ LauncherWindow::LauncherWindow(bool profileEnabled, // Trigger currentIndexChanged so the preview file read is performed _windowConfigBox->currentIndexChanged(_windowConfigBox->currentIndex()); - std::filesystem::path p = absPath( + const std::filesystem::path p = absPath( globalConfig.pathTokens.at("SYNC") + "/http/launcher_images" ); if (std::filesystem::exists(p)) { try { - setBackgroundImage(p.string()); + setBackgroundImage(p); } catch (const std::exception& e) { std::cerr << "Error occurrred while reading background images: " << e.what(); @@ -272,22 +286,84 @@ QWidget* LauncherWindow::createCentralWidget() { logoImage->setPixmap(QPixmap(":/images/openspace-horiz-logo-small.png")); QLabel* labelChoose = new QLabel("Choose Profile", centralWidget); - labelChoose->setObjectName("clear"); labelChoose->setGeometry(geometry::ChooseLabel); labelChoose->setObjectName("label_choose"); _profileBox = new QComboBox(centralWidget); _profileBox->setObjectName("config"); _profileBox->setGeometry(geometry::ProfileBox); + _profileBox->setAccessibleName("Choose profile"); + + QPushButton* editProfileButton = new QPushButton("Edit", centralWidget); + connect( + editProfileButton, &QPushButton::released, + [this]() { + const std::string selection = _profileBox->currentText().toStdString(); + const int selectedIndex = _profileBox->currentIndex(); + const bool isUserProfile = selectedIndex < _userAssetCount; + openProfileEditor(selection, isUserProfile); + } + ); + editProfileButton->setObjectName("small"); + editProfileButton->setGeometry(geometry::EditProfileButton); + editProfileButton->setCursor(Qt::PointingHandCursor); + editProfileButton->setAutoDefault(true); + editProfileButton->setAccessibleName("Edit profile"); + + QPushButton* newProfileButton = new QPushButton("New", centralWidget); + connect( + newProfileButton, &QPushButton::released, + [this]() { + openProfileEditor("", true); + } + ); + newProfileButton->setObjectName("small"); + newProfileButton->setGeometry(geometry::NewProfileButton); + newProfileButton->setCursor(Qt::PointingHandCursor); + newProfileButton->setAutoDefault(true); + newProfileButton->setAccessibleName("New profile"); QLabel* optionsLabel = new QLabel("Window Options", centralWidget); - optionsLabel->setObjectName("clear"); optionsLabel->setGeometry(geometry::OptionsLabel); optionsLabel->setObjectName("label_options"); _windowConfigBox = new QComboBox(centralWidget); _windowConfigBox->setObjectName("config"); _windowConfigBox->setGeometry(geometry::WindowConfigBox); + _windowConfigBox->setAccessibleName("Select window configuration"); + + _editWindowButton = new QPushButton("Edit", centralWidget); + connect( + _editWindowButton, + &QPushButton::released, + [this]() { + const std::filesystem::path pathSelected = absPath(selectedWindowConfig()); + const bool isUserConfig = isUserConfigSelected(); + const std::string fileSelected = pathSelected.generic_string(); + if (std::filesystem::is_regular_file(pathSelected)) { + openWindowEditor(fileSelected, isUserConfig); + } + } + ); + _editWindowButton->setVisible(true); + _editWindowButton->setObjectName("small"); + _editWindowButton->setGeometry(geometry::EditWindowButton); + _editWindowButton->setCursor(Qt::PointingHandCursor); + _editWindowButton->setAutoDefault(true); + _editWindowButton->setAccessibleName("Edit window configuration"); + + QPushButton* newWindowButton = new QPushButton("New", centralWidget); + connect( + newWindowButton, &QPushButton::released, + [this]() { + openWindowEditor("", true); + } + ); + newWindowButton->setObjectName("small"); + newWindowButton->setGeometry(geometry::NewWindowButton); + newWindowButton->setCursor(Qt::PointingHandCursor); + newWindowButton->setAutoDefault(true); + newWindowButton->setAccessibleName("New window configuration"); QPushButton* startButton = new QPushButton("START", centralWidget); connect( @@ -306,68 +382,59 @@ QWidget* LauncherWindow::createCentralWidget() { } } ); - startButton->setObjectName("large"); + startButton->setObjectName("start"); startButton->setGeometry(geometry::StartButton); startButton->setCursor(Qt::PointingHandCursor); + startButton->setAutoDefault(true); + startButton->setAccessibleName("Start OpenSpace"); - QPushButton* newProfileButton = new QPushButton("New", centralWidget); - connect( - newProfileButton, &QPushButton::released, - [this]() { - openProfileEditor("", true); - } + QLabel* versionLabel = new QLabel(centralWidget); + versionLabel->setVisible(true); + versionLabel->setText( + QString::fromStdString(std::string(openspace::OPENSPACE_VERSION_STRING_FULL)) ); - newProfileButton->setObjectName("small"); - newProfileButton->setGeometry(geometry::NewProfileButton); - newProfileButton->setCursor(Qt::PointingHandCursor); + versionLabel->setObjectName("version-info"); + versionLabel->setGeometry(geometry::VersionString); - QPushButton* editProfileButton = new QPushButton("Edit", centralWidget); + QPushButton* settingsButton = new QPushButton(centralWidget); connect( - editProfileButton, &QPushButton::released, - [this]() { - const std::string selection = _profileBox->currentText().toStdString(); - int selectedIndex = _profileBox->currentIndex(); - bool isUserProfile = selectedIndex < _userAssetCount; - openProfileEditor(selection, isUserProfile); - } - ); - editProfileButton->setObjectName("small"); - editProfileButton->setGeometry(geometry::EditProfileButton); - editProfileButton->setCursor(Qt::PointingHandCursor); - - QPushButton* newWindowButton = new QPushButton("New", centralWidget); - connect( - newWindowButton, &QPushButton::released, - [this]() { - openWindowEditor("", true); - } - ); - newWindowButton->setObjectName("small"); - newWindowButton->setGeometry(geometry::NewWindowButton); - newWindowButton->setCursor(Qt::PointingHandCursor); - - _editWindowButton = new QPushButton("Edit", centralWidget); - connect( - _editWindowButton, + settingsButton, &QPushButton::released, [this]() { - std::filesystem::path pathSelected = absPath(selectedWindowConfig()); - bool isUserConfig = isUserConfigSelected(); - std::string fileSelected = pathSelected.generic_string(); - if (std::filesystem::is_regular_file(pathSelected)) { - openWindowEditor(fileSelected, isUserConfig); - } + using namespace openspace; + + Settings settings = loadSettings(); + + SettingsDialog dialog(std::move(settings), this); + connect( + &dialog, + &SettingsDialog::saveSettings, + [this](Settings s) { + saveSettings(s, findSettings()); + + if (s.profile.has_value()) { + populateProfilesList(*s.profile); + } + + if (s.configuration.has_value()) { + populateWindowConfigsList(*s.configuration); + } + } + ); + + dialog.exec(); } ); - _editWindowButton->setVisible(true); - _editWindowButton->setObjectName("small"); - _editWindowButton->setGeometry(geometry::EditWindowButton); - _editWindowButton->setCursor(Qt::PointingHandCursor); + settingsButton->setObjectName("settings"); + settingsButton->setGeometry(geometry::SettingsButton); + settingsButton->setIconSize(QSize(SettingsIconSize, SettingsIconSize)); + settingsButton->setAutoDefault(true); + settingsButton->setAccessibleName("Settings"); return centralWidget; } -void LauncherWindow::setBackgroundImage(const std::string& syncPath) { +void LauncherWindow::setBackgroundImage(const std::filesystem::path& syncPath) { namespace fs = std::filesystem; // First, we iterate through all folders in the launcher_images sync folder and we get @@ -397,44 +464,50 @@ void LauncherWindow::setBackgroundImage(const std::string& syncPath) { } // Now we know which folder to use, we will pick an image at random - std::vector files; + std::vector files; for (const fs::directory_entry& p : fs::directory_iterator(latest.path)) { - files.push_back(p.path().string()); + files.push_back(p.path()); } std::random_device rd; std::mt19937 g(rd()); std::shuffle(files.begin(), files.end(), g); // We know there has to be at least one folder, so it's fine to just pick the first while (!files.empty()) { - std::string p = files.front(); - if (std::filesystem::path(p).extension() == ".png") { - // If the top path starts with the png extension, we have found our candidate - break; + const std::filesystem::path& p = files.front(); + if (p.extension() != ".png" || p.filename() == "overlay.png") { + files.erase(files.begin()); } else { - // There shouldn't be any non-png images in here, but you never know. So we - // just remove non-image files here - files.erase(files.begin()); + // If the top path starts with the png extension, we have found our candidate + break; } } // There better be at least one file left, but just in in case if (!files.empty()) { - std::string image = files.front(); - _backgroundImage->setPixmap(QPixmap(QString::fromStdString(image))); + // Take the selected image and overpaint the overlay increasing the contrast + std::string image = files.front().string(); + QPixmap pixmap = QPixmap(QString::fromStdString(image)); + QPainter painter = QPainter(&pixmap); + painter.setOpacity(0.7); + QPixmap overlay = QPixmap(QString::fromStdString( + std::format("{}/overlay.png", latest.path.path()) + )); + painter.drawPixmap(pixmap.rect(), overlay); + _backgroundImage->setPixmap(pixmap); } } -void LauncherWindow::populateProfilesList(std::string preset) { +void LauncherWindow::populateProfilesList(const std::string& preset) { namespace fs = std::filesystem; - + _profileBox->clear(); _userAssetCount = 0; if (!std::filesystem::exists(_profilePath)) { LINFOC( "LauncherWindow", - fmt::format("Could not find profile folder '{}'", _profilePath) + std::format("Could not find profile folder '{}'", _profilePath) ); return; } @@ -457,20 +530,22 @@ void LauncherWindow::populateProfilesList(std::string preset) { } std::sort(profiles.begin(), profiles.end()); for (const fs::directory_entry& profile : profiles) { - std::filesystem::path path = profile.path(); + const std::filesystem::path& path = profile.path(); _profileBox->addItem( QString::fromStdString(path.stem().string()), QString::fromStdString(path.string()) ); - // Add toooltip - std::optional p = loadProfileFromFile(this, path.string()); - int idx = _profileBox->count() - 1; + // Add tooltip + std::optional p = loadProfileFromFile(this, path); + const int idx = _profileBox->count() - 1; if (p.has_value() && (*p).meta.has_value()) { - const std::optional& d = (*p).meta.value().description; + const std::optional& d = p->meta.value().description; if (d.has_value()) { // Tooltip has to be 'rich text' to linebreak properly - QString tooltip = QString::fromStdString(fmt::format("

{}

", *d)); + const QString tooltip = QString::fromStdString(std::format( + "

{}

", *d + )); _profileBox->setItemData(idx, tooltip, Qt::ToolTipRole); } } @@ -493,20 +568,22 @@ void LauncherWindow::populateProfilesList(std::string preset) { // Add sorted items to list for (const fs::directory_entry& profile : profiles) { - std::filesystem::path path = profile.path(); + const std::filesystem::path& path = profile.path(); _profileBox->addItem( QString::fromStdString(path.stem().string()), QString::fromStdString(path.string()) ); // Add toooltip - std::optional p = loadProfileFromFile(this, path.string()); - int idx = _profileBox->count() - 1; + std::optional p = loadProfileFromFile(this, path); + const int idx = _profileBox->count() - 1; if (p.has_value() && (*p).meta.has_value()) { - const std::optional& d = (*p).meta.value().description; + const std::optional& d = p->meta.value().description; if (d.has_value()) { // Tooltip has to be 'rich text' to linebreak properly - QString tooltip = QString::fromStdString(fmt::format("

{}

", *d)); + const QString tooltip = QString::fromStdString(std::format( + "

{}

", *d + )); _profileBox->setItemData(idx, tooltip, Qt::ToolTipRole); } } @@ -533,22 +610,30 @@ void LauncherWindow::populateProfilesList(std::string preset) { // Returns 'true' if the file was a configuration file, 'false' otherwise bool handleConfigurationFile(QComboBox& box, const std::filesystem::directory_entry& p) { - const bool isXml = p.path().extension() == ".xml"; const bool isJson = p.path().extension() == ".json"; - if (!isXml && !isJson) { + if (!isJson) { return false; } box.addItem(QString::fromStdString(p.path().filename().string())); - // For now, mark the XML configuration files to show that they are deprecated - if (isXml) { - box.setItemData(box.count() - 1, QBrush(Qt::darkYellow), Qt::ForegroundRole); + // Add tooltip + std::string tooltipDescription = "(no description available)"; + try { + sgct::config::Cluster cluster = sgct::readConfig(p.path()); + if (cluster.meta && cluster.meta->description.has_value()) { + tooltipDescription = *cluster.meta->description; + } } + catch (const sgct::Error&) {} + const QString toolTip = QString::fromStdString( + std::format("

{}

", tooltipDescription) + ); + box.setItemData(box.count() - 1, toolTip, Qt::ToolTipRole); return true; } -void LauncherWindow::populateWindowConfigsList(std::string preset) { +void LauncherWindow::populateWindowConfigsList(const std::string& preset) { namespace fs = std::filesystem; // Disconnect the signal for new window config selection during population process @@ -572,8 +657,6 @@ void LauncherWindow::populateWindowConfigsList(std::string preset) { _userConfigStartingIdx++; _preDefinedConfigStartingIdx++; - bool hasXmlConfig = false; - // Sort files std::vector files; for (const fs::directory_entry& p : fs::directory_iterator(_userConfigPath)) { @@ -581,15 +664,14 @@ void LauncherWindow::populateWindowConfigsList(std::string preset) { } std::sort(files.begin(), files.end()); - // Add all the files with the .xml or .json extension to the dropdown + // Add all the files with the .json extension to the dropdown for (const fs::directory_entry& p : files) { - bool isConfigFile = handleConfigurationFile(*_windowConfigBox, p); + const bool isConfigFile = handleConfigurationFile(*_windowConfigBox, p); if (isConfigFile) { _userConfigCount++; _userConfigStartingIdx++; _preDefinedConfigStartingIdx++; } - hasXmlConfig |= p.path().extension() == ".xml"; } _windowConfigBox->addItem(QString::fromStdString("--- OpenSpace Configurations ---")); model = qobject_cast(_windowConfigBox->model()); @@ -603,39 +685,34 @@ void LauncherWindow::populateWindowConfigsList(std::string preset) { files.push_back(p); } std::sort(files.begin(), files.end()); - // Add all the files with the .xml or .json extension to the dropdown + // Add all the files with the .json extension to the dropdown for (const fs::directory_entry& p : files) { handleConfigurationFile(*_windowConfigBox, p); - hasXmlConfig |= p.path().extension() == ".xml"; } } else { LINFOC( "LauncherWindow", - fmt::format("Could not find config folder '{}'", _configPath) + std::format("Could not find config folder '{}'", _configPath) ); } - if (hasXmlConfig) { - // At least one XML configuration file is present, so we should show the tooltip - // informing the user that files will be deprecated - _windowConfigBox->setToolTip( - "Support for XML-based configuration files will be removed in the next " - "version of OpenSpace. Please convert the files to the new JSON format or " - "run the Node tool at " - "https://github.com/sgct/sgct/tree/master/support/config-converter" - ); - } - - // Always add the .cfg sgct default as first item + // Always add the .cfg SGCT default as first item _windowConfigBox->insertItem( _windowConfigBoxIndexSgctCfgDefault, QString::fromStdString(_sgctConfigName) ); + const QString defaultTip = + "

The basic default configuration specified in the .cfg file

"; + _windowConfigBox->setItemData( + _windowConfigBoxIndexSgctCfgDefault, + defaultTip, + Qt::ToolTipRole + ); // Try to find the requested configuration file and set it as the current one. As we // have support for function-generated configuration files that will not be in the // list we need to add a preset that doesn't exist a file for - const int idx = _windowConfigBox->findText(QString::fromStdString(std::move(preset))); + const int idx = _windowConfigBox->findText(QString::fromStdString(preset)); if (idx != -1) { _windowConfigBox->setCurrentIndex(idx); } @@ -663,8 +740,7 @@ void LauncherWindow::populateWindowConfigsList(std::string preset) { } void LauncherWindow::onNewWindowConfigSelection(int newIndex) { - std::filesystem::path pathSelected = absPath(selectedWindowConfig()); - std::string fileSelected = pathSelected.string(); + const std::filesystem::path pathSelected = absPath(selectedWindowConfig()); if (newIndex == _windowConfigBoxIndexSgctCfgDefault) { _editWindowButton->setEnabled(false); _editWindowButton->setToolTip( @@ -674,22 +750,23 @@ void LauncherWindow::onNewWindowConfigSelection(int newIndex) { else if (newIndex >= _preDefinedConfigStartingIdx) { _editWindowButton->setEnabled(false); _editWindowButton->setToolTip( - QString::fromStdString(fmt::format( + QString::fromStdString(std::format( "Cannot edit '{}'\nsince it is one of the configuration " - "files provided in the OpenSpace installation", fileSelected)) + "files provided in the OpenSpace installation", pathSelected + )) ); } else { try { - sgct::config::GeneratorVersion previewGenVersion = - sgct::readConfigGenerator(fileSelected); - if (!versionCheck(previewGenVersion)) { + sgct::config::Cluster c = sgct::readConfig(pathSelected); + if (!c.generator || !versionCheck(*c.generator)) { _editWindowButton->setEnabled(false); - _editWindowButton->setToolTip(QString::fromStdString(fmt::format( + _editWindowButton->setToolTip(QString::fromStdString(std::format( "This file does not meet the minimum required version of {}.", - versionMin.versionString()))); + versionMin.versionString() + ))); return; - } + } } catch (const std::runtime_error&) { // Ignore an exception here because clicking the edit button will @@ -700,41 +777,62 @@ void LauncherWindow::onNewWindowConfigSelection(int newIndex) { } } -bool LauncherWindow::versionCheck(sgct::config::GeneratorVersion& v) const { - return (v.versionCheck(versionMin) || v == versionLegacy18 || v == versionLegacy19); -} - void LauncherWindow::openProfileEditor(const std::string& profile, bool isUserProfile) { std::optional p; - std::string saveProfilePath = isUserProfile ? _userProfilePath : _profilePath; + std::filesystem::path savePath = isUserProfile ? _userProfilePath : _profilePath; if (profile.empty()) { // If the requested profile is the empty string, then we want to create a new one p = Profile(); } else { // Otherwise, we want to load that profile - std::string fullProfilePath = saveProfilePath + profile + ".profile"; - p = loadProfileFromFile(this, fullProfilePath); + std::string fullProfilePath = std::format("{}{}.profile", savePath, profile); + p = loadProfileFromFile(this, std::move(fullProfilePath)); if (!p.has_value()) { return; } } - ProfileEdit editor( + ProfileEdit editor = ProfileEdit( *p, profile, _assetPath, _userAssetPath, _profilePath, - saveProfilePath, + savePath, this ); + + // Check whether there are unsaved changes from the profile editor + connect( + &editor, + &ProfileEdit::raiseExitWindow, + [this, &editor, &savePath, &p, &profile]() { + const std::string origPath = std::format("{}{}.profile", savePath, profile); + // If this is a new profile we want to prompt the user + if (!std::filesystem::exists(origPath)) { + editor.promptUserOfUnsavedChanges(); + return; + } + + // Check if the profile is the same as current existing file + if (*p != Profile(origPath)) { + editor.promptUserOfUnsavedChanges(); + } + else { + editor.closeWithoutSaving(); + } + } + ); + editor.exec(); if (editor.wasSaved()) { if (editor.specifiedFilename() != profile) { - saveProfilePath = _userProfilePath; + savePath = _userProfilePath; } - std::string path = saveProfilePath + editor.specifiedFilename() + ".profile"; + const std::string path = std::format( + "{}{}.profile", savePath, editor.specifiedFilename() + ); saveProfile(this, path, *p); populateProfilesList(editor.specifiedFilename()); } @@ -758,7 +856,7 @@ void LauncherWindow::editRefusalDialog(const std::string& title, const std::stri void LauncherWindow::openWindowEditor(const std::string& winCfg, bool isUserWinCfg) { using namespace sgct; - std::string saveWindowCfgPath = isUserWinCfg ? _userConfigPath : _configPath; + std::filesystem::path saveWindowPath = isUserWinCfg ? _userConfigPath : _configPath; int ret = QDialog::DialogCode::Rejected; config::Cluster preview; if (winCfg.empty()) { @@ -768,46 +866,47 @@ void LauncherWindow::openWindowEditor(const std::string& winCfg, bool isUserWinC handleReturnFromWindowEditor( editor.cluster(), editor.saveFilename(), - saveWindowCfgPath + saveWindowPath ); } } else { try { - config::GeneratorVersion previewGenVersion = readConfigGenerator(winCfg); - loadFileAndSchemaThenValidate( + sgct::config::Cluster cluster; + try { + cluster = readConfig(winCfg); + } + catch (const std::runtime_error& e) { + // Re-throw an SGCT error exception with the runtime exception message + throw std::runtime_error(std::format( + "Importing of this configuration file failed because of a " + "problem detected in the readConfig function:\n\n{}", e.what() + )); + } + + assert(cluster.generator); + std::string err = validateConfigAgainstSchema( winCfg, - _configPath + "/schema/sgct.schema.json", - "This configuration file is unable to generate a proper display" + _configPath / "schema/sgct.schema.json" ); - loadFileAndSchemaThenValidate( - winCfg, - _configPath + "/schema/sgcteditor.schema.json", - "This configuration file is valid for generating a display, but " - "its format does not match the window editor requirements and " - "cannot be opened in the editor" - ); - if (versionCheck(previewGenVersion)) { - try { - preview = readConfig( - winCfg, - "This configuration file is unable to generate a proper display " - "due to a problem detected in the readConfig function" - ); - } - catch (const std::runtime_error& e) { - //Re-throw an SGCT error exception with the runtime exception message - throw std::runtime_error( - fmt::format( - "Importing of this configuration file failed because of a " - "problem detected in the readConfig function:\n\n{}", e.what() - ) - ); - } - SgctEdit editor( - preview, + if (!err.empty()) { + editRefusalDialog( + "Format Validation Error", + std::format("Parsing error found in file '{}'", winCfg), + std::format( + "{}\n\nThis configuration file is unable to generate a proper " + "display", + err + ) + ); + return; + } + + if (versionCheck(*cluster.generator)) { + SgctEdit editor = SgctEdit( + cluster, winCfg, - saveWindowCfgPath, + saveWindowPath, this ); ret = editor.exec(); @@ -815,15 +914,15 @@ void LauncherWindow::openWindowEditor(const std::string& winCfg, bool isUserWinC handleReturnFromWindowEditor( editor.cluster(), editor.saveFilename(), - saveWindowCfgPath + saveWindowPath ); } } else { editRefusalDialog( "File Format Version Error", - fmt::format( - "File '{}' does not meet the minimum required version of {}.", + std::format( + "File '{}' does not meet the minimum required version of {}", winCfg, versionMin.versionString() ), "" @@ -833,7 +932,7 @@ void LauncherWindow::openWindowEditor(const std::string& winCfg, bool isUserWinC catch (const std::runtime_error& e) { editRefusalDialog( "Format Validation Error", - fmt::format("Parsing error found in file '{}'", winCfg), + std::format("Parsing error found in file '{}'", winCfg), e.what() ); } @@ -842,13 +941,16 @@ void LauncherWindow::openWindowEditor(const std::string& winCfg, bool isUserWinC void LauncherWindow::handleReturnFromWindowEditor(const sgct::config::Cluster& cluster, std::filesystem::path savePath, - const std::string& saveWindowCfgPath) + const std::filesystem::path& saveWindowCfgPath) { savePath.replace_extension(".json"); saveWindowConfig(this, savePath, cluster); // Truncate path to convert this back to path relative to _userConfigPath - std::string p = std::filesystem::proximate(savePath, saveWindowCfgPath).string(); - populateWindowConfigsList(p); + const std::filesystem::path p = std::filesystem::proximate( + savePath, + saveWindowCfgPath + ); + populateWindowConfigsList(p.string()); } bool LauncherWindow::wasLaunchSelected() const { @@ -861,7 +963,7 @@ std::string LauncherWindow::selectedProfile() const { } std::string LauncherWindow::selectedWindowConfig() const { - int idx = _windowConfigBox->currentIndex(); + const int idx = _windowConfigBox->currentIndex(); if (idx == 0) { return _sgctConfigName; } @@ -874,6 +976,15 @@ std::string LauncherWindow::selectedWindowConfig() const { } bool LauncherWindow::isUserConfigSelected() const { - int selectedIndex = _windowConfigBox->currentIndex(); + const int selectedIndex = _windowConfigBox->currentIndex(); return (selectedIndex <= _userConfigCount); } + +void LauncherWindow::keyPressEvent(QKeyEvent* evt) { + if (evt->key() == Qt::Key_Escape) { + _shouldLaunch = false; + close(); + return; + } + QMainWindow::keyPressEvent(evt); +} diff --git a/apps/OpenSpace/ext/launcher/src/profile/actiondialog.cpp b/apps/OpenSpace/ext/launcher/src/profile/actiondialog.cpp index aff8eb342e..5112712a30 100644 --- a/apps/OpenSpace/ext/launcher/src/profile/actiondialog.cpp +++ b/apps/OpenSpace/ext/launcher/src/profile/actiondialog.cpp @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -27,11 +27,12 @@ #include "profile/line.h" #include "profile/scriptlogdialog.h" #include -#include +#include #include #include #include #include +#include #include #include #include @@ -56,8 +57,8 @@ namespace { void updateListItem(QListWidgetItem* item, const Profile::Keybinding& kb) { ghoul_assert(item, "Item must exist at this point"); - std::string name = fmt::format("{}\t{}", ghoul::to_string(kb.key), kb.action); - item->setText(QString::fromStdString(name)); + const std::string n = std::format("{}\t{}", ghoul::to_string(kb.key), kb.action); + item->setText(QString::fromStdString(n)); } } // namespace @@ -103,7 +104,7 @@ void ActionDialog::createWidgets() { // *----------------------*---------------*-----------------* QGridLayout* layout = new QGridLayout(this); - + createActionWidgets(layout); clearActionFields(); @@ -140,9 +141,8 @@ void ActionDialog::createActionWidgets(QGridLayout* layout) { this, &ActionDialog::actionSelected ); - for (size_t i = 0; i < _actionData.size(); ++i) { - const Profile::Action& action = _actionData[i]; - std::string name = action.name.empty() ? action.identifier : action.name; + for (const Profile::Action& action : _actionData) { + const std::string name = action.name.empty() ? action.identifier : action.name; _actionWidgets.list->addItem(new QListWidgetItem(QString::fromStdString(name))); } @@ -161,26 +161,18 @@ void ActionDialog::createActionWidgets(QGridLayout* layout) { _actionWidgets.identifier, &QLineEdit::textEdited, [this]() { // Check if the identifier is legal - std::string identifier = _actionWidgets.identifier->text().toStdString(); - bool isLegal = identifier.find_first_of("\t\n. ") == std::string::npos; - if (isLegal) { - _actionWidgets.infoText->clear(); - _actionWidgets.infoText->setHidden(true); - } - else { - _actionWidgets.infoText->setText( - "Identifier must not contain whitespace or ." + const std::string id = _actionWidgets.identifier->text().toStdString(); + const bool isLegal = id.find_first_of("\t\n ") == std::string::npos; + if (!isLegal) { + _actionWidgets.infoText->showMessage( + "Identifier must not contain whitespace" ); - _actionWidgets.infoText->setHidden(false); } } ); layout->addWidget(_actionWidgets.identifier, 1, 2); - _actionWidgets.infoText = new QLabel; - _actionWidgets.infoText->setHidden(true); - _actionWidgets.infoText->setObjectName("error-message"); - layout->addWidget(_actionWidgets.infoText, 1, 3); + _actionWidgets.infoText = new QErrorMessage(this); layout->addWidget(new QLabel("Name"), 2, 1); _actionWidgets.name = new QLineEdit; @@ -225,7 +217,7 @@ void ActionDialog::createActionWidgets(QGridLayout* layout) { _actionWidgets.isLocal->setEnabled(false); layout->addWidget(_actionWidgets.isLocal, 5, 2, 1, 2); - _actionWidgets.chooseScripts = new QPushButton("Choose Scripts"); + _actionWidgets.chooseScripts = new QPushButton("Add from ScriptLog"); _actionWidgets.chooseScripts->setToolTip( "Press this button to choose scripts for your action from the logs/scriptlog.txt" ); @@ -244,6 +236,7 @@ void ActionDialog::createActionWidgets(QGridLayout* layout) { "`args` variable when this script executes. If no arguments are passed, this " "variable does not exist" ); + _actionWidgets.script->setTabChangesFocus(true); _actionWidgets.script->setEnabled(false); layout->addWidget(_actionWidgets.script, 6, 2, 1, 2); @@ -308,10 +301,9 @@ void ActionDialog::createKeyboardWidgets(QGridLayout* layout) { this, &ActionDialog::keybindingSelected ); - for (size_t i = 0; i < _keybindingsData.size(); ++i) { - const Profile::Keybinding& kv = _keybindingsData[i]; + for (const Profile::Keybinding& keybinding : _keybindingsData) { QListWidgetItem* item = new QListWidgetItem; - updateListItem(item, kv); + updateListItem(item, keybinding); _keybindingWidgets.list->addItem(item); } @@ -454,7 +446,7 @@ Profile::Action* ActionDialog::selectedAction() { void ActionDialog::actionAdd() { _actionWidgets.list->addItem(""); - _actionData.push_back(Profile::Action()); + _actionData.emplace_back(); _actionWidgets.list->setCurrentRow(_actionWidgets.list->count() - 1); } @@ -468,15 +460,15 @@ void ActionDialog::actionRemove() { ); // We can't remove an action if it has a keyboard shortcut attached to it - for (size_t i = 0; i < _keybindingsData.size(); ++i) { + for (size_t i = 0; i < _keybindingsData.size(); i++) { const Profile::Keybinding& kb = _keybindingsData[i]; if (kb.action != action->identifier) { continue; } - QMessageBox::StandardButton button = QMessageBox::information( + const QMessageBox::StandardButton button = QMessageBox::information( this, "Remove action", - QString::fromStdString(fmt::format( + QString::fromStdString(std::format( "Action '{}' is used in the keybind '{}' and cannot be removed unless " "the keybind is removed as well. Do you want to remove the keybind as " "well?", @@ -500,7 +492,7 @@ void ActionDialog::actionRemove() { } } - for (size_t i = 0; i < _actionData.size(); ++i) { + for (size_t i = 0; i < _actionData.size(); i++) { if (_actionData[i].identifier == action->identifier) { clearActionFields(); _actionData.erase(_actionData.begin() + i); @@ -563,14 +555,14 @@ void ActionDialog::actionSelected() { } void ActionDialog::actionSaved() { - std::string newIdentifier = _actionWidgets.identifier->text().toStdString(); + const std::string newIdentifier = _actionWidgets.identifier->text().toStdString(); if (newIdentifier.empty()) { QMessageBox::critical(this, "Empty identifier", "Identifier must not be empty"); return; } Profile::Action* action = selectedAction(); - std::string oldIdentifier = action->identifier; + const std::string oldIdentifier = action->identifier; if (oldIdentifier != newIdentifier) { // The identifier is a bit special as we need to make sure that we didn't // accidentally create a duplicate while renaming the currently selected action. @@ -598,13 +590,13 @@ void ActionDialog::actionSaved() { _keybindingWidgets.list->count() == static_cast(_keybindingsData.size()), "The list and data got out of sync" ); - for (int i = 0; i < _keybindingWidgets.list->count(); ++i) { + for (int i = 0; i < _keybindingWidgets.list->count(); i++) { if (_keybindingsData[i].action == oldIdentifier) { _keybindingsData[i].action = newIdentifier; updateListItem(_keybindingWidgets.list->item(i), _keybindingsData[i]); } } - for (int i = 0; i < _keybindingWidgets.action->count(); ++i) { + for (int i = 0; i < _keybindingWidgets.action->count(); i++) { if (_keybindingWidgets.action->itemText(i).toStdString() == oldIdentifier) { _keybindingWidgets.action->setItemText( i, @@ -614,7 +606,6 @@ void ActionDialog::actionSaved() { } action->identifier = newIdentifier; } - action->name = _actionWidgets.name->text().toStdString(); std::string guiPath = _actionWidgets.guiPath->text().toStdString(); @@ -641,12 +632,10 @@ void ActionDialog::actionSaved() { clearActionFields(); } -void ActionDialog::clearActionFields() { +void ActionDialog::clearActionFields() const { _actionWidgets.list->setCurrentRow(-1); _actionWidgets.identifier->clear(); _actionWidgets.identifier->setEnabled(false); - _actionWidgets.infoText->clear(); - _actionWidgets.infoText->setHidden(true); _actionWidgets.name->clear(); _actionWidgets.name->setEnabled(false); _actionWidgets.guiPath->clear(); @@ -673,17 +662,18 @@ void ActionDialog::actionRejected() { } void ActionDialog::chooseScripts() { - ScriptlogDialog d(this); + ScriptLogDialog d(this); connect( - &d, &ScriptlogDialog::scriptsSelected, + &d, &ScriptLogDialog::scriptsSelected, this, &ActionDialog::appendScriptsToTextfield ); d.exec(); } -void ActionDialog::appendScriptsToTextfield(std::vector scripts) { - for (std::string script : scripts) { - _actionWidgets.script->append(QString::fromStdString(std::move(script))); +void ActionDialog::appendScriptsToTextfield(const std::vector& scripts) const +{ + for (const std::string& script : scripts) { + _actionWidgets.script->append(QString::fromStdString(script)); } } @@ -695,15 +685,15 @@ Profile::Keybinding* ActionDialog::selectedKeybinding() { void ActionDialog::keybindingAdd() { _keybindingWidgets.list->addItem(""); - _keybindingsData.push_back(Profile::Keybinding()); + _keybindingsData.emplace_back(); _keybindingWidgets.list->setCurrentRow(_keybindingWidgets.list->count() - 1); } void ActionDialog::keybindingRemove() { const Profile::Keybinding* keybinding = selectedKeybinding(); ghoul_assert(keybinding, "A keybinding must be selected at this point"); - - for (size_t i = 0; i < _keybindingsData.size(); ++i) { + + for (size_t i = 0; i < _keybindingsData.size(); i++) { if (_keybindingsData[i].key == keybinding->key && _keybindingsData[i].action == keybinding->action) { @@ -735,7 +725,7 @@ void ActionDialog::keybindingSelected() { hasKeyModifier(keybinding->key.modifier, KeyModifier::Alt) ); - std::string key = ghoul::to_string(keybinding->key.key); + const std::string key = ghoul::to_string(keybinding->key.key); _keybindingWidgets.key->setCurrentText(QString::fromStdString(key)); _keybindingWidgets.key->setEnabled(true); _keybindingWidgets.action->setCurrentText( @@ -773,7 +763,7 @@ void ActionDialog::keybindingSelected() { } } -void ActionDialog::keybindingActionSelected(int) { +void ActionDialog::keybindingActionSelected(int) const { _keybindingWidgets.actionText->setText(_keybindingWidgets.action->currentText()); } @@ -814,7 +804,7 @@ void ActionDialog::keybindingSaved() { clearKeybindingFields(); } -void ActionDialog::clearKeybindingFields() { +void ActionDialog::clearKeybindingFields() const { _keybindingWidgets.list->setCurrentRow(-1); _keybindingWidgets.shiftModifier->setChecked(false); _keybindingWidgets.shiftModifier->setEnabled(false); @@ -832,8 +822,8 @@ void ActionDialog::clearKeybindingFields() { } void ActionDialog::keybindingRejected() { - bool isKeyEmpty = (_keybindingsData.back().key.key == Key::Unknown); - bool isActionEmpty = _keybindingsData.back().action.empty(); + const bool isKeyEmpty = (_keybindingsData.back().key.key == Key::Unknown); + const bool isActionEmpty = _keybindingsData.back().action.empty(); if (isKeyEmpty || isActionEmpty) { delete _keybindingWidgets.list->takeItem(_keybindingWidgets.list->count() - 1); _keybindingsData.erase(_keybindingsData.begin() + _keybindingsData.size() - 1); diff --git a/apps/OpenSpace/ext/launcher/src/profile/additionalscriptsdialog.cpp b/apps/OpenSpace/ext/launcher/src/profile/additionalscriptsdialog.cpp index 9dcb181983..245b2f8ec3 100644 --- a/apps/OpenSpace/ext/launcher/src/profile/additionalscriptsdialog.cpp +++ b/apps/OpenSpace/ext/launcher/src/profile/additionalscriptsdialog.cpp @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -27,6 +27,7 @@ #include "profile/line.h" #include "profile/scriptlogdialog.h" #include +#include #include #include #include @@ -44,11 +45,12 @@ AdditionalScriptsDialog::AdditionalScriptsDialog(QWidget* parent, setWindowTitle("Additional Scripts"); createWidgets(); - std::string scriptText = std::accumulate( + const std::string scriptText = std::accumulate( _scriptsData.begin(), _scriptsData.end(), - std::string(), [](std::string lhs, std::string rhs) { return lhs + rhs + '\n'; } + std::string(), + [](std::string lhs, const std::string& rhs) { return lhs + rhs + '\n'; } ); - _textScripts->setText(QString::fromStdString(std::move(scriptText))); + _textScripts->setText(QString::fromStdString(scriptText)); _textScripts->moveCursor(QTextCursor::MoveOperation::End); } @@ -62,6 +64,7 @@ void AdditionalScriptsDialog::createWidgets() { _textScripts = new QTextEdit; _textScripts->setAcceptRichText(false); + _textScripts->setTabChangesFocus(true); layout->addWidget(_textScripts, 1); _chooseScriptsButton = new QPushButton("Choose Scripts"); @@ -93,7 +96,7 @@ void AdditionalScriptsDialog::parseScript() { std::istringstream iss(_textScripts->toPlainText().toStdString()); while (!iss.eof()) { std::string s; - std::getline(iss, s); + ghoul::getline(iss, s); additionalScripts.push_back(std::move(s)); } *_scripts = std::move(additionalScripts); @@ -101,16 +104,18 @@ void AdditionalScriptsDialog::parseScript() { } void AdditionalScriptsDialog::chooseScripts() { - ScriptlogDialog d(this); + ScriptLogDialog d = ScriptLogDialog(this); connect( - &d, &ScriptlogDialog::scriptsSelected, + &d, &ScriptLogDialog::scriptsSelected, this, &AdditionalScriptsDialog::appendScriptsToTextfield ); d.exec(); } -void AdditionalScriptsDialog::appendScriptsToTextfield(std::vector scripts) { - for (std::string script : scripts) { - _textScripts->append(QString::fromStdString(std::move(script))); +void AdditionalScriptsDialog::appendScriptsToTextfield( + const std::vector& scripts) +{ + for (const std::string& script : scripts) { + _textScripts->append(QString::fromStdString(script)); } } diff --git a/apps/OpenSpace/ext/launcher/src/profile/assetedit.cpp b/apps/OpenSpace/ext/launcher/src/profile/assetedit.cpp index 0fb0de2345..0ea4ab91bf 100644 --- a/apps/OpenSpace/ext/launcher/src/profile/assetedit.cpp +++ b/apps/OpenSpace/ext/launcher/src/profile/assetedit.cpp @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -72,40 +72,10 @@ void AssetEdit::createWidgets() { _layout->addWidget(generateButton); } - //{ - // QBoxLayout* container = new QHBoxLayout(this); - // QLabel* assetLabel = new QLabel("Asset Name:"); - // assetLabel->setObjectName("profile"); - // container->addWidget(assetLabel); - // _nameEdit = new QLineEdit(); - // container->addWidget(_nameEdit); - - // _layout->addLayout(container); - //} - //_layout->addWidget(new Line); - //{ - // QBoxLayout* container = new QHBoxLayout(this); - // _components = new QComboBox(this); - // _components->addItems(_supportedComponents); - // _components->setCurrentIndex(0); - // container->addWidget(_components); - - // QPushButton* addButton = new QPushButton("Add", this); - // connect(addButton, &QPushButton::clicked, this, &AssetEdit::openComponent); - // addButton->setCursor(Qt::PointingHandCursor); - // container->addWidget(addButton); - - // _layout->addLayout(container); - //} _layout->addWidget(new Line); { QBoxLayout* footer = new QHBoxLayout; - _errorMsg = new QLabel; - _errorMsg->setObjectName("error-message"); - _errorMsg->setWordWrap(true); - footer->addWidget(_errorMsg); - QDialogButtonBox* buttons = new QDialogButtonBox; buttons->setStandardButtons(QDialogButtonBox::Save | QDialogButtonBox::Cancel); connect(buttons, &QDialogButtonBox::accepted, this, &AssetEdit::approved); @@ -115,93 +85,14 @@ void AssetEdit::createWidgets() { } } -//void AssetEdit::openComponent() { -// switch (_components->currentIndex()) { -// case 0: -// _errorMsg->setText("Choose a component to add to the asset"); -// break; -// case 1: { -// QBoxLayout* horizonsLayout = new QVBoxLayout(this); -// { -// QLabel* label = new QLabel("Horizons Translation:", this); -// label->setObjectName("heading"); -// horizonsLayout->addWidget(label); -// } -// { -// QBoxLayout* container = new QHBoxLayout(this); -// QLabel* fileLabel = new QLabel("File path:", this); -// container->addWidget(fileLabel); -// -// _horizonsFileEdit = new QLineEdit(this); -// container->addWidget(_horizonsFileEdit); -// -// QPushButton* fileButton = new QPushButton("Browse", this); -// connect( -// fileButton, -// &QPushButton::released, -// this, -// &AssetEdit::openHorizonsFile -// ); -// fileButton->setCursor(Qt::PointingHandCursor); -// container->addWidget(fileButton); -// -// QPushButton* generateButton = new QPushButton("Generate", this); -// connect( -// generateButton, -// &QPushButton::released, -// this, -// &AssetEdit::openHorizons -// ); -// -// // In order to generate a Horizons File the Space module is required -// #ifndef OPENSPACE_MODULE_SPACE_ENABLED -// generateButton->setEnabled(false); -// generateButton->setToolTip( -// "Connot generate Horizons file without the space module enabled" -// ); -// #else -// generateButton->setCursor(Qt::PointingHandCursor); -// #endif // OPENSPACE_MODULE_SPACE_ENABLED -// -// container->addWidget(generateButton); -// horizonsLayout->addLayout(container); -// } -// horizonsLayout->addWidget(new Line); -// _layout->insertLayout(_layout->count() - 3, horizonsLayout); -// break; -// } -// default: -// _errorMsg->setText("Unkown component"); -// break; -// } -//} -// -//void AssetEdit::openHorizonsFile() { -// std::string filePath = QFileDialog::getOpenFileName( -// this, -// tr("Open Horizons file"), -// "", -// tr("Horiozons file (*.dat)") -// ).toStdString(); -// _horizonsFile = std::filesystem::absolute(filePath); -// _horizonsFileEdit->setText(QString(_horizonsFile.string().c_str())); -//} void AssetEdit::openHorizons() { - _errorMsg->clear(); #ifdef OPENSPACE_MODULE_SPACE_ENABLED HorizonsDialog* horizonsDialog = new HorizonsDialog(this); horizonsDialog->exec(); - //_horizonsFile = horizonsDialog->file(); - //_horizonsFileEdit->setText(QString(_horizonsFile.string().c_str())); #endif // OPENSPACE_MODULE_SPACE_ENABLED } void AssetEdit::approved() { -// std::string assetName = _nameEdit->text().toStdString(); -// if (assetName.empty()) { -// _errorMsg->setText("Asset name must be specified"); -// return; -// } accept(); } diff --git a/apps/OpenSpace/ext/launcher/src/profile/assetsdialog.cpp b/apps/OpenSpace/ext/launcher/src/profile/assetsdialog.cpp index 897b7c2e5f..cc0f5999c1 100644 --- a/apps/OpenSpace/ext/launcher/src/profile/assetsdialog.cpp +++ b/apps/OpenSpace/ext/launcher/src/profile/assetsdialog.cpp @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -27,7 +27,7 @@ #include "profile/assetedit.h" #include "profile/line.h" #include -#include +#include #include #include #include @@ -46,7 +46,7 @@ namespace { QModelIndex idx = model.index(r, 0, parent); if (!model.isAsset(idx)) { - int nChildRows = model.childCount(idx); + const int nChildRows = model.childCount(idx); if (traverseToExpandSelectedItems(tree, model, nChildRows, idx)) { tree.setExpanded(idx, true); isExpanded = true; @@ -62,27 +62,26 @@ namespace { void traverseToFindFilesystemMatch(AssetTreeModel& model, QModelIndex parent, int nRows, const std::string& path) { - int startIndex = 0; - std::string token = "${USER_ASSETS}/"; - if (path.find(token) == 0) { + const std::string token = "${USER_ASSETS}/"; + if (path.starts_with(token)) { startIndex = static_cast(token.length()); } const size_t slash = path.find_first_of('/', startIndex); const bool endOfPath = (slash == std::string::npos); - std::string firstDir = endOfPath ? "" : path.substr(0, slash); + const std::string firstDir = endOfPath ? "" : path.substr(0, slash); if (!endOfPath) { - std::string nextPath = (slash == std::string::npos) ? + const std::string nextPath = (slash == std::string::npos) ? path : path.substr(slash + 1); bool foundDirMatch = false; for (int r = 0; r < nRows; r++) { QModelIndex idx = model.index(r, 0, parent); - std::string assetName = model.name(idx).toStdString(); + const std::string assetName = model.name(idx).toStdString(); if (!model.isAsset(idx)) { if (firstDir == assetName) { - int nChildRows = model.childCount(idx); + const int nChildRows = model.childCount(idx); foundDirMatch = true; traverseToFindFilesystemMatch(model, idx, nChildRows, nextPath); break; @@ -105,7 +104,7 @@ namespace { bool foundFileMatch = false; for (int r = 0; r < nRows; r++) { QModelIndex idx = model.index(r, 0, parent); - std::string assetName = model.name(idx).toStdString(); + const std::string assetName = model.name(idx).toStdString(); // Need to check if it actually is an asset to prevent issue #2154 if (model.isAsset(idx) && path == assetName) { foundFileMatch = true; @@ -126,13 +125,13 @@ namespace { } // namespace AssetsDialog::AssetsDialog(QWidget* parent, openspace::Profile* profile, - const std::string& assetBasePath, - const std::string& userAssetBasePath) + const std::filesystem::path& assetBasePath, + const std::filesystem::path& userAssetBasePath) : QDialog(parent) , _profile(profile) { setWindowTitle("Assets"); - _assetTreeModel.importModelData(assetBasePath, userAssetBasePath); + _assetTreeModel.importModelData(assetBasePath.string(), userAssetBasePath.string()); QBoxLayout* layout = new QVBoxLayout(this); { @@ -152,6 +151,15 @@ AssetsDialog::AssetsDialog(QWidget* parent, openspace::Profile* profile, newAssetButton->setDefault(false); container->addWidget(newAssetButton, 0, 2); layout->addLayout(container); + + QLabel* searchLabel = new QLabel("Search: "); + searchLabel->setObjectName("heading"); + _searchTextBox = new QLineEdit; + _searchTextBox->setClearButtonEnabled(true); + QBoxLayout* layoutSearchBox = new QHBoxLayout; + layoutSearchBox->addWidget(searchLabel); + layoutSearchBox->addWidget(_searchTextBox); + layout->addLayout(layoutSearchBox); } { _assetTree = new QTreeView; @@ -160,27 +168,17 @@ AssetsDialog::AssetsDialog(QWidget* parent, openspace::Profile* profile, "Enable checkbox to include an asset. Those assets highlighted in red are " "present in the profile but do not exist in this OpenSpace installation" ); - _assetTree->setAlternatingRowColors(true); - _assetTree->setModel(&_assetTreeModel); - _assetTree->setRootIndex(_assetTreeModel.index(-1, 0)); - _assetTree->setColumnWidth(1, 60); - _assetTree->setColumnWidth(0, _assetTree->width() - 60); - _assetTree->header()->setSectionResizeMode(0, QHeaderView::Stretch); - _assetTree->header()->setSectionResizeMode(1, QHeaderView::Fixed); - _assetTree->header()->setStretchLastSection(false); - _assetTree->setAnimated(true); - _assetTree->setSortingEnabled(false); - _assetTree->setSelectionMode(QAbstractItemView::SingleSelection); + setViewToBaseModel(); connect(_assetTree, &QTreeView::clicked, this, &AssetsDialog::selected); for (const std::string& a : _profile->assets) { - QModelIndex p = _assetTreeModel.index(-1, 0); - int nRows = _assetTreeModel.rowCount(p); + const QModelIndex p = _assetTreeModel.index(-1, 0); + const int nRows = _assetTreeModel.rowCount(p); traverseToFindFilesystemMatch(_assetTreeModel, p, nRows, a); } - int nRows = _assetTreeModel.rowCount(_assetTreeModel.index(-1, 0)); + const int nRows = _assetTreeModel.rowCount(_assetTreeModel.index(-1, 0)); traverseToExpandSelectedItems( *_assetTree, _assetTreeModel, @@ -215,8 +213,31 @@ AssetsDialog::AssetsDialog(QWidget* parent, openspace::Profile* profile, buttons, &QDialogButtonBox::rejected, this, &AssetsDialog::reject ); + connect( + _searchTextBox, &QLineEdit::textChanged, + this, &AssetsDialog::searchTextChanged + ); layout->addWidget(buttons); } + { + _searchProxyModel = new SearchProxyModel(this); + _searchProxyModel->setSourceModel(&_assetTreeModel); + _assetProxyModel = qobject_cast(_searchProxyModel); + } +} + +void AssetsDialog::setViewToBaseModel() { + _assetTree->setAlternatingRowColors(true); + _assetTree->setModel(&_assetTreeModel); + _assetTree->setRootIndex(_assetTreeModel.index(-1, 0)); + _assetTree->setColumnWidth(1, 60); + _assetTree->setColumnWidth(0, _assetTree->width() - 60); + _assetTree->header()->setSectionResizeMode(0, QHeaderView::Stretch); + _assetTree->header()->setSectionResizeMode(1, QHeaderView::Fixed); + _assetTree->header()->setStretchLastSection(false); + _assetTree->setAnimated(true); + _assetTree->setSortingEnabled(false); + _assetTree->setSelectionMode(QAbstractItemView::SingleSelection); } QString AssetsDialog::createTextSummary() { @@ -228,12 +249,12 @@ QString AssetsDialog::createTextSummary() { return ""; } QString summary; - for (size_t i = 0; i < summaryItems.size(); ++i) { - bool existsInFilesystem = summaryItems.at(i)->doesExistInFilesystem(); + for (size_t i = 0; i < summaryItems.size(); i++) { + const bool existsInFilesystem = summaryItems.at(i)->doesExistInFilesystem(); - std::string s = existsInFilesystem ? - fmt::format("{}
", summaryPaths.at(i)) : - fmt::format("{}
", summaryPaths.at(i)); + const std::string s = existsInFilesystem ? + std::format("{}
", summaryPaths.at(i)) : + std::format("{}
", summaryPaths.at(i)); summary += QString::fromStdString(s); } return summary; @@ -259,3 +280,61 @@ void AssetsDialog::parseSelections() { void AssetsDialog::selected(const QModelIndex&) { _summary->setText(createTextSummary()); } + +void AssetsDialog::searchTextChanged(const QString& text) { + if (!_assetProxyModel) { + return; + } + if (text.isEmpty()) { + setViewToBaseModel(); + traverseToExpandSelectedItems( + *_assetTree, + _assetTreeModel, + _assetTreeModel.rowCount(_assetTreeModel.index(-1, 0)), + _assetTreeModel.index(-1, 0) + ); + } + else { + _assetTree->setModel(_searchProxyModel); + _searchProxyModel->setFilterRegularExpression(text); + _assetTree->expandAll(); + } +} + +SearchProxyModel::SearchProxyModel(QObject* parent) + : QSortFilterProxyModel(parent) +{} + +void SearchProxyModel::setFilterRegularExpression(const QString& pattern) { + _regExPattern = new QRegularExpression( + pattern, + QRegularExpression::CaseInsensitiveOption + ); + QSortFilterProxyModel::setFilterRegularExpression(*_regExPattern); +} + +bool SearchProxyModel::filterAcceptsRow(int sourceRow, + const QModelIndex& sourceParent) const +{ + const QModelIndex idx = sourceModel()->index(sourceRow, 0, sourceParent); + return acceptIndex(idx); +} + +bool SearchProxyModel::acceptIndex(const QModelIndex& idx) const { + if (!idx.isValid() || !_regExPattern) { + return false; + } + const QString text = idx.data(Qt::DisplayRole).toString(); + const QRegularExpressionMatchIterator matchIt = _regExPattern->globalMatch(text); + if (matchIt.hasNext()) { + return true; + } + for (int row = 0; row < idx.model()->rowCount(idx); ++row) { + const bool accept = acceptIndex(idx.model()->index(row, 0, idx)); + if (accept) { + return true; + } + } + + return false; +} diff --git a/apps/OpenSpace/ext/launcher/src/profile/assettreeitem.cpp b/apps/OpenSpace/ext/launcher/src/profile/assettreeitem.cpp index d68dc2d249..085f393d9b 100644 --- a/apps/OpenSpace/ext/launcher/src/profile/assettreeitem.cpp +++ b/apps/OpenSpace/ext/launcher/src/profile/assettreeitem.cpp @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -121,8 +121,8 @@ bool AssetTreeItem::insertChildren(int position, int count, int columns) { } for (int row = 0; row < count; ++row) { - std::vector data(columns); - AssetTreeItem*item = new AssetTreeItem(data, this); + std::vector data = std::vector(columns); + AssetTreeItem* item = new AssetTreeItem(std::move(data), this); _childItems.insert(_childItems.begin() + position, item); } @@ -151,7 +151,7 @@ bool AssetTreeItem::insertColumns(int position, int columns) { _itemData.insert(_itemData.begin() + position, QVariant()); } - for (AssetTreeItem* child : qAsConst(_childItems)) { + for (AssetTreeItem* child : _childItems) { child->insertColumns(position, columns); } diff --git a/apps/OpenSpace/ext/launcher/src/profile/assettreemodel.cpp b/apps/OpenSpace/ext/launcher/src/profile/assettreemodel.cpp index 467a61437c..06e6baa82a 100644 --- a/apps/OpenSpace/ext/launcher/src/profile/assettreemodel.cpp +++ b/apps/OpenSpace/ext/launcher/src/profile/assettreemodel.cpp @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -25,6 +25,7 @@ #include "profile/assettreeitem.h" #include "profile/assettreemodel.h" #include "filesystemaccess.h" +#include #include #include @@ -39,9 +40,9 @@ namespace { bool existsInFilesystem = true; }; - int getLevelFromLine(std::string line) { + int getLevelFromLine(const std::string& line) { int level = 0; - for (unsigned int i = 0; i < line.length(); ++i) { + for (unsigned int i = 0; i < line.length(); i++) { if (line.substr(i, 1) == " ") { level++; } @@ -58,7 +59,7 @@ namespace { } bool importGetNextLine(ImportElement& elem, std::istringstream& iss) { - std::getline(iss, elem.line); + ghoul::getline(iss, elem.line); const bool ok = iss.good(); if (!ok) { elem.line = ""; @@ -80,14 +81,19 @@ namespace { int nChildInsert = -1; bool continueToNextLine = true; - while (continueToNextLine && elem.line.length() != 0) { - int levelChange = elem.level - level; + while (continueToNextLine && !elem.line.empty()) { + const int levelChange = elem.level - level; if (levelChange == 0) { parent->insertChildren(++nChildInsert, 1, 3); - parent->child(nChildInsert)->setData(0, QString::fromStdString(elem.line)); - bool shouldMakeElemChecked = (elem.checked || !elem.existsInFilesystem); - Qt::CheckState check = (shouldMakeElemChecked) ? Qt::Checked : Qt::Unchecked; + parent->child(nChildInsert)->setData( + 0, + QString::fromStdString(elem.line) + ); + const bool shouldMakeElemChecked = + (elem.checked || !elem.existsInFilesystem); + const Qt::CheckState check = + shouldMakeElemChecked ? Qt::Checked : Qt::Unchecked; parent->child(nChildInsert)->setData(1, check); parent->child(nChildInsert)->setExistsInFilesystem(elem.existsInFilesystem); continueToNextLine = importGetNextLine(elem, iss); @@ -96,7 +102,6 @@ namespace { importInsertItem(iss, parent->child(nChildInsert), elem, level + 1); } else if (levelChange < 0) { - continueToNextLine = false; break; } } @@ -108,14 +113,14 @@ namespace { std::vector& outputItems, std::string pathPrefix) { - std::string itemName = item->data(0).toString().toStdString(); - bool isPathPrefix = ((pathPrefix.length()) == 0 && (itemName == Header1)); + const std::string itemName = item->data(0).toString().toStdString(); + const bool isPathPrefix = ((pathPrefix.length()) == 0 && (itemName == Header1)); if (item->isAsset()) { if (item->isChecked()) { std::string path = pathPrefix + itemName; outputItems.push_back(item); - outputPaths.push_back(path); + outputPaths.push_back(std::move(path)); } } else { @@ -123,7 +128,7 @@ namespace { pathPrefix += itemName; pathPrefix += "/"; } - for (int i = 0; i < item->childCount(); ++i) { + for (int i = 0; i < item->childCount(); i++) { parseChildrenForSelected( item->child(i), outputPaths, @@ -200,7 +205,7 @@ QString AssetTreeModel::name(QModelIndex& index) const { return item(index)->name(); } -void AssetTreeModel::setName(QModelIndex& index, QString name) { +void AssetTreeModel::setName(QModelIndex& index, const QString& name) { item(index)->setData(0, name); } @@ -245,7 +250,7 @@ QModelIndex AssetTreeModel::index(int row, int column, const QModelIndex& parent } QModelIndex AssetTreeModel::parent(int row, int column, const QModelIndex& parent) const { - QModelIndex idx = index(row, column, parent); + const QModelIndex idx = index(row, column, parent); return AssetTreeModel::parent(idx); } diff --git a/apps/OpenSpace/ext/launcher/src/profile/cameradialog.cpp b/apps/OpenSpace/ext/launcher/src/profile/cameradialog.cpp index c44a83d063..fdc0e9baa8 100644 --- a/apps/OpenSpace/ext/launcher/src/profile/cameradialog.cpp +++ b/apps/OpenSpace/ext/launcher/src/profile/cameradialog.cpp @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -25,15 +25,20 @@ #include "profile/cameradialog.h" #include "profile/line.h" +#include #include #include +#include #include #include #include #include #include -#include +#include #include +#include +#include +#include namespace { constexpr int CameraTypeNode = 0; @@ -44,29 +49,23 @@ namespace { template overloaded(Ts...) -> overloaded; bool inNumericalRange(QLineEdit* le, float min, float max) { - QString s = le->text(); + const QString s = le->text(); bool validConversion = false; - float value = s.toFloat(&validConversion); + const float value = s.toFloat(&validConversion); if (!validConversion) { return false; } - if (value < min || value > max) { - return false; - } - return true; + return (value >= min) && (value <= max); } bool isNumericalLargerThan(QLineEdit* le, float limit) { - QString s = le->text(); + const QString s = le->text(); bool validConversion = false; - float value = s.toFloat(&validConversion); + const float value = s.toFloat(&validConversion); if (!validConversion) { return false; } - if (value > limit) { - return true; - } - return false; + return value > limit; } } // namespace @@ -175,10 +174,9 @@ void CameraDialog::createWidgets() { { QBoxLayout* footerLayout = new QHBoxLayout; - _errorMsg = new QLabel; - _errorMsg->setObjectName("error-message"); - _errorMsg->setWordWrap(true); - footerLayout->addWidget(_errorMsg); + _errorMsg = new QMessageBox(this); + _errorMsg->setIcon(QMessageBox::Critical); + _errorMsg->setText("Invalid input data"); QDialogButtonBox* buttons = new QDialogButtonBox; buttons->setStandardButtons(QDialogButtonBox::Save | QDialogButtonBox::Cancel); @@ -345,6 +343,48 @@ QWidget* CameraDialog::createNavStateWidget() { mainLayout->addWidget(box); } + QPushButton* loadFile = new QPushButton("Load state from file"); + loadFile->setIcon(loadFile->style()->standardIcon(QStyle::SP_FileIcon)); + connect( + loadFile, &QPushButton::clicked, + [this]() { + const QString file = QFileDialog::getOpenFileName( + this, + "Select navigate state file" + ); + if (file.isEmpty()) { + return; + } + + std::ifstream f = std::ifstream(file.toStdString()); + const std::string contents = std::string( + std::istreambuf_iterator(f), + std::istreambuf_iterator() + ); + const nlohmann::json json = nlohmann::json::parse(contents); + + using namespace openspace::interaction; + NavigationState state = NavigationState(json); + + _navState.anchor->setText(QString::fromStdString(state.anchor)); + _navState.aim->setText(QString::fromStdString(state.aim)); + _navState.refFrame->setText(QString::fromStdString(state.referenceFrame)); + _navState.positionX->setText(QString::number(state.position.x)); + _navState.positionY->setText(QString::number(state.position.y)); + _navState.positionZ->setText(QString::number(state.position.z)); + + if (state.up.has_value()) { + _navState.upX->setText(QString::number(state.up->x)); + _navState.upY->setText(QString::number(state.up->y)); + _navState.upZ->setText(QString::number(state.up->z)); + } + + _navState.yaw->setText(QString::number(state.yaw)); + _navState.pitch->setText(QString::number(state.pitch)); + } + ); + mainLayout->addWidget(loadFile); + return tab; } @@ -404,7 +444,7 @@ QWidget* CameraDialog::createGeoWidget() { bool CameraDialog::areRequiredFormsFilledAndValid() { bool allFormsOk = true; - _errorMsg->clear(); + _errorMsg->setInformativeText(""); if (_tabWidget->currentIndex() == CameraTypeNode) { if (_nodeState.anchor->text().isEmpty()) { @@ -487,17 +527,18 @@ bool CameraDialog::areRequiredFormsFilledAndValid() { return allFormsOk; } -void CameraDialog::addErrorMsg(QString errorDescription) { - QString contents = _errorMsg->text(); +void CameraDialog::addErrorMsg(const QString& errorDescription) { + QString contents = _errorMsg->informativeText(); if (!contents.isEmpty()) { contents += ", "; } contents += errorDescription; - _errorMsg->setText(contents); + _errorMsg->setInformativeText(contents); } void CameraDialog::approved() { if (!areRequiredFormsFilledAndValid()) { + _errorMsg->exec(); return; } @@ -521,7 +562,7 @@ void CameraDialog::approved() { !_navState.upY->text().isEmpty() && !_navState.upZ->text().isEmpty()) { - glm::dvec3 u = glm::dvec3( + const glm::dvec3 u = glm::dvec3( _navState.upX->text().toDouble(), _navState.upY->text().toDouble(), _navState.upZ->text().toDouble() @@ -560,7 +601,7 @@ void CameraDialog::approved() { } void CameraDialog::tabSelect(int tabIndex) { - _errorMsg->clear(); + _errorMsg->setInformativeText(""); if (tabIndex == CameraTypeNode) { _nodeState.anchor->setFocus(Qt::OtherFocusReason); diff --git a/apps/OpenSpace/ext/launcher/src/profile/deltatimesdialog.cpp b/apps/OpenSpace/ext/launcher/src/profile/deltatimesdialog.cpp index 8b20e26989..6c01ae11eb 100644 --- a/apps/OpenSpace/ext/launcher/src/profile/deltatimesdialog.cpp +++ b/apps/OpenSpace/ext/launcher/src/profile/deltatimesdialog.cpp @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -26,7 +26,7 @@ #include "profile/line.h" #include -#include +#include #include #include #include @@ -35,6 +35,7 @@ #include #include #include +#include #include #include #include @@ -60,7 +61,7 @@ namespace { std::string checkForTimeDescription(int intervalIndex, double value) { double amount = value / TimeIntervals[intervalIndex].secondsPerInterval; - std::string description = fmt::format("{}", amount); + std::string description = std::format("{}", amount); description += " " + TimeIntervals[intervalIndex].intervalName + "/sec"; return description; } @@ -70,9 +71,9 @@ namespace { return ""; } - size_t i; - for (i = 0; i < (TimeIntervals.size() - 1); ++i) { - if (abs(value) >= TimeIntervals[i].secondsPerInterval) { + size_t i = 0; + for (i = 0; i < (TimeIntervals.size() - 1); i++) { + if (std::abs(value) >= TimeIntervals[i].secondsPerInterval) { break; } } @@ -89,7 +90,7 @@ DeltaTimesDialog::DeltaTimesDialog(QWidget* parent, std::vector* deltaTi createWidgets(); for (size_t d = 0; d < _deltaTimesData.size(); ++d) { - std::string summary = createSummaryForDeltaTime(d, true); + const std::string summary = createSummaryForDeltaTime(d, true); _listWidget->addItem(new QListWidgetItem(QString::fromStdString(summary))); } @@ -107,7 +108,7 @@ void DeltaTimesDialog::createWidgets() { _listWidget->setAutoScroll(true); _listWidget->setLayoutMode(QListView::SinglePass); layout->addWidget(_listWidget); - + { QBoxLayout* buttonLayout = new QHBoxLayout; _addButton = new QPushButton("Add Entry"); @@ -128,14 +129,15 @@ void DeltaTimesDialog::createWidgets() { layout->addLayout(buttonLayout); } - _adjustLabel = new QLabel("Set Simulation Time Increment for key"); + _adjustLabel = new QLabel("Set Simulation Time Increment (in seconds) for key"); layout->addWidget(_adjustLabel); - + { QBoxLayout* box = new QHBoxLayout; _seconds = new QLineEdit; _seconds->setValidator(new QDoubleValidator); connect(_seconds, &QLineEdit::textChanged, this, &DeltaTimesDialog::valueChanged); + _seconds->setAccessibleName("Set simulation time increment in seconds for key"); box->addWidget(_seconds); _value = new QLabel; @@ -165,11 +167,6 @@ void DeltaTimesDialog::createWidgets() { layout->addWidget(new Line); { QBoxLayout* footer = new QHBoxLayout; - _errorMsg = new QLabel; - _errorMsg->setObjectName("error-message"); - _errorMsg->setWordWrap(true); - footer->addWidget(_errorMsg); - _buttonBox = new QDialogButtonBox; _buttonBox->setStandardButtons(QDialogButtonBox::Save | QDialogButtonBox::Cancel); connect( @@ -185,7 +182,7 @@ void DeltaTimesDialog::createWidgets() { std::string DeltaTimesDialog::createSummaryForDeltaTime(size_t idx, bool forListView) { int k = (idx % 10 == 9) ? 0 : idx % 10 + 1; k = (idx == 0) ? 1 : k; - std::string key = std::to_string(k); + const std::string key = std::to_string(k); std::string s; if (idx >= 20) { @@ -202,7 +199,7 @@ std::string DeltaTimesDialog::createSummaryForDeltaTime(size_t idx, bool forList } if (forListView) { - s += fmt::format( + s += std::format( "\t{}\t{}", _deltaTimesData.at(idx), timeDescription(_deltaTimesData.at(idx)) ); } @@ -211,7 +208,7 @@ std::string DeltaTimesDialog::createSummaryForDeltaTime(size_t idx, bool forList void DeltaTimesDialog::listItemSelected() { QListWidgetItem *item = _listWidget->currentItem(); - int index = _listWidget->row(item); + const int index = _listWidget->row(item); if (index < (static_cast(_deltaTimesData.size()) - 1)) { _listWidget->setCurrentRow(index); @@ -229,29 +226,23 @@ void DeltaTimesDialog::listItemSelected() { transitionEditMode(index, true); } -void DeltaTimesDialog::setLabelForKey(int index, bool editMode, std::string color) { - std::string labelS = "Set Simulation Time Increment for key"; +void DeltaTimesDialog::setLabelForKey(int index, bool editMode, std::string_view color) { + std::string labelS = "Set Simulation Time Increment (in seconds) for key"; if (index >= static_cast(_deltaTimesData.size())) { index = static_cast(_deltaTimesData.size()) - 1; } if (editMode) { labelS += " '" + createSummaryForDeltaTime(index, false) + "':"; } - _adjustLabel->setText(QString::fromStdString( - "" + labelS + "" - )); + _adjustLabel->setText(QString::fromStdString(std::format( + "{}", color, labelS + ))); } void DeltaTimesDialog::valueChanged(const QString& text) { - if (text.isEmpty()) { - _errorMsg->setText(""); - } - else { - int value = text.toDouble(); - if (value != 0) { - _value->setText(QString::fromStdString(timeDescription(text.toDouble()))); - _errorMsg->setText(""); - } + const double value = text.toDouble(); + if (value != 0.0) { + _value->setText(QString::fromStdString(timeDescription(value))); } } @@ -267,7 +258,7 @@ bool DeltaTimesDialog::isLineEmpty(int index) { } void DeltaTimesDialog::addDeltaTimeValue() { - int currentListSize = _listWidget->count(); + const int currentListSize = _listWidget->count(); const QString messageAddValue = " (Enter integer value below & click 'Save')"; if ((currentListSize == 1) && (isLineEmpty(0))) { @@ -282,7 +273,11 @@ void DeltaTimesDialog::addDeltaTimeValue() { _listWidget->addItem(new QListWidgetItem(messageAddValue)); } else { - _errorMsg->setText("Exceeded maximum amount of simulation time increments"); + QMessageBox::critical( + this, + "Error", + "Exceeded maximum amount of simulation time increments" + ); } _listWidget->setCurrentRow(_listWidget->count() - 1); _seconds->setFocus(Qt::OtherFocusReason); @@ -292,9 +287,9 @@ void DeltaTimesDialog::addDeltaTimeValue() { void DeltaTimesDialog::saveDeltaTimeValue() { QListWidgetItem* item = _listWidget->currentItem(); if (item && !_deltaTimesData.empty()) { - int index = _listWidget->row(item); + const int index = _listWidget->row(item); _deltaTimesData.at(index) = _seconds->text().toDouble(); - std::string summary = createSummaryForDeltaTime(index, true); + const std::string summary = createSummaryForDeltaTime(index, true); _listWidget->item(index)->setText(QString::fromStdString(summary)); transitionEditMode(index, false); _editModeNewItem = false; @@ -337,7 +332,6 @@ void DeltaTimesDialog::transitionEditMode(int index, bool state) { _discardButton->setEnabled(state); _adjustLabel->setEnabled(state); _seconds->setEnabled(state); - _errorMsg->clear(); if (state) { _seconds->setFocus(Qt::OtherFocusReason); @@ -348,7 +342,6 @@ void DeltaTimesDialog::transitionEditMode(int index, bool state) { setLabelForKey(index, false, "light gray"); _value->clear(); } - _errorMsg->clear(); } void DeltaTimesDialog::parseSelections() { @@ -362,7 +355,8 @@ void DeltaTimesDialog::parseSelections() { } } std::vector tempDt; - for (int i = 0; i < (finalNonzeroIndex + 1); ++i) { + tempDt.reserve(finalNonzeroIndex); + for (int i = 0; i < (finalNonzeroIndex + 1); i++) { tempDt.push_back(_deltaTimesData[i]); } *_deltaTimes = std::move(_deltaTimesData); @@ -379,11 +373,13 @@ void DeltaTimesDialog::keyPressEvent(QKeyEvent* evt) { } return; } - else if (evt->key() == Qt::Key_Escape) { + + if (evt->key() == Qt::Key_Escape) { if (_editModeNewItem) { discardDeltaTimeValue(); return; } } + QDialog::keyPressEvent(evt); } diff --git a/apps/OpenSpace/ext/launcher/src/profile/horizonsdialog.cpp b/apps/OpenSpace/ext/launcher/src/profile/horizonsdialog.cpp index d9f3f36789..70ebcb811e 100644 --- a/apps/OpenSpace/ext/launcher/src/profile/horizonsdialog.cpp +++ b/apps/OpenSpace/ext/launcher/src/profile/horizonsdialog.cpp @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -26,7 +26,7 @@ #include "profile/line.h" #include -#include +#include #include #include #include @@ -47,18 +47,8 @@ #include #include -using json = nlohmann::json; -using namespace openspace; - -namespace { - BooleanType(IsDirty); - void styleLabel(QLabel* label, IsDirty isDirty) { - std::string newStyle = isDirty ? "error" : "normal"; - label->setObjectName(QString::fromStdString(newStyle)); - label->style()->unpolish(label); - label->style()->polish(label); - } -} // namespace +//using json = nlohmann::json; +//using namespace openspace; namespace { constexpr std::string_view _loggerCat = "HorizonsDialog"; @@ -72,11 +62,18 @@ namespace { constexpr std::string_view Years = "calendar years"; constexpr std::string_view Unitless = "equal intervals (unitless)"; + BooleanType(IsDirty); + void styleLabel(QLabel* label, IsDirty isDirty) { + const std::string newStyle = isDirty ? "error" : "normal"; + label->setObjectName(QString::fromStdString(newStyle)); + label->style()->unpolish(label); + label->style()->polish(label); + } + int findId(const std::string& match) { // Format: id, other information... std::stringstream str(match); - int id; - + int id = 0; str >> id; return id; } @@ -84,10 +81,12 @@ namespace { HorizonsDialog::HorizonsDialog(QWidget* parent) : QDialog(parent) -{ #ifdef OPENSPACE_MODULE_SPACE_ENABLED - _manager = new QNetworkAccessManager(this); + , _manager(new QNetworkAccessManager(this)) +#endif // OPENSPACE_MODULE_SPACE_ENABLED +{ +#ifdef OPENSPACE_MODULE_SPACE_ENABLED setWindowTitle("Horizons"); createWidgets(); #endif // OPENSPACE_MODULE_SPACE_ENABLED @@ -102,7 +101,7 @@ std::filesystem::path HorizonsDialog::file() const { } void HorizonsDialog::openSaveAs() { - QString filename = QFileDialog::getSaveFileName( + const QString filename = QFileDialog::getSaveFileName( this, "Choose a file path where the generated Horizons file will be saved", QString::fromStdString(absPath("${USER}").string()), @@ -126,7 +125,7 @@ void HorizonsDialog::typeOnChange(int index) { _timeTypeCombo->insertItem(0, TimeVarying.data()); } else { - _errorMsg->setText("Invalid Horizons type"); + QMessageBox::critical(this, "Error", "Invalid Horizons type"); styleLabel(_typeLabel, IsDirty::Yes); } } @@ -142,8 +141,8 @@ void HorizonsDialog::downloadProgress(int value, int total) { } void HorizonsDialog::importTimeRange() { - QString startStr = QString::fromStdString(_validTimeRange.first); - QString endStr = QString::fromStdString(_validTimeRange.second); + const QString startStr = QString::fromStdString(_validTimeRange.first); + const QString endStr = QString::fromStdString(_validTimeRange.second); QDateTime start = QDateTime::fromString(startStr, "yyyy-MMM-dd T hh:mm"); QDateTime end = QDateTime::fromString(endStr, "yyyy-MMM-dd T hh:mm"); @@ -153,8 +152,8 @@ void HorizonsDialog::importTimeRange() { end = QDateTime::fromString(endStr, "yyyy-MMM-dd T hh:mm:ss"); if (!start.isValid() || !end.isValid()) { - QDate startDate = QDate::fromString(startStr, "yyyy-MMM-dd"); - QDate endDate = QDate::fromString(endStr, "yyyy-MMM-dd"); + const QDate startDate = QDate::fromString(startStr, "yyyy-MMM-dd"); + const QDate endDate = QDate::fromString(endStr, "yyyy-MMM-dd"); if (startDate.isValid() && endDate.isValid()) { _startEdit->setDate(startDate); @@ -163,12 +162,11 @@ void HorizonsDialog::importTimeRange() { _validTimeRange = std::pair(); return; } - - _errorMsg->setText("Could not import time range"); - std::string msg = fmt::format( + const std::string msg = std::format( "Could not import time range '{}' to '{}'", _validTimeRange.first, _validTimeRange.second ); + QMessageBox::critical(this, "Error", QString::fromStdString(msg)); appendLog(msg, LogLevel::Error); return; } @@ -183,7 +181,7 @@ void HorizonsDialog::importTimeRange() { void HorizonsDialog::approved() { #ifdef OPENSPACE_MODULE_SPACE_ENABLED _downloadLabel->show(); - bool result = handleRequest(); + const bool result = handleRequest(); _downloadLabel->hide(); if (result && std::filesystem::is_regular_file(_horizonsFile.file())) { accept(); @@ -216,7 +214,7 @@ void HorizonsDialog::createWidgets() { _typeCombo = new QComboBox; _typeCombo->setToolTip("Choose Horizons data type"); - QStringList types = { + const QStringList types = { "Vector table", "Observer table" }; @@ -297,6 +295,7 @@ void HorizonsDialog::createWidgets() { _startEdit = new QDateTimeEdit; _startEdit->setDisplayFormat("yyyy-MM-dd T hh:mm:ss"); _startEdit->setDate(QDate::currentDate().addYears(-1)); + _startEdit->setAccessibleName("Set start time"); _startEdit->setToolTip("Enter the start date and time for the data"); layout->addWidget(_startEdit, 8, 2); } @@ -307,6 +306,7 @@ void HorizonsDialog::createWidgets() { _endEdit = new QDateTimeEdit(this); _endEdit->setDisplayFormat("yyyy-MM-dd T hh:mm:ss"); _endEdit->setDate(QDate::currentDate()); + _endEdit->setAccessibleName("Set end time"); _endEdit->setToolTip("Enter the end date and time for the data"); layout->addWidget(_endEdit, 9, 2); } @@ -335,7 +335,7 @@ void HorizonsDialog::createWidgets() { _timeTypeCombo = new QComboBox; _timeTypeCombo->setToolTip("Choose unit of the step size"); - QStringList timeTypes = { + const QStringList timeTypes = { Minutes.data(), Hours.data(), Days.data(), @@ -376,11 +376,6 @@ void HorizonsDialog::createWidgets() { } { QBoxLayout* footer = new QHBoxLayout; - _errorMsg = new QLabel; - _errorMsg->setObjectName("error-message"); - _errorMsg->setWordWrap(true); - footer->addWidget(_errorMsg); - QDialogButtonBox* buttons = new QDialogButtonBox; buttons->setStandardButtons(QDialogButtonBox::Save | QDialogButtonBox::Cancel); connect(buttons, &QDialogButtonBox::accepted, this, &HorizonsDialog::approved); @@ -393,7 +388,8 @@ void HorizonsDialog::createWidgets() { bool HorizonsDialog::isValidInput() { // File if (_fileEdit->text().isEmpty()) { - _errorMsg->setText("File path not selected"); + QMessageBox::critical(this, "Error", "File path not selected"); + _fileEdit->setFocus(); styleLabel(_fileLabel, IsDirty::Yes); return false; } @@ -402,13 +398,15 @@ bool HorizonsDialog::isValidInput() { if (_targetEdit->text().isEmpty() && ((_chooseTargetCombo->count() > 0 && _chooseTargetCombo->currentIndex() == 0) || _chooseTargetCombo->count() == 0)) { - _errorMsg->setText("Target not selected"); + QMessageBox::critical(this, "Error", "Target not selected"); + _targetEdit->setFocus(); styleLabel(_targetLabel, IsDirty::Yes); return false; } if (_targetEdit->text().toStdString().find_first_of("¤<>§£´¨€") != std::string::npos) { - _errorMsg->setText("Target includes illegal characters"); + QMessageBox::critical(this, "Error", "Target includes illegal characters"); + _targetEdit->setFocus(); styleLabel(_targetLabel, IsDirty::Yes); return false; } @@ -417,13 +415,15 @@ bool HorizonsDialog::isValidInput() { if (_centerEdit->text().isEmpty() && ((_chooseObserverCombo->count() > 0 && _chooseObserverCombo->currentIndex() == 0) || _chooseObserverCombo->count() == 0)) { - _errorMsg->setText("Observer not selected"); + QMessageBox::critical(this, "Error", "Observer not selected"); + _centerEdit->setFocus(); styleLabel(_centerLabel, IsDirty::Yes); return false; } if (_centerEdit->text().toStdString().find_first_of("¤<>§£´¨€") != std::string::npos) { - _errorMsg->setText("Observer includes illegal characters"); + QMessageBox::critical(this, "Error", "Observer includes illegal characters"); + _centerEdit->setFocus(); styleLabel(_centerLabel, IsDirty::Yes); return false; } @@ -431,25 +431,35 @@ bool HorizonsDialog::isValidInput() { // Step size // Empty if (_stepEdit->text().isEmpty()) { - _errorMsg->setText("Step size not selected"); + QMessageBox::critical(this, "Error", "Step size is not selected"); + _stepEdit->setFocus(); styleLabel(_stepLabel, IsDirty::Yes); return false; } // Numerical bool couldConvert = false; - int32_t step = _stepEdit->text().toInt(&couldConvert); + const int32_t step = _stepEdit->text().toInt(&couldConvert); if (!couldConvert) { - _errorMsg->setText(QString::fromStdString(fmt::format( - "Step size needs to be a number in range 1 to {}", - std::numeric_limits::max() - ))); + QMessageBox::critical( + this, "Error", + QString::fromStdString(std::format( + "Step size needs to be a number in range 1 to {}", + std::numeric_limits::max() + )) + ); + _stepEdit->setFocus(); styleLabel(_stepLabel, IsDirty::Yes); return false; } // In the case of arcseconds range is different if (_timeTypeCombo->currentText().toStdString() == TimeVarying) { if (step < 60 || step > 3600) { - _errorMsg->setText("Angular step size needs to be in range 60 to 3600"); + QMessageBox::critical( + this, + "Error", + "Angular step size needs to be in range 60 to 3600" + ); + _stepEdit->setFocus(); styleLabel(_stepLabel, IsDirty::Yes); return false; } @@ -459,10 +469,11 @@ bool HorizonsDialog::isValidInput() { // website as a uint32_t. If step size over 32 bit int is sent, this error message is // received: Cannot read numeric value -- re-enter if (step < 1) { - _errorMsg->setText(QString::fromStdString(fmt::format( + QMessageBox::critical(this, "Error", QString::fromStdString(std::format( "Step size is outside valid range 1 to '{}'", std::numeric_limits::max() ))); + _stepEdit->setFocus(); styleLabel(_stepLabel, IsDirty::Yes); return false; } @@ -470,7 +481,7 @@ bool HorizonsDialog::isValidInput() { } // Send request synchronously, EventLoop waits until request has finished -json HorizonsDialog::sendRequest(const std::string& url) { +nlohmann::json HorizonsDialog::sendRequest(const std::string& url) { QNetworkRequest request; request.setHeader(QNetworkRequest::UserAgentHeader, "OpenSpace"); request.setUrl(QUrl(QString::fromStdString(url))); @@ -484,13 +495,13 @@ json HorizonsDialog::sendRequest(const std::string& url) { _downloadProgress->show(); QEventLoop loop; - QMetaObject::Connection status = connect( + const QMetaObject::Connection status = connect( reply, &QNetworkReply::finished, &loop, &QEventLoop::quit ); if (!status) { appendLog("Could not connect to Horizons API", HorizonsDialog::LogLevel::Error); - return json(); + return nlohmann::json(); } loop.exec(QEventLoop::ExcludeUserInputEvents); @@ -498,19 +509,20 @@ json HorizonsDialog::sendRequest(const std::string& url) { return handleReply(reply); } -json HorizonsDialog::handleReply(QNetworkReply* reply) { +nlohmann::json HorizonsDialog::handleReply(QNetworkReply* reply) { _downloadProgress->hide(); if (reply->error() != QNetworkReply::NoError) { - QVariant statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute); + const QVariant statusCode = + reply->attribute(QNetworkRequest::HttpStatusCodeAttribute); if (!checkHttpStatus(statusCode)) { - std::string msg = fmt::format( - "Connection Error '{}' ", reply->errorString().toStdString() + const std::string msg = std::format( + "Connection Error '{}'", reply->errorString().toStdString() ); appendLog(msg, HorizonsDialog::LogLevel::Error); } reply->deleteLater(); - return json(); + return nlohmann::json(); } QUrl redirect = reply->attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl(); @@ -519,26 +531,26 @@ json HorizonsDialog::handleReply(QNetworkReply* reply) { redirect = reply->url().resolved(redirect); } - std::string msg = fmt::format( + const std::string msg = std::format( "Redirecting request to '{}'", redirect.toString().toStdString() ); appendLog(msg, HorizonsDialog::LogLevel::Info); return sendRequest(redirect.toString().toStdString()); } - QString answer = reply->readAll(); + const QString answer = reply->readAll(); reply->deleteLater(); if (answer.isEmpty()) { - std::string msg = fmt::format( + const std::string msg = std::format( "Connection Error '{}'", reply->errorString().toStdString() ); appendLog(msg, HorizonsDialog::LogLevel::Error); - return json(); + return nlohmann::json(); } // Convert the answer to a json object and return it - return json::parse(answer.toStdString()); + return nlohmann::json::parse(answer.toStdString()); } bool HorizonsDialog::checkHttpStatus(const QVariant& statusCode) { @@ -547,7 +559,7 @@ bool HorizonsDialog::checkHttpStatus(const QVariant& statusCode) { statusCode.toInt() != static_cast(HorizonsDialog::HTTPCodes::Ok)) { std::string message; - HorizonsDialog::HTTPCodes code = + const HorizonsDialog::HTTPCodes code = static_cast(statusCode.toInt()); switch (code) { @@ -568,7 +580,7 @@ bool HorizonsDialog::checkHttpStatus(const QVariant& statusCode) { "later time"; break; default: - message = fmt::format( + message = std::format( "HTTP status code '{}' was returned", statusCode.toString().toStdString() ); @@ -618,7 +630,8 @@ std::pair HorizonsDialog::readTimeRange() { "Trajectory name" ); - QDateTime start, end; + QDateTime start; + QDateTime end; start = QDateTime::fromString( QString::fromStdString(timeRange.first), "yyyy-MMM-dd T hh:mm" @@ -657,24 +670,24 @@ std::pair HorizonsDialog::readTimeRange() { if (!start.isValid() || !end.isValid()) { if (timeRange.first.empty() || timeRange.second.empty()) { - _errorMsg->setText("Could not find time range"); + QMessageBox::critical(this, "Error", "Could not find time range"); appendLog( "Could not find time range in Horizons file", LogLevel::Error ); } else { - _errorMsg->setText("Could not parse time range"); - std::string msg = fmt::format( - "Could not read time range '{}' to '{}'", timeRange.first, - timeRange.second + QMessageBox::critical(this, "Error", "Could not parse time range"); + const std::string msg = std::format( + "Could not read time range '{}' to '{}'", + timeRange.first, timeRange.second ); appendLog(msg, LogLevel::Error); } return std::pair(); } else { - std::string msg = fmt::format( + const std::string msg = std::format( "Could not find all time range information. Latest Horizons " "mesage: {}", _latestHorizonsError ); @@ -686,14 +699,12 @@ std::pair HorizonsDialog::readTimeRange() { } bool HorizonsDialog::handleRequest() { + using namespace openspace; + if (!isValidInput()) { return false; } - // Reset - _errorMsg->clear(); - - // // Clean all widgets styleLabel(_typeLabel, IsDirty::No); styleLabel(_fileLabel, IsDirty::No); @@ -707,16 +718,16 @@ bool HorizonsDialog::handleRequest() { _validTimeRange = std::pair(); _latestHorizonsError.clear(); - std::string url = constructUrl(); + const std::string url = constructUrl(); _chooseObserverCombo->clear(); _chooseObserverCombo->hide(); _chooseTargetCombo->clear(); _chooseTargetCombo->hide(); - json answer = sendRequest(url); + nlohmann::json answer = sendRequest(url); if (answer.empty()) { - _errorMsg->setText("Connection error"); + QMessageBox::critical(this, "Error", "Connection error"); return false; } @@ -728,19 +739,18 @@ bool HorizonsDialog::handleRequest() { _horizonsFile = std::move(file); HorizonsResultCode result = isValidHorizonsFile(_horizonsFile.file()); - bool isValid = handleResult(result); - + const bool isValid = handleResult(result); if (!isValid && std::filesystem::is_regular_file(_horizonsFile.file())) { - std::string newName = _horizonsFile.file().filename().stem().string(); + const std::filesystem::path newName = _horizonsFile.file().filename().stem(); - std::filesystem::path oldFile = _horizonsFile.file(); + const std::filesystem::path& oldFile = _horizonsFile.file(); std::filesystem::path newFile = oldFile; - newFile.replace_filename(newName + "_error.txt"); + newFile.replace_filename(std::format("{}_error.txt", newName)); std::filesystem::rename(oldFile, newFile); - std::string msg = fmt::format( - "For more information, see the saved error file {}", newFile + const std::string msg = std::format( + "For more information, see the saved error file '{}'", newFile ); appendLog(msg, LogLevel::Info); } @@ -749,8 +759,10 @@ bool HorizonsDialog::handleRequest() { } std::string HorizonsDialog::constructUrl() { + using namespace openspace; + // Construct url for request - HorizonsType type; + HorizonsType type = HorizonsType::Invalid; if (_typeCombo->currentIndex() == 0) { type = HorizonsType::Vector; } @@ -758,14 +770,15 @@ std::string HorizonsDialog::constructUrl() { type = HorizonsType::Observer; } else { - _errorMsg->setText("Invalid Horizons type"); + QMessageBox::critical(this, "Error", "Invalid Horizons type"); styleLabel(_typeLabel, IsDirty::Yes); return ""; } std::string command; if (_chooseTargetCombo->count() > 0 && _chooseTargetCombo->currentIndex() != 0) { - QVariant t = _chooseTargetCombo->itemData(_chooseTargetCombo->currentIndex()); + const QVariant t = + _chooseTargetCombo->itemData(_chooseTargetCombo->currentIndex()); command = t.toString().toStdString(); _targetName = _chooseTargetCombo->currentText().toStdString(); _targetEdit->setText(QString::fromStdString(command)); @@ -777,25 +790,25 @@ std::string HorizonsDialog::constructUrl() { std::string center; if (_chooseObserverCombo->count() > 0 && _chooseObserverCombo->currentIndex() != 0) { - QVariant observer = + const QVariant observer = _chooseObserverCombo->itemData(_chooseObserverCombo->currentIndex()); - std::string id = observer.toString().toStdString(); + const std::string id = observer.toString().toStdString(); center = "@" + id; _observerName = _chooseObserverCombo->currentText().toStdString(); - _centerEdit->setText(QString::fromStdString(id)); + _centerEdit->setText(QString::fromStdString(center)); } else { center = _centerEdit->text().toStdString(); _observerName = center; } - _startTime = fmt::format( + _startTime = std::format( "{} {}", _startEdit->date().toString("yyyy-MM-dd").toStdString(), _startEdit->time().toString("hh:mm:ss").toStdString() ); - _endTime = fmt::format( + _endTime = std::format( "{} {}", _endEdit->date().toString("yyyy-MM-dd").toStdString(), _endEdit->time().toString("hh:mm:ss").toStdString() @@ -824,7 +837,7 @@ std::string HorizonsDialog::constructUrl() { unit = ""; } else { - _errorMsg->setText("Invalid time unit type"); + QMessageBox::critical(this, "Error", "Invalid time unit type"); styleLabel(_stepLabel, IsDirty::Yes); return ""; } @@ -840,7 +853,9 @@ std::string HorizonsDialog::constructUrl() { ); } -openspace::HorizonsFile HorizonsDialog::handleAnswer(json& answer) { +openspace::HorizonsFile HorizonsDialog::handleAnswer(nlohmann::json& answer) { + using namespace openspace; + auto it = answer.find("error"); if (it != answer.end()) { _latestHorizonsError = *it; @@ -860,12 +875,14 @@ openspace::HorizonsFile HorizonsDialog::handleAnswer(json& answer) { } // Create a text file and write reply to it - std::filesystem::path filePath = + const std::filesystem::path filePath = std::filesystem::absolute(_fileEdit->text().toStdString()); auto result = answer.find("result"); if (result == answer.end()) { - std::string msg = fmt::format("Malformed answer recieved '{}'", answer.dump()); + const std::string msg = std::format( + "Malformed answer received '{}'", answer.dump() + ); appendLog(msg, HorizonsDialog::LogLevel::Error); return openspace::HorizonsFile(); } @@ -878,18 +895,22 @@ openspace::HorizonsFile HorizonsDialog::handleAnswer(json& answer) { QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel ); msgBox.setDefaultButton(QMessageBox::Yes); - int ret = msgBox.exec(); + const int ret = msgBox.exec(); switch (ret) { case QMessageBox::Yes: // If yes then continue as normal break; case QMessageBox::No: case QMessageBox::Cancel: - _errorMsg->setText("File already exist, try another file path"); + QMessageBox::critical( + this, + "Error", + "File already exist, try another file path" + ); styleLabel(_fileLabel, IsDirty::Yes); return openspace::HorizonsFile(); default: - _errorMsg->setText("Invalid answer"); + QMessageBox::critical(this, "Error", "Invalid answer"); styleLabel(_fileLabel, IsDirty::Yes); return openspace::HorizonsFile(); } @@ -900,14 +921,16 @@ openspace::HorizonsFile HorizonsDialog::handleAnswer(json& answer) { } bool HorizonsDialog::handleResult(openspace::HorizonsResultCode& result) { + using namespace openspace; + switch (result) { case HorizonsResultCode::Valid: { // If the request worked then delete the corresponding error file if it exist - std::filesystem::path validFile(_horizonsFile.file()); + std::filesystem::path validFile =_horizonsFile.file(); - std::string errorName = validFile.filename().stem().string(); - std::filesystem::path errorFile = validFile.replace_filename( - errorName + "_error.txt" + const std::filesystem::path errorName = validFile.filename().stem(); + const std::filesystem::path errorFile = validFile.replace_filename( + std::format("{}_error.txt", errorName) ); if (std::filesystem::is_regular_file(errorFile)) { @@ -916,9 +939,9 @@ bool HorizonsDialog::handleResult(openspace::HorizonsResultCode& result) { break; } case HorizonsResultCode::Empty: { - _errorMsg->setText("The horizons file is empty"); + QMessageBox::critical(this, "Error", "The horizons file is empty"); if (!_latestHorizonsError.empty()) { - std::string msg = fmt::format( + const std::string msg = std::format( "Latest Horizons error: {}", _latestHorizonsError ); appendLog(msg, LogLevel::Error); @@ -928,7 +951,7 @@ bool HorizonsDialog::handleResult(openspace::HorizonsResultCode& result) { break; } case HorizonsResultCode::ErrorSize: { - std::string msg = fmt::format( + const std::string msg = std::format( "Time range '{}' to '{}' with step size '{} {}' is too big, try to " "increase the step size and/or decrease the time range", _startTime, _endTime, _stepEdit->text().toStdString(), @@ -952,7 +975,7 @@ bool HorizonsDialog::handleResult(openspace::HorizonsResultCode& result) { std::filesystem::remove(_horizonsFile.file()); break; case HorizonsResultCode::ErrorTimeRange: { - std::string msg = fmt::format( + std::string msg = std::format( "Time range is outside the valid range for target '{}'", _targetName ); appendLog(msg, HorizonsDialog::LogLevel::Error); @@ -962,15 +985,15 @@ bool HorizonsDialog::handleResult(openspace::HorizonsResultCode& result) { _validTimeRange = readTimeRange(); if (_validTimeRange.first.empty() || _validTimeRange.second.empty()) { if (!_latestHorizonsError.empty()) { - msg = fmt::format("Latest Horizons error: {}", _latestHorizonsError); + msg = std::format("Latest Horizons error: {}", _latestHorizonsError); appendLog(msg, LogLevel::Error); } break; } - msg = fmt::format( - "Valid time range is '{}' to '{}'", _validTimeRange.first, - _validTimeRange.second + msg = std::format( + "Valid time range is '{}' to '{}'", + _validTimeRange.first, _validTimeRange.second ); appendLog(msg, HorizonsDialog::LogLevel::Info); _importTimeButton->show(); @@ -979,12 +1002,12 @@ bool HorizonsDialog::handleResult(openspace::HorizonsResultCode& result) { break; } case HorizonsResultCode::ErrorNoObserver: { - std::string msg = fmt::format( + std::string msg = std::format( "No match was found for observer '{}'", _observerName ); appendLog(msg, HorizonsDialog::LogLevel::Error); - msg = fmt::format( + msg = std::format( "Try to use '@{}' as observer to search for possible matches", _observerName ); @@ -995,7 +1018,7 @@ bool HorizonsDialog::handleResult(openspace::HorizonsResultCode& result) { break; } case HorizonsResultCode::ErrorObserverTargetSame: { - std::string msg = fmt::format( + const std::string msg = std::format( "The observer '{}' and target '{}' are the same. Please use another " "observer for the current target", _observerName, _targetName ); @@ -1007,7 +1030,7 @@ bool HorizonsDialog::handleResult(openspace::HorizonsResultCode& result) { break; } case HorizonsResultCode::ErrorNoData: { - std::string msg = fmt::format( + const std::string msg = std::format( "There is not enough data to compute the state of target '{}' in " "relation to the observer '{}' for the time range '{}' to '{}'. Try to " "use another observer for the current target or another time range", @@ -1019,20 +1042,20 @@ bool HorizonsDialog::handleResult(openspace::HorizonsResultCode& result) { break; } case HorizonsResultCode::MultipleObserverStations: { - std::string msg = fmt::format( - "Multiple matching observer stations were found for observer '{}'. ", + std::string msg = std::format( + "Multiple matching observer stations were found for observer '{}'", _observerName ); appendLog(msg, HorizonsDialog::LogLevel::Warning); - msg = fmt::format( + msg = std::format( "Did not find what you were looking for? Use '@{}' as observer to search " "for alternatives", _observerName ); appendLog(msg, HorizonsDialog::LogLevel::Info); styleLabel(_centerLabel, IsDirty::Yes); - std::vector matchingstations = + const std::vector matchingstations = _horizonsFile.parseMatches( "Observatory Name", "Multiple matching stations found" @@ -1043,7 +1066,7 @@ bool HorizonsDialog::handleResult(openspace::HorizonsResultCode& result) { HorizonsDialog::LogLevel::Error ); if (!_latestHorizonsError.empty()) { - msg = fmt::format("Latest Horizons error: {}", _latestHorizonsError); + msg = std::format("Latest Horizons error: {}", _latestHorizonsError); appendLog(msg, LogLevel::Error); } break; @@ -1062,13 +1085,13 @@ bool HorizonsDialog::handleResult(openspace::HorizonsResultCode& result) { break; } case HorizonsResultCode::MultipleObserver: { - std::string msg = fmt::format( + std::string msg = std::format( "Multiple matches were found for observer '{}'", _observerName ); appendLog(msg, HorizonsDialog::LogLevel::Warning); styleLabel(_centerLabel, IsDirty::Yes); - std::vector matchingObservers = + const std::vector matchingObservers = _horizonsFile.parseMatches("Name", "matches", ">MATCH NAME<"); if (matchingObservers.empty()) { appendLog( @@ -1076,9 +1099,7 @@ bool HorizonsDialog::handleResult(openspace::HorizonsResultCode& result) { HorizonsDialog::LogLevel::Error ); if (!_latestHorizonsError.empty()) { - msg = fmt::format( - "Latest Horizons error: {}", _latestHorizonsError - ); + msg = std::format("Latest Horizons error: {}", _latestHorizonsError); appendLog(msg, LogLevel::Error); } break; @@ -1097,12 +1118,12 @@ bool HorizonsDialog::handleResult(openspace::HorizonsResultCode& result) { break; } case HorizonsResultCode::ErrorNoTarget: { - std::string msg = fmt::format( + std::string msg = std::format( "No match was found for target '{}'", _targetName ); appendLog(msg, HorizonsDialog::LogLevel::Error); - msg = fmt::format( + msg = std::format( "Try to use '{}*' as target to search for possible matches", _targetName ); appendLog(msg, HorizonsDialog::LogLevel::Info); @@ -1123,13 +1144,13 @@ bool HorizonsDialog::handleResult(openspace::HorizonsResultCode& result) { // Format: ID#, Name, Designation, IAU/aliases/other // Line after data: Number of matches = X. Use ID# to make unique selection. - std::string msg = fmt::format( + std::string msg = std::format( "Multiple matches were found for target '{}'", _targetName ); appendLog(msg, HorizonsDialog::LogLevel::Warning); styleLabel(_targetLabel, IsDirty::Yes); - std::vector matchingTargets = + const std::vector matchingTargets = _horizonsFile.parseMatches("Name", "matches", ">MATCH NAME<"); if (matchingTargets.empty()) { appendLog( @@ -1137,7 +1158,7 @@ bool HorizonsDialog::handleResult(openspace::HorizonsResultCode& result) { HorizonsDialog::LogLevel::Error ); if (!_latestHorizonsError.empty()) { - msg = fmt::format("Latest Horizons error: {}", _latestHorizonsError); + msg = std::format("Latest Horizons error: {}", _latestHorizonsError); appendLog(msg, LogLevel::Error); } break; @@ -1158,22 +1179,22 @@ bool HorizonsDialog::handleResult(openspace::HorizonsResultCode& result) { case HorizonsResultCode::UnknownError: { appendLog("Unknown error", LogLevel::Error); if (!_latestHorizonsError.empty()) { - std::string msg = fmt::format( + const std::string msg = std::format( "Latest Horizons error: {}", _latestHorizonsError ); appendLog(msg, LogLevel::Error); } - _errorMsg->setText("An unknown error occured"); + QMessageBox::critical(this, "Error", "An unknown error occured"); break; } default: { if (!_latestHorizonsError.empty()) { - std::string msg = fmt::format( + const std::string msg = std::format( "Latest Horizons error: {}", _latestHorizonsError ); appendLog(msg, LogLevel::Error); } - _errorMsg->setText("Invalid result type"); + QMessageBox::critical(this, "Error", "Invalid result type"); break; } } diff --git a/apps/OpenSpace/ext/launcher/src/profile/line.cpp b/apps/OpenSpace/ext/launcher/src/profile/line.cpp index 1b9bf42e8a..c36a89848a 100644 --- a/apps/OpenSpace/ext/launcher/src/profile/line.cpp +++ b/apps/OpenSpace/ext/launcher/src/profile/line.cpp @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * diff --git a/apps/OpenSpace/ext/launcher/src/profile/marknodesdialog.cpp b/apps/OpenSpace/ext/launcher/src/profile/marknodesdialog.cpp index a42396aee1..bb1a664e18 100644 --- a/apps/OpenSpace/ext/launcher/src/profile/marknodesdialog.cpp +++ b/apps/OpenSpace/ext/launcher/src/profile/marknodesdialog.cpp @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -57,15 +57,15 @@ void MarkNodesDialog::createWidgets() { _list->setDragDropMode(QListView::InternalMove); _list->setResizeMode(QListView::Adjust); - for (size_t i = 0; i < _markedNodes->size(); ++i) { - QListWidgetItem* item = - new QListWidgetItem(QString::fromStdString(_markedNodes->at(i))); + for (const std::string& nodes : *_markedNodes) { + QListWidgetItem* item = new QListWidgetItem(QString::fromStdString(nodes)); _list->addItem(item); } layout->addWidget(_list); _removeButton = new QPushButton("Remove"); connect(_removeButton, &QPushButton::clicked, this, &MarkNodesDialog::listItemRemove); + _removeButton->setAccessibleName("Remove node"); layout->addWidget(_removeButton); { @@ -79,6 +79,7 @@ void MarkNodesDialog::createWidgets() { QPushButton* addButton = new QPushButton("Add new"); connect(addButton, &QPushButton::clicked, this, &MarkNodesDialog::listItemAdded); + addButton->setAccessibleName("Add new node"); box->addWidget(addButton); layout->addLayout(box); } @@ -100,7 +101,6 @@ void MarkNodesDialog::listItemAdded() { return; } - std::string itemToAdd = _newNode->text().toStdString(); QListWidgetItem* item = new QListWidgetItem(_newNode->text()); _list->addItem(item); @@ -113,14 +113,14 @@ void MarkNodesDialog::listItemAdded() { void MarkNodesDialog::listItemRemove() { QListWidgetItem* item = _list->currentItem(); - int index = _list->row(item); + const int index = _list->row(item); _list->takeItem(index); } void MarkNodesDialog::parseSelections() { std::vector nodes; for (int i = 0; i < _list->count(); i++) { - QString node = _list->item(i)->text(); + const QString node = _list->item(i)->text(); nodes.push_back(node.toStdString()); } *_markedNodes = std::move(nodes); diff --git a/apps/OpenSpace/ext/launcher/src/profile/metadialog.cpp b/apps/OpenSpace/ext/launcher/src/profile/metadialog.cpp index 5158df2029..4fd0342c1f 100644 --- a/apps/OpenSpace/ext/launcher/src/profile/metadialog.cpp +++ b/apps/OpenSpace/ext/launcher/src/profile/metadialog.cpp @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -68,28 +68,34 @@ void MetaDialog::createWidgets() { QBoxLayout* layout = new QVBoxLayout(this); layout->addWidget(new QLabel("Name")); _nameEdit = new QLineEdit; + _nameEdit->setAccessibleName("Profile name"); layout->addWidget(_nameEdit); layout->addWidget(new QLabel("Version")); _versionEdit = new QLineEdit; + _versionEdit->setAccessibleName("Profile version number"); layout->addWidget(_versionEdit); layout->addWidget(new QLabel("Description")); _descriptionEdit = new QTextEdit; _descriptionEdit->setAcceptRichText(false); _descriptionEdit->setTabChangesFocus(true); + _descriptionEdit->setAccessibleName("Profile description"); layout->addWidget(_descriptionEdit); layout->addWidget(new QLabel("Author")); _authorEdit = new QLineEdit; + _authorEdit->setAccessibleName("Profile author name"); layout->addWidget(_authorEdit); layout->addWidget(new QLabel("URL")); _urlEdit = new QLineEdit; + _urlEdit->setAccessibleName("Profile url"); layout->addWidget(_urlEdit); layout->addWidget(new QLabel("License")); _licenseEdit = new QLineEdit; + _licenseEdit->setAccessibleName("Profile license"); layout->addWidget(_licenseEdit); layout->addWidget(new Line); diff --git a/apps/OpenSpace/ext/launcher/src/profile/modulesdialog.cpp b/apps/OpenSpace/ext/launcher/src/profile/modulesdialog.cpp index cd345d04f4..d59b23d032 100644 --- a/apps/OpenSpace/ext/launcher/src/profile/modulesdialog.cpp +++ b/apps/OpenSpace/ext/launcher/src/profile/modulesdialog.cpp @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -31,6 +31,7 @@ #include #include #include +#include #include #include @@ -42,6 +43,26 @@ namespace { .loadedInstruction = std::nullopt, .notLoadedInstruction = std::nullopt }; + + QString createOneLineSummary(Profile::Module m) { + QString summary = QString::fromStdString(m.name); + const bool hasCommandForLoaded = !m.loadedInstruction->empty(); + const bool hasCommandForNotLoaded = !m.notLoadedInstruction->empty(); + + if (hasCommandForLoaded && hasCommandForNotLoaded) { + summary += " (commands set for both loaded & not-loaded conditions)"; + } + else if (hasCommandForLoaded) { + summary += " (command set only for loaded condition)"; + } + else if (hasCommandForNotLoaded) { + summary += " (command set only for NOT loaded condition)"; + } + else { + summary += " (no commands set)"; + } + return summary; + } } // namespace ModulesDialog::ModulesDialog(QWidget* parent, @@ -72,11 +93,12 @@ void ModulesDialog::createWidgets() { _list->addItem(new QListWidgetItem(createOneLineSummary(m))); } layout->addWidget(_list); - + { QBoxLayout* box = new QHBoxLayout; _buttonAdd = new QPushButton("Add new"); connect(_buttonAdd, &QPushButton::clicked, this, &ModulesDialog::listItemAdded); + _buttonAdd->setAccessibleName("Add new module"); box->addWidget(_buttonAdd); _buttonRemove = new QPushButton("Remove"); @@ -84,6 +106,7 @@ void ModulesDialog::createWidgets() { _buttonRemove, &QPushButton::clicked, this, &ModulesDialog::listItemRemove ); + _buttonRemove->setAccessibleName("Remove module"); box->addWidget(_buttonRemove); box->addStretch(); @@ -93,14 +116,14 @@ void ModulesDialog::createWidgets() { { _moduleLabel = new QLabel("Module"); layout->addWidget(_moduleLabel); - + _moduleEdit = new QLineEdit; _moduleEdit->setToolTip("Name of OpenSpace module related to this profile"); layout->addWidget(_moduleEdit); _loadedLabel = new QLabel("Command if Module is Loaded"); layout->addWidget(_loadedLabel); - + _loadedEdit = new QLineEdit; _loadedEdit->setToolTip( "Lua command(s) to execute if OpenSpace has been compiled with the module" @@ -109,7 +132,7 @@ void ModulesDialog::createWidgets() { _notLoadedLabel = new QLabel("Command if Module is NOT Loaded"); layout->addWidget(_notLoadedLabel); - + _notLoadedEdit = new QLineEdit; _notLoadedEdit->setToolTip( "Lua command(s) to execute if the module is not present in the OpenSpace " @@ -139,12 +162,6 @@ void ModulesDialog::createWidgets() { layout->addWidget(new Line); { QBoxLayout* footerLayout = new QHBoxLayout; - - _errorMsg = new QLabel; - _errorMsg->setObjectName("error-message"); - _errorMsg->setWordWrap(true); - footerLayout->addWidget(_errorMsg); - _buttonBox = new QDialogButtonBox; _buttonBox->setStandardButtons(QDialogButtonBox::Save | QDialogButtonBox::Cancel); QObject::connect( @@ -160,29 +177,9 @@ void ModulesDialog::createWidgets() { } } -QString ModulesDialog::createOneLineSummary(Profile::Module m) { - QString summary = QString::fromStdString(m.name); - bool hasCommandForLoaded = !m.loadedInstruction->empty(); - bool hasCommandForNotLoaded = !m.notLoadedInstruction->empty(); - - if (hasCommandForLoaded && hasCommandForNotLoaded) { - summary += " (commands set for both loaded & not-loaded conditions)"; - } - else if (hasCommandForLoaded) { - summary += " (command set only for loaded condition)"; - } - else if (hasCommandForNotLoaded) { - summary += " (command set only for NOT loaded condition)"; - } - else { - summary += " (no commands set)"; - } - return summary; -} - void ModulesDialog::listItemSelected() { QListWidgetItem* item = _list->currentItem(); - int index = _list->row(item); + const int index = _list->row(item); if (!_moduleData.empty()) { const Profile::Module& m = _moduleData[index]; @@ -193,7 +190,7 @@ void ModulesDialog::listItemSelected() { else { _loadedEdit->clear(); } - + if (m.notLoadedInstruction.has_value()) { _notLoadedEdit->setText(QString::fromStdString(*m.notLoadedInstruction)); } @@ -211,7 +208,7 @@ bool ModulesDialog::isLineEmpty(int index) const { } void ModulesDialog::listItemAdded() { - int currentListSize = _list->count(); + const int currentListSize = _list->count(); if ((currentListSize == 1) && (isLineEmpty(0))) { // Special case where list is "empty" but really has one line that is blank. @@ -227,7 +224,6 @@ void ModulesDialog::listItemAdded() { _list->addItem(new QListWidgetItem(" (Enter details below & click 'Save')")); //Scroll down to that blank line highlighted _list->setCurrentRow(_list->count() - 1); - _errorMsg->clear(); } // Blank-out the 2 text fields, set combo box to index 0 @@ -254,12 +250,12 @@ void ModulesDialog::listItemAdded() { void ModulesDialog::listItemSave() { if (_moduleEdit->text().isEmpty()) { - _errorMsg->setText("Missing module name"); + QMessageBox::critical(this, "Error", "Missing module name"); return; } QListWidgetItem* item = _list->currentItem(); - int index = _list->row(item); + const int index = _list->row(item); if (!_moduleData.empty()) { _moduleData[index].name = _moduleEdit->text().toStdString(); @@ -290,7 +286,7 @@ void ModulesDialog::listItemRemove() { _list->item(0)->setText(""); } else { - int index = _list->currentRow(); + const int index = _list->currentRow(); if (index >= 0 && index < _list->count()) { delete _list->takeItem(index); if (!_moduleData.empty()) { @@ -311,7 +307,6 @@ void ModulesDialog::transitionToEditMode() { _loadedLabel->setText("Command if Module is Loaded"); _notLoadedLabel->setText("Command if Module is NOT Loaded"); editBoxDisabled(false); - _errorMsg->setText(""); } void ModulesDialog::transitionFromEditMode() { @@ -326,7 +321,6 @@ void ModulesDialog::transitionFromEditMode() { _moduleLabel->setText("Module"); _loadedLabel->setText("Command if Module is Loaded"); _notLoadedLabel->setText("Command if Module is NOT Loaded"); - _errorMsg->setText(""); } void ModulesDialog::editBoxDisabled(bool disabled) { diff --git a/apps/OpenSpace/ext/launcher/src/profile/profileedit.cpp b/apps/OpenSpace/ext/launcher/src/profile/profileedit.cpp index be170d2eef..a9025d6029 100644 --- a/apps/OpenSpace/ext/launcher/src/profile/profileedit.cpp +++ b/apps/OpenSpace/ext/launcher/src/profile/profileedit.cpp @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -36,11 +36,12 @@ #include "profile/propertiesdialog.h" #include "profile/timedialog.h" #include -#include +#include #include #include #include #include +#include #include #include #include @@ -51,7 +52,7 @@ using namespace openspace; namespace { - QString labelText(size_t size, QString title) { + QString labelText(size_t size, const QString& title) { QString label; if (size > 0) { label = title + " (" + QString::number(size) + ")"; @@ -65,7 +66,7 @@ namespace { std::string summarizeAssets(const std::vector& assets) { std::string results; for (const std::string& a : assets) { - results += a + '\n'; + results += std::format("{}
", a); } return results; } @@ -74,14 +75,14 @@ namespace { const std::vector& actions) { std::string results; - for (Profile::Keybinding k : keybindings) { + for (const Profile::Keybinding& k : keybindings) { const auto it = std::find_if( actions.cbegin(), actions.cend(), [id = k.action](const Profile::Action& a) { return a.identifier == id; } ); std::string name = it != actions.end() ? it->name : "Unknown action"; - results += fmt::format("{} ({})\n", name, ghoul::to_string(k.key)); + results += std::format("{} ({})
", name, ghoul::to_string(k.key)); } return results; } @@ -89,17 +90,17 @@ namespace { std::string summarizeProperties(const std::vector& properties) { std::string results; for (openspace::Profile::Property p : properties) { - results += fmt::format("{} = {}\n", p.name, p.value); + results += std::format("{} = {}
", p.name, p.value); } return results; } } // namespace -ProfileEdit::ProfileEdit(Profile& profile, const std::string& profileName, - std::string assetBasePath, - std::string userAssetBasePath, - std::string builtInProfileBasePath, - std::string profileBasePath, +ProfileEdit::ProfileEdit(Profile& profile, const std::string& profileName, + std::filesystem::path assetBasePath, + std::filesystem::path userAssetBasePath, + std::filesystem::path builtInProfileBasePath, + std::filesystem::path profileBasePath, QWidget* parent) : QDialog(parent) , _profile(profile) @@ -125,6 +126,7 @@ void ProfileEdit::createWidgets(const std::string& profileName) { container->addWidget(profileLabel); _profileEdit = new QLineEdit(QString::fromStdString(profileName)); + _profileEdit->setPlaceholderText("required"); container->addWidget(_profileEdit); QPushButton* duplicateButton = new QPushButton("Duplicate Profile"); @@ -146,17 +148,19 @@ void ProfileEdit::createWidgets(const std::string& profileName) { _propertiesLabel->setWordWrap(true); container->addWidget(_propertiesLabel, 0, 0); + _propertiesEdit = new QTextEdit; + _propertiesEdit->setReadOnly(true); + _propertiesEdit->setAccessibleName("Property value settings"); + container->addWidget(_propertiesEdit, 1, 0, 1, 3); + QPushButton* editProperties = new QPushButton("Edit"); connect( editProperties, &QPushButton::clicked, this, &ProfileEdit::openProperties ); + editProperties->setAccessibleName("Edit properties"); container->addWidget(editProperties, 0, 2); - _propertiesEdit = new QTextEdit; - _propertiesEdit->setReadOnly(true); - container->addWidget(_propertiesEdit, 1, 0, 1, 3); - leftLayout->addLayout(container); } leftLayout->addWidget(new Line); @@ -169,14 +173,16 @@ void ProfileEdit::createWidgets(const std::string& profileName) { _assetsLabel->setWordWrap(true); container->addWidget(_assetsLabel, 0, 0); - QPushButton* assetsProperties = new QPushButton("Edit"); - connect(assetsProperties, &QPushButton::clicked, this, &ProfileEdit::openAssets); - container->addWidget(assetsProperties, 0, 2); - _assetsEdit = new QTextEdit; _assetsEdit->setReadOnly(true); + _assetsEdit->setAccessibleName("Loaded assets"); container->addWidget(_assetsEdit, 1, 0, 1, 3); + QPushButton* assetsProperties = new QPushButton("Edit"); + connect(assetsProperties, &QPushButton::clicked, this, &ProfileEdit::openAssets); + assetsProperties->setAccessibleName("Edit assets"); + container->addWidget(assetsProperties, 0, 2); + leftLayout->addLayout(container); } leftLayout->addWidget(new Line); @@ -188,17 +194,19 @@ void ProfileEdit::createWidgets(const std::string& profileName) { _keybindingsLabel->setObjectName("heading"); container->addWidget(_keybindingsLabel, 0, 0); + _keybindingsEdit = new QTextEdit; + _keybindingsEdit->setReadOnly(true); + _keybindingsEdit->setAccessibleName("Loaded action and keybindings"); + container->addWidget(_keybindingsEdit, 1, 0, 1, 3); + QPushButton* keybindingsProperties = new QPushButton("Edit"); connect( keybindingsProperties, &QPushButton::clicked, this, &ProfileEdit::openKeybindings ); + keybindingsProperties->setAccessibleName("Edit actions and keybindings"); container->addWidget(keybindingsProperties, 0, 2); - _keybindingsEdit = new QTextEdit; - _keybindingsEdit->setReadOnly(true); - container->addWidget(_keybindingsEdit, 1, 0, 1, 3); - leftLayout->addLayout(container); } topLayout->addLayout(leftLayout, 3); @@ -216,6 +224,7 @@ void ProfileEdit::createWidgets(const std::string& profileName) { QPushButton* metaEdit = new QPushButton("Edit"); connect(metaEdit, &QPushButton::clicked, this, &ProfileEdit::openMeta); metaEdit->setLayoutDirection(Qt::RightToLeft); + metaEdit->setAccessibleName("Edit metadata"); container->addWidget(metaEdit); rightLayout->addLayout(container); } @@ -233,6 +242,7 @@ void ProfileEdit::createWidgets(const std::string& profileName) { this, &ProfileEdit::openMarkNodes ); interestingNodesEdit->setLayoutDirection(Qt::RightToLeft); + interestingNodesEdit->setAccessibleName("Edit interesting nodes"); container->addWidget(interestingNodesEdit); rightLayout->addLayout(container); } @@ -250,6 +260,7 @@ void ProfileEdit::createWidgets(const std::string& profileName) { this, &ProfileEdit::openDeltaTimes ); deltaTimesEdit->setLayoutDirection(Qt::RightToLeft); + deltaTimesEdit->setAccessibleName("Edit simulation time increments"); container->addWidget(deltaTimesEdit); rightLayout->addLayout(container); } @@ -264,6 +275,7 @@ void ProfileEdit::createWidgets(const std::string& profileName) { QPushButton* cameraEdit = new QPushButton("Edit"); connect(cameraEdit, &QPushButton::clicked, this, &ProfileEdit::openCamera); cameraEdit->setLayoutDirection(Qt::RightToLeft); + cameraEdit->setAccessibleName("Edit camera"); container->addWidget(cameraEdit); rightLayout->addLayout(container); } @@ -278,6 +290,7 @@ void ProfileEdit::createWidgets(const std::string& profileName) { QPushButton* timeEdit = new QPushButton("Edit"); connect(timeEdit, &QPushButton::clicked, this, &ProfileEdit::openTime); timeEdit->setLayoutDirection(Qt::RightToLeft); + timeEdit->setAccessibleName("Edit time"); container->addWidget(timeEdit); rightLayout->addLayout(container); } @@ -292,6 +305,7 @@ void ProfileEdit::createWidgets(const std::string& profileName) { QPushButton* modulesEdit = new QPushButton("Edit"); connect(modulesEdit, &QPushButton::clicked, this, &ProfileEdit::openModules); modulesEdit->setLayoutDirection(Qt::RightToLeft); + modulesEdit->setAccessibleName("Edit modules"); container->addWidget(modulesEdit); rightLayout->addLayout(container); } @@ -309,6 +323,7 @@ void ProfileEdit::createWidgets(const std::string& profileName) { this, &ProfileEdit::openAddedScripts ); additionalScriptsEdit->setLayoutDirection(Qt::RightToLeft); + additionalScriptsEdit->setAccessibleName("Edit additional scripts"); container->addWidget(additionalScriptsEdit); rightLayout->addLayout(container); } @@ -319,11 +334,6 @@ void ProfileEdit::createWidgets(const std::string& profileName) { { QBoxLayout* footer = new QHBoxLayout; - _errorMsg = new QLabel; - _errorMsg->setObjectName("error-message"); - _errorMsg->setWordWrap(true); - footer->addWidget(_errorMsg); - QDialogButtonBox* buttons = new QDialogButtonBox; buttons->setStandardButtons(QDialogButtonBox::Save | QDialogButtonBox::Cancel); connect(buttons, &QDialogButtonBox::accepted, this, &ProfileEdit::approved); @@ -360,7 +370,6 @@ void ProfileEdit::initSummaryTextForEachCategory() { } void ProfileEdit::duplicateProfile() { - _errorMsg->clear(); std::string profile = _profileEdit->text().toStdString(); if (profile.empty()) { return; @@ -368,10 +377,10 @@ void ProfileEdit::duplicateProfile() { constexpr char Separator = '_'; int version = 0; - if (size_t it = profile.rfind(Separator); it != std::string::npos) { + if (const size_t it = profile.rfind(Separator); it != std::string::npos) { // If the value exists, we have a profile that potentially already has a version // number attached to it - std::string versionStr = profile.substr(it + 1); + const std::string versionStr = profile.substr(it + 1); try { version = std::stoi(versionStr); @@ -392,29 +401,28 @@ void ProfileEdit::duplicateProfile() { while (true) { version++; - std::string candidate = profile + Separator + std::to_string(version); - std::string candidatePath = _profileBasePath + candidate + ".profile"; + const std::string candidate = std::format("{}{}{}", profile, Separator, version); + const std::string candidatePath = std::format( + "{}{}.profile", _profileBasePath, candidate + ); if (!std::filesystem::exists(candidatePath)) { - _profileEdit->setText(QString::fromStdString(std::move(candidate))); + _profileEdit->setText(QString::fromStdString(candidate)); return; } } } void ProfileEdit::openMeta() { - _errorMsg->clear(); MetaDialog(this, &_profile.meta).exec(); } void ProfileEdit::openModules() { - _errorMsg->clear(); ModulesDialog(this, &_profile.modules).exec(); _modulesLabel->setText(labelText(_profile.modules.size(), "Modules")); } void ProfileEdit::openProperties() { - _errorMsg->clear(); PropertiesDialog(this, &_profile.properties).exec(); _propertiesLabel->setText(labelText(_profile.properties.size(), "Properties")); _propertiesEdit->setText( @@ -423,7 +431,6 @@ void ProfileEdit::openProperties() { } void ProfileEdit::openKeybindings() { - _errorMsg->clear(); ActionDialog(this, &_profile.actions, &_profile.keybindings).exec(); _keybindingsLabel->setText(labelText(_profile.keybindings.size(), "Keybindings")); _keybindingsEdit->setText(QString::fromStdString( @@ -432,19 +439,16 @@ void ProfileEdit::openKeybindings() { } void ProfileEdit::openAssets() { - _errorMsg->clear(); AssetsDialog(this, &_profile, _assetBasePath, _userAssetBasePath).exec(); _assetsLabel->setText(labelText(_profile.assets.size(), "Assets")); _assetsEdit->setText(QString::fromStdString(summarizeAssets(_profile.assets))); } void ProfileEdit::openTime() { - _errorMsg->clear(); TimeDialog(this, &_profile.time).exec(); } void ProfileEdit::openDeltaTimes() { - _errorMsg->clear(); DeltaTimesDialog(this, &_profile.deltaTimes).exec(); _deltaTimesLabel->setText( labelText(_profile.deltaTimes.size(), "Simulation Time Increments") @@ -452,17 +456,14 @@ void ProfileEdit::openDeltaTimes() { } void ProfileEdit::openAddedScripts() { - _errorMsg->clear(); AdditionalScriptsDialog(this, &_profile.additionalScripts).exec(); } void ProfileEdit::openCamera() { - _errorMsg->clear(); CameraDialog(this, &_profile.camera).exec(); } void ProfileEdit::openMarkNodes() { - _errorMsg->clear(); MarkNodesDialog(this, &_profile.markNodes).exec(); _interestingNodesLabel->setText( labelText(_profile.markNodes.size(), "Mark Interesting Nodes") @@ -477,31 +478,29 @@ std::string ProfileEdit::specifiedFilename() const { return _profileEdit->text().toStdString(); } -void ProfileEdit::cancel() { - _saveSelected = false; - reject(); -} - void ProfileEdit::approved() { std::string profileName = _profileEdit->text().toStdString(); if (profileName.empty()) { - _errorMsg->setText("Profile name must be specified"); + QMessageBox::critical(this, "No profile name", "Profile name must be specified"); + _profileEdit->setFocus(); return; } - std::filesystem::path p = fmt::format( + const std::filesystem::path p = std::format( "{}/{}.profile", _builtInProfilesPath, profileName ); if (std::filesystem::exists(p)) { // The filename exists in the OpenSpace-provided folder, so we don't want to allow // a user to overwrite it - _errorMsg->setText( - "This is a read-only profile. Click 'Duplicate' or rename & save" + QMessageBox::critical( + this, + "Reserved profile name", + "This is a read-only profile. Click 'Duplicate' or rename profile and save" ); + _profileEdit->setFocus(); } else { _saveSelected = true; - _errorMsg->setText(""); accept(); } } @@ -513,3 +512,36 @@ void ProfileEdit::keyPressEvent(QKeyEvent* evt) { QDialog::keyPressEvent(evt); } + +void ProfileEdit::reject() { + // We hijack the reject (i.e., exit window) and emit the signal. The actual shutdown + // of the window comes at a later stage. + emit raiseExitWindow(); +} + +void ProfileEdit::closeWithoutSaving() { + _saveSelected = false; + QDialog::reject(); +} + +void ProfileEdit::promptUserOfUnsavedChanges() { + QMessageBox msgBox; + msgBox.setText("There are unsaved changes"); + msgBox.setInformativeText("Do you want to save your changes"); + msgBox.setStandardButtons(QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel); + msgBox.setDefaultButton(QMessageBox::Save); + int ret = msgBox.exec(); + + switch (ret) { + case QMessageBox::Save: + approved(); + break; + case QMessageBox::Discard: + closeWithoutSaving(); + break; + case QMessageBox::Cancel: + break; + default: + break; + } +} diff --git a/apps/OpenSpace/ext/launcher/src/profile/propertiesdialog.cpp b/apps/OpenSpace/ext/launcher/src/profile/propertiesdialog.cpp index 654f6fb24a..fb99b04bd0 100644 --- a/apps/OpenSpace/ext/launcher/src/profile/propertiesdialog.cpp +++ b/apps/OpenSpace/ext/launcher/src/profile/propertiesdialog.cpp @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -35,6 +35,7 @@ #include #include #include +#include #include #include #include @@ -48,6 +49,18 @@ namespace { "", "" }; + + QString createOneLineSummary(const Profile::Property& p) { + QString summary = QString::fromStdString(p.name); + summary += " = "; + summary += QString::fromStdString(p.value); + summary += " (SetPropertyValue"; + if (p.setType == Profile::Property::SetType::SetPropertyValueSingle) { + summary += "Single"; + } + summary += ")"; + return summary; + } } // namespace PropertiesDialog::PropertiesDialog(QWidget* parent, @@ -70,8 +83,8 @@ void PropertiesDialog::createWidgets() { _list, &QListWidget::itemSelectionChanged, this, &PropertiesDialog::listItemSelected ); - for (size_t i = 0; i < _propertyData.size(); ++i) { - _list->addItem(new QListWidgetItem(createOneLineSummary(_propertyData[i]))); + for (const Profile::Property& property : _propertyData) { + _list->addItem(new QListWidgetItem(createOneLineSummary(property))); } layout->addWidget(_list); } @@ -145,13 +158,11 @@ void PropertiesDialog::createWidgets() { } layout->addWidget(new Line); { + _errorMsg = new QMessageBox(this); + _errorMsg->setIcon(QMessageBox::Critical); + _errorMsg->setText("Invalid input data"); + QBoxLayout* footerLayout = new QHBoxLayout; - - _errorMsg = new QLabel; - _errorMsg->setObjectName("error-message"); - _errorMsg->setWordWrap(true); - footerLayout->addWidget(_errorMsg); - _buttonBox = new QDialogButtonBox; _buttonBox->setStandardButtons(QDialogButtonBox::Save | QDialogButtonBox::Cancel); @@ -168,24 +179,12 @@ void PropertiesDialog::createWidgets() { } } -QString PropertiesDialog::createOneLineSummary(Profile::Property p) { - QString summary = QString::fromStdString(p.name); - summary += " = "; - summary += QString::fromStdString(p.value); - summary += " (SetPropertyValue"; - if (p.setType == Profile::Property::SetType::SetPropertyValueSingle) { - summary += "Single"; - } - summary += ")"; - return summary; -} - void PropertiesDialog::listItemSelected() { QListWidgetItem* item = _list->currentItem(); - int index = _list->row(item); + const int index = _list->row(item); if (!_propertyData.empty()) { - Profile::Property& p = _propertyData[index]; + const Profile::Property& p = _propertyData[index]; if (p.setType == Profile::Property::SetType::SetPropertyValueSingle) { _commandCombo->setCurrentIndex(0); } @@ -210,7 +209,7 @@ bool PropertiesDialog::isLineEmpty(int index) { } void PropertiesDialog::listItemAdded() { - int currentListSize = _list->count(); + const int currentListSize = _list->count(); if ((currentListSize == 1) && (isLineEmpty(0))) { // Special case where list is "empty" but really has one line that is blank. @@ -238,11 +237,12 @@ void PropertiesDialog::listItemAdded() { void PropertiesDialog::listItemSave() { if (!areRequiredFormsFilled()) { + _errorMsg->exec(); return; } QListWidgetItem* item = _list->currentItem(); - int index = _list->row(item); + const int index = _list->row(item); if (!_propertyData.empty()) { if (_commandCombo->currentIndex() == 0) { @@ -274,7 +274,7 @@ bool PropertiesDialog::areRequiredFormsFilled() { errors += "Missing value"; requiredFormsFilled = false; } - _errorMsg->setText("" + errors + ""); + _errorMsg->setInformativeText(errors); return requiredFormsFilled; } @@ -300,10 +300,10 @@ void PropertiesDialog::listItemRemove() { _list->item(0)->setText(""); } else { - int index = _list->currentRow(); + const int index = _list->currentRow(); if (index >= 0 && index < _list->count()) { delete _list->takeItem(index); - if (_propertyData.size() > 0) { + if (!_propertyData.empty()) { _propertyData.erase(_propertyData.begin() + index); } } @@ -322,7 +322,6 @@ void PropertiesDialog::transitionToEditMode() { _propertyLabel->setText("Property"); _valueLabel->setText("Value to set"); editBoxDisabled(false); - _errorMsg->setText(""); } void PropertiesDialog::transitionFromEditMode() { @@ -338,7 +337,6 @@ void PropertiesDialog::transitionFromEditMode() { _propertyLabel->setText("Property"); _valueLabel->setText("Value to set"); editBoxDisabled(true); - _errorMsg->setText(""); } void PropertiesDialog::editBoxDisabled(bool disabled) { @@ -376,10 +374,10 @@ void PropertiesDialog::keyPressEvent(QKeyEvent* evt) { } void PropertiesDialog::selectLineFromScriptLog() { - ScriptlogDialog d(this, "openspace.setPropertyValue"); + ScriptLogDialog d = ScriptLogDialog(this, "openspace.setPropertyValue"); connect( - &d, &ScriptlogDialog::scriptsSelected, - [this](std::vector scripts) { + &d, &ScriptLogDialog::scriptsSelected, + [this](const std::vector& scripts) { for (const std::string& script : scripts) { listItemAdded(); @@ -392,13 +390,13 @@ void PropertiesDialog::selectLineFromScriptLog() { // openspace.setPropertyValue('prop', value); if (text.startsWith("openspace.setPropertyValueSingle")) { _commandCombo->setCurrentIndex(0); - std::string_view prefix = "openspace.setPropertyValueSingle"; + const std::string_view prefix = "openspace.setPropertyValueSingle"; text = text.mid(static_cast(prefix.size()) + 1); // +1 for ( } else { // command == "openspace.setPropertyValue" _commandCombo->setCurrentIndex(1); - std::string_view prefix = "openspace.setPropertyValue"; + const std::string_view prefix = "openspace.setPropertyValue"; text = text.mid(static_cast(prefix.size()) + 1); // +1 for ( } @@ -411,11 +409,10 @@ void PropertiesDialog::selectLineFromScriptLog() { } // Remove the string markers around the property - QString property = textList[0].mid(1, textList[0].size() - 2); + const QString property = textList[0].mid(1, textList[0].size() - 2); textList.removeFirst(); - QString value = textList.join(","); - + const QString value = textList.join(","); _propertyEdit->setText(property.trimmed()); _valueEdit->setText(value.trimmed()); diff --git a/apps/OpenSpace/ext/launcher/src/profile/scriptlogdialog.cpp b/apps/OpenSpace/ext/launcher/src/profile/scriptlogdialog.cpp index 80524b5b18..7a88ce9c57 100644 --- a/apps/OpenSpace/ext/launcher/src/profile/scriptlogdialog.cpp +++ b/apps/OpenSpace/ext/launcher/src/profile/scriptlogdialog.cpp @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -29,7 +29,7 @@ #include #include #include -#include +#include #include #include #include @@ -39,8 +39,9 @@ #include #include #include +#include -ScriptlogDialog::ScriptlogDialog(QWidget* parent, std::string filter) +ScriptLogDialog::ScriptLogDialog(QWidget* parent, std::string filter) : QDialog(parent) , _scriptLogFile(openspace::global::configuration->scriptLog) , _fixedFilter(std::move(filter)) @@ -51,7 +52,7 @@ ScriptlogDialog::ScriptlogDialog(QWidget* parent, std::string filter) loadScriptFile(); } -void ScriptlogDialog::createWidgets() { +void ScriptLogDialog::createWidgets() { // Column 0 Column 1 // *-------------------------*------------* // | Title | @@ -65,7 +66,7 @@ void ScriptlogDialog::createWidgets() { QGridLayout* layout = new QGridLayout(this); { - QLabel* heading = new QLabel(QString::fromStdString(fmt::format( + QLabel* heading = new QLabel(QString::fromStdString(std::format( "Choose commands from \"{}\"", _scriptLogFile ))); heading->setObjectName("heading"); @@ -76,7 +77,7 @@ void ScriptlogDialog::createWidgets() { connect( open, &QPushButton::clicked, [this, heading]() { - QString file = QFileDialog::getOpenFileName( + const QString file = QFileDialog::getOpenFileName( this, "Select log file", "", @@ -84,7 +85,7 @@ void ScriptlogDialog::createWidgets() { ); _scriptLogFile = file.toStdString(); - heading->setText(QString::fromStdString(fmt::format( + heading->setText(QString::fromStdString(std::format( "Choose commands from \"{}\"", _scriptLogFile ))); loadScriptFile(); @@ -95,12 +96,12 @@ void ScriptlogDialog::createWidgets() { _filter = new QLineEdit; _filter->setPlaceholderText("Filter the list of scripts"); - connect(_filter, &QLineEdit::textEdited, this, &ScriptlogDialog::updateScriptList); + connect(_filter, &QLineEdit::textEdited, this, &ScriptLogDialog::updateScriptList); layout->addWidget(_filter, 1, 0); _reloadFile = new QPushButton("Reload"); _reloadFile->setToolTip("Reload the script log file"); - connect(_reloadFile, &QPushButton::clicked, this, &ScriptlogDialog::loadScriptFile); + connect(_reloadFile, &QPushButton::clicked, this, &ScriptLogDialog::loadScriptFile); layout->addWidget(_reloadFile, 1, 1); _scriptlogList = new QListWidget; @@ -113,21 +114,21 @@ void ScriptlogDialog::createWidgets() { buttons->setStandardButtons(QDialogButtonBox::Save | QDialogButtonBox::Cancel); connect( buttons, &QDialogButtonBox::accepted, - this, &ScriptlogDialog::saveChosenScripts + this, &ScriptLogDialog::saveChosenScripts ); connect( buttons, &QDialogButtonBox::rejected, - this, &ScriptlogDialog::reject + this, &ScriptLogDialog::reject ); layout->addWidget(buttons, 3, 0, 1, 2); } } -void ScriptlogDialog::loadScriptFile() { +void ScriptLogDialog::loadScriptFile() { _scripts.clear(); - std::string log = absPath(_scriptLogFile).string(); - QFile file(QString::fromStdString(log)); + const std::filesystem::path log = absPath(_scriptLogFile); + QFile file = QFile(QString::fromStdString(log.string())); if (file.open(QIODevice::ReadOnly | QIODevice::Text)) { QTextStream in(&file); while (!in.atEnd()) { @@ -140,10 +141,15 @@ void ScriptlogDialog::loadScriptFile() { } } updateScriptList(); + + // It's not possible to call the `scrollToBottom` function directly as it only will + // scroll to the middle of the list. By doing it this way, we correctly end up at the + // bottom of the list + QTimer::singleShot(0, _scriptlogList, &QListWidget::scrollToBottom); } -void ScriptlogDialog::updateScriptList() { - std::string filter = _filter->text().toStdString(); +void ScriptLogDialog::updateScriptList() { + const std::string filter = _filter->text().toStdString(); QListWidgetItem* curr = _scriptlogList->currentItem(); std::string selection; if (curr) { @@ -152,8 +158,8 @@ void ScriptlogDialog::updateScriptList() { int index = -1; _scriptlogList->clear(); for (const std::string& script : _scripts) { - bool foundDynamic = script.find(filter) != std::string::npos; - bool foundStatic = + const bool foundDynamic = script.find(filter) != std::string::npos; + const bool foundStatic = _fixedFilter.empty() ? true : script.find(_fixedFilter) != std::string::npos; if (foundDynamic && foundStatic) { if (script == selection && index == -1) { @@ -164,10 +170,21 @@ void ScriptlogDialog::updateScriptList() { } } -void ScriptlogDialog::saveChosenScripts() { +void ScriptLogDialog::saveChosenScripts() { std::vector chosenScripts; QList itemList = _scriptlogList->selectedItems(); - for (QListWidgetItem* item : _scriptlogList->selectedItems()) { + + // The selected items are returned in order of **selection** not in row-order, so we + // need to sort them first + std::sort( + itemList.begin(), + itemList.end(), + [this](QListWidgetItem* lhs, QListWidgetItem* rhs) { + return _scriptlogList->row(lhs) < _scriptlogList->row(rhs); + } + ); + + for (QListWidgetItem* item : itemList) { chosenScripts.push_back(item->text().toStdString()); } emit scriptsSelected(chosenScripts); diff --git a/apps/OpenSpace/ext/launcher/src/profile/timedialog.cpp b/apps/OpenSpace/ext/launcher/src/profile/timedialog.cpp index 0ab1e9fd9f..22be9609f9 100644 --- a/apps/OpenSpace/ext/launcher/src/profile/timedialog.cpp +++ b/apps/OpenSpace/ext/launcher/src/profile/timedialog.cpp @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -33,7 +33,7 @@ #include #include #include -#include +#include #include using namespace openspace; @@ -45,7 +45,7 @@ TimeDialog::TimeDialog(QWidget* parent, std::optional* setWindowTitle("Time"); createWidgets(); - QStringList types = { "Absolute", "Relative" }; + const QStringList types = { "Absolute", "Relative" }; _typeCombo->addItems(types); if (_time->has_value()) { _timeData = **_time; @@ -53,7 +53,7 @@ TimeDialog::TimeDialog(QWidget* parent, std::optional* if (_timeData.value.empty()) { _timeData.value = "0d"; } - int len = static_cast(_relativeEdit->text().length()); + const int len = static_cast(_relativeEdit->text().length()); _relativeEdit->setSelection(0, len); } else { @@ -75,6 +75,7 @@ void TimeDialog::createWidgets() { { layout->addWidget(new QLabel("Time Type")); _typeCombo = new QComboBox; + _typeCombo->setAccessibleName("Time type"); _typeCombo->setToolTip("Types: Absolute defined time or Relative to actual time"); connect( _typeCombo, QOverload::of(&QComboBox::currentIndexChanged), @@ -85,17 +86,19 @@ void TimeDialog::createWidgets() { { _absoluteLabel = new QLabel("Absolute UTC:"); layout->addWidget(_absoluteLabel); - + _absoluteEdit = new QDateTimeEdit; _absoluteEdit->setDisplayFormat("yyyy-MM-dd T hh:mm:ss"); _absoluteEdit->setDateTime(QDateTime::currentDateTime()); + _absoluteEdit->setAccessibleName("Set absolute time"); layout->addWidget(_absoluteEdit); } { _relativeLabel = new QLabel("Relative Time:"); layout->addWidget(_relativeLabel); - + _relativeEdit = new QLineEdit; + _relativeEdit->setAccessibleName("Set relative time"); _relativeEdit->setToolTip( "String for relative time to actual (e.g. \"-1d\" for back 1 day)" ); @@ -121,8 +124,8 @@ void TimeDialog::createWidgets() { } void TimeDialog::enableAccordingToType(int idx) { - Profile::Time::Type comboIdx = static_cast(idx); - bool setFormatForAbsolute = (comboIdx == Profile::Time::Type::Absolute); + const Profile::Time::Type comboIdx = static_cast(idx); + const bool setFormatForAbsolute = (comboIdx == Profile::Time::Type::Absolute); enableFormatForAbsolute(setFormatForAbsolute); _typeCombo->setCurrentIndex(idx); if (comboIdx == Profile::Time::Type::Relative) { @@ -137,9 +140,13 @@ void TimeDialog::enableAccordingToType(int idx) { } else { _relativeEdit->setText("Relative Time:"); - size_t tIdx = _timeData.value.find_first_of('T', 0); - QString importDate = QString::fromStdString(_timeData.value.substr(0, tIdx)); - QString importTime = QString::fromStdString(_timeData.value.substr(tIdx + 1)); + const size_t tIdx = _timeData.value.find_first_of('T', 0); + const QString importDate = QString::fromStdString( + _timeData.value.substr(0, tIdx) + ); + const QString importTime = QString::fromStdString( + _timeData.value.substr(tIdx + 1) + ); _absoluteEdit->setDate(QDate::fromString(importDate, Qt::DateFormat::ISODate)); _absoluteEdit->setTime(QTime::fromString(importTime)); _relativeEdit->clear(); @@ -171,7 +178,7 @@ void TimeDialog::approved() { else { Profile::Time t; t.type = Profile::Time::Type::Absolute; - t.value = fmt::format( + t.value = std::format( "{}T{}", _absoluteEdit->date().toString("yyyy-MM-dd").toStdString(), _absoluteEdit->time().toString().toStdString() diff --git a/apps/OpenSpace/ext/launcher/src/settingsdialog.cpp b/apps/OpenSpace/ext/launcher/src/settingsdialog.cpp new file mode 100644 index 0000000000..0dc036a102 --- /dev/null +++ b/apps/OpenSpace/ext/launcher/src/settingsdialog.cpp @@ -0,0 +1,447 @@ +/***************************************************************************************** + * * + * OpenSpace * + * * + * Copyright (c) 2014-2025 * + * * + * 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 "settingsdialog.h" + +#include "profile/line.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +SettingsDialog::SettingsDialog(openspace::Settings settings, QWidget* parent) + : QDialog(parent) + , _currentEdit(std::move(settings)) +{ + setWindowTitle("Settings"); + createWidgets(); + loadFromSettings(_currentEdit); + + // Setting the startup values for the control will have caused the Save button to be + // enabled, so we need to manually disable it again here + _dialogButtons->button(QDialogButtonBox::Save)->setEnabled(false); +} + +void SettingsDialog::createWidgets() { + // Layout of this dialog: + // + // ------------------------------------------------------- + // | Profile | + // | Starting Profile: | [oooooooooooooooooooo] | + // | [] Keep Last Profile | + // | Configuration | + // | Starting Configuration: | [oooooooooooooooooooo] | + // | [] Keep Last Configuration | + // | User Interface | + // | Property Visibility | DDDDDDDDDDDDDDDDDDDDD> | + // | [] Bypass Launcher | + // | Informational text about undoing the bypass setting | + // | Layer Settings | + // | Layer Server | DDDDDDDDDDDDDDDDDDDDD> | + // | [] Enable MRF caching | + // | MRF Cache Location | [oooooooooooooooooooo] | + // | | | + // ------------------------------------------------------- + + QGridLayout* layout = new QGridLayout(this); + layout->setSizeConstraint(QLayout::SetFixedSize); + + { + QLabel* label = new QLabel("Profile"); + label->setObjectName("heading"); + layout->addWidget(label, 0, 0, 1, 2); + + QLabel* conf = new QLabel("Starting Profile"); + conf->setToolTip( + "With this setting, you can choose a profile that will be loaded the next " + "time you start the application" + ); + layout->addWidget(conf, 1, 0); + + _profile = new QLineEdit; + _profile->setToolTip(conf->toolTip()); + connect( + _profile, + &QLineEdit::textChanged, + [this]() { + const std::string v = _profile->text().toStdString(); + if (v.empty()) { + _currentEdit.profile = std::nullopt; + } + else { + _currentEdit.profile = v; + } + + updateSaveButton(); + } + ); + layout->addWidget(_profile, 1, 1); + + _rememberLastProfile = new QCheckBox("Keep Last Profile"); + _rememberLastProfile->setToolTip( + "If this setting is checked, the application will remember the profile that " + "was loaded into OpenSpace and will use it at the next startup as well" + ); + connect( + _rememberLastProfile, + &QCheckBox::stateChanged, + [this]() { + if (_rememberLastProfile->isChecked()) { + _currentEdit.rememberLastProfile = true; + } + else { + _currentEdit.rememberLastProfile = std::nullopt; + } + + _profile->setDisabled(_rememberLastProfile->isChecked()); + updateSaveButton(); + } + ); + layout->addWidget(_rememberLastProfile, 2, 0, 1, 2); + } + + layout->addWidget(new Line(), 3, 0, 1, 2); + + { + QLabel* label = new QLabel("Configuration"); + label->setObjectName("heading"); + layout->addWidget(label, 4, 0, 1, 2); + + QLabel* conf = new QLabel("Starting Configuration"); + conf->setToolTip( + "With this setting, you can choose a window configuration that will be " + "loaded the next time you start the application" + ); + layout->addWidget(conf, 5, 0); + + _configuration = new QLineEdit; + _configuration->setToolTip(conf->toolTip()); + connect( + _configuration, + &QLineEdit::textChanged, + [this]() { + const std::string v = _configuration->text().toStdString(); + if (v.empty()) { + _currentEdit.configuration = std::nullopt; + } + else { + _currentEdit.configuration = v; + } + + updateSaveButton(); + } + ); + layout->addWidget(_configuration, 5, 1); + + _rememberLastConfiguration = new QCheckBox("Keep Last Configuration"); + _rememberLastConfiguration->setToolTip( + "If this setting is checked, the application will remember the window " + "configuration and will use it at the next startup as well" + ); + connect( + _rememberLastConfiguration, + &QCheckBox::stateChanged, + [this]() { + if (_rememberLastConfiguration->isChecked()) { + _currentEdit.rememberLastConfiguration = true; + } + else { + _currentEdit.rememberLastConfiguration = std::nullopt; + } + _configuration->setDisabled(_rememberLastConfiguration->isChecked()); + updateSaveButton(); + } + ); + layout->addWidget(_rememberLastConfiguration, 6, 0, 1, 2); + } + + layout->addWidget(new Line(), 7, 0, 1, 2); + + { + QLabel* label = new QLabel("User Interface"); + label->setObjectName("heading"); + layout->addWidget(label, 8, 0, 1, 2); + + QLabel* conf = new QLabel("Property Visibility"); + conf->setToolTip( + "This setting sets the default visibility for properties in the application. " + "Note that these values are ordered, so all properties shown as a 'Novice " + "User' are also visible when selecting 'User', etc." + ); + layout->addWidget(conf, 9, 0); + + _propertyVisibility = new QComboBox; + _propertyVisibility->setToolTip(conf->toolTip()); + _propertyVisibility->addItems({ + "Novice User", + "User", + "Advanced User", + "Developer" + }); + _propertyVisibility->setCurrentText("User"); + connect( + _propertyVisibility, + &QComboBox::textActivated, + [this](const QString& value) { + using Visibility = openspace::properties::Property::Visibility; + if (value == "Novice User") { + _currentEdit.visibility = Visibility::NoviceUser; + } + else if (value == "User") { + // This is the default value + _currentEdit.visibility = std::nullopt; + } + else if (value == "Advanced User") { + _currentEdit.visibility = Visibility::AdvancedUser; + } + else if (value == "Developer") { + _currentEdit.visibility = Visibility::Developer; + } + else { + throw ghoul::MissingCaseException(); + } + + updateSaveButton(); + } + ); + _propertyVisibility->setObjectName("dropdown"); + layout->addWidget(_propertyVisibility, 9, 1); + + _bypassLauncher = new QCheckBox("Bypass Launcher"); + _bypassLauncher->setToolTip( + "If this value is selected, the Launcher will no longer be shown at startup. " + "Note that this also means that it will not be easy to get back to this " + "setting to reenable the Launcher either." + ); + connect( + _bypassLauncher, + &QCheckBox::stateChanged, + [this]() { + if (_bypassLauncher->isChecked()) { + _currentEdit.bypassLauncher = _bypassLauncher->isChecked(); + } + else { + _currentEdit.bypassLauncher = std::nullopt; + } + _bypassInformation->setVisible(_bypassLauncher->isChecked()); + updateSaveButton(); + } + ); + layout->addWidget(_bypassLauncher, 10, 0, 1, 2); + + _bypassInformation = new QLabel( + "Saving the settings with the bypass launcher enabled will cause this window " + "to not show up again, making it harder to undo this change. In case you " + "need to undo it, you need to open the settings.json and remove the line " + "that says '\"bypass\": true,'" + ); + _bypassInformation->setObjectName("information"); + _bypassInformation->setHidden(true); + _bypassInformation->setWordWrap(true); + layout->addWidget(_bypassInformation, 11, 0, 1, 2); + } + + layout->addWidget(new Line(), 12, 0, 1, 2); + + { + QLabel* label = new QLabel("Layer Settings"); + label->setObjectName("heading"); + layout->addWidget(label, 13, 0, 1, 2); + + QLabel* conf = new QLabel("Layer Server"); + conf->setToolTip( + "This setting sets the default server to be used for the layers that " + "are hosted by the OpenSpace team" + ); + layout->addWidget(conf, 14, 0); + + _layerServer = new QComboBox; + _layerServer->setToolTip(conf->toolTip()); + _layerServer->addItems({ + "All", + "NewYork", + "Sweden", + "Utah", + "None" + }); + _layerServer->setCurrentText("All"); + connect( + _layerServer, + &QComboBox::textActivated, + [this](const QString& value) { + _currentEdit.layerServer = + openspace::stringToLayerServer(value.toStdString()); + updateSaveButton(); + } + ); + _layerServer->setObjectName("dropdown"); + layout->addWidget(_layerServer, 14, 1); + + _mrf.isEnabled = new QCheckBox("Enable MRF Caching"); + _mrf.isEnabled->setToolTip( + "If this setting is checked, the MRF caching for globe layers will be " + "enabled. This means that all planetary images that are loaded over the " + "internet will also be cached locally and stored between application runs. " + "This will speedup the loading the second time at the expense of hard disk " + "space." + ); + connect( + _mrf.isEnabled, + &QCheckBox::stateChanged, + [this]() { + if (_mrf.isEnabled->isChecked()) { + _currentEdit.mrf.isEnabled = _mrf.isEnabled->isChecked(); + } + else { + _currentEdit.mrf.isEnabled = std::nullopt; + } + + _mrf.location->setDisabled(!_mrf.isEnabled->isChecked()); + updateSaveButton(); + } + ); + layout->addWidget(_mrf.isEnabled, 16, 0, 1, 2); + + QLabel* mrfConf = new QLabel("MRF Cache Location"); + conf->setToolTip( + "This is the place where the MRF cache files are located. Please note that " + "these files can potentially become quite large when using OpenSpace for a " + "long while and when visiting new places regularly. If this value is left " + "blank, the cached files will be stored in the 'mrf_cache' folder in the " + "OpenSpace base folder." + ); + layout->addWidget(mrfConf, 17, 0); + + _mrf.location = new QLineEdit; + _mrf.location->setToolTip(mrfConf->toolTip()); + _mrf.location->setDisabled(true); + connect( + _mrf.location, + &QLineEdit::editingFinished, + [this]() { + if (_mrf.location->text().isEmpty()) { + _currentEdit.mrf.location = std::nullopt; + } + else { + _currentEdit.mrf.location = _mrf.location->text().toStdString(); + } + updateSaveButton(); + } + ); + layout->addWidget(_mrf.location, 17, 1); + } + + layout->addWidget(new Line(), 18, 0, 1, 2); + + _dialogButtons = new QDialogButtonBox; + _dialogButtons->setStandardButtons( + QDialogButtonBox::Save | QDialogButtonBox::Cancel + ); + QObject::connect( + _dialogButtons, &QDialogButtonBox::accepted, + this, &SettingsDialog::save + ); + QObject::connect( + _dialogButtons, &QDialogButtonBox::rejected, + this, &SettingsDialog::reject + ); + layout->addWidget(_dialogButtons, 19, 1, 1, 1, Qt::AlignRight); +} + +void SettingsDialog::loadFromSettings(const openspace::Settings& settings) { + using namespace openspace; + + if (settings.configuration.has_value()) { + _configuration->setText(QString::fromStdString(*settings.configuration)); + } + if (settings.rememberLastConfiguration.has_value()) { + _rememberLastConfiguration->setChecked(*settings.rememberLastConfiguration); + } + + if (settings.profile.has_value()) { + _profile->setText(QString::fromStdString(*settings.profile)); + } + if (settings.rememberLastProfile.has_value()) { + _rememberLastProfile->setChecked(*settings.rememberLastProfile); + } + + if (settings.visibility.has_value()) { + using Visibility = openspace::properties::Property::Visibility; + const Visibility vis = *settings.visibility; + switch (vis) { + case Visibility::NoviceUser: + _propertyVisibility->setCurrentText("Novice User"); + break; + case Visibility::User: + _propertyVisibility->setCurrentText("User"); + break; + case Visibility::AdvancedUser: + _propertyVisibility->setCurrentText("Advanced User"); + break; + case Visibility::Developer: + _propertyVisibility->setCurrentText("Developer"); + break; + case Visibility::Always: + case Visibility::Hidden: + break; + } + } + + if (settings.bypassLauncher.has_value()) { + _bypassLauncher->setChecked(*settings.bypassLauncher); + } + + if (settings.layerServer.has_value()) { + Configuration::LayerServer server = *settings.layerServer; + _layerServer->setCurrentText( + QString::fromStdString(openspace::layerServerToString(std::move(server))) + ); + } + + if (settings.mrf.isEnabled.has_value()) { + _mrf.isEnabled->setChecked(*settings.mrf.isEnabled); + } + if (settings.mrf.location.has_value()) { + _mrf.location->setText(QString::fromStdString(*settings.mrf.location)); + } +} + +void SettingsDialog::updateSaveButton() { + _dialogButtons->button(QDialogButtonBox::Save)->setEnabled(true); +} + +void SettingsDialog::save() { + emit saveSettings(_currentEdit); + _dialogButtons->button(QDialogButtonBox::Save)->setEnabled(false); + QDialog::accept(); +} + +void SettingsDialog::reject() { + QDialog::reject(); +} diff --git a/apps/OpenSpace/ext/launcher/src/sgctedit/displaywindowunion.cpp b/apps/OpenSpace/ext/launcher/src/sgctedit/displaywindowunion.cpp index 361004653a..e881d26feb 100644 --- a/apps/OpenSpace/ext/launcher/src/sgctedit/displaywindowunion.cpp +++ b/apps/OpenSpace/ext/launcher/src/sgctedit/displaywindowunion.cpp @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -25,7 +25,7 @@ #include "sgctedit/displaywindowunion.h" #include "sgctedit/windowcontrol.h" -#include +#include #include #include #include @@ -49,12 +49,12 @@ DisplayWindowUnion::DisplayWindowUnion(const std::vector& monitorSizeList } void DisplayWindowUnion::createWidgets(int nMaxWindows, - std::vector monitorResolutions, + const std::vector& monitorResolutions, std::array windowColors, bool resetToDefault) { // Add all window controls (some will be hidden from GUI initially) - for (int i = 0; i < nMaxWindows; ++i) { + for (int i = 0; i < nMaxWindows; i++) { const int monitorNumForThisWindow = (monitorResolutions.size() > 1 && i >= 2) ? 1 : 0; @@ -94,7 +94,7 @@ void DisplayWindowUnion::createWidgets(int nMaxWindows, layoutMonButton->addStretch(1); _addWindowButton = new QPushButton("Add Window"); - _addWindowButton->setToolTip(QString::fromStdString(fmt::format( + _addWindowButton->setToolTip(QString::fromStdString(std::format( "Add a window to the configuration (up to {} windows allowed)", nMaxWindows ))); _addWindowButton->setFocusPolicy(Qt::NoFocus); @@ -114,7 +114,7 @@ void DisplayWindowUnion::createWidgets(int nMaxWindows, QBoxLayout* layoutWindows = new QHBoxLayout; layoutWindows->setContentsMargins(0, 0, 0, 0); layoutWindows->setSpacing(0); - for (int i = 0; i < nMaxWindows; ++i) { + for (int i = 0; i < nMaxWindows; i++) { layoutWindows->addWidget(_windowControl[i]); if (i < (nMaxWindows - 1)) { QFrame* frameForNextWindow = new QFrame; @@ -130,7 +130,7 @@ void DisplayWindowUnion::createWidgets(int nMaxWindows, std::vector DisplayWindowUnion::activeWindowControls() const { std::vector res; res.reserve(_nWindowsDisplayed); - for (unsigned int i = 0; i < _nWindowsDisplayed; ++i) { + for (unsigned int i = 0; i < _nWindowsDisplayed; i++) { res.push_back(_windowControl[i]); } return res; @@ -160,10 +160,10 @@ unsigned int DisplayWindowUnion::numWindowsDisplayed() const { } void DisplayWindowUnion::showWindows() { - for (size_t i = 0; i < _windowControl.size(); ++i) { + for (size_t i = 0; i < _windowControl.size(); i++) { _windowControl[i]->setVisible(i < _nWindowsDisplayed); } - for (size_t i = 0; i < _frameBorderLines.size(); ++i) { + for (size_t i = 0; i < _frameBorderLines.size(); i++) { _frameBorderLines[i]->setVisible(i < (_nWindowsDisplayed - 1)); } _removeWindowButton->setEnabled(_nWindowsDisplayed > 1); diff --git a/apps/OpenSpace/ext/launcher/src/sgctedit/monitorbox.cpp b/apps/OpenSpace/ext/launcher/src/sgctedit/monitorbox.cpp index ebb1b80c0c..2966e83514 100644 --- a/apps/OpenSpace/ext/launcher/src/sgctedit/monitorbox.cpp +++ b/apps/OpenSpace/ext/launcher/src/sgctedit/monitorbox.cpp @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -27,7 +27,7 @@ #include namespace { - constexpr float MarginFractionOfWidgetSize = 0.05f; + constexpr float MarginFractionWidgetSize = 0.05f; constexpr int WindowOpacity = 170; QRectF computeUnion(const std::vector& monitorResolutions) { @@ -48,15 +48,15 @@ MonitorBox::MonitorBox(QRect widgetDims, const std::vector& monitorResolu { setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); - QRectF monitorArrangement = computeUnion(monitorResolutions); + const QRectF monitorArrangement = computeUnion(monitorResolutions); const float aspectRatio = monitorArrangement.width() / monitorArrangement.height(); if (aspectRatio > 1.0) { - float borderMargin = 2.f * MarginFractionOfWidgetSize * widgetDims.width(); + const float borderMargin = 2.f * MarginFractionWidgetSize * widgetDims.width(); widgetDims.setHeight(widgetDims.width() / aspectRatio + borderMargin); } else { - float borderMargin = 2.f * MarginFractionOfWidgetSize * widgetDims.height(); + const float borderMargin = 2.f * MarginFractionWidgetSize * widgetDims.height(); widgetDims.setWidth(widgetDims.height() * aspectRatio + borderMargin); } setFixedSize(widgetDims.width(), widgetDims.height()); @@ -68,7 +68,7 @@ MonitorBox::MonitorBox(QRect widgetDims, const std::vector& monitorResolu computeScaledResolutionLandscape(monitorArrangement, monitorResolutions) : computeScaledResolutionPortrait(monitorArrangement, monitorResolutions); - for (size_t i = 0; i < monitorResolutions.size(); ++i) { + for (size_t i = 0; i < monitorResolutions.size(); i++) { _monitorDimensionsScaled.emplace_back( offsets[i].width(), offsets[i].height(), @@ -89,7 +89,7 @@ void MonitorBox::paintEvent(QPaintEvent*) { // // Draw window out-of-bounds region(s) first - for (int i = 0; i < _nWindows; ++i) { + for (int i = 0; i < _nWindows; i++) { painter.setBrush(Qt::BDiagPattern); painter.setPen(QPen(_colorsForWindows[i], 0)); painter.drawRect(_windowRendering[i]); @@ -99,7 +99,7 @@ void MonitorBox::paintEvent(QPaintEvent*) { painter.setPen(QPen(Qt::black, 2)); painter.setBrush(Qt::NoBrush); - for (size_t i = 0; i < _monitorDimensionsScaled.size(); ++i) { + for (size_t i = 0; i < _monitorDimensionsScaled.size(); i++) { const QColor Grey = QColor(0xDD, 0xDD, 0xDD); painter.drawRect(_monitorDimensionsScaled[i]); @@ -107,7 +107,7 @@ void MonitorBox::paintEvent(QPaintEvent*) { if (_monitorDimensionsScaled.size() > 1 && i == 0) { // We only want to render the "Primary" if there are multiple windows - QPointF textPos = QPointF( + const QPointF textPos = QPointF( _monitorDimensionsScaled[i].left() + 4.0, _monitorDimensionsScaled[i].top() + 24.0 ); @@ -120,7 +120,7 @@ void MonitorBox::paintEvent(QPaintEvent*) { // Draw window number(s) first for darker contrast, then window(s) over both // out-of-bounds and monitors - for (int i = 0; i < _nWindows; ++i) { + for (int i = 0; i < _nWindows; i++) { QPointF p = QPointF( _windowRendering[i].left() + 5.0, _windowRendering[i].bottom() - 5.0 @@ -132,7 +132,7 @@ void MonitorBox::paintEvent(QPaintEvent*) { // // Paint window - for (int i = 0; i < _nWindows; ++i) { + for (int i = 0; i < _nWindows; i++) { painter.setPen(QPen(_colorsForWindows[i], 1)); painter.drawRect(_windowRendering[i]); @@ -159,16 +159,16 @@ std::vector MonitorBox::computeScaledResolutionLandscape(QRectF arrangem { std::vector offsets; - float marginWidget = size().width() * MarginFractionOfWidgetSize; - float virtualWidth = size().width() * (1.f - MarginFractionOfWidgetSize * 2.f); + const float margin = size().width() * MarginFractionWidgetSize; + const float virtualWidth = size().width() * (1.f - MarginFractionWidgetSize * 2.f); _monitorScaleFactor = virtualWidth / arrangement.width(); const float aspectRatio = arrangement.width() / arrangement.height(); const float newHeight = virtualWidth / aspectRatio; for (const QRect& res : resolutions) { - float x = marginWidget + (res.x() - arrangement.x()) * _monitorScaleFactor; - float y = marginWidget + (size().height() - newHeight - marginWidget) / 4.f + + const float x = margin + (res.x() - arrangement.x()) * _monitorScaleFactor; + const float y = margin + (size().height() - newHeight - margin) / 4.f + (res.y() - arrangement.y()) * _monitorScaleFactor; offsets.emplace_back(x, y); } @@ -181,17 +181,17 @@ std::vector MonitorBox::computeScaledResolutionPortrait(QRectF arrangeme { std::vector offsets; - float marginWidget = size().height() * MarginFractionOfWidgetSize; - float virtualHeight = size().height() * (1.f - MarginFractionOfWidgetSize * 2.f); + const float marginWidget = size().height() * MarginFractionWidgetSize; + const float virtualHeight = size().height() * (1.f - MarginFractionWidgetSize * 2.f); _monitorScaleFactor = virtualHeight / arrangement.height(); const float aspectRatio = arrangement.width() / arrangement.height(); const float newWidth = virtualHeight * aspectRatio; for (const QRect& res : resolutions) { - float x = marginWidget + (size().width() - newWidth - marginWidget) / 4.f + + const float x = marginWidget + (size().width() - newWidth - marginWidget) / 4.f + (res.x() - arrangement.x()) * _monitorScaleFactor; - float y = marginWidget + (res.y() - arrangement.y()) * _monitorScaleFactor; + const float y = marginWidget + (res.y() - arrangement.y()) * _monitorScaleFactor; offsets.emplace_back(x, y); } diff --git a/apps/OpenSpace/ext/launcher/src/sgctedit/orientationdialog.cpp b/apps/OpenSpace/ext/launcher/src/sgctedit/orientationdialog.cpp index 008281d863..a434075c78 100644 --- a/apps/OpenSpace/ext/launcher/src/sgctedit/orientationdialog.cpp +++ b/apps/OpenSpace/ext/launcher/src/sgctedit/orientationdialog.cpp @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -39,7 +39,7 @@ OrientationDialog::OrientationDialog(sgct::quat& orientation, QWidget* parent) QGridLayout* layoutWindow = new QGridLayout(this); { - QString pitchTip = "Pitch or elevation: negative numbers tilt the camera " + const QString pitchTip = "Pitch or elevation: negative numbers tilt the camera " "downwards; positive numbers tilt upwards.\nThe allowed range is [-90, 90]. " "Internally, this corresponds to the x value in the quaternion"; @@ -56,9 +56,9 @@ OrientationDialog::OrientationDialog(sgct::quat& orientation, QWidget* parent) layoutWindow->addWidget(_linePitch, 0, 1); } { - QString rollTip = "Roll or bank: negative numbers rotate the camera counter-" - "clockwise; positive numbers clockwise.\nThe allowed range is [-180, 180]. " - "Internally, this corresponds to the z value in the quaternion"; + const QString rollTip = "Roll or bank: negative numbers rotate the camera " + "counter-clockwise; positive numbers clockwise.\nThe allowed range is " + "[-180, 180]. Internally, this corresponds to the z value in the quaternion"; QLabel* labelRoll = new QLabel("Roll"); labelRoll->setToolTip(rollTip); @@ -73,9 +73,10 @@ OrientationDialog::OrientationDialog(sgct::quat& orientation, QWidget* parent) layoutWindow->addWidget(_lineRoll, 1, 1); } { - QString yawTip = "Yaw, heading, or azimuth: negative numbers pan the camera " - "to the left; positive numbers pan to the\nright. The allowed range is " - "[-360, 360]. Internally, this corresponds to the y value in the quaternion"; + const QString yawTip = "Yaw, heading, or azimuth: negative numbers pan the " + "camera to the left; positive numbers pan to the\nright. The allowed range " + "is [-360, 360]. Internally, this corresponds to the y value in the " + "quaternion"; QLabel* labelYaw = new QLabel; labelYaw ->setText("Yaw"); diff --git a/apps/OpenSpace/ext/launcher/src/sgctedit/settingswidget.cpp b/apps/OpenSpace/ext/launcher/src/sgctedit/settingswidget.cpp index 0130c6a112..f0f8d0a628 100644 --- a/apps/OpenSpace/ext/launcher/src/sgctedit/settingswidget.cpp +++ b/apps/OpenSpace/ext/launcher/src/sgctedit/settingswidget.cpp @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -32,13 +32,15 @@ SettingsWidget::SettingsWidget(sgct::quat orientation, QWidget* parent) : QWidget(parent) , _orientationValue(std::move(orientation)) + , _showUiOnFirstWindow(new QCheckBox( + "Show user interface only on first window using graphics:" + )) + , _firstWindowGraphicsSelection(new QComboBox) + , _firstWindowSelectionLayout(new QHBoxLayout) { QBoxLayout* layout = new QVBoxLayout(this); layout->setContentsMargins(0, 0, 0, 0); - _showUiOnFirstWindow = new QCheckBox( - "Show user interface only on first window using graphics:" - ); _showUiOnFirstWindow->setChecked(false); _showUiOnFirstWindow->setEnabled(false); _showUiOnFirstWindow->setToolTip( @@ -48,9 +50,6 @@ SettingsWidget::SettingsWidget(sgct::quat orientation, QWidget* parent) "not show the user interface" ); - _firstWindowSelectionLayout = new QHBoxLayout; - - _firstWindowGraphicsSelection = new QComboBox(); _firstWindowGraphicsSelection->setToolTip( "Select the contents of the first window to match one of the other windows" ); @@ -127,7 +126,7 @@ void SettingsWidget::nWindowsDisplayedChanged(int newCount) { graphicsSelect = std::max(0, graphicsSelect); QList graphicsOptions = {"None (GUI only)"}; - for (int i = CountOneWindow; i <= newCount; ++i) { + for (int i = CountOneWindow; i <= newCount; i++) { graphicsOptions.append("Window " + QString::number(i)); } _firstWindowGraphicsSelection->clear(); diff --git a/apps/OpenSpace/ext/launcher/src/sgctedit/sgctedit.cpp b/apps/OpenSpace/ext/launcher/src/sgctedit/sgctedit.cpp index 2f15244b02..f7c4b7a908 100644 --- a/apps/OpenSpace/ext/launcher/src/sgctedit/sgctedit.cpp +++ b/apps/OpenSpace/ext/launcher/src/sgctedit/sgctedit.cpp @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -70,7 +70,7 @@ namespace { template overloaded(Ts...) -> overloaded; } // namespace -SgctEdit::SgctEdit(QWidget* parent, std::string userConfigPath) +SgctEdit::SgctEdit(QWidget* parent, std::filesystem::path userConfigPath) : QDialog(parent) , _userConfigPath(std::move(userConfigPath)) { @@ -78,20 +78,20 @@ SgctEdit::SgctEdit(QWidget* parent, std::string userConfigPath) createWidgets(createMonitorInfoSet(), 1, true); } -SgctEdit::SgctEdit(sgct::config::Cluster& cluster, const std::string& configName, - std::string& configBasePath, QWidget* parent) +SgctEdit::SgctEdit(sgct::config::Cluster& cluster, std::string configName, + std::filesystem::path& configBasePath, QWidget* parent) : QDialog(parent) , _cluster(cluster) , _userConfigPath(configBasePath) - , _configurationFilename(configName) + , _configurationFilename(std::move(configName)) , _didImportValues(true) { setWindowTitle("Window Configuration Editor"); - size_t nWindows = _cluster.nodes.front().windows.size(); + const size_t nWindows = _cluster.nodes.front().windows.size(); std::vector monitorSizes = createMonitorInfoSet(); createWidgets(monitorSizes, static_cast(nWindows), false); - size_t existingWindowsControlSize = _displayWidget->windowControls().size(); - for (size_t i = 0; i < nWindows; ++i) { + const size_t existingWindowsControlSize = _displayWidget->windowControls().size(); + for (size_t i = 0; i < nWindows; i++) { sgct::config::Window& w = _cluster.nodes.front().windows[i]; WindowControl* wCtrl = _displayWidget->windowControls()[i]; if (i < existingWindowsControlSize && wCtrl) { @@ -116,17 +116,13 @@ SgctEdit::SgctEdit(sgct::config::Cluster& cluster, const std::string& configName posY -= monitorSizes[monitorNum].y(); } } - QRectF newDims( - posX, - posY, - w.size.x, - w.size.y - ); + const QRectF newDims = QRectF(posX, posY, w.size.x, w.size.y); wCtrl->setDimensions(newDims); if (w.name.has_value()) { wCtrl->setWindowName(w.name.value()); } wCtrl->setDecorationState(w.isDecorated.value()); + wCtrl->setSpoutOutputState(w.spout.has_value() && w.spout->enabled); } setupProjectionTypeInGui(w.viewports.back(), wCtrl); } @@ -142,9 +138,9 @@ void SgctEdit::setupStateOfUiOnFirstWindow(size_t nWindows) { bool firstWindowGuiIsEnabled = (nWindows > 1); int graphicsSelectionForFirstWindow = 0; int nGuiRenderTagsFound = 0; - _settingsWidget->nWindowsDisplayedChanged(nWindows); + _settingsWidget->nWindowsDisplayedChanged(static_cast(nWindows)); - for (size_t i = 0; i < nWindows; ++i) { + for (size_t i = 0; i < nWindows; i++) { sgct::config::Window& w = _cluster.nodes.front().windows[i]; //First window needs to have "GUI" tag if this mode is set if (i == 0) { @@ -156,9 +152,8 @@ void SgctEdit::setupStateOfUiOnFirstWindow(size_t nWindows) { nGuiRenderTagsFound++; } for (int winNum = 0; winNum <= 4; ++winNum) { - std::string tagToLookFor = "GUI_Render_Win" + std::to_string(winNum); - if (std::find(w.tags.begin(), w.tags.end(), tagToLookFor) != w.tags.end()) - { + const std::string searchTag = "GUI_Render_Win" + std::to_string(winNum); + if (std::find(w.tags.begin(), w.tags.end(), searchTag) != w.tags.end()) { graphicsSelectionForFirstWindow = winNum; nGuiRenderTagsFound++; } @@ -185,7 +180,7 @@ void SgctEdit::setupStateOfUiOnFirstWindow(size_t nWindows) { // Call these again in order to ensure that GUI is configured correctly based on // the values read from the config file _settingsWidget->setEnableShowUiOnFirstWindowCheckbox(true); - _settingsWidget->nWindowsDisplayedChanged(nWindows); + _settingsWidget->nWindowsDisplayedChanged(static_cast(nWindows)); } _settingsWidget->setGraphicsSelectionForShowUiOnFirstWindow( graphicsSelectionForFirstWindow @@ -195,8 +190,8 @@ void SgctEdit::setupStateOfUiOnFirstWindow(size_t nWindows) { void SgctEdit::setupProjectionTypeInGui(sgct::config::Viewport& vPort, WindowControl* wCtrl) { - std::visit(overloaded{ - [&](sgct::config::CylindricalProjection p) { + std::visit(overloaded { + [&](const sgct::config::CylindricalProjection& p) { if (p.quality && p.heightOffset) { wCtrl->setProjectionCylindrical( *p.quality, @@ -204,70 +199,44 @@ void SgctEdit::setupProjectionTypeInGui(sgct::config::Viewport& vPort, ); } }, - [&](sgct::config::EquirectangularProjection p) { + [&](const sgct::config::EquirectangularProjection& p) { if (p.quality) { - wCtrl->setProjectionEquirectangular( - *p.quality, - false - ); + wCtrl->setProjectionEquirectangular(*p.quality); } }, - [&](sgct::config::FisheyeProjection p) { + [&](const sgct::config::FisheyeProjection& p) { if (p.quality) { - wCtrl->setProjectionFisheye( - *p.quality, - false - ); + wCtrl->setProjectionFisheye(*p.quality); } }, - [&](sgct::config::PlanarProjection p) { + [&](const sgct::config::PlanarProjection& p) { wCtrl->setProjectionPlanar( (std::abs(p.fov.left) + std::abs(p.fov.right)), (std::abs(p.fov.up) + std::abs(p.fov.down)) ); }, - [&](sgct::config::SphericalMirrorProjection p) { + [&](const sgct::config::SphericalMirrorProjection& p) { if (p.quality) { wCtrl->setProjectionSphericalMirror( *p.quality ); } }, - [&](sgct::config::SpoutOutputProjection p) { - if (p.quality) { - if (p.mapping == - sgct::config::SpoutOutputProjection::Mapping::Equirectangular) - { - wCtrl->setProjectionEquirectangular( - *p.quality, - true - ); - } - else if (p.mapping == - sgct::config::SpoutOutputProjection::Mapping::Fisheye) - { - wCtrl->setProjectionFisheye( - *p.quality, - true - ); - } - } - }, - [&](sgct::config::NoProjection) {}, - [&](sgct::config::ProjectionPlane) {}, - [&](sgct::config::SpoutFlatProjection) {} + [&](const sgct::config::NoProjection&) {}, + [&](const sgct::config::ProjectionPlane&) {}, + [&](const sgct::config::CubemapProjection&) {}, }, vPort.projection); } std::vector SgctEdit::createMonitorInfoSet() { - QList screens = qApp->screens(); - int nScreensManaged = std::min(static_cast(screens.length()), 4); + const QList screens = qApp->screens(); + const int nScreensManaged = std::min(static_cast(screens.length()), 4); std::vector monitorSizes; for (int s = 0; s < nScreensManaged; ++s) { - QSize size = screens[s]->size(); - QRect geometry = screens[s]->availableGeometry(); - int actualWidth = std::max(size.width(), geometry.width()); - int actualHeight = std::max(size.height(), geometry.height()); + const QSize size = screens[s]->size(); + const QRect geometry = screens[s]->availableGeometry(); + const int actualWidth = std::max(size.width(), geometry.width()); + const int actualHeight = std::max(size.height(), geometry.height()); monitorSizes.emplace_back( geometry.x(), geometry.y(), @@ -318,7 +287,7 @@ void SgctEdit::createWidgets(const std::vector& monitorSizes, monitorBox, &MonitorBox::nWindowsDisplayedChanged ); - for (unsigned int i = 0; i < nWindows; ++i) { + for (unsigned int i = 0; i < nWindows; i++) { _displayWidget->addWindow(); } @@ -394,7 +363,7 @@ std::filesystem::path SgctEdit::saveFilename() const { void SgctEdit::save() { generateConfiguration(); if (hasWindowIssues(_cluster)) { - int ret = QMessageBox::warning( + const int ret = QMessageBox::warning( this, "Window Sizes Incompatible", "Window sizes for multiple windows have to be strictly ordered, meaning that " @@ -414,10 +383,10 @@ void SgctEdit::save() { accept(); } else { - QString fileName = QFileDialog::getSaveFileName( + const QString fileName = QFileDialog::getSaveFileName( this, "Save Window Configuration File", - QString::fromStdString(_userConfigPath), + QString::fromStdString(_userConfigPath.string()), "Window Configuration (*.json)", nullptr #ifdef __linux__ @@ -435,7 +404,7 @@ void SgctEdit::save() { void SgctEdit::apply() { generateConfiguration(); if (hasWindowIssues(_cluster)) { - int ret = QMessageBox::warning( + const int ret = QMessageBox::warning( this, "Window Sizes Incompatible", "Window sizes for multiple windows have to be strictly ordered, meaning that " @@ -450,7 +419,7 @@ void SgctEdit::apply() { } } - std::string userCfgTempDir = _userConfigPath; + std::string userCfgTempDir = _userConfigPath.string(); if (userCfgTempDir.back() != '/') { userCfgTempDir += '/'; } @@ -466,7 +435,7 @@ void SgctEdit::generateConfiguration() { _cluster.scene = sgct::config::Scene(); _cluster.scene->orientation = _settingsWidget->orientation(); if (_cluster.nodes.empty()) { - _cluster.nodes.push_back(sgct::config::Node()); + _cluster.nodes.emplace_back(); } sgct::config::Node& node = _cluster.nodes.back(); @@ -498,7 +467,7 @@ void SgctEdit::generateConfigUsers() { if (!_didImportValues) { sgct::config::User user; user.eyeSeparation = 0.065f; - user.position = { 0.f, 0.f, 4.f }; + user.position = { 0.f, 0.f, 0.f }; _cluster.users = { user }; } } @@ -515,12 +484,10 @@ void SgctEdit::generateConfigResizeWindowsAccordingToSelected(sgct::config::Node std::vector windowControls = _displayWidget->activeWindowControls(); for (size_t wIdx = 0; wIdx < windowControls.size(); ++wIdx) { if (node.windows.size() <= wIdx) { - node.windows.push_back(sgct::config::Window()); + node.windows.emplace_back(); } if (windowControls[wIdx]) { - windowControls[wIdx]->generateWindowInformation( - node.windows[wIdx] - ); + windowControls[wIdx]->generateWindowInformation(node.windows[wIdx]); } } while (node.windows.size() > windowControls.size()) { @@ -529,7 +496,7 @@ void SgctEdit::generateConfigResizeWindowsAccordingToSelected(sgct::config::Node } void SgctEdit::generateConfigIndividualWindowSettings(sgct::config::Node& node) { - for (size_t i = 0; i < node.windows.size(); ++i) { + for (size_t i = 0; i < node.windows.size(); i++) { // First apply default settings to each window... node.windows[i].id = static_cast(i); node.windows[i].draw2D = true; @@ -540,20 +507,21 @@ void SgctEdit::generateConfigIndividualWindowSettings(sgct::config::Node& node) // depending on if this is the first window or not if (_settingsWidget->showUiOnFirstWindow()) { if (i == 0) { - node.windows[i].tags.push_back("GUI"); - int selectedGraphics = + node.windows[i].tags.emplace_back("GUI"); + const int selectedGraphics = _settingsWidget->graphicsSelectionForShowUiOnFirstWindow(); if (selectedGraphics == 0) { node.windows[i].viewports.back().isTracked = false; - node.windows[i].tags.push_back("GUI_No_Render"); + node.windows[i].tags.emplace_back("GUI_No_Render"); } else if (selectedGraphics > 0 && selectedGraphics <= static_cast(node.windows.size())) { - node.windows[i].tags.push_back("GUI_Render_Win" + - std::to_string(selectedGraphics)); - //Set first window viewport to mirror the selected window's viewport + node.windows[i].tags.emplace_back( + "GUI_Render_Win" + std::to_string(selectedGraphics) + ); + // Set first window viewport to mirror the selected window's viewport node.windows[i].viewports = node.windows[(selectedGraphics - 1)].viewports; } @@ -577,7 +545,7 @@ void SgctEdit::deleteFromTags(sgct::config::Window& window) { "GUI_Render_Win3", "GUI_Render_Win4" }; - for (std::string_view tag : Tags) { + for (const std::string_view tag : Tags) { window.tags.erase( std::remove(window.tags.begin(), window.tags.end(), tag), window.tags.end() @@ -590,12 +558,12 @@ sgct::config::Cluster SgctEdit::cluster() const { } void SgctEdit::firstWindowGraphicsSelectionChanged(const QString&) { - if (!_settingsWidget) + if (!_settingsWidget) { return; - - int newSetting = _settingsWidget->graphicsSelectionForShowUiOnFirstWindow(); + } if (_settingsWidget->showUiOnFirstWindow()) { + const int newSetting = _settingsWidget->graphicsSelectionForShowUiOnFirstWindow(); _displayWidget->activeWindowControls()[0]->setVisibilityOfProjectionGui( newSetting == 1 ); diff --git a/apps/OpenSpace/ext/launcher/src/sgctedit/windowcontrol.cpp b/apps/OpenSpace/ext/launcher/src/sgctedit/windowcontrol.cpp index b472dc71b7..b250435604 100644 --- a/apps/OpenSpace/ext/launcher/src/sgctedit/windowcontrol.cpp +++ b/apps/OpenSpace/ext/launcher/src/sgctedit/windowcontrol.cpp @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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,8 +24,8 @@ #include "sgctedit/windowcontrol.h" +#include #include -#include #include "sgctedit/displaywindowunion.h" #include "sgctedit/monitorbox.h" #include @@ -50,7 +50,7 @@ namespace { "8K (8192)", "16K (16384)", "32K (32768)", "64K (65536)" }; - constexpr int QualityValues[nQualityTypes] = { + constexpr std::array QualityValues = { 256, 512, 1024, 1536, 2048, 4096, 8192, 16384, 32768, 65536 }; @@ -76,7 +76,7 @@ namespace { QList monitorNames(const std::vector& resolutions) { QList monitorNames; for (size_t i = 0; i < resolutions.size(); i++) { - std::string fullName = fmt::format( + const std::string fullName = std::format( "{} ({}x{})", MonitorNames[i], resolutions[i].width(), resolutions[i].height() ); @@ -116,19 +116,19 @@ void WindowControl::createWidgets(const QColor& windowColor) { // *----------*----------*-------*----------*-------*--------*-------*-------* QGridLayout* layout = new QGridLayout(this); - QMargins margins = layout->contentsMargins(); + const QMargins margins = layout->contentsMargins(); layout->setContentsMargins(margins.left(), 0, margins.right(), 0); layout->setColumnStretch(6, 1); layout->setRowStretch(8, 1); _windowNumber = new QLabel("Window " + QString::number(_windowIndex + 1)); - _windowNumber->setStyleSheet(QString::fromStdString(fmt::format( + _windowNumber->setStyleSheet(QString::fromStdString(std::format( "QLabel {{ color : #{:02x}{:02x}{:02x}; }}", windowColor.red(), windowColor.green(), windowColor.blue() ))); layout->addWidget(_windowNumber, 0, 0, 1, 8, Qt::AlignCenter); { - QString tip = "The name for the window (displayed in title bar)"; + const QString tip = "The name for the window (displayed in title bar)"; QLabel* labelName = new QLabel("Name"); labelName->setToolTip(tip); @@ -138,7 +138,7 @@ void WindowControl::createWidgets(const QColor& windowColor) { _windowName->setToolTip(tip); layout->addWidget(_windowName, 1, 1, 1, 7); } - QString tip = "The monitor where this window is located"; + const QString tip = "The monitor where this window is located"; _monitor = new QComboBox; _monitor->addItems(monitorNames(_monitorResolutions)); @@ -289,6 +289,16 @@ void WindowControl::createWidgets(const QColor& windowColor) { ); layout->addWidget(_windowDecoration, 5, 0, 1, 8); } + { + _spoutOutput = new QCheckBox("Spout Output"); + _spoutOutput->setToolTip( + "Share this window using the Spout library.\nThis library only supports the " + "Windows operating system. Spout makes it possible to make the rendered\n" + "images available to other real-time applications on the same machine for " + "further processing" + ); + layout->addWidget(_spoutOutput); + } { QFrame* projectionGroup = new QFrame; projectionGroup->setVisible(true); @@ -370,7 +380,8 @@ QWidget* WindowControl::createPlanarWidget() { layout->addWidget(_planar.labelInfo, 0, 0, 1, 3); _planar.labelFovH = new QLabel("Horizontal FOV"); - QString hfovTip = "The total horizontal field of view of the viewport (degrees)"; + const QString hfovTip = + "The total horizontal field of view of the viewport (degrees)"; _planar.labelFovH->setToolTip(hfovTip); layout->addWidget(_planar.labelFovH, 1, 0); @@ -387,7 +398,7 @@ QWidget* WindowControl::createPlanarWidget() { layout->addWidget(_planar.fovH, 1, 1); _planar.labelFovV = new QLabel("Vertical FOV"); - QString vfovTip = "The total vertical field of view of the viewport (degrees). " + const QString vfovTip = "The total vertical field of view of the viewport (degrees). " "Internally,\nthe values for 'up' & 'down' will each be half this value"; _planar.labelFovV->setToolTip(vfovTip); layout->addWidget(_planar.labelFovV, 2, 0); @@ -445,9 +456,9 @@ QWidget* WindowControl::createFisheyeWidget() { layout->addWidget(_fisheye.labelInfo, 0, 0, 1, 2); _fisheye.labelQuality = new QLabel("Quality"); - QString qualityTip = "Determines the pixel resolution of the projection rendering. " - "The higher resolution,\nthe better the rendering quality, but at the expense of " - "increased rendering times"; + const QString qualityTip = "Determines the pixel resolution of the projection " + "rendering. The higher resolution,\nthe better the rendering quality, but at the " + "expense of increased rendering times"; _fisheye.labelQuality->setToolTip(qualityTip); layout->addWidget(_fisheye.labelQuality, 1, 0); @@ -457,15 +468,6 @@ QWidget* WindowControl::createFisheyeWidget() { _fisheye.quality->setCurrentIndex(2); layout->addWidget(_fisheye.quality, 1, 1); - _fisheye.spoutOutput = new QCheckBox("Spout Output"); - _fisheye.spoutOutput->setToolTip( - "This projection method provides the ability to share the reprojected image " - "using the Spout library.\nThis library only supports the Windows operating " - "system. Spout makes it possible to make the rendered\nimages available to other " - "real-time applications on the same machine for further processing" - ); - layout->addWidget(_fisheye.spoutOutput, 2, 0, 1, 2); - return widget; } @@ -490,9 +492,9 @@ QWidget* WindowControl::createSphericalMirrorWidget() { layout->addWidget(_sphericalMirror.labelInfo, 0, 0, 1, 2); _sphericalMirror.labelQuality = new QLabel("Quality"); - QString qualityTip = "Determines the pixel resolution of the projection rendering. " - "The higher resolution,\nthe better the rendering quality, but at the expense of " - "increased rendering times"; + const QString qualityTip = "Determines the pixel resolution of the projection " + "rendering. The higher resolution,\nthe better the rendering quality, but at the " + "expense of increased rendering times"; _sphericalMirror.labelQuality->setToolTip(qualityTip); layout->addWidget(_sphericalMirror.labelQuality, 1, 0); @@ -527,9 +529,9 @@ QWidget* WindowControl::createCylindricalWidget() { layout->addWidget(_cylindrical.labelInfo, 0, 0, 1, 2); _cylindrical.labelQuality = new QLabel("Quality"); - QString qualityTip = "Determines the pixel resolution of the projection rendering. " - "The higher resolution,\nthe better the rendering quality, but at the expense of " - "increased rendering times"; + const QString qualityTip = "Determines the pixel resolution of the projection " + "rendering. The higher resolution,\nthe better the rendering quality, but at the " + "expense of increased rendering times"; _cylindrical.labelQuality->setToolTip(qualityTip); layout->addWidget(_cylindrical.labelQuality, 1, 0); @@ -540,10 +542,10 @@ QWidget* WindowControl::createCylindricalWidget() { layout->addWidget(_cylindrical.quality, 1, 1); _cylindrical.labelHeightOffset = new QLabel("Height Offset"); - QString heightTip = "Offsets the height from which the cylindrical projection is " - "generated.\nThis is, in general, only necessary if the user position is offset " - "and\ncountering that offset is desired in order to continue producing\na " - "'standard' cylindrical projection"; + const QString heightTip = "Offsets the height from which the cylindrical projection " + "is generated.\nThis is, in general, only necessary if the user position is " + "offset and\ncountering that offset is desired in order to continue producing\n" + "a 'standard' cylindrical projection"; _cylindrical.labelHeightOffset->setToolTip(heightTip); layout->addWidget(_cylindrical.labelHeightOffset, 2, 0); @@ -580,9 +582,9 @@ QWidget* WindowControl::createEquirectangularWidget() { layout->addWidget(_equirectangular.labelInfo, 0, 0, 1, 2); _equirectangular.labelQuality = new QLabel("Quality"); - QString qualityTip = "Determines the pixel resolution of the projection rendering. " - "The higher resolution,\nthe better the rendering quality, but at the expense of " - "increased rendering times"; + const QString qualityTip = "Determines the pixel resolution of the projection " + "rendering. The higher resolution,\nthe better the rendering quality, but at the " + "expense of increased rendering times"; _equirectangular.labelQuality->setToolTip(qualityTip); layout->addWidget(_equirectangular.labelQuality, 1, 0); @@ -592,15 +594,6 @@ QWidget* WindowControl::createEquirectangularWidget() { _equirectangular.quality->setCurrentIndex(2); layout->addWidget(_equirectangular.quality, 1, 1); - _equirectangular.spoutOutput = new QCheckBox("Spout Output"); - _equirectangular.spoutOutput->setToolTip( - "This projection method provides the ability to share the reprojected image " - "using the Spout library.\nThis library only supports the Windows operating " - "system. Spout makes it possible to make the rendered\nimages available to other " - "real-time applications on the same machine for further processing" - ); - layout->addWidget(_equirectangular.spoutOutput, 2, 0, 1, 2); - return widget; } @@ -613,9 +606,9 @@ void WindowControl::resetToDefaults() { _windowDimensions = DefaultWindowSizes[_windowIndex]; _offsetX->setValue(_windowDimensions.x()); _offsetY->setValue(_windowDimensions.y()); - float newHeight = + const float newHeight = _monitorResolutions[PrimaryMonitorIdx].height() * IdealScaleVerticalLines; - float newWidth = newHeight * IdealAspectRatio; + const float newWidth = newHeight * IdealAspectRatio; _windowDimensions.setHeight(newHeight); _windowDimensions.setWidth(newWidth); _sizeX->setValue(static_cast(newWidth)); @@ -628,8 +621,7 @@ void WindowControl::resetToDefaults() { _monitor->setCurrentIndex(_monitorIndexDefault); } _windowDecoration->setChecked(true); - _fisheye.spoutOutput->setChecked(false); - _equirectangular.spoutOutput->setChecked(false); + _spoutOutput->setChecked(false); _projectionType->setCurrentIndex(static_cast(ProjectionIndices::Planar)); _planar.fovV->setValue(DefaultFovLongEdge); _planar.fovV->setValue(DefaultFovShortEdge); @@ -665,28 +657,18 @@ void WindowControl::setDecorationState(bool hasWindowDecoration) { _windowDecoration->setChecked(hasWindowDecoration); } +void WindowControl::setSpoutOutputState(bool shouldSpoutOutput) { + _spoutOutput->setChecked(shouldSpoutOutput); +} + sgct::config::Projections WindowControl::generateProjectionInformation() const { - ProjectionIndices type = + const ProjectionIndices type = static_cast(_projectionType->currentIndex()); - const bool isSpoutFisheye = - type == ProjectionIndices::Fisheye && _fisheye.spoutOutput->isChecked(); - const bool isSpoutEquirectangular = - type == ProjectionIndices::Equirectangular && - _equirectangular.spoutOutput->isChecked(); - - using namespace sgct::config; switch (type) { case ProjectionIndices::Fisheye: - if (isSpoutFisheye) { - SpoutOutputProjection projection; - projection.mapping = SpoutOutputProjection::Mapping::Fisheye; - projection.quality = QualityValues[_fisheye.quality->currentIndex()]; - projection.mappingSpoutName = "OpenSpace"; - return projection; - } - else { - FisheyeProjection projection; + { + sgct::config::FisheyeProjection projection; projection.quality = QualityValues[_fisheye.quality->currentIndex()]; projection.fov = 180.f; projection.tilt = 0.f; @@ -694,43 +676,35 @@ sgct::config::Projections WindowControl::generateProjectionInformation() const { } case ProjectionIndices::SphericalMirror: { - SphericalMirrorProjection projection; + sgct::config::SphericalMirrorProjection projection; projection.quality = QualityValues[_sphericalMirror.quality->currentIndex()]; return projection; } case ProjectionIndices::Cylindrical: { - CylindricalProjection projection; + sgct::config::CylindricalProjection projection; projection.quality = QualityValues[_cylindrical.quality->currentIndex()]; projection.heightOffset = _cylindrical.heightOffset->text().toFloat(); return projection; } case ProjectionIndices::Equirectangular: - if (isSpoutEquirectangular) { - SpoutOutputProjection projection; - projection.mapping = SpoutOutputProjection::Mapping::Equirectangular; - projection.quality = - QualityValues[_equirectangular.quality->currentIndex()]; - projection.mappingSpoutName = "OpenSpace"; - return projection; - } - else { - EquirectangularProjection projection; + { + sgct::config::EquirectangularProjection projection; projection.quality = QualityValues[_equirectangular.quality->currentIndex()]; return projection; } case ProjectionIndices::Planar: { - double fovH = _planar.fovH->text().toFloat(); + double fovH = _planar.fovH->value(); fovH = std::clamp(fovH, FovEpsilon, 180.0 - FovEpsilon); - double fovV = _planar.fovV->text().toFloat(); + double fovV = _planar.fovV->value(); fovV = std::clamp(fovV, FovEpsilon, 180.0 - FovEpsilon); // The negative values for left & down are due to SGCT's convention - PlanarProjection projection; + sgct::config::PlanarProjection projection; projection.fov.right = fovH / 2.0; projection.fov.left = -projection.fov.right; projection.fov.up = fovV / 2.0; @@ -745,7 +719,7 @@ sgct::config::Projections WindowControl::generateProjectionInformation() const { void WindowControl::generateWindowInformation(sgct::config::Window& window) const { window.size = { _sizeX->text().toInt(), _sizeY->text().toInt() }; window.monitor = _monitor->currentIndex(); - QRect resolution = _monitorResolutions[_monitor->currentIndex()]; + const QRect resolution = _monitorResolutions[_monitor->currentIndex()]; window.pos = sgct::ivec2( resolution.x() + _offsetX->text().toInt(), resolution.y() + _offsetY->text().toInt() @@ -760,6 +734,10 @@ void WindowControl::generateWindowInformation(sgct::config::Window& window) cons window.viewports.push_back(vp); window.isDecorated = _windowDecoration->isChecked(); + if (_spoutOutput->isChecked()) { + window.spout = sgct::config::Window::Spout(); + window.spout->enabled = true; + } if (!_windowName->text().isEmpty()) { window.name = _windowName->text().toStdString(); } @@ -771,9 +749,8 @@ void WindowControl::setProjectionPlanar(float hfov, float vfov) { _projectionType->setCurrentIndex(static_cast(ProjectionIndices::Planar)); } -void WindowControl::setProjectionFisheye(int quality, bool spoutOutput) { +void WindowControl::setProjectionFisheye(int quality) { setQualityComboBoxFromLinesResolution(quality, _fisheye.quality); - _fisheye.spoutOutput->setChecked(spoutOutput); _projectionType->setCurrentIndex(static_cast(ProjectionIndices::Fisheye)); } @@ -790,9 +767,8 @@ void WindowControl::setProjectionCylindrical(int quality, float heightOffset) { _projectionType->setCurrentIndex(static_cast(ProjectionIndices::Cylindrical)); } -void WindowControl::setProjectionEquirectangular(int quality, bool spoutOutput) { +void WindowControl::setProjectionEquirectangular(int quality) { setQualityComboBoxFromLinesResolution(quality, _equirectangular.quality); - _equirectangular.spoutOutput->setChecked(spoutOutput); _projectionType->setCurrentIndex( static_cast(ProjectionIndices::Equirectangular) ); @@ -809,7 +785,6 @@ void WindowControl::setVisibilityOfProjectionGui(bool enable) { _fisheye.labelInfo->setVisible(enable); _fisheye.quality->setVisible(enable); _fisheye.labelQuality->setVisible(enable); - _fisheye.spoutOutput->setVisible(enable); _sphericalMirror.labelInfo->setVisible(enable); _sphericalMirror.quality->setVisible(enable); _sphericalMirror.labelQuality->setVisible(enable); @@ -821,7 +796,6 @@ void WindowControl::setVisibilityOfProjectionGui(bool enable) { _equirectangular.labelInfo->setVisible(enable); _equirectangular.quality->setVisible(enable); _equirectangular.labelQuality->setVisible(enable); - _equirectangular.spoutOutput->setVisible(enable); _projectionLabel->setVisible(!enable); } @@ -839,7 +813,7 @@ void WindowControl::setQualityComboBoxFromLinesResolution(int lines, QComboBox* void WindowControl::onSizeXChanged(int newValue) { _windowDimensions.setWidth(newValue); if (_aspectRatioLocked) { - int updatedHeight = _windowDimensions.width() / _aspectRatioSize; + const int updatedHeight = _windowDimensions.width() / _aspectRatioSize; _sizeY->blockSignals(true); _sizeY->setValue(updatedHeight); _sizeY->blockSignals(false); @@ -854,7 +828,7 @@ void WindowControl::onSizeXChanged(int newValue) { void WindowControl::onSizeYChanged(int newValue) { _windowDimensions.setHeight(newValue); if (_aspectRatioLocked) { - int updatedWidth = _windowDimensions.height() * _aspectRatioSize; + const int updatedWidth = _windowDimensions.height() * _aspectRatioSize; _sizeX->blockSignals(true); _sizeX->setValue(updatedWidth); _sizeX->blockSignals(false); @@ -867,21 +841,21 @@ void WindowControl::onSizeYChanged(int newValue) { } void WindowControl::onOffsetXChanged(int newValue) { - float prevWidth = _windowDimensions.width(); + const float prevWidth = _windowDimensions.width(); _windowDimensions.setX(newValue); _windowDimensions.setWidth(prevWidth); emit windowChanged(_monitor->currentIndex(), _windowIndex, _windowDimensions); } void WindowControl::onOffsetYChanged(int newValue) { - float prevHeight = _windowDimensions.height(); + const float prevHeight = _windowDimensions.height(); _windowDimensions.setY(newValue); _windowDimensions.setHeight(prevHeight); emit windowChanged(_monitor->currentIndex(), _windowIndex, _windowDimensions); } void WindowControl::onFullscreenClicked() { - QRect resolution = _monitorResolutions[_monitor->currentIndex()]; + const QRect resolution = _monitorResolutions[_monitor->currentIndex()]; _offsetX->setValue(0); _offsetY->setValue(0); @@ -890,8 +864,8 @@ void WindowControl::onFullscreenClicked() { _windowDecoration->setChecked(false); } -void WindowControl::onProjectionChanged(int newSelection) { - ProjectionIndices selected = static_cast(newSelection); +void WindowControl::onProjectionChanged(int newSelection) const { + const ProjectionIndices selected = static_cast(newSelection); _planar.widget->setVisible(selected == ProjectionIndices::Planar); _fisheye.widget->setVisible(selected == ProjectionIndices::Fisheye); _sphericalMirror.widget->setVisible(selected == ProjectionIndices::SphericalMirror); @@ -921,8 +895,9 @@ void WindowControl::onFovLockClicked() { } void WindowControl::updatePlanarLockedFov() { - bool landscapeOrientation = (_windowDimensions.width() >= _windowDimensions.height()); - float aspectRatio; + const bool landscapeOrientation = + (_windowDimensions.width() >= _windowDimensions.height()); + float aspectRatio = 0.f; if (landscapeOrientation) { aspectRatio = _windowDimensions.width() / _windowDimensions.height(); } @@ -930,7 +905,7 @@ void WindowControl::updatePlanarLockedFov() { aspectRatio = _windowDimensions.height() / _windowDimensions.width(); } - float adjustedFov = 2.f * atan(aspectRatio * tan(DefaultFovShortEdge + float adjustedFov = 2.f * std::atan(aspectRatio * std::tan(DefaultFovShortEdge * std::numbers::pi_v / 180.f / 2.f)); // Convert to degrees and limit to 180° adjustedFov *= 180.f / std::numbers::pi_v; diff --git a/apps/OpenSpace/ext/sgct b/apps/OpenSpace/ext/sgct index b7fc36eed3..c514d99fee 160000 --- a/apps/OpenSpace/ext/sgct +++ b/apps/OpenSpace/ext/sgct @@ -1 +1 @@ -Subproject commit b7fc36eed34bd59091c04d699b0d37e33697d416 +Subproject commit c514d99fee69c82641cd8a36a656eb32641eb019 diff --git a/apps/OpenSpace/main.cpp b/apps/OpenSpace/main.cpp index 5906e528fc..da300bcdb1 100644 --- a/apps/OpenSpace/main.cpp +++ b/apps/OpenSpace/main.cpp @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -22,15 +22,16 @@ * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * ****************************************************************************************/ -#include #include +#include #include #include +#include #include #include #include +#include #include -#include #include #include #include @@ -49,7 +50,6 @@ #include #include #include -#include #include #include #include @@ -70,10 +70,6 @@ #include #endif // OPENSPACE_HAS_SPOUT -#ifdef OPENSPACE_HAS_NVTOOLS -#include "nvToolsExt.h" -#endif // OPENSPACE_HAS_NVTOOLS - #ifdef OPENSPACE_BREAK_ON_FLOATING_POINT_EXCEPTION #include #endif // OPENSPACE_BREAK_ON_FLOATING_POINT_EXCEPTION @@ -94,8 +90,7 @@ constexpr std::string_view OpenVRTag = "OpenVR"; // @TODO (abock, 2020-04-09): These state variables should disappear const Window* currentWindow = nullptr; const BaseViewport* currentViewport = nullptr; -Frustum::Mode currentFrustumMode; -glm::mat4 currentModelViewProjectionMatrix; +FrustumMode currentFrustumMode; glm::mat4 currentModelMatrix; glm::ivec2 currentDrawResolution; @@ -129,7 +124,6 @@ std::vector SpoutWindows; #endif // OPENSPACE_HAS_SPOUT -} // // MiniDump generation @@ -145,22 +139,38 @@ LONG WINAPI generateMiniDump(EXCEPTION_POINTERS* exceptionPointers) { LINFO(s); } - std::string dumpFile = fmt::format( - "OpenSpace_{}_{}_{}-{}-{}-{}-{}-{}-{}--{}--{}.dmp", - OPENSPACE_VERSION_MAJOR, - OPENSPACE_VERSION_MINOR, - OPENSPACE_VERSION_PATCH, - stLocalTime.wYear, - stLocalTime.wMonth, - stLocalTime.wDay, - stLocalTime.wHour, - stLocalTime.wMinute, - stLocalTime.wSecond, - GetCurrentProcessId(), - GetCurrentThreadId() - ); + std::string dumpFile; + if (OPENSPACE_IS_RELEASE_BUILD) { + dumpFile = std::format( + "OpenSpace_{}_{}_{}-{}-{}-{}-{}-{}-{}--{}--{}.dmp", + OPENSPACE_VERSION_MAJOR, + OPENSPACE_VERSION_MINOR, + OPENSPACE_VERSION_PATCH, + stLocalTime.wYear, + stLocalTime.wMonth, + stLocalTime.wDay, + stLocalTime.wHour, + stLocalTime.wMinute, + stLocalTime.wSecond, + GetCurrentProcessId(), + GetCurrentThreadId() + ); + } + else { + dumpFile = std::format( + "OpenSpace_{}-{}-{}-{}-{}-{}--{}--{}.dmp", + stLocalTime.wYear, + stLocalTime.wMonth, + stLocalTime.wDay, + stLocalTime.wHour, + stLocalTime.wMinute, + stLocalTime.wSecond, + GetCurrentProcessId(), + GetCurrentThreadId() + ); + } - LINFO(fmt::format("Creating dump file: {}", dumpFile)); + LINFO(std::format("Creating dump file: {}", dumpFile)); HANDLE hDumpFile = CreateFileA( dumpFile.c_str(), @@ -203,12 +213,12 @@ LONG WINAPI generateMiniDump(EXCEPTION_POINTERS* exceptionPointers) { void checkJoystickStatus() { using namespace interaction; - for (int i = GLFW_JOYSTICK_1; i <= GLFW_JOYSTICK_LAST; ++i) { + for (int i = GLFW_JOYSTICK_1; i <= GLFW_JOYSTICK_LAST; i++) { ZoneScopedN("Joystick state"); JoystickInputState& state = global::joystickInputStates->at(i); - int present = glfwJoystickPresent(i); + const int present = glfwJoystickPresent(i); if (present == GLFW_FALSE) { state.isConnected = false; continue; @@ -233,7 +243,7 @@ void checkJoystickStatus() { std::memcpy(state.axes.data(), axes, state.nAxes * sizeof(float)); const unsigned char* buttons = glfwGetJoystickButtons(i, &state.nButtons); - for (int j = 0; j < state.nButtons; ++j) { + for (int j = 0; j < state.nButtons; j++) { const bool currentlyPressed = buttons[j] == GLFW_PRESS; if (currentlyPressed) { @@ -287,8 +297,8 @@ void mainInitFunc(GLFWwindow*) { // We save the startup value of the screenshots just in case we want to add a date // to them later in the RenderEngine std::filesystem::path screenshotPath = absPath("${SCREENSHOTS}"); - FileSys.registerPathToken("${STARTUP_SCREENSHOT}", screenshotPath); - Settings::instance().setCapturePath(screenshotPath.string()); + sgct::Engine::instance().setCapturePath(screenshotPath); + FileSys.registerPathToken("${STARTUP_SCREENSHOT}", std::move(screenshotPath)); LDEBUG("Initializing OpenSpace Engine started"); global::openSpaceEngine->initialize(); @@ -297,22 +307,23 @@ void mainInitFunc(GLFWwindow*) { #ifndef __APPLE__ // Apparently: "Cocoa: Regular windows do not have icons on macOS" { - std::filesystem::path path = absPath("${DATA}/openspace-icon.png"); - int x; - int y; - int n; - unsigned char* data = stbi_load(path.string().c_str(), &x, &y, &n, 0); + const std::filesystem::path path = absPath("${DATA}/openspace-icon.png"); + int x = 0; + int y = 0; + int n = 0; + const std::string p = path.string(); + unsigned char* data = stbi_load(p.c_str(), &x, &y, &n, 0); - GLFWimage icons[1]; - icons[0].pixels = data; - icons[0].width = x; - icons[0].height = y; + GLFWimage icon; + icon.pixels = data; + icon.width = x; + icon.height = y; for (const std::unique_ptr& window : Engine::instance().windows()) { - glfwSetWindowIcon(window->windowHandle(), 1, icons); + glfwSetWindowIcon(window->windowHandle(), 1, &icon); } - stbi_image_free(icons[0].pixels); + stbi_image_free(icon.pixels); } #endif // __APPLE__ @@ -345,8 +356,8 @@ void mainInitFunc(GLFWwindow*) { } } - for (size_t i = 0; i < Engine::instance().windows().size(); ++i) { - Window& window = *Engine::instance().windows()[i]; + for (size_t i = 0; i < Engine::instance().windows().size(); i++) { + const Window& window = *Engine::instance().windows()[i]; if (!window.hasTag(SpoutTag)) { continue; } @@ -416,9 +427,6 @@ void mainPreSyncFunc() { void mainPostSyncPreDrawFunc() { ZoneScoped; -#ifdef OPENSPACE_HAS_NVTOOLS - nvtxRangePush("postSyncPreDraw"); -#endif // OPENSPACE_HAS_NVTOOLS LTRACE("main::postSynchronizationPreDraw(begin)"); global::openSpaceEngine->postSynchronizationPreDraw(); @@ -431,10 +439,6 @@ void mainPostSyncPreDrawFunc() { #endif // OPENVR_SUPPORT LTRACE("main::postSynchronizationPreDraw(end)"); - -#ifdef OPENSPACE_HAS_NVTOOLS - nvtxRangePop(); -#endif // OPENSPACE_HAS_NVTOOLS } @@ -442,9 +446,6 @@ void mainPostSyncPreDrawFunc() { void mainRenderFunc(const sgct::RenderData& data) { ZoneScoped; -#ifdef OPENSPACE_HAS_NVTOOLS - nvtxRangePush("render"); -#endif // OPENSPACE_HAS_NVTOOLS LTRACE("main::mainRenderFunc(begin)"); currentWindow = &data.window; @@ -453,16 +454,12 @@ void mainRenderFunc(const sgct::RenderData& data) { currentDrawResolution = glm::ivec2(data.bufferSize.x, data.bufferSize.y); glm::vec3 pos; - std::memcpy( - glm::value_ptr(pos), - &Engine::instance().defaultUser().posMono().x, - sizeof(vec3) - ); + std::memcpy(glm::value_ptr(pos), &Engine::defaultUser().posMono().x, sizeof(vec3)); glm::mat4 viewMatrix; std::memcpy( glm::value_ptr(viewMatrix), - data.viewMatrix.values, + data.viewMatrix.values.data(), sizeof(mat4) ); viewMatrix = viewMatrix * glm::translate(glm::mat4(1.f), pos); @@ -470,7 +467,7 @@ void mainRenderFunc(const sgct::RenderData& data) { glm::mat4 projectionMatrix; std::memcpy( glm::value_ptr(projectionMatrix), - data.projectionMatrix.values, + data.projectionMatrix.values.data(), sizeof(mat4) ); #ifdef OPENVR_SUPPORT @@ -486,11 +483,10 @@ void mainRenderFunc(const sgct::RenderData& data) { glm::mat4 modelMatrix; std::memcpy( glm::value_ptr(modelMatrix), - data.modelMatrix.values, + data.modelMatrix.values.data(), sizeof(mat4) ); currentModelMatrix = modelMatrix; - currentModelViewProjectionMatrix = modelMatrix * viewMatrix * projectionMatrix; global::openSpaceEngine->render(modelMatrix, viewMatrix, projectionMatrix); #ifdef OPENSPACE_HAS_SPOUT @@ -503,12 +499,12 @@ void mainRenderFunc(const sgct::RenderData& data) { if (w.leftOrMain.isCreated() && w.leftOrMain.updateSenderSize(width, height)) { - GLuint texId = window.frameBufferTexture(Window::TextureIndex::LeftEye); + GLuint texId = window.frameBufferTextureEye(Eye::MonoOrLeft); w.leftOrMain.updateSender(texId, static_cast(GL_TEXTURE_2D)); } if (w.right.isCreated() && w.right.updateSenderSize(width, height)) { - GLuint texId = window.frameBufferTexture(Window::TextureIndex::RightEye); + GLuint texId = window.frameBufferTextureEye(Eye::Right); w.right.updateSender(texId, static_cast(GL_TEXTURE_2D)); } @@ -521,9 +517,6 @@ void mainRenderFunc(const sgct::RenderData& data) { } LTRACE("main::mainRenderFunc(end)"); -#ifdef OPENSPACE_HAS_NVTOOLS - nvtxRangePop(); -#endif // OPENSPACE_HAS_NVTOOLS } @@ -639,36 +632,35 @@ void mainCharCallback(unsigned int codepoint, int modifiers, sgct::Window* windo -void mainDropCallback(int amount, const char** paths) { - ghoul_assert(amount > 0, "Expected at least one file path"); - ghoul_assert(paths, "expected non-nullptr"); +void mainDropCallback(const std::vector& paths) { + ZoneScoped; - for (int i = 0; i < amount; ++i) { - global::openSpaceEngine->handleDragDrop(paths[i]); + for (const std::string_view path : paths) { + global::openSpaceEngine->handleDragDrop(path); } } -std::vector mainEncodeFun() { +std::vector mainEncode() { ZoneScoped; - LTRACE("main::mainEncodeFun(begin)"); + LTRACE("main::mainEncode(begin)"); std::vector data = global::openSpaceEngine->encode(); - LTRACE("main::mainEncodeFun(end)"); + LTRACE("main::mainEncode(end)"); return data; } -void mainDecodeFun(const std::vector& data) { +void mainDecode(const std::vector& data) { ZoneScoped; - LTRACE("main::mainDecodeFun(begin)"); + LTRACE("main::mainDecode(begin)"); global::openSpaceEngine->decode(data); - LTRACE("main::mainDecodeFun(end)"); + LTRACE("main::mainDecode(end)"); } @@ -689,10 +681,9 @@ void mainLogCallback(Log::Level level, std::string_view message) { case Log::Level::Error: LERRORC("SGCT", message); break; + } } -} // namespace - void setSgctDelegateFunctions() { WindowDelegate& sgctDelegate = *global::windowDelegate; @@ -740,7 +731,10 @@ void setSgctDelegateFunctions() { sgctDelegate.currentWindowSize = []() { ZoneScoped; - return glm::ivec2(currentWindow->resolution().x, currentWindow->resolution().y); + return glm::ivec2( + currentWindow->windowResolution().x, + currentWindow->windowResolution().y + ); }; sgctDelegate.currentSubwindowSize = []() { ZoneScoped; @@ -749,19 +743,19 @@ void setSgctDelegateFunctions() { case Window::StereoMode::SideBySide: case Window::StereoMode::SideBySideInverted: return glm::ivec2( - currentWindow->resolution().x / 2, - currentWindow->resolution().y + currentWindow->windowResolution().x / 2, + currentWindow->windowResolution().y ); case Window::StereoMode::TopBottom: case Window::StereoMode::TopBottomInverted: return glm::ivec2( - currentWindow->resolution().x, - currentWindow->resolution().y / 2 + currentWindow->windowResolution().x, + currentWindow->windowResolution().y / 2 ); default: return glm::ivec2( - currentWindow->resolution().x * currentViewport->size().x, - currentWindow->resolution().y * currentViewport->size().y + currentWindow->windowResolution().x * currentViewport->size().x, + currentWindow->windowResolution().y * currentViewport->size().y ); } }; @@ -771,11 +765,11 @@ void setSgctDelegateFunctions() { const Viewport* viewport = dynamic_cast(currentViewport); if (viewport) { if (viewport->hasSubViewports() && viewport->nonLinearProjection()) { - ivec2 dim = viewport->nonLinearProjection()->cubemapResolution(); + const ivec2 dim = viewport->nonLinearProjection()->cubemapResolution(); return glm::ivec2(dim.x, dim.y); } else { - ivec2 dim = currentWindow->finalFBODimensions(); + const ivec2 dim = currentWindow->framebufferResolution(); return glm::ivec2(dim.x, dim.y); } } @@ -786,8 +780,8 @@ void setSgctDelegateFunctions() { sgctDelegate.currentViewportSize = []() { ZoneScoped; - if (currentViewport != nullptr) { - vec2 size = currentViewport->size(); + if (currentViewport) { + const vec2 size = currentViewport->size(); return glm::ivec2(size.x, size.y); } return glm::ivec2(-1, -1); @@ -795,9 +789,9 @@ void setSgctDelegateFunctions() { sgctDelegate.currentViewportResolution = []() { ZoneScoped; - if (currentViewport != nullptr) { - ivec2 res = currentWindow->resolution(); - vec2 size = currentViewport->size(); + if (currentViewport) { + const ivec2 res = currentWindow->windowResolution(); + const vec2 size = currentViewport->size(); return glm::ivec2(size.x * res.x, size.y * res.y); } return glm::ivec2(-1, -1); @@ -805,29 +799,29 @@ void setSgctDelegateFunctions() { sgctDelegate.dpiScaling = []() { ZoneScoped; - vec2 scale = currentWindow->scale(); + const vec2 scale = currentWindow->scale(); return glm::vec2(scale.x, scale.y); }; sgctDelegate.firstWindowResolution = []() { ZoneScoped; sgct::Window* window = Engine::instance().windows().front().get(); - return glm::ivec2(window->resolution().x, window->resolution().y); + return glm::ivec2(window->windowResolution().x, window->windowResolution().y); }; sgctDelegate.guiWindowResolution = []() { ZoneScoped; - const Window* guiWindow = nullptr; + const Window* guiWin = nullptr; for (const std::unique_ptr& window : Engine::instance().windows()) { if (window->hasTag("GUI")) { - guiWindow = window.get(); + guiWin = window.get(); break; } } - if (!guiWindow) { - guiWindow = Engine::instance().windows().front().get(); + if (!guiWin) { + guiWin = Engine::instance().windows().front().get(); } - return glm::ivec2(guiWindow->resolution().x, guiWindow->resolution().y); + return glm::ivec2(guiWin->windowResolution().x, guiWin->windowResolution().y); }; sgctDelegate.osDpiScaling = []() { ZoneScoped; @@ -851,7 +845,7 @@ void setSgctDelegateFunctions() { glfwGetWindowContentScale(dpiWindow->windowHandle(), &scale.x, &scale.y); if (scale.x != scale.y) { - LWARNING(fmt::format( + LWARNING(std::format( "Non-square window scaling detected ({0}x{1}), using {0}x{0} instead", scale.x, scale.y )); @@ -899,7 +893,7 @@ void setSgctDelegateFunctions() { sgctDelegate.takeScreenshot = [](bool applyWarping, std::vector windowIds) { ZoneScoped; - Settings::instance().setCaptureFromBackBuffer(applyWarping); + sgct::Engine::instance().setCaptureFromBackBuffer(applyWarping); Engine::instance().takeScreenshot(std::move(windowIds)); return Engine::instance().screenShotNumber(); }; @@ -965,18 +959,17 @@ void setSgctDelegateFunctions() { switch (currentFrustumMode) { default: - case Frustum::Mode::MonoEye: return WindowDelegate::Frustum::Mono; - case Frustum::Mode::StereoLeftEye: return WindowDelegate::Frustum::LeftEye; - case Frustum::Mode::StereoRightEye: return WindowDelegate::Frustum::RightEye; + case FrustumMode::Mono: return WindowDelegate::Frustum::Mono; + case FrustumMode::StereoLeft: return WindowDelegate::Frustum::LeftEye; + case FrustumMode::StereoRight: return WindowDelegate::Frustum::RightEye; } }; sgctDelegate.swapGroupFrameNumber = []() -> uint64_t { ZoneScoped; - - return currentWindow->swapGroupFrameNumber(); + return sgct::Window::swapGroupFrameNumber(); }; - sgctDelegate.setScreenshotFolder = [](std::string path) { - Settings::instance().setCapturePath(std::move(path)); + sgctDelegate.setScreenshotFolder = [](std::filesystem::path path) { + sgct::Engine::instance().setCapturePath(std::move(path)); }; sgctDelegate.showStatistics = [](bool enabled) { Engine::instance().setStatsGraphVisibility(enabled); @@ -987,78 +980,100 @@ void setSgctDelegateFunctions() { sgctDelegate.currentNode = []() { return ClusterManager::instance().thisNodeId(); }; - sgctDelegate.mousePositionViewportRelative = [](glm::vec2 mousePosition) { + sgctDelegate.mousePositionViewportRelative = [](const glm::vec2& mousePosition) { for (const std::unique_ptr& window : Engine::instance().windows()) { - if (isGuiWindow(window.get())) { - sgct::ivec2 res = window->resolution(); - for (const std::unique_ptr& viewport : window->viewports()) { - sgct::vec2 pos = viewport->position(); - sgct::vec2 size = viewport->size(); - glm::vec4 bounds = glm::vec4( - pos.x * res.x, - (1.0 - pos.y - size.y) * res.y, - (pos.x + size.x) * res.x, - (1.0 - pos.y) * res.y - ); + if (!isGuiWindow(window.get())) { + continue; + } - if ( - (mousePosition.x >= bounds.x && mousePosition.x <= bounds.z) && - (mousePosition.y >= bounds.y && mousePosition.y <= bounds.w) - ) { - return glm::vec2( - res.x * (mousePosition.x - bounds.x) / (bounds.z - bounds.x), - res.y * (mousePosition.y - bounds.y) / (bounds.w - bounds.y) - ); - } + const sgct::ivec2 res = window->windowResolution(); + for (const std::unique_ptr& viewport : window->viewports()) { + const sgct::vec2 pos = viewport->position(); + const sgct::vec2 size = viewport->size(); + const glm::vec4 bounds = glm::vec4( + pos.x * res.x, + (1.0 - pos.y - size.y) * res.y, + (pos.x + size.x) * res.x, + (1.0 - pos.y) * res.y + ); + + if ((mousePosition.x >= bounds.x && mousePosition.x <= bounds.z) && + (mousePosition.y >= bounds.y && mousePosition.y <= bounds.w)) + { + return glm::vec2( + res.x * (mousePosition.x - bounds.x) / (bounds.z - bounds.x), + res.y * (mousePosition.y - bounds.y) / (bounds.w - bounds.y) + ); } } } return mousePosition; }; + sgctDelegate.setStatisticsGraphScale = [](float scale) { + sgct::Engine::instance().setStatsGraphScale(scale); + }; + sgctDelegate.setMouseCursor = [](WindowDelegate::Cursor mouse) { + static std::unordered_map Cursors = { + { + WindowDelegate::Cursor::Arrow, + glfwCreateStandardCursor(GLFW_ARROW_CURSOR) + }, + { + WindowDelegate::Cursor::IBeam, + glfwCreateStandardCursor(GLFW_IBEAM_CURSOR) + }, + { + WindowDelegate::Cursor::CrossHair, + glfwCreateStandardCursor(GLFW_CROSSHAIR_CURSOR) + }, + { + WindowDelegate::Cursor::PointingHand, + glfwCreateStandardCursor(GLFW_POINTING_HAND_CURSOR) + }, + { + WindowDelegate::Cursor::ResizeEW, + glfwCreateStandardCursor(GLFW_RESIZE_EW_CURSOR) + }, + { + WindowDelegate::Cursor::ResizeNS, + glfwCreateStandardCursor(GLFW_RESIZE_NS_CURSOR) + }, + { + WindowDelegate::Cursor::ResizeNWSE, + glfwCreateStandardCursor(GLFW_RESIZE_NWSE_CURSOR) + }, + { + WindowDelegate::Cursor::ResizeNESW, + glfwCreateStandardCursor(GLFW_RESIZE_NESW_CURSOR) + }, + { + WindowDelegate::Cursor::ResizeAll, + glfwCreateStandardCursor(GLFW_RESIZE_ALL_CURSOR) + }, + { + WindowDelegate::Cursor::NotAllowed, + glfwCreateStandardCursor(GLFW_NOT_ALLOWED_CURSOR) + }, + }; + ghoul_assert( + Cursors.find(mouse) != Cursors.end(), "Tried to create non-existent cursor" + ); + glfwSetCursor(glfwGetCurrentContext(), Cursors[mouse]); + }; } -void checkCommandLineForSettings(int& argc, char** argv, bool& hasSGCT, bool& hasProfile, - std::string& sgctFunctionName) +std::string setWindowConfigPresetForGui(const std::string& labelFromCfgFile, + bool haveCliSGCTConfig) { - for (int i = 1; i < argc; ++i) { - const std::string arg = argv[i]; - if (arg == "-c" || arg == "--config") { - std::string p = ((i + 1) < argc) ? argv[i + 1] : ""; - p.erase(std::remove_if(p.begin(), p.end(), ::isspace), p.end()); - - const std::string sgctAssignment = "SGCTConfig="; - const size_t findSgct = p.find(sgctAssignment); - const size_t findBracket = p.find("}"); - if (findSgct != std::string::npos) { - if (findBracket != std::string::npos) { - sgctFunctionName = arg.substr( - findSgct + sgctAssignment.length(), - findBracket - findSgct - ); - } - hasSGCT = true; - } - if (p.find("Profile=") != std::string::npos) { - hasProfile = true; - } - } - } -} - -std::string setWindowConfigPresetForGui(const std::string labelFromCfgFile, - bool haveCliSGCTConfig, - const std::string& sgctFunctionName) -{ - configuration::Configuration& config = *global::configuration; + openspace::Configuration& config = *global::configuration; std::string preset; - bool sgctConfigFileSpecifiedByLuaFunction = !config.sgctConfigNameInitialized.empty(); + const bool sgctCfgFileSpecifiedByLua = !config.sgctConfigNameInitialized.empty(); if (haveCliSGCTConfig) { - preset = sgctFunctionName.empty() ? config.windowConfiguration : sgctFunctionName; - preset += " (from CLI)"; + preset = std::format("{} (from CLI)", config.windowConfiguration); } - else if (sgctConfigFileSpecifiedByLuaFunction) { + else if (sgctCfgFileSpecifiedByLua) { preset = config.sgctConfigNameInitialized + labelFromCfgFile; } else { @@ -1067,11 +1082,13 @@ std::string setWindowConfigPresetForGui(const std::string labelFromCfgFile, return preset; } -std::string selectedSgctProfileFromLauncher(LauncherWindow& lw, bool hasCliSGCTConfig, - std::string windowConfiguration, - const std::string& labelFromCfgFile) +std::pair selectedSgctProfileFromLauncher(LauncherWindow& lw, + bool hasCliSGCTConfig, + const std::string& windowConfiguration, + const std::string& labelFromCfgFile) { std::string config = windowConfiguration; + bool isGeneratedConfig = false; if (!hasCliSGCTConfig) { config = lw.selectedWindowConfig(); if (config.find(labelFromCfgFile) != std::string::npos) { @@ -1080,46 +1097,48 @@ std::string selectedSgctProfileFromLauncher(LauncherWindow& lw, bool hasCliSGCTC } else { config = windowConfiguration; + isGeneratedConfig = true; } } else { - std::filesystem::path c = absPath(config); + const std::filesystem::path c = absPath(config); std::filesystem::path cj = c; cj.replace_extension(".json"); - std::filesystem::path cx = c; - cx.replace_extension(".xml"); - if (c.extension().empty()) { if (std::filesystem::exists(cj)) { config += ".json"; } - else if (std::filesystem::exists(cx)) { - config += ".xml"; - } else { - throw ghoul::RuntimeError(fmt::format( - "Error loading configuration file {}. File could not be found", + throw ghoul::RuntimeError(std::format( + "Error loading configuration file '{}'. File could not be found", config )); } } else { - // user customzied sgct config + // user customized SGCT config } } global::configuration->windowConfiguration = config; } - return config; + return { config, isGeneratedConfig }; } +} // namespace + + int main(int argc, char* argv[]) { + ZoneScoped; + #ifdef OPENSPACE_BREAK_ON_FLOATING_POINT_EXCEPTION _clearfp(); _controlfp(_controlfp(0, 0) & ~(_EM_ZERODIVIDE | _EM_OVERFLOW), _MCW_EM); #endif // OPENSPACE_BREAK_ON_FLOATING_POINT_EXCEPTION + std::setlocale(LC_ALL, "C"); + #ifdef WIN32 SetUnhandledExceptionFilter(generateMiniDump); #endif // WIN32 @@ -1149,7 +1168,7 @@ int main(int argc, char* argv[]) { std::filesystem::current_path() / std::filesystem::path(argv[0]).parent_path(), ghoul::filesystem::FileSystem::Override::Yes ); - LDEBUG(fmt::format("Registering ${{BIN}} to {}", absPath("${BIN}"))); + LDEBUG(std::format("Registering ${{BIN}} to '{}'", absPath("${BIN}"))); // // Parse commandline arguments @@ -1162,23 +1181,35 @@ int main(int argc, char* argv[]) { CommandlineArguments commandlineArguments; parser.addCommand(std::make_unique>( - commandlineArguments.configurationName, "--file", "-f", + commandlineArguments.configuration, "--file", "-f", "Provides the path to the OpenSpace configuration file. Only the '${TEMPORARY}' " "path token is available and any other path has to be specified relative to the " "current working directory" )); - - parser.addCommand(std::make_unique>( - commandlineArguments.configurationOverride, "--config", "-c", - "Provides the ability to pass arbitrary Lua code to the application that will be " - "evaluated after the configuration file has been loaded but before the other " - "commandline arguments are triggered. This can be used to manipulate the " - "configuration file without editing the file on disk, for example in a " - "planetarium environment. Please not that the Lua script must not contain any - " - "or they will be interpreted as a new command. Similar, in Bash, ${...} will be " - "evaluated before it is passed to OpenSpace. Windows does not approve of using \"" - "either, so it is recommended to deliniate strings with [[ ]] instead. For " - "example: OpenSpace --config Profile=[[jwst]]" + parser.addCommand(std::make_unique>( + commandlineArguments.windowConfig, "--config", "-c", + "Specifies the window configuration file that should be used to start OpenSpace " + "and that will override whatever is specified in the `openspace.cfg` or the " + "settings. This value can include path tokens, so for example " + "`${CONFIG}/single.json` is a valid value." + )); + parser.addCommand(std::make_unique>( + commandlineArguments.profile, "--profile", "-p", + "Specifies the profile that should be used to start OpenSpace and that overrides " + "the profile specified in the `openspace.cfg` and the settings." + )); + parser.addCommand(std::make_unique>( + commandlineArguments.propertyVisibility, "--propertyVisibility", "", + "Specifies UI visibility settings for properties that this OpenSpace is using. " + "This value overrides the values specified in the `openspace.cfg` and the " + "settings and also the environment variable, if that value is provided. Allowed " + "values for this parameter are: `Developer`, `AdvancedUser`, `User`, and " + "`NoviceUser`." + )); + parser.addCommand(std::make_unique( + commandlineArguments.bypassLauncher, "--bypassLauncher", "-b", + "Specifies whether the Launcher should be shown at startup or not. This value " + "overrides the value specified in the `openspace.cfg` and the settings." )); // setCommandLine returns a reference to the vector that will be filled later @@ -1187,7 +1218,7 @@ int main(int argc, char* argv[]) { ); try { - bool showHelp = parser.execute(); + const bool showHelp = parser.execute(); if (showHelp) { std::cout << parser.helpText(); exit(EXIT_SUCCESS); @@ -1207,37 +1238,38 @@ int main(int argc, char* argv[]) { // Create the OpenSpace engine and get arguments for the SGCT engine std::string windowConfiguration; + bool isGeneratedWindowConfig = true; try { // Find configuration std::filesystem::path configurationFilePath; - if (!commandlineArguments.configurationName.empty()) { - configurationFilePath = absPath(commandlineArguments.configurationName); + if (commandlineArguments.configuration.has_value()) { + configurationFilePath = absPath(*commandlineArguments.configuration); } else { LDEBUG("Finding configuration"); - configurationFilePath = configuration::findConfiguration(); + configurationFilePath = findConfiguration(); } if (!std::filesystem::is_regular_file(configurationFilePath)) { LFATALC( "main", - fmt::format("Could not find configuration {}", configurationFilePath) + std::format("Could not find configuration '{}'", configurationFilePath) ); exit(EXIT_FAILURE); } - LINFO(fmt::format("Configuration Path: {}", configurationFilePath)); + LINFO(std::format("Configuration Path '{}'", configurationFilePath)); // Register the base path as the directory where the configuration file lives std::filesystem::path base = configurationFilePath.parent_path(); - FileSys.registerPathToken("${BASE}", base); + FileSys.registerPathToken("${BASE}", std::move(base)); // The previous incarnation of this was initializing GLFW to get the primary // monitor's resolution, but that had some massive performance implications as // there was some issue with the swap buffer handling inside of GLFW. My // assumption is that GLFW doesn't like being initialized, destroyed, and then // initialized again. Therefore we are using the platform specific functions now - glm::ivec2 size = glm::ivec2(1920, 1080); #ifdef WIN32 + glm::ivec2 size = glm::ivec2(1920, 1080); DEVMODEW dm = { 0 }; dm.dmSize = sizeof(DEVMODEW); BOOL success = EnumDisplaySettingsW(nullptr, ENUM_CURRENT_SETTINGS, &dm); @@ -1245,20 +1277,54 @@ int main(int argc, char* argv[]) { size.x = dm.dmPelsWidth; size.y = dm.dmPelsHeight; } +#else // ^^^^ WIN32 // !WIN32 vvvv + const glm::ivec2 size = glm::ivec2(1920, 1080); #endif // WIN32 // Loading configuration from disk LDEBUG("Loading configuration from disk"); - std::string override; - for (const std::string& arg : commandlineArguments.configurationOverride) { - override += arg + ";"; - } - *global::configuration = configuration::loadConfigurationFromFile( - configurationFilePath.string(), - size, - override + *global::configuration = loadConfigurationFromFile( + configurationFilePath, + findSettings(), + size ); + // Override configuration with commandline arguments + if (commandlineArguments.windowConfig.has_value()) { + global::configuration->windowConfiguration = + *commandlineArguments.windowConfig; + } + if (commandlineArguments.profile.has_value()) { + global::configuration->profile = *commandlineArguments.profile; + } + if (commandlineArguments.propertyVisibility.has_value()) { + if (commandlineArguments.propertyVisibility == "NoviceUser") { + global::configuration->propertyVisibility = + properties::Property::Visibility::NoviceUser; + } + else if (commandlineArguments.propertyVisibility == "User") { + global::configuration->propertyVisibility = + properties::Property::Visibility::User; + } + else if (commandlineArguments.propertyVisibility == "AdvancedUser") { + global::configuration->propertyVisibility = + properties::Property::Visibility::AdvancedUser; + } + else if (commandlineArguments.propertyVisibility == "Developer") { + global::configuration->propertyVisibility = + properties::Property::Visibility::Developer; + } + else { + throw ghoul::RuntimeError(std::format( + "Unknown property visibility value '{}'", + *commandlineArguments.propertyVisibility + )); + } + } + if (commandlineArguments.bypassLauncher.has_value()) { + global::configuration->bypassLauncher = *commandlineArguments.bypassLauncher; + } + // Determining SGCT configuration file LDEBUG("SGCT Configuration file: " + global::configuration->windowConfiguration); @@ -1282,17 +1348,11 @@ int main(int argc, char* argv[]) { global::openSpaceEngine->registerPathTokens(); - bool hasSGCTConfig = false; - bool hasProfile = false; - std::string sgctFunctionName; - checkCommandLineForSettings(argc, argv, hasSGCTConfig, hasProfile, sgctFunctionName); - // Call profile GUI const std::string labelFromCfgFile = " (from .cfg)"; std::string windowCfgPreset = setWindowConfigPresetForGui( labelFromCfgFile, - hasSGCTConfig, - sgctFunctionName + commandlineArguments.windowConfig.has_value() ); //TODO consider LFATAL if ${USER} doens't exist rather then recurisve create. @@ -1308,49 +1368,88 @@ int main(int argc, char* argv[]) { QApplication app(qac, nullptr); #endif // __APPLE__ - bool skipLauncher = - (hasProfile && hasSGCTConfig) || global::configuration->bypassLauncher; - if (!skipLauncher) { + if (!global::configuration->bypassLauncher) { #ifndef __APPLE__ int qac = 0; QApplication app(qac, nullptr); #endif // __APPLE__ std::string pwd = std::filesystem::current_path().string(); - if (size_t it = pwd.find_first_of("'\"[]"); it != std::string::npos) { + if (const size_t it = pwd.find_first_of("'\"[]"); it != std::string::npos) { QMessageBox::warning( nullptr, "OpenSpace", - QString::fromStdString(fmt::format( - "The OpenSpace folder is started must not contain any of \"'\", " - "\"\"\", [, or ]. Path is: '{}'. Unexpected errors will occur when " + QString::fromStdString(std::format( + "The OpenSpace folder is started from must not contain any of \"'\", " + "\"\"\", [, or ]. Path is: {}. Unexpected errors will occur when " "proceeding to run the software", pwd )) ); } - LauncherWindow win( - !hasProfile, + LauncherWindow win = LauncherWindow( + !commandlineArguments.profile.has_value(), *global::configuration, - !hasSGCTConfig, - windowCfgPreset, + !commandlineArguments.windowConfig.has_value(), + std::move(windowCfgPreset), nullptr ); win.show(); - app.exec(); + QApplication::exec(); if (!win.wasLaunchSelected()) { exit(EXIT_SUCCESS); } glfwInit(); - global::configuration->profile = win.selectedProfile(); - windowConfiguration = selectedSgctProfileFromLauncher( - win, - hasSGCTConfig, - windowConfiguration, - labelFromCfgFile + // We are just reloading the configuration file here in case the user has changed + // anything in the settings panel. In that case want to apply these settings + // immediately rather than waiting for the next startup. + // What follows is some copy-paste code that should be cleaned up at some point + + LDEBUG("Reloading configuration from disk"); + // Find configuration + std::filesystem::path configurationFilePath; + if (commandlineArguments.configuration.has_value()) { + configurationFilePath = absPath(*commandlineArguments.configuration); + } + else { + LDEBUG("Finding configuration"); + configurationFilePath = findConfiguration(); + } + + // The previous incarnation of this was initializing GLFW to get the primary + // monitor's resolution, but that had some massive performance implications as + // there was some issue with the swap buffer handling inside of GLFW. My + // assumption is that GLFW doesn't like being initialized, destroyed, and then + // initialized again. Therefore we are using the platform specific functions now +#ifdef WIN32 + glm::ivec2 size = glm::ivec2(1920, 1080); + DEVMODEW dm = { 0 }; + dm.dmSize = sizeof(DEVMODEW); + BOOL success = EnumDisplaySettingsW(nullptr, ENUM_CURRENT_SETTINGS, &dm); + if (success) { + size.x = dm.dmPelsWidth; + size.y = dm.dmPelsHeight; + } +#else // ^^^^ WIN32 // !WIN32 vvvv + const glm::ivec2 size = glm::ivec2(1920, 1080); +#endif // WIN32 + + *global::configuration = loadConfigurationFromFile( + configurationFilePath, + findSettings(), + size ); + + global::configuration->profile = win.selectedProfile(); + std::tie(windowConfiguration, isGeneratedWindowConfig) = + selectedSgctProfileFromLauncher( + win, + commandlineArguments.windowConfig.has_value(), + windowConfiguration, + labelFromCfgFile + ); } else { glfwInit(); @@ -1361,6 +1460,20 @@ int main(int argc, char* argv[]) { } + { + openspace::Settings settings = loadSettings(); + settings.hasStartedBefore = true; + + const std::filesystem::path p = global::configuration->profile; + const std::filesystem::path reducedName = p.filename().replace_extension(); + settings.profile = reducedName.string(); + + settings.configuration = + isGeneratedWindowConfig ? "" : global::configuration->windowConfiguration; + + saveSettings(settings, findSettings()); + } + // Prepend the outgoing sgctArguments with the program name // as well as the configuration file that sgct is supposed to use arguments.insert(arguments.begin(), argv[0]); @@ -1380,28 +1493,44 @@ int main(int argc, char* argv[]) { LDEBUG("Creating SGCT Engine"); std::vector arg(argv + 1, argv + argc); - Configuration config = parseArguments(arg); - config::Cluster cluster = loadCluster(absPath(windowConfiguration).string()); + LDEBUG("Parsing commandline arguments"); + sgct::Configuration config = parseArguments(arg); + LDEBUG("Loading cluster information"); + config::Cluster cluster; + try { + cluster = loadCluster(absPath(windowConfiguration).string()); + } + catch (const std::runtime_error& e) { + LFATALC("main", e.what()); + exit(EXIT_FAILURE); + } - Engine::Callbacks callbacks; - callbacks.initOpenGL = mainInitFunc; - callbacks.preSync = mainPreSyncFunc; - callbacks.postSyncPreDraw = mainPostSyncPreDrawFunc; - callbacks.draw = mainRenderFunc; - callbacks.draw2D = mainDraw2DFunc; - callbacks.postDraw = mainPostDrawFunc; - callbacks.keyboard = mainKeyboardCallback; - callbacks.mouseButton = mainMouseButtonCallback; - callbacks.mousePos = mainMousePosCallback; - callbacks.mouseScroll = mainMouseScrollCallback; - callbacks.character = mainCharCallback; - callbacks.drop = mainDropCallback; - callbacks.encode = mainEncodeFun; - callbacks.decode = mainDecodeFun; + LDEBUG("Setting callbacks"); + Engine::Callbacks callbacks = { + .initOpenGL = mainInitFunc, + .preSync = mainPreSyncFunc, + .postSyncPreDraw = mainPostSyncPreDrawFunc, + .draw = mainRenderFunc, + .draw2D = mainDraw2DFunc, + .postDraw = mainPostDrawFunc, + .encode = mainEncode, + .decode = mainDecode, + .keyboard = mainKeyboardCallback, + .character = mainCharCallback, + .mouseButton = mainMouseButtonCallback, + .mousePos = mainMousePosCallback, + .mouseScroll = mainMouseScrollCallback, + .drop = mainDropCallback + }; Log::instance().setNotifyLevel(Log::Level::Debug); + // Do not print message if clients are waiting for the master + config.printWaitMessage = config.printWaitMessage.value_or(false); + // Only timeout after 15 minutes + config.waitTimeout = config.waitTimeout.value_or(15.f * 60.f); + try { - Engine::create(cluster, callbacks, config); + Engine::create(std::move(cluster), std::move(callbacks), config); } catch (const std::runtime_error& e) { LFATALC("main", e.what()); @@ -1441,11 +1570,6 @@ int main(int argc, char* argv[]) { } #endif // __APPLE__ - - // Do not print message if clients are waiting for the master - // Only timeout after 15 minutes - Engine::instance().setSyncParameters(false, 15.f * 60.f); - LINFO("Starting rendering loop"); Engine::instance().exec(); LINFO("Ending rendering loop"); diff --git a/apps/Sync/main.cpp b/apps/Sync/main.cpp index 2de95d3440..f71d43d821 100644 --- a/apps/Sync/main.cpp +++ b/apps/Sync/main.cpp @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -22,8 +22,10 @@ * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * ****************************************************************************************/ -#include +#include #include +#include +#include #include #include #include @@ -32,10 +34,9 @@ #include #include #include - -#include -#include #include +#include +#include #include #include @@ -44,21 +45,25 @@ int main(int, char**) { ghoul::initialize(); - std::string configFile = configuration::findConfiguration(); - global::configuration = configuration::loadConfigurationFromFile(configFile); - global::openSpaceEngine.initialize(); + std::filesystem::path configFile = findConfiguration(); + std::filesystem::path settings = findSettings(); + *global::configuration = loadConfigurationFromFile( + configFile, + settings, + glm::ivec2(0, 0) + ); + global::openSpaceEngine->initialize(); TaskLoader taskLoader; - std::vector> tasks = taskLoader.tasksFromFile( - absPath("${TASKS}/full_sync.task") - ); + std::filesystem::path t = absPath("${TASKS}/full_sync.task"); + std::vector> tasks = taskLoader.tasksFromFile(t.string()); for (size_t i = 0; i < tasks.size(); i++) { Task& task = *tasks[i].get(); LINFOC( "Sync", - fmt::format( + std::format( "Synchronizing scene {} out of {}: {}", i + 1, tasks.size(), task.description() ) diff --git a/apps/TaskRunner/main.cpp b/apps/TaskRunner/main.cpp index bc4190f4f6..1ae27cb841 100644 --- a/apps/TaskRunner/main.cpp +++ b/apps/TaskRunner/main.cpp @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -39,6 +39,7 @@ #include #include +#include #include #include #include @@ -73,12 +74,12 @@ void performTasks(const std::string& path) { LINFO("Task queue has 1 item"); } else { - LINFO(fmt::format("Task queue has {} items", tasks.size())); + LINFO(std::format("Task queue has {} items", tasks.size())); } for (size_t i = 0; i < tasks.size(); i++) { Task& task = *tasks[i].get(); - LINFO(fmt::format( + LINFO(std::format( "Performing task {} out of {}: {}", i + 1, tasks.size(), task.description() )); ProgressBar progressBar(100); @@ -108,7 +109,7 @@ int main(int argc, char** argv) { ghoul::filesystem::FileSystem::Override::Yes ); - std::filesystem::path configFile = configuration::findConfiguration(); + std::filesystem::path configFile = findConfiguration(); // Register the base path as the directory where the configuration file lives std::filesystem::path base = configFile.parent_path(); @@ -127,10 +128,11 @@ int main(int argc, char** argv) { } #endif // WIN32 - *global::configuration = configuration::loadConfigurationFromFile( + std::filesystem::path settings = findSettings(); + *global::configuration = loadConfigurationFromFile( configFile.string(), - size, - "" + settings, + size ); openspace::global::openSpaceEngine->registerPathTokens(); global::openSpaceEngine->initialize(); @@ -140,7 +142,7 @@ int main(int argc, char** argv) { ghoul::cmdparser::CommandlineParser::AllowUnknownCommands::Yes ); - std::string tasksPath; + std::optional tasksPath; commandlineParser.addCommand( std::make_unique>( tasksPath, @@ -155,19 +157,20 @@ int main(int argc, char** argv) { //FileSys.setCurrentDirectory(launchDirectory); - if (!tasksPath.empty()) { - performTasks(tasksPath); + if (tasksPath.has_value()) { + performTasks(*tasksPath); return 0; } // If no task file was specified in as argument, run in CLI mode. - LINFO(fmt::format("Task root: {}", absPath("${TASKS}"))); + LINFO(std::format("Task root: {}", absPath("${TASKS}"))); std::filesystem::current_path(absPath("${TASKS}")); std::cout << "TASK > "; - while (std::cin >> tasksPath) { - performTasks(tasksPath); + std::string t; + while (std::cin >> t) { + performTasks(t); std::cout << "TASK > "; } diff --git a/config/equirectangular_gui.json b/config/equirectangular_gui.json index fe744ef269..425c78a509 100644 --- a/config/equirectangular_gui.json +++ b/config/equirectangular_gui.json @@ -54,5 +54,12 @@ "eyeseparation": 0.065, "pos": { "x": 0.0, "y": 0.0, "z": 0.0 } } - ] + ], + "meta": { + "author": "OpenSpace Team", + "description": "Two windows: Primary 1280x720 window with equirectangular projection rendering without menu or text overlays, and a secondary with menu and text overlays minus rendering.", + "license": "MIT License", + "name": "Equirectangular + GUI", + "version": "1.0" + } } diff --git a/config/fullscreen1080.json b/config/fullscreen1080.json index 59ef891571..6d8cfa7987 100644 --- a/config/fullscreen1080.json +++ b/config/fullscreen1080.json @@ -43,5 +43,12 @@ "eyeseparation": 0.065, "pos": { "x": 0.0, "y": 0.0, "z": 0.0 } } - ] + ], + "meta": { + "author": "OpenSpace Team", + "description": "A single 1920x1080 fullscreen window with planar projection rendering. The display will automatically be set to 1920x1080, regardless of native resolution.", + "license": "MIT License", + "name": "Fullscreen 1080", + "version": "1.0" + } } diff --git a/config/gui_projector.json b/config/gui_projector.json index 155af25705..2ae6a35593 100644 --- a/config/gui_projector.json +++ b/config/gui_projector.json @@ -59,5 +59,12 @@ "eyeseparation": 0.065, "pos": { "x": 0.0, "y": 0.0, "z": 0.0 } } - ] + ], + "meta": { + "author": "OpenSpace Team", + "description": "Two windows for a side-by-side dual-monitor configuration, where the right-side monitor can be considered a projector. Primary 1920x1080 window with menu and text overlays minus rendering, and a secondary 1920x1080 fullscreen window with planar projection rendering without menu or text overlays.", + "license": "MIT License", + "name": "Side Projector + GUI", + "version": "1.0" + } } diff --git a/config/schema/sgcteditor.schema.json b/config/schema/sgcteditor.schema.json deleted file mode 100644 index 7f0b2276d4..0000000000 --- a/config/schema/sgcteditor.schema.json +++ /dev/null @@ -1,322 +0,0 @@ -{ - "$id": "schema2e", - - "$defs": { - "cylindricalprojection": { - "type": "object", - "properties": { - "type": { - "type": "string", - "const": "CylindricalProjection", - "default": "CylindricalProjection", - "readOnly": true - }, - "quality": { - "$ref": "sgct.schema.json#/$defs/projectionquality" - }, - "heightOffset": { - "type": "number", - "title": "Height Offset", - "description": "Offsets the height from which the cylindrical projection is generated. This is, in general, only necessary if the user position is offset and you want to counter that offset to continue producing a “standard” cylindrical projection" - } - }, - "required": [ "type" ], - "additionalProperties": false, - "description": "This projection method renders the scene into a view that can be mapped on the inside or outside of a cylinder. This projection method is support by some live media curation tools. The forward-facing direction will be at the left border of the image unless changed via the rotation option" - }, - - "fisheyeprojection": { - "type": "object", - "properties": { - "type": { - "type": "string", - "const": "FisheyeProjection", - "default": "FisheyeProjection", - "readOnly": true - }, - "quality": { - "$ref": "sgct.schema.json#/$defs/projectionquality" - } - }, - "required": [ "type" ], - "additionalProperties": false, - "description": "Describes a fisheye projection that is used to render into its parent Viewport. This uses a default of 180 degrees field of view and has a 1:1 aspect ratio. This projection type counts as a non-linear projection, which requires 4-6 render passes of the application, meaning that the application might render slower when using these kind of projections than a flat projection. In either case, the application does not need to be aware of the projection as this abstract is handled internally and the applications draw method is only called multiple times per frame with different projection methods that are used to create the full fisheye projection" - }, - - "planarprojection": { - "type": "object", - "properties": { - "type": { - "type": "string", - "const": "PlanarProjection", - "default": "PlanarProjection", - "readOnly": true - }, - "fov": { - "$ref": "sgct.schema.json#/$defs/fovhorizontalvertical", - "title": "Camera Field-of-View", - "description": "This element describes the field of view used the camera in this planar projection" - } - }, - "additionalProperties": false, - "description": "Describes a projection for the Viewport that is a flat projection described by simple frustum, which may be asymmetric" - }, - - "sphericalmirrorprojection": { - "type": "object", - "properties": { - "type": { - "type": "string", - "const": "SphericalMirrorProjection", - "default": "SphericalMirrorProjection", - "readOnly": true - }, - "quality": { - "$ref": "sgct.schema.json#/$defs/projectionquality" - } - }, - "required": [ "type" ], - "additionalProperties": false, - "description": "Used to create a projection used for Paul Bourke's spherical mirror setup (see here), which makes it possible to use an off-the-shelf projector to create a planetarium-like environment by bouncing the image of a shiny metal mirror. Please note that this is not the only way to produce these kind of images. Depending on your setup and availability of warping meshes, it might suffice to use the FisheyeProjection node type instead and add a single mesh to the parent Viewport instead. The config folder in SGCT contains an example of this using a default 16x9 warping mesh. This projection type specifically deals with the case where you have four different meshes, one for the bottom, top, left, and right parts of the distorted image" - }, - - "spoutoutputprojection": { - "type": "object", - "properties": { - "type": { - "type": "string", - "const": "SpoutOutputProjection", - "default": "SpoutOutputProjection", - "readOnly": true - }, - "quality": { - "$ref": "sgct.schema.json#/$defs/projectionquality" - }, - "mapping": { - "type": "string", - "enum": [ "fisheye", "equirectangular" ], - "title": "Mapping", - "description": "Determines the type of sharing that occurs with this projection and thus how many and which texture is shared via Spout. For the “fisheye” and “equirectangular”, only the single, final reprojected image is shared, for the “cubemap” method, all selected cubemaps will be provided through the Spout interface. The default value is “cubemap”" - }, - "mappingspoutname": { - "type": "string", - "title": "Mapping Spout Name", - "description": "Sets the name of the texture if the mapping type is 'fisheye' or 'equirectangular'. If the mapping is 'cubemap', this value is ignored" - } - }, - "required": [ "type", "mapping" ], - "additionalProperties": false, - "description": "Provides the ability to share a fully reprojected image using the Spout library. This library only supports the Windows operating system, so this projection will only work on Windows machines. Spout's functionality is the abilty to shared textures between different applications on the same machine, making it possible to render images using SGCT and making them available to other real-time applications on the same machine for further processing. Spout uses a textual name for accessing which texture should be used for sharing. The SpoutOutputProjection has three different output types, outputting each cube map face, sharing a fisheye image, or sharing an equirectangular projection, as determined by the mapping attribute" - }, - - "projection": { - "oneOf": [ - { - "$ref": "#/$defs/planarprojection", - "title": "Planar Projection" - }, - { - "$ref": "#/$defs/fisheyeprojection", - "title": "Fisheye Projection" - }, - { - "$ref": "#/$defs/sphericalmirrorprojection", - "title": "Spherical Mirror Projection" - }, - { - "$ref": "#/$defs/spoutoutputprojection", - "title": "Spout Output Projection" - }, - { - "$ref": "#/$defs/cylindricalprojection", - "title": "Cylindrical Projection" - }, - { - "$ref": "sgct.schema.json#/$defs/equirectangularprojection", - "title": "Equirectangular Projection" - } - ], - "title": "Projection" - }, - - "node": { - "type": "object", - "properties": { - "address": { - "$ref": "sgct.schema.json#/$defs/address" - }, - "port": { - "$ref": "sgct.schema.json#/$defs/port" - }, - "windows": { - "type": "array", - "items": { - "type": "object", - "properties": { - "border": { - "$ref": "sgct.schema.json#/$defs/windowborder" - }, - "draw2d": { - "$ref": "sgct.schema.json#/$defs/draw2d" - }, - "draw3d": { - "$ref": "sgct.schema.json#/$defs/draw3d" - }, - "monitor": { - "$ref": "sgct.schema.json#/$defs/monitor" - }, - "id": { - "$ref": "sgct.schema.json#/$defs/id" - }, - "name": { - "$ref": "sgct.schema.json#/$defs/windowname" - }, - "pos": { - "$ref": "sgct.schema.json#/$defs/windowpos" - }, - "size": { - "$ref": "sgct.schema.json#/$defs/windowsize" - }, - "tags": { - "$ref": "sgct.schema.json#/$defs/tags" - }, - "viewports": { - "type": "array", - "items": { - "type": "object", - "properties": { - "pos": { - "$ref": "sgct.schema.json#/$defs/viewportpos" - }, - "size": { - "$ref": "sgct.schema.json#/$defs/viewportsize" - }, - "projection": { - "$ref": "sgct.schema.json#/$defs/projection" - }, - "tracked": { - "$ref": "sgct.schema.json#/$defs/tracked" - } - } - }, - "title": "Viewports" - } - }, - "required": [ "pos", "size", "viewports" ] - }, - "title": "Windows", - "description": "Specifies a single window that is used to render content into. There can be an arbitrary(-ish) number of windows for each node and they all will be created and initialized at start time. Each window has at least one Viewport that specifies exactly where in the window the rendering occurs with which parameters" - } - }, - "required": [ "address", "port", "windows" ], - "additionalProperties": false, - "description": "Defines a single computing node that is contained in the described cluster. In general this corresponds to a single computer, but it is also possible to create multiple nodes on a local machine by using the 127.0.0.x IP address with x from 0 to 255. It is not possible to create multiple nodes on the same remote computer, however" - }, - - "scene": { - "type": "object", - "properties": { - "orientation": { - "$ref": "sgct.schema.json#/$defs/quat", - "title": "Orientation", - "description": "Describes a fixed orientation of the global scene" - } - }, - "required": [ "orientation" ], - "additionalProperties": false, - "description": "Determines an overall orientation of the scene. It consists only of an Orientation, which is included in the projection matrix that is passed to the rendering function callback of the specific application. This node can be used to customize the rendering for a specific rendering window. A common use-case in planetariums, for example, is to account for a tilt in the display system by providing an Orientation with the same pitch as the planetarium surface. This makes it possible to reuse the same application between the planetarium dome and fixed setups without the need for special care" - }, - - "display": { - "type": "object", - "properties": { - "swapinterval": { - "type": "integer", - "minimum": 0, - "title": "Swap Interval", - "description": "Determines the swap interval for the application. This determines the amount of V-Sync that should occur for the application. The two most common values for this are 0 for disabling V-Sync and 1 for regular V-Sync. The number provided determines the number of screen updates to wait before swapping the backbuffers and returning. For example on a 60Hz monitor, swapinterval=\"1\" would lead to a maximum of 60Hz frame rate, swapinterval=\"2\" would lead to a maximum of 30Hz frame rate. Using the same values for a 144Hz monitor would be a refresh rate of 144 and 72 respectively. The default value is 0, meaning that V-Sync is disabled" - } - }, - "title": "Display", - "additionalProperties": false, - "description": "Settings specific for the handling of display-related settings for the whole application" - }, - - "settings": { - "type": "object", - "properties": { - "display": { - "$ref": "#/$defs/display" - } - }, - "additionalProperties": false, - "description": "Controls global settings that affect the overall behavior of the SGCT library that are not limited just to a single window" - }, - - "user": { - "type": "object", - "properties": { - "name": { - "type": "string", - "title": "Name", - "description": "Specifies the name of this user. Each user needs to have a unique name, but there also has to be exactly one user present that has an empty name (or without a name attribute) which is used as the default user" - }, - "eyeseparation": { - "type": "number", - "minimum": 0.0, - "title": "Eye Separation", - "description": "Determines the eye separation used for stereoscopic viewports. If no viewports in the configuration are using stereo, this setting is ignored" - }, - "pos": { - "$ref": "sgct.schema.json#/$defs/vec3", - "title": "Position", - "description": "A linear offset of the user position. Must define three float attributes x, y, and z. The default values are x=0, y=0, z=0, meaning that no linear offset is applied to the user's position" - } - }, - "additionalProperties": false, - "required": [ "pos" ], - "description": "Specifies a user position and parameters. In most cases, only a single unnamed user is necessary. However, in more general cases, it is possible to assign Users to specific Viewports to provide a more fine-grained control over the rendering that occurs in that viewport" - } - }, - - "type": "object", - "properties": { - "masteraddress": { - "$ref": "sgct.schema.json#/$defs/masteraddress" - }, - "nodes": { - "type": "array", - "items": { "$ref": "#/$defs/node" }, - "title": "Nodes" - }, - "scene": { - "$ref": "#/$defs/scene", - "title": "Scene" - }, - "settings": { - "$ref": "#/$defs/settings", - "title": "Settings" - }, - "version": { - "type": "integer" - }, - "users": { - "type": "array", - "items": { "$ref": "#/$defs/user" }, - "title": "Users" - }, - "generator": { - "type": "object", - "properties": { - "name": { "type": "string" }, - "major": { "type": "integer" }, - "minor": { "type": "integer" } - }, - "required": [ "name", "major", "minor" ] - } - }, - "additionalProperties": false, - "required": [ - "version", "masteraddress", "scene", "users", "generator" - ] -} diff --git a/config/single.json b/config/single.json index 925ab5df8f..f36ad5b290 100644 --- a/config/single.json +++ b/config/single.json @@ -18,7 +18,6 @@ "stereo": "none", "pos": { "x": 50, "y": 50 }, "size": { "x": 1280, "y": 720 }, - "res": { "x": 2560, "y": 1440 }, "viewports": [ { "tracked": true, @@ -43,5 +42,12 @@ "eyeseparation": 0.065, "pos": { "x": 0.0, "y": 0.0, "z": 0.0 } } - ] + ], + "meta": { + "author": "OpenSpace Team", + "description": "A single 1280x720 window with planar projection rendering at 2560x1440 resolution.", + "license": "MIT License", + "name": "Single", + "version": "1.0" + } } diff --git a/config/single_fisheye.json b/config/single_fisheye.json index adfacbe680..941cf221e2 100644 --- a/config/single_fisheye.json +++ b/config/single_fisheye.json @@ -33,5 +33,12 @@ "eyeseparation": 0.06, "pos": { "x": 0.0, "y": 0.0, "z": 0.0 } } - ] + ], + "meta": { + "author": "OpenSpace Team", + "description": "A single 1024x1024 window with fisheye projection rendering.", + "license": "MIT License", + "name": "Fisheye", + "version": "1.0" + } } diff --git a/config/single_fisheye_gui.json b/config/single_fisheye_gui.json index 1d1ca3a909..862ec78611 100644 --- a/config/single_fisheye_gui.json +++ b/config/single_fisheye_gui.json @@ -57,5 +57,13 @@ "eyeseparation": 0.06, "pos": { "x": 0.0, "y": 0.0, "z": 0.0 } } - ] + ], + "meta": { + "author": "OpenSpace Team", + "description": "Two windows: Primary 1024x1024 window with menu and text overlays minus rendering, and a secondary 1024x1024 window with fisheye projection rendering without menu and text overlays.", + "license": "MIT License", + "name": "Fisheye + GUI", + "version": "1.0" + } + } diff --git a/config/single_gui.json b/config/single_gui.json index 0483f62baa..87c997d0ef 100644 --- a/config/single_gui.json +++ b/config/single_gui.json @@ -66,5 +66,12 @@ "eyeseparation": 0.065, "pos": { "x": 0.0, "y": 0.0, "z": 0.0 } } - ] + ], + "meta": { + "author": "OpenSpace Team", + "description": "Two windows: Primary 1280x720 window with planar projection rendering without menu or text overlays, and a secondary with menu and text overlays minus rendering.", + "license": "MIT License", + "name": "Single + GUI", + "version": "1.0" + } } diff --git a/config/single_gui_spout.json b/config/single_gui_spout.json index 7f95acd344..bfd91f6a65 100644 --- a/config/single_gui_spout.json +++ b/config/single_gui_spout.json @@ -63,5 +63,12 @@ "eyeseparation": 0.06499999761581421, "pos": { "x": 0.0, "y": 0.0, "z": 0.0 } } - ] + ], + "meta": { + "author": "OpenSpace Team", + "description": "Two windows: Primary 1280x720 window with Spout output (name 'OpenSpace') planar projection rendering without menu or text overlays, and a secondary with menu and text overlays minus rendering.", + "license": "MIT License", + "name": "Planar Spout + GUI", + "version": "1.0" + } } diff --git a/config/single_gui_with_graphics.json b/config/single_gui_with_graphics.json index c866040411..950207760d 100644 --- a/config/single_gui_with_graphics.json +++ b/config/single_gui_with_graphics.json @@ -67,5 +67,12 @@ "eyeseparation": 0.065, "pos": { "x": 0.0, "y": 0.0, "z": 0.0 } } - ] + ], + "meta": { + "author": "OpenSpace Team", + "description": "Two windows: Primary 1280x720 window with planar projection rendering without menu or text overlays, and a secondary with menu and text overlays plus rendering from the primary.", + "license": "MIT License", + "name": "Planar + GUI", + "version": "1.0" + } } diff --git a/config/single_sbs_stereo.json b/config/single_sbs_stereo.json index 2c0019f083..b3e32c1e1b 100644 --- a/config/single_sbs_stereo.json +++ b/config/single_sbs_stereo.json @@ -42,5 +42,12 @@ "eyeseparation": 0.065, "pos": { "x": 0.0, "y": 0.0, "z": 0.0 } } - ] + ], + "meta": { + "author": "OpenSpace Team", + "description": "A single 1280x720 window containing side-by-side stereo planar projection rendering views.", + "license": "MIT License", + "name": "Side-by-Side Stereo", + "version": "1.0" + } } diff --git a/config/single_two_win.json b/config/single_two_win.json index 9e88325d39..9eabfd6977 100644 --- a/config/single_two_win.json +++ b/config/single_two_win.json @@ -55,5 +55,13 @@ "eyeseparation": 0.065, "pos": { "x": 0.0, "y": 0.0, "z": 0.0 } } - ] + ], + "meta": { + "author": "OpenSpace Team", + "description": "Two 1280x720 windows each with identical planar projection rendering. Only the primary window has menu controls, but both have text overlays.", + "license": "MIT License", + "name": "Twin Planar", + "version": "1.0" + } + } diff --git a/config/spherical_mirror.json b/config/spherical_mirror.json index f8f1e5669c..5b2361f192 100644 --- a/config/spherical_mirror.json +++ b/config/spherical_mirror.json @@ -36,5 +36,12 @@ "eyeseparation": 0.06, "pos": { "x": 0.0, "y": 0.0, "z": 0.0 } } - ] + ], + "meta": { + "author": "OpenSpace Team", + "description": "A single 1280x720 window with spherical projection rendering at 2048x2048 resolution.", + "license": "MIT License", + "name": "Spherical Mirror", + "version": "1.0" + } } diff --git a/config/spherical_mirror_gui.json b/config/spherical_mirror_gui.json index 5fbd9baf4e..08a0e8be9b 100644 --- a/config/spherical_mirror_gui.json +++ b/config/spherical_mirror_gui.json @@ -61,5 +61,12 @@ "eyeseparation": 0.06, "pos": { "x": 0.0, "y": 0.0, "z": 0.0 } } - ] + ], + "meta": { + "author": "OpenSpace Team", + "description": "Two windows: Primary 1280x720 window with menu and text overlays minus rendering, and a secondary 1280x720 window at 2048x2048 resolution with spherical mirror projection rendering without the menu or text overlays.", + "license": "MIT License", + "name": "Spherical Mirror + GUI", + "version": "1.0" + } } diff --git a/config/spout_output_cubemap.json b/config/spout_output_cubemap.json index 064f48ecfc..5190094c2f 100644 --- a/config/spout_output_cubemap.json +++ b/config/spout_output_cubemap.json @@ -18,20 +18,14 @@ "windows": [ { "name": "OpenSpace", - "size": { "x": 1024, "y": 1024 }, + "size": { "x": 1800, "y": 600 }, "stereo": "none", "viewports": [ { "pos": { "x": 0.0, "y": 0.0 }, "size": { "x": 1.0, "y": 1.0 }, "projection": { - "type": "SpoutOutputProjection", - "background": { - "r": 0.1, - "g": 0.1, - "b": 0.1, - "a": 1.0 - }, + "type": "CubemapProjection", "channels": { "bottom": true, "left": true, @@ -40,8 +34,14 @@ "zleft": true, "zright": true }, - "mapping": "cubemap", - "mappingspoutname": "OS_CUBEMAP", + "spout": { + "enabled": true, + "name": "OS_SPOUT" + }, + "ndi": { + "enabled": true, + "name": "OS_NDI" + }, "orientation": { "pitch": 0.0, "roll": 0.0, "yaw": 0.0 }, "quality": "1024" } @@ -56,5 +56,12 @@ "eyeseparation": 0.05999999865889549, "pos": { "x": 0.0, "y": 0.0, "z": 0.0 } } - ] + ], + "meta": { + "author": "OpenSpace Team", + "description": "A single 1024x1024 window with Spout output cubemap projection rendering.", + "license": "MIT License", + "name": "Cubemap Spout", + "version": "1.0" + } } diff --git a/config/spout_output_equirectangular.json b/config/spout_output_equirectangular.json deleted file mode 100644 index 87a3bd98c2..0000000000 --- a/config/spout_output_equirectangular.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "version": 1, - "masteraddress": "localhost", - "scene": { - "offset": { "x": 0.0, "y": 0.0, "z": 0.0 }, - "orientation": { "yaw": 0.0, "pitch": -90.0, "roll": 0.0 }, - "scale": 1.0 - }, - "settings": { - "display": { - "swapinterval": 1 - } - }, - "nodes": [ - { - "address": "localhost", - "port": 20401, - "windows": [ - { - "name": "OpenSpace", - "size": { "x": 1024, "y": 1024 }, - "stereo": "none", - "viewports": [ - { - "pos": { "x": 0.0, "y": 0.0 }, - "size": { "x": 1.0, "y": 1.0 }, - "projection": { - "type": "SpoutOutputProjection", - "background": { - "r": 0.1, - "g": 0.1, - "b": 0.1, - "a": 1.0 - }, - "channels": { - "bottom": true, - "left": true, - "right": true, - "top": true, - "zleft": true, - "zright": true - }, - "mapping": "equirectangular", - "mappingspoutname": "OS_EQUIRECTANGULAR", - "orientation": { "pitch": 0.0, "roll": 0.0, "yaw": 0.0 }, - "quality": "1024" - } - } - ] - } - ] - } - ], - "users": [ - { - "eyeseparation": 0.06, - "pos": { "x": 0.0, "y": 0.0, "z": 0.0 } - } - ] -} diff --git a/config/spout_output_fisheye.json b/config/spout_output_fisheye.json deleted file mode 100644 index cd1b2a490e..0000000000 --- a/config/spout_output_fisheye.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "version": 1, - "masteraddress": "localhost", - "scene": { - "offset": { "x": 0.0, "y": 0.0, "z": 0.0 }, - "orientation": { "yaw": 0.0, "pitch": 0.0, "roll": 0.0 }, - "scale": 1.0 - }, - "settings": { - "display": { - "swapinterval": 1 - } - }, - "nodes": [ - { - "address": "localhost", - "port": 20401, - "windows": [ - { - "name": "OpenSpace", - "size": { "x": 1024, "y": 1024 }, - "stereo": "none", - "viewports": [ - { - "pos": { "x": 0.0, "y": 0.0 }, - "size": { "x": 1.0, "y": 1.0 }, - "projection": { - "type": "SpoutOutputProjection", - "background": { - "r": 0.1, - "g": 0.1, - "b": 0.1, - "a": 1.0 - }, - "channels": { - "bottom": false, - "left": true, - "right": true, - "top": true, - "zleft": true, - "zright": false - }, - "mapping": "fisheye", - "mappingspoutname": "OS_FISHEYE", - "orientation": { "pitch": 0.0, "roll": 0.0, "yaw": 45.0 }, - "quality": "1024" - } - } - ] - } - ] - } - ], - "users": [ - { - "eyeseparation": 0.06, - "pos": { "x": 0.0, "y": 0.0, "z": 0.0 } - } - ] -} diff --git a/config/spout_output_flat.json b/config/spout_output_flat.json deleted file mode 100644 index 585a0830e7..0000000000 --- a/config/spout_output_flat.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "version": 1, - "masteraddress": "localhost", - "scene": { - "offset": { "x": 0.0, "y": 0.0, "z": 0.0 }, - "orientation": { "yaw": 0.0, "pitch": 0.0, "roll": 0.0 }, - "scale": 1.0 - }, - "settings": { - "display": { - "swapinterval": 1 - } - }, - "nodes": [ - { - "address": "localhost", - "port": 20401, - "windows": [ - { - "name": "OpenSpace", - "size": { "x": 1440, "y": 810 }, - "stereo": "none", - "viewports": [ - { - "pos": { "x": 0.0, "y": 0.0 }, - "size": { "x": 1.0, "y": 1.0 }, - "projection": { - "type": "SpoutFlatProjection", - "planarprojection": { - "fov": { - "hfov": 80.0, - "vfov": 50.534015846724 - }, - "orientation": { "yaw": 0.0, "pitch": 0.0, "roll": 0.0 } - }, - "background": { - "r": 0.1, - "g": 0.1, - "b": 0.1, - "a": 1.0 - }, - "drawmain": true, - "height": 1080, - "mappingspoutname": "OS_FLAT", - "width": 1920 - } - } - ] - } - ] - } - ], - "users": [ - { - "eyeseparation": 0.05999999865889549, - "pos": { "x": 0.0, "y": 0.0, "z": 0.0 } - } - ] -} diff --git a/config/two_nodes.json b/config/two_nodes.json index 621bfbbeb0..637bc27dea 100644 --- a/config/two_nodes.json +++ b/config/two_nodes.json @@ -60,5 +60,12 @@ "eyeseparation": 0.065, "pos": { "x": 0.0, "y": 0.0, "z": 0.0 } } - ] + ], + "meta": { + "author": "OpenSpace Team", + "description": "Two individual nodes, each with a 1280x720 window with planar projection rendering.", + "license": "MIT License", + "name": "Two Nodes", + "version": "1.0" + } } diff --git a/data/assets/actions/planets/mars_layers.asset b/data/assets/actions/planets/mars_layers.asset index 554de5adee..303cf927ec 100644 --- a/data/assets/actions/planets/mars_layers.asset +++ b/data/assets/actions/planets/mars_layers.asset @@ -7,7 +7,7 @@ openspace.setPropertyValueSingle("Scene.Mars.Renderable.Layers.ColorLayers.CTX_b openspace.setPropertyValueSingle("Scene.Mars.Renderable.Layers.ColorLayers.CTX_blended_01.Settings.Opacity", 1.0, 2.0)]], Documentation = "Enables and fades in CTX layer for Mars", GuiPath = "/Solar System/Mars", - IsLocal = true + IsLocal = false } local CTXFadeOut = { @@ -16,7 +16,7 @@ local CTXFadeOut = { Command = [[openspace.setPropertyValueSingle("Scene.Mars.Renderable.Layers.ColorLayers.CTX_blended_01.Settings.Opacity", 0.0, 2.0)]], Documentation = "Fade out CTX", GuiPath = "/Solar System/Mars", - IsLocal = true + IsLocal = false } local HiriseFadeIn = { @@ -28,7 +28,7 @@ openspace.setPropertyValueSingle("Scene.Mars.Renderable.Layers.ColorLayers.HiRIS openspace.setPropertyValueSingle("Scene.Mars.Renderable.Layers.ColorLayers.HiRISE-PSP.Settings.Opacity", 1.0, 2.0)]], Documentation = "Enables and fades in HiRise layer for Mars", GuiPath = "/Solar System/Mars", - IsLocal = true + IsLocal = false } local HiriseFadeOut = { @@ -37,7 +37,7 @@ local HiriseFadeOut = { Command = [[openspace.setPropertyValueSingle("Scene.Mars.Renderable.Layers.ColorLayers.HiRISE-PSP.Settings.Opacity", 0.0, 2.0)]], Documentation = "Fade out HiRISE layer for Mars", GuiPath = "/Solar System/Mars", - IsLocal = true + IsLocal = false } local LocalSetHiriseFadeIn = { @@ -50,7 +50,7 @@ openspace.setPropertyValueSingle("Scene.Mars.Renderable.Layers.ColorLayers.HiRIS openspace.setPropertyValueSingle("Scene.Mars.Renderable.Layers.ColorLayers.HiRISE-LS.Settings.Opacity", 1.0, 2.0)]], Documentation = "Enables and fades in HiRise local set layers for Mars (including height)", GuiPath = "/Solar System/Mars", - IsLocal = true + IsLocal = false } local LocalSetHiriseFadeOut = { @@ -62,7 +62,7 @@ openspace.setPropertyValueSingle("Scene.Mars.Renderable.Layers.HeightLayers.HiRI ]], Documentation = "Fade out HiRISE local set layer for Mars", GuiPath = "/Solar System/Mars", - IsLocal = true + IsLocal = false } diff --git a/data/assets/actions/planets/planet_lighting.asset b/data/assets/actions/planets/planet_lighting.asset index 2676f71a8d..95da0b5b6c 100644 --- a/data/assets/actions/planets/planet_lighting.asset +++ b/data/assets/actions/planets/planet_lighting.asset @@ -6,7 +6,7 @@ local function illuminationCommand(node, global) if (global) then commandString = commandString .. [[ if (openspace.hasProperty("Scene."..node..".Renderable.UseAccurateNormals")) then - local list = openspace.getProperty("Scene." .. node .. ".Renderable.Layers.NightLayers.*.Enabled") + local list = openspace.property("Scene." .. node .. ".Renderable.Layers.NightLayers.*.Enabled") if (#list > 0) then openspace.setPropertyValue("Scene." .. node .. ".Renderable.Layers.NightLayers.*.Enabled", false) else @@ -24,7 +24,7 @@ end]] else --todo @micahnyc this 40 wont do once we have more rings commandString = commandString .. [[if (openspace.hasProperty("Scene."..node..".Renderable.UseAccurateNormals")) then -local list = openspace.getProperty("Scene." .. node .. ".Renderable.Layers.NightLayers.*.Enabled") +local list = openspace.property("Scene." .. node .. ".Renderable.Layers.NightLayers.*.Enabled") if (#list > 0) then openspace.setPropertyValue(list[1], true) else @@ -59,13 +59,13 @@ local function illuminationAction(node, nodeLower, global) Command = actionCommand, Documentation = "Enables " .. string.lower(actionName) .. " for" .. node, GuiPath = "/Solar System/" .. node, - IsLocal = true + IsLocal = false } return action end -local CurrentFocusGlobal = illuminationAction("Current Focus", "current_focus", true) -local CurrentFocusStandard = illuminationAction("Current Focus", "current_focus", false) +--local CurrentFocusGlobal = illuminationAction("Current Focus", "current_focus", true) +--local CurrentFocusStandard = illuminationAction("Current Focus", "current_focus", false) local EarthGlobal = illuminationAction("Earth", "earth", true) local EarthStandard = illuminationAction("Earth", "earth", false) @@ -98,7 +98,7 @@ local AllGlobesGlobalIllumination = { ]], Documentation = "Enables global illumination for all globes", GuiPath = "/Solar System", - IsLocal = true + IsLocal = false } local AllGlobesStandardIllumination = { @@ -114,13 +114,13 @@ local AllGlobesStandardIllumination = { ]], Documentation = "Disables global illumination for all globes", GuiPath = "/Solar System", - IsLocal = true + IsLocal = false } asset.onInitialize(function() - openspace.action.registerAction(CurrentFocusGlobal) - openspace.action.registerAction(CurrentFocusStandard) + -- openspace.action.registerAction(CurrentFocusGlobal) + -- openspace.action.registerAction(CurrentFocusStandard) openspace.action.registerAction(EarthGlobal) openspace.action.registerAction(EarthStandard) openspace.action.registerAction(MarsGlobal) @@ -148,12 +148,12 @@ asset.onDeinitialize(function() openspace.action.removeAction(MarsGlobal) openspace.action.removeAction(EarthStandard) openspace.action.removeAction(EarthGlobal) - openspace.action.removeAction(CurrentFocusStandard) - openspace.action.removeAction(CurrentFocusGlobal) + -- openspace.action.removeAction(CurrentFocusStandard) + -- openspace.action.removeAction(CurrentFocusGlobal) end) -asset.export("CurrentFocusGlobal", CurrentFocusGlobal.Identifier) -asset.export("CurrentFocusStandard", CurrentFocusStandard.Identifier) +-- asset.export("CurrentFocusGlobal", CurrentFocusGlobal.Identifier) +-- asset.export("CurrentFocusStandard", CurrentFocusStandard.Identifier) asset.export("EarthGlobal", EarthGlobal.Identifier) asset.export("EarthStandard", EarthStandard.Identifier) asset.export("MarsGlobal", MarsGlobal.Identifier) diff --git a/data/assets/actions/planets/scale_planets_and_moons.asset b/data/assets/actions/planets/scale_planets_and_moons.asset index 10ee22dd18..e5f5ac9ccd 100644 --- a/data/assets/actions/planets/scale_planets_and_moons.asset +++ b/data/assets/actions/planets/scale_planets_and_moons.asset @@ -20,7 +20,7 @@ local function scaleAction(identifier, scale, name, speed) Command = scaleCommand(identifier, scale, speed), Documentation = "Scales " .. name .. " to " .. scale .. "x", GuiPath = "/Solar System/Scale", - IsLocal = true + IsLocal = false } end @@ -29,12 +29,12 @@ local function toggleScaleAction(identifier, scale, name, speedup, speeddown) Identifier = "os.toggle_" .. string.gsub(name, "%s+", "") .. "_scale", Name = "Toggle " .. name .. " scale", Command = [[ -local list = openspace.getProperty("]] .. identifier .. [[.Scale.Scale") +local list = openspace.property("]] .. identifier .. [[.Scale.Scale") if #list == 0 then openspace.printWarning("No planets to resize") else local prop = list[1] - local currentScale = openspace.getPropertyValue(prop) + local currentScale = openspace.propertyValue(prop) local newScale = 1 if (currentScale == 1) then ]] .. scaleCommand(identifier, scale, speedup) .. [[ @@ -45,7 +45,7 @@ end ]], GuiPath = "/Solar System/Scale", Documentation = "Toggle the scale of " .. name, - IsLocal = true + IsLocal = false } end diff --git a/data/assets/actions/system/undo_event_fades.asset b/data/assets/actions/system/undo_event_fades.asset index 12ee3bb00e..560878696a 100644 --- a/data/assets/actions/system/undo_event_fades.asset +++ b/data/assets/actions/system/undo_event_fades.asset @@ -4,10 +4,10 @@ local UndoEventFade = { Command = [[ openspace.setPropertyValue("Scene.*.Renderable.Fade", 1.0, 0.5) ]], - Documentation = [[Sets the 'Fade' value of all renderables to 1. This internval values + Documentation = [[Sets the 'Fade' value of all renderables to 1. This internal values is managed by events]], GuiPath = "/System/Rendering", - IsLocal = true + IsLocal = false } @@ -25,7 +25,6 @@ asset.export("UndoEventFade", UndoEventFade.Identifier) asset.meta = { Name = "Actions - Undo All Event Fading", - Version = "1.0", Description = "Asset providing debug ability to undo all event fading", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/actions/time.asset b/data/assets/actions/time.asset new file mode 100644 index 0000000000..a33d22ca24 --- /dev/null +++ b/data/assets/actions/time.asset @@ -0,0 +1,59 @@ +local ReverseRate = { + Identifier = "os.time.reverseRate", + Name = "Reverse rate of time", + Command = [[ +openspace.time.setDeltaTime(-openspace.time.deltaTime()) + ]], + Documentation = [[Reverse the rate of time]], + GuiPath = "/Time/Simulation Speed", + IsLocal = false +} + +local SiderealDayIncrease = { + Identifier = "os.time.siderealDayIncrease", + Name = "Advance 1 sidereal day", + Command = [[ +openspace.time.setTime(openspace.time.advancedTime(openspace.time.currentTime(), 86164.0905)); + ]], + Documentation = [[Advances time by a sidereal day (Instant)]], + GuiPath = "/Time", + IsLocal = false +} + +local SiderealDayDecrease = { + Identifier = "os.time.siderealDayDecrease", + Name = "Decrement 1 sidereal day", + Command = [[ +openspace.time.setTime(openspace.time.advancedTime(openspace.time.currentTime(), -86164.0905)); + ]], + Documentation = [[Decrements time by a sidereal day (Instant)]], + GuiPath = "/Time", + IsLocal = false +} + + +asset.onInitialize(function() + openspace.action.registerAction(ReverseRate) + openspace.action.registerAction(SiderealDayIncrease) + openspace.action.registerAction(SiderealDayDecrease) +end) + +asset.onDeinitialize(function() + openspace.action.removeAction(SiderealDayDecrease) + openspace.action.removeAction(SiderealDayIncrease) + openspace.action.removeAction(ReverseRate) +end) + +asset.export("ReverseRate", ReverseRate.Identifier) +asset.export("SiderealDayIncrease", SiderealDayIncrease.Identifier) +asset.export("SiderealDayDecrease", SiderealDayDecrease.Identifier) + + + +asset.meta = { + Name = "Actions - Time", + Description = "Asset providing actions around time", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/actions/trails/on_off_all_minor_moons.asset b/data/assets/actions/trails/on_off_all_minor_moons.asset index a70f772b9e..5f680e6dae 100644 --- a/data/assets/actions/trails/on_off_all_minor_moons.asset +++ b/data/assets/actions/trails/on_off_all_minor_moons.asset @@ -2,11 +2,11 @@ local MinorMoonsOn = { Identifier = "os.MinorMoonsOn", Name = "Turn on minor moons and trails", Command = [[ - local trails = openspace.getProperty("{moonTrail_minor}.Renderable.Enabled") - local trails_fade = openspace.getProperty("{moonTrail_minor}.Renderable.Fade") + local trails = openspace.property("{moonTrail_minor}.Renderable.Enabled") + local trails_fade = openspace.property("{moonTrail_minor}.Renderable.Fade") - local moons = openspace.getProperty("{moon_minor}.Renderable.Enabled") - local moons_fade = openspace.getProperty("{moon_minor}.Renderable.Fade") + local moons = openspace.property("{moon_minor}.Renderable.Enabled") + local moons_fade = openspace.property("{moon_minor}.Renderable.Fade") for i, v in pairs(trails_fade) do openspace.setPropertyValueSingle(trails[i], true) @@ -20,18 +20,18 @@ local MinorMoonsOn = { ]], Documentation = "Turn ON minor moons and their trails for all planets in the solar system", GuiPath = "/Solar System/Minor Moons", - IsLocal = true + IsLocal = false } local MinorMoonsOff = { Identifier = "os.MinorMoonsOff", Name = "Turn off minor moons and trails", Command = [[ - local trails = openspace.getProperty("{moonTrail_minor}.Renderable.Enabled") - local trails_fade = openspace.getProperty("{moonTrail_minor}.Renderable.Fade") + local trails = openspace.property("{moonTrail_minor}.Renderable.Enabled") + local trails_fade = openspace.property("{moonTrail_minor}.Renderable.Fade") - local moons = openspace.getProperty("{moon_minor}.Renderable.Enabled") - local moons_fade = openspace.getProperty("{moon_minor}.Renderable.Fade") + local moons = openspace.property("{moon_minor}.Renderable.Enabled") + local moons_fade = openspace.property("{moon_minor}.Renderable.Fade") for i, v in pairs(trails_fade) do openspace.setPropertyValueSingle( @@ -55,7 +55,7 @@ local MinorMoonsOff = { ]], Documentation = "Turn OFF minor moons and their trails for all planets in the solar system", GuiPath = "/Solar System/Minor Moons", - IsLocal = true + IsLocal = false } @@ -76,7 +76,6 @@ asset.export("MinorMoonsOff", MinorMoonsOff.Identifier) asset.meta = { Name = "Actions - Turn ON/OFF all Minor Moons", - Version = "1.0", Description = "Asset providing actions to turn ON/OFF all minor moons and their trails", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/actions/trails/toggle_all_dwarf_planet_trails.asset b/data/assets/actions/trails/toggle_all_dwarf_planet_trails.asset index 3fc127643f..529e552c86 100644 --- a/data/assets/actions/trails/toggle_all_dwarf_planet_trails.asset +++ b/data/assets/actions/trails/toggle_all_dwarf_planet_trails.asset @@ -2,14 +2,14 @@ local ToggleDwarfPlanetTrails = { Identifier = "os.ToggleDwarfPlanetTrails", Name = "Toggle dwarf planet trails", Command = [[ - local list = openspace.getProperty("{planetTrail_dwarf}.Renderable.Enabled") + local list = openspace.property("{planetTrail_dwarf}.Renderable.Enabled") for _,v in pairs(list) do - openspace.setPropertyValueSingle(v, not openspace.getPropertyValue(v)) + openspace.setPropertyValueSingle(v, not openspace.propertyValue(v)) end ]], Documentation = "Toggle on/off trails for all dwarf planets in the solar system", GuiPath = "/Trails", - IsLocal = true + IsLocal = false } @@ -27,7 +27,6 @@ asset.export("ToggleDwarfPlanetTrails", ToggleDwarfPlanetTrails.Identifier) asset.meta = { Name = "Actions - Toggle Dwarf Planet Trails", - Version = "1.0", Description = "Asset providing actions to toggle all dwarf planet trails on and off", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/actions/trails/toggle_all_minor_moon_trails.asset b/data/assets/actions/trails/toggle_all_minor_moon_trails.asset index 65c508dea8..0b442deed4 100644 --- a/data/assets/actions/trails/toggle_all_minor_moon_trails.asset +++ b/data/assets/actions/trails/toggle_all_minor_moon_trails.asset @@ -2,14 +2,14 @@ local ToggleMinorMoonTrails = { Identifier = "os.ToggleMinorMoonTrails", Name = "Toggle minor moon trails", Command = [[ - local list = openspace.getProperty("{moonTrail_minor}.Renderable.Enabled") + local list = openspace.property("{moonTrail_minor}.Renderable.Enabled") for _,v in pairs(list) do - openspace.setPropertyValueSingle(v, not openspace.getPropertyValue(v)) + openspace.setPropertyValueSingle(v, not openspace.propertyValue(v)) end ]], Documentation = "Toggle on/off minor moon trails for all planets in the solar system", GuiPath = "/Trails", - IsLocal = true + IsLocal = false } @@ -27,7 +27,6 @@ asset.export("ToggleMinorMoonTrails", ToggleMinorMoonTrails.Identifier) asset.meta = { Name = "Actions - Toggle Minor Moon Trails", - Version = "1.0", Description = "Asset providing actions to toggle all minor moon trails on and off", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/actions/trails/toggle_all_trails.asset b/data/assets/actions/trails/toggle_all_trails.asset index e3a7cf6e19..c2f009d836 100644 --- a/data/assets/actions/trails/toggle_all_trails.asset +++ b/data/assets/actions/trails/toggle_all_trails.asset @@ -2,44 +2,44 @@ local FadeUpTrails = { Identifier = "os.FadeUpTrails", Name = "Show all trails", Command = [[ - local capList = openspace.getProperty("Scene.*Trail.Renderable.Fade") + local capList = openspace.property("Scene.*Trail.Renderable.Fade") for _,v in ipairs(capList) do openspace.setPropertyValueSingle(v, 1, 2) end - local list = openspace.getProperty("Scene.*trail.Renderable.Fade") + local list = openspace.property("Scene.*trail.Renderable.Fade") for _,v in ipairs(list) do openspace.setPropertyValueSingle(v, 1, 2) end ]], Documentation = "Fade up all enabled trails in the Scene", GuiPath = "/Trails", - IsLocal = true + IsLocal = false } local FadeDownTrails = { Identifier = "os.FadeDownTrails", Name = "Hide all trails", Command = [[ - local capList = openspace.getProperty("Scene.*Trail.Renderable.Fade") + local capList = openspace.property("Scene.*Trail.Renderable.Fade") for _,v in ipairs(capList) do openspace.setPropertyValueSingle(v, 0, 2) end - local list = openspace.getProperty("Scene.*trail.Renderable.Fade") + local list = openspace.property("Scene.*trail.Renderable.Fade") for _,v in ipairs(list) do openspace.setPropertyValueSingle(v, 0, 2) end ]], Documentation = "Fade down all enabled trails in the Scene", GuiPath = "/Trails", - IsLocal = true + IsLocal = false } local ToggleTrails = { Identifier = "os.ToggleTrails", Name = "Toggle all trails", Command = [[ - local capList = openspace.getProperty("*Trail.Renderable.Fade") - local list = openspace.getProperty("*trail.Renderable.Fade") + local capList = openspace.property("*Trail.Renderable.Fade") + local list = openspace.property("*trail.Renderable.Fade") if (#capList == 0) and (#list == 0) then openspace.printWarning("No trails to toggle") else @@ -49,18 +49,48 @@ local ToggleTrails = { else prop = list[1] end - local currentFade = openspace.getPropertyValue(prop) + local currentFade = openspace.propertyValue(prop) local newFade = 0 if currentFade < 1 then newFade = 1 end openspace.setPropertyValue("Scene.*Trail.Renderable.Fade", newFade, 2) openspace.setPropertyValue("Scene.*trail.Renderable.Fade", newFade, 2) + openspace.setPropertyValue("Scene.*TrailEarth.Renderable.Fade", newFade, 2) end ]], Documentation = "Toggle fade for all trails in the Scene", GuiPath = "/Trails", - IsLocal = true + IsLocal = false +} + +local ToggleTrailsInstant = { + Identifier = "os.ToggleTrailsInstant", + Name = "Toggle all trails instantly", + Command = [[ + local capList = openspace.property("*Trail.Renderable.Fade") + local list = openspace.property("*trail.Renderable.Fade") + if (#capList == 0) and (#list == 0) then + openspace.printWarning("No trails to toggle") + else + local prop + if #capList > 0 then + prop = capList[1] + else + prop = list[1] + end + local currentFade = openspace.propertyValue(prop) + local newFade = 0 + if currentFade < 1 then + newFade = 1 + end + openspace.setPropertyValue("Scene.*Trail.Renderable.Fade", newFade) + openspace.setPropertyValue("Scene.*trail.Renderable.Fade", newFade) + end + ]], + Documentation = "Toggle fade instantly for all trails in the Scene", + GuiPath = "/Trails", + IsLocal = false } @@ -68,9 +98,11 @@ asset.onInitialize(function() openspace.action.registerAction(FadeUpTrails) openspace.action.registerAction(FadeDownTrails) openspace.action.registerAction(ToggleTrails) + openspace.action.registerAction(ToggleTrailsInstant) end) asset.onDeinitialize(function() + openspace.action.removeAction(ToggleTrailsInstant) openspace.action.removeAction(ToggleTrails) openspace.action.removeAction(FadeDownTrails) openspace.action.removeAction(FadeUpTrails) @@ -79,3 +111,4 @@ end) asset.export("FadeUpTrails", FadeUpTrails.Identifier) asset.export("FadeDownTrails", FadeDownTrails.Identifier) asset.export("ToggleTrails", ToggleTrails.Identifier) +asset.export("ToggleTrailsInstant", ToggleTrailsInstant.Identifier) diff --git a/data/assets/actions/trails/toggle_all_trails_planets_moons_instant.asset b/data/assets/actions/trails/toggle_all_trails_planets_moons_instant.asset index 19f84a8eb0..a351ddb0ef 100644 --- a/data/assets/actions/trails/toggle_all_trails_planets_moons_instant.asset +++ b/data/assets/actions/trails/toggle_all_trails_planets_moons_instant.asset @@ -2,14 +2,14 @@ local ToggleTrailsInstant = { Identifier = "os.ToggleTrailsInstant", Name = "Toggle planet and moon trails (instant)", Command = [[ - local list = openspace.getProperty("{planetTrail_solarSystem}.Renderable.Enabled") + local list = openspace.property("{planetTrail_solarSystem}.Renderable.Enabled") for _,v in pairs(list) do - openspace.setPropertyValueSingle(v, not openspace.getPropertyValue(v)) + openspace.setPropertyValueSingle(v, not openspace.propertyValue(v)) end - local moonlist = openspace.getProperty("{moonTrail_solarSystem}.Renderable.Enabled") + local moonlist = openspace.property("{moonTrail_solarSystem}.Renderable.Enabled") for _,v in pairs(moonlist) do - openspace.setPropertyValueSingle(v, not openspace.getPropertyValue(v)) + openspace.setPropertyValueSingle(v, not openspace.propertyValue(v)) end ]], Documentation = "Toggles the visibility of planet and moon trails", diff --git a/data/assets/actions/trails/toggle_trail.asset b/data/assets/actions/trails/toggle_trail.asset index e5c03871e5..b768937a87 100644 --- a/data/assets/actions/trails/toggle_trail.asset +++ b/data/assets/actions/trails/toggle_trail.asset @@ -29,7 +29,7 @@ local ToggleTrail = { return end else - visibility = not openspace.getPropertyValue("Scene." .. trail .. ".Renderable.Enabled") + visibility = not openspace.propertyValue("Scene." .. trail .. ".Renderable.Enabled") end if visibility then @@ -42,7 +42,7 @@ local ToggleTrail = { This action takes optional arguments to 1) determine which trail to hide (as the 'Node') and 2) the transition direction (as 'After' and 'Before')]], GuiPath = "/Trails", - IsLocal = true + IsLocal = false } local HideTrail = { @@ -66,7 +66,7 @@ local HideTrail = { optional argument to determine whose trail to hide. If no argument is provided, the current focus node is used instead]], GuiPath = "/Trails", - IsLocal = true + IsLocal = false } local ShowTrail = { @@ -90,7 +90,7 @@ local ShowTrail = { optional argument to determine whose trail to hide. If no argument is provided, the current focus node is used instead]], GuiPath = "/Trails", - IsLocal = true + IsLocal = false } @@ -114,7 +114,6 @@ asset.export("ShowTrail", ShowTrail.Identifier) asset.meta = { Name = "Actions - Toggle current Trails", - Version = "1.0", Description = "Asset providing actions to toggle trails", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/actions/trails/toggle_trails_planets_moons.asset b/data/assets/actions/trails/toggle_trails_planets_moons.asset index c4d54ca718..0a65d1618c 100644 --- a/data/assets/actions/trails/toggle_trails_planets_moons.asset +++ b/data/assets/actions/trails/toggle_trails_planets_moons.asset @@ -7,7 +7,7 @@ local FadeUpTrails = { ]], Documentation = "Fade up all planet and moon trails in the Scene", GuiPath = "/Trails", - IsLocal = true + IsLocal = false } local FadeDownTrails = { @@ -19,15 +19,15 @@ local FadeDownTrails = { ]], Documentation = "Fade down all planet and moon trails in the Scene", GuiPath = "/Trails", - IsLocal = true + IsLocal = false } local ToggleTrails = { Identifier = "os.planetsmoons.ToggleTrails", Name = "Toggle planet and moon trails", Command = [[ - local capList = openspace.getProperty("{planetTrail_solarSystem}.Renderable.Fade") - local list = openspace.getProperty("{moonTrail_solarSystem}.Renderable.Fade") + local capList = openspace.property("{planetTrail_solarSystem}.Renderable.Fade") + local list = openspace.property("{moonTrail_solarSystem}.Renderable.Fade") if (#capList == 0) and (#list == 0) then openspace.printWarning("No trails to toggle") else @@ -37,7 +37,7 @@ local ToggleTrails = { else prop = list[1] end - local currentFade = openspace.getPropertyValue(prop) + local currentFade = openspace.propertyValue(prop) local newFade = 0 if currentFade < 1 then newFade = 1 @@ -48,7 +48,7 @@ local ToggleTrails = { ]], Documentation = "Toggle fade for planet and moon trails in the Scene", GuiPath = "/Trails", - IsLocal = true + IsLocal = false } diff --git a/data/assets/actions/trails/trail_appearance.asset b/data/assets/actions/trails/trail_appearance.asset index 6bc20d15b1..e28538be30 100644 --- a/data/assets/actions/trails/trail_appearance.asset +++ b/data/assets/actions/trails/trail_appearance.asset @@ -20,7 +20,7 @@ local function highlightAction(identifierString, value, nameString) Command = highlightCommand(identifierString, value), Documentation = "Animates the trail fade of " .. nameString .. "'s Trail", GuiPath = "/Trails/Appearance", - IsLocal = true + IsLocal = false } end @@ -29,12 +29,12 @@ local function toggleHighlightAction(identifierString, value, nameString) Identifier = "os.toggle_" .. identifierString .. "_trail_highlight", Name = "Toggle " .. nameString .. " trail highlight", Command = [[ -local list = openspace.getProperty("]] .. identifierString .. [[.Renderable.Appearance.Fade") +local list = openspace.property("]] .. identifierString .. [[.Renderable.Appearance.Fade") if #list == 0 then openspace.printWarning("No planets to resize") else local prop = list[1] - local fadeValue = openspace.getPropertyValue(prop) + local fadeValue = openspace.propertyValue(prop) if fadeValue > 1 then ]] .. highlightCommand(identifierString, 1, nameString) .. "\n" .. [[ else @@ -43,7 +43,7 @@ else end]], Documentation = "Animates the trail fade of " .. nameString .. "'s trail", GuiPath = "/Trails/Appearance", - IsLocal = true + IsLocal = false } end @@ -57,7 +57,7 @@ local EnableTrailFading = { ]], Documentation = "Set orbits to fade out towards the end", GuiPath = "/Trails/Appearance", - IsLocal = true + IsLocal = false } local DisableTrailFading = { @@ -69,15 +69,15 @@ local DisableTrailFading = { ]], Documentation = "Sets trails not to fade out torwards end", GuiPath = "/Trails/Appearance", - IsLocal = true + IsLocal = false } local ToggleTrailFading = { Identifier = "os.ToggleTrailFading", Name = "Toggle trail fading", Command = [[ - local capList = openspace.getProperty("*Trail.Renderable.Appearance.EnableFade") - local list = openspace.getProperty("*trail.Renderable.Appearance.EnableFade") + local capList = openspace.property("*Trail.Renderable.Appearance.EnableFade") + local list = openspace.property("*trail.Renderable.Appearance.EnableFade") if (#capList == 0) and (#list == 0) then openspace.printWarning("No trails to toggle") else @@ -87,7 +87,7 @@ local ToggleTrailFading = { else prop = list[1] end - local currentFade = openspace.getPropertyValue(prop) + local currentFade = openspace.propertyValue(prop) local newFade = not currentFade openspace.setPropertyValue("Scene.*Trail.Renderable.Appearance.EnableFade", newFade) openspace.setPropertyValue("Scene.*trail.Renderable.Appearance.EnableFade", newFade) @@ -95,7 +95,7 @@ local ToggleTrailFading = { ]], Documentation = "Toggle trails to fade out towards the end for all trails in the Scene", GuiPath = "/Trails/Appearance", - IsLocal = true + IsLocal = false } local HighlightEarthTrail = highlightAction("Scene.EarthTrail", 10, "Earth") diff --git a/data/assets/base.asset b/data/assets/base.asset index 7437c06163..b82a1f30e6 100644 --- a/data/assets/base.asset +++ b/data/assets/base.asset @@ -4,13 +4,16 @@ asset.require("./base_blank") +-- We load the SDSS dataset first as that is the one that takes the longest, so the +-- earlier we start, the sooner the loading is done +asset.require("scene/digitaluniverse/sdss") + -- Specifying which other assets should be loaded in this scene asset.require("scene/solarsystem/sun/sun") asset.require("scene/solarsystem/sun/glare") asset.require("scene/solarsystem/sun/habitablezone") asset.require("scene/solarsystem/sun/default_layers") asset.require("scene/solarsystem/planets/planets") -asset.require("scene/solarsystem/planets/default_layers") asset.require("scene/solarsystem/dwarf_planets/pluto/system") asset.require("scene/solarsystem/dwarf_planets/pluto/default_layers") asset.require("scene/solarsystem/dwarf_planets/pluto/charon/default_layers") @@ -18,34 +21,52 @@ asset.require("scene/milkyway/milkyway/volume") asset.require("scene/milkyway/constellations/constellation_art") asset.require("scene/milkyway/constellations/constellation_keybinds") +-- Planet layers +local server = openspace.layerServer(); +if (server == "All") then + asset.require("scene/solarsystem/planets/default_layers") +elseif (server == "NewYork") then + asset.require("scene/solarsystem/planets/newyork_layers") +elseif (server == "Sweden") then + asset.require("scene/solarsystem/planets/sweden_layers") +elseif (server == "Utah") then + asset.require("scene/solarsystem/planets/utah_layers") +elseif (server == "None") then + asset.require("scene/solarsystem/planets/base_layers") +else + openspace.printWarning("Did not recognize the specified Layer server, defaults to 'All'") + asset.require("scene/solarsystem/planets/default_layers") +end + asset.require("scene/digitaluniverse/2dF") asset.require("scene/digitaluniverse/2mass") asset.require("scene/digitaluniverse/6dF") asset.require("scene/digitaluniverse/abell") +asset.require("scene/digitaluniverse/allsky_hydrogenalpha") +asset.require("scene/digitaluniverse/allsky_visible") asset.require("scene/digitaluniverse/alternatestarlabels") asset.require("scene/digitaluniverse/backgroundradiation") -asset.require("scene/digitaluniverse/clusters") +asset.require("scene/digitaluniverse/brown_dwarfs") +asset.require("scene/digitaluniverse/galaxy_clusters") asset.require("scene/digitaluniverse/constellationbounds") asset.require("scene/digitaluniverse/constellations") -asset.require("scene/digitaluniverse/deepsky") -asset.require("scene/digitaluniverse/dwarfs") asset.require("scene/digitaluniverse/exoplanets") asset.require("scene/digitaluniverse/exoplanets_candidates") asset.require("scene/digitaluniverse/globularclusters") asset.require("scene/digitaluniverse/grids") -asset.require("scene/digitaluniverse/groups") +asset.require("scene/digitaluniverse/galaxy_groups") asset.require("scene/digitaluniverse/h2regions") -asset.require("scene/digitaluniverse/localdwarfs") +asset.require("scene/digitaluniverse/local_group_dwarfs") asset.require("scene/digitaluniverse/milkyway") asset.require("scene/digitaluniverse/milkyway_arm_labels") asset.require("scene/digitaluniverse/milkyway_label") -asset.require("scene/digitaluniverse/milkyway_sphere") asset.require("scene/digitaluniverse/obassociations") +asset.require("scene/digitaluniverse/oort_cloud") asset.require("scene/digitaluniverse/openclusters") asset.require("scene/digitaluniverse/planetarynebulae") asset.require("scene/digitaluniverse/pulsars") asset.require("scene/digitaluniverse/quasars") -asset.require("scene/digitaluniverse/sdss") +asset.require("scene/digitaluniverse/star_uncertainty") asset.require("scene/digitaluniverse/starlabels") asset.require("scene/digitaluniverse/starorbits") asset.require("scene/digitaluniverse/stars") @@ -53,6 +74,7 @@ asset.require("scene/digitaluniverse/superclusters") asset.require("scene/digitaluniverse/supernovaremnants") asset.require("scene/digitaluniverse/tully") asset.require("scene/digitaluniverse/voids") +asset.require("scene/digitaluniverse/white_dwarfs") asset.require("nightsky/nightsky") asset.require("customization/globebrowsing") @@ -65,4 +87,13 @@ asset.onInitialize(function() openspace.globebrowsing.loadWMSServersFromFile( openspace.absPath("${DATA}/globebrowsing_servers.lua") ) + + openspace.setGuiOrder( + "/", + { "Solar System", "Milky Way", "Universe", "Night Sky", "Examples" } + ) + openspace.setGuiOrder( + "/Solar System", + { "Planets", "Dwarf Planets", "Sun", "Solar System Barycenter" } + ) end) diff --git a/data/assets/base_blank.asset b/data/assets/base_blank.asset index 1f371d2beb..e4ec936782 100644 --- a/data/assets/base_blank.asset +++ b/data/assets/base_blank.asset @@ -1,7 +1,7 @@ -- This is a blank scene that that just sets up the default menus/dasboard/keys, etc. -- Specifying which other assets should be loaded in this scene -asset.require("spice/base") +asset.require("spice/core") asset.require("dashboard/default_dashboard") -- Load default key bindings applicable to most scenes @@ -22,6 +22,5 @@ asset.require("modules/touch/default_settings") asset.onInitialize(function() webGui.setCefRoute("onscreen") - openspace.setDefaultGuiSorting() openspace.setPropertyValueSingle("RenderEngine.VerticalLogOffset", 0.100000) end) diff --git a/data/assets/base_keybindings.asset b/data/assets/base_keybindings.asset index f2d19ffbf2..ce49ac2117 100644 --- a/data/assets/base_keybindings.asset +++ b/data/assets/base_keybindings.asset @@ -1,5 +1,6 @@ asset.require("./base") -local trailAction = asset.require("actions/trails/toggle_trails_planets_moons").ToggleTrails +local allTrailsAction = asset.require("actions/trails/toggle_all_trails").ToggleTrails +local allTrailsInstantAction = asset.require("actions/trails/toggle_all_trails").ToggleTrailsInstant @@ -7,29 +8,31 @@ local TogglePlanetLabels = { Identifier = "os_default.TogglePlanetLabels", Name = "Toggle planet labels", Command = [[ - local list = openspace.getProperty("{solarsystem_labels}.Renderable.Enabled") + local list = openspace.property("{solarsystem_labels}.Renderable.Enabled") for _,v in pairs(list) do - openspace.setPropertyValueSingle(v, not openspace.getPropertyValue(v)) + openspace.setPropertyValueSingle(v, not openspace.propertyValue(v)) end ]], Documentation = "Turns on visibility for all solar system labels", GuiPath = "/Solar System", - IsLocal = false, - Key = "l" + IsLocal = false } + asset.onInitialize(function() openspace.action.registerAction(TogglePlanetLabels) - openspace.bindKey(TogglePlanetLabels.Key, TogglePlanetLabels.Identifier) + openspace.bindKey("L", TogglePlanetLabels.Identifier) - openspace.bindKey("h", trailAction) + openspace.bindKey("T", allTrailsAction) + openspace.bindKey("SHIFT+T", allTrailsInstantAction) end) asset.onDeinitialize(function() - openspace.clearKey("h") + openspace.clearKey("SHIFT+T") + openspace.clearKey("T") openspace.action.removeAction(TogglePlanetLabels) - openspace.clearKey(TogglePlanetLabels.Key) + openspace.clearKey("L") end) asset.export("TogglePlanetLabels", TogglePlanetLabels.Identifier) diff --git a/data/assets/customization/globebrowsing.asset b/data/assets/customization/globebrowsing.asset index 4bcd72843a..ef6001e4d7 100644 --- a/data/assets/customization/globebrowsing.asset +++ b/data/assets/customization/globebrowsing.asset @@ -106,7 +106,6 @@ end) asset.meta = { Name = "Customization - GlobeBrowsing", - Version = "1.0", Description = [[This asset adds planetary images that can be downloaded separately and placed in the OpenSpaceData folder]], Author = "OpenSpace Team", diff --git a/data/assets/customization/gui.asset b/data/assets/customization/gui.asset index af95612cc4..7f49e78549 100644 --- a/data/assets/customization/gui.asset +++ b/data/assets/customization/gui.asset @@ -10,7 +10,6 @@ asset.export("webguiDevelopmentMode", false) asset.meta = { Name = "Customization - User Interface", - Version = "1.0", Description = "This asset is used by developers working on the GUI", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/customization/localbookmarks.csv b/data/assets/customization/localbookmarks.csv deleted file mode 100644 index d12976e610..0000000000 --- a/data/assets/customization/localbookmarks.csv +++ /dev/null @@ -1,2 +0,0 @@ -Group (optional),Name (required),Globe (optional),Lat (required if globe),Lon (required if globe),Altitude (optional if globe),x (required if not globe),y (required if not globe),z (required if not globe),Scale (optional),LineWidth (optional) -NASA,Kennedy Space Center,Earth,28.6658276,-80.70282839,,,,,, diff --git a/data/assets/dashboard/date.asset b/data/assets/dashboard/date.asset index 422bf7343a..19722483a4 100644 --- a/data/assets/dashboard/date.asset +++ b/data/assets/dashboard/date.asset @@ -19,7 +19,6 @@ asset.export(Item) asset.meta = { Name = "Dashboard - Date", - Version = "1.0", Description = "This asset provides a Date dashboard item", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/dashboard/default_dashboard.asset b/data/assets/dashboard/default_dashboard.asset index 3c1fefcaff..c43b47fcde 100644 --- a/data/assets/dashboard/default_dashboard.asset +++ b/data/assets/dashboard/default_dashboard.asset @@ -9,7 +9,6 @@ asset.require("./globelocation") asset.meta = { Name = "Dashboard - Default Items", - Version = "1.0", Description = "This asset provides the default items for the dashboard", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/dashboard/distance.asset b/data/assets/dashboard/distance.asset index 0d73c554d4..6da0e66915 100644 --- a/data/assets/dashboard/distance.asset +++ b/data/assets/dashboard/distance.asset @@ -19,7 +19,6 @@ asset.export(Item) asset.meta = { Name = "Dashboard - Distance", - Version = "1.0", Description = "This asset provides a Distance dashboard item", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/dashboard/framerate.asset b/data/assets/dashboard/framerate.asset index 50da0e8864..2fc6b2d68d 100644 --- a/data/assets/dashboard/framerate.asset +++ b/data/assets/dashboard/framerate.asset @@ -19,7 +19,6 @@ asset.export(Item) asset.meta = { Name = "Dashboard - Framerate", - Version = "1.0", Description = "This asset provides a Framerate dashboard item", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/dashboard/globelocation.asset b/data/assets/dashboard/globelocation.asset index cb4fcda184..f57f76c0af 100644 --- a/data/assets/dashboard/globelocation.asset +++ b/data/assets/dashboard/globelocation.asset @@ -19,7 +19,6 @@ asset.export(Item) asset.meta = { Name = "Dashboard - GlobeLocation", - Version = "1.0", Description = "This asset provides a GlobeLocation dashboard item", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/dashboard/parallelconnection.asset b/data/assets/dashboard/parallelconnection.asset index 13351db43e..0c11c22463 100644 --- a/data/assets/dashboard/parallelconnection.asset +++ b/data/assets/dashboard/parallelconnection.asset @@ -19,7 +19,6 @@ asset.export(Item) asset.meta = { Name = "Dashboard - ParallelConnection", - Version = "1.0", Description = "This asset provides a ParallelConnection dashboard item", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/dashboard/simulationincrement.asset b/data/assets/dashboard/simulationincrement.asset index e837384d37..538e0e1e76 100644 --- a/data/assets/dashboard/simulationincrement.asset +++ b/data/assets/dashboard/simulationincrement.asset @@ -19,7 +19,6 @@ asset.export(Item) asset.meta = { Name = "Dashboard - Simulation Increment", - Version = "1.0", Description = [[This asset provides a dashboard item that shows the simulation increment, meaning how fast the in-game time progresses relative to the wall-clock]], Author = "OpenSpace Team", diff --git a/data/assets/dashboard/velocity.asset b/data/assets/dashboard/velocity.asset index b5368082b1..2db1b3a7a7 100644 --- a/data/assets/dashboard/velocity.asset +++ b/data/assets/dashboard/velocity.asset @@ -20,7 +20,6 @@ asset.export(Item) asset.meta = { Name = "Dashboard - Velocity", - Version = "1.0", Description = "This asset provides a dashboard item that shows the camera's velocity", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/default_keybindings.asset b/data/assets/default_keybindings.asset index fa0e93aa2e..7137dfe9ff 100644 --- a/data/assets/default_keybindings.asset +++ b/data/assets/default_keybindings.asset @@ -15,7 +15,9 @@ local ToggleShutdown = { Identifier = "os.ToggleShutdown", Name = "Toggle shutdown", Command = "openspace.toggleShutdown()", - Documentation = "Toggles the shutdown that will stop OpenSpace after a grace period. Press again to cancel the shutdown during this period", + Documentation = [[ + Toggles the shutdown that will stop OpenSpace after a grace period. Press again to + cancel the shutdown during this period]], GuiPath = "/System", IsLocal = true } @@ -24,7 +26,8 @@ local TakeScreenshot = { Identifier = "os.TakeScreenshot", Name = "Take screenshot", Command = "openspace.takeScreenshot()", - Documentation = "Saves the contents of the screen to a file in the ${SCREENSHOTS} directory", + Documentation = [[Saves the contents of the screen to a file in the ${SCREENSHOTS} + directory]], GuiPath = "/System/Rendering", IsLocal = true } @@ -51,40 +54,44 @@ local ToggleRotationFriction = { Identifier = "os.ToggleRotationFriction", Name = "Toggle rotation friction", Command = propertyHelper.invert("NavigationHandler.OrbitalNavigator.Friction.RotationalFriction"), - Documentation = "Toggles the rotational friction of the camera. If it is disabled, the camera rotates around the focus object indefinitely", + Documentation = [[Toggles the rotational friction of the camera. If it is disabled, the + camera rotates around the focus object indefinitely]], GuiPath = "/Navigation", - IsLocal = false + IsLocal = true } local ToggleZoomFriction = { Identifier = "os.ToggleZoomFriction", Name = "Toggle zoom friction", Command = propertyHelper.invert("NavigationHandler.OrbitalNavigator.Friction.ZoomFriction"), - Documentation = "Toggles the zoom friction of the camera. If it is disabled, the camera rises up from or closes in towards the focus object indefinitely", + Documentation = [[Toggles the zoom friction of the camera. If it is disabled, the camera + rises up from or closes in towards the focus object indefinitely]], GuiPath = "/Navigation", - IsLocal = false + IsLocal = true } local ToggleRollFriction = { Identifier = "os.ToggleRollFriction", Name = "Toggle roll friction", Command = propertyHelper.invert("NavigationHandler.OrbitalNavigator.Friction.RollFriction"), - Documentation = "Toggles the roll friction of the camera. If it is disabled, the camera rolls around its own axis indefinitely", + Documentation = [[Toggles the roll friction of the camera. If it is disabled, the camera + rolls around its own axis indefinitely]], GuiPath = "/Navigation", - IsLocal = false + IsLocal = true } local FadeToBlack = { Identifier = "os.FadeToBlack", Name = "Fade to/from black", Command = [[ - if openspace.getPropertyValue("RenderEngine.BlackoutFactor") > 0.5 then + if openspace.propertyValue("RenderEngine.BlackoutFactor") > 0.5 then openspace.setPropertyValueSingle("RenderEngine.BlackoutFactor", 0.0, 3) else openspace.setPropertyValueSingle("RenderEngine.BlackoutFactor", 1.0, 3) end ]], - Documentation = "Toggles the fade to black within 3 seconds or shows the rendering after 3 seconds", + Documentation = [[Toggles the fade to black within 3 seconds or shows the rendering + after 3 seconds]], GuiPath = "/Rendering", IsLocal = false } @@ -102,7 +109,7 @@ local ToggleOverlays = { Identifier = "os.ToggleOverlays", Name = "Toggle dashboard and overlays", Command = [[ - local isEnabled = openspace.getPropertyValue("Dashboard.IsEnabled") + local isEnabled = openspace.propertyValue("Dashboard.IsEnabled") openspace.setPropertyValueSingle("Dashboard.IsEnabled", not isEnabled) openspace.setPropertyValueSingle("RenderEngine.ShowLog", not isEnabled) openspace.setPropertyValueSingle("RenderEngine.ShowVersion", not isEnabled) @@ -126,7 +133,8 @@ local NextDeltaStepInterpolate = { Identifier = "os.NextDeltaStepInterpolate", Name = "Next simulation time step (interpolate)", Command = "openspace.time.interpolateNextDeltaTimeStep()", - Documentation = "Smoothly interpolates the simulation speed to the next simulation time step, if one exists", + Documentation = [[Smoothly interpolates the simulation speed to the next simulation time + step, if one exists]], GuiPath = "/Time/Simulation Speed", IsLocal = true } @@ -135,7 +143,8 @@ local NextDeltaStepImmediate = { Identifier = "os.NextDeltaStepImmediate", Name = "Next simulation time step (immediate)", Command = "openspace.time.setNextDeltaTimeStep()", - Documentation = "Immediately set the simulation speed to the next simulation time step, if one exists", + Documentation = [[Immediately set the simulation speed to the next simulation time step, + if one exists]], GuiPath = "/Time/Simulation Speed", IsLocal = true } @@ -144,7 +153,8 @@ local PreviousDeltaStepInterpolate = { Identifier = "os.PreviousDeltaStepInterpolate", Name = "Previous simulation time step (interpolate)", Command = "openspace.time.interpolatePreviousDeltaTimeStep()", - Documentation = "Smoothly interpolates the simulation speed to the previous simulation time step, if one exists", + Documentation = [[Smoothly interpolates the simulation speed to the previous simulation + time step, if one exists]], GuiPath = "/Time/Simulation Speed", IsLocal = true } @@ -153,7 +163,44 @@ local PreviousDeltaStepImmediate = { Identifier = "os.PreviousDeltaStepImmediate", Name = "Previous simulation time step (immediate)", Command = "openspace.time.setPreviousDeltaTimeStep()", - Documentation = "Immediately set the simulation speed to the previous simulation time step, if one exists", + Documentation = [[Immediately set the simulation speed to the previous simulation time + step, if one exists]], + GuiPath = "/Time/Simulation Speed", + IsLocal = true +} + +local RealTimeDeltaStepInterpolate = { + Identifier = "os.RealTimeDeltaStepInterpolate", + Name = "Reset the simulation time to realtime (interpolate)", + Command = "openspace.time.interpolateDeltaTime(1)", + Documentation = "Smoothly interpolate the simulation speed to match real-time speed", + GuiPath = "/Time/Simulation Speed", + IsLocal = true +} + +local RealTimeDeltaStepImmediate = { + Identifier = "os.RealTimeDeltaStepImmediate", + Name = "Reset the simulation time to realtime (immediate)", + Command = "openspace.time.setDeltaTime(1)", + Documentation = "Immediately set the simulation speed to match real-time speed", + GuiPath = "/Time/Simulation Speed", + IsLocal = true +} + +local DateToNowInterpolate = { + Identifier = "os.DateToNowInterpolate", + Name = "Set the in-game time to now (interpolate)", + Command = "openspace.time.interpolateTime(openspace.time.currentWallTime())", + Documentation = "Immediately set the current in-game time to the 'now' time", + GuiPath = "/Time/Simulation Speed", + IsLocal = true +} + +local DateToNowImmediate = { + Identifier = "os.DateToNowImmediate", + Name = "Set the in-game time to now (immediate)", + Command = "openspace.time.setTime(openspace.time.currentWallTime())", + Documentation = "Smoothly interpolate the current in-game time to the 'now' time", GuiPath = "/Time/Simulation Speed", IsLocal = true } @@ -167,6 +214,7 @@ local ReloadGui = { IsLocal = true } + asset.onInitialize(function() openspace.action.registerAction(ToggleNativeUi) openspace.bindKey("F1", ToggleNativeUi.Identifier) @@ -194,7 +242,7 @@ asset.onInitialize(function() openspace.bindKey("Ctrl+F", ToggleRollFriction.Identifier) openspace.action.registerAction(FadeToBlack) - openspace.bindKey("W", FadeToBlack.Identifier) + openspace.bindKey("B", FadeToBlack.Identifier) openspace.action.registerAction(ToggleMainGui) openspace.bindKey("TAB", ToggleMainGui.Identifier) @@ -217,6 +265,18 @@ asset.onInitialize(function() openspace.action.registerAction(PreviousDeltaStepImmediate) openspace.bindKey("Shift+Left", PreviousDeltaStepImmediate.Identifier) + openspace.action.registerAction(RealTimeDeltaStepInterpolate) + openspace.bindKey("Down", RealTimeDeltaStepInterpolate.Identifier) + + openspace.action.registerAction(RealTimeDeltaStepImmediate) + openspace.bindKey("Shift+Down", RealTimeDeltaStepImmediate.Identifier) + + openspace.action.registerAction(DateToNowInterpolate) + openspace.bindKey("Up", DateToNowInterpolate.Identifier) + + openspace.action.registerAction(DateToNowImmediate) + openspace.bindKey("Shift+Up", DateToNowImmediate.Identifier) + openspace.action.registerAction(ReloadGui) openspace.bindKey("F5", ReloadGui.Identifier) end) @@ -225,6 +285,18 @@ asset.onDeinitialize(function() openspace.clearKey("F5") openspace.action.removeAction(ReloadGui) + openspace.clearKey("Shift+Up") + openspace.action.removeAction(DateToNowImmediate) + + openspace.clearKey("Up") + openspace.action.removeAction(DateToNowInterpolate) + + openspace.clearKey("Shift+Down") + openspace.action.removeAction(RealTimeDeltaStepImmediate) + + openspace.clearKey("Down") + openspace.action.removeAction(RealTimeDeltaStepInterpolate) + openspace.clearKey("Shift+Left") openspace.action.removeAction(PreviousDeltaStepImmediate) @@ -246,7 +318,7 @@ asset.onDeinitialize(function() openspace.clearKey("TAB") openspace.action.removeAction(ToggleMainGui) - openspace.clearKey("W") + openspace.clearKey("B") openspace.action.removeAction(FadeToBlack) openspace.clearKey("Ctrl+F") diff --git a/data/assets/educational/epicycle.asset b/data/assets/educational/epicycle.asset new file mode 100644 index 0000000000..4726c13d46 --- /dev/null +++ b/data/assets/educational/epicycle.asset @@ -0,0 +1,78 @@ +asset.require("scene/solarsystem/planets/mercury/trail_earth") +asset.require("scene/solarsystem/planets/venus/trail_earth") +asset.require("scene/solarsystem/planets/mars/trail_earth") +asset.require("scene/solarsystem/planets/jupiter/trail_earth") +asset.require("scene/solarsystem/planets/saturn/trail_earth") +asset.require("scene/solarsystem/planets/uranus/trail_earth") +asset.require("scene/solarsystem/planets/neptune/trail_earth") + + +local FullCycleAction = { + Identifier = "os.epicycle.SetFull", + Name = "Set full epicycles", + Documentation = [[Sets EnableFade to false for all epicycle trails so that + they show the entire period]], + Command = [[openspace.setPropertyValue("*TrailEarth.Renderable.Appearance.EnableFade", false)]], + GuiPath = "/Trails/Epicycle", + IsLocal = false +} + +local FadedCycleAction = { + Identifier = "os.epicycle.SetFaded", + Name = "Set faded epicycles", + Documentation = [[Sets EnableFade to true for all epicycle trails so that + they match the default planet trails]], + Command = [[openspace.setPropertyValue("*TrailEarth.Renderable.Appearance.EnableFade", true)]], + GuiPath = "/Trails/Epicycle", + IsLocal = false +} + +local ShowCyclesAction = { + Identifier = "os.epicycle.ShowTrails", + Name = "Enable/Show epicycles", + Documentation = [[Enables and shows in all epicycle trails]], + Command = [[openspace.setPropertyValue("*TrailEarth.Renderable.Enabled", true); + openspace.setPropertyValue("*TrailEarth.Renderable.Fade", 1, 2);]], + GuiPath = "/Trails/Epicycle", + IsLocal = false +} + +local FadeoutCyclesAction = { + Identifier = "os.epicycle.HideTrails", + Name = "Hide epicycles", + Documentation = [[Hides all epicycle trails]], + Command = [[openspace.setPropertyValue("*TrailEarth.Renderable.Fade", 0, 2)]], + GuiPath = "/Trails/Epicycle", + IsLocal = false +} + + +asset.onInitialize(function() + openspace.action.registerAction(FullCycleAction) + openspace.action.registerAction(FadedCycleAction) + openspace.action.registerAction(ShowCyclesAction) + openspace.action.registerAction(FadeoutCyclesAction) +end) + +asset.onDeinitialize(function() + openspace.action.removeAction(FadeoutCyclesAction) + openspace.action.removeAction(ShowCyclesAction) + openspace.action.removeAction(FadedCycleAction) + openspace.action.removeAction(FullCycleAction) +end) + +asset.export("FullCycleAction", FullCycleAction.Identifier) +asset.export("FadedCycleAction", FadedCycleAction.Identifier) +asset.export("ShowCyclesAction", ShowCyclesAction.Identifier) +asset.export("FadeoutCyclesAction", FadeoutCyclesAction.Identifier) + + + +asset.meta = { + Name = "Epicycle", + Description = [[This asset includes the trails of the planets from earth. + In addition, it provides some actions for manipulating them.]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/educational/scale/arc_de_triomphe.asset b/data/assets/educational/scale/arc_de_triomphe.asset index 7b42395fae..7bc92f0c08 100644 --- a/data/assets/educational/scale/arc_de_triomphe.asset +++ b/data/assets/educational/scale/arc_de_triomphe.asset @@ -1,9 +1,9 @@ local earthAsset = asset.require("scene/solarsystem/planets/earth/earth") -local sunAsset = asset.require("scene/solarsystem/sun/sun") +local sunAsset = asset.require("scene/solarsystem/sun/transforms") -local modelFolder = asset.syncedResource({ +local modelFolder = asset.resource({ Name = "Scale Model Arc de Triomphe", Type = "HttpSynchronization", Identifier = "scale_model_arc_de_triomphe", @@ -40,6 +40,8 @@ local ScaleModel = { }, GUI = { Name = "Arc de Triomphe", + Description = [[The triumphal arch is 50 m (164 ft) tall and has a footprint of + 45x22 m (148x72 ft).]], Path = "/Scale Objects" } } @@ -83,3 +85,14 @@ end) asset.export(ScaleModel) asset.export("UpdatePositionAction", UpdatePositionAction.Identifier) asset.export("ResetPositionAction", ResetPositionAction.Identifier) + + +asset.meta = { + Name = "Scale Model - Arc de Triomphe", + Description = [[A 1:1 scale model of the Arc de Triomphe. Per default it is placed at + its actual position in Paris, France. But the asset also includes actions to move it + to a position under the camera, or back to its original position.]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/educational/scale/big_ben.asset b/data/assets/educational/scale/big_ben.asset index b5a88e6eff..c02bba6d28 100644 --- a/data/assets/educational/scale/big_ben.asset +++ b/data/assets/educational/scale/big_ben.asset @@ -1,9 +1,9 @@ local earthAsset = asset.require("scene/solarsystem/planets/earth/earth") -local sunAsset = asset.require("scene/solarsystem/sun/sun") +local sunAsset = asset.require("scene/solarsystem/sun/transforms") -local modelFolder = asset.syncedResource({ +local modelFolder = asset.resource({ Name = "Scale Model Big Ben", Type = "HttpSynchronization", Identifier = "scale_model_big_ben", @@ -42,6 +42,7 @@ local ScaleModel = { }, GUI = { Name = "Big Ben", + Description = "The clock tower is 96 m (316 ft) tall.", Path = "/Scale Objects" } } @@ -85,3 +86,14 @@ end) asset.export(ScaleModel) asset.export("UpdatePositionAction", UpdatePositionAction.Identifier) asset.export("ResetPositionAction", ResetPositionAction.Identifier) + + +asset.meta = { + Name = "Scale Model - Big Ben", + Description = [[A 1:1 scale model of the Big Ben. Per default it is placed at its + actual position in London, England. But the asset also includes actions to move + it to a position under the camera, or back to its original position.]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/educational/scale/burj_khalifa.asset b/data/assets/educational/scale/burj_khalifa.asset index b69921106b..5fee28a602 100644 --- a/data/assets/educational/scale/burj_khalifa.asset +++ b/data/assets/educational/scale/burj_khalifa.asset @@ -1,15 +1,13 @@ local earthAsset = asset.require("scene/solarsystem/planets/earth/earth") -local sunAsset = asset.require("scene/solarsystem/sun/sun") +local sunAsset = asset.require("scene/solarsystem/sun/transforms") -local modelFolder = asset.syncedResource({ - Name = "Scale Burj Khalifa", - Type = "UrlSynchronization", +local modelFolder = asset.resource({ + Name = "Scale Model Burj Khalifa", + Type = "HttpSynchronization", Identifier = "scale_model_burj_khalifa", - Url = "https://wms.openspace.amnh.org/static/sync/url/scalemodels/Burj_Khalifa.osmodel", - Filename = "Burj_Khalifa.osmodel", - Override = false + Version = 1 }) @@ -43,6 +41,8 @@ local ScaleModel = { }, GUI = { Name = "Burj Khalifa", + Description = [[The skyscraper is 830 m (2,722 ft) tall, and the tallest in the + world as of 2009.]], Path = "/Scale Objects" } } @@ -85,3 +85,14 @@ end) asset.export(ScaleModel) asset.export("UpdatePositionAction", UpdatePositionAction.Identifier) asset.export("ResetPositionAction", ResetPositionAction.Identifier) + + +asset.meta = { + Name = "Scale Model - Burj Khalifa", + Description = [[A 1:1 scale model of the Burj Khalifa. Per default it is placed at its + actual position in Dubai. But the asset also includes actions to move it to a + position under the camera, or back to its original position.]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/educational/scale/eiffeltower.asset b/data/assets/educational/scale/eiffeltower.asset index 4437cdedab..1bcef38700 100644 --- a/data/assets/educational/scale/eiffeltower.asset +++ b/data/assets/educational/scale/eiffeltower.asset @@ -1,9 +1,9 @@ local earthAsset = asset.require("scene/solarsystem/planets/earth/earth") -local sunAsset = asset.require("scene/solarsystem/sun/sun") +local sunAsset = asset.require("scene/solarsystem/sun/transforms") -local modelFolder = asset.syncedResource({ +local modelFolder = asset.resource({ Name = "Scale Eiffel Tower", Type = "HttpSynchronization", Identifier = "scale_model_eiffel_tower", @@ -31,10 +31,6 @@ local ScaleModel = { Globe = earthAsset.Earth.Identifier, Latitude = Location[1], Longitude = Location[2] - }, - Scale = { - Type = "StaticScale", - Scale = 4.38 } }, Renderable = { @@ -42,10 +38,11 @@ local ScaleModel = { GeometryFile = modelFolder .. "eiffeltower.osmodel", RotationVector = { 0.0, 45.0, 0.0 }, LightSources = { sunAsset.LightSource }, - ModelScale = "Centimeter" + ModelScale = 0.0438 }, GUI = { Name = "Eiffel Tower", + Description = "The tower is 330 m (1,083 ft) tall.", Path = "/Scale Objects" } } @@ -89,3 +86,14 @@ end) asset.export(ScaleModel) asset.export("UpdatePositionAction", UpdatePositionAction.Identifier) asset.export("ResetPositionAction", ResetPositionAction.Identifier) + + +asset.meta = { + Name = "Scale Model - Eiffel Tower", + Description = [[A 1:1 scale model of the Eiffel Tower. Per default it is placed at + its actual position in Paris, France. But the asset also includes actions to move it + to a position under the camera, or back to its original position.]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/educational/scale/empire_state_building.asset b/data/assets/educational/scale/empire_state_building.asset index 0ba6828e1f..34dd5f56ad 100644 --- a/data/assets/educational/scale/empire_state_building.asset +++ b/data/assets/educational/scale/empire_state_building.asset @@ -1,9 +1,9 @@ local earthAsset = asset.require("scene/solarsystem/planets/earth/earth") -local sunAsset = asset.require("scene/solarsystem/sun/sun") +local sunAsset = asset.require("scene/solarsystem/sun/transforms") -local modelFolder = asset.syncedResource({ +local modelFolder = asset.resource({ Name = "Scale Empire State Building", Type = "HttpSynchronization", Identifier = "scale_model_empire_state", @@ -45,6 +45,8 @@ local ScaleModel = { }, GUI = { Name = "Empire State Building", + Description = [[The building is 443 m (1,454 ft) tall, including the spire, and has + 102 floors. It has a footprint of 129x57 m (424x187 ft).]], Path = "/Scale Objects" } } @@ -88,3 +90,14 @@ end) asset.export(ScaleModel) asset.export("UpdatePositionAction", UpdatePositionAction.Identifier) asset.export("ResetPositionAction", ResetPositionAction.Identifier) + + +asset.meta = { + Name = "Scale Model - Empire State Building", + Description = [[A 1:1 scale model of the Empire State Building. Per default it is + placed at its actual position in New York City. But the asset also includes actions + to move it to a position under the camera, or back to its original position.]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/educational/scale/gateway_arch.asset b/data/assets/educational/scale/gateway_arch.asset index 28e89ee780..b65fb14b97 100644 --- a/data/assets/educational/scale/gateway_arch.asset +++ b/data/assets/educational/scale/gateway_arch.asset @@ -1,19 +1,17 @@ local earthAsset = asset.require("scene/solarsystem/planets/earth/earth") -local sunAsset = asset.require("scene/solarsystem/sun/sun") +local sunAsset = asset.require("scene/solarsystem/sun/transforms") -local modelFolder = asset.syncedResource({ +local modelFolder = asset.resource({ Name = "Scale Gateway Arch", - Type = "UrlSynchronization", + Type = "HttpSynchronization", Identifier = "scale_model_gateway_arch", - Url = "https://wms.openspace.amnh.org/static/sync/url/scalemodels/GatewayArch_fbx.osmodel", - Filename = "GatewayArch_fbx.osmodel", - Override = false + Version = 2 }) -local Location = { 38.624880, -90.184939 } +local Location = { 38.624640, -90.184940 } local ScaleModel = { Identifier = "Scale_GatewayArch", @@ -36,17 +34,19 @@ local ScaleModel = { }, Scale = { Type = "StaticScale", - Scale = 0.5 + Scale = 1.1 } }, Renderable = { Type = "RenderableModel", - GeometryFile = modelFolder .. "GatewayArch_fbx.osmodel", + GeometryFile = modelFolder .. "GatewayArch.osmodel", RotationVector = { 0.0, 157.0, 0.0 }, - LightSources = { sunAsset.LightSource } + LightSources = { sunAsset.LightSource }, + ModelScale = "Centimeter" }, GUI = { Name = "Gateway Arch", + Description = "The arch monument is 192 m (630 ft) tall.", Path = "/Scale Objects" } } @@ -90,3 +90,14 @@ end) asset.export(ScaleModel) asset.export("UpdatePositionAction", UpdatePositionAction.Identifier) asset.export("ResetPositionAction", ResetPositionAction.Identifier) + + +asset.meta = { + Name = "Scale Model - Gateway Arch", + Description = [[A 1:1 scale model of the Gateway Arch. Per default it is placed at its + actual position in Saint Louis, Missouri. But the asset also includes actions to move + it to a position under the camera, or back to its original position.]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/educational/scale/golden_gate_bridge.asset b/data/assets/educational/scale/golden_gate_bridge.asset index d0ee73f63a..f9f4723ccb 100644 --- a/data/assets/educational/scale/golden_gate_bridge.asset +++ b/data/assets/educational/scale/golden_gate_bridge.asset @@ -1,15 +1,13 @@ local earthAsset = asset.require("scene/solarsystem/planets/earth/earth") -local sunAsset = asset.require("scene/solarsystem/sun/sun") +local sunAsset = asset.require("scene/solarsystem/sun/transforms") -local modelFolder = asset.syncedResource({ +local modelFolder = asset.resource({ Name = "Scale Golden Gate Bridge", - Type = "UrlSynchronization", + Type = "HttpSynchronization", Identifier = "scale_model_golden_gate_bridge", - Url = "https://wms.openspace.amnh.org/static/sync/url/scalemodels/golden_gate.osmodel", - Filename = "golden_gate.osmodel", - Override = false + Version = 2 }) @@ -48,6 +46,7 @@ local ScaleModel = { }, GUI = { Name = "Golden Gate Bridge", + Description = "The bridge is 2,737 m (8,980 ft) long and 227 m (746 ft) high.", Path = "/Scale Objects" } } @@ -91,3 +90,14 @@ end) asset.export(ScaleModel) asset.export("UpdatePositionAction", UpdatePositionAction.Identifier) asset.export("ResetPositionAction", ResetPositionAction.Identifier) + + +asset.meta = { + Name = "Scale Model - Golden Gate Bridge", + Description = [[A 1:1 scale model of the Golden Gate Bridge. Per default it is placed + at its actual position in San Fransisco. But the asset also includes actions to move + it to a position under the camera, or back to its original position.]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/educational/scale/kuala_lumpur_tower.asset b/data/assets/educational/scale/kuala_lumpur_tower.asset index 24faa8229a..c42a7ac38e 100644 --- a/data/assets/educational/scale/kuala_lumpur_tower.asset +++ b/data/assets/educational/scale/kuala_lumpur_tower.asset @@ -1,9 +1,9 @@ local earthAsset = asset.require("scene/solarsystem/planets/earth/earth") -local sunAsset = asset.require("scene/solarsystem/sun/sun") +local sunAsset = asset.require("scene/solarsystem/sun/transforms") -local modelFolder = asset.syncedResource({ +local modelFolder = asset.resource({ Name = "Scale Kuala Lumpur Tower", Type = "HttpSynchronization", Identifier = "scale_model_kuala_lumpur_tower", @@ -40,6 +40,7 @@ local ScaleModel = { }, GUI = { Name = "Kuala Lumpur Tower", + Description = "The tower is 421 m (1,381 ft) tall.", Path = "/Scale Objects" } } @@ -83,3 +84,14 @@ end) asset.export(ScaleModel) asset.export("UpdatePositionAction", UpdatePositionAction.Identifier) asset.export("ResetPositionAction", ResetPositionAction.Identifier) + + +asset.meta = { + Name = "Scale Model - Kuala Lumpur Tower", + Description = [[A 1:1 scale model of the Kuala Lumpur Tower. Per default it is placed + at its actual position in Kuala Lumpur, Malaysia. But the asset also includes actions + to move it to a position under the camera, or back to its original position.]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/educational/scale/rose_bowl.asset b/data/assets/educational/scale/rose_bowl.asset index 97f93c86fd..6683d55278 100644 --- a/data/assets/educational/scale/rose_bowl.asset +++ b/data/assets/educational/scale/rose_bowl.asset @@ -1,9 +1,9 @@ local earthAsset = asset.require("scene/solarsystem/planets/earth/earth") -local sunAsset = asset.require("scene/solarsystem/sun/sun") +local sunAsset = asset.require("scene/solarsystem/sun/transforms") -local modelFolder = asset.syncedResource({ +local modelFolder = asset.resource({ Name = "Scale Rose Bowl", Type = "HttpSynchronization", Identifier = "scale_model_rose_bowl", @@ -41,6 +41,10 @@ local ScaleModel = { }, GUI = { Name = "Rose Bowl", + Description = [[The stadium seats over 92,000 people, with 77 rows of seats. It + measures 880 feet (268 meters) from the north rim to the south rim, and 695 feet + (212 meters) from east to west. The turfed area is 79,156 square feet (7354 + square meters).]], Path = "/Scale Objects" } } @@ -84,3 +88,14 @@ end) asset.export(ScaleModel) asset.export("UpdatePositionAction", UpdatePositionAction.Identifier) asset.export("ResetPositionAction", ResetPositionAction.Identifier) + + +asset.meta = { + Name = "Scale Model - Rose Bowl Stadium", + Description = [[A 1:1 scale model of the Rose Bowl Stadium. Per default it is placed + at its actual position in Pasadena, California. But the asset also includes actions + to move it to a position under the camera, or back to its original position.]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/educational/scale/school_bus.asset b/data/assets/educational/scale/school_bus.asset index 8147de93ff..6899a9ba72 100644 --- a/data/assets/educational/scale/school_bus.asset +++ b/data/assets/educational/scale/school_bus.asset @@ -1,9 +1,9 @@ local earthAsset = asset.require("scene/solarsystem/planets/earth/earth") -local sunAsset = asset.require("scene/solarsystem/sun/sun") +local sunAsset = asset.require("scene/solarsystem/sun/transforms") -local modelFolder = asset.syncedResource({ +local modelFolder = asset.resource({ Name = "Scale School Bus", Type = "HttpSynchronization", Identifier = "scale_model_school_bus", @@ -41,6 +41,8 @@ local ScaleModel = { }, GUI = { Name = "School bus", + Desription = [[The average length of a full size US school bus is above 35 feet + (10.7 meters).]], Path = "/Scale Objects" } } @@ -61,7 +63,7 @@ local ResetPositionAction = { Name = "Reset School bus position", Command = [[ openspace.globebrowsing.setNodePosition("Scale_SchoolBus", "]] .. earthAsset.Earth.Identifier .. [[", ]] .. Location[1] .. "," .. Location[2] .. ")", - Documentation = "Resets the school bus back to its actual location", + Documentation = "Resets the school bus back to its start location", GuiPath = "/Scale Objects", IsLocal = false } @@ -83,3 +85,13 @@ end) asset.export(ScaleModel) asset.export("UpdatePositionAction", UpdatePositionAction.Identifier) asset.export("ResetPositionAction", ResetPositionAction.Identifier) + + +asset.meta = { + Name = "Scale Model - Eiffel Tower", + Description = [[A 1:1 scale model of a US school bus, with actions to move + it to a position under the camera, or back to its start position.]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/educational/scale/scientist.asset b/data/assets/educational/scale/scientist.asset index 14d0139859..99ceb4f95f 100644 --- a/data/assets/educational/scale/scientist.asset +++ b/data/assets/educational/scale/scientist.asset @@ -1,9 +1,9 @@ local earthAsset = asset.require("scene/solarsystem/planets/earth/earth") -local sunAsset = asset.require("scene/solarsystem/sun/sun") +local sunAsset = asset.require("scene/solarsystem/sun/transforms") -local modelFolder = asset.syncedResource({ +local modelFolder = asset.resource({ Name = "Scale Model Scientist", Type = "HttpSynchronization", Identifier = "scale_model_scientist", @@ -41,6 +41,7 @@ local ScaleModel = { }, GUI = { Name = "Scientist", + Description = [[The average height of a human is a bit under 170 cm (5'7").]], Path = "/Scale Objects" } } @@ -84,3 +85,13 @@ end) asset.export(ScaleModel) asset.export("UpdatePositionAction", UpdatePositionAction.Identifier) asset.export("ResetPositionAction", ResetPositionAction.Identifier) + + +asset.meta = { + Name = "Scale Model - Eiffel Tower", + Description = [[A 1:1 scale model of a human scientist, with actions to move + it to a position under the camera, or back to its start position.]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/educational/scale/statue_of_liberty.asset b/data/assets/educational/scale/statue_of_liberty.asset index c01e96f0f0..d865b9ac81 100644 --- a/data/assets/educational/scale/statue_of_liberty.asset +++ b/data/assets/educational/scale/statue_of_liberty.asset @@ -1,9 +1,9 @@ local earthAsset = asset.require("scene/solarsystem/planets/earth/earth") -local sunAsset = asset.require("scene/solarsystem/sun/sun") +local sunAsset = asset.require("scene/solarsystem/sun/transforms") -local modelFolder = asset.syncedResource({ +local modelFolder = asset.resource({ Name = "Scale Model Statue of Liberty", Type = "HttpSynchronization", Identifier = "scale_model_statue_of_liberty", @@ -11,7 +11,7 @@ local modelFolder = asset.syncedResource({ }) -local Location = { 48.87389, 2.29492, -3.0 } +local Location = { 40.689206, -74.044487, -3.0 } local ScaleModel = { Identifier = "Scale_StatueOfLiberty", @@ -41,6 +41,8 @@ local ScaleModel = { }, GUI = { Name = "Statue of Liberty", + Description = [[From ground level, the statue is 93 meters (305 feet) tall, up to the + torch.]], Path = "/Scale Objects" } } @@ -84,3 +86,15 @@ end) asset.export(ScaleModel) asset.export("UpdatePositionAction", UpdatePositionAction.Identifier) asset.export("ResetPositionAction", ResetPositionAction.Identifier) + + +asset.meta = { + Name = "Scale Model - Statue of Liberty", + Description = [[A 1:1 scale model of the Statue of Liberty. Per default it is + placed at its actual position on Liberty Island in New York City. But the asset + also includes actions to move it to a position under the camera, or back to its + original position.]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/events/toggle_sun.asset b/data/assets/events/toggle_sun.asset index bb1a09a17d..5da2652bd7 100644 --- a/data/assets/events/toggle_sun.asset +++ b/data/assets/events/toggle_sun.asset @@ -7,7 +7,7 @@ local ToggleSun = { return end - if not openspace.getPropertyValue("Scene.Sun.Renderable.Enabled") then + if not openspace.propertyValue("Scene.Sun.Renderable.Enabled") then openspace.setPropertyValueSingle("Scene.Sun.Renderable.Enabled", true) end @@ -61,7 +61,6 @@ asset.export("ToggleSun", ToggleSun.Identifier) asset.meta = { Name = "Actions - Toggle current Trails", - Version = "1.0", Description = "Asset providing actions to toggle trails", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/examples/animation.asset b/data/assets/examples/animation.asset deleted file mode 100644 index b715ad7293..0000000000 --- a/data/assets/examples/animation.asset +++ /dev/null @@ -1,198 +0,0 @@ -local sun = asset.require("scene/solarsystem/sun/sun") -local transforms = asset.require("scene/solarsystem/planets/earth/transforms") - - - -local model = asset.syncedResource({ - Name = "Animated Box", - Type = "HttpSynchronization", - Identifier = "animated_box", - Version = 1 -}) - - -local StartTime = "2021 06 01 00:00:00" - -local AnimationLoop = { - Identifier = "AnimationLoop", - Parent = transforms.EarthCenter.Identifier, - Transform = { - Translation = { - Type = "StaticTranslation", - Position = { 0.0, -11E7, 0.0 } - } - }, - Renderable = { - Type = "RenderableModel", - GeometryFile = model .. "BoxAnimated.glb", - EnableAnimation = true, - AnimationMode = "LoopFromStart", - AnimationStartTime = StartTime, - ModelScale = 3E7, - LightSources = { - sun.LightSource - } - }, - GUI = { - Name = "Animated Model example (LoopFromStart)", - Path = "/Example", - Description = "Simple animated box model with the animation mode 'LoopFromStart'" - } -} - -local AnimationLoopInf = { - Identifier = "AnimationLoopInf", - Parent = transforms.EarthCenter.Identifier, - Transform = { - Translation = { - Type = "StaticTranslation", - Position = { 0.0, 11E7, 0.0 } - } - }, - Renderable = { - Type = "RenderableModel", - GeometryFile = model .. "BoxAnimated.glb", - EnableAnimation = true, - AnimationMode = "LoopInfinitely", - AnimationStartTime = StartTime, - ModelScale = 3E7, - LightSources = { - sun.LightSource - } - }, - GUI = { - Name = "Animated Model example (LoopInfinitely)", - Path = "/Example", - Description = "Simple animated box model with the animation mode 'LoopInfinitely'" - } -} - -local AnimationOnce = { - Identifier = "AnimationOnce", - Parent = transforms.EarthCenter.Identifier, - Transform = { - Translation = { - Type = "StaticTranslation", - Position = { 11E7, 0.0, 0.0 } - } - }, - Renderable = { - Type = "RenderableModel", - GeometryFile = model .. "BoxAnimated.glb", - EnableAnimation = true, - AnimationMode = "Once", - AnimationStartTime = StartTime, - ModelScale = 3E7, - LightSources = { - sun.LightSource - } - }, - GUI = { - Name = "Animated Model example (Once)", - Path = "/Example", - Description = "Simple animated box model with the animation mode 'Once'" - } -} - -local AnimationBounceInf = { - Identifier = "AnimationBounceInf", - Parent = transforms.EarthCenter.Identifier, - Transform = { - Translation = { - Type = "StaticTranslation", - Position = { 0.0, 0.0, 11E7 } - } - }, - Renderable = { - Type = "RenderableModel", - GeometryFile = model .. "BoxAnimated.glb", - EnableAnimation = true, - AnimationMode = "BounceInfinitely", - AnimationStartTime = StartTime, - ModelScale = 3E7, - LightSources = { - sun.LightSource - } - }, - GUI = { - Name = "Animated Model example (BounceInfinitely)", - Path = "/Example", - Description = "Simple animated box model with the animation mode 'BounceInfinitely'" - } -} - -local AnimationBounce = { - Identifier = "AnimationBounce", - Parent = transforms.EarthCenter.Identifier, - Transform = { - Translation = { - Type = "StaticTranslation", - Position = { 0.0, 0.0, -11E7 } - } - }, - Renderable = { - Type = "RenderableModel", - GeometryFile = model .. "BoxAnimated.glb", - EnableAnimation = true, - AnimationMode = "BounceFromStart", - AnimationStartTime = StartTime, - ModelScale = 3E7, - LightSources = { - sun.LightSource - } - }, - GUI = { - Name = "Animated Model example (BounceFromStart)", - Path = "/Example", - Description = "Simple animated box model with the animation mode 'BounceFromStart'" - } -} - - -asset.onInitialize(function() - openspace.addSceneGraphNode(AnimationLoop) - openspace.addSceneGraphNode(AnimationLoopInf) - openspace.addSceneGraphNode(AnimationOnce) - openspace.addSceneGraphNode(AnimationBounceInf) - openspace.addSceneGraphNode(AnimationBounce) -end) - -asset.onDeinitialize(function() - openspace.removeSceneGraphNode(AnimationBounce) - openspace.removeSceneGraphNode(AnimationBounceInf) - openspace.removeSceneGraphNode(AnimationOnce) - openspace.removeSceneGraphNode(AnimationLoopInf) - openspace.removeSceneGraphNode(AnimationLoop) -end) - - -asset.export(AnimationLoop) -asset.export(AnimationLoopInf) -asset.export(AnimationOnce) -asset.export(AnimationBounceInf) -asset.export(AnimationBounce) - - - -asset.meta = { - Name = "Animation Example asset", - Version = "1.0", - Description = "Simple animation example asset with an animated box model", - Author = "OpenSpace Team", - URL = "http://openspaceproject.com", - License = "MIT license" -} - --- Model --- @TODO: At the moment, this overwrites the previous meta description. Probably needs a way to specify multiple meta's per file? -asset.meta = { - Name = "Animated Box Model", - Version = "1.0", - Description = "Simple animated box model", - Author = "Cesium, https://cesium.com/", - URL = "https://github.com/KhronosGroup/glTF-Sample-Models/tree/master/2.0/BoxAnimated", - License = [[ - Creative Commons Attribution 4.0 International License, - https://creativecommons.org/licenses/by/4.0/ - ]] -} diff --git a/data/assets/examples/approachevents.asset b/data/assets/examples/approachevents.asset index 7d68868671..276f1a6cb6 100644 --- a/data/assets/examples/approachevents.asset +++ b/data/assets/examples/approachevents.asset @@ -1,9 +1,9 @@ -local sun = asset.require("scene/solarsystem/sun/sun") +local sun = asset.require("scene/solarsystem/sun/transforms") local transforms = asset.require("scene/solarsystem/planets/earth/transforms") -local model = asset.syncedResource({ +local model = asset.resource({ Name = "Animated Box", Type = "HttpSynchronization", Identifier = "animated_box", @@ -48,8 +48,8 @@ local Model = { OnRecede = { "os.example.generic" }, OnExit = { "os.example.generic" }, GUI = { - Name = "Example Event Model", - Path = "/Example" + Name = "Event Model", + Path = "/Examples" } } diff --git a/data/assets/examples/audio/audio_playback.asset b/data/assets/examples/audio/audio_playback.asset new file mode 100644 index 0000000000..b236dd744d --- /dev/null +++ b/data/assets/examples/audio/audio_playback.asset @@ -0,0 +1,21 @@ +-- Lets first download a file that we can use for our examples. If you have files +-- locally, you can skip this part. +-- The song in the example comes from https://incompetech.com/ which is a fantastic +-- webpage for very high quality royalty-free music +openspace.downloadFile( + "https://incompetech.com/music/royalty-free/mp3-royaltyfree/Arcadia.mp3", + openspace.absPath("${TEMPORARY}/Arcadia.mp3"), + true +) + +local soundName = "Example_Sound_1" + +asset.onInitialize(function() + -- Start playing the song immediately + openspace.audio.playAudio(openspace.absPath("${TEMPORARY}/Arcadia.mp3"), soundName) +end) + +asset.onDeinitialize(function() + -- When we remove this asset, we want to audio to stop playing no matter what + openspace.audio.stopAudio(soundName) +end) diff --git a/data/assets/examples/audio/audio_playback_advanced.asset b/data/assets/examples/audio/audio_playback_advanced.asset new file mode 100644 index 0000000000..44a4b0d119 --- /dev/null +++ b/data/assets/examples/audio/audio_playback_advanced.asset @@ -0,0 +1,71 @@ +-- Lets first download a file that we can use for our examples. If you have files +-- locally, you can skip this part. +-- The song in the example comes from https://incompetech.com/ which is a fantastic +-- webpage for very high quality royalty-free music +openspace.downloadFile( + "https://incompetech.com/music/royalty-free/mp3-royaltyfree/Sneaky%20Adventure.mp3", + openspace.absPath("${TEMPORARY}/SneakyAdventure.mp3"), + true +) +local soundName = "Advanced_Example_Sound_1" + +local panleft = { + Identifier = "os.examples.PanLeft", + Name = "Example Audio Pan Left", + Command = [[openspace.audio.set3dSourcePosition("Advanced_Example_Sound_1", { -1, 0, 0 })]], + GuiPath = "/Examples/Audio" +} + +local pancenter = { + Identifier = "os.examples.PanCenter", + Name = "Example Audio Pan Center", + Command = [[openspace.audio.set3dSourcePosition("Advanced_Example_Sound_1", { 0, 0, 0 })]], + GuiPath = "/Examples/Audio" +} + +local panright = { + Identifier = "os.examples.PanRight", + Name = "Example Audio Pan Right", + Command = [[openspace.audio.set3dSourcePosition("Advanced_Example_Sound_1", { 1, 0, 0 })]], + GuiPath = "/Examples/Audio" +} + +local lowvolume = { + Identifier = "os.examples.LowVolume", + Name = "Example Audio Volume Low", + Command = [[openspace.audio.setVolume("Advanced_Example_Sound_1", 0.15)]], + GuiPath = "/Examples/Audio" +} + +local fullvolume = { + Identifier = "os.examples.FullVolume", + Name = "Example Audio Volume Full", + Command = [[openspace.audio.setVolume("Advanced_Example_Sound_1", 1.0)]], + GuiPath = "/Examples/Audio" +} + +asset.onInitialize(function() + -- Start playing the song immediately in 3D. Place the audio straight in front of us + openspace.audio.playAudio3d( + openspace.absPath("${TEMPORARY}/SneakyAdventure.mp3"), + soundName, + { 0.0, 0.0, 0.0 } + ) + + openspace.action.registerAction(panleft) + openspace.action.registerAction(pancenter) + openspace.action.registerAction(panright) + openspace.action.registerAction(lowvolume) + openspace.action.registerAction(fullvolume) +end) + +asset.onDeinitialize(function() + openspace.action.removeAction(fullvolume) + openspace.action.removeAction(lowvolume) + openspace.action.removeAction(panright) + openspace.action.removeAction(pancenter) + openspace.action.removeAction(panleft) + + -- When we remove this asset, we want to audio to stop playing no matter what + openspace.audio.stopAudio(soundName) +end) diff --git a/data/assets/examples/dashboarditems.asset b/data/assets/examples/dashboarditems.asset index cb6cdad74e..a072f0c44d 100644 --- a/data/assets/examples/dashboarditems.asset +++ b/data/assets/examples/dashboarditems.asset @@ -1,7 +1,9 @@ +asset.require("scene/solarsystem/planets/earth/earth") +asset.require("scene/solarsystem/planets/earth/moon/moon") + local Angle = { Type = "DashboardItemAngle", Identifier = "Angle", - GuiName = "Angle", ReferenceType = "Node", ReferenceNodeName = "Earth", DestinationType = "Node", @@ -10,8 +12,7 @@ local Angle = { local Date = { Type = "DashboardItemDate", - Identifier = "Date", - GuiName = "Date" + Identifier = "Date" } local SimulationIncrement = { @@ -22,14 +23,12 @@ local SimulationIncrement = { local Distance = { Type = "DashboardItemDistance", - Identifier = "Distance", - GuiName = "Distance" + Identifier = "Distance" } local Framerate = { Type = "DashboardItemFramerate", - Identifier = "Framerate", - GuiName = "Framerate" + Identifier = "Framerate" } local ParallelConnection = { @@ -40,18 +39,79 @@ local ParallelConnection = { local Mission = { Type = "DashboardItemMission", - Identifier = "Mission", - GuiName = "Mission" + Identifier = "Mission" } local PropertyValue = { Type = "DashboardItemPropertyValue", - Identifier = "asd", - GuiName = "adasd", + Identifier = "DashbaordItemPropertyValue", URI = "Scene.Earth.Renderable.Enabled", DisplayString = "Earth is enabled: {}" } +local PropertyValueFloat = { + Type = "DashboardItemPropertyValue", + Identifier = "DashbaordItemPropertyValue_Float", + URI = "Scene.Earth.Renderable.TargetLodScaleFactor", + DisplayString = "Earth LOD is {:.5f}" +} + +local PropertyValueDouble = { + Type = "DashboardItemPropertyValue", + Identifier = "DashbaordItemPropertyValue_Double", + URI = "NavigationHandler.PathNavigator.ArrivalDistanceFactor", + DisplayString = "Arrival Distance Factor is {:.8f}" +} + +local PropertyValueInt = { + Type = "DashboardItemPropertyValue", + Identifier = "DashbaordItemPropertyValue_Int", + URI = "LuaConsole.HistoryLength", + DisplayString = "History length is {}" +} + +local PropertyValueUInt = { + Type = "DashboardItemPropertyValue", + Identifier = "DashboardItemPropertyValue_UInt", + URI = "Modules.Globebrowsing.TileCacheSize", + DisplayString = "Tile Cache Size is {}" +} + +local PropertyValueDVec3 = { + Type = "DashboardItemPropertyValue", + Identifier = "DashboardItemPropertyValue_DVec3", + URI = "Scene.SolarSystemBarycenter.Transform.Transform", + DisplayString = "SSB Transform is: ({}, {}, {})" +} + +local PropertyValueIVec2 = { + Type = "DashboardItemPropertyValue", + Identifier = "DashboardItemPropertyValue_IVec2", + URI = "Scene.SolarSystemBarycenter.Renderable.ScreenSpacePosition", + DisplayString = "Random ScreenSpace Position: ({}, {})" +} + +local PropertyValueVec2 = { + Type = "DashboardItemPropertyValue", + Identifier = "DashboardItemPropertyValue_Vec2", + URI = "Scene.EarthAtmosphere.Renderable.AtmosphereDimmingSunsetAngle", + DisplayString = "Sunset Angle is ({}, {})" +} + +local PropertyValueVec3 = { + Type = "DashboardItemPropertyValue", + Identifier = "DashboardItemPropertyValue_Vec3", + URI = "RenderEngine.GlobalRotation", + DisplayString = "Global Rotation is ({}, {}, {})" +} + +local PropertyValueVec4 = { + Type = "DashboardItemPropertyValue", + Identifier = "DashboardItemPropertyValue_Vec4", + URI = "LuaConsole.BackgroundColor", + DisplayString = "Background Coolor is ({}, {}, {}, {})" +} + local ElapsedTime = { Type = "DashboardItemElapsedTime", Identifier = "ElapsedTime", @@ -73,6 +133,15 @@ asset.onInitialize(function() openspace.dashboard.addDashboardItem(ParallelConnection) openspace.dashboard.addDashboardItem(Mission) openspace.dashboard.addDashboardItem(PropertyValue) + openspace.dashboard.addDashboardItem(PropertyValueFloat) + openspace.dashboard.addDashboardItem(PropertyValueDouble) + openspace.dashboard.addDashboardItem(PropertyValueInt) + openspace.dashboard.addDashboardItem(PropertyValueUInt) + openspace.dashboard.addDashboardItem(PropertyValueDVec3) + openspace.dashboard.addDashboardItem(PropertyValueIVec2) + openspace.dashboard.addDashboardItem(PropertyValueVec2) + openspace.dashboard.addDashboardItem(PropertyValueVec3) + openspace.dashboard.addDashboardItem(PropertyValueVec4) openspace.dashboard.addDashboardItem(ElapsedTime) openspace.dashboard.addDashboardItem(InputState) end) @@ -80,6 +149,15 @@ end) asset.onDeinitialize(function() openspace.dashboard.removeDashboardItem(InputState) openspace.dashboard.removeDashboardItem(ElapsedTime) + openspace.dashboard.removeDashboardItem(PropertyValueVec4) + openspace.dashboard.removeDashboardItem(PropertyValueVec3) + openspace.dashboard.removeDashboardItem(PropertyValueVec2) + openspace.dashboard.removeDashboardItem(PropertyValueIVec2) + openspace.dashboard.removeDashboardItem(PropertyValueDVec3) + openspace.dashboard.removeDashboardItem(PropertyValueUInt) + openspace.dashboard.removeDashboardItem(PropertyValueInt) + openspace.dashboard.removeDashboardItem(PropertyValueDouble) + openspace.dashboard.removeDashboardItem(PropertyValueFloat) openspace.dashboard.removeDashboardItem(PropertyValue) openspace.dashboard.removeDashboardItem(Mission) openspace.dashboard.removeDashboardItem(ParallelConnection) @@ -98,5 +176,26 @@ asset.export(Framerate) asset.export(ParallelConnection) asset.export(Mission) asset.export(PropertyValue) +asset.export(PropertyValueFloat) +asset.export(PropertyValueDouble) +asset.export(PropertyValueInt) +asset.export(PropertyValueUInt) +asset.export(PropertyValueDVec3) +asset.export(PropertyValueIVec2) +asset.export(PropertyValueVec2) +asset.export(PropertyValueVec3) +asset.export(PropertyValueVec4) asset.export(ElapsedTime) asset.export(InputState) + + + +asset.meta = { + Name = "Dashboard Items Example", + Description = [[Examples of different types of dashboard items. These are dynamic + information texts that will be shown over the rendering (per default in the top + left corner, on flat screens).]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/examples/debugcoordinateaxes.asset b/data/assets/examples/debugcoordinateaxes.asset deleted file mode 100644 index d7477a6bf7..0000000000 --- a/data/assets/examples/debugcoordinateaxes.asset +++ /dev/null @@ -1,116 +0,0 @@ -local earthTransforms = asset.require("scene/solarsystem/planets/earth/transforms") -local sunTransforms = asset.require("scene/solarsystem/sun/transforms") - - - -local SunRadius = 6.957E8 -local EarthRadius = 6.371E6 - -local EarthBarycenterAxes = { - Identifier = "EarthBarycenterAxes", - Parent = earthTransforms.EarthBarycenter.Identifier, - Transform = { - Scale = { - Type = "StaticScale", - Scale = EarthRadius * 3.5 - } - }, - Renderable = { - Type = "RenderableCartesianAxes" - }, - GUI = { - Path = "/Other/Coordinate Systems" - } -} - -local EarthInertialAxes = { - Identifier = "EarthInertialAxes", - Parent = earthTransforms.EarthInertial.Identifier, - Transform = { - Scale = { - Type = "StaticScale", - Scale = EarthRadius * 2.5 - } - }, - Renderable = { - Type = "RenderableCartesianAxes" - }, - GUI = { - Path = "/Other/Coordinate Systems" - } -} - -local EarthIAUAxes = { - Identifier = "EarthIAUAxes", - Parent = earthTransforms.EarthIAU.Identifier, - Transform = { - Scale = { - Type = "StaticScale", - Scale = EarthRadius * 1.5 - } - }, - Renderable = { - Type = "RenderableCartesianAxes" - }, - GUI = { - Path = "/Other/Coordinate Systems" - } -} - -local SunIAUAxes = { - Identifier = "SunIAUAxes", - Parent = sunTransforms.SunIAU.Identifier, - Transform = { - Scale = { - Type = "StaticScale", - Scale = SunRadius * 300 - } - }, - Renderable = { - Type = "RenderableCartesianAxes" - }, - GUI = { - Path = "/Other/Coordinate Systems" - } -} - -local SolarSystemBarycenterAxes = { - Identifier = "SolarSystemBarycenterAxes", - Parent = sunTransforms.SolarSystemBarycenter.Identifier, - Transform = { - Scale = { - Type = "StaticScale", - Scale = SunRadius * 300 - } - }, - Renderable = { - Type = "RenderableCartesianAxes" - }, - GUI = { - Path = "/Other/Coordinate Systems" - } -} - - -asset.onInitialize(function() - openspace.addSceneGraphNode(EarthBarycenterAxes) - openspace.addSceneGraphNode(EarthInertialAxes) - openspace.addSceneGraphNode(EarthIAUAxes) - openspace.addSceneGraphNode(SunIAUAxes) - openspace.addSceneGraphNode(SolarSystemBarycenterAxes) - -end) - -asset.onDeinitialize(function() - openspace.removeSceneGraphNode(SolarSystemBarycenterAxes) - openspace.removeSceneGraphNode(SunIAUAxes) - openspace.removeSceneGraphNode(EarthIAUAxes) - openspace.removeSceneGraphNode(EarthInertialAxes) - openspace.removeSceneGraphNode(EarthBarycenterAxes) -end) - -asset.export(EarthBarycenterAxes) -asset.export(EarthInertialAxes) -asset.export(EarthIAUAxes) -asset.export(SunIAUAxes) -asset.export(SolarSystemBarycenterAxes) diff --git a/data/assets/examples/discs.asset b/data/assets/examples/discs.asset deleted file mode 100644 index cfa461021f..0000000000 --- a/data/assets/examples/discs.asset +++ /dev/null @@ -1,53 +0,0 @@ --- @TODO (emmbr 2020-02-03) Potential threading issue later on? This will run on the main thread -local cyanTexture = openspace.createSingleColorImage("example_disc_color1", { 0.0, 1.0, 1.0 }) -local purpleTexture = openspace.createSingleColorImage("example_disc_color2", { 0.5, 0.0, 0.5 }) - -local BasicDisc = { - Identifier = "BasicDisc", - Renderable = { - Type = "RenderableDisc", - Texture = cyanTexture, - Size = 1e10, - Width = 0.5 - }, - GUI = { - Name = "Basic Disc", - Path = "/Examples/Discs" - } -} - --- Elliptic discs can be created using a non-uniform scaling --- For a full disc, use a width of 1.0 -local FullEllipticDisc = { - Identifier = "FullEllipticDisc", - Transform = { - Scale = { - Type = "NonUniformStaticScale", - Scale = { 2.0, 1.0, 1.0 } - } - }, - Renderable = { - Type = "RenderableDisc", - Texture = purpleTexture, - Size = 2e10, - Width = 1.0 - }, - GUI = { - Name = "Full Elliptic Disc", - Path = "/Examples/Discs" - } -} - - -asset.onInitialize(function() - openspace.addSceneGraphNode(BasicDisc) - openspace.addSceneGraphNode(FullEllipticDisc) -end) - -asset.onDeinitialize(function() - openspace.removeSceneGraphNode(FullEllipticDisc) - openspace.removeSceneGraphNode(BasicDisc) -end) - -asset.export(BasicDisc) -asset.export(FullEllipticDisc) diff --git a/data/assets/examples/galaxyshader/galaxyraycast.glsl b/data/assets/examples/galaxyshader/galaxyraycast.glsl new file mode 100644 index 0000000000..bc4acd2ffe --- /dev/null +++ b/data/assets/examples/galaxyshader/galaxyraycast.glsl @@ -0,0 +1,73 @@ +/***************************************************************************************** +* * +* OpenSpace * +* * +* Copyright (c) 2014-2020 * +* * +* 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. * +****************************************************************************************/ + +uniform float maxStepSize#{id} = 0.1; +uniform vec3 aspect#{id} = vec3(1.0); +uniform float opacityCoefficient#{id} = 1.0; +uniform float absorptionMultiply#{id} = 50.0; +uniform float emissionMultiply#{id} = 1500.0; +uniform sampler3D galaxyTexture#{id}; + +void sample#{id}(vec3 samplePos, vec3 dir, inout vec3 accumulatedColor, + inout vec3 accumulatedAlpha, inout float stepSize) +{ + vec3 aspect = aspect#{id}; + stepSize = maxStepSize#{id} / length(dir / aspect); + + // Early ray termination on black parts of the data + vec3 normalizedPos = samplePos * 2.0 - 1.0; + if (normalizedPos.x * normalizedPos.x + normalizedPos.y * normalizedPos.y > 0.7) { + return; + } + + vec4 sampledColor = texture(galaxyTexture#{id}, samplePos.xyz); + + // Source textures currently are square-rooted to avoid dithering in the shadows. + // So square them back + sampledColor = sampledColor*sampledColor; + + // Fudge for the dust "spreading" + sampledColor.a = clamp(sampledColor.a, 0.0, 1.0); + sampledColor.a = pow(sampledColor.a, 0.7); + + // Absorption probability + float scaledDensity = sampledColor.a * stepSize * absorptionMultiply#{id}; + vec3 alphaTint = vec3(-0.7, -0.44, -0.35); + vec3 absorption = alphaTint * scaledDensity; + + // Extinction + vec3 extinction = exp(-absorption); + accumulatedColor.rgb *= extinction; + + // Emission + accumulatedColor.rgb += + sampledColor.rgb * stepSize * emissionMultiply#{id} * opacityCoefficient#{id}; + + vec3 oneMinusFrontAlpha = vec3(1.0) - accumulatedAlpha; + accumulatedAlpha += oneMinusFrontAlpha * sampledColor.rgb * opacityCoefficient#{id}; +} + +float stepSize#{id}(vec3 samplePos, vec3 dir) { + return maxStepSize#{id} * length(dir * 1.0 / aspect#{id}); +} diff --git a/data/assets/examples/galaxyshader/volume.asset b/data/assets/examples/galaxyshader/volume.asset new file mode 100644 index 0000000000..eb5ad12e82 --- /dev/null +++ b/data/assets/examples/galaxyshader/volume.asset @@ -0,0 +1,75 @@ +local transforms = asset.require("scene/solarsystem/sun/transforms") + + + +local data = asset.resource({ + Name = "Milkyway Volume Data", + Type = "HttpSynchronization", + Identifier = "milkyway_volume_data", + Version = 1 +}) + + +local KiloParsec = 3.086E19 + +local MilkyWayVolume = { + Identifier = "MilkyWayVolume_CustomShader", + Parent = transforms.SolarSystemBarycenter.Identifier, + Transform = { + Translation = { + Type = "StaticTranslation", + -- The center of the Milky Way is approximately 8 kiloparsec from the Sun. + -- The x-axis of galactic coordinates points from the sun towards the center + -- of the galaxy. + Position = { 8 * KiloParsec, 0, 0 } + } + }, + Renderable = { + Type = "RenderableGalaxy", + StepSize = 0.01, + AbsorptionMultiply = 200, + EmissionMultiply = 250, + Rotation = { math.pi, 3.1248, 4.45741 }, + RaycastingShader = asset.resource("galaxyraycast.glsl"), + Volume = { + Type = "Volume", + Filename = data .. "MilkyWayRGBAVolume1024x1024x128.raw", + Dimensions = { 1024, 1024, 128 }, + Size = { 1.2E21, 1.2E21, 0.15E21 }, + Downscale = 0.4 + }, + Points = { + Type = "Points", + Filename = data .. "MilkyWayPoints.off", + EnabledPointsRatio = 0.3, + Texture = data .. "halo.png" + } + }, + GUI = { + Path = "/Milky Way", + Name = "Milky Way Volume (Custom Shader)", + Description = "Volumetric rendering of Milky Way galaxy based on simulation from NAOJ" + } +} + + +asset.onInitialize(function() + openspace.addSceneGraphNode(MilkyWayVolume) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(MilkyWayVolume) +end) + +asset.export(MilkyWayVolume) + + + +asset.meta = { + Name = "Milky Way Volume", + Description = [[Volumetric rendering of Milky Way galaxy based on simulations from " + "NAOJ with a custom shader]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT License" +} diff --git a/data/assets/examples/geojson/geojson_extruded_shaded_polygon.asset b/data/assets/examples/geojson/geojson_extruded_shaded_polygon.asset index 56002c2439..8af1b20359 100644 --- a/data/assets/examples/geojson/geojson_extruded_shaded_polygon.asset +++ b/data/assets/examples/geojson/geojson_extruded_shaded_polygon.asset @@ -1,9 +1,9 @@ local earth = asset.require("scene/solarsystem/planets/earth/earth") -local sun = asset.require("scene/solarsystem/sun/sun") +local sun = asset.require("scene/solarsystem/sun/transforms") -local data = asset.syncedResource({ +local data = asset.resource({ Name = "GeoJSON Example Africa", Type = "UrlSynchronization", Identifier = "geojson_example_polygon_extruded_africa", @@ -43,7 +43,6 @@ asset.export(ExamplePolygon) asset.meta = { Name = "GeoJson Example - Extruded and Shaded Polygon", - Version = "1.0", Description = [[GeoJson example asset demonstrating how to apply shading from light sources on polygons]], Author = "OpenSpace Team", diff --git a/data/assets/examples/geojson/geojson_lines.asset b/data/assets/examples/geojson/geojson_lines.asset index 481c7b2326..410712c0a5 100644 --- a/data/assets/examples/geojson/geojson_lines.asset +++ b/data/assets/examples/geojson/geojson_lines.asset @@ -2,7 +2,7 @@ local earth = asset.require("scene/solarsystem/planets/earth/earth") -local data = asset.syncedResource({ +local data = asset.resource({ Name = "GeoJSON Example Lines", Type = "UrlSynchronization", Identifier = "geojson_example_lines", @@ -35,7 +35,6 @@ asset.export(ExampleLines) asset.meta = { Name = "GeoJson Example - Lines", - Version = "1.0", Description = [[GeoJson example asset with lines]], Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/examples/geojson/geojson_multiple_polygons.asset b/data/assets/examples/geojson/geojson_multiple_polygons.asset index 640ce589f5..5a55511cb7 100644 --- a/data/assets/examples/geojson/geojson_multiple_polygons.asset +++ b/data/assets/examples/geojson/geojson_multiple_polygons.asset @@ -2,7 +2,7 @@ local earth = asset.require("scene/solarsystem/planets/earth/earth") -local data = asset.syncedResource({ +local data = asset.resource({ Name = "GeoJSON Example Polygon Multiple", Type = "UrlSynchronization", Identifier = "geojson_example_polygon_multiple", @@ -51,9 +51,9 @@ asset.export(ExamplePolygon) asset.export(ExamplePolygonDiffHeights) + asset.meta = { Name = "GeoJson Example - Multiple Polygons", - Version = "1.0", Description = [[GeoJson example asset with multiple polygons]], Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/examples/geojson/geojson_points.asset b/data/assets/examples/geojson/geojson_points.asset index a1a4736661..a1ee6f1c4d 100644 --- a/data/assets/examples/geojson/geojson_points.asset +++ b/data/assets/examples/geojson/geojson_points.asset @@ -2,7 +2,7 @@ local earth = asset.require("scene/solarsystem/planets/earth/earth") -local data = asset.syncedResource({ +local data = asset.resource({ Name = "GeoJSON Example Outfacing", Type = "UrlSynchronization", Identifier = "geojson_example_points", @@ -35,7 +35,6 @@ asset.export(ExamplePoints) asset.meta = { Name = "GeoJson Example - Points", - Version = "1.0", Description = [[GeoJson example asset with points that are facing the camera (default)]], Author = "OpenSpace Team", diff --git a/data/assets/examples/geojson/geojson_points_outfacing.asset b/data/assets/examples/geojson/geojson_points_outfacing.asset index 9e9f74a299..d11b0ff2af 100644 --- a/data/assets/examples/geojson/geojson_points_outfacing.asset +++ b/data/assets/examples/geojson/geojson_points_outfacing.asset @@ -2,7 +2,7 @@ local earth = asset.require("scene/solarsystem/planets/earth/earth") -local data = asset.syncedResource({ +local data = asset.resource({ Name = "GeoJSON Example Outfacing", Type = "UrlSynchronization", Identifier = "geojson_example_points", @@ -36,7 +36,6 @@ asset.export(ExamplePoints) asset.meta = { Name = "GeoJson Example - Outfacing Points", - Version = "1.0", Description = [[GeoJson example asset with point that are aligned to "stick out" of the globe, i.e. face out of the planet]], Author = "OpenSpace Team", diff --git a/data/assets/examples/geojson/geojson_polygons_with_holes.asset b/data/assets/examples/geojson/geojson_polygons_with_holes.asset index 8adcaff40e..627dbe4ae6 100644 --- a/data/assets/examples/geojson/geojson_polygons_with_holes.asset +++ b/data/assets/examples/geojson/geojson_polygons_with_holes.asset @@ -2,7 +2,7 @@ local earth = asset.require("scene/solarsystem/planets/earth/earth") -local data = asset.syncedResource({ +local data = asset.resource({ Name = "GeoJSON Example Polygon with holes", Type = "UrlSynchronization", Identifier = "geojson_example_polygon_with_holes", @@ -35,7 +35,6 @@ asset.export(ExampleHoles) asset.meta = { Name = "GeoJson Example - Polygon with holes", - Version = "1.0", Description = [[GeoJson example asset with polygon that has holes in it]], Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/examples/geojson/geojson_roverpath.asset b/data/assets/examples/geojson/geojson_roverpath.asset index 876f5b8e33..80db59ccf8 100644 --- a/data/assets/examples/geojson/geojson_roverpath.asset +++ b/data/assets/examples/geojson/geojson_roverpath.asset @@ -2,7 +2,7 @@ local mars = asset.require("scene/solarsystem/planets/mars/mars") -local data = asset.syncedResource({ +local data = asset.resource({ Name = "GeoJSON Example Path Perseverance", Type = "UrlSynchronization", Identifier = "geojson_example_path_perseverance", @@ -36,7 +36,6 @@ asset.export(ExampleRoverPath) asset.meta = { Name = "GeoJson Example - Rover path", - Version = "1.0", Description = [[GeoJson example asset that renderes a snapshot of the path of the Perseverance Rover on Mars. Data from: https://mars.nasa.gov/mars2020/mission/where-is-the-rover/]], Author = "OpenSpace Team", diff --git a/data/assets/examples/geojson/geojson_toronto_neighborhoods.asset b/data/assets/examples/geojson/geojson_toronto_neighborhoods.asset index 1eba4160c1..86a7b8d986 100644 --- a/data/assets/examples/geojson/geojson_toronto_neighborhoods.asset +++ b/data/assets/examples/geojson/geojson_toronto_neighborhoods.asset @@ -2,7 +2,7 @@ local earth = asset.require("scene/solarsystem/planets/earth/earth") -local data = asset.syncedResource({ +local data = asset.resource({ Name = "GeoJSON Example Toronto Neighborhoods", Type = "UrlSynchronization", Identifier = "geojson_example_toronto_neighborhoods", @@ -37,7 +37,6 @@ asset.export(ExampleToronto) asset.meta = { Name = "GeoJson Example - Toronto neighborhoods", - Version = "1.0", Description = [[GeoJson example asset that shows the neighborhoods of the city Toronto, Canada, as polygons. Data source: https://handsondataviz.org/geojsonio.html]], Author = "OpenSpace Team", diff --git a/data/assets/examples/globerotation.asset b/data/assets/examples/globerotation.asset deleted file mode 100644 index b3060b9d1d..0000000000 --- a/data/assets/examples/globerotation.asset +++ /dev/null @@ -1,57 +0,0 @@ -local sun = asset.require("scene/solarsystem/sun/sun") -local earth = asset.require("scene/solarsystem/planets/earth/earth") - - - -local models = asset.syncedResource({ - Name = "New Horizons Model", - Type = "HttpSynchronization", - Identifier = "newhorizons_model", - Version = 2 -}) - - -local ExampleGlobeRotation = { - Identifier = "ExampleGlobeRotation", - Parent = earth.Earth.Identifier, - Transform = { - Translation = { - Type = "GlobeTranslation", - Globe = earth.Earth.Identifier, - Latitude = 40.7306, - Longitude = -73.9352, - Altitude = 6, - UseHeightmap = true - }, - Rotation = { - Type = "GlobeRotation", - Globe = earth.Earth.Identifier, - Latitude = 40.7306, - Longitude = -73.9352 - -- Can be used to to put flat on leaning surfaces, but also leads to updating - -- the rotation every frame - --UseHeightmap = true - } - }, - Renderable = { - Type = "RenderableModel", - GeometryFile = models .. "NewHorizonsCleanModel.obj", - LightSources = { - sun.LightSource - } - }, - GUI = { - Path = "/Example" - } -} - - -asset.onInitialize(function() - openspace.addSceneGraphNode(ExampleGlobeRotation) -end) - -asset.onDeinitialize(function() - openspace.removeSceneGraphNode(ExampleGlobeRotation) -end) - -asset.export(ExampleGlobeRotation) diff --git a/data/assets/examples/globetranslation.asset b/data/assets/examples/globetranslation.asset index 6ac330c077..ec71e979d7 100644 --- a/data/assets/examples/globetranslation.asset +++ b/data/assets/examples/globetranslation.asset @@ -1,9 +1,9 @@ -local sun = asset.require("scene/solarsystem/sun/sun") +local sun = asset.require("scene/solarsystem/sun/transforms") local earth = asset.require("scene/solarsystem/planets/earth/earth") -local models = asset.syncedResource({ +local models = asset.resource({ Name = "New Horizons Model", Type = "HttpSynchronization", Identifier = "newhorizons_model", @@ -31,7 +31,8 @@ local ExampleFixedHeight = { } }, GUI = { - Path = "/Example" + Name = "GlobeTranslation - Fixed Height", + Path = "/Examples" } } @@ -55,7 +56,8 @@ local ExampleAdaptiveHeight = { } }, GUI = { - Path = "/Example" + Name = "GlobeTranslation - Adaptive Height", + Path = "/Examples" } } @@ -72,3 +74,15 @@ end) asset.export(ExampleFixedHeight) asset.export(ExampleAdaptiveHeight) + + + +asset.meta = { + Name = "GlobeTranslation Example", + Description = [[An example that demonstrates how to place an object on a planet surface + using the "GlobeTranslation" transform. For the altitude, a fixed height can be used, + or the height can be queried from the height map]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/examples/grids.asset b/data/assets/examples/grids.asset index 95dbe754c0..4c51b3d8c5 100644 --- a/data/assets/examples/grids.asset +++ b/data/assets/examples/grids.asset @@ -19,6 +19,7 @@ local RadialGrid = { }, GUI = { Name = "Example Radial Grid", + Description = "A circular 2D grid, with segments based on the radius and angle.", Path = "/Examples/Grids" } } @@ -43,6 +44,7 @@ local PlanarGrid = { }, GUI = { Name = "Example Grid", + Description = "A basic 2D grid, with a given size and number of segments.", Path = "/Examples/Grids" } } @@ -63,6 +65,7 @@ local SphericalGrid = { }, GUI = { Name = "Example Spherical Grid", + Description = "A grid in the form of a 3D sphere.", Path = "/Examples/Grids" } } @@ -77,13 +80,14 @@ local BoxGrid = { }, Renderable = { Type = "RenderableBoxGrid", + Enabled = false, Color = { 0.5, 0.0, 1.0 }, LineWidth = 2.0, Size = { 2, 2, 2 }, - Enabled = false }, GUI = { Name = "Example Box Grid", + Description = "A grid in the form of a 3D box.", Path = "/Examples/Grids" } } @@ -107,3 +111,13 @@ asset.export(RadialGrid) asset.export(PlanarGrid) asset.export(SphericalGrid) asset.export(BoxGrid) + + + +asset.meta = { + Name = "Example Grids", + Description = [[Examples of different types of rendered grids.]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/examples/joystickproperty.asset b/data/assets/examples/joystickproperty.asset index d0afb768ae..9090545b14 100644 --- a/data/assets/examples/joystickproperty.asset +++ b/data/assets/examples/joystickproperty.asset @@ -94,3 +94,14 @@ asset.onInitialize(function() "Freeze current scale for Earth. Or release it to the trigger again." ) end) + + + +asset.meta = { + Name = "Joystick example", + Description = [[Example asset that binds a joystick to use for input and navigation. + More info on the OpenSpace wiki page.]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/examples/modelshader/modelshader.asset b/data/assets/examples/modelshader/modelshader.asset deleted file mode 100644 index 8cacd99129..0000000000 --- a/data/assets/examples/modelshader/modelshader.asset +++ /dev/null @@ -1,53 +0,0 @@ -local sun = asset.require("scene/solarsystem/sun/sun") -local transforms = asset.require("scene/solarsystem/planets/earth/transforms") - - - -local model = asset.syncedResource({ - Name = "Animated Box", - Type = "HttpSynchronization", - Identifier = "animated_box", - Version = 1 -}) - - -local Model = { - Identifier = "ModelShader", - Parent = transforms.EarthCenter.Identifier, - Transform = { - Translation = { - Type = "StaticTranslation", - Position = { -11E7, 0.0, 0.0 } - } - }, - Renderable = { - Type = "RenderableModel", - GeometryFile = model .. "BoxAnimated.glb", - ModelScale = 3E7, - -- (malej 2023-MAY-22) Note that PerformShading should be false in this example, - -- these example shaders dont't contain any light calculations - PerformShading = false, - VertexShader = asset.localResource("model_vs.glsl"), - FragmentShader = asset.localResource("model_fs.glsl"), - EnableAnimation = true, - AnimationStartTime = "2023 05 11 00:00:00", - AnimationTimeScale = "Second", - AnimationMode = "LoopInfinitely" - }, - GUI = { - Name = "Model Shader", - Path = "/Example", - Description = "Simple box model with a custom shader" - } -} - - -asset.onInitialize(function() - openspace.addSceneGraphNode(Model) -end) - -asset.onDeinitialize(function() - openspace.removeSceneGraphNode(Model) -end) - -asset.export(Model) diff --git a/data/assets/examples/navigationstate.asset b/data/assets/examples/navigationstate.asset new file mode 100644 index 0000000000..4fc351ee27 --- /dev/null +++ b/data/assets/examples/navigationstate.asset @@ -0,0 +1,35 @@ +-- Basic +-- Example of an action that uses getNavigationState and setNavigationState +-- to manipulate the camera view + +local FlipUpsideDown = { + Identifier = "NavigationState_Example", + Name = "Flip View Upside-Down", + Command = [[ + -- Get the current navigation state + local currentNavState = openspace.navigation.getNavigationState() + -- Create a new navigation state and populate with all original orientation + -- values, except for a new Up vector to flip the camera upside-down + local newNavState = { + Pitch = currentNavState["Pitch"], + Anchor = currentNavState["Anchor"], + Yaw = currentNavState["Yaw"], + Position = currentNavState["Position"], + Up = {0.0, 0.0, -1.0} + } + -- Set the navigation state with the new navigation state variable + openspace.navigation.setNavigationState(newNavState) + ]], + GUI = { + Name = "Basic", + Path = "/Examples/NavigationState" + } +} + +asset.onInitialize(function() + openspace.action.registerAction(FlipUpsideDown) +end) + +asset.onDeinitialize(function() + openspace.action.removeAction(FlipUpsideDown) +end) diff --git a/data/assets/examples/nodeline.asset b/data/assets/examples/nodeline.asset new file mode 100644 index 0000000000..91f8319822 --- /dev/null +++ b/data/assets/examples/nodeline.asset @@ -0,0 +1,42 @@ +local earth = asset.require("scene/solarsystem/planets/earth/earth") +local mars = asset.require("scene/solarsystem/planets/mars/mars") + + + +local RenderableNodeLineExample = { + Identifier = "RenderableNodeLineExample", + Renderable = { + Type = "RenderableNodeLine", + StartNode = earth.Earth.Identifier, + EndNode = mars.Mars.Identifier, + Color = { 0.5, 0.5, 0.5 }, + LineWidth = 2 + }, + GUI = { + Name = "RenderableNodeLine - Basic", + Path = "/Examples", + Description = "Draws a line between two nodes in the scene." + } +} + + +asset.onInitialize(function() + openspace.addSceneGraphNode(RenderableNodeLineExample) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(RenderableNodeLineExample) +end) + +asset.export(RenderableNodeLineExample) + + + +asset.meta = { + Name = "RenderableNodeLine Example asset", + Description = [[Example of a RenderableNodeLine, that can be used to draw an line + between two scene graph nodes.]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/examples/primitives.asset b/data/assets/examples/primitives.asset index 8adf31d570..3e2cb1432f 100644 --- a/data/assets/examples/primitives.asset +++ b/data/assets/examples/primitives.asset @@ -57,3 +57,14 @@ end) asset.export(Circle) asset.export(Ellipse) + + + +asset.meta = { + Name = "Primitives Example", + Description = [[Examples of different simple rendered primitives, such as circles + and ellipses.]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/examples/renderable/renderableboxgrid/boxgrid.asset b/data/assets/examples/renderable/renderableboxgrid/boxgrid.asset new file mode 100644 index 0000000000..c73dcf4c32 --- /dev/null +++ b/data/assets/examples/renderable/renderableboxgrid/boxgrid.asset @@ -0,0 +1,31 @@ +-- Basic +-- This example adds a box grid, which is a 3D box rendered using grid lines, to the +-- scene. +-- +-- Per default, the box will be given a size of 1x1x1 meters, and here it is scaled up by a +-- factor of 100. It will hence have a size of 100x100x100 meters. + +local Node = { + Identifier = "RenderableBoxGrid_Example", + Transform = { + Scale = { + Type = "StaticScale", + Scale = 100 + } + }, + Renderable = { + Type = "RenderableBoxGrid" + }, + GUI = { + Name = "RenderableBoxGrid - Basic", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) diff --git a/data/assets/examples/renderable/renderableboxgrid/boxgrid_size.asset b/data/assets/examples/renderable/renderableboxgrid/boxgrid_size.asset new file mode 100644 index 0000000000..d89925141e --- /dev/null +++ b/data/assets/examples/renderable/renderableboxgrid/boxgrid_size.asset @@ -0,0 +1,32 @@ +-- With Non-uniform Size +-- This example creates a box grid with a non-uniform size. The size has been set so the +-- box is two times larger in the Y-direction. +-- +-- The `Size` values are given in meters, and here the box is scaled up by a factor of +-- 100. So, the box will have a size of 100 times the `Size` values. + +local Node = { + Identifier = "RenderableBoxGrid_Example_Size", + Transform = { + Scale = { + Type = "StaticScale", + Scale = 100 + } + }, + Renderable = { + Type = "RenderableBoxGrid", + Size = { 1.0, 2.0, 1.0 } + }, + GUI = { + Name = "RenderableBoxGrid - Non-uniform Size", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) diff --git a/data/assets/examples/renderable/renderableboxgrid/boxgrid_styled.asset b/data/assets/examples/renderable/renderableboxgrid/boxgrid_styled.asset new file mode 100644 index 0000000000..e2911244b4 --- /dev/null +++ b/data/assets/examples/renderable/renderableboxgrid/boxgrid_styled.asset @@ -0,0 +1,24 @@ +-- Styled +-- This example creates a box grid where the grid lines are styled to have a specific +-- color and line width. + +local Node = { + Identifier = "RenderableBoxGrid_Example_Styled", + Renderable = { + Type = "RenderableBoxGrid", + LineWidth = 4.0, + Color = { 1.0, 1.0, 0.0 } + }, + GUI = { + Name = "RenderableBoxGrid - Styled", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) diff --git a/data/assets/examples/renderable/renderablecartesianaxes/cartesianaxes.asset b/data/assets/examples/renderable/renderablecartesianaxes/cartesianaxes.asset new file mode 100644 index 0000000000..14f9f23159 --- /dev/null +++ b/data/assets/examples/renderable/renderablecartesianaxes/cartesianaxes.asset @@ -0,0 +1,28 @@ +-- Basic +-- This example creates a SceneGraphNode that only displays coordinate axes. The +-- parent is not set which defaults to placing the axes at the center of the Sun. + +local Node = { + Identifier = "RenderableCartesianAxes_Example", + Transform = { + Scale = { + Type = "StaticScale", + Scale = 30000000 + } + }, + Renderable = { + Type = "RenderableCartesianAxes" + }, + GUI = { + Name = "RenderableCartesianAxes - Basic", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) diff --git a/data/assets/examples/renderable/renderablecartesianaxes/cartesianaxes_customcolor.asset b/data/assets/examples/renderable/renderablecartesianaxes/cartesianaxes_customcolor.asset new file mode 100644 index 0000000000..a8dc00d6d5 --- /dev/null +++ b/data/assets/examples/renderable/renderablecartesianaxes/cartesianaxes_customcolor.asset @@ -0,0 +1,32 @@ +-- Custom Colors +-- This example creates a set of cartesian coordinate axes with specified colors, instead +-- of using the default which is red (X), green (Y), and blue (Z). The parent is not set +-- which defaults to placing the axes at the center of the Solar System. + +local Node = { + Identifier = "RenderableCartesianAxes_Example_CustomColors", + Transform = { + Scale = { + Type = "StaticScale", + Scale = 30000000 + } + }, + Renderable = { + Type = "RenderableCartesianAxes", + XColor = { 0.0, 1.0, 1.0 }, -- Cyan + YColor = { 1.0, 0.0, 1.0 }, -- Magenta + ZColor = { 1.0, 1.0, 0.0 } -- Yellow + }, + GUI = { + Name = "RenderableCartesianAxes - Custom Colors", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) diff --git a/data/assets/examples/renderable/renderablecartesianaxes/cartesianaxes_parent.asset b/data/assets/examples/renderable/renderablecartesianaxes/cartesianaxes_parent.asset new file mode 100644 index 0000000000..4dc7eb0dfd --- /dev/null +++ b/data/assets/examples/renderable/renderablecartesianaxes/cartesianaxes_parent.asset @@ -0,0 +1,31 @@ +-- With Parent +-- This example creates a SceneGraphNode that displays coordinate axes of the given parent +-- node, in this case Earth. + +local earth = asset.require("scene/solarsystem/planets/earth/earth") + +local Node = { + Identifier = "RenderableCartesianAxes_Example_Parent", + Parent = earth.Earth.Identifier, + Transform = { + Scale = { + Type = "StaticScale", + Scale = 30000000 + } + }, + Renderable = { + Type = "RenderableCartesianAxes" + }, + GUI = { + Name = "RenderableCartesianAxes - With Parent", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) diff --git a/data/assets/examples/renderable/renderabledisc/disc.asset b/data/assets/examples/renderable/renderabledisc/disc.asset new file mode 100644 index 0000000000..5de79cc778 --- /dev/null +++ b/data/assets/examples/renderable/renderabledisc/disc.asset @@ -0,0 +1,30 @@ +-- Basic +-- This example creates a disc with a single color and a radius of 100 meters. +-- +-- This renderable requires a texture to be loaded, even for just a single color. Use the +-- utility function that exists for creating single color textures for this purpose. +local cyanTexture = openspace.createSingleColorImage( + "example_disc_color_cyan", + { 0.0, 1.0, 1.0 } +) + +local Node = { + Identifier = "RenderableDisc_Example", + Renderable = { + Type = "RenderableDisc", + Size = 100.0, + Texture = cyanTexture + }, + GUI = { + Name = "RenderableDisc - Basic", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) diff --git a/data/assets/examples/renderable/renderabledisc/disc_ellipse.asset b/data/assets/examples/renderable/renderabledisc/disc_ellipse.asset new file mode 100644 index 0000000000..2bdd4eb5f2 --- /dev/null +++ b/data/assets/examples/renderable/renderabledisc/disc_ellipse.asset @@ -0,0 +1,37 @@ +-- Ellipse +-- This example creates a disc with an ellipic shape, using a non-uniform scaling. +-- +-- This renderable requires a texture to be loaded, even for just a single color. Use the +-- utility function that exists for creating single color textures for this purpose. +local purpleTexture = openspace.createSingleColorImage( + "example_disc_color_purple", + { 0.5, 0.0, 0.5 } +) + +local Node = { + Identifier = "RenderableDisc_Example_Ellipse", + Transform = { + -- Elliptic discs can be created using a non-uniform scaling + Scale = { + Type = "NonUniformStaticScale", + Scale = { 2.0, 1.0, 1.0 } + } + }, + Renderable = { + Type = "RenderableDisc", + Size = 100.0, + Texture = purpleTexture + }, + GUI = { + Name = "RenderableDisc - Ellipse", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) diff --git a/data/assets/examples/renderable/renderabledisc/disc_with_hole.asset b/data/assets/examples/renderable/renderabledisc/disc_with_hole.asset new file mode 100644 index 0000000000..ba4cb4de98 --- /dev/null +++ b/data/assets/examples/renderable/renderabledisc/disc_with_hole.asset @@ -0,0 +1,33 @@ +-- With Hole +-- This example creates a disc that has a hole in it. By specifying a `Width` of 0.5, the +-- disc will stop halfway from the edge to the center point. The disc is rendered with a +-- single color and an outer radius of 100 meters. +-- +-- This renderable requires a texture to be loaded, even for just a single color. Use the +-- utility function that exists for creating single color textures for this purpose. +local cyanTexture = openspace.createSingleColorImage( + "example_disc_color_cyan", + { 0.0, 1.0, 1.0 } +) + +local Node = { + Identifier = "RenderableDisc_Example_WithHole", + Renderable = { + Type = "RenderableDisc", + Size = 100.0, + Width = 0.5, + Texture = cyanTexture + }, + GUI = { + Name = "RenderableDisc - With Hole", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) diff --git a/data/assets/examples/renderable/renderabledistancelabel/distancelabel.asset b/data/assets/examples/renderable/renderabledistancelabel/distancelabel.asset new file mode 100644 index 0000000000..05d0ea6bc2 --- /dev/null +++ b/data/assets/examples/renderable/renderabledistancelabel/distancelabel.asset @@ -0,0 +1,27 @@ +-- Basic +-- This example adds a distance label between two nodes in the scene, based on an existing +-- [RenderableNodeLine](#base_renderable_nodeline). Note that the identifier of the +-- `RenderableNodeLine` is accessed by importing another example asset, which also adds +-- the node line to the scene. + +local nodelineAsset = asset.require("examples/renderable/renderablenodeline/nodeline") + +local Node = { + Identifier = "RenderableDistanceLabel_Example", + Renderable = { + Type = "RenderableDistanceLabel", + NodeLine = nodelineAsset.NodeLine.Identifier + }, + GUI = { + Name = "RenderableDistanceLabel - Basic", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) diff --git a/data/assets/examples/renderable/renderabledistancelabel/distancelabel_unit.asset b/data/assets/examples/renderable/renderabledistancelabel/distancelabel_unit.asset new file mode 100644 index 0000000000..57b067cf5b --- /dev/null +++ b/data/assets/examples/renderable/renderabledistancelabel/distancelabel_unit.asset @@ -0,0 +1,27 @@ +-- Set Unit +-- Per default, the distance is displayed in meters. This example shows how to specify a +-- specific unit, and how to set the precision of dislayed number. + +local nodelineAsset = asset.require("examples/renderable/renderablenodeline/nodeline") + +local Node = { + Identifier = "RenderableDistanceLabel_Example_Unit", + Renderable = { + Type = "RenderableDistanceLabel", + NodeLine = nodelineAsset.NodeLine.Identifier, + DistanceUnit = "AU", + Precision = 2 + }, + GUI = { + Name = "RenderableDistanceLabel - Unit", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) diff --git a/data/assets/examples/renderable/renderabledistancelabel/distancelabel_unit_customdescriptor.asset b/data/assets/examples/renderable/renderabledistancelabel/distancelabel_unit_customdescriptor.asset new file mode 100644 index 0000000000..4b1ba1686a --- /dev/null +++ b/data/assets/examples/renderable/renderabledistancelabel/distancelabel_unit_customdescriptor.asset @@ -0,0 +1,29 @@ +-- Custom Unit Descriptor +-- In addition to setting the unit, it is also possible to specify a custom unit +-- descriptor, i.e. a text that will de displayed for the unit instead of the default one. +-- Here, we write out "Astronomical Units" instead of using the default descriptor for AU. + +local nodelineAsset = asset.require("examples/renderable/renderablenodeline/nodeline") + +local Node = { + Identifier = "RenderableDistanceLabel_Example_CustomDescriptor", + Renderable = { + Type = "RenderableDistanceLabel", + NodeLine = nodelineAsset.NodeLine.Identifier, + DistanceUnit = "AU", + Precision = 2, + CustomUnitDescriptor = "Astronomical Units" + }, + GUI = { + Name = "RenderableDistanceLabel - Custom Unit Descriptor", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) diff --git a/data/assets/examples/renderable/renderableinterpolatedpoints/data/interpolation_expand.csv b/data/assets/examples/renderable/renderableinterpolatedpoints/data/interpolation_expand.csv new file mode 100644 index 0000000000..b0f3e25a9a --- /dev/null +++ b/data/assets/examples/renderable/renderableinterpolatedpoints/data/interpolation_expand.csv @@ -0,0 +1,70 @@ +# A test dataset for interpolation, where the xyz positions expand outward in each +# time step. There are 10 points per timestep, as illustrated by the time column. +# There are also two columns that may be used for color mapping: +# +# static_value has values that are the same for the correpsonding point in each +# time step +# dynamic_value has values that change for every timestep. The change will be +# reflected in the interpolation +# +time,x,y,z,dynamic_value,static_value +0.0,675.0297905065192,1672.6820684730765,-124.14442820502654,1,1 +0.0,9.0852354697237,1080.363474597831,266.4506394528842,3,3 +0.0,783.6498618493837,-332.90868790089644,166.73196289611994,5,5 +0.0,163.88116606175208,-978.1393719572736,1260.016529398092,10,10 +0.0,-934.1529593143864,-590.4853596059422,-622.5048517597389,11,11 +0.0,77.99426967464474,-184.5196836590583,1835.5681393474856,13,13 +0.0,77.99426967464474,-184.5196836590583,1835.5681393474856,14,14 +0.0,-269.98667369858055,-559.2891044933908,-1487.2591171480176,15,15 +0.0,-710.8143185498654,-627.4209210346181,-1504.56518583112,17,17 +0.0,-710.8143185498654,-627.4209210346181,-1504.56518583112,18,18 +1.0,1350.0595810130385,3345.364136946153,-248.28885641005309,2,1 +1.0,18.1704709394474,2160.726949195662,532.9012789057684,6,3 +1.0,1567.2997236987674,-665.8173758017929,333.4639257922399,10,5 +1.0,327.76233212350417,-1956.2787439145472,2520.033058796184,20,10 +1.0,-1868.3059186287728,-1180.9707192118844,-1245.0097035194779,22,11 +1.0,155.98853934928948,-369.0393673181166,3671.136278694971,26,13 +1.0,155.98853934928948,-369.0393673181166,3671.136278694971,28,14 +1.0,-539.9733473971611,-1118.5782089867816,-2974.518234296035,30,15 +1.0,-1421.628637099731,-1254.8418420692362,-3009.13037166224,34,17 +1.0,-1421.628637099731,-1254.8418420692362,-3009.13037166224,36,18 +2.0,2700.119162026077,6690.728273892306,-496.57771282010617,4,1 +2.0,36.3409418788948,4321.453898391324,1065.8025578115369,12,3 +2.0,3134.5994473975347,-1331.6347516035858,666.9278515844798,20,5 +2.0,655.5246642470083,-3912.5574878290945,5040.066117592368,40,10 +2.0,-3736.6118372575456,-2361.941438423769,-2490.0194070389557,44,11 +2.0,311.97707869857896,-738.0787346362332,7342.272557389942,52,13 +2.0,311.97707869857896,-738.0787346362332,7342.272557389942,56,14 +2.0,-1079.9466947943222,-2237.1564179735633,-5949.03646859207,60,15 +2.0,-2843.257274199462,-2509.6836841384725,-6018.26074332448,68,17 +2.0,-2843.257274199462,-2509.6836841384725,-6018.26074332448,72,18 +3.0,5400.238324052154,13381.456547784612,-993.1554256402123,8,1 +3.0,72.6818837577896,8642.907796782649,2131.6051156230737,24,3 +3.0,6269.1988947950695,-2663.2695032071715,1333.8557031689595,40,5 +3.0,1311.0493284940167,-7825.114975658189,10080.132235184736,80,10 +3.0,-7473.223674515091,-4723.882876847538,-4980.038814077911,88,11 +3.0,623.9541573971579,-1476.1574692724664,14684.545114779885,104,13 +3.0,623.9541573971579,-1476.1574692724664,14684.545114779885,112,14 +3.0,-2159.8933895886444,-4474.312835947127,-11898.07293718414,120,15 +3.0,-5686.514548398924,-5019.367368276945,-12036.52148664896,136,17 +3.0,-5686.514548398924,-5019.367368276945,-12036.52148664896,144,18 +4.0,10800.476648104308,26762.913095569224,-1986.3108512804247,16,1 +4.0,145.3637675155792,17285.815593565298,4263.2102312461475,48,3 +4.0,12538.397789590139,-5326.539006414343,2667.711406337919,80,5 +4.0,2622.0986569880333,-15650.229951316378,20160.26447036947,160,10 +4.0,-14946.447349030183,-9447.765753695076,-9960.077628155823,176,11 +4.0,1247.9083147943159,-2952.314938544933,29369.09022955977,208,13 +4.0,1247.9083147943159,-2952.314938544933,29369.09022955977,224,14 +4.0,-4319.786779177289,-8948.625671894253,-23796.14587436828,240,15 +4.0,-11373.029096797847,-10038.73473655389,-24073.04297329792,272,17 +4.0,-11373.029096797847,-10038.73473655389,-24073.04297329792,288,18 +5.0,21600.953296208616,53525.82619113845,-3972.6217025608494,32,1 +5.0,290.7275350311584,34571.631187130595,8526.420462492295,96,3 +5.0,25076.795579180278,-10653.078012828686,5335.422812675838,160,5 +5.0,5244.197313976067,-31300.459902632756,40320.52894073894,320,10 +5.0,-29892.894698060365,-18895.53150739015,-19920.155256311646,352,11 +5.0,2495.8166295886317,-5904.629877089866,58738.18045911954,416,13 +5.0,2495.8166295886317,-5904.629877089866,58738.18045911954,448,14 +5.0,-8639.573558354577,-17897.251343788506,-47592.29174873656,480,15 +5.0,-22746.058193595694,-20077.46947310778,-48146.08594659584,544,17 +5.0,-22746.058193595694,-20077.46947310778,-48146.08594659584,576,18 diff --git a/data/assets/examples/renderable/renderableinterpolatedpoints/data/interpolation_randomwalk.csv b/data/assets/examples/renderable/renderableinterpolatedpoints/data/interpolation_randomwalk.csv new file mode 100644 index 0000000000..09ed368662 --- /dev/null +++ b/data/assets/examples/renderable/renderableinterpolatedpoints/data/interpolation_randomwalk.csv @@ -0,0 +1,63 @@ +# A test dataset for interpolation, where the xyz vary in a random walk patterin +# time step. There are 10 points per timestep, as illustrated by the time column +time,x,y,z +0.0,675.0297905065192,1672.6820684730765,-124.14442820502654 +0.0,9.0852354697237,1080.363474597831,266.4506394528842 +0.0,783.6498618493837,-332.90868790089644,166.73196289611994 +0.0,163.88116606175208,-978.1393719572736,1260.016529398092 +0.0,-934.1529593143864,-590.4853596059422,-622.5048517597389 +0.0,77.99426967464474,-184.5196836590583,1835.5681393474856 +0.0,77.99426967464474,-184.5196836590583,1835.5681393474856 +0.0,-269.98667369858055,-559.2891044933908,-1487.2591171480176 +0.0,-710.8143185498654,-627.4209210346181,-1504.56518583112 +0.0,-710.8143185498654,-627.4209210346181,-1504.56518583112 +1.0,1668.4580965289847,745.846682848152,2807.1531096380813 +1.0,-267.4433668726456,148.90396745731732,-185.1019615201871 +1.0,2079.026938050769,151.01585523117177,301.7883722719676 +1.0,3209.940878877803,-4804.699861272869,-1589.4798430288217 +1.0,-1402.4597087610582,-4040.3210246320077,-1711.2703008101043 +1.0,-390.2796442237164,-1309.0947421410037,2057.413318767218 +1.0,3236.419900689428,-2210.181924327906,-466.4190154971202 +1.0,1264.882784607237,69.2055606971569,-735.8630804566736 +1.0,-1649.7630904197697,-2443.46907207704,-2705.84256566873 +1.0,374.30576862206385,-3452.028323705201,-2087.952685417674 +2.0,465.0448720701909,2222.779842838973,3455.3210484276715 +2.0,3437.11300214523,491.6405298372583,-955.2665223528202 +2.0,2052.032488574901,-80.28070954530929,-1052.0556283399499 +2.0,1094.5190209660022,-5406.907252451447,-366.127265347086 +2.0,242.63011544531992,-6997.3650053668625,350.72874418179754 +2.0,-2831.9669441657607,-2748.783158930421,3919.9735569996146 +2.0,3654.1470906989384,-3131.459466247481,-2144.8540619423975 +2.0,-2654.4574631523137,2183.4500131349887,-1354.287832159103 +2.0,-4306.135188216631,-1756.232492940117,-2043.315702861602 +2.0,768.0282403603109,-6978.108634430669,-136.86243117295544 +3.0,-493.303603620389,2945.5710538558005,3015.977272752648 +3.0,3065.7950488175957,3567.7136627691966,-241.04137932932736 +3.0,-160.63745943715548,-151.93278776521237,1903.7324611430824 +3.0,-1297.8942271953392,-2277.6199408234343,-1402.6677018943808 +3.0,1867.681760233716,-12236.85521354635,-1266.2584616045776 +3.0,-119.48688702411482,-1104.9781501799732,2916.459469830542 +3.0,3510.126847538271,-2957.3653297711385,-314.04982653824914 +3.0,-647.3916673682654,1585.4353122032537,-696.785612839734 +3.0,-3582.8631381213627,-1572.7109398691125,-3102.8361103956795 +3.0,-522.2112688499377,-10953.246463632455,889.6724350537568 +4.0,-299.1485049243082,114.829569754972,-821.5651578454349 +4.0,5003.085029883374,2726.4230172384787,-294.0691302277611 +4.0,-1564.7436471918602,-837.3618208187513,2024.1928810251354 +4.0,-1953.2185203908757,-3882.1744792666723,3523.8165230761915 +4.0,1083.4654539694006,-12559.426636878368,-1650.9803911668228 +4.0,-3046.516783288352,-296.8764365508964,3519.554154497767 +4.0,4102.367401667423,815.0064726499218,-383.47336594873576 +4.0,-125.2811230084867,1934.5909378669317,-3034.141688078798 +4.0,-3572.6362248364408,-1057.610158423584,-817.1904813656383 +4.0,-991.3855356002316,-11102.13829516479,2393.538500427305 +5.0,1282.9153891617857,-2986.4972923772934,-366.64528863717607 +5.0,3184.310120293896,2863.5489668505334,2320.216378337095 +5.0,1240.8449746803383,-2961.969248270961,-1190.7735880973198 +5.0,-4756.920645975437,-2934.989617996309,3893.0842401408 +5.0,2257.179641569941,-14398.275105345974,-1131.2148026699756 +5.0,1334.3944683316054,2802.9923734841823,5083.199898052388 +5.0,2121.294751406046,-751.5001120225525,-2857.3747877048995 +5.0,-1257.8765822140306,1290.4679054555804,-5675.05491424735 +5.0,-3373.3334946611585,569.4242763157556,226.69264986815688 +5.0,-1998.3368438326302,-13563.866928032701,2987.507846893677 diff --git a/data/assets/examples/renderable/renderableinterpolatedpoints/interpolatedpoints.asset b/data/assets/examples/renderable/renderableinterpolatedpoints/interpolatedpoints.asset new file mode 100644 index 0000000000..2983bd4421 --- /dev/null +++ b/data/assets/examples/renderable/renderableinterpolatedpoints/interpolatedpoints.asset @@ -0,0 +1,30 @@ +-- Basic +-- This example creates a point cloud that supports interpolation. The dataset is split +-- up into 10 objects, so that every tenth row represents a new position for an item at a +-- step in the interpolation. + +local Node = { + Identifier = "RenderableInterpolatedPoints_Example", + Renderable = { + Type = "RenderableInterpolatedPoints", + -- The dataset here is just a linearly expanding dataset, where the points move in + -- a straight line + File = asset.resource("data/interpolation_expand.csv"), + -- Specify how many objects the rows in the dataset represent. Here, the dataset is + -- consists of 10 objects with positions at 6 different time steps. This information + -- is required + NumberOfObjects = 10 + }, + GUI = { + Name = "RenderableInterpolatedPoints - Basic", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) diff --git a/data/assets/examples/renderable/renderableinterpolatedpoints/interpolatedpoints_colormapped.asset b/data/assets/examples/renderable/renderableinterpolatedpoints/interpolatedpoints_colormapped.asset new file mode 100644 index 0000000000..d12c15ade8 --- /dev/null +++ b/data/assets/examples/renderable/renderableinterpolatedpoints/interpolatedpoints_colormapped.asset @@ -0,0 +1,44 @@ +-- Interpolated Points with Color Mapping +-- Example of interpolating points with a color map. The data value used for the coloring +-- will also be interpolated, leading to the points changing color throughout the +-- interpolation. +-- +-- Note that the color map is loaded from another asset. This is a utility asset that +-- includes some common color maps for general usage. + +local colormaps = asset.require("util/default_colormaps") + +local Node = { + Identifier = "RenderableInterpolatedPoints_Example_ColorMapped", + Renderable = { + Type = "RenderableInterpolatedPoints", + -- The dataset here is just a linearly expanding dataset, where the points move in + -- a straight line + File = asset.resource("data/interpolation_expand.csv"), + -- Specify how many objects the rows in the dataset represent. Here, the dataset is + -- consists of 10 objects with positions at 6 different time steps + NumberOfObjects = 10, + Coloring = { + ColorMapping = { + -- For this example, we are using one of the example colormaps "Viridis" + File = colormaps.Uniform.Viridis + } + }, + -- Reduce the scale of the points a bit compared to default, so we see them more clearly + SizeSettings = { + ScaleExponent = 3.5 + } + }, + GUI = { + Name = "RenderableInterpolatedPoints - Color Mapped", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) diff --git a/data/assets/examples/renderable/renderableinterpolatedpoints/interpolatedpoints_spline.asset b/data/assets/examples/renderable/renderableinterpolatedpoints/interpolatedpoints_spline.asset new file mode 100644 index 0000000000..8fc0c3ec27 --- /dev/null +++ b/data/assets/examples/renderable/renderableinterpolatedpoints/interpolatedpoints_spline.asset @@ -0,0 +1,36 @@ +-- Smoother Interpolation (Spline-based) +-- Example of interpolating points with spline-based interpolation for the position. This +-- leads to smoother transitions at the nodes of the interpolation. + +local Node = { + Identifier = "RenderableInterpolatedPoints_Example_Spline", + Renderable = { + Type = "RenderableInterpolatedPoints", + -- Using a random walk dataset, to get movement in some different directions + File = asset.resource("data/interpolation_randomwalk.csv"), + -- Specify how many objects the rows in the dataset represent. Here, the dataset is + -- consists of 10 objects with positions at 6 different time steps + NumberOfObjects = 10, + Interpolation = { + -- Smoothen transitions between two different sets of points, by + -- using a spline based interpolation of the points + UseSplineInterpolation = true + }, + -- Reduce the scale of the points a bit compared to default, so we see them more clearly + SizeSettings = { + ScaleExponent = 3.0 + } + }, + GUI = { + Name = "RenderableInterpolatedPoints - Spline", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) diff --git a/data/assets/examples/renderable/renderablemodel/advanced/model_shader.asset b/data/assets/examples/renderable/renderablemodel/advanced/model_shader.asset new file mode 100644 index 0000000000..8db9863e65 --- /dev/null +++ b/data/assets/examples/renderable/renderablemodel/advanced/model_shader.asset @@ -0,0 +1,50 @@ +-- Custom Shaders +-- This example loads a model with custom shaders. + +-- Load the example model from OpenSpace servers +-- If you want to use your own model, this block of code can be safely deleted +local model = asset.resource({ + Name = "Animated Box", + Type = "HttpSynchronization", + Identifier = "animated_box", + Version = 1 +}) + +local Node = { + Identifier = "RenderableModel_Example_Shader", + Renderable = { + Type = "RenderableModel", + GeometryFile = model .. "BoxAnimated.glb", + -- Use the line below insted of the one above if you want to use your own model + --GeometryFile = "C:/path/to/model.fbx", + + -- PerformShading is turned off since the provided custom shaders does not do any + -- light calculations + PerformShading = false, + -- Custom shaders + VertexShader = asset.resource("../data/model_vs.glsl"), + FragmentShader = asset.resource("../data/model_fs.glsl"), + }, + GUI = { + Name = "RenderableModel - Custom Shaders", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) + + +-- Model credit +--[[ + Author = Cesium, https://cesium.com/ + URL = https://github.com/KhronosGroup/glTF-Sample-Models/tree/master/2.0/BoxAnimated + License = + Creative Commons Attribution 4.0 International License, + https://creativecommons.org/licenses/by/4.0/ +]] diff --git a/data/assets/examples/modelshader/model_fs.glsl b/data/assets/examples/renderable/renderablemodel/data/model_fs.glsl similarity index 98% rename from data/assets/examples/modelshader/model_fs.glsl rename to data/assets/examples/renderable/renderablemodel/data/model_fs.glsl index fbf50732bc..0904120f5f 100644 --- a/data/assets/examples/modelshader/model_fs.glsl +++ b/data/assets/examples/renderable/renderablemodel/data/model_fs.glsl @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * diff --git a/data/assets/examples/modelshader/model_vs.glsl b/data/assets/examples/renderable/renderablemodel/data/model_vs.glsl similarity index 98% rename from data/assets/examples/modelshader/model_vs.glsl rename to data/assets/examples/renderable/renderablemodel/data/model_vs.glsl index 76cead149f..9b42649aa3 100644 --- a/data/assets/examples/modelshader/model_vs.glsl +++ b/data/assets/examples/renderable/renderablemodel/data/model_vs.glsl @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * diff --git a/data/assets/examples/renderable/renderablemodel/model.asset b/data/assets/examples/renderable/renderablemodel/model.asset new file mode 100644 index 0000000000..b10567b2e4 --- /dev/null +++ b/data/assets/examples/renderable/renderablemodel/model.asset @@ -0,0 +1,43 @@ +-- Basic +-- This example loads a model. + +-- Load the example model from OpenSpace servers +-- If you want to use your own model, this block of code can be safely deleted +local model = asset.resource({ + Name = "Animated Box", + Type = "HttpSynchronization", + Identifier = "animated_box", + Version = 1 +}) + +local Node = { + Identifier = "RenderableModel_Example", + Renderable = { + Type = "RenderableModel", + GeometryFile = model .. "BoxAnimated.glb", + -- Use the line below insted of the one above if you want to use your own model + --GeometryFile = "C:/path/to/model.fbx", + }, + GUI = { + Name = "RenderableModel - Basic", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) + + +-- Model credit +--[[ + Author = Cesium, https://cesium.com/ + URL = https://github.com/KhronosGroup/glTF-Sample-Models/tree/master/2.0/BoxAnimated + License = + Creative Commons Attribution 4.0 International License, + https://creativecommons.org/licenses/by/4.0/ +]] diff --git a/data/assets/examples/renderable/renderablemodel/model_animation.asset b/data/assets/examples/renderable/renderablemodel/model_animation.asset new file mode 100644 index 0000000000..b977c80e2a --- /dev/null +++ b/data/assets/examples/renderable/renderablemodel/model_animation.asset @@ -0,0 +1,49 @@ +-- Animation +-- This example loads a model with an animation. The animation starts at a set time, in +-- this case "2024 07 09 12:00:00". + +-- Load the example model from OpenSpace servers +-- If you want to use your own model, this block of code can be safely deleted +local model = asset.resource({ + Name = "Animated Box", + Type = "HttpSynchronization", + Identifier = "animated_box", + Version = 1 +}) + +local Node = { + Identifier = "RenderableModel_Example_Animation", + Renderable = { + Type = "RenderableModel", + GeometryFile = model .. "BoxAnimated.glb", + -- Use the line below insted of the one above if you want to use your own model + --GeometryFile = "C:/path/to/model.fbx", + + -- Animation Parameters: + EnableAnimation = true, + -- Start the animation and play it once at this time + AnimationStartTime = "2024 07 09 12:00:00", + }, + GUI = { + Name = "RenderableModel - Basic Animation", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) + + +-- Model credit +--[[ + Author = Cesium, https://cesium.com/ + URL = https://github.com/KhronosGroup/glTF-Sample-Models/tree/master/2.0/BoxAnimated + License = + Creative Commons Attribution 4.0 International License, + https://creativecommons.org/licenses/by/4.0/ +]] diff --git a/data/assets/examples/renderable/renderablemodel/model_animation_mode_bounce.asset b/data/assets/examples/renderable/renderablemodel/model_animation_mode_bounce.asset new file mode 100644 index 0000000000..0ab0634aa1 --- /dev/null +++ b/data/assets/examples/renderable/renderablemodel/model_animation_mode_bounce.asset @@ -0,0 +1,52 @@ +-- Animation Bounce From Start +-- This example loads a model with an animation. The animation starts at a set time, in +-- this case "2024 07 09 12:00:00" and is set to bounce after that time (bounce is similar +-- to a boomerang for videos). + +-- Load the example model from OpenSpace servers +-- If you want to use your own model, this block of code can be safely deleted +local model = asset.resource({ + Name = "Animated Box", + Type = "HttpSynchronization", + Identifier = "animated_box", + Version = 1 +}) + +local Node = { + Identifier = "RenderableModel_Example_Animation_Bounce", + Renderable = { + Type = "RenderableModel", + GeometryFile = model .. "BoxAnimated.glb", + -- Use the line below insted of the one above if you want to use your own model + --GeometryFile = "C:/path/to/model.fbx", + + -- Animation Parameters: + EnableAnimation = true, + -- Start the animation and play it once at this time + AnimationStartTime = "2024 07 09 12:00:00", + -- Bounce the animation after the set start time + AnimationMode = "BounceFromStart", + }, + GUI = { + Name = "RenderableModel - Animation Bounce From Start", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) + + +-- Model credit +--[[ + Author = Cesium, https://cesium.com/ + URL = https://github.com/KhronosGroup/glTF-Sample-Models/tree/master/2.0/BoxAnimated + License = + Creative Commons Attribution 4.0 International License, + https://creativecommons.org/licenses/by/4.0/ +]] diff --git a/data/assets/examples/renderable/renderablemodel/model_animation_mode_bounce_infinitely.asset b/data/assets/examples/renderable/renderablemodel/model_animation_mode_bounce_infinitely.asset new file mode 100644 index 0000000000..1fd1d5c33b --- /dev/null +++ b/data/assets/examples/renderable/renderablemodel/model_animation_mode_bounce_infinitely.asset @@ -0,0 +1,52 @@ +-- Animation Bounce Infinitely +-- This example loads a model with an animation. The animation starts at a set time, in +-- this case "2024 07 09 12:00:00" and is set to bounce both before and after that time +-- (bounce is similar to a boomerang for videos). + +-- Load the example model from OpenSpace servers +-- If you want to use your own model, this block of code can be safely deleted +local model = asset.resource({ + Name = "Animated Box", + Type = "HttpSynchronization", + Identifier = "animated_box", + Version = 1 +}) + +local Node = { + Identifier = "RenderableModel_Example_Animation_Bounce_Infinitely", + Renderable = { + Type = "RenderableModel", + GeometryFile = model .. "BoxAnimated.glb", + -- Use the line below insted of the one above if you want to use your own model + --GeometryFile = "C:/path/to/model.fbx", + + -- Animation Parameters: + EnableAnimation = true, + -- Start the animation and play it once at this time + AnimationStartTime = "2024 07 09 12:00:00", + -- Bounce the animation both before and after the set start time + AnimationMode = "BounceInfinitely", + }, + GUI = { + Name = "RenderableModel - Animation Bounce Infinitely", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) + + +-- Model credit +--[[ + Author = Cesium, https://cesium.com/ + URL = https://github.com/KhronosGroup/glTF-Sample-Models/tree/master/2.0/BoxAnimated + License = + Creative Commons Attribution 4.0 International License, + https://creativecommons.org/licenses/by/4.0/ +]] diff --git a/data/assets/examples/renderable/renderablemodel/model_animation_mode_loop.asset b/data/assets/examples/renderable/renderablemodel/model_animation_mode_loop.asset new file mode 100644 index 0000000000..2d441b0771 --- /dev/null +++ b/data/assets/examples/renderable/renderablemodel/model_animation_mode_loop.asset @@ -0,0 +1,51 @@ +-- Animation Loop From Start +-- This example loads a model with an animation. The animation starts at a set time, in +-- this case "2024 07 09 12:00:00" and is set to loop after that time. + +-- Load the example model from OpenSpace servers +-- If you want to use your own model, this block of code can be safely deleted +local model = asset.resource({ + Name = "Animated Box", + Type = "HttpSynchronization", + Identifier = "animated_box", + Version = 1 +}) + +local Node = { + Identifier = "RenderableModel_Example_Animation_Loop", + Renderable = { + Type = "RenderableModel", + GeometryFile = model .. "BoxAnimated.glb", + -- Use the line below insted of the one above if you want to use your own model + --GeometryFile = "C:/path/to/model.fbx", + + -- Animation Parameters: + EnableAnimation = true, + -- Start the animation and play it once at this time + AnimationStartTime = "2024 07 09 12:00:00", + -- Loop the animation after the set start time + AnimationMode = "LoopFromStart", + }, + GUI = { + Name = "RenderableModel - Animation Loop From Start", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) + + +-- Model credit +--[[ + Author = Cesium, https://cesium.com/ + URL = https://github.com/KhronosGroup/glTF-Sample-Models/tree/master/2.0/BoxAnimated + License = + Creative Commons Attribution 4.0 International License, + https://creativecommons.org/licenses/by/4.0/ +]] diff --git a/data/assets/examples/renderable/renderablemodel/model_animation_mode_loop_infinitely.asset b/data/assets/examples/renderable/renderablemodel/model_animation_mode_loop_infinitely.asset new file mode 100644 index 0000000000..5b8852c970 --- /dev/null +++ b/data/assets/examples/renderable/renderablemodel/model_animation_mode_loop_infinitely.asset @@ -0,0 +1,51 @@ +-- Animation Loop Infinitely +-- This example loads a model with an animation. The animation starts at a set time, in +-- this case "2024 07 09 12:00:00" and is set to loop both before and after that time. + +-- Load the example model from OpenSpace servers +-- If you want to use your own model, this block of code can be safely deleted +local model = asset.resource({ + Name = "Animated Box", + Type = "HttpSynchronization", + Identifier = "animated_box", + Version = 1 +}) + +local Node = { + Identifier = "RenderableModel_Example_Animation_Loop_Infinitely", + Renderable = { + Type = "RenderableModel", + GeometryFile = model .. "BoxAnimated.glb", + -- Use the line below insted of the one above if you want to use your own model + --GeometryFile = "C:/path/to/model.fbx", + + -- Animation Parameters: + EnableAnimation = true, + -- Start the animation and play it once at this time + AnimationStartTime = "2024 07 09 12:00:00", + -- Loop the animation both before and after the set start time + AnimationMode = "LoopInfinitely", + }, + GUI = { + Name = "RenderableModel - Animation Loop Infinitely", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) + + +-- Model credit +--[[ + Author = Cesium, https://cesium.com/ + URL = https://github.com/KhronosGroup/glTF-Sample-Models/tree/master/2.0/BoxAnimated + License = + Creative Commons Attribution 4.0 International License, + https://creativecommons.org/licenses/by/4.0/ +]] diff --git a/data/assets/examples/renderable/renderablemodel/model_lighting.asset b/data/assets/examples/renderable/renderablemodel/model_lighting.asset new file mode 100644 index 0000000000..d848937f2c --- /dev/null +++ b/data/assets/examples/renderable/renderablemodel/model_lighting.asset @@ -0,0 +1,51 @@ +-- Lighting +-- This example loads a model and load the Sun to illuminate it. + +-- Load the asset of the Sun to illuminate the model +local sun = asset.require("scene/solarsystem/sun/transforms") + +-- Load the example model from OpenSpace servers +-- If you want to use your own model, this block of code can be safely deleted +local model = asset.resource({ + Name = "Animated Box", + Type = "HttpSynchronization", + Identifier = "animated_box", + Version = 1 +}) + +local Node = { + Identifier = "RenderableModel_Example_Lighting", + Renderable = { + Type = "RenderableModel", + GeometryFile = model .. "BoxAnimated.glb", + -- Use the line below insted of the one above if you want to use your own model + --GeometryFile = "C:/path/to/model.fbx", + + -- Add the Sun as a light source to illuminate the model + LightSources = { + sun.LightSource + } + }, + GUI = { + Name = "RenderableModel - Lighting", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) + + +-- Model credit +--[[ + Author = Cesium, https://cesium.com/ + URL = https://github.com/KhronosGroup/glTF-Sample-Models/tree/master/2.0/BoxAnimated + License = + Creative Commons Attribution 4.0 International License, + https://creativecommons.org/licenses/by/4.0/ +]] diff --git a/data/assets/examples/renderable/renderablemodel/model_vertex_colors.asset b/data/assets/examples/renderable/renderablemodel/model_vertex_colors.asset new file mode 100644 index 0000000000..83471ddacb --- /dev/null +++ b/data/assets/examples/renderable/renderablemodel/model_vertex_colors.asset @@ -0,0 +1,43 @@ +-- Vertex Colors +-- This example loads a model with vertex colors as material. + +-- Load the example model from OpenSpace servers +-- If you want to use your own model, this block of code can be safely deleted +local model = asset.resource({ + Name = "Vertex Colors Test Model", + Type = "HttpSynchronization", + Identifier = "model_vertex_color_test", + Version = 1 +}) + +local Node = { + Identifier = "RenderableModel_Example_Vertex_Colors", + Renderable = { + Type = "RenderableModel", + GeometryFile = model .. "VertexColorTest.glb", + -- Use the line below insted of the one above if you want to use your own model + --GeometryFile = "C:/path/to/model.fbx", + }, + GUI = { + Name = "RenderableModel - Vertex Colors", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) + + +-- Model credit +--[[ + Author = Ed Mackey + URL = "https://github.com/KhronosGroup/glTF-Sample-Models/tree/main/2.0/VertexColorTest" + License = + Creative Commons Attribution 4.0 International License, + https://creativecommons.org/licenses/by/4.0/ +]] diff --git a/data/assets/examples/renderable/renderablenodearrow/nodearrow.asset b/data/assets/examples/renderable/renderablenodearrow/nodearrow.asset new file mode 100644 index 0000000000..ffba54f962 --- /dev/null +++ b/data/assets/examples/renderable/renderablenodearrow/nodearrow.asset @@ -0,0 +1,39 @@ +-- Basic +-- This example shows an arrow pointing from one scene graph node in the direction of +-- another. Here, it points from Earth to Mars. +-- +-- Note that the arrows are generated as objects in 3D space and need to have a size +-- that is suitable for the scene graph nodes they refer to. Here it is set based on +-- the size of the Earth. + +local earth = asset.require("scene/solarsystem/planets/earth/earth") +local mars = asset.require("scene/solarsystem/planets/mars/mars") + +local Node = { + Identifier = "RenderableNodeArrow_Example", + -- Parent to the start node, so that when we focus on the arrow this is where we end up + Parent = earth.Earth.Identifier, + Renderable = { + Type = "RenderableNodeArrow", + StartNode = earth.Earth.Identifier, + EndNode = mars.Mars.Identifier, + -- How far away from the start node should the arrow start (meters) + Offset = 2 * 6371000.0, + -- How long should the arrow be (meters) + Length = 5 * 6371000.0, + -- How wide should the arrow be (meters) + Width = 900000.0 + }, + GUI = { + Name = "RenderableNodeArrow - Basic", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) diff --git a/data/assets/examples/renderable/renderablenodearrow/nodearrow_appearance.asset b/data/assets/examples/renderable/renderablenodearrow/nodearrow_appearance.asset new file mode 100644 index 0000000000..50eb794286 --- /dev/null +++ b/data/assets/examples/renderable/renderablenodearrow/nodearrow_appearance.asset @@ -0,0 +1,41 @@ +-- Custom Appearance (Colored & Inverted) +-- This example shows an arrow pointing from one scene graph node in the direction of +-- another. Here, it is created with the Solar System barycenter as start node and +-- Earth as end node, but the arrow direction is inverted so that it points towards +-- the Solar System barycenter. Some appearance related properties are also changed to +-- customize the look of the arrow, but default values are used for its size. + +local earth = asset.require("scene/solarsystem/planets/earth/earth") +local sunTransforms = asset.require("scene/solarsystem/sun/transforms") + +local Node = { + Identifier = "RenderableNodeArrow_Example_Appearance", + -- Parent to the start node, so that when we focus on the arrow this is where we end up + Parent = sunTransforms.SolarSystemBarycenter.Identifier, + Renderable = { + Type = "RenderableNodeArrow", + StartNode = sunTransforms.SolarSystemBarycenter.Identifier, + EndNode = earth.Earth.Identifier, + -- Point to start node instead of end node + Invert = true, + -- Give the arrow a custom color (here a dark red) + Color = { 0.5, 0.0, 0.0 }, + -- Set the arrow head size so that it takes up a quarter (25%) of the full length of + -- the arrow + ArrowHeadSize = 0.25, + -- Set the arrow head width. A value of 1 makes it as wide as the body of the arrow + ArrowHeadWidthFactor = 1.0 + }, + GUI = { + Name = "RenderableNodeArrow - Custom Appearance (Colored & Inverted)", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) diff --git a/data/assets/examples/renderable/renderablenodearrow/nodearrow_relativevalues.asset b/data/assets/examples/renderable/renderablenodearrow/nodearrow_relativevalues.asset new file mode 100644 index 0000000000..9e8d90ec06 --- /dev/null +++ b/data/assets/examples/renderable/renderablenodearrow/nodearrow_relativevalues.asset @@ -0,0 +1,42 @@ +-- Relative Units for Offset and Length +-- This example shows an arrow pointing from one scene graph node in the direction of +-- another, but where the size is specified using relative values (based on the bounding +-- sphere of the start node). Here it points from Earth to the Moon. +-- +-- Note that the arrows are generated as objects in 3D space and need to have a size +-- that is suitable for the scene graph nodes they refer to. Here it is set based on +-- the size of the start node, i.e. Earth. + +local earth = asset.require("scene/solarsystem/planets/earth/earth") +local moon = asset.require("scene/solarsystem/planets/earth/moon/moon") + +local Node = { + Identifier = "RenderableNodeArrow_Example_Relative", + -- Parent to the start node, so that when we focus on the arrow this is where we end up + Parent = earth.Earth.Identifier, + Renderable = { + Type = "RenderableNodeArrow", + StartNode = earth.Earth.Identifier, + EndNode = moon.Moon.Identifier, + -- Use relative values for offset and length + UseRelativeOffset = true, + UseRelativeLength = true, + -- Specify relative values (times the size of Earth, in this case) + Offset = 2.0, + Length = 5.0, + -- Width is in meters + Width = 900000.0 + }, + GUI = { + Name = "RenderableNodeArrow - Relative Units", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) diff --git a/data/assets/examples/renderable/renderablenodeline/nodeline.asset b/data/assets/examples/renderable/renderablenodeline/nodeline.asset new file mode 100644 index 0000000000..8bc0ead9f2 --- /dev/null +++ b/data/assets/examples/renderable/renderablenodeline/nodeline.asset @@ -0,0 +1,35 @@ +-- Basic +-- This example draws a line between two nodes in the scene, in this case the planets +-- Earth and Mars. +-- +-- Note that this example asset is used in another example, for +-- [RenderableDistanceLabel](#base_renderable_distancelabel). Due to this, we export the +-- `Node` table so we can access and refer to its identifier in the other example, the +-- same way as we do for Earth and Mars in this asset. + +local earth = asset.require("scene/solarsystem/planets/earth/earth") +local mars = asset.require("scene/solarsystem/planets/mars/mars") + +local Node = { + Identifier = "RenderableNodeLine_Example", + Renderable = { + Type = "RenderableNodeLine", + StartNode = earth.Earth.Identifier, + EndNode = mars.Mars.Identifier + }, + GUI = { + Name = "RenderableNodeLine - Basic", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) + +-- Export the Node table so it can be used in another example +asset.export("NodeLine", Node) diff --git a/data/assets/examples/renderable/renderableplaneimageonline/planeimageonline.asset b/data/assets/examples/renderable/renderableplaneimageonline/planeimageonline.asset new file mode 100644 index 0000000000..125639ac4b --- /dev/null +++ b/data/assets/examples/renderable/renderableplaneimageonline/planeimageonline.asset @@ -0,0 +1,24 @@ +-- Basic +-- This example shows how to create a textured plane in 3D space, where the texture is +-- loaded from the internet though a web URL. + +local Node = { + Identifier = "RenderablePlaneImageOnline_Example", + Renderable = { + Type = "RenderablePlaneImageOnline", + Size = 3.0E11, + URL = "http://data.openspaceproject.com/examples/renderableplaneimageonline.jpg" + }, + GUI = { + Name = "RenderablePlaneImageOnline - Basic", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) diff --git a/data/assets/examples/renderable/renderableplaneimageonline/planeimageonline_billboarded.asset b/data/assets/examples/renderable/renderableplaneimageonline/planeimageonline_billboarded.asset new file mode 100644 index 0000000000..e89d8eaad9 --- /dev/null +++ b/data/assets/examples/renderable/renderableplaneimageonline/planeimageonline_billboarded.asset @@ -0,0 +1,26 @@ +-- Billboarded Image +-- This example shows how to create a textured plane in 3D space, where the texture is +-- loaded from the internet though a web URL and the plane is billboarded to always +-- face the camera. + +local Node = { + Identifier = "RenderablePlaneImageOnline_Example_Billboarded", + Renderable = { + Type = "RenderablePlaneImageOnline", + Size = 3.0E11, + URL = "http://data.openspaceproject.com/examples/renderableplaneimageonline.jpg", + Billboarded = true + }, + GUI = { + Name = "RenderablePlaneImageOnline - Billboarded", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) diff --git a/data/assets/examples/renderable/renderablepointcloud/advanced/pointcloud_colormappingsettings.asset b/data/assets/examples/renderable/renderablepointcloud/advanced/pointcloud_colormappingsettings.asset new file mode 100644 index 0000000000..b706e69db2 --- /dev/null +++ b/data/assets/examples/renderable/renderablepointcloud/advanced/pointcloud_colormappingsettings.asset @@ -0,0 +1,69 @@ +-- Advanced Color Mapping +-- This example shows almost all the available settings for the color mapping used +-- for point clouds. This includes handling missing data values, using +-- separate colors for values outside the data range used for the color mapping, as well +-- as setting the default parameter and range. + +local colormaps = asset.require("util/default_colormaps") + +local Node = { + Identifier = "RenderablePointCloud_Example_AdvancedColorMapping", + Renderable = { + Type = "RenderablePointCloud", + File = asset.resource("../data/dummydata.csv"), + Coloring = { + ColorMapping = { + -- Use white-to-black color map + File = colormaps.Sequential.Greys, + -- Invert the color map so it goes from dark to bright (black-to-white) instead + -- of from bright to dark + Invert = true, + -- Set the default choice of parameter and value range explicitly. Values + -- outside this range will be given special colors + Parameter = "normaldist_withMissing", + ValueRange = { -0.25, 0.25 }, + -- Show missing data values, so we can show these in a specific color + ShowMissingData = true, + -- Color for missing data points + NoDataColor = { 1.0, 0.0, 0.0, 1.0 }, + -- Color for point with values above the given range. If not set, or if + -- UseAboveRangeColor is false, the color will be set to the last value + -- in the color map (as per default) + AboveRangeColor = { 0.0, 1.0, 0.0, 1.0 }, + -- Color for point with values below the given range. If not set, or if + -- UseAboveRangeColor is false, the color will be set to the first value + -- in the color map (as per default) + BelowRangeColor = { 0.0, 0.0, 1.0, 1.0 }, + + -- Some other parameters that can be set are the following (these are all the + -- default values): + + -- If true, completely hide all values outside the range + HideValuesOutsideRange = false, + -- Toggle whether the above range color should be used + UseAboveRangeColor = true, + -- Toggle whether the below range color should be used + UseBelowRangeColor = true + } + }, + SizeSettings = { + -- Reduce the size of the point a little bit so that they don't overlap so much + ScaleFactor = 0.5 + } + }, + GUI = { + Name = "RenderablePointCloud - Advanced Color Mapping", + Path = "/Examples/Advanced", + Description = [[Example of a point cloud where the range is set explicitly and + specific colors are used for values outside the range, as well as for missing + data values.]] + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) diff --git a/data/assets/examples/renderable/renderablepointcloud/advanced/pointcloud_datamapping.asset b/data/assets/examples/renderable/renderablepointcloud/advanced/pointcloud_datamapping.asset new file mode 100644 index 0000000000..dbdefec9c8 --- /dev/null +++ b/data/assets/examples/renderable/renderablepointcloud/advanced/pointcloud_datamapping.asset @@ -0,0 +1,52 @@ +-- Custom Data Mapping +-- Example of a point cloud with a custom data mapping. The X, Y, and Z position are +-- mapped to other columns in the dataset. The data mapping also includes some settings +-- for missing data values and columns to exclude when loading the dataset. + +local colormaps = asset.require("util/default_colormaps") + +local Node = { + Identifier = "RenderablePointCloud_Example_DataMapping", + Renderable = { + Type = "RenderablePointCloud", + File = asset.resource("../data/dummydata.csv"), + DataMapping = { + -- Using the DataMapping, we can specify the X, Y and Z values of the point + -- positions to be set by any value in the dataset, without changing the dataset + -- used for the rendering + X = "a", + Y = "b", + Z = "a", + -- It is also possible to specify a numeric value that corresponds to missing + -- values in the dataset. These will be interpreted as NaN values + MissingDataValue = 29, + -- And some column that we do not want to include in the loading. Here we can for + -- example skip the regular position columns + ExcludeColumns = { "x", "y", "z" } + }, + -- Interpret values as Parsec rather than meter. The values in the a and b columns + -- are much smaller than the x, y and z + Unit = "pc", + -- To show the values corresponding to missing values, use a color map and show + -- missing data values in a specific color + Coloring = { + ColorMapping = { + File = colormaps.Uniform.Magma, + ShowMissingData = true, + NoDataColor = { 1.0, 0.0, 0.0, 1.0 } + } + } + }, + GUI = { + Name = "RenderablePointCloud - Custom Data Mapping", + Path = "/Examples/Advanced" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) diff --git a/data/assets/examples/renderable/renderablepointcloud/advanced/pointcloud_fading.asset b/data/assets/examples/renderable/renderablepointcloud/advanced/pointcloud_fading.asset new file mode 100644 index 0000000000..48d3aa493a --- /dev/null +++ b/data/assets/examples/renderable/renderablepointcloud/advanced/pointcloud_fading.asset @@ -0,0 +1,68 @@ +-- Fading +-- Example of a point cloud with distance-based fading. + +local Node = { + Identifier = "RenderablePointCloud_Example_Fading", + Renderable = { + Type = "RenderablePointCloud", + File = asset.resource("../data/dummydata.csv"), + Coloring = { + FixedColor = { 0.0, 0.3, 1.0 } + }, + Fading = { + -- Control at what distance the points fade in. The points will be invisible + -- when the camera is closer than the first value, and fully visible when the + -- camera is further away then the last value. In-between they will linearly + -- fade in or out + FadeInDistances = { 150000000.0, 350000000.0 } + } + }, + GUI = { + Name = "RenderablePointCloud - Fading", + Path = "/Examples/Advanced", + Description = [[Example of a point cloud with distance-based fading (the points + are visible when the camera reaches a certain distance away from the origin)]] + } +} + +local Node_Invert = { + Identifier = "RenderablePointCloud_Example_FadingInverted", + -- Rotate to not overlap with the other dataset + Transform = { + Rotation = { + Type = "StaticRotation", + Rotation = { 0, 0, -0.5 * math.pi } + } + }, + Renderable = { + Type = "RenderablePointCloud", + File = asset.resource("../data/dummydata.csv"), + Coloring = { + FixedColor = { 1.0, 0.3, 0.0 } + }, + Fading = { + -- Use the same fade distances, but invert the fading so that the points are + -- visible when the camera is closer to the origin that the first value, and + -- invisible when further away than the last value + FadeInDistances = { 150000000.0, 350000000.0 }, + Invert = true + } + }, + GUI = { + Name = "Fading (Inverted)", + Path = "/Examples/RenderablePointCloud/Advanced", + Description = [[Example of a point cloud with inverted distance-based fading + (the points are visible when the camera is close to the origin, and invisible + when further away)]] + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) + openspace.addSceneGraphNode(Node_Invert) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node_Invert) + openspace.removeSceneGraphNode(Node) +end) diff --git a/data/assets/examples/renderable/renderablepointcloud/advanced/pointcloud_labels.asset b/data/assets/examples/renderable/renderablepointcloud/advanced/pointcloud_labels.asset new file mode 100644 index 0000000000..db3d4399a0 --- /dev/null +++ b/data/assets/examples/renderable/renderablepointcloud/advanced/pointcloud_labels.asset @@ -0,0 +1,84 @@ +-- Labels +-- This example creates a point cloud with labels created from a column in the dataset +-- or from a separate .labels file. + +local Node = { + Identifier = "RenderablePointCloud_Example_Labels", + Renderable = { + Type = "RenderablePointCloud", + File = asset.resource("../data/dummydata.csv"), + Coloring = { + FixedColor = { 0.0, 1.0, 0.3 } + }, + DataMapping = { + -- When loading labels from a CSV file, we need to provide information about + -- which column corresponds to the name to be used for the labels (this is + -- not required for SPECK files) + Name = "number_withNan" + }, + -- Add a unit to interpret the points to be in kilometers rather than meters + Unit = "Km", + -- Add some labels. We also need to enable them for them to be visible. + -- The positions and text of the labels will be set based on the information + -- in the CSV file + Labels = { + Enabled = true, + -- Give the labels a size that looks good + Size = 7.5 + } + }, + GUI = { + Name = "RenderablePointCloud - Labels", + Path = "/Examples/Advanced" + } +} + +-- @TODO (2024-04-30, emmbr) These labels are not correctly oriented towards the camera. +-- This is a known bug waiting to be fixed (related Github issues are #2493, #1605, +-- and #1266). + +local Node_LabelsFile = { + Identifier = "RenderablePointCloud_Example_LabelsFile", + -- Rotate to not overlap with the other dataset + Transform = { + Rotation = { + Type = "StaticRotation", + Rotation = { 0, 0, -0.5 * math.pi } + } + }, + Renderable = { + Type = "RenderablePointCloud", + File = asset.resource("../data/dummydata.csv"), + Coloring = { + FixedColor = { 0.0, 0.3, 1.0 } + }, + -- Add a unit to interpret the points to be in kilometers rather than meters + Unit = "Km", + -- Also load a label file with the positions of the label (in this case they are the + -- same as in the CSV file, but that is not always the case) + Labels = { + Enabled = true, + File = asset.resource("../data/dummydata.label"), + Size = 7.5, + -- When we add an explicit label file we also have to specify the unit, if it is + -- different than meters + Unit = "Km" + } + }, + GUI = { + Name = "Labels - Custom File", + Path = "/Examples/RenderablePointCloud/Advanced", + Description = [[Example of a point cloud with labels, created from a .label file]] + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) + openspace.addSceneGraphNode(Node_LabelsFile) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) + openspace.removeSceneGraphNode(Node_LabelsFile) +end) + diff --git a/data/assets/examples/renderable/renderablepointcloud/advanced/pointcloud_multitextured.asset b/data/assets/examples/renderable/renderablepointcloud/advanced/pointcloud_multitextured.asset new file mode 100644 index 0000000000..296a1d366c --- /dev/null +++ b/data/assets/examples/renderable/renderablepointcloud/advanced/pointcloud_multitextured.asset @@ -0,0 +1,95 @@ +-- Multi-textured Points +-- Example of point clouds where multiple textures are used for the points, +-- based on information in the dataset. The dataset may be either CSV or Speck format. +-- +-- Load data from a CSV file. This requires additional information to be provided through +-- the DataMapping: +-- 1) Which column in the dataset that corresponds to the texture, and +-- 2) a separate file that maps that value to a texture file. + +local Node = { + Identifier = "RenderablePointCloud_Example_MultiTextured_CSV", + Renderable = { + Type = "RenderablePointCloud", + File = asset.resource("../data/multitextured_csv/textured_points.csv"), + DataMapping = { + -- The name of the column in the CSV file that corresponds to the texture (should + -- be an integer) + TextureColumn = "texture", + -- A Texture mapping file that provides information about which value/index + -- corresponds to which texture file + TextureMapFile = asset.resource("../data/multitextured_csv/texturemap.tmap") + }, + Texture = { + -- Where to find the texture files (in this case, in the OpenSpace data folder) + Folder = openspace.absPath("${DATA}") + }, + UseAdditiveBlending = false + }, + GUI = { + Name = "RenderablePointCloud - Multi-Textured", + Path = "/Examples/RenderablePointCloud/Advanced" + } +} + + +-- Interpolated +-- Multi-texturing works also for interpolated point clouds. Here, we let the same +-- dataset as used above be interpreted as representing only two points, with a different +-- texture. Note that the textures will be set based on the first two data items and will +-- not be changed during interpolation +local Node_Interpolated = { + Identifier = "RenderablePointCloud_Example_MultiTextured_Interpolated", + Renderable = { + Type = "RenderableInterpolatedPoints", + File = asset.resource("../data/multitextured_csv/textured_points.csv"), + NumberOfObjects = 2, + DataMapping = { + TextureColumn = "texture", + TextureMapFile = asset.resource("../data/multitextured_csv/texturemap.tmap") + }, + Texture = { + Folder = openspace.absPath("${DATA}") + }, + UseAdditiveBlending = false + }, + GUI = { + Name = "Multi-Textured (with interpolation)", + Path = "/Examples/RenderablePointCloud/Advanced" + } +} + +-- Load data from a Speck file. This allows storing all data in one single file, including +-- the texture mapping) Note that we disable this scene graph node per default here, as it +-- shows the same information as the CSV version +local Node_Speck = { + Identifier = "RenderablePointCloud_Example_MultiTextured_Speck", + Renderable = { + Type = "RenderablePointCloud", + Enabled = false, + -- When loading multi-texture information from a speck file, we do not need a + -- DataMapping entry - all information is in the file + File = asset.resource("../data/multitextured_speck/textures_points.speck"), + Texture = { + -- However, we do still need to specify where the textures are located + Folder = openspace.absPath("${DATA}") + }, + UseAdditiveBlending = false + }, + GUI = { + Name = "Multi-Textured (Speck file)", + Path = "/Examples/RenderablePointCloud/Advanced" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) + openspace.addSceneGraphNode(Node_Interpolated) + openspace.addSceneGraphNode(Node_Speck) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node_Speck) + openspace.removeSceneGraphNode(Node_Interpolated) + openspace.removeSceneGraphNode(Node) +end) diff --git a/data/assets/examples/renderable/renderablepointcloud/data/dummydata.csv b/data/assets/examples/renderable/renderablepointcloud/data/dummydata.csv new file mode 100644 index 0000000000..0df526dbac --- /dev/null +++ b/data/assets/examples/renderable/renderablepointcloud/data/dummydata.csv @@ -0,0 +1,104 @@ +# A dummy dataset with an xyz position and some random data columns. +# The last two columns has data values with either missing values or +# Nan values (which can be handled seprately when color mapping) +x,y,z,a,b,normaldist_withMissing,number_withNan +13428000,26239000,45870000,-3.226548224,33.95773276,-0.357778948,29 +14727000,45282000,10832000,45.05941924,-106.0395917,,29 +24999000,28370000,19911000,-70.58906931,154.1851656,-0.167961782,Nan +26539000,36165000,39582000,-13.3663358,71.79484733,0.113536778,9 +49056000,24775000,14626000,21.42870979,-115.6088304,0.125551095,37 +43965000,21472000,18760000,65.07055022,-56.36880466,0.172981386,18 +15661000,28429000,16965000,76.15826514,125.3163407,,40 +25046000,36006000,49453000,-22.31710915,137.4486786,0.447921314,28 +13797000,34811000,18825000,-79.40300933,74.05580595,-0.02379786,12 +13879000,14824000,41472000,-30.93548431,-8.755047834,-0.041777813,50 +11481000,20480000,25925000,75.51244012,178.1377926,-0.044396255,0 +45032000,16606000,23537000,37.38766828,175.5064508,-0.449674816,13 +14395000,34940000,21968000,-31.6863061,-116.6587323,-0.09741961,30 +15945000,21478000,29536000,-53.01226701,59.18196347,0.304142338,30 +13458000,19017000,18542000,8.72692265,80.65872957,,45 +45302000,15732000,34369000,-85.57061714,124.6890481,-0.364449145,20 +15559000,36269000,18160000,-4.975784243,-156.8789425,-0.012893853,22 +16552000,14570000,39763000,-39.2579671,75.22960824,-0.281792015,Nan +11353000,13410000,38311000,8.610608538,-36.43103437,-0.196021206,9 +12383000,49302000,33539000,69.26506588,-109.0830926,-0.147483079,34 +44302000,21387000,23434000,16.14574541,78.81171702,0.115624185,5 +43107000,14206000,24728000,37.57233254,142.6103028,,Nan +49320000,43878000,24240000,-39.10527498,149.2751575,-0.086246397,29 +37519000,40514000,16409000,-24.14434437,157.2871976,-0.071946303,12 +37202000,40122000,42551000,-79.88824934,-124.089513,0.375414362,31 +12783000,11757000,25348000,-11.83866388,118.2423568,-0.243289139,Nan +39621000,30560000,15929000,75.8365484,-95.18288548,-0.399996182,37 +10937000,15183000,21413000,-32.40573,-157.8337361,-0.202310776,39 +39411000,12532000,44006000,34.67409469,-83.29512212,,Nan +47905000,25552000,28902000,36.19437814,52.25734185,,32 +28426000,45268000,27886000,-70.843469,-63.7321218,0.112287307,45 +15026000,45897000,23911000,-89.01161062,10.16376248,-0.00400866,Nan +24625000,14844000,12837000,88.91663258,169.8003753,-0.151728888,5 +46304000,21144000,24421000,-41.58069299,59.63971512,-0.371030712,48 +29558000,10724000,27312000,9.663492403,-71.18121738,0.344402457,Nan +49636000,27202000,24626000,59.46440387,-92.91431055,0.26256468,31 +38603000,23794000,41040000,70.45128929,-67.84861911,-0.184920666,48 +37336000,21742000,40982000,-15.69131418,134.6754731,0.078786176,15 +35128000,38725000,25244000,2.279345664,34.91612867,0.091098807,44 +30419000,33591000,39512000,-56.16030331,133.9105282,-0.590693487,8 +18665000,11189000,45438000,-45.68302316,-85.35524485,0.046936859,26 +15442000,36392000,16074000,81.4389588,-56.70945587,0.038804669,5 +43378000,27900000,38748000,-74.35249265,-133.1884413,0.429053963,17 +44424000,19982000,13528000,-81.19709235,49.49364675,0.115926289,47 +42733000,15383000,28933000,75.17020088,-11.11330632,0.127627239,32 +40144000,46822000,29588000,-81.25577073,-135.8002245,0.346061193,33 +16927000,38232000,43931000,-80.97022269,157.7565432,-0.096039391,39 +38910000,36030000,38003000,-37.79005665,-1.5474944,0.107402594,11 +48340000,38510000,39290000,21.94846638,-112.6129615,0.230803493,3 +17258000,45665000,27152000,80.73726495,-31.33714033,-0.079079307,10 +48363000,39701000,11905000,11.83766221,-69.99777106,-0.002514692,3 +27660000,29370000,26029000,8.179457229,147.7719143,-0.006520509,31 +47106000,30527000,17038000,73.00898959,9.988869939,0.797492967,5 +10471000,37521000,35398000,57.46145065,-29.5045034,-0.261313809,39 +27774000,44082000,40036000,78.47974779,-4.998179635,0.437739286,24 +46887000,20413000,36649000,51.11098102,-136.3276432,0.237434245,41 +10093000,46706000,19187000,-58.41750426,-157.9933447,0.275586609,45 +49093000,36514000,38499000,-55.41355694,150.177605,0.576467955,21 +48945000,49826000,23225000,-63.91174083,-177.7191007,0.475443991,Nan +26852000,28926000,32243000,-77.854481,116.9006581,,1 +34219000,34787000,30801000,-62.32990484,23.24232366,0.089523916,40 +31075000,30369000,36898000,-77.78314619,38.69526825,-0.046423443,7 +28135000,21412000,25552000,-7.411565773,-88.65122734,0.258690016,Nan +13347000,15980000,43094000,74.71054756,-37.32614369,,7 +26928000,31159000,16653000,-32.74503199,146.7695347,0.576290488,34 +12364000,14374000,43646000,28.70641859,-92.35199713,-0.059531367,16 +38991000,49388000,48534000,56.70658222,8.014973542,-0.173400177,30 +17180000,14935000,11680000,-45.39957586,102.5726701,0.16285705,1 +27666000,29337000,44778000,89.4063742,-79.68068618,0.044140443,41 +13660000,11108000,37986000,57.03349279,7.98684928,0.066242706,24 +36910000,10252000,41657000,-9.906961203,21.79114496,-0.378241692,6 +21785000,20095000,14903000,77.49612237,-84.68789002,-0.071118836,16 +33363000,42124000,39814000,-64.47776113,-30.79591997,0.371115832,35 +42758000,48892000,44762000,42.39782697,-32.55868099,-0.146011285,1 +16590000,22098000,28515000,-36.90992927,-55.27481385,-0.203981239,27 +26448000,45475000,33361000,64.22197115,146.6687002,-0.026210913,1 +41182000,23927000,25075000,-81.55929754,137.9213773,0.042229126,10 +49801000,15636000,39883000,-89.22857667,159.9681504,0.035529624,15 +32725000,13037000,49874000,-55.17873101,61.01413612,0.519438664,43 +31130000,16471000,41939000,-45.36963748,-156.5100924,0.245045969,22 +19599000,37119000,26468000,-26.58523044,174.7731562,-0.210527713,22 +30024000,23097000,14711000,44.31464407,150.7894846,-0.041347399,45 +39567000,48586000,49391000,1.721781555,156.1687027,,31 +46249000,28249000,32393000,-13.3221674,-176.0644697,-0.108879159,30 +12180000,20488000,46288000,36.02858732,30.43526779,-0.099205446,47 +29659000,40098000,45152000,72.15373455,62.01511311,,46 +41026000,19309000,15845000,-38.63636224,145.9569745,-0.083266866,32 +47146000,39852000,26666000,35.2426196,-33.97130609,-0.650089141,7 +39958000,46945000,11789000,-68.31344333,172.4154216,0.001713968,37 +25921000,13147000,22257000,-15.89505915,-150.39693,0.165178387,37 +28892000,28329000,49094000,-58.72206735,-157.3776844,-0.228068143,48 +29563000,48312000,45703000,86.78718085,179.1386066,-0.146072441,49 +46127000,46582000,13462000,39.98033674,-164.152123,-0.081830298,17 +23268000,24051000,48652000,-43.61767649,83.51428751,-0.106824408,45 +22163000,26901000,28702000,51.04347167,169.7632117,0.052782471,31 +46968000,17027000,25787000,-73.8664022,2.915300454,-0.028069047,22 +24148000,44640000,15422000,8.379412685,101.9542853,-0.049339904,14 +11566000,26486000,11735000,-36.78748293,-129.8960512,,Nan +11063000,38883000,16772000,-65.43894139,105.6607872,,7 +43081000,16718000,45813000,-2.464830259,87.07999887,-0.24057898,40 diff --git a/data/assets/examples/renderable/renderablepointcloud/data/dummydata.label b/data/assets/examples/renderable/renderablepointcloud/data/dummydata.label new file mode 100644 index 0000000000..fb38a1f3e0 --- /dev/null +++ b/data/assets/examples/renderable/renderablepointcloud/data/dummydata.label @@ -0,0 +1,100 @@ +13428000 26239000 45870000 id P0 text Point 0 +14727000 45282000 10832000 id P1 text Point 1 +24999000 28370000 19911000 id P2 text Point 2 +26539000 36165000 39582000 id P3 text Point 3 +49056000 24775000 14626000 id P4 text Point 4 +43965000 21472000 18760000 id P5 text Point 5 +15661000 28429000 16965000 id P6 text Point 6 +25046000 36006000 49453000 id P7 text Point 7 +13797000 34811000 18825000 id P8 text Point 8 +13879000 14824000 41472000 id P9 text Point 9 +11481000 20480000 25925000 id P10 text Point 10 +45032000 16606000 23537000 id P11 text Point 11 +14395000 34940000 21968000 id P12 text Point 12 +15945000 21478000 29536000 id P13 text Point 13 +13458000 19017000 18542000 id P14 text Point 14 +45302000 15732000 34369000 id P15 text Point 15 +15559000 36269000 18160000 id P16 text Point 16 +16552000 14570000 39763000 id P17 text Point 17 +11353000 13410000 38311000 id P18 text Point 18 +12383000 49302000 33539000 id P19 text Point 19 +44302000 21387000 23434000 id P20 text Point 20 +43107000 14206000 24728000 id P21 text Point 21 +49320000 43878000 24240000 id P22 text Point 22 +37519000 40514000 16409000 id P23 text Point 23 +37202000 40122000 42551000 id P24 text Point 24 +12783000 11757000 25348000 id P25 text Point 25 +39621000 30560000 15929000 id P26 text Point 26 +10937000 15183000 21413000 id P27 text Point 27 +39411000 12532000 44006000 id P28 text Point 28 +47905000 25552000 28902000 id P29 text Point 29 +28426000 45268000 27886000 id P30 text Point 30 +15026000 45897000 23911000 id P31 text Point 31 +24625000 14844000 12837000 id P32 text Point 32 +46304000 21144000 24421000 id P33 text Point 33 +29558000 10724000 27312000 id P34 text Point 34 +49636000 27202000 24626000 id P35 text Point 35 +38603000 23794000 41040000 id P36 text Point 36 +37336000 21742000 40982000 id P37 text Point 37 +35128000 38725000 25244000 id P38 text Point 38 +30419000 33591000 39512000 id P39 text Point 39 +18665000 11189000 45438000 id P40 text Point 40 +15442000 36392000 16074000 id P41 text Point 41 +43378000 27900000 38748000 id P42 text Point 42 +44424000 19982000 13528000 id P43 text Point 43 +42733000 15383000 28933000 id P44 text Point 44 +40144000 46822000 29588000 id P45 text Point 45 +16927000 38232000 43931000 id P46 text Point 46 +38910000 36030000 38003000 id P47 text Point 47 +48340000 38510000 39290000 id P48 text Point 48 +17258000 45665000 27152000 id P49 text Point 49 +48363000 39701000 11905000 id P50 text Point 50 +27660000 29370000 26029000 id P51 text Point 51 +47106000 30527000 17038000 id P52 text Point 52 +10471000 37521000 35398000 id P53 text Point 53 +27774000 44082000 40036000 id P54 text Point 54 +46887000 20413000 36649000 id P55 text Point 55 +10093000 46706000 19187000 id P56 text Point 56 +49093000 36514000 38499000 id P57 text Point 57 +48945000 49826000 23225000 id P58 text Point 58 +26852000 28926000 32243000 id P59 text Point 59 +34219000 34787000 30801000 id P60 text Point 60 +31075000 30369000 36898000 id P61 text Point 61 +28135000 21412000 25552000 id P62 text Point 62 +13347000 15980000 43094000 id P63 text Point 63 +26928000 31159000 16653000 id P64 text Point 64 +12364000 14374000 43646000 id P65 text Point 65 +38991000 49388000 48534000 id P66 text Point 66 +17180000 14935000 11680000 id P67 text Point 67 +27666000 29337000 44778000 id P68 text Point 68 +13660000 11108000 37986000 id P69 text Point 69 +36910000 10252000 41657000 id P70 text Point 70 +21785000 20095000 14903000 id P71 text Point 71 +33363000 42124000 39814000 id P72 text Point 72 +42758000 48892000 44762000 id P73 text Point 73 +16590000 22098000 28515000 id P74 text Point 74 +26448000 45475000 33361000 id P75 text Point 75 +41182000 23927000 25075000 id P76 text Point 76 +49801000 15636000 39883000 id P77 text Point 77 +32725000 13037000 49874000 id P78 text Point 78 +31130000 16471000 41939000 id P79 text Point 79 +19599000 37119000 26468000 id P80 text Point 80 +30024000 23097000 14711000 id P81 text Point 81 +39567000 48586000 49391000 id P82 text Point 82 +46249000 28249000 32393000 id P83 text Point 83 +12180000 20488000 46288000 id P84 text Point 84 +29659000 40098000 45152000 id P85 text Point 85 +41026000 19309000 15845000 id P86 text Point 86 +47146000 39852000 26666000 id P87 text Point 87 +39958000 46945000 11789000 id P88 text Point 88 +25921000 13147000 22257000 id P89 text Point 89 +28892000 28329000 49094000 id P90 text Point 90 +29563000 48312000 45703000 id P91 text Point 91 +46127000 46582000 13462000 id P92 text Point 92 +23268000 24051000 48652000 id P93 text Point 93 +22163000 26901000 28702000 id P94 text Point 94 +46968000 17027000 25787000 id P95 text Point 95 +24148000 44640000 15422000 id P96 text Point 96 +11566000 26486000 11735000 id P97 text Point 97 +11063000 38883000 16772000 id P98 text Point 98 +43081000 16718000 45813000 id P99 text Point 99 diff --git a/data/assets/examples/renderable/renderablepointcloud/data/multitextured_csv/textured_points.csv b/data/assets/examples/renderable/renderablepointcloud/data/multitextured_csv/textured_points.csv new file mode 100644 index 0000000000..0bf863e4e6 --- /dev/null +++ b/data/assets/examples/renderable/renderablepointcloud/data/multitextured_csv/textured_points.csv @@ -0,0 +1,9 @@ +# A dummy dataset with an xyz position, some random values and an integer value to +# use for texturing the points +# +# The texture mapping from index to file is handled in another file +x,y,z,a,b,texture +13428000,26239000,45870000,-3.226548224,33.95773276,1 +14727000,45282000,10832000,45.05941924,-106.0395917,0 +24999000,28370000,19911000,-70.58906931,154.1851656,2 +26539000,36165000,39582000,-13.3663358,71.79484733,3 diff --git a/data/assets/examples/renderable/renderablepointcloud/data/multitextured_csv/texturemap.tmap b/data/assets/examples/renderable/renderablepointcloud/data/multitextured_csv/texturemap.tmap new file mode 100644 index 0000000000..0a475f8d61 --- /dev/null +++ b/data/assets/examples/renderable/renderablepointcloud/data/multitextured_csv/texturemap.tmap @@ -0,0 +1,8 @@ +# The texture map is a mapping between an index and the name of an image file. +# All the images should be located in the same folder, or the name need to be specified as a path relative +# to a specific folder + +0 test3.jpg +1 test2.jpg +2 test.jpg +3 openspace-horiz-logo.png diff --git a/data/assets/examples/renderable/renderablepointcloud/data/multitextured_speck/textures_points.speck b/data/assets/examples/renderable/renderablepointcloud/data/multitextured_speck/textures_points.speck new file mode 100644 index 0000000000..2e8b763c2c --- /dev/null +++ b/data/assets/examples/renderable/renderablepointcloud/data/multitextured_speck/textures_points.speck @@ -0,0 +1,16 @@ +# A dummy dataset with an xyz position, some random values and an integer value to +# use for texturing the points + +datavar 0 a +datavar 1 b +datavar 2 texture +texturevar 2 # The index of the data column that has the texture data +texture 0 test3.jpg +texture 1 test.jpg +texture 2 test.jpg +texture 3 openspace-horiz-logo.png + +13428000 26239000 45870000 -3.226548224 33.95773276 0 +14727000 45282000 10832000 45.05941924 -106.0395917 2 +24999000 28370000 19911000 -70.58906931 154.1851656 3 +26539000 36165000 39582000 -13.3663358 71.79484733 1 diff --git a/data/assets/examples/renderable/renderablepointcloud/pointcloud.asset b/data/assets/examples/renderable/renderablepointcloud/pointcloud.asset new file mode 100644 index 0000000000..b9a5d25f16 --- /dev/null +++ b/data/assets/examples/renderable/renderablepointcloud/pointcloud.asset @@ -0,0 +1,26 @@ +-- Basic (Fixed Color and Size) +-- This example creates a point cloud with a fixed color and default size. +-- All the points will have the same size. + +local Node = { + Identifier = "RenderablePointCloud_Example", + Renderable = { + Type = "RenderablePointCloud", + File = asset.resource("data/dummydata.csv"), + Coloring = { + FixedColor = { 0.0, 0.5, 0.0 } + } + }, + GUI = { + Name = "RenderablePointCloud - Fixed Color and Size", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) diff --git a/data/assets/examples/renderable/renderablepointcloud/pointcloud_colormapped.asset b/data/assets/examples/renderable/renderablepointcloud/pointcloud_colormapped.asset new file mode 100644 index 0000000000..bd157b7250 --- /dev/null +++ b/data/assets/examples/renderable/renderablepointcloud/pointcloud_colormapped.asset @@ -0,0 +1,35 @@ +-- Color Mapping +-- This example creates a point cloud where the color is set from a color map. All the +-- data column in the dataset will be exposed in the user interface and can be used for +-- color mapping during runtime. The range for the color mapping is set based on the min +-- and max values in the dataset, for each column respoectively. +-- +-- Note that the color map is loaded from another asset. This is a utility asset that +-- includes some common color maps for general usage. + +local colormaps = asset.require("util/default_colormaps") + +local Node = { + Identifier = "RenderablePointCloud_Example_ColorMapped", + Renderable = { + Type = "RenderablePointCloud", + File = asset.resource("data/dummydata.csv"), + Coloring = { + ColorMapping = { + File = colormaps.Uniform.Viridis + } + } + }, + GUI = { + Name = "RenderablePointCloud - Color Mapped", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) diff --git a/data/assets/examples/renderable/renderablepointcloud/pointcloud_colormapped_moresettings.asset b/data/assets/examples/renderable/renderablepointcloud/pointcloud_colormapped_moresettings.asset new file mode 100644 index 0000000000..77fb97d969 --- /dev/null +++ b/data/assets/examples/renderable/renderablepointcloud/pointcloud_colormapped_moresettings.asset @@ -0,0 +1,48 @@ +-- Color Mapping with Pre-set Options and Missing Values +-- This example creates a point cloud where the color is set from a color map and the +-- options for parameters to color by are pre-set to a limited number of options, +-- including settings for which range to use. It also includes settings to render +-- missing data values in gray. +-- +-- Note that the color map is loaded from another asset. This is a utility asset that +-- includes some common color maps for general usage. + +local colormaps = asset.require("util/default_colormaps") + +local Node = { + Identifier = "RenderablePointCloud_Example_ColorMapped_More", + Renderable = { + Type = "RenderablePointCloud", + File = asset.resource("data/dummydata.csv"), + Coloring = { + ColorMapping = { + File = colormaps.Uniform.Viridis, + -- Specify which parameters we want to show up in the user interface, as + -- well as what range we want the color mapping to be done based on. If not + -- included, all the columns in the data file would be exposed as options + ParameterOptions = { + { Key = "number_withNan" }, -- No range => compute min and max + { Key = "normaldist_withMissing", Range = { -0.5, 0.5 } } + }, + -- Also show missing data values in a specific color + ShowMissingData = true, + NoDataColor = { 0.5, 0.5, 0.5, 1.0 } + } + }, + SizeSettings = { + ScaleExponent = 6.5 + } + }, + GUI = { + Name = "RenderablePointCloud - Color Mapped with Settings", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) diff --git a/data/assets/examples/renderable/renderablepointcloud/pointcloud_maxsize.asset b/data/assets/examples/renderable/renderablepointcloud/pointcloud_maxsize.asset new file mode 100644 index 0000000000..42ae23d4fb --- /dev/null +++ b/data/assets/examples/renderable/renderablepointcloud/pointcloud_maxsize.asset @@ -0,0 +1,32 @@ +-- Limit Max Size +-- This example creates a point cloud where the size of the points is limited to a +-- given max size. The color is set to a fixed value. + +local Node = { + Identifier = "RenderablePointCloud_Example_MaxSize", + Renderable = { + Type = "RenderablePointCloud", + File = asset.resource("data/dummydata.csv"), + Coloring = { + FixedColor = { 0.0, 0.8, 0.8 } + }, + -- Set the max size of the points. The larger the "MaxSize" value, the larger the + -- points are allowed to get when moving the camera closer to them + SizeSettings = { + MaxSize = 0.7, + EnableMaxSizeControl = true + } + }, + GUI = { + Name = "RenderablePointCloud - Max Size", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) diff --git a/data/assets/examples/renderable/renderablepointcloud/pointcloud_outline.asset b/data/assets/examples/renderable/renderablepointcloud/pointcloud_outline.asset new file mode 100644 index 0000000000..84c4ab805d --- /dev/null +++ b/data/assets/examples/renderable/renderablepointcloud/pointcloud_outline.asset @@ -0,0 +1,30 @@ +-- Draw Point Outline +-- This example creates a point cloud where the points have a colored outline with a +-- given color and thickness (weight). + +local Node = { + Identifier = "RenderablePointCloud_Example_Outline", + Renderable = { + Type = "RenderablePointCloud", + File = asset.resource("data/dummydata.csv"), + Coloring = { + EnableOutline = true, + OutlineColor = { 0.2, 0.2, 1.0 }, + OutlineWidth = 0.1 + }, + -- It might be desired to disable additive blending when using an outline + UseAdditiveBlending = false + }, + GUI = { + Name = "RenderablePointCloud - Outlined", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) diff --git a/data/assets/examples/renderable/renderablepointcloud/pointcloud_scaled.asset b/data/assets/examples/renderable/renderablepointcloud/pointcloud_scaled.asset new file mode 100644 index 0000000000..374d994dcb --- /dev/null +++ b/data/assets/examples/renderable/renderablepointcloud/pointcloud_scaled.asset @@ -0,0 +1,33 @@ +-- Point Size / Scaling +-- This example creates a point cloud where the size of the points is set by entering a +-- a scale exponent. This makes it so that the points will be given a world-scale size of +-- 10 to the power of the provided scale exponent. + +local Node = { + Identifier = "RenderablePointCloud_Example_Scaled", + Renderable = { + Type = "RenderablePointCloud", + File = asset.resource("data/dummydata.csv"), + Coloring = { + FixedColor = { 0.0, 0.0, 0.8 } + }, + SizeSettings = { + -- We set the exponent for the scale explicitly, to a value that + -- gives the points a suitable size based on their world-space coordinates + ScaleExponent = 6.5 + } + }, + GUI = { + Name = "RenderablePointCloud - Point Size / Scaling", + Path = "/Examples", + Description = "Point cloud with configured point size" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) diff --git a/data/assets/examples/renderable/renderablepointcloud/pointcloud_scaledfromdata.asset b/data/assets/examples/renderable/renderablepointcloud/pointcloud_scaledfromdata.asset new file mode 100644 index 0000000000..9abad6a3a7 --- /dev/null +++ b/data/assets/examples/renderable/renderablepointcloud/pointcloud_scaledfromdata.asset @@ -0,0 +1,40 @@ +-- Point Size from Data +-- This example creates a point cloud where the size of the points is computed based on +-- a column in the dataset + +local Node = { + Identifier = "RenderablePointCloud_Example_ScaledFromData", + Renderable = { + Type = "RenderablePointCloud", + File = asset.resource("data/dummydata.csv"), + Coloring = { + FixedColor = { 0.5, 0.5, 0.0 } + }, + SizeSettings = { + SizeMapping = { + -- The options for the columns that the points can be scaled by. The first + -- alternative in the list is chosen per default + ParameterOptions = { "a", "b" }, + -- Specify which option we want to use for size mapping at start up. Here we + -- use the last of the provided options rather than the first one, which is + -- otherwise used by default + Parameter = "b" + }, + -- The size mapping can be used together with other scale parameters, such as a + -- scale exponent or scale factor + ScaleExponent = 4.8 + } + }, + GUI = { + Name = "RenderablePointCloud - Size from Data", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) diff --git a/data/assets/examples/renderable/renderablepointcloud/pointcloud_textured.asset b/data/assets/examples/renderable/renderablepointcloud/pointcloud_textured.asset new file mode 100644 index 0000000000..bcd41043bb --- /dev/null +++ b/data/assets/examples/renderable/renderablepointcloud/pointcloud_textured.asset @@ -0,0 +1,36 @@ +-- Textured +-- This example creates a point cloud using a texture to render each point. +-- +-- Note that other color related settings, like color mapping, can still be applied. +-- The color will then be multiplied with the texture color. + +local Node = { + Identifier = "RenderablePointCloud_Example_Textured", + Renderable = { + Type = "RenderablePointCloud", + File = asset.resource("data/dummydata.csv"), + Texture = { + -- The path to the texture file. Here we use openspace.absPath so that we can use + -- the ${DATA} token to get the path to a texture in the "OpenSpace/data" folder, + -- but for a file at a relative location it would also work to use asset.resource, + -- like for the data file above + File = openspace.absPath("${DATA}/test3.jpg") + }, + -- Disable additive blending, so that points will be rendered with their actual color + -- and overlapping points will be sorted by depth. This works best when the points + -- have an opacity of 1 + UseAdditiveBlending = false + }, + GUI = { + Name = "RenderablePointCloud - Textured", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) diff --git a/data/assets/examples/renderable/renderablepointcloud/pointcloud_textured_facecameraposition.asset b/data/assets/examples/renderable/renderablepointcloud/pointcloud_textured_facecameraposition.asset new file mode 100644 index 0000000000..9d950ecfa3 --- /dev/null +++ b/data/assets/examples/renderable/renderablepointcloud/pointcloud_textured_facecameraposition.asset @@ -0,0 +1,37 @@ +-- Orientation - Face Camera Position +-- This example creates a point cloud where the planes that make up the points are +-- oriented to face the camera position, rather than the view direction (which is +-- default). This means that the point will be layed out in a spherical way around the +-- camera, which works better for spherical displays compared to the default +-- orientation. +-- +-- A texture is added so that we can more easily see how the orientation is altered. +-- See Textured example for more details. + +local Node = { + Identifier = "RenderablePointCloud_Example_FaceCameraPosition", + Renderable = { + Type = "RenderablePointCloud", + File = asset.resource("data/dummydata.csv"), + -- Change the orientation render option to face the camera position instead + -- of its view direction + OrientationRenderOption = "Camera Position Normal", + -- Add a texture so we can more easily see how the orientation is changed + Texture = { + File = openspace.absPath("${DATA}/test3.jpg") + }, + UseAdditiveBlending = false + }, + GUI = { + Name = "RenderablePointCloud - Face Camera Position", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) diff --git a/data/assets/examples/renderable/renderablepointcloud/pointcloud_units.asset b/data/assets/examples/renderable/renderablepointcloud/pointcloud_units.asset new file mode 100644 index 0000000000..2f6359df71 --- /dev/null +++ b/data/assets/examples/renderable/renderablepointcloud/pointcloud_units.asset @@ -0,0 +1,24 @@ +-- Units +-- This example creates a point cloud where the positions are interpreted to be in +-- another unit than meters (here kilometers). + +local Node = { + Identifier = "RenderablePointCloud_Example_Units", + Renderable = { + Type = "RenderablePointCloud", + File = asset.resource("data/dummydata.csv"), + Unit = "Km" + }, + GUI = { + Name = "RenderablePointCloud - Units", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) diff --git a/data/assets/examples/renderable/renderablepolygoncloud/polygoncloud.asset b/data/assets/examples/renderable/renderablepolygoncloud/polygoncloud.asset new file mode 100644 index 0000000000..bb177c23a9 --- /dev/null +++ b/data/assets/examples/renderable/renderablepolygoncloud/polygoncloud.asset @@ -0,0 +1,29 @@ +-- Basic +-- Example of a polygon cloud, which is a point cloud where a uniform polygon is used +-- for the shape of the points. + +local Node = { + Identifier = "RenderablePolygonCloud_Example", + Renderable = { + Type = "RenderablePolygonCloud", + File = asset.resource("../renderablepointcloud/data/dummydata.csv"), + Coloring = { + FixedColor = { 0.8, 0.0, 0.0 } + }, + -- Specify the number of sides for the polygon. 3 = triangle, 4 = square, + -- 5 = pentagon, 6 = hexagon, and so on + PolygonSides = 6 + }, + GUI = { + Name = "RenderablePolygonCloud - Basic", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) diff --git a/data/assets/examples/renderable/renderablesphereimagelocal/sphereimagelocal.asset b/data/assets/examples/renderable/renderablesphereimagelocal/sphereimagelocal.asset new file mode 100644 index 0000000000..c3ecdc2d6b --- /dev/null +++ b/data/assets/examples/renderable/renderablesphereimagelocal/sphereimagelocal.asset @@ -0,0 +1,24 @@ +-- Basic +-- This example shows a sphere that is covered with an image which is retrieved from +-- a local file path. The image will be stretched over the entire sphere as an +-- equirectangular projection. + +local Node = { + Identifier = "RenderableSphereImageLocal_Example", + Renderable = { + Type = "RenderableSphereImageLocal", + Texture = openspace.absPath("${DATA}/test2.jpg") + }, + GUI = { + Name = "RenderableSphereImageLocal - Basic", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) diff --git a/data/assets/examples/renderable/renderablesphereimageonline/sphereimageonline.asset b/data/assets/examples/renderable/renderablesphereimageonline/sphereimageonline.asset new file mode 100644 index 0000000000..a8c4bb7153 --- /dev/null +++ b/data/assets/examples/renderable/renderablesphereimageonline/sphereimageonline.asset @@ -0,0 +1,24 @@ +-- Basic +-- This example shows a sphere that is covered with an image which is retrieved from +-- an online URL. The image will be stretched over the entire sphere as an equirectangular +-- projection. + +local Node = { + Identifier = "RenderableSphereImageOnline_Example", + Renderable = { + Type = "RenderableSphereImageOnline", + URL = "http://data.openspaceproject.com/examples/renderableplaneimageonline.jpg" + }, + GUI = { + Name = "RenderableSphereImageOnline - Basic", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) diff --git a/data/assets/examples/renderable/renderablespherespout/spherespout.asset b/data/assets/examples/renderable/renderablespherespout/spherespout.asset new file mode 100644 index 0000000000..1cfc570d3c --- /dev/null +++ b/data/assets/examples/renderable/renderablespherespout/spherespout.asset @@ -0,0 +1,30 @@ +-- Basic +-- This example renders a sphere with a texture that is provided by another application +-- on the same computer using the SPOUT library. Note that this library is only available +-- on Windows. A SPOUT-enabled application can share a texture using a user-defined +-- name, which is used as the `SpoutName` here to receive that image. This allows the +-- integration of any generated image. + +local Node = { + Identifier = "RenderableSphereSpout_Example", + Renderable = { + Type = "RenderableSphereSpout", + Size = 333, + Segments = 32, + -- The name under which the other application is sharing an image + SpoutName = "WV_SPOUT" + }, + GUI = { + Name = "RenderableSphereSpout - Basic", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) \ No newline at end of file diff --git a/data/assets/examples/renderable/renderabletravelspeed/travelspeed.asset b/data/assets/examples/renderable/renderabletravelspeed/travelspeed.asset new file mode 100644 index 0000000000..cfdf5da6ea --- /dev/null +++ b/data/assets/examples/renderable/renderabletravelspeed/travelspeed.asset @@ -0,0 +1,28 @@ +-- Light Speed Indicator +-- This example creates a speed indicator; a line that travels with the speed of +-- light from the parent node (Earth) to the target node (the Moon). By default, the +-- length of the line is set to match the distance traveled over 1 second. + +local earthAsset = asset.require("scene/solarsystem/planets/earth/earth") +local moonAsset = asset.require("scene/solarsystem/planets/earth/moon/moon") + +local Node = { + Identifier = "RenderableTravelSpeed_Example", + Parent = earthAsset.Earth.Identifier, + Renderable = { + Type = "RenderableTravelSpeed", + Target = moonAsset.Moon.Identifier + }, + GUI = { + Name = "RenderableTravelSpeed - Light Speed Indicator", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) diff --git a/data/assets/examples/renderableplaneimageonline.asset b/data/assets/examples/renderableplaneimageonline.asset deleted file mode 100644 index e6297da464..0000000000 --- a/data/assets/examples/renderableplaneimageonline.asset +++ /dev/null @@ -1,29 +0,0 @@ -local transforms = asset.require("scene/solarsystem/sun/transforms") - - - -local RenderablePlaneImageOnline = { - Identifier = "RenderablePlaneImageOnline", - Parent = transforms.SolarSystemBarycenter.Identifier, - Renderable = { - Type = "RenderablePlaneImageOnline", - Size = 3.0E11, - Origin = "Center", - Billboard = true, - URL = "http://data.openspaceproject.com/examples/renderableplaneimageonline.jpg" - }, - GUI = { - Path = "/Examples" - } -} - - -asset.onInitialize(function() - openspace.addSceneGraphNode(RenderablePlaneImageOnline) -end) - -asset.onDeinitialize(function() - openspace.removeSceneGraphNode(RenderablePlaneImageOnline) -end) - -asset.export(RenderablePlaneImageOnline) diff --git a/data/assets/examples/rotation/constantrotation/constant.asset b/data/assets/examples/rotation/constantrotation/constant.asset new file mode 100644 index 0000000000..e4da3360b4 --- /dev/null +++ b/data/assets/examples/rotation/constantrotation/constant.asset @@ -0,0 +1,29 @@ +-- Basic +-- This asset applies a rotation to a set of coordinate axes that makes them rotate at a +-- constant rate of one revolution around the z-axis every 2 seconds. + +local Node = { + Identifier = "ConstantRotation_Example", + Transform = { + Rotation = { + Type = "ConstantRotation", + RotationAxis = { 0.0, 0.0, 1.0 }, + RotationRate = 0.5 + } + }, + Renderable = { + Type = "RenderableCartesianAxes" + }, + GUI = { + Name = "ConstantRotation - Basic", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) diff --git a/data/assets/examples/rotation/globerotation/angle.asset b/data/assets/examples/rotation/globerotation/angle.asset new file mode 100644 index 0000000000..03aa39e050 --- /dev/null +++ b/data/assets/examples/rotation/globerotation/angle.asset @@ -0,0 +1,57 @@ +-- Angle +-- This asset creates a rotation that places a coordinate axes on the surface of a +-- planetary body. The rotation causes the coordinate axes to remain fixed to the surface +-- of the globe. Additionally, the coordinate axes are rotated around the up-axis by a +-- fixed amount. +-- +-- In order for this feature to work properly, the coordinate axes need to be located at +-- the same place as well, so this example also needs a `GlobeTranslation` applied. + +-- The example needs a `RenderableGlobe` as a parent to function +local Globe = { + Identifier = "GlobeRotation_Example_Angle_Globe", + Renderable = { + Type = "RenderableGlobe" + }, + GUI = { + Name = "GlobeRotation - Angle (Globe)", + Path = "/Examples" + } +} + +local Node = { + Identifier = "GlobeRotation_Example_Angle", + Parent = "GlobeRotation_Example_Angle_Globe", + Transform = { + Translation = { + Type = "GlobeTranslation", + Globe = "GlobeRotation_Example_Angle_Globe", + Latitude = 20.0, + Longitude = -45.0 + }, + Rotation = { + Type = "GlobeRotation", + Globe = "GlobeRotation_Example_Angle_Globe", + Latitude = 20.0, + Longitude = -45.0, + Angle = 45.0 + } + }, + Renderable = { + Type = "RenderableCartesianAxes" + }, + GUI = { + Name = "GlobeRotation - Angle", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Globe) + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) + openspace.removeSceneGraphNode(Globe) +end) diff --git a/data/assets/examples/rotation/globerotation/globe.asset b/data/assets/examples/rotation/globerotation/globe.asset new file mode 100644 index 0000000000..b85209bfcb --- /dev/null +++ b/data/assets/examples/rotation/globerotation/globe.asset @@ -0,0 +1,55 @@ +-- Basic +-- This asset creates a rotation that places a coordinate axes on the surface of a +-- planetary body. The rotation causes the coordinate axes to remain fixed to the surface +-- of the globe. +-- +-- In order for this feature to work properly, the coordinate axes need to be located at +-- the same place as well, so this example also needs a `GlobeTranslation` applied. + +-- The example needs a `RenderableGlobe` as a parent to function +local Globe = { + Identifier = "GlobeRotation_Example_Globe", + Renderable = { + Type = "RenderableGlobe" + }, + GUI = { + Name = "GlobeRotation - Basic (Globe)", + Path = "/Examples" + } +} + +local Node = { + Identifier = "GlobeRotation_Example", + Parent = "GlobeRotation_Example_Globe", + Transform = { + Translation = { + Type = "GlobeTranslation", + Globe = "GlobeRotation_Example_Globe", + Latitude = 20.0, + Longitude = -45.0 + }, + Rotation = { + Type = "GlobeRotation", + Globe = "GlobeRotation_Example_Globe", + Latitude = 20.0, + Longitude = -45.0 + } + }, + Renderable = { + Type = "RenderableCartesianAxes" + }, + GUI = { + Name = "GlobeRotation - Basic", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Globe) + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) + openspace.removeSceneGraphNode(Globe) +end) diff --git a/data/assets/examples/rotation/globerotation/usecamera.asset b/data/assets/examples/rotation/globerotation/usecamera.asset new file mode 100644 index 0000000000..ceb2b3e156 --- /dev/null +++ b/data/assets/examples/rotation/globerotation/usecamera.asset @@ -0,0 +1,61 @@ +-- UseCamera +-- This asset creates a rotation that places a coordinate axes on the surface of a +-- planetary body. The rotation causes the coordinate axes to remain fixed to the surface +-- of the globe. In this example, the rotation of the object will be updated based on the +-- location of the camera. When loading this example, make sure to focus the camera on +-- the Globe object for the follow-function to work. +-- +-- In order for this feature to work properly, the coordinate axes need to be located at +-- the same place as well, so this example also needs a `GlobeTranslation` applied, which +-- in this case also updated based on the camera location. + +-- The example needs a `RenderableGlobe` as a parent to function +local Globe = { + Identifier = "GlobeRotation_Example_UseCamera_Globe", + Renderable = { + Type = "RenderableGlobe" + }, + GUI = { + Name = "GlobeRotation - UseCamera (Globe)", + Path = "/Examples" + } +} + +local Node = { + Identifier = "GlobeRotation_Example_UseCamera", + Parent = "GlobeRotation_Example_UseCamera_Globe", + Transform = { + Translation = { + Type = "GlobeTranslation", + Globe = "GlobeRotation_Example_UseCamera_Globe", + Latitude = 20.0, + Longitude = -45.0, + UseCamera = true + }, + Rotation = { + Type = "GlobeRotation", + Globe = "GlobeRotation_Example_UseCamera_Globe", + Latitude = 20.0, + Longitude = -45.0, + Angle = 45.0, + UseCamera = true + } + }, + Renderable = { + Type = "RenderableCartesianAxes" + }, + GUI = { + Name = "GlobeRotation - UseCamera", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Globe) + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) + openspace.removeSceneGraphNode(Globe) +end) diff --git a/data/assets/examples/rotation/luarotation/example.lua b/data/assets/examples/rotation/luarotation/example.lua new file mode 100644 index 0000000000..d795b9514a --- /dev/null +++ b/data/assets/examples/rotation/luarotation/example.lua @@ -0,0 +1,16 @@ +-- The `rotation` function takes exactly three arguments and returns the 9 values that +-- make up the final rotation matrix as a table. +-- The three parameters are all provided as the number of seconds past the J2000 epoch +-- (2000-01-01 12:00:00), which can be both fractional numbers as well as negative numbers +-- for dates earlier than the epoch. +-- 1. `simulationTime` is the value of the in-game clock for the current frame +-- 2. `prevSimulationTime` is the value of the in-game clock for the previous frame +-- 3. `wallTime` is the value of the computer clock as seconds past the epoch +function rotation(simulationTime, prevSimulationTime, wallTime) + -- Create a rotation around the x axis + return { + 1, 0, 0, + 0, math.cos(simulationTime), -math.sin(simulationTime), + 0, math.sin(simulationTime), math.cos(simulationTime) + } +end diff --git a/data/assets/examples/rotation/luarotation/lua.asset b/data/assets/examples/rotation/luarotation/lua.asset new file mode 100644 index 0000000000..e20d46fbfb --- /dev/null +++ b/data/assets/examples/rotation/luarotation/lua.asset @@ -0,0 +1,34 @@ +-- Basic +-- This asset creates a SceneGraphNode that only displays coordinate axes. The rotation of +-- coordinate axes are determined by executing a Lua file that returns the rotation matrix +-- to be used. +-- +-- ```{literalinclude} example.lua +-- :language: lua +-- :caption: The script file that is used in this example +-- ``` + +local Node = { + Identifier = "LuaRotation_Example", + Transform = { + Rotation = { + Type = "LuaRotation", + Script = asset.resource("example.lua") + } + }, + Renderable = { + Type = "RenderableCartesianAxes" + }, + GUI = { + Name = "LuaRotation - Basic", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) diff --git a/data/assets/examples/rotation/spicerotation/fixeddate.asset b/data/assets/examples/rotation/spicerotation/fixeddate.asset new file mode 100644 index 0000000000..d3c580a656 --- /dev/null +++ b/data/assets/examples/rotation/spicerotation/fixeddate.asset @@ -0,0 +1,36 @@ +-- Fixed Date +-- This asset creates a rotation provided by a SPICE kernel and applies it to a +-- SceneGraphNode that only displays coordinate axes. The rotation of the coordinate axes +-- are determined by SPICE, in this case pretending that the coordinate axes are rotating +-- at the same rate as Earth. In this specific example, the orientation is independent of +-- the actual in-game time in OpenSpace and only uses a fixed date of 2000 JAN 01 instead. + +-- Load the default SPICE kernels, which is the planetary constants and the DE430 kernel +asset.require("spice/core") + +local Node = { + Identifier = "SpiceRotation_Example_FixedDate", + Transform = { + Rotation = { + Type = "SpiceRotation", + SourceFrame = "IAU_EARTH", + DestinationFrame = "GALACTIC", + FixedDate = "2000 JAN 01 00:00:00.000" + } + }, + Renderable = { + Type = "RenderableCartesianAxes" + }, + GUI = { + Name = "SpiceRotation - Fixed Date", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) diff --git a/data/assets/examples/rotation/spicerotation/spice.asset b/data/assets/examples/rotation/spicerotation/spice.asset new file mode 100644 index 0000000000..be46c5f4ba --- /dev/null +++ b/data/assets/examples/rotation/spicerotation/spice.asset @@ -0,0 +1,35 @@ +-- Basic +-- This asset creates a rotation provided by a SPICE kernel and applies it to a +-- SceneGraphNode that only displays coordinate axes. The rotation of the coordinate axes +-- are determined by SPICE, in this case pretending that the coordinate axes are rotating +-- at the same rate as Earth. +-- For more information about SPICE see: https://naif.jpl.nasa.gov/naif/ + +-- Load the default SPICE kernels, which are the planetary constants and the DE430 kernel +asset.require("spice/core") + +local Node = { + Identifier = "SpiceRotation_Example", + Transform = { + Rotation = { + Type = "SpiceRotation", + SourceFrame = "IAU_EARTH", + DestinationFrame = "GALACTIC" + } + }, + Renderable = { + Type = "RenderableCartesianAxes" + }, + GUI = { + Name = "SpiceRotation - Basic", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) diff --git a/data/assets/examples/rotation/spicerotation/timeframe.asset b/data/assets/examples/rotation/spicerotation/timeframe.asset new file mode 100644 index 0000000000..6eb7eb3f90 --- /dev/null +++ b/data/assets/examples/rotation/spicerotation/timeframe.asset @@ -0,0 +1,41 @@ +-- TimeFrame +-- This asset creates a rotation provided by a SPICE kernel and applies it to a +-- SceneGraphNode that only displays coordinate axes. The rotation of the coordinate axes +-- are determined by SPICE, in this case pretending that the coordinate axes are rotating +-- at the same rate as Earth. In this example, the rotation is only calculated between +-- 2000 JAN 01 and 2002 JAN 01 to exemplify a use-case in which the data from the SPICE +-- kernel is not available for the whole duration. + +-- Load the default SPICE kernels, which is the planetary constants and the DE430 kernel +asset.require("spice/core") + +local Node = { + Identifier = "SpiceRotation_Example_TimeFrame", + Transform = { + Rotation = { + Type = "SpiceRotation", + SourceFrame = "IAU_EARTH", + DestinationFrame = "GALACTIC", + TimeFrame = { + Type = "TimeFrameInterval", + Start = "2000 JAN 01", + End = "2002 JAN 01" + } + } + }, + Renderable = { + Type = "RenderableCartesianAxes" + }, + GUI = { + Name = "SpiceRotation - TimeFrame", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) diff --git a/data/assets/examples/rotation/staticrotation/euler.asset b/data/assets/examples/rotation/staticrotation/euler.asset new file mode 100644 index 0000000000..3a8aa929a9 --- /dev/null +++ b/data/assets/examples/rotation/staticrotation/euler.asset @@ -0,0 +1,29 @@ +-- Euler Angles +-- This asset creates a rotation provided by Euler angles and applies it to a +-- SceneGraphNode that only displays coordinate axes. The rotation of the coordinate axes +-- are determined by a constant and unchanging static rotation. + +local Node = { + Identifier = "StaticRotation_Example_Euler", + Transform = { + Rotation = { + Type = "StaticRotation", + Rotation = { math.pi / 2.0, 0.0, math.pi } + } + }, + Renderable = { + Type = "RenderableCartesianAxes" + }, + GUI = { + Name = "StaticRotation - Euler Angles", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) diff --git a/data/assets/examples/rotation/staticrotation/matrix.asset b/data/assets/examples/rotation/staticrotation/matrix.asset new file mode 100644 index 0000000000..60b530da7c --- /dev/null +++ b/data/assets/examples/rotation/staticrotation/matrix.asset @@ -0,0 +1,33 @@ +-- Matrix +-- This asset creates a SceneGraphNode that only displays coordinate axes. The rotation of +-- the coordinate axes are determined by a constant and unchanging static rotation that is +-- provided by a 3-by-3 rotation matrix in column-major order. + +local Node = { + Identifier = "StaticRotation_Example_Matrix", + Transform = { + Rotation = { + Type = "StaticRotation", + Rotation = { + -0.9999987, -0.0015927, 0.0000000, + 0.0015927, -0.9999987, 0.0000000, + 0.0000000, 0.0000000, 1.0000000 + } + } + }, + Renderable = { + Type = "RenderableCartesianAxes" + }, + GUI = { + Name = "StaticRotation - Matrix", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) diff --git a/data/assets/examples/rotation/staticrotation/quaternion.asset b/data/assets/examples/rotation/staticrotation/quaternion.asset new file mode 100644 index 0000000000..ad1ea3929e --- /dev/null +++ b/data/assets/examples/rotation/staticrotation/quaternion.asset @@ -0,0 +1,29 @@ +-- Quaternion +-- This asset creates a SceneGraphNode that only displays coordinate axes. The rotation of +-- the coordinate axes are determined by a constant and unchanging static rotation that is +-- provided by a four-dimensional quaternion. + +local Node = { + Identifier = "StaticRotation_Example_Quaternion", + Transform = { + Rotation = { + Type = "StaticRotation", + Rotation = { 0.4873552, -0.4869268, -0.5127203, 0.5123526 } + } + }, + Renderable = { + Type = "RenderableCartesianAxes" + }, + GUI = { + Name = "StaticRotation - Quaternion", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) diff --git a/data/assets/examples/rotation/timelinerotation/no-interpolate.asset b/data/assets/examples/rotation/timelinerotation/no-interpolate.asset new file mode 100644 index 0000000000..5980216e71 --- /dev/null +++ b/data/assets/examples/rotation/timelinerotation/no-interpolate.asset @@ -0,0 +1,52 @@ +-- No Interpolation +-- This asset creates a SceneGraphNode that only displays coordinate axes. The rotation of +-- the coordinate axes are determined by a timeline of individual rotations that are used +-- without interpolating between the timeline entries. These rotations are keyframes that +-- are used to change between different orientations. This example transitions between +-- three rotations. In this example, the interpolation between entries is disabled, which +-- will cause the coordinate axes to change their orientation abruptly when the rotation +-- changes. If the interpolation were enabled, the orientation of the coordinate axes +-- would transition seamlessly instead at the provided times. This example will only work +-- if the in-game time is set to January 1st, 2000. + +local Node = { + Identifier = "TimelineRotation_Example_NoInterpolation", + Transform = { + Rotation = { + Type = "TimelineRotation", + Keyframes = { + -- The first timeline entry + ["2000 JAN 01 00:00:00"] = { + Type = "StaticRotation", + Rotation = { math.pi, 0.0, 0.0 } + }, + -- The second timeline entry + ["2000 JAN 01 12:00:00"] = { + Type = "StaticRotation", + Rotation = { 0.0, 0.0, 0.0 } + }, + -- The third timeline entry + ["2000 JAN 01 23:59:59"] = { + Type = "StaticRotation", + Rotation = { 0.0, 0.0, math.pi } + } + }, + ShouldInterpolate = false + } + }, + Renderable = { + Type = "RenderableCartesianAxes" + }, + GUI = { + Name = "TimelineRotation - No Interpolation", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) diff --git a/data/assets/examples/rotation/timelinerotation/timeline.asset b/data/assets/examples/rotation/timelinerotation/timeline.asset new file mode 100644 index 0000000000..51db1d1361 --- /dev/null +++ b/data/assets/examples/rotation/timelinerotation/timeline.asset @@ -0,0 +1,47 @@ +-- Basic +-- This asset creates a SceneGraphNode that only displays coordinate axes. The rotation of +-- the coordinate axes are determined by a timeline of individual rotations. These rotations +-- are keyframes that are used to seamlessly change between different orientations. This +-- example transitions between three rotations over a long time span. This example will +-- only work if the in-game time is set to January 1st, 2000. + +local Node = { + Identifier = "TimelineRotation_Example", + Transform = { + Rotation = { + Type = "TimelineRotation", + Keyframes = { + -- The first timeline entry + ["2000 JAN 01 00:00:00"] = { + Type = "StaticRotation", + Rotation = { math.pi, 0.0, 0.0 } + }, + -- The second timeline entry + ["2000 JAN 01 12:00:00"] = { + Type = "StaticRotation", + Rotation = { 0.0, 0.0, 0.0 } + }, + -- The third timeline entry + ["2000 JAN 01 23:59:59"] = { + Type = "StaticRotation", + Rotation = { 0.0, 0.0, math.pi } + } + } + } + }, + Renderable = { + Type = "RenderableCartesianAxes" + }, + GUI = { + Name = "TimelineRotation - Basic", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) diff --git a/data/assets/examples/scale/luascale/example.lua b/data/assets/examples/scale/luascale/example.lua new file mode 100644 index 0000000000..3410061570 --- /dev/null +++ b/data/assets/examples/scale/luascale/example.lua @@ -0,0 +1,12 @@ +-- The `scale` function takes exactly three arguments and returns the three scaling +-- values (one for each axis) as a single table. +-- The three parameters are all provided as the number of seconds past the J2000 epoch +-- (2000-01-01 12:00:00), which can be both fractional numbers as well as negative numbers +-- for dates earlier than the epoch. +-- 1. `simulationTime` is the value of the in-game clock for the current frame +-- 2. `prevSimulationTime` is the value of the in-game clock for the previous frame +-- 3. `wallTime` is the value of the computer clock as seconds past the epoch +function scale(simulationTime, prevSimulationTime, wallTime) + -- Make the scaling along the x-axis oscillate between -3 and 3 once per second + return { 3 * math.sin(simulationTime), 1, 1 } +end diff --git a/data/assets/examples/scale/luascale/lua.asset b/data/assets/examples/scale/luascale/lua.asset new file mode 100644 index 0000000000..b36911727b --- /dev/null +++ b/data/assets/examples/scale/luascale/lua.asset @@ -0,0 +1,34 @@ +-- Basic +-- This asset creates a SceneGraphNode that only displays coordinate axes. The sizes of +-- coordinate axes are determined by executing a Lua file that returns the scaling +-- parameters to be used as a table. +-- +-- ```{literalinclude} example.lua +-- :language: lua +-- :caption: The script file that is used in this example +-- ``` + +local Node = { + Identifier = "LuaScale_Example", + Transform = { + Scale = { + Type = "LuaScale", + Script = asset.resource("example.lua") + } + }, + Renderable = { + Type = "RenderableCartesianAxes" + }, + GUI = { + Name = "LuaScale - Basic", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) diff --git a/data/assets/examples/scale/nonuniformstaticscale/nonuniformstatic.asset b/data/assets/examples/scale/nonuniformstaticscale/nonuniformstatic.asset new file mode 100644 index 0000000000..a0bfdef597 --- /dev/null +++ b/data/assets/examples/scale/nonuniformstaticscale/nonuniformstatic.asset @@ -0,0 +1,32 @@ +-- Basic +-- This asset creates a SceneGraphNode that only displays coordinate axes. The coordinate +-- axis normally have a length of 1 meter and are scaled in this example by different +-- values for each axis. The x axis is scaled by a factor of 149597870700, which means +-- they will be 149597870700 m (1 AU) long and thus reaching the same distance as Earth's +-- orbit around the Sun. The y-axis stays at its original size, and the z-axis will be +-- hidden entirely by setting the scale value close to 0. + +local Node = { + Identifier = "NonUniformStaticScale_Example", + Transform = { + Scale = { + Type = "NonUniformStaticScale", + Scale = { 149597870700, 1.0, 0.0005 } + } + }, + Renderable = { + Type = "RenderableCartesianAxes" + }, + GUI = { + Name = "NonUniformStaticScale - Basic", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) diff --git a/data/assets/examples/scale/nonuniformstaticscale/nonuniformstatic_ellipsoid.asset b/data/assets/examples/scale/nonuniformstaticscale/nonuniformstatic_ellipsoid.asset new file mode 100644 index 0000000000..4f6a1c8169 --- /dev/null +++ b/data/assets/examples/scale/nonuniformstaticscale/nonuniformstatic_ellipsoid.asset @@ -0,0 +1,29 @@ +-- Ellipsoid +-- This asset creates a SceneGraphNode that is rendering a sphere which is adjust to an +-- ellipsoidal shape by using a non-uniform scaling. In particular, the second axis is +-- half as long as the first, and the third axis is a third as long. + +local Node = { + Identifier = "NonUniformStaticScale_Example_Ellipsoid", + Transform = { + Scale = { + Type = "NonUniformStaticScale", + Scale = { 149597870700, 149597870700 / 2, 149597870700 / 3 } + } + }, + Renderable = { + Type = "RenderableSphericalGrid" + }, + GUI = { + Name = "NonUniformStaticScale - Ellipsoid", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) diff --git a/data/assets/examples/scale/staticscale/static.asset b/data/assets/examples/scale/staticscale/static.asset new file mode 100644 index 0000000000..bde46f25d0 --- /dev/null +++ b/data/assets/examples/scale/staticscale/static.asset @@ -0,0 +1,30 @@ +-- Basic +-- This asset creates a SceneGraphNode that only displays coordinate axes. The coordinate +-- axis normally have a length of 1 meter and are scaled in this example by a factor of +-- 149597870700, which means they will be 149597870700 m (1 AU) long, thus reaching the +-- same distance as Earth's orbit around the Sun. + +local Node = { + Identifier = "StaticScale_Example", + Transform = { + Scale = { + Type = "StaticScale", + Scale = 149597870700 + } + }, + Renderable = { + Type = "RenderableCartesianAxes" + }, + GUI = { + Name = "StaticScale - Basic", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) diff --git a/data/assets/examples/scale/timedependentscale/timedependent.asset b/data/assets/examples/scale/timedependentscale/timedependent.asset new file mode 100644 index 0000000000..80db2ffbc7 --- /dev/null +++ b/data/assets/examples/scale/timedependentscale/timedependent.asset @@ -0,0 +1,30 @@ +-- Basic +-- This asset creates a SceneGraphNode that only displays coordinate axes, which grow at +-- a speed of 1 m/s starting on January 1st, 2000 00:00:00. This means that on +-- that date, the coordinate axes will disappear and, for example, on January 1st, 2000 +-- 12:00:00, the coordinate axes will be 43200 meters long. + +local Node = { + Identifier = "TimeDependentScale_Example", + Transform = { + Scale = { + Type = "TimeDependentScale", + ReferenceDate = "2000 JAN 01 00:00:00" + } + }, + Renderable = { + Type = "RenderableCartesianAxes" + }, + GUI = { + Name = "TimeDependentScale - Basic", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) diff --git a/data/assets/examples/scale/timedependentscale/timedependent_speed.asset b/data/assets/examples/scale/timedependentscale/timedependent_speed.asset new file mode 100644 index 0000000000..77e353d259 --- /dev/null +++ b/data/assets/examples/scale/timedependentscale/timedependent_speed.asset @@ -0,0 +1,31 @@ +-- with Speed +-- This asset creates a SceneGraphNode that only displays coordinate axes, which grow at +-- a speed of 12 km/s starting on August 8th, 1969 12:00:00. This means that on +-- that date, the coordinate axes will disappear and, for example, on August 8th, 1969 +-- 23:00:00, the coordinate axes will be 475200 km long. + +local Node = { + Identifier = "TimeDependentScale_Example_Speed", + Transform = { + Scale = { + Type = "TimeDependentScale", + ReferenceDate = "1969 AUG 08 12:00:00", + Speed = 12000 + } + }, + Renderable = { + Type = "RenderableCartesianAxes" + }, + GUI = { + Name = "TimeDependentScale - With Speed", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) diff --git a/data/assets/examples/screenspacebrowser.asset b/data/assets/examples/screenspacebrowser.asset index 98e2ab4bea..651c905055 100644 --- a/data/assets/examples/screenspacebrowser.asset +++ b/data/assets/examples/screenspacebrowser.asset @@ -15,3 +15,14 @@ asset.onDeinitialize(function() end) asset.export(Browser) + + + +asset.meta = { + Name = "ScreenSpaceBrowser Example", + Description = [[Example of how to load and show a webpage in the rendering. The loaded + webpage is shown in screen space.]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/examples/screenspacedate.asset b/data/assets/examples/screenspacedate.asset new file mode 100644 index 0000000000..7e7e189f5c --- /dev/null +++ b/data/assets/examples/screenspacedate.asset @@ -0,0 +1,43 @@ +local Dashboard = { + Identifier = "ScreenSpaceTime", + Name = "Time", + Type = "ScreenSpaceDashboard", + FaceCamera = false, + Scale = 3.0, + Items = { + { + Type = "DashboardItemDate", + Identifier = "Date", + GuiName = "Date", + FontSize = 72, + FormatString = "{}", + TimeFormat = "YYYY MON DD HR:MN:SC.### ::RND" + } + } +} + + +asset.onInitialize(function() + openspace.addScreenSpaceRenderable(Dashboard) + + openspace.setPropertyValueSingle("ScreenSpace.ScreenSpaceTime.Size", {0.000000,0.000000,640.000000,320.000000}) +end) + +asset.onDeinitialize(function() + openspace.removeScreenSpaceRenderable(Dashboard) +end) + +asset.export(Dashboard) + + + +asset.meta = { + Name = "ScreenSpace - Date", + Description = [[ + This asset provides a Date dashboard item that is shown on a screen space object. + This can be place on a dome surface to show the current time to the audience. + ]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/examples/screenspacedistancetoearth.asset b/data/assets/examples/screenspacedistancetoearth.asset new file mode 100644 index 0000000000..8200f392a1 --- /dev/null +++ b/data/assets/examples/screenspacedistancetoearth.asset @@ -0,0 +1,61 @@ +local earth = asset.require("scene/solarsystem/planets/earth/earth") + +local Dashboard = { + Identifier = "ScreenSpaceDistanceToEarth", + Name = "Distance to Earth", + Type = "ScreenSpaceDashboard", + FaceCamera = false, + Scale = 3.0, + UseRadiusAzimuthElevation = true, + RadiusAzimuthElevation = { 2.0, -0.2, -0.2 }, + Items = { + { + Type = "DashboardItemDistance", + Identifier = "EarthToCameraDistance", + GuiName = "Distance to Earth", + FontSize = 40, + SourceType = "Camera", + DestinationType = "Node", + DestinationNodeName = earth.Earth.Identifier, + -- Specify to use a specific unit, by disabling the automatic simplification of + -- unit and instead use light-years + Simplification = false, + RequestedUnit = "lightyear", + -- If we don't want to use the default format of the text, we can specify our own + -- format. Here we've decided to not include the name of the source object (index 0), + -- which would be "Camera". We just include the name of the destination node (Earth, + -- index 1), the distance (index 2) as a floating point number (f), and then the + -- name for the unit (index 3) + FormatString = "Distance to {1}: {2:f} {3}" + } + } +} + + +asset.onInitialize(function() + openspace.addScreenSpaceRenderable(Dashboard) + openspace.setPropertyValueSingle( + "ScreenSpace.ScreenSpaceDistanceToEarth.Size", + {0.0, 0.0, 640.0, 320.0} + ) +end) + +asset.onDeinitialize(function() + openspace.removeScreenSpaceRenderable(Dashboard) +end) + +asset.export(Dashboard) + + + +asset.meta = { + Name = "ScreenSpace - Distance to Earth", + Description = [[ + This asset provides a screenspace dashboard item that shows the distance from the + camera to Earth, in light-years. This can be placed on a dome surface to show the + current distance to the audience. + ]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/examples/screenspacerenderable/screenspacedebugplane/debugplane.asset b/data/assets/examples/screenspacerenderable/screenspacedebugplane/debugplane.asset new file mode 100644 index 0000000000..33d565610c --- /dev/null +++ b/data/assets/examples/screenspacerenderable/screenspacedebugplane/debugplane.asset @@ -0,0 +1,20 @@ +-- Basic +-- This example adds a screen space image that shows the content of an OpenGL texture. +-- This can be useful for debugging textures. +-- +-- The texture that is displayed can be changed during runtime. Here it is just set to 1. + +local Object = { + Identifier = "ScreenSpaceDebugPlane_Example", + Type = "ScreenSpaceDebugPlane", + Texture = 1, + Name = "ScreenSpaceDebugPlane Example - Basic" +} + +asset.onInitialize(function() + openspace.addScreenSpaceRenderable(Object) +end) + +asset.onDeinitialize(function() + openspace.removeScreenSpaceRenderable(Object) +end) diff --git a/data/assets/examples/spheres.asset b/data/assets/examples/spheres.asset index df6afcfe81..4c7b834604 100644 --- a/data/assets/examples/spheres.asset +++ b/data/assets/examples/spheres.asset @@ -13,7 +13,7 @@ for z = 1,3 do } }, Renderable = { - Type = "RenderableSphere", + Type = "RenderableSphereImageLocal", Size = 0.20 + i * 0.01, Segments = 80, Opacity = 1, @@ -49,3 +49,15 @@ end) for _, n in ipairs(spheres) do asset.export(n) end + + + +asset.meta = { + Name = "Spheres Example", + Description = [[Example showing how to render textured spheres in 3D space. Some + coding logic is used to generate 9 spheres with different size and position.]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} + diff --git a/data/assets/examples/statemachine.asset b/data/assets/examples/statemachine.asset index 97b48baf46..c7a1bd4384 100644 --- a/data/assets/examples/statemachine.asset +++ b/data/assets/examples/statemachine.asset @@ -1,6 +1,9 @@ -- Create a state machine with a few different states. The state machine can be controlled through -- the scripting commands from the state machine module. +asset.require("scene/solarsystem/planets/earth/earth") +asset.require("scene/digitaluniverse/constellations") + local function targetNode(nodeIdentifier) return [[ openspace.setPropertyValueSingle("NavigationHandler.OrbitalNavigator.RetargetAnchor", nil) @@ -71,3 +74,14 @@ asset.onInitialize(function() openspace.statemachine.createStateMachine(States, Transitions, "Earth") end) + + + +asset.meta = { + Name = "State Machine", + Description = [[Example of how to create a state machine in OpenSpace, where each + state and transition between states may trigger different behaviors.]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/examples/temperature_land_highres.asset b/data/assets/examples/temperature_land_highres.asset index 5fbe0db6e5..9222804dcf 100644 --- a/data/assets/examples/temperature_land_highres.asset +++ b/data/assets/examples/temperature_land_highres.asset @@ -2,7 +2,7 @@ local globe = asset.require("scene/solarsystem/planets/earth/earth") -local path = asset.syncedResource({ +local path = asset.resource({ Name = "Earth Textures Climate", Type = "HttpSynchronization", Identifier = "earth_textures_climate", @@ -13,7 +13,7 @@ local path = asset.syncedResource({ local LayerPrototype = { Identifier = "ERA5_Land_HighRes_Monthly_2M_Temperature_Temporal_prototype", Name = "ERA5 Land HighRes Monthly 2M Temperature (Temporal) [Prototype]", - Type = "TemporalTileLayer", + Type = "TemporalTileProvider", Mode = "Prototyped", Prototyped = { Time = { @@ -32,7 +32,7 @@ local LayerPrototype = { local LayerFolder = { Identifier = "ERA5_Land_HighRes_Monthly_2M_Temperature_Temporal_folder", Name = "ERA5 Land HighRes Monthly 2M Temperature (Temporal) [Folder]", - Type = "TemporalTileLayer", + Type = "TemporalTileProvider", Mode = "Folder", Folder = { Folder = path, @@ -61,7 +61,6 @@ asset.export("Folder", LayerFolder) asset.meta = { Name = "Climate Earth Layers", - Version = "1.0", Description = "ERA5 data", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/terra_texture_spout.asset b/data/assets/examples/terra_texture_spout.asset similarity index 79% rename from data/assets/scene/solarsystem/planets/earth/layers/colorlayers/terra_texture_spout.asset rename to data/assets/examples/terra_texture_spout.asset index 7f83b74402..a026a0b1cc 100644 --- a/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/terra_texture_spout.asset +++ b/data/assets/examples/terra_texture_spout.asset @@ -1,4 +1,4 @@ -local globe = asset.require("../../earth") +local globe = asset.require("scene/solarsystem/planets/earth/earth") @@ -6,7 +6,7 @@ local Layer = { Identifier = "TextureSpout", Enabled = asset.enabled, SpoutName = "SPOUT_TERRA_RECEIVER", - Type = "SpoutImageTileLayer" + Type = "SpoutImageProvider" } @@ -14,7 +14,6 @@ asset.onInitialize(function() openspace.globebrowsing.addLayer(globe.Earth.Identifier, "ColorLayers", Layer) end) - asset.onDeinitialize(function() openspace.globebrowsing.deleteLayer(globe.Earth.Identifier, "ColorLayers", Layer) end) diff --git a/data/assets/examples/tileprovider/tileproviderbyindex/byindex.asset b/data/assets/examples/tileprovider/tileproviderbyindex/byindex.asset new file mode 100644 index 0000000000..ecdab30a12 --- /dev/null +++ b/data/assets/examples/tileprovider/tileproviderbyindex/byindex.asset @@ -0,0 +1,59 @@ +-- Basic +-- This example file adds a layer to a globe that has a base layer and then replaces one +-- hemisphere of the planet with a single image. Recommended reading for this example is +-- the documentation on the DefaultTileProvider. + +-- Download some example images that we can use +local images = asset.resource({ + Name = "Earth Textures", + Type = "HttpSynchronization", + Identifier = "earth_textures", + Version = 3 +}) + +-- Define the TileProvider +local TileProvider = { + Identifier = "Example", + Type = "TileProviderByIndex", + Enabled = true, + -- The default tile provider that is used for the whole globe + DefaultTileProvider = { + Identifier = "Blue_Marble", + FilePath = images .. "earth_bluemarble.jpg" + }, + TileProviders = { + -- We only define one additional tile provider that overwrites the right + -- hemisphere of the globe + { + Index = { X = 0, Y = 0, Level = 2 }, + TileProvider = { + Identifier = "Blue_Marble_Night", + FilePath = images .. "earth_night.png" + } + } + } +} + +-- Define the scene graph node +local Node = { + Identifier = "TileProviderByIndex_Example", + Renderable = { + Type = "RenderableGlobe", + Layers = { + -- The globe has exactly one layer, which is the one we defined above + ColorLayers = { TileProvider } + } + }, + GUI = { + Name = "TileProviderByIndex - Basic", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) diff --git a/data/assets/examples/tileprovider/tileproviderbylevel/bylevel.asset b/data/assets/examples/tileprovider/tileproviderbylevel/bylevel.asset new file mode 100644 index 0000000000..d4aac29455 --- /dev/null +++ b/data/assets/examples/tileprovider/tileproviderbylevel/bylevel.asset @@ -0,0 +1,62 @@ +-- Basic +-- This example file adds two layers to a globe. The first layer being used is showing +-- a cloud layer and at higher levels a Blue Marble image is used instead. Recommended +-- reading for this example is the documentation on the +-- [DefaultTileProvider](#globebrowsing_defaulttileprovider). + +-- Download some example images that we can use +local images = asset.resource({ + Name = "Earth Textures", + Type = "HttpSynchronization", + Identifier = "earth_textures", + Version = 3 +}) + +-- Define the TileProvider +local TileProvider = { + Identifier = "Example", + Type = "TileProviderByLevel", + Enabled = true, + LevelTileProviders = { + { + -- Show only a cloud layer for the first 3 layers (2, 3, 4) + MaxLevel = 4, + TileProvider = { + Identifier = "Blue_Marble_Clouds", + FilePath = images .. "earth_clouds.jpg" + } + }, + { + -- Then transition fade into the Blue Marble image representation + MaxLevel = 22, + TileProvider = { + Identifier = "Blue_Marble", + FilePath = images .. "earth_bluemarble.jpg" + } + } + } +} + +-- Define the scene graph node +local Node = { + Identifier = "TileProviderByLevel_Example", + Renderable = { + Type = "RenderableGlobe", + Layers = { + -- The globe has exactly one layer, which is the one we defined above + ColorLayers = { TileProvider } + } + }, + GUI = { + Name = "TileProviderByLevel - Basic", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) diff --git a/data/assets/examples/timeframe/union.asset b/data/assets/examples/timeframe/union.asset new file mode 100644 index 0000000000..f1fa1bd62b --- /dev/null +++ b/data/assets/examples/timeframe/union.asset @@ -0,0 +1,41 @@ +-- Basic +-- This example creates a union out of two simpler TimeFrameIntervals and uses it for a +-- SceneGraphNode. The first TimeFrameInterval covers January 1st, 2000 and the second +-- TimeFrameInterval covers March 1st, 2002. The resulting TimeFrameUnion will cover both +-- January 1st, 2000 and March 1st, 2002. + +local Node = { + Identifier = "TimeFrameUnion_Example", + TimeFrame = { + Type = "TimeFrameUnion", + TimeFrames = { + -- The first TimeFrameInterval for the first day + { + Type = "TimeFrameInterval", + Start = "2000 JAN 01 00:00:00.000", + End = "2000 JAN 01 23:59:59.999" + }, + -- The second TimeFrameInterval for the second day + { + Type = "TimeFrameInterval", + Start = "2002 MAR 01 00:00:00.000", + End = "2002 MAR 01 23:59:59.999" + } + } + }, + Renderable = { + Type = "RenderableCartesianAxes" + }, + GUI = { + Name = "TimeFrameUnion - Basic", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) diff --git a/data/assets/examples/translation/luatranslation/example.lua b/data/assets/examples/translation/luatranslation/example.lua new file mode 100644 index 0000000000..b4c69ae45b --- /dev/null +++ b/data/assets/examples/translation/luatranslation/example.lua @@ -0,0 +1,12 @@ +-- The `translation` function takes exactly three arguments and returns the three +-- translation values (one for each axis) as a single table. +-- The three parameters are all provided as the number of seconds past the J2000 epoch +-- (2000-01-01 12:00:00), which can be both fractional numbers as well as negative numbers +-- for dates earlier than the epoch. +-- 1. `simulationTime` is the value of the in-game clock for the current frame +-- 2. `prevSimulationTime` is the value of the in-game clock for the previous frame +-- 3. `wallTime` is the value of the computer clock as seconds past the epoch +function translation(simulationTime, prevSimulationTime, wallTime) + -- Make the object rotate around the z axis in a circular pattern + return { math.sin(simulationTime), math.cos(simulationTime), 0 } +end diff --git a/data/assets/examples/translation/luatranslation/lua.asset b/data/assets/examples/translation/luatranslation/lua.asset new file mode 100644 index 0000000000..722b8f1830 --- /dev/null +++ b/data/assets/examples/translation/luatranslation/lua.asset @@ -0,0 +1,46 @@ +-- Basic +-- This asset creates a SceneGraphNode that only displays coordinate axes. The coordinate +-- axes are translated by a value determined by executing a Lua file that returns the +-- translation parameters to be used as a table. In order to see the translation, we need +-- to also have a node that does not move so that we can see the relative movement. +-- +-- ```{literalinclude} example.lua +-- :language: lua +-- :caption: The script file that is used in this example +-- ``` + +local NodeFocus = { + Identifier = "LuaTranslation_Example_Focus", + GUI = { + Name = "Basic (Focus)", + Path = "/Examples/LuaTranslation" + } +} + +local Node = { + Identifier = "LuaTranslation_Example", + Parent = NodeFocus.Identifier, + Transform = { + Translation = { + Type = "LuaTranslation", + Script = asset.resource("example.lua") + } + }, + Renderable = { + Type = "RenderableCartesianAxes" + }, + GUI = { + Name = "LuaTranslation - Basic", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(NodeFocus) + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) + openspace.removeSceneGraphNode(NodeFocus) +end) diff --git a/data/assets/examples/translation/spicetranslation/fixeddate.asset b/data/assets/examples/translation/spicetranslation/fixeddate.asset new file mode 100644 index 0000000000..93285faa76 --- /dev/null +++ b/data/assets/examples/translation/spicetranslation/fixeddate.asset @@ -0,0 +1,38 @@ +-- Fixed Date +-- This asset creates a time-varying translation with information from a SPICE kernel and +-- applies it to a SceneGraphNode that only displays coordinate axes. The position of the +-- coordinate axes are determined by SPICE, in this case pretending that the axes are +-- orbiting the same way the Moon does around Earth. In this specific example, the +-- position is independent of the actual in-game time in OpenSpace and only uses a fixed +-- date of 2000 JAN 01 instead. +-- For more information about SPICE see: https://naif.jpl.nasa.gov/naif/ + +-- Load the default SPICE kernels, which are the planetary constants and the DE430 kernel +asset.require("spice/core") + +local Node = { + Identifier = "SpiceTranslation_Example_FixedDate", + Transform = { + Translation = { + Type = "SpiceTranslation", + Target = "MOON", + Observer = "EARTH", + FixedDate = "2000 JAN 01 00:00:00.000" + } + }, + Renderable = { + Type = "RenderableCartesianAxes" + }, + GUI = { + Name = "SpiceTranslation - Fixed Date", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) diff --git a/data/assets/examples/translation/spicetranslation/referenceframe.asset b/data/assets/examples/translation/spicetranslation/referenceframe.asset new file mode 100644 index 0000000000..cb16f29b19 --- /dev/null +++ b/data/assets/examples/translation/spicetranslation/referenceframe.asset @@ -0,0 +1,37 @@ +-- Reference Frame +-- This asset creates a time-varying translation with information from a SPICE kernel and +-- applies it to a SceneGraphNode that only displays coordinate axes. The position of the +-- coordinate axes are determined by SPICE, in this case pretending that the axes are +-- orbiting the same way the Moon does around Earth. The calculated position will be +-- provided in the rotating coordinate system of Earth itself. +-- For more information about SPICE see: https://naif.jpl.nasa.gov/naif/ + +-- Load the default SPICE kernels, which are the planetary constants and the DE430 kernel +asset.require("spice/core") + +local Node = { + Identifier = "SpiceTranslation_Example_ReferenceFrame", + Transform = { + Translation = { + Type = "SpiceTranslation", + Target = "MOON", + Observer = "EARTH", + Frame = "IAU_EARTH" + } + }, + Renderable = { + Type = "RenderableCartesianAxes" + }, + GUI = { + Name = "SpiceTranslation - Reference Frame", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) diff --git a/data/assets/examples/translation/spicetranslation/spice.asset b/data/assets/examples/translation/spicetranslation/spice.asset new file mode 100644 index 0000000000..49b33775e5 --- /dev/null +++ b/data/assets/examples/translation/spicetranslation/spice.asset @@ -0,0 +1,35 @@ +-- Basic +-- This asset creates a time-varying translation with information from a SPICE kernel and +-- applies it to a SceneGraphNode that only displays coordinate axes. The position of the +-- coordinate axes are determined by SPICE, in this case pretending that the axes are +-- orbiting the same way the Moon does around Earth. +-- For more information about SPICE see: https://naif.jpl.nasa.gov/naif/ + +-- Load the default SPICE kernels, which are the planetary constants and the DE430 kernel +asset.require("spice/core") + +local Node = { + Identifier = "SpiceTranslation_Example", + Transform = { + Translation = { + Type = "SpiceTranslation", + Target = "MOON", + Observer = "EARTH" + } + }, + Renderable = { + Type = "RenderableCartesianAxes" + }, + GUI = { + Name = "SpiceTranslation - Basic", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) diff --git a/data/assets/examples/translation/statictranslation/static.asset b/data/assets/examples/translation/statictranslation/static.asset new file mode 100644 index 0000000000..c5f0e40b50 --- /dev/null +++ b/data/assets/examples/translation/statictranslation/static.asset @@ -0,0 +1,29 @@ +-- Basic +-- This asset creates a set of coordinate axes that are offset from their original +-- position by a fixed and static amount. In this specific example, the axes are offset +-- by 50 meters along the y-axis and 10 meters along the negative z-axis. + +local Node = { + Identifier = "StaticTranslation_Example", + Transform = { + Translation = { + Type = "StaticTranslation", + Position = { 0.0, 50.0, -10.0 } + } + }, + Renderable = { + Type = "RenderableCartesianAxes" + }, + GUI = { + Name = "StaticTranslation - Basic", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) diff --git a/data/assets/examples/urlsynchronization.asset b/data/assets/examples/urlsynchronization.asset index 0e74438b49..ebf609ca71 100644 --- a/data/assets/examples/urlsynchronization.asset +++ b/data/assets/examples/urlsynchronization.asset @@ -1,11 +1,11 @@ -asset.syncedResource({ +asset.resource({ Name = "Example Single", Type = "UrlSynchronization", Identifier = "example_single", Url = "http://celestrak.com/NORAD/elements/geo.txt" }) -asset.syncedResource({ +asset.resource({ Name = "Example Multiple", Type = "UrlSynchronization", Identifier = "example_multiple", @@ -15,26 +15,51 @@ asset.syncedResource({ } }) -asset.syncedResource({ +asset.resource({ Name = "Example Large", Type = "UrlSynchronization", Identifier = "example_large", - Url = "http://ipv4.download.thinkbroadband.com/100MB.zip", - Override = true + Url = { + "https://proof.ovh.net/files/100Mb.dat", + + "http://ipv4.download.thinkbroadband.com/200MB.zip", + "http://ipv4.download.thinkbroadband.com/100MB.zip", + "http://ipv4.download.thinkbroadband.com/50MB.zip", + "http://ipv4.download.thinkbroadband.com/20MB.zip", + "http://ipv4.download.thinkbroadband.com/10MB.zip", + "http://ipv4.download.thinkbroadband.com/5MB.zip", + }, + SecondsUntilResync = 0 }) -asset.syncedResource({ +asset.resource({ Name = "Example Medium", Type = "UrlSynchronization", Identifier = "example_medium", Url = "http://ipv4.download.thinkbroadband.com/5MB.zip", - Override = true + SecondsUntilResync = 0 }) -asset.syncedResource({ +-- Load a resource without hashing, meaning that the bare directory name will be +-- used for the downloaded file. If UseHash is true, the hash of the URL is appended +-- to the directory name to produce a unique directory under all circumstances +asset.resource({ Name = "Example No Hash", Type = "UrlSynchronization", Identifier = "no_hash", - Url = "http://wms.itn.liu.se/Mercury/Messenger_Mosaic/Messenger_Mosaic.wms", + Url = "http://liu-se.wms.openspaceproject.com/Mercury/Messenger_Mosaic/Messenger_Mosaic.wms", UseHash = false }) + + + +asset.meta = { + Name = "UrlSynchronization", + Description = [[Example showing how to load resources (any type of data file) from + online sources, using the UrlSynchronization resource type. These can then be used + in other assets. See more information on resources on the OpenSpace wiki page. + ]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/examples/video/examplevideo.mp4 b/data/assets/examples/video/examplevideo.mp4 index 3f5d7225ac..ed70354cbe 100644 Binary files a/data/assets/examples/video/examplevideo.mp4 and b/data/assets/examples/video/examplevideo.mp4 differ diff --git a/data/assets/examples/video/videoglobe.asset b/data/assets/examples/video/videoglobe.asset index 490c165c10..312fd6fac9 100644 --- a/data/assets/examples/video/videoglobe.asset +++ b/data/assets/examples/video/videoglobe.asset @@ -1,4 +1,4 @@ --- To learn how you can include your own video, see the wiki +-- To learn how you can include your own video, see the wiki -- http://wiki.openspaceproject.com/docs/builders/assets/resources.html local earth = asset.require("scene/solarsystem/planets/earth/earth") @@ -9,8 +9,8 @@ local Layer = { Name = "Globe Video Loop Example", Identifier = "GlobeVideoLoopExample", Enabled = true, - Type = "VideoTileLayer", - Video = asset.localResource("examplevideo.mp4"), + Type = "VideoTileProvider", + Video = asset.resource("examplevideo.mp4"), } @@ -27,9 +27,8 @@ asset.export("layer", Layer) asset.meta = { - Name = "Video Player Test", - Version = "1.0", - Description = "An example asset that shows how to include a video on Earth", + Name = "Video Player on Globe Example", + Description = "An example asset that shows how to include a video on Earth.", Author = "OpenSpace Team", URL = "https://openspaceproject.com", License = "MIT" diff --git a/data/assets/examples/video/videoplane.asset b/data/assets/examples/video/videoplane.asset index f27722ebe9..34f136bbd1 100644 --- a/data/assets/examples/video/videoplane.asset +++ b/data/assets/examples/video/videoplane.asset @@ -1,4 +1,4 @@ --- To learn how you can include your own video, see the wiki +-- To learn how you can include your own video, see the wiki -- http://wiki.openspaceproject.com/docs/builders/assets/resources.html local transforms = asset.require("scene/solarsystem/planets/earth/transforms") @@ -18,7 +18,7 @@ local Plane = { Type = "RenderableVideoPlane", MirrorBackside = true, Size = 3E7, - Video = asset.localResource("examplevideo.mp4"), + Video = asset.resource("examplevideo.mp4"), }, GUI = { Name = "Video Plane Example", @@ -40,9 +40,8 @@ asset.export(Plane) asset.meta = { - Name = "Video Plane Test", - Version = "1.0", - Description = "An example asset that shows how to include a video on a plane", + Name = "Video Plane Example", + Description = "An example asset that shows how to include a video on a plane.", Author = "OpenSpace Team", URL = "https://openspaceproject.com", License = "MIT" diff --git a/data/assets/examples/video/videoscreenspace.asset b/data/assets/examples/video/videoscreenspace.asset index c6982ff66e..6fc11ec55c 100644 --- a/data/assets/examples/video/videoscreenspace.asset +++ b/data/assets/examples/video/videoscreenspace.asset @@ -1,11 +1,11 @@ --- To learn how you can include your own video, see the wiki +-- To learn how you can include your own video, see the wiki -- http://wiki.openspaceproject.com/docs/builders/assets/resources.html local ScreenSpace = { Identifier = "ScreenSpaceVideoExample", Type = "ScreenSpaceVideo", Name = "Screen Space Video Example", - Video = asset.localResource("examplevideo.mp4") + Video = asset.resource("examplevideo.mp4") } @@ -22,9 +22,8 @@ asset.export(ScreenSpace) asset.meta = { - Name = "Video ScreenSpace", - Version = "1.0", - Description = "An example asset that shows how to include a video in screen space", + Name = "ScreenSpace Video Example", + Description = "An example asset that shows how to include a video in screen space.", Author = "OpenSpace Team", URL = "https://openspaceproject.com", License = "MIT" diff --git a/data/assets/examples/video/videosphere.asset b/data/assets/examples/video/videosphere.asset index d2a5df19ac..2e658633d8 100644 --- a/data/assets/examples/video/videosphere.asset +++ b/data/assets/examples/video/videosphere.asset @@ -1,4 +1,4 @@ --- To learn how you can include your own video, see the wiki +-- To learn how you can include your own video, see the wiki -- http://wiki.openspaceproject.com/docs/builders/assets/resources.html local Sphere = { @@ -7,7 +7,7 @@ local Sphere = { Type = "RenderableVideoSphere", Size = 100.0, Segments = 80, - Video = asset.localResource("examplevideo.mp4"), + Video = asset.resource("examplevideo.mp4"), Orientation = "Both" }, GUI = { @@ -18,7 +18,7 @@ local Sphere = { asset.onInitialize(function() - openspace.addSceneGraphNode(Sphere) + openspace.addSceneGraphNode(Sphere) end) asset.onDeinitialize(function() @@ -30,9 +30,8 @@ asset.export(Sphere) asset.meta = { - Name = "Video Player on Sphere", - Version = "1.0", - Description = "An example asset that shows how to include a video on a sphere", + Name = "Video Player on Sphere Example", + Description = "An example asset that shows how to include a video on a sphere.", Author = "OpenSpace Team", URL = "https://openspaceproject.com", License = "MIT" diff --git a/data/assets/examples/video/videostretchedtotime.asset b/data/assets/examples/video/videostretchedtotime.asset index 93c31047a9..0d7a792466 100644 --- a/data/assets/examples/video/videostretchedtotime.asset +++ b/data/assets/examples/video/videostretchedtotime.asset @@ -1,4 +1,4 @@ --- To learn how you can include your own video, see the wiki +-- To learn how you can include your own video, see the wiki -- http://wiki.openspaceproject.com/docs/builders/assets/resources.html local earth = asset.require("scene/solarsystem/planets/earth/earth") @@ -8,8 +8,8 @@ local earth = asset.require("scene/solarsystem/planets/earth/earth") local Layer = { Name = "Stretched Video Example", Identifier = "StretchedVideoExample", - Type = "VideoTileLayer", - Video = asset.localResource("examplevideo.mp4"), + Type = "VideoTileProvider", + Video = asset.resource("examplevideo.mp4"), StartTime = "2023 01 29 20:00:00", EndTime = "2023 01 29 21:00:00", PlaybackMode = "MapToSimulationTime", @@ -32,7 +32,6 @@ asset.export(Layer) asset.meta = { Name = "Stretched Video Example", - Version = "1.0", Description = "This is a video mapped to the simulation time in OpenSpace.", Author = "OpenSpace Team", URL = "https://openspaceproject.com", diff --git a/data/assets/examples/volume/generated/cartesian.asset b/data/assets/examples/volume/generated/cartesian.asset index 634f009e6f..07a4797a1b 100644 --- a/data/assets/examples/volume/generated/cartesian.asset +++ b/data/assets/examples/volume/generated/cartesian.asset @@ -9,7 +9,7 @@ local transforms = asset.require("scene/solarsystem/sun/transforms") local SunRadius = 695508000 local Volume = { - Identifier = "GeneratedVolume", + Identifier = "GeneratedVolumeCartesian", Parent = transforms.SolarSystemBarycenter.Identifier, Transform = { Scale = { @@ -19,14 +19,14 @@ local Volume = { }, Renderable = { Type = "RenderableTimeVaryingVolume", - SourceDirectory = asset.localResource("cartesian"), - TransferFunction = asset.localResource("../transferfunction.txt"), + SourceDirectory = asset.resource("cartesian"), + TransferFunction = asset.resource("../transferfunction.txt"), StepSize = 0.01, MinValue = 0, MaxValue = 1, GridType = "Cartesian", - SecondsBefore = 50 * 365 * 24 * 60 * 60, -- 50 years before - SecondsAfter = 50 * 365 * 24 * 60 * 60 -- 50 years after + SecondsBefore = 50 * openspace.time.secondsPerYear(), -- 50 years before + SecondsAfter = 50 * openspace.time.secondsPerYear() -- 50 years after }, GUI = { Path = "/Examples" diff --git a/data/assets/examples/volume/generated/cartesiansequence.asset b/data/assets/examples/volume/generated/cartesiansequence.asset index c0e860c6e5..406ed9c387 100644 --- a/data/assets/examples/volume/generated/cartesiansequence.asset +++ b/data/assets/examples/volume/generated/cartesiansequence.asset @@ -9,27 +9,27 @@ local transforms = asset.require("scene/solarsystem/sun/transforms") local SunRadius = 695508000 local Volume = { - Identifier = "GeneratedVolume", + Identifier = "GeneratedVolumeCartesianSequence", Parent = transforms.SolarSystemBarycenter.Identifier, - Renderable = { - Type = "RenderableTimeVaryingVolume", - SourceDirectory = asset.localResource("cartesiansequence"), - TransferFunction = asset.localResource("../transferfunction.txt"), - StepSize = 0.01, - MinValue = 0, - MaxValue = 1, - GridType = "Cartesian", - SecondsBefore = 50 * 365 * 24 * 60 * 60, -- 50 years before - SecondsAfter = 50 * 365 * 24 * 60 * 60 -- 50 years after - }, - GUI = { - Path = "/Examples" - }, Transform = { Scale = { Type = "StaticScale", Scale = 1000 * SunRadius } + }, + Renderable = { + Type = "RenderableTimeVaryingVolume", + SourceDirectory = asset.resource("cartesiansequence"), + TransferFunction = asset.resource("../transferfunction.txt"), + StepSize = 0.01, + MinValue = 0, + MaxValue = 1, + GridType = "Cartesian", + SecondsBefore = 50 * openspace.time.secondsPerYear(), -- 50 years before + SecondsAfter = 50 * openspace.time.secondsPerYear() -- 50 years after + }, + GUI = { + Path = "/Examples" } } diff --git a/data/assets/examples/volume/generated/spherical.asset b/data/assets/examples/volume/generated/spherical.asset index d0d4b7e25c..04f41e286f 100644 --- a/data/assets/examples/volume/generated/spherical.asset +++ b/data/assets/examples/volume/generated/spherical.asset @@ -9,7 +9,7 @@ local transforms = asset.require("scene/solarsystem/sun/transforms") local AstronomicalUnit = 149597870700 local Volume = { - Identifier = "GeneratedVolume", + Identifier = "GeneratedVolumeSpherical", Parent = transforms.SolarSystemBarycenter.Identifier, Transform = { Scale = { @@ -19,14 +19,14 @@ local Volume = { }, Renderable = { Type = "RenderableTimeVaryingVolume", - SourceDirectory = asset.localResource("spherical"), - TransferFunction = asset.localResource("../transferfunction.txt"), + SourceDirectory = asset.resource("spherical"), + TransferFunction = asset.resource("../transferfunction.txt"), StepSize = 0.01, MinValue = 0, MaxValue = 1, GridType = "Spherical", - SecondsBefore = 50 * 365 * 24 * 60 * 60, -- 50 years before - SecondsAfter = 50 * 365 * 24 * 60 * 60 -- 50 years after + SecondsBefore = 50 * openspace.time.secondsPerYear(), -- 50 years before + SecondsAfter = 50 * openspace.time.secondsPerYear() -- 50 years after }, GUI = { Path = "/Examples" diff --git a/data/assets/global/localbookmarks.asset b/data/assets/global/localbookmarks.asset index d8fe0eca97..dadea5c098 100644 --- a/data/assets/global/localbookmarks.asset +++ b/data/assets/global/localbookmarks.asset @@ -4,9 +4,27 @@ local bookmarkHelper = asset.require("util/generate_bookmarks") -- ensure that it is loaded first asset.require("scene/solarsystem/planets/earth/earth") + + +local localBookmarks = openspace.absPath("${USER}/bookmarks/localbookmarks.csv") +local bookmarksDirectory = openspace.absPath("${USER}/bookmarks") + +if not openspace.directoryExists(bookmarksDirectory) then + openspace.createDirectory(bookmarksDirectory) +end + +-- Create bookmarks file if it does not exist +if not openspace.fileExists(localBookmarks) then + openspace.downloadFile( + "http://liu-se.cdn.openspaceproject.com/files/misc/localbookmarks.csv", + openspace.absPath("${USER}/bookmarks/localbookmarks.csv"), + true + ) +end + local nodes = bookmarkHelper.loadBookmarks( "Local Bookmarks", - "${ASSETS}/customization/localbookmarks.csv" + "${USER}/bookmarks/localbookmarks.csv" ) diff --git a/data/assets/global/openspacebookmarks.asset b/data/assets/global/openspacebookmarks.asset index 90bf4bcbd0..f647f678a4 100644 --- a/data/assets/global/openspacebookmarks.asset +++ b/data/assets/global/openspacebookmarks.asset @@ -1,18 +1,23 @@ +asset.require("scene/solarsystem/planets/earth/earth") +asset.require("scene/solarsystem/planets/mars/mars") local bookmarkHelper = asset.require("util/generate_bookmarks") -local dataProvider = "http://data.openspaceproject.com/files/bookmarks/v1/bookmarks.csv" -local bookmarksCSV = asset.syncedResource({ +local dataProvider = "http://data.openspaceproject.com/files/bookmarks/v3/bookmarks.csv" + +local bookmarksCSV = asset.resource({ Identifier = "openspace_bookmarks", Name = "OpenSpace Bookmarks", Type = "UrlSynchronization", UseHash = false, - Override = true, + SecondsUntilResync = 0, Url = dataProvider }) + local nodes = {} + asset.onInitialize(function() nodes = bookmarkHelper.loadBookmarks("OpenSpace Bookmarks", bookmarksCSV .. "bookmarks.csv") for _, n in ipairs(nodes) do diff --git a/data/assets/gui/images.asset b/data/assets/gui/images.asset index 97397155cf..e67cc96217 100644 --- a/data/assets/gui/images.asset +++ b/data/assets/gui/images.asset @@ -1,4 +1,4 @@ -asset.syncedResource({ +asset.resource({ Type = "UrlSynchronization", Name = "Icons", Identifier = "planet_icons", @@ -20,7 +20,7 @@ asset.syncedResource({ UseHash = false }) -asset.syncedResource({ +asset.resource({ Type = "UrlSynchronization", Name = "Stories", Identifier = "story_images", @@ -35,7 +35,7 @@ asset.syncedResource({ UseHash = false }) -asset.syncedResource({ +asset.resource({ Type = "UrlSynchronization", Name = "Instructions", Identifier = "images", diff --git a/data/assets/modules/exoplanets/default_settings.asset b/data/assets/modules/exoplanets/default_settings.asset index a41dac688a..3684d9742c 100644 --- a/data/assets/modules/exoplanets/default_settings.asset +++ b/data/assets/modules/exoplanets/default_settings.asset @@ -10,7 +10,6 @@ end) asset.meta = { Name = "Exoplanet Default Settings", - Version = "1.0", Description = "Some default settings related to the exoplanet module", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/modules/exoplanets/exoplanets_data.asset b/data/assets/modules/exoplanets/exoplanets_data.asset index d7b40e7a6b..7bf8632d35 100644 --- a/data/assets/modules/exoplanets/exoplanets_data.asset +++ b/data/assets/modules/exoplanets/exoplanets_data.asset @@ -1,11 +1,11 @@ -local dataPath = asset.syncedResource({ +local dataPath = asset.resource({ Name = "Exoplanet Data Files", Type = "HttpSynchronization", Identifier = "exoplanets_data", - Version = 5 + Version = 6 }) -local colormaps = asset.syncedResource({ +local colormaps = asset.resource({ Name = "Stars Color Table", Type = "HttpSynchronization", Identifier = "stars_colormap", @@ -17,12 +17,12 @@ asset.onInitialize(function() -- Set the default data files used for the exoplanet system creation -- (Check if already set, to not override value set in another file) local p1 = "Modules.Exoplanets.DataFolder" - if (openspace.getPropertyValue(p1) == "") then + if (openspace.propertyValue(p1) == "") then openspace.setPropertyValueSingle(p1, dataPath) end local p2 = "Modules.Exoplanets.BvColormap" - if (openspace.getPropertyValue(p2) == "") then + if (openspace.propertyValue(p2) == "") then openspace.setPropertyValueSingle(p2, colormaps .. "colorbv.cmap") end end) @@ -33,10 +33,9 @@ asset.export("DataPath", dataPath) asset.meta = { Name = "Exoplanet Data", - Version = "5.0", Description = [[The data that is used for the exoplanet systems. The data has been derived from the 'Planetary Systems Composite Data' dataset from the NASA Exoplanet - Archive]], + Archive.]], Author = "OpenSpace Team", URL = "https://exoplanetarchive.ipac.caltech.edu/docs/data.html", License = "MIT license" diff --git a/data/assets/modules/exoplanets/exoplanets_textures.asset b/data/assets/modules/exoplanets/exoplanets_textures.asset index 410faca805..39ea9938cf 100644 --- a/data/assets/modules/exoplanets/exoplanets_textures.asset +++ b/data/assets/modules/exoplanets/exoplanets_textures.asset @@ -4,14 +4,14 @@ local habitableZoneTextures = asset.require( -local sunTextures = asset.syncedResource({ +local sunTextures = asset.resource({ Type = "HttpSynchronization", Name = "Sun textures", Identifier = "sun_textures", Version = 4 }) -local texturesPath = asset.syncedResource({ +local texturesPath = asset.resource({ Name = "Exoplanet Textures", Type = "HttpSynchronization", Identifier = "exoplanets_textures", @@ -31,27 +31,27 @@ asset.onInitialize(function() -- Set the default textures used for the exoplanet system creation -- (Check if already set, to not override value set in another file) local p1 = "Modules.Exoplanets.StarTexture" - if (openspace.getPropertyValue(p1) == "") then + if (openspace.propertyValue(p1) == "") then openspace.setPropertyValueSingle(p1, starTexture) end local p2 = "Modules.Exoplanets.StarGlareTexture" - if (openspace.getPropertyValue(p2) == "") then + if (openspace.propertyValue(p2) == "") then openspace.setPropertyValueSingle(p2, starGlareTexture) end local p3 = "Modules.Exoplanets.NoDataTexture" - if (openspace.getPropertyValue(p3) == "") then + if (openspace.propertyValue(p3) == "") then openspace.setPropertyValueSingle(p3, noDataTexture) end local p4 = "Modules.Exoplanets.OrbitDiscTexture" - if (openspace.getPropertyValue(p4) == "") then + if (openspace.propertyValue(p4) == "") then openspace.setPropertyValueSingle(p4, discTexture) end local p5 = "Modules.Exoplanets.HabitableZoneTexture" - if (openspace.getPropertyValue(p5) == "") then + if (openspace.propertyValue(p5) == "") then openspace.setPropertyValueSingle(p5, hzTexture) end end) @@ -62,7 +62,6 @@ asset.export("TexturesPath", texturesPath) asset.meta = { Name = "Exoplanet Textures", - Version = "2.0", Description = [[Adds all textures that are required for the exoplanet system visualizations]], Author = "OpenSpace Team", diff --git a/data/assets/modules/skybrowser/default_settings.asset b/data/assets/modules/skybrowser/default_settings.asset index ed4ac403b5..ceb952e9ec 100644 --- a/data/assets/modules/skybrowser/default_settings.asset +++ b/data/assets/modules/skybrowser/default_settings.asset @@ -8,7 +8,6 @@ end) asset.meta = { Name = "SkyBrowser Module Default Settings", - Version = "1.0", Description = "Some default settings related to the SkyBrowser module", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/modules/skybrowser/hover_circle.asset b/data/assets/modules/skybrowser/hover_circle.asset index efaa04368f..bd1123c9a9 100644 --- a/data/assets/modules/skybrowser/hover_circle.asset +++ b/data/assets/modules/skybrowser/hover_circle.asset @@ -1,6 +1,8 @@ local transforms = asset.require("scene/solarsystem/sun/transforms") -local imageFolder = asset.syncedResource({ + + +local imageFolder = asset.resource({ Name = "Hover Circle Image", Type = "HttpSynchronization", Identifier = "misc_ring_image", @@ -23,7 +25,8 @@ local circle = { Description = [[A circular marker that shows the position on the night sky of the object hovered in the sky browser UI. The circle will hide/show up dynamically, depending on the interaction with the items in the UI]], - Path = "/SkyBrowser" + Path = "/SkyBrowser", + Hidden = true } } @@ -43,7 +46,6 @@ asset.export(circle) asset.meta = { Name = "SkyBrowser Hover Circle", - Version = "1.0", Description = [[Includes a circular marker that shows the position on the night sky of the object hovered in the sky browser UI]], Author = "OpenSpace Team", diff --git a/data/assets/modules/touch/default_settings.asset b/data/assets/modules/touch/default_settings.asset index 57a74580b5..fed71f42d6 100644 --- a/data/assets/modules/touch/default_settings.asset +++ b/data/assets/modules/touch/default_settings.asset @@ -18,7 +18,6 @@ end) asset.meta = { Name = "Touch Module Default Settings", - Version = "1.0", Description = "Some default settings related to the touch module", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/nightsky/altaz.asset b/data/assets/nightsky/altaz.asset index 6a4d0727ad..1ec3c7f65b 100644 --- a/data/assets/nightsky/altaz.asset +++ b/data/assets/nightsky/altaz.asset @@ -25,8 +25,8 @@ local AltAzGridPosition = { } }, GUI = { - Name = "Altitude/Azimuth Grid Position", - Path = "/Other/Grids", + Name = "Altitude-Azimuth Grid Position", + Path = "/Night Sky/Coordinate Systems/Altitude-Azimuth", Hidden = true } } @@ -48,17 +48,20 @@ local AltAzGrid = { Type = "RenderableSphericalGrid", Enabled = asset.enabled, Opacity = 0.8, - Color = { 0.4, 0.8, 0.4 }, + Color = { 0.2, 0.4, 0.2 }, LineWidth = 2.0, RenderBinMode = "PostDeferredTransparent" }, GUI = { - Name = "Altitude/Azimuth Grid", - Path = "/Other/Grids" + Name = "Altitude-Azimuth Grid", + Description = [[A local Altitude/Azimuth grid centered around your position on a + planetary surface. The grid can be toggled, hidden or shown using the accompanying + actions in the actions panel, under "Night Sky". Use these actions to move it to + another planet. The default is Earth.]], + Path = "/Night Sky/Coordinate Systems/Altitude-Azimuth" } } - local ShowAltaz = { Identifier = "os.nightsky.ShowAltaz", Name = "Show Alt/Az grid", @@ -98,6 +101,7 @@ local ToggleAltaz = { IsLocal = false } + asset.onInitialize(function() openspace.addSceneGraphNode(AltAzGridPosition) openspace.addSceneGraphNode(AltAzGrid) @@ -120,3 +124,15 @@ asset.export(AltAzGrid) asset.export("ShowAltaz", ShowAltaz.Identifier) asset.export("HideAltaz", HideAltaz.Identifier) asset.export("ToggleAltaz", ToggleAltaz.Identifier) + + + +asset.meta = { + Name = "Altitude/Azimuth Grid", + Description = [[A local Altitude/Azimuth grid centered around your position on a + planetary surface. The asset also includes some actions to toggle, hide or + show the grid.]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/nightsky/cardinal_directions.asset b/data/assets/nightsky/cardinal_directions.asset index cc3b68b854..026bc3ca2c 100644 --- a/data/assets/nightsky/cardinal_directions.asset +++ b/data/assets/nightsky/cardinal_directions.asset @@ -2,7 +2,7 @@ local earthAsset = asset.require("scene/solarsystem/planets/earth/earth") -local textures = asset.syncedResource({ +local textures = asset.resource({ Name = "Cardinal Directions Textures", Type = "HttpSynchronization", Identifier = "cardinal_directions_textures", @@ -33,7 +33,7 @@ local CardinalDirectionsPosition = { }, GUI = { Name = "Cardinal Directions Position", - Path = "/Other/Night Sky", + Path = "/Night Sky", Hidden = true } } @@ -48,7 +48,7 @@ local CardinalDirectionSphere = { } }, Renderable = { - Type = "RenderableSphere", + Type = "RenderableSphereImageLocal", Enabled = asset.enabled, Size = 50000, Segments = 80, @@ -60,12 +60,15 @@ local CardinalDirectionSphere = { }, GUI = { Name = "Cardinal Directions", - Path = "/Other/Night Sky" + Description = [[A textured sphere showing the cardinal directions. + The sphere is placed on the planet surface and follows the camera's movements. + ]], + Path = "/Night Sky" } } local showCommand = [[ - local lat, lon, alt = openspace.globebrowsing.getGeoPositionForCamera() + local lat, lon, alt = openspace.globebrowsing.geoPositionForCamera() local camera = openspace.navigation.getNavigationState() openspace.setParent("CardinalDirectionsPosition", camera.Anchor) openspace.setPropertyValueSingle("Scene.CardinalDirectionsPosition.Translation.Globe", camera.Anchor) @@ -126,6 +129,7 @@ local HideNesw = { IsLocal = false } + asset.onInitialize(function() openspace.addSceneGraphNode(CardinalDirectionsPosition) openspace.addSceneGraphNode(CardinalDirectionSphere) @@ -153,3 +157,16 @@ asset.export("ShowNeswBandSmall", ShowNeswBand.Identifier) asset.export("ShowNeswLetters", ShowNeswLetters.Identifier) asset.export("ShowNeswLettersSmall", ShowNeswLettersSmall.Identifier) asset.export("HideNesw", HideNesw.Identifier) + + + +asset.meta = { + Name = "Cardinal Directions", + Description = [[Adds a sphere showing the cardinal directions, that follows the camera + around when navigating on the planet surface. It also includes actions to change the + texture of the sphere to different styles. + ]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/nightsky/ecliptic_band.asset b/data/assets/nightsky/ecliptic_band.asset index e7fbc319bd..f2f268c274 100644 --- a/data/assets/nightsky/ecliptic_band.asset +++ b/data/assets/nightsky/ecliptic_band.asset @@ -2,7 +2,7 @@ local transforms = asset.require("scene/solarsystem/sun/transforms") -local textures = asset.syncedResource({ +local textures = asset.resource({ Name = "Ecliptic Band Textures", Type = "HttpSynchronization", Identifier = "ecliptic_band_textures", @@ -11,9 +11,9 @@ local textures = asset.syncedResource({ local EclipticRotationMatrix = { - -0.05487554, 0.4941095, -0.8676661, - -0.9938214, -0.1109906, -0.0003515167, - -0.09647644, 0.8622859, 0.4971472 + -0.05487554, 0.4941095, -0.8676661, + -0.9938214, -0.1109906, -0.0003515167, + -0.09647644, 0.8622859, 0.4971472 } local EclipticLine = { @@ -22,7 +22,7 @@ local EclipticLine = { Transform = { Scale = { Type = "StaticScale", - Scale = 4.28601E17 + Scale = 9.46377307652E17 }, Rotation = { Type = "StaticRotation", @@ -32,15 +32,15 @@ local EclipticLine = { Renderable = { Type = "RenderableRadialGrid", Opacity = 0.8, - Color = { 1.0, 1.0, 1.0 }, - LineWidth = 3.0, + Color = { 0.5, 0.24, 0.24 }, + LineWidth = 4.0, GridSegments = { 1, 1 }, - Radii = { 0.5, 0.5 }, Enabled = asset.enabled }, GUI = { - Name = "Ecliptic Line", - Path = "/Other/Lines" + Name = "Ecliptic", + Description = "A line representation of the Ecliptic plane.", + Path = "/Night Sky/Coordinate Systems/Ecliptic" } } @@ -54,9 +54,9 @@ local EclipticBand = { } }, Renderable = { - Type = "RenderableSphere", + Type = "RenderableSphereImageLocal", Texture = textures .. "band2x.png", - Size = 4.28601E17, + Size = 9.46377307652E17, Segments = 50, DisableFadeInOut = true, Orientation = "Inside", @@ -65,7 +65,8 @@ local EclipticBand = { }, GUI = { Name = "Ecliptic Band", - Path = "/Other/Lines" + Description = "A band representation of the Ecliptic plane.", + Path = "/Night Sky/Coordinate Systems/Ecliptic" } } @@ -158,3 +159,14 @@ asset.export("ToggleEclipticLine", ToggleEclipticLine.Identifier) asset.export("ShowEclipticBand", ShowEclipticBand.Identifier) asset.export("HideEclipticBand", HideEclipticBand.Identifier) asset.export("ToggleEclipticBand", ToggleEclipticBand.Identifier) + + + +asset.meta = { + Name = "Ecliptic Band/Line", + Description = [[A line and band representation of the Ecliptic plane, including actions + to toggle, hide and show each of them.]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/nightsky/equatorial_band.asset b/data/assets/nightsky/equatorial_band.asset index 5b049121c4..b72e01e5df 100644 --- a/data/assets/nightsky/equatorial_band.asset +++ b/data/assets/nightsky/equatorial_band.asset @@ -3,9 +3,9 @@ local transforms = asset.require("scene/solarsystem/sun/transforms") local EquatorialRotationMatrix = { - -0.05487554, 0.4941095, -0.8676661, - -0.8734371, -0.4448296, -0.1980764, - -0.483835, 0.7469823, 0.4559838 + -0.05487554, 0.4941095, -0.8676661, + -0.8734371, -0.4448296, -0.1980764, + -0.483835, 0.7469823, 0.4559838 } @@ -19,21 +19,21 @@ local EquatorialLine = { }, Scale = { Type = "StaticScale", - Scale = 4.28601E17 + Scale = 7.5686E17 } }, Renderable = { Type = "RenderableRadialGrid", Opacity = 0.8, - Color = { 1.0, 1.0, 1.0 }, - LineWidth = 3.0, + Color = { 0.6, 0.6, 0.2 }, + LineWidth = 4.0, GridSegments = { 1, 1 }, - Radii = { 0.5, 0.5 }, Enabled = asset.enabled }, GUI = { - Name = "Equatorial Line", - Path = "/Other/Lines" + Name = "Celestial Equator", + Description = "A line representation of the Equatorial plane.", + Path = "/Night Sky/Coordinate Systems/Equatorial" } } @@ -87,3 +87,14 @@ asset.export(EquatorialLine) asset.export("ShowEquatorialLine", ShowEquatorialLine.Identifier) asset.export("HideEquatorialLine", HideEquatorialLine.Identifier) asset.export("ToggleEquatorialLine", ToggleEquatorialLine.Identifier) + + + +asset.meta = { + Name = "Equatorial Line", + Description = [[A line representation of the Equatorial plane, including actions + to toggle, hide and show it.]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/nightsky/galactic_band.asset b/data/assets/nightsky/galactic_band.asset index 94724286a9..79752a29aa 100644 --- a/data/assets/nightsky/galactic_band.asset +++ b/data/assets/nightsky/galactic_band.asset @@ -2,28 +2,28 @@ local transforms = asset.require("scene/solarsystem/sun/transforms") -local GalacticBand = { - Identifier = "GalacticBand", - Parent = transforms.SolarSystemBarycenter.Name, - Transform = { - Scale = { - Type = "StaticScale", - Scale = 9.46377307652E18 - } - }, - Renderable = { - Type = "RenderableRadialGrid", - Opacity = 0.8, - Color = { 1.0, 1.0, 1.0 }, - LineWidth = 3.0, - GridSegments = { 1, 1 }, - Radii = { 0.5, 0.5 }, - Enabled = asset.enabled - }, - GUI = { - Name = "Galactic Equator Line", - Path = "/Other/Lines" +local GalacticLine = { + Identifier = "GalacticLine", + Parent = transforms.SolarSystemBarycenter.Name, + Transform = { + Scale = { + Type = "StaticScale", + Scale = 9.46377307652E18 } + }, + Renderable = { + Type = "RenderableRadialGrid", + Opacity = 0.8, + Color = { 0.08, 0.40, 0.40 }, + LineWidth = 4.0, + GridSegments = { 1, 1 }, + Enabled = asset.enabled + }, + GUI = { + Name = "Galactic Equator", + Description = "A line representation of the Galactic Equator plane.", + Path = "/Night Sky/Coordinate Systems/Galactic" + } } @@ -58,8 +58,9 @@ local ToggleGalacticBand = { IsLocal = false } + asset.onInitialize(function() - openspace.addSceneGraphNode(GalacticBand) + openspace.addSceneGraphNode(GalacticLine) openspace.action.registerAction(ShowGalacticBand) openspace.action.registerAction(HideGalacticBand) end) @@ -67,9 +68,21 @@ end) asset.onDeinitialize(function() openspace.action.removeAction(HideGalacticBand) openspace.action.removeAction(ShowGalacticBand) - openspace.removeSceneGraphNode(GalacticBand) + openspace.removeSceneGraphNode(GalacticLine) end) -asset.export(GalacticBand) +asset.export(GalacticLine) asset.export("ShowGalacticBand", ShowGalacticBand.Identifier) asset.export("HideGalacticBand", HideGalacticBand.Identifier) + + + +asset.meta = { + Name = "Galactic Line", + Description = [[A line representation of the Galactic Equator plane, including actions + to toggle, hide and show it.]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} + diff --git a/data/assets/nightsky/ground_panoramas.asset b/data/assets/nightsky/ground_panoramas.asset deleted file mode 100644 index 6e2cf44100..0000000000 --- a/data/assets/nightsky/ground_panoramas.asset +++ /dev/null @@ -1,188 +0,0 @@ -local earthAsset = asset.require("scene/solarsystem/planets/earth/earth") - - - -local textures = asset.syncedResource({ - Name = "Ground Panorama Textures", - Type = "UrlSynchronization", - Identifier = "ground_panorama_textures", - Url = { - "https://wms.openspace.amnh.org/static/sync/url/panos/0.png", - "https://wms.openspace.amnh.org/static/sync/url/panos/1.png", - "https://wms.openspace.amnh.org/static/sync/url/panos/2.png", - "https://wms.openspace.amnh.org/static/sync/url/panos/3.png", - "https://wms.openspace.amnh.org/static/sync/url/panos/4.png", - "https://wms.openspace.amnh.org/static/sync/url/panos/5.png", - "https://wms.openspace.amnh.org/static/sync/url/panos/6.png" - }, - Override = false -}) - - -local GroundPanoPosition = { - Identifier = "GroundPanoPosition", - Parent = earthAsset.Earth.Identifier, - Transform = { - Translation = { - Type = "GlobeTranslation", - Globe = earthAsset.Earth.Identifier, - Latitude = 34.201639, - Longitude = -118.171319, - Altitude = 10.0, - UseCamera = false, - UseCameraAltitude = false - }, - Rotation = { - Type = "GlobeRotation", - Globe = earthAsset.Earth.Identifier, - Latitude = 34.201639, - Longitude = -118.171319, - UseHeightmap = false, - Angle = 270.0 - } - }, - GUI = { - Name = "Ground Pano Position", - Path = "/Other/Night Sky", - Hidden = true - } -} - -local GroundPanoSphere = { - Identifier = "GroundPanoSphere", - Parent = GroundPanoPosition.Identifier, - Transform = { - Rotation = { - Type = "StaticRotation", - Rotation = { -math.pi / 2, 0.0, 0.0 } - } - }, - Renderable = { - Type = "RenderableSphere", - Size = 8.5, - Segments = 40, - Opacity = 1.0, - Enabled = asset.enabled, - Texture = textures .. "3.png", - Orientation = "Inside", - MirrorTexture = true, - FadeOutThreshold = 1.00, - Background = true, - RenderBinMode = "Overlay" - }, - GUI = { - Name = "Ground Panorama", - Path = "/Other/Night Sky" - } -} - -local showCommand = [[ - local lat, lon, alt = openspace.globebrowsing.getGeoPositionForCamera() - local camera = openspace.navigation.getNavigationState() - openspace.setParent("GroundPanoPosition", camera.Anchor) - openspace.setPropertyValueSingle("Scene.GroundPanoPosition.Translation.Globe", camera.Anchor) - openspace.setPropertyValueSingle("Scene.GroundPanoPosition.Translation.Latitude", lat) - openspace.setPropertyValueSingle("Scene.GroundPanoPosition.Translation.Longitude", lon) - openspace.setPropertyValueSingle("Scene.GroundPanoPosition.Translation.Altitude", alt) - openspace.setPropertyValueSingle("Scene.GroundPanoPosition.Rotation.Globe", camera.Anchor) - openspace.setPropertyValueSingle("Scene.GroundPanoPosition.Rotation.Latitude", lat) - openspace.setPropertyValueSingle("Scene.GroundPanoPosition.Rotation.Longitude", lon) - openspace.setPropertyValueSingle("Scene.GroundPanoSphere.Renderable.Enabled", true) - openspace.setPropertyValueSingle("Scene.GroundPanoSphere.Renderable.Fade", 0.0) - openspace.setPropertyValueSingle("Scene.GroundPanoSphere.Renderable.Fade", 1.0, 1.0) -]] - -local setTextureCommand = function(scene) - local command = [[openspace.setPropertyValueSingle("Scene.GroundPanoSphere.Renderable.Texture", "]] - command = command .. textures - if (scene == "forest") then - command = command .. "1" - elseif (scene == "city") then - command = command .. "2" - elseif (scene == "backyard") then - command = command .. "3" - elseif (scene == "desert") then - command = command .. "4" - else - openspace.printDebug("unknown scene") - end - command = command .. [[.png")]] - command = command:gsub("\\", "\\\\") - return command -end - -local ShowForestPano = { - Identifier = "os.nightsky.ShowForestPano", - Name = "Show forest panorama", - Command = setTextureCommand("forest") .. showCommand, - Documentation = "Shows the panorama sphere with a forest scene", - GuiPath = "/Night Sky/Panoramas", - IsLocal = false -} - -local ShowCityPano = { - Identifier = "os.nightsky.ShowCityPano", - Name = "Show city panorama", - Command = setTextureCommand("city") .. showCommand, - Documentation = "Shows the panorama sphere with a city scene", - GuiPath = "/Night Sky/Panoramas", - IsLocal = false -} - -local ShowBackyardPano = { - Identifier = "os.nightsky.ShowBackyardPano", - Name = "Show backyard panorama", - Command = setTextureCommand("backyard") .. showCommand, - Documentation = "Shows the panorama sphere with a backyard scene", - GuiPath = "/Night Sky/Panoramas", - IsLocal = false -} - -local ShowDesertPano = { - Identifier = "os.nightsky.ShowDesertPano", - Name = "Show desert panorama", - Command = setTextureCommand("desert") .. showCommand, - Documentation = "Shows the panorama sphere with a desert scene", - GuiPath = "/Night Sky/Panoramas", - IsLocal = false -} - -local HideGroundPano = { - Identifier = "os.nightsky.HideGroundPano", - Name = "Hide ground panorama", - Command = [[ - openspace.fadeOut("Scene.GroundPanoSphere.Renderable") - ]], - Documentation = "Hides the panorama", - GuiPath = "/Night Sky/Panoramas", - IsLocal = false -} - - -asset.onInitialize(function() - openspace.addSceneGraphNode(GroundPanoPosition) - openspace.addSceneGraphNode(GroundPanoSphere) - openspace.action.registerAction(ShowForestPano) - openspace.action.registerAction(ShowCityPano) - openspace.action.registerAction(ShowBackyardPano) - openspace.action.registerAction(ShowDesertPano) - openspace.action.registerAction(HideGroundPano) -end) - -asset.onDeinitialize(function() - openspace.action.removeAction(HideGroundPano) - openspace.action.removeAction(ShowForestPano) - openspace.action.removeAction(ShowCityPano) - openspace.action.removeAction(ShowBackyardPano) - openspace.action.removeAction(ShowDesertPano) - openspace.removeSceneGraphNode(GroundPanoSphere) - openspace.removeSceneGraphNode(GroundPanoPosition) -end) - -asset.export(GroundPanoPosition) -asset.export(GroundPanoSphere) -asset.export("ShowForestPano", ShowForestPano.Identifier) -asset.export("ShowCityPano", ShowCityPano.Identifier) -asset.export("ShowBackyardPano", ShowBackyardPano.Identifier) -asset.export("ShowDesertPano", ShowDesertPano.Identifier) -asset.export("HideGroundPano", HideGroundPano.Identifier) diff --git a/data/assets/nightsky/light_pollution.asset b/data/assets/nightsky/light_pollution.asset index a8850826dd..e4f502c0c8 100644 --- a/data/assets/nightsky/light_pollution.asset +++ b/data/assets/nightsky/light_pollution.asset @@ -2,7 +2,7 @@ local earthAsset = asset.require("scene/solarsystem/planets/earth/earth") -local textures = asset.syncedResource({ +local textures = asset.resource({ Name = "Light Pollution Textures", Type = "HttpSynchronization", Identifier = "light_pollution_textures", @@ -33,7 +33,7 @@ local LightPollutionSphere = { } }, Renderable = { - Type = "RenderableSphere", + Type = "RenderableSphereImageLocal", Size = earthAsset.Earth.Renderable.Radii[1] * 1.05, Segments = 40, Opacity = 0.0, @@ -42,13 +42,15 @@ local LightPollutionSphere = { Orientation = "Inside", MirrorTexture = true, FadeOutThreshold = 1.00, - Background = true, RenderBinMode = "PostDeferredTransparent", Enabled = asset.enabled }, GUI = { Name = "Light Pollution Sphere", - Path = "/Other/Night Sky", + Description = [[A sphere used to simulate the effect of light pollution on + the night sky. Different pollution levels can be set using the provided actions. + These alter the opacity of the sphere.]], + Path = "/Night Sky/Effects", Hidden = false } } @@ -60,9 +62,9 @@ local SetLightPollutionLevel1 = { openspace.globebrowsing.setNodePositionFromCamera("LightPollutionSphere", true) openspace.setPropertyValueSingle("Scene.LightPollutionSphere.Renderable.Enabled", true) openspace.setPropertyValueSingle("Scene.LightPollutionSphere.Renderable.Fade", 1.0) - openspace.setPropertyValueSingle("Scene.MilkyWay.Renderable.Fade", 0.9, 0.3) + openspace.setPropertyValueSingle("Scene.AllSky_Visible.Renderable.Fade", 0.9, 0.3) openspace.setPropertyValueSingle("Scene.LightPollutionSphere.Renderable.Opacity", 0.01, 0.5) - openspace.setPropertyValueSingle("Scene.Stars.Renderable.ParametersOwner.MagnitudeExponent", 6.1, 0.3) + openspace.setPropertyValueSingle("Scene.Stars.Renderable.MagnitudeExponent", 6.1, 0.3) ]], Documentation = "Adds a light pollution sphere and lowers the level of the stars by 0.1", GuiPath = "/Night Sky/Light Pollution", @@ -76,9 +78,9 @@ local SetLightPollutionLevel2 = { openspace.globebrowsing.setNodePositionFromCamera("LightPollutionSphere", true) openspace.setPropertyValueSingle("Scene.LightPollutionSphere.Renderable.Enabled", true) openspace.setPropertyValueSingle("Scene.LightPollutionSphere.Renderable.Fade", 1.0) - openspace.setPropertyValueSingle("Scene.MilkyWay.Renderable.Fade", 0.8, 0.3) + openspace.setPropertyValueSingle("Scene.AllSky_Visible.Renderable.Fade", 0.8, 0.3) openspace.setPropertyValueSingle("Scene.LightPollutionSphere.Renderable.Opacity", 0.02, 0.5) - openspace.setPropertyValueSingle("Scene.Stars.Renderable.ParametersOwner.MagnitudeExponent", 6.0, 0.3) + openspace.setPropertyValueSingle("Scene.Stars.Renderable.MagnitudeExponent", 6.0, 0.3) ]], Documentation = "Adds a light pollution sphere and lowers the level of the stars by 0.2", GuiPath = "/Night Sky/Light Pollution", @@ -92,9 +94,9 @@ local SetLightPollutionLevel3 = { openspace.globebrowsing.setNodePositionFromCamera("LightPollutionSphere", true) openspace.setPropertyValueSingle("Scene.LightPollutionSphere.Renderable.Enabled", true) openspace.setPropertyValueSingle("Scene.LightPollutionSphere.Renderable.Fade", 1.0) - openspace.setPropertyValueSingle("Scene.MilkyWay.Renderable.Fade", 0.7, 0.3) + openspace.setPropertyValueSingle("Scene.AllSky_Visible.Renderable.Fade", 0.7, 0.3) openspace.setPropertyValueSingle("Scene.LightPollutionSphere.Renderable.Opacity", 0.03, 0.5) - openspace.setPropertyValueSingle("Scene.Stars.Renderable.ParametersOwner.MagnitudeExponent", 5.9, 0.3) + openspace.setPropertyValueSingle("Scene.Stars.Renderable.MagnitudeExponent", 5.9, 0.3) ]], Documentation = "Adds a light pollution sphere and lowers the level of the stars by 0.3", GuiPath = "/Night Sky/Light Pollution", @@ -108,9 +110,9 @@ local SetLightPollutionLevel4 = { openspace.globebrowsing.setNodePositionFromCamera("LightPollutionSphere", true) openspace.setPropertyValueSingle("Scene.LightPollutionSphere.Renderable.Enabled", true) openspace.setPropertyValueSingle("Scene.LightPollutionSphere.Renderable.Fade", 1.0) - openspace.setPropertyValueSingle("Scene.MilkyWay.Renderable.Fade", 0.6, 0.3) + openspace.setPropertyValueSingle("Scene.AllSky_Visible.Renderable.Fade", 0.6, 0.3) openspace.setPropertyValueSingle("Scene.LightPollutionSphere.Renderable.Opacity", 0.04, 0.5) - openspace.setPropertyValueSingle("Scene.Stars.Renderable.ParametersOwner.MagnitudeExponent", 5.8, 0.3) + openspace.setPropertyValueSingle("Scene.Stars.Renderable.MagnitudeExponent", 5.8, 0.3) ]], Documentation = "Adds a light pollution sphere and lowers the level of the stars by 0.4", GuiPath = "/Night Sky/Light Pollution", @@ -124,9 +126,9 @@ local SetLightPollutionLevel5 = { openspace.globebrowsing.setNodePositionFromCamera("LightPollutionSphere", true) openspace.setPropertyValueSingle("Scene.LightPollutionSphere.Renderable.Enabled", true) openspace.setPropertyValueSingle("Scene.LightPollutionSphere.Renderable.Fade", 1.0) - openspace.setPropertyValueSingle("Scene.MilkyWay.Renderable.Fade", 0.5, 0.3) + openspace.setPropertyValueSingle("Scene.AllSky_Visible.Renderable.Fade", 0.5, 0.3) openspace.setPropertyValueSingle("Scene.LightPollutionSphere.Renderable.Opacity", 0.05, 0.5) - openspace.setPropertyValueSingle("Scene.Stars.Renderable.ParametersOwner.MagnitudeExponent", 5.8, 0.4) + openspace.setPropertyValueSingle("Scene.Stars.Renderable.MagnitudeExponent", 5.8, 0.4) ]], Documentation = "Adds a light pollution sphere and lowers the level of the stars by 0.5", GuiPath = "/Night Sky/Light Pollution", @@ -140,9 +142,9 @@ local SetLightPollutionLevel6 = { openspace.globebrowsing.setNodePositionFromCamera("LightPollutionSphere", true) openspace.setPropertyValueSingle("Scene.LightPollutionSphere.Renderable.Enabled", true) openspace.setPropertyValueSingle("Scene.LightPollutionSphere.Renderable.Fade", 1.0) - openspace.setPropertyValueSingle("Scene.MilkyWay.Renderable.Fade", 0.4, 0.3) + openspace.setPropertyValueSingle("Scene.AllSky_Visible.Renderable.Fade", 0.4, 0.3) openspace.setPropertyValueSingle("Scene.LightPollutionSphere.Renderable.Opacity", 0.06, 0.5) - openspace.setPropertyValueSingle("Scene.Stars.Renderable.ParametersOwner.MagnitudeExponent", 5.7, 0.4) + openspace.setPropertyValueSingle("Scene.Stars.Renderable.MagnitudeExponent", 5.7, 0.4) ]], Documentation = "Adds a light pollution sphere and lowers the level of the stars by 0.6", GuiPath = "/Night Sky/Light Pollution", @@ -156,9 +158,9 @@ local SetLightPollutionLevel7 = { openspace.globebrowsing.setNodePositionFromCamera("LightPollutionSphere", true) openspace.setPropertyValueSingle("Scene.LightPollutionSphere.Renderable.Enabled", true) openspace.setPropertyValueSingle("Scene.LightPollutionSphere.Renderable.Fade", 1.0) - openspace.setPropertyValueSingle("Scene.MilkyWay.Renderable.Fade", 0.3, 0.3) + openspace.setPropertyValueSingle("Scene.AllSky_Visible.Renderable.Fade", 0.3, 0.3) openspace.setPropertyValueSingle("Scene.LightPollutionSphere.Renderable.Opacity", 0.07, 0.5) - openspace.setPropertyValueSingle("Scene.Stars.Renderable.ParametersOwner.MagnitudeExponent", 5.6, 0.4) + openspace.setPropertyValueSingle("Scene.Stars.Renderable.MagnitudeExponent", 5.6, 0.4) ]], Documentation = "Adds a light pollution sphere and lowers the level of the stars by 0.7", GuiPath = "/Night Sky/Light Pollution", @@ -172,9 +174,9 @@ local SetLightPollutionLevel8 = { openspace.globebrowsing.setNodePositionFromCamera("LightPollutionSphere", true) openspace.setPropertyValueSingle("Scene.LightPollutionSphere.Renderable.Enabled", true) openspace.setPropertyValueSingle("Scene.LightPollutionSphere.Renderable.Fade", 1.0) - openspace.setPropertyValueSingle("Scene.MilkyWay.Renderable.Fade", 0.2, 0.3) + openspace.setPropertyValueSingle("Scene.AllSky_Visible.Renderable.Fade", 0.2, 0.3) openspace.setPropertyValueSingle("Scene.LightPollutionSphere.Renderable.Opacity", 0.08, 0.5) - openspace.setPropertyValueSingle("Scene.Stars.Renderable.ParametersOwner.MagnitudeExponent", 5.5, 0.4) + openspace.setPropertyValueSingle("Scene.Stars.Renderable.MagnitudeExponent", 5.5, 0.4) ]], Documentation = "Adds a light pollution sphere and lowers the level of the stars by 0.8", GuiPath = "/Night Sky/Light Pollution", @@ -189,8 +191,8 @@ local SetLightPollutionLevel9 = { openspace.setPropertyValueSingle("Scene.LightPollutionSphere.Renderable.Enabled", true) openspace.setPropertyValueSingle("Scene.LightPollutionSphere.Renderable.Fade", 1.0) openspace.setPropertyValueSingle("Scene.LightPollutionSphere.Renderable.Opacity", 0.09, 0.5) - openspace.setPropertyValueSingle("Scene.MilkyWay.Renderable.Fade", 0.1, 0.3) - openspace.setPropertyValueSingle("Scene.Stars.Renderable.ParametersOwner.MagnitudeExponent", 5.4, 0.4) + openspace.setPropertyValueSingle("Scene.AllSky_Visible.Renderable.Fade", 0.1, 0.3) + openspace.setPropertyValueSingle("Scene.Stars.Renderable.MagnitudeExponent", 5.4, 0.4) ]], Documentation = "Adds a light pollution sphere and lowers the level of the stars by 0.9", GuiPath = "/Night Sky/Light Pollution", @@ -202,8 +204,8 @@ local UndoLightPollution = { Name = "Undo light pollution", Command = [[ openspace.setPropertyValueSingle("Scene.LightPollutionSphere.Renderable.Fade", 0.0, 0.3) - openspace.setPropertyValueSingle("Scene.Stars.Renderable.ParametersOwner.MagnitudeExponent", 6.2, 0.3) - openspace.setPropertyValueSingle("Scene.MilkyWay.Renderable.Fade", 1.0, 0.3) + openspace.setPropertyValueSingle("Scene.Stars.Renderable.MagnitudeExponent", 6.2, 0.3) + openspace.setPropertyValueSingle("Scene.AllSky_Visible.Renderable.Fade", 1.0, 0.3) ]], Documentation = "Hides the light pollution sphere and resets the stars", GuiPath = "/Night Sky/Light Pollution", @@ -250,3 +252,15 @@ asset.export("SetLightPollutionLevel7", SetLightPollutionLevel7.Identifier) asset.export("SetLightPollutionLevel8", SetLightPollutionLevel8.Identifier) asset.export("SetLightPollutionLevel9", SetLightPollutionLevel9.Identifier) asset.export("UndoLightPollution", UndoLightPollution.Identifier) + + + +asset.meta = { + Name = "Light Pollution", + Description = [[Includes a sphere used to simulate the effect of light pollution on + the night sky, and actions to set the desired level of pollution (with a scale + from 1-9).]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/nightsky/meridian.asset b/data/assets/nightsky/meridian.asset index 9497c47c12..df007e1367 100644 --- a/data/assets/nightsky/meridian.asset +++ b/data/assets/nightsky/meridian.asset @@ -24,7 +24,7 @@ local MeridianPosition = { }, GUI = { Name = "Local Meridian Position", - Path = "/Other/Lines", + Path = "/Night Sky/Coordinate Systems/Altitude-Azimuth", Hidden = true } } @@ -41,16 +41,16 @@ local MeridianPlane = { Renderable = { Type = "RenderableRadialGrid", Opacity = 0.8, - Color = { 1.0, 1.0, 1.0 }, - LineWidth = 3.0, + Color = { 0.4, 0.8, 0.4 }, + LineWidth = 6.0, GridSegments = { 1, 1 }, - Radii = { 0.5, 0.5 }, Enabled = asset.enabled, RenderBinMode = "PostDeferredTransparent" }, GUI = { Name = "Local Meridian", - Path = "/Other/Lines" + Description = [[A line representation of the Local Meridian]], + Path = "/Night Sky/Coordinate Systems/Altitude-Azimuth" } } @@ -80,7 +80,6 @@ local HideMeridian = { IsLocal = false } - local ToggleMeridian = { Identifier = "os.nightsky.ToggleMeridian", Name = "Toggle local meridian", @@ -118,3 +117,14 @@ asset.export(MeridianPlane) asset.export("ShowMeridian", ShowMeridian.Identifier) asset.export("HideMeridian", HideMeridian.Identifier) asset.export("ToggleMeridian", ToggleMeridian.Identifier) + + + +asset.meta = { + Name = "Meridian", + Description = [[A line representation of the Local Meridian, including actions + to toggle, hide and show it.]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/nightsky/nightsky.asset b/data/assets/nightsky/nightsky.asset index cac8f1d380..b2f428af7b 100644 --- a/data/assets/nightsky/nightsky.asset +++ b/data/assets/nightsky/nightsky.asset @@ -3,10 +3,19 @@ asset.require("./cardinal_directions", false) asset.require("./ecliptic_band", false) asset.require("./equatorial_band", false) asset.require("./galactic_band", false) -asset.require("./ground_panoramas", false) asset.require("./meridian", false) asset.require("./light_pollution", false) asset.require("./zenith", false) asset.require("./planets", false) asset.require("actions/nightsky/camera", false) asset.require("actions/nightsky/daytime", false) + + + +asset.meta = { + Name = "Night Sky Assets", + Description = [[A collection of assets useful for studying the night sky.]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/nightsky/planets.asset b/data/assets/nightsky/planets.asset index 79f649cd51..8239d168e8 100644 --- a/data/assets/nightsky/planets.asset +++ b/data/assets/nightsky/planets.asset @@ -6,7 +6,7 @@ local saturn = asset.require("scene/solarsystem/planets/saturn/transforms") -local textures = asset.syncedResource({ +local textures = asset.resource({ Name = "Night Sky Planet Textures", Type = "HttpSynchronization", Identifier = "night_sky_planet_textures", @@ -30,7 +30,10 @@ local Mercury = { Tag = { "nightsky_billboard" }, GUI = { Name = "Night Sky Mercury", - Path = "/Other/Night Sky/Planets" + Description = [[A night sky version of the planet Mercury, making it visible as + a bright object on the sky (textured representation).]], + Path = "/Night Sky/Planets", + OrderingNumber = 1 } } @@ -50,7 +53,10 @@ local Venus = { Tag = { "nightsky_billboard" }, GUI = { Name = "Night Sky Venus", - Path = "/Other/Night Sky/Planets" + Description = [[A night sky version of the planet Venus, making it visible as + a bright object on the sky (textured representation).]], + Path = "/Night Sky/Planets", + OrderingNumber = 2 } } @@ -70,7 +76,8 @@ local Mars = { Tag = { "nightsky_billboard" }, GUI = { Name = "Night Sky Mars", - Path = "/Other/Night Sky/Planets" + Path = "/Night Sky/Planets", + OrderingNumber = 4 } } @@ -90,7 +97,10 @@ local Jupiter = { Tag = { "nightsky_billboard" }, GUI = { Name = "Night Sky Jupiter", - Path = "/Other/Night Sky/Planets" + Description = [[A night sky version of the planet Jupiter, making it visible as + a bright object on the sky (textured representation).]], + Path = "/Night Sky/Planets", + OrderingNumber = 5 } } @@ -110,7 +120,10 @@ local Saturn = { Tag = { "nightsky_billboard" }, GUI = { Name = "Night Sky Saturn", - Path = "/Other/Night Sky/Planets" + Description = [[A night sky version of the planet Saturn, making it visible as + a bright object on the sky (textured representation).]], + Path = "/Night Sky/Planets", + OrderingNumber = 6 } } @@ -146,7 +159,6 @@ local HideNightSkyPlanets = { IsLocal = false } - local ToggleNightSkyPlanets = { Identifier = "os.nightsky.ToggleNightSkyPlanets", Name = "Toggle night sky planets", @@ -156,7 +168,7 @@ local ToggleNightSkyPlanets = { openspace.toggleFade("Scene.NightSkyMars.Renderable") openspace.toggleFade("Scene.NightSkyJupiter.Renderable") openspace.toggleFade("Scene.NightSkySaturn.Renderable") - local scale = openspace.getPropertyValue("Scene.Moon.Scale.Scale") + local scale = openspace.propertyValue("Scene.Moon.Scale.Scale") if (scale > 1) then openspace.setPropertyValueSingle("Scene.Moon.Scale.Scale", 1.0) else @@ -168,6 +180,7 @@ local ToggleNightSkyPlanets = { IsLocal = false } + asset.onInitialize(function() openspace.addSceneGraphNode(Mercury) openspace.addSceneGraphNode(Venus) @@ -198,3 +211,14 @@ asset.export(Saturn) asset.export("ShowNightSkyPlanets", ShowNightSkyPlanets.Identifier) asset.export("HideNightSkyPlanets", HideNightSkyPlanets.Identifier) asset.export("ToggleNightSkyPlanets", ToggleNightSkyPlanets.Identifier) + + + +asset.meta = { + Name = "Night Sky Planets", + Description = [[A collection of night sky versions of the planets Mercury, Venus, + Mars, Jupiter and Saturn, including actions to toggle, hide and show them.]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/nightsky/zenith.asset b/data/assets/nightsky/zenith.asset index 0170bcc5ec..1104c34124 100644 --- a/data/assets/nightsky/zenith.asset +++ b/data/assets/nightsky/zenith.asset @@ -2,7 +2,7 @@ local earthAsset = asset.require("scene/solarsystem/planets/earth/earth") -local textures = asset.syncedResource({ +local textures = asset.resource({ Name = "Zenith Textures", Type = "HttpSynchronization", Identifier = "zenith_textures", @@ -33,7 +33,7 @@ local ZenithPosition = { }, GUI = { Name = "Zenith Position", - Path = "/Other/Points", + Path = "/Night Sky/Coordinate Systems/Altitude-Azimuth", Hidden = true } } @@ -58,7 +58,10 @@ local ZenithDot = { }, GUI = { Name = "Zenith", - Path = "/Other/Points" + Description = [[A dot representation of the Local Zenith, based on the camera's + current position on a planet. Use the provided show or toggle action to move it + between planets. The default is Earth.]], + Path = "/Night Sky/Coordinate Systems/Altitude-Azimuth" } } @@ -103,6 +106,7 @@ local ToggleZenith = { IsLocal = false } + asset.onInitialize(function() openspace.addSceneGraphNode(ZenithPosition) openspace.addSceneGraphNode(ZenithDot) @@ -124,3 +128,14 @@ asset.export(ZenithDot) asset.export("ShowZenith", ShowZenith.Identifier) asset.export("HideZenith", HideZenith.Identifier) asset.export("ToggleZenith", ToggleZenith.Identifier) + + + +asset.meta = { + Name = "Zenith", + Description = [[A dot representation of the Local Zenith (based on the current + camera positon), including actions to toggle, hide and show it.]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/digitaluniverse/2dF.asset b/data/assets/scene/digitaluniverse/2dF.asset index ab705d3667..0297cc93db 100644 --- a/data/assets/scene/digitaluniverse/2dF.asset +++ b/data/assets/scene/digitaluniverse/2dF.asset @@ -1,51 +1,53 @@ -local textures = asset.syncedResource({ - Name = "2dF Textures", +local textures = asset.resource({ + Name = "Point Textures", Type = "HttpSynchronization", - Identifier = "digitaluniverse_2dF_textures", - Version = 2 + Identifier = "digitaluniverse_point_textures", + Version = 1 }) -local speck = asset.syncedResource({ +local speck = asset.resource({ Name = "2dF Speck Files", Type = "HttpSynchronization", Identifier = "digitaluniverse_2dF_speck", - Version = 2 + Version = 3 }) local Object = { Identifier = "2dF", Renderable = { - Type = "RenderableBillboardsCloud", + Type = "RenderablePointCloud", Enabled = false, - Color = { 1.0, 1.0, 1.0 }, Opacity = 1.0, File = speck .. "2dF.speck", Unit = "Mpc", - Texture = textures .. "point3A.png", - ColorMap = speck .. "2dF.cmap", - ColorOption = { "redshift", "proximity" }, - ColorRange = { { 0.0, 0.075 }, { 1.0, 25.0 } }, - ScaleFactor = 520.0, - BillboardMinMaxSize = { 0.0, 4.7 }, - EnablePixelSizeControl = true + Texture = { + File = textures .. "point3A.png", + }, + Coloring = { + ColorMapping = { + File = speck .. "2dF.cmap", + ParameterOptions = { + { Key = "proximity", Range = { 1.0, 25.0 } }, + { Key = "redshift", Range = { 0.0, 0.075 } } + } + } + }, + SizeSettings = { + ScaleExponent = 22.6, + MaxSize = 0.2, + EnableMaxSizeControl = true + } }, GUI = { Name = "2dF Galaxies", - Path = "/Universe/Galaxies", - Description = [[Census 229,293 galaxies. DU Version 1.7.
The Two-degree Field - (2dF) Survey was a project designed to map portions of the extragalactic universe. The - 2dF instrument was mounted on the 3.9-meter (12.8-foot) Anglo-Australian Telescope - (AAT), located 450 km (280 miles) northwest of Sydney. The telescope has a two-degree - field of view on the sky, enabling large parts of the sky to be observed at one time. - For each pointing of the telescope, the instrument can acquire up to 400 spectra - simultaneously via optical fibers that feed into two spectrographs. Each spectrograph - sees light that is between 350 nm and 800 nm, spanning the visible spectrum.

- The 2dF survey has three main components: the North Galactic Pole strip, the South - Galactic Pole strip, and the random fields that surround the South Galactic Pole - strip. The galaxy survey is composed of about 230,000 galaxies with brightness and - redshift measurements. (Description from URL)

Data Reference: 2dF Galaxy - Redshift Survey (2dFGRS Team, 1998-2003)]] + Path = "/Universe/Deep Sky Surveys", + Description = [[The Two-degree Field (2dF) Survey was a project designed to map + portions of the extragalactic universe. The 2dF survey has three main components: + the North Galactic Pole strip, the South Galactic Pole strip, and the random fields + that surround the South Galactic Pole strip. Colors: Orange galaxies show dense + regions of galaxies, aqua galaxies are areas of intermediate density, and green + galaxies are areas of lower density. Census: 229,293 galaxies.]] } } @@ -64,8 +66,7 @@ asset.export(Object) asset.meta = { Name = "2dF Galaxies", - Version = "2.1", - Description = "Digital Universe asset for the The Two-degree Field (2dF) Survey", + Description = Object.GUI.Description, Author = "Brian Abbott (AMNH), Eric Gawiser (Rutgers U)", URL = "https://www.amnh.org/research/hayden-planetarium/digital-universe", License = "AMNH Digital Universe" diff --git a/data/assets/scene/digitaluniverse/2mass.asset b/data/assets/scene/digitaluniverse/2mass.asset index 71506f0dd2..f05c1d84d0 100644 --- a/data/assets/scene/digitaluniverse/2mass.asset +++ b/data/assets/scene/digitaluniverse/2mass.asset @@ -1,47 +1,55 @@ -local textures = asset.syncedResource({ - Name = "2MASS Textures", +local textures = asset.resource({ + Name = "Point Textures", Type = "HttpSynchronization", - Identifier = "digitaluniverse_2mass_textures", - Version = 2 + Identifier = "digitaluniverse_point_textures", + Version = 1 }) -local speck = asset.syncedResource({ +local speck = asset.resource({ Name = "2MASS Speck Files", Type = "HttpSynchronization", Identifier = "digitaluniverse_2mass_speck", - Version = 1 + Version = 2 }) local Object = { Identifier = "2MASS", Renderable = { - Type = "RenderableBillboardsCloud", + Type = "RenderablePointCloud", Enabled = false, - Color = { 1.0, 0.4, 0.2 }, Opacity = 1.0, File = speck .. "2MASS.speck", Unit = "Mpc", - Texture = textures .. "point3A.png", - ColorMap = speck .. "lss.cmap", - ColorOption = { "redshift", "prox5Mpc" }, - ColorRange = { { 0.0, 0.075 }, { 1.0, 50.0 } }, - CorrectionSizeEndDistance = 20.6, - CorrectionSizeFactor = 15.0, - ScaleFactor = 510.78, - BillboardMinMaxSize = { 0.0, 11.15 }, - EnablePixelSizeControl = true + Texture = { + File = textures .. "point3A.png", + }, + Coloring = { + FixedColor = { 1.0, 0.4, 0.2 }, + ColorMapping = { + File = speck .. "lss.cmap", + ParameterOptions = { + { Key = "prox5Mpc", Range = { 1.0, 50.0 } }, + { Key = "redshift", Range = { 0.0, 0.075 } } + } + } + }, + SizeSettings = { + ScaleExponent = 22.2, + MaxSize = 0.44, + EnableMaxSizeControl = true + } }, GUI = { Name = "2MASS Galaxies", - Path = "/Universe/Galaxies", + Path = "/Universe/Nearby Surveys", Description = [[The Two Micron All-Sky Survey (2MASS) is an infrared survey of the - sky published in 2003. Because it is looking in the infrared, and this is a composite - of the 2MASS point-source catalog, most of the light from this survey is starlight. In - visible light, clouds of gas and dust obscure our view. However, in infrared, the - longer wavelengths of light can penetrate these clouds without being scattered, - thereby revealing stars that would normally be hidden to our eye. - (Description from URL)]] + sky published in 2003. Taken from two telescopes in Arizona and Chile, it offers an + all-sky view of galaxies beyond the Milky Way. Because it is infrared, the light + detected is mostly from cool stars within the galaxies, which comprises the majority + of mass in a galaxy. Colors: Orange galaxies show dense regions of galaxies, aqua + galaxies are areas of intermediate density, and green galaxies are areas of lower + density. Census: 43,533 galaxies.]] } } @@ -60,8 +68,7 @@ asset.export(Object) asset.meta = { Name = "2MASS Galaxies", - Version = "1.1", - Description = "Digital Universe asset for the Two Micron All-Sky Survey (2MASS) survey", + Description = Object.GUI.Description, Author = "Brian Abbott (AMNH)", URL = "https://www.amnh.org/research/hayden-planetarium/digital-universe", License = "AMNH Digital Universe" diff --git a/data/assets/scene/digitaluniverse/6dF.asset b/data/assets/scene/digitaluniverse/6dF.asset index 4d7ead66e5..48039ecc6e 100644 --- a/data/assets/scene/digitaluniverse/6dF.asset +++ b/data/assets/scene/digitaluniverse/6dF.asset @@ -1,49 +1,54 @@ -local textures = asset.syncedResource({ - Name = "6dF Textures", +local textures = asset.resource({ + Name = "Point Textures", Type = "HttpSynchronization", - Identifier = "digitaluniverse_6dF_textures", - Version = 2 + Identifier = "digitaluniverse_point_textures", + Version = 1 }) -local speck = asset.syncedResource({ +local speck = asset.resource({ Name = "6dF Speck Files", Type = "HttpSynchronization", Identifier = "digitaluniverse_6dF_speck", - Version = 2 + Version = 3 }) local Object = { Identifier = "6dF", Renderable = { - Type = "RenderableBillboardsCloud", + Type = "RenderablePointCloud", Enabled = false, - Color = { 1.0, 1.0, 0.0 }, Opacity = 1.0, File = speck .. "6dF.speck", Unit = "Mpc", - Texture = textures .. "point3A.png", - ColorMap = speck .. "6dF.cmap", - ColorOption = { "redshift", "proximity" }, - ColorRange = { { 0.0, 0.075 }, { 1.0, 10.0 } }, - ScaleFactor = 534.0, - BillboardMinMaxSize = { 0.0, 9.0 }, - EnablePixelSizeControl = true + Texture = { + File = textures .. "point3A.png", + }, + Coloring = { + FixedColor = { 1.0, 1.0, 0.0 }, + ColorMapping = { + File = speck .. "6dF.cmap", + ParameterOptions = { + { Key = "proximity", Range = { 1.0, 10.0 } }, + { Key = "redshift", Range = { 0.0, 0.075 } } + } + } + }, + SizeSettings = { + ScaleExponent = 22.5, + MaxSize = 0.2, + EnableMaxSizeControl = true + } }, GUI = { Name = "6dF Galaxies", - Path = "/Universe/Galaxies", - Description = [[Census 109,569 galaxies. DU Version 1.4.
The Six-degree Field - (6dF) Galaxy Survey mapped nearly half the sky from the Anglo-Australian - Observatory. Unlike previous datasets, this one is not all-sky, meaning there - are patches of sky that are not covered. In this case, the entire northern - hemisphere has no coverage at all. This catalog overlaps with the Tully - dataset, and there is a noticeable difference in the quality of these - datasets. Tully is much tighter and the structure is more apparent, while the - 6dF data are more spread out. This is because of local motions within galaxy - clusters have not been corrected in these data. (Description from URL) -

Data Reference: The 6dF Galaxy Survey Redshift Catalogue - (Jones+, 2009)]] + Path = "/Universe/Deep Sky Surveys", + Description = [[The Six-degree Field (6dF) Galaxy Survey mapped nearly half the sky + from the Anglo-Australian Observatory. Because it's a southern hemisphere survey, + there is no coverage in these data for the northern hemisphere's sky. As with all + galaxy surveys, the organge galaxies are in relatively dense areas, the green + galaxies are in relatively sparse areas, and the aqua galaxies are between. Census: + 109,569 galaxies.]] } } @@ -62,8 +67,7 @@ asset.export(Object) asset.meta = { Name = "6dF Galaxies", - Version = "2.1", - Description = "Digital Universe asset for The Six-degree Field (6dF) Galaxy Survey", + Description = Object.GUI.Description, Author = "Brian Abbott (AMNH)", URL = "https://www.amnh.org/research/hayden-planetarium/digital-universe", License = "AMNH Digital Universe" diff --git a/data/assets/scene/digitaluniverse/abell.asset b/data/assets/scene/digitaluniverse/abell.asset index fbbe0285a9..a7282aaac8 100644 --- a/data/assets/scene/digitaluniverse/abell.asset +++ b/data/assets/scene/digitaluniverse/abell.asset @@ -1,65 +1,63 @@ -local textures = asset.syncedResource({ - Name = "Abell Textures", +local transforms = asset.require("./transforms") + + + +local textures = asset.resource({ + Name = "Point Textures", Type = "HttpSynchronization", - Identifier = "digitaluniverse_abell_textures", - Version = 2 + Identifier = "digitaluniverse_point_textures", + Version = 1 }) -local speck = asset.syncedResource({ +local speck = asset.resource({ Name = "Abell Speck Files", Type = "HttpSynchronization", Identifier = "digitaluniverse_abell_speck", - Version = 2 + Version = 3 }) -local TransformMatrix = { - -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 -} - local Object = { Identifier = "Abell", Renderable = { - Type = "RenderableBillboardsCloud", + Type = "RenderablePointCloud", Enabled = false, + File = speck .. "abell.speck", Labels = { File = speck .. "abell.label", Opacity = 1.0, Color = { 0.0, 0.8, 0.0 }, - Size = 22, + Size = 21.2, MinMaxSize = { 10, 12 }, Unit = "Mpc", - TransformationMatrix = TransformMatrix + TransformationMatrix = transforms.Supergalactic }, - Color = { 1.0, 0.4, 0.2 }, Opacity = 1.0, - --ColorMap = speck .. "abell.cmap", - File = speck .. "abell.speck", - Texture = textures .. "point3A.png", + Coloring = { + FixedColor = { 1.0, 0.4, 0.2 }, + --ColorMap = speck .. "abell.cmap", -- TODO: Decide whether to add + }, + Texture = { + File = textures .. "point3A.png", + }, Unit = "Mpc", - TransformationMatrix = TransformMatrix, - ScaleFactor = 520.0, - BillboardMinMaxSize = { 0.0, 7.0 }, - EnablePixelSizeControl = true + TransformationMatrix = transforms.Supergalactic, + SizeSettings = { + ScaleExponent = 23.2, + MaxSize = 0.27, + EnableMaxSizeControl = true + } }, GUI = { Name = "Abell Galaxy Clusters", - Path = "/Universe/Galaxies", - Description = [[Census 2,246 galaxies. DU Version 1.4.
The Abell catalog - includes all the nearby, and not so nearby, galaxy clusters. The northern - hemisphere survey, published in 1958, was compiled by George Abell (1927-1983) - from the Palomar Sky Survey plates. A subsequent southern hemisphere catalog - was published posthumously in 1989. Further analysis by Brent Tully determined - their distance and three-dimensional distribution. Each point in this data set - represents a cluster of tens to hundreds (possibly even thousands) of - galaxies, similar to the Virgo or Fornax Clusters. You will notice some points - are assigned colors while most are gray. The data set also has an arbitrary - cut-off for completeness, resulting in the rectangular shape of the data set. - (Description from URL)

Data Reference: Abell Clusters of Rich - Galaxies, Brent Tully (U Hawaii), Stuart Levy (NCSA/UIUC)]] + Path = "/Universe/Deep Sky Surveys", + Description = [[The Abell catalog includes all the nearby, and not so nearby, galaxy + clusters. The northern hemisphere survey, published in 1958, was compiled by George + Abell from the Palomar Sky Survey plates. A subsequent southern hemisphere catalog + was published posthumously in 1989. Each point in this data set represents a + cluster of tens to hundreds (possibly even thousands) of galaxies, similar to the + Virgo or Fornax Clusters. The data have an arbitrary cut-off for completeness, + resulting in the rectangular shape of the data set. Census: 2,246 galaxy clusters.]] } } @@ -78,8 +76,7 @@ asset.export(Object) asset.meta = { Name = "Abell Galaxy Clusters", - Version = "2.1", - Description = "Digital Universe asset for The Abell catalog", + Description = Object.GUI.Description, Author = "Stuart Levy (NCSA/UIUC), Brian Abbott (AMNH)", URL = "https://www.amnh.org/research/hayden-planetarium/digital-universe", License = "AMNH Digital Universe" diff --git a/data/assets/scene/digitaluniverse/allsky_hydrogenalpha.asset b/data/assets/scene/digitaluniverse/allsky_hydrogenalpha.asset new file mode 100644 index 0000000000..caf7cfde10 --- /dev/null +++ b/data/assets/scene/digitaluniverse/allsky_hydrogenalpha.asset @@ -0,0 +1,67 @@ +local textures = asset.resource({ + Name = "Multiwavelength Milky Way Textures", + Type = "HttpSynchronization", + Identifier = "digitaluniverse_multiwavelength_milkyway_textures", + Version = 1 +}) + + +local Object = { + Identifier = "AllSky_HAlpha", + Transform = { + Rotation = { + Type = "StaticRotation", + Rotation = { 0, 0, math.pi } + } + }, + Renderable = { + Type = "RenderableSphereImageLocal", + Enabled = false, + Size = 9.2E21, + Segments = 40, + Opacity = 0.4, + Texture = textures .. "mwHalpha-f.png", + Orientation = "Inside", + MirrorTexture = true, + FadeOutThreshold = 0.025 + }, + GUI = { + Name = "Hydrogen Alpha", + Path = "/Milky Way/All Sky Images", + Description = [[Hydrogen-alpha is a term that describes light from the ground state of + the hydrogen atom. When an electron in an atom moves from one energy level to a + higher one, we say the atom is excited. When the electron moves back down to the + lower energy level, light is released at a wavelength commensurate with the energy + between the two levels. For the H-alpha line, this energy difference translates to a + wavelength in the extreme red end of the visible spectrum. This survey of the sky is + a snapshot of light from this wavelength. + + One distinctive element of the sky at this wavelength is the presence of large, + spherical bubbles surrounding hot stars. Many nebulae and star-forming regions are + visible, including the Great Nebula of Orion. We also see that galaxies emit H-alpha + light, including the Andromeda Galaxy and the faint M33, the large face-on spiral in + Triangulum, and the Large and Small Magellanic Clouds (LMC and SMC) in the southern + sky. Census: 1 all-sky image.]] + } +} + + +asset.onInitialize(function() + openspace.addSceneGraphNode(Object) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Object) +end) + +asset.export(Object) + + + +asset.meta = { + Name = "Milky Way All-Sky Hydrogen Alpha", + Description = Object.GUI.Description, + Author = "Brian Abbott, Carter Emmart (AMNH), OpenSpace Team", + URL = "https://www.amnh.org/research/hayden-planetarium/digital-universe", + License = "AMNH Digital Universe" +} diff --git a/data/assets/scene/digitaluniverse/allsky_visible.asset b/data/assets/scene/digitaluniverse/allsky_visible.asset new file mode 100644 index 0000000000..2a40c61c6e --- /dev/null +++ b/data/assets/scene/digitaluniverse/allsky_visible.asset @@ -0,0 +1,61 @@ +local textures = asset.resource({ + Name = "Milky Way All Sky Textures", + Type = "HttpSynchronization", + Identifier = "milkyway_textures", + Version = 2 +}) + + +local Object = { + Identifier = "AllSky_Visible", + Transform = { + Rotation = { + Type = "StaticRotation", + Rotation = { 0, 0, math.pi } + } + }, + Renderable = { + Type = "RenderableSphereImageLocal", + Size = 9.2E21, + Segments = 40, + Opacity = 0.25, + Texture = textures .. "DarkUniverse_mellinger_4k.jpg", + Orientation = "Inside", + MirrorTexture = true, + FadeOutThreshold = 0.0015, + DimInAtmosphere = true, + RenderBinMode = "Background", + DisableDepth = true + }, + Tag = { "daytime_hidden" }, + GUI = { + Name = "Visible Milky Way", + Path = "/Milky Way/All Sky Images", + Description = [[An all-sky image of the night sky as our eye sees it (in the visible + spectrum), with the stars removed. You will see the brightest part of the Galaxy if + you look toward Galactic center toward the constellations Scorpius and Sagittarius. + This bright haze is the light from millions of stars; the dark lanes are foreground + dust clouds, obscuring our view of the stars behind them. Census: 1 all-sky image.]] + } +} + + +asset.onInitialize(function() + openspace.addSceneGraphNode(Object) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Object) +end) + +asset.export(Object) + + + +asset.meta = { + Name = "Milky Way All-Sky Visible Light", + Description = Object.GUI.Description, + Author = "Brian Abbott, Carter Emmart (AMNH), OpenSpace Team", + URL = "https://www.amnh.org/research/hayden-planetarium/digital-universe", + License = "AMNH Digital Universe" +} diff --git a/data/assets/scene/digitaluniverse/alternatestarlabels.asset b/data/assets/scene/digitaluniverse/alternatestarlabels.asset index d6237a0330..04e2dff18c 100644 --- a/data/assets/scene/digitaluniverse/alternatestarlabels.asset +++ b/data/assets/scene/digitaluniverse/alternatestarlabels.asset @@ -1,38 +1,33 @@ -local speck = asset.syncedResource({ +local speck = asset.resource({ Name = "Alternate Star Labels Speck Files", Type = "HttpSynchronization", Identifier = "digitaluniverse_alternatestarlabels_speck", - Version = 2 + Version = 3 }) local Object = { Identifier = "StarLabelsAlternate", Renderable = { - Type = "RenderableBillboardsCloud", + Type = "RenderablePointCloud", Enabled = false, Labels = { Enabled = true, - File = speck .. "altstarlabels.label", + File = speck .. "stars_alt_labels.label", Color = { 0.4, 0.4, 0.4 }, Size = 14.7, - MinMaxSize = { 6, 20 }, + MinMaxSize = { 15, 20 }, Unit = "pc" }, - Color = { 1.0, 1.0, 1.0 }, Opacity = 0.65, Unit = "pc" }, GUI = { Name = "Stars Labels - Alternate", Path = "/Milky Way/Stars", - Description = [[Census 3,395 star names. DU Version 1.8.
The main star data - identify the accepted IAU star names for the brightest stars. However, astronomers - have long cataloged thousands of stars beyond the brightest ones we see. Several - attempts over thousands of years to name all the visible stars have led to two - main catalogs: Johann Bayer's Catalog from 1603 and John Flamsteed's Catalog - published in 1725. (Description from URL)

Data Reference: Various - sources]] + Description = [[Alternate star labels for the stars. Priority goes to Bayer IDs + (Greek designations, like Alpha Orionis), then to Flamsteed numbers (like 1 + Orionis).]] } } @@ -50,10 +45,9 @@ asset.export(Object) asset.meta = { - Name = "Stars Labels - Alternate", - Version = "1.1", - Description = "Digital Universe asset for alternate start labels", - Author = "Brian Abbott (AMNH)", + Name = "Alternative Labels for the Stars", + Description = Object.GUI.Description, + Author = "Zack Reeves, Brian Abbott (AMNH)", URL = "https://www.amnh.org/research/hayden-planetarium/digital-universe", License = "AMNH Digital Universe" } diff --git a/data/assets/scene/digitaluniverse/backgroundradiation.asset b/data/assets/scene/digitaluniverse/backgroundradiation.asset index 32409116e5..e1a753a756 100644 --- a/data/assets/scene/digitaluniverse/backgroundradiation.asset +++ b/data/assets/scene/digitaluniverse/backgroundradiation.asset @@ -1,11 +1,11 @@ -local speck = asset.syncedResource({ +local speck = asset.resource({ Name = "Background Radiation Speck Files", Type = "HttpSynchronization", Identifier = "digitaluniverse_backgroundradiation_speck", Version = 1 }) -local textures = asset.syncedResource({ +local textures = asset.resource({ Name = "Background Radiation Textures", Type = "HttpSynchronization", Identifier = "digitaluniverse_backgroundradiation_textures", @@ -13,6 +13,38 @@ local textures = asset.syncedResource({ }) +local COBE = { + Identifier = "COBE", + Transform = { + Rotation = { + Type = "StaticRotation", + Rotation = { 0, 0, math.pi } + } + }, + Renderable = { + Type = "RenderableSphereImageLocal", + Enabled = false, + Size = 3975.41417036064E23, + Segments = 80, + Opacity = 0.5, + Texture = textures .. "COBErect.png", + Orientation = "Both", + MirrorTexture = true, + FadeInThreshold = 0.4 + }, + GUI = { + Name = "1990 COBE CMB", + Path = "/Universe/Cosmic Microwave Background", + Description = [[In 1990, COBE, the Cosmic Background Explorer, took the first + detailed map of the cosmic microwave background light. The red areas are + relatively hotter areas of the CMB, while the blue areas are cooler than the + average. The lines of latitude and longitude are baked into this image, and + reflect galactic coordinates. Image resolution is 7 degrees. Census: 1 + all-sky image.]] + } +} + + local WMAP = { Identifier = "WMAP", Transform = { @@ -22,7 +54,7 @@ local WMAP = { } }, Renderable = { - Type = "RenderableSphere", + Type = "RenderableSphereImageLocal", Enabled = false, Size = 3975.41417036064E23, Segments = 80, @@ -33,35 +65,16 @@ local WMAP = { FadeInThreshold = 0.4 }, GUI = { - Name = "Wilkinson Microwave Anisotropy Probe (WMAP)", - Path = "/Universe/Cosmic Microwave Background" + Name = "2003 WMAP CMB", + Path = "/Universe/Cosmic Microwave Background", + Description = [[WMAP, the Wilkinson Microwave Anisotropy Probe, released this all-sky + image of the cosmic microwave background light in 2003. The blue colors are slightly + cooler than average and red is slightly warmer, with fluctuations of about a + 100,000th of a degree above or below the average. The resolution on this image is + 0.5 degrees. Census: 1 all-sky image.]] } } -local CBE = { - Identifier = "CBE", - Transform = { - Rotation = { - Type = "StaticRotation", - Rotation = { 0, 0, math.pi } - } - }, - Renderable = { - Type = "RenderableSphere", - Enabled = false, - Size = 3975.41417036064E23, - Segments = 80, - Opacity = 0.5, - Texture = textures .. "COBErect.png", - Orientation = "Both", - MirrorTexture = true, - FadeInThreshold = 0.4 - }, - GUI = { - Name = "Cosmic Background Explorer", - Path = "/Universe/Cosmic Microwave Background" - } -} local Planck = { Identifier = "Planck", @@ -72,7 +85,7 @@ local Planck = { } }, Renderable = { - Type = "RenderableSphere", + Type = "RenderableSphereImageLocal", Enabled = true, Size = 3975.41417036064E23, Segments = 80, @@ -83,68 +96,43 @@ local Planck = { FadeInThreshold = 0.4 }, GUI = { - Name = "Planck", - Path = "/Universe/Cosmic Microwave Background" - } -} - - -local HAlpha = { - Identifier = "HAlpha", - Transform = { - Rotation = { - Type = "StaticRotation", - Rotation = { 0, 0, math.pi } - } - }, - Renderable = { - Type = "RenderableSphere", - Enabled = false, - Size = 9.2E21, - Segments = 40, - Opacity = 0.4, - Texture = textures .. "mwHalpha-f.png", - Orientation = "Inside", - MirrorTexture = true, - FadeOutThreshold = 0.025, - Background = true - }, - GUI = { - Name = "H Alpha", - Path = "/Milky Way/All Sky Images" + Name = "2013 Planck CMB", + Path = "/Universe/Cosmic Microwave Background", + Description = [[The Planck mission's 2013 image of the cosmic microwave background + light release is the most detailed view of the CMB we have to date. The orange + areas represent the slightly hotter areas, and the blue areas show the areas that + are slightly cooler. The resolution on this image is 0.16 degrees. Census: 1 + all-sky image.]] } } asset.onInitialize(function() + openspace.addSceneGraphNode(COBE) openspace.addSceneGraphNode(WMAP) - openspace.addSceneGraphNode(CBE) openspace.addSceneGraphNode(Planck) - openspace.addSceneGraphNode(HAlpha) end) asset.onDeinitialize(function() - openspace.removeSceneGraphNode(HAlpha) openspace.removeSceneGraphNode(Planck) - openspace.removeSceneGraphNode(CBE) openspace.removeSceneGraphNode(WMAP) + openspace.removeSceneGraphNode(COBE) end) +asset.export(COBE) asset.export(WMAP) -asset.export(CBE) asset.export(Planck) -asset.export(HAlpha) asset.meta = { - Name = "Background Radiation", - Version = "2.1", - Description = [[Various AllSky images for the Milky Way and observable Universe. - Included: Wilkinson Microwave Anisotropy Probe (WMAP), Cosmic Background Explorer, - Planck, and H Alpha

Data Reference: Planck/ESA and the Planck - Collaboration, Wilkinson Microwave Anisotropy Probe/NASA, Doug - Finkbeiner (Princeton)]], + Name = "Cosmic Microwave Background", + Description = [[All-sky images of the Cosmic Microwave Background Light. The CMB has + been mapped by three main missions: COBE, WMAP, and Planck. The images are not true + all-sky images because the light from our own galaxy has been subtracted out of them. + From the discovery of the CMB in 1964, to the three space telescopes whose images we + see in this asset, we've gained a more detailed view of the CMB light, thereby telling + us more about the origin of the universe.]], Author = "Brian Abbott (AMNH), OpenSpace Team", URL = "https://www.amnh.org/research/hayden-planetarium/digital-universe", License = "AMNH Digital Universe" diff --git a/data/assets/scene/digitaluniverse/backgroundradiation_multiverse.asset b/data/assets/scene/digitaluniverse/backgroundradiation_multiverse.asset index 70d83e7716..7af1e3f312 100644 --- a/data/assets/scene/digitaluniverse/backgroundradiation_multiverse.asset +++ b/data/assets/scene/digitaluniverse/backgroundradiation_multiverse.asset @@ -1,4 +1,4 @@ -local textures = asset.syncedResource({ +local textures = asset.resource({ Name = "Background Radiation Textures", Type = "HttpSynchronization", Identifier = "digitaluniverse_backgroundradiation_textures", @@ -19,7 +19,7 @@ local PlanckMultiverse1 = { } }, Renderable = { - Type = "RenderableSphere", + Type = "RenderableSphereImageLocal", Enabled = false, Size = 3975.41417036064E23, Segments = 80, @@ -48,7 +48,7 @@ local PlanckMultiverse2 = { } }, Renderable = { - Type = "RenderableSphere", + Type = "RenderableSphereImageLocal", Enabled = false, Size = 3975.41417036064E23, Segments = 80, @@ -77,7 +77,7 @@ local PlanckMultiverse3 = { } }, Renderable = { - Type = "RenderableSphere", + Type = "RenderableSphereImageLocal", Enabled = false, Size = 3975.41417036064E23, Segments = 80, @@ -106,7 +106,7 @@ local PlanckMultiverse4 = { } }, Renderable = { - Type = "RenderableSphere", + Type = "RenderableSphereImageLocal", Enabled = false, Size = 3975.41417036064E23, Segments = 80, @@ -146,7 +146,6 @@ asset.export(PlanckMultiverse4) asset.meta = { Name = "Multiverse Background Radiation", - Version = "2.1", Description = [[Non-physical representation of the location of hypothetical cosmic microwave background radiation images how they would be observed from other locations in the universe.
This is not a measured dataset]], diff --git a/data/assets/scene/digitaluniverse/brown_dwarfs.asset b/data/assets/scene/digitaluniverse/brown_dwarfs.asset new file mode 100644 index 0000000000..768a4791d6 --- /dev/null +++ b/data/assets/scene/digitaluniverse/brown_dwarfs.asset @@ -0,0 +1,79 @@ +local textures = asset.resource({ + Name = "Point Textures", + Type = "HttpSynchronization", + Identifier = "digitaluniverse_point_textures", + Version = 1 +}) + +local speck = asset.resource({ + Name = "Brown Dwarf Speck Files", + Type = "HttpSynchronization", + Identifier = "digitaluniverse_brown_dwarfs_speck", + Version = 1 +}) + + +local Object = { + Identifier = "BrownDwarfs", + Renderable = { + Type = "RenderablePointCloud", + Enabled = false, + File = speck .. "bd.speck", + Texture = { + File = textures .. "point3.png" + }, + Unit = "pc", + Coloring = { + FixedColor = { 0.4, 0.0, 0.1 }, + ColorMapping = { + File = speck .. "bd.cmap", + ParameterOptions = { + { Key = "typeindex", Range = { 1.0, 4.0 } } + } + } + }, + SizeSettings = { + ScaleExponent = 15.8, + MaxSize = 0.7, + EnableMaxSizeControl = true + } + }, + GUI = { + Name = "Brown Dwarfs", + Path = "/Milky Way/Substellar Objects", + Description = [[For decades it was believed that M stars were the coolest stars in + the Galaxy. Some M stars, called red dwarfs, make up 70% of the stars in the + Galaxy. However, a new class of objects, even cooler than M stars, was recently + discovered and given a spectral type of L. L-type objects straddle the boundary + between red dwarfs and brown dwarfs and they are typically very dim stars or brown + dwarfs. Even cooler than L-type objects are T-type objects. These are mostly brown + dwarfs and resemble large, massive, Jupiter-like objects, too large to be planets + and typically too small to be stars. Beyond the T dwarfs are the Y-type objects, + which are even more dim. Brown dwarfs are extremely difficult to see, mainly because + they are so dim in optical light. However, they appear brighter in infrared light. + Colors: We represent these objects as exaggeratged points and they are either red + for L type objects, Maroon for T type, and purple for Y type objects. Census: + 2,196 objects.]] + } +} + + +asset.onInitialize(function() + openspace.addSceneGraphNode(Object) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Object) +end) + +asset.export(Object) + + + +asset.meta = { + Name = "Brown Dwarfs", + Author = "Brian Abbott, Zack Reeves, Jackie Faherty (AMNH)", + Description = Object.GUI.Description, + License = "AMNH Digital Universe", + URL = "https://www.amnh.org/research/hayden-planetarium/digital-universe", +} diff --git a/data/assets/scene/digitaluniverse/clusters.asset b/data/assets/scene/digitaluniverse/clusters.asset deleted file mode 100644 index 36687cd7b3..0000000000 --- a/data/assets/scene/digitaluniverse/clusters.asset +++ /dev/null @@ -1,66 +0,0 @@ -local speck = asset.syncedResource({ - Name = "Clusters Speck Files", - Type = "HttpSynchronization", - Identifier = "digitaluniverse_clusters_speck", - Version = 2 -}) - - -local TransformMatrix = { - -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 -} - -local Object = { - Identifier = "GalaxyClusterLabels", - Renderable = { - Type = "RenderableBillboardsCloud", - Enabled = false, - Labels = { - Enabled = true, - File = speck .. "galclust.label", - Color = { 1.0, 0.44, 0.0 }, - Size = 22, - MinMaxSize = { 8, 20 }, - Unit = "Mpc", - TransformationMatrix = TransformMatrix - }, - Color = { 1.0, 1.0, 1.0 }, - Opacity = 0.65, - Unit = "Mpc", - TransformationMatrix = TransformMatrix - }, - GUI = { - Name = "Galaxy Cluster Labels", - Path = "/Universe/Galaxies", - Description = [[Census 15 galaxy cluster labels. DU Version 1.2.
The Galaxy - clusters dataset is a series of labels that mark where the large clusters of - galaxies are in the nearby universe. These labels must be used in conjunction - with the Tully galaxy group.(Description from URL)

Data Reference: - Brian Abbott (AMNH)]] - } -} - - -asset.onInitialize(function() - openspace.addSceneGraphNode(Object) -end) - -asset.onDeinitialize(function() - openspace.removeSceneGraphNode(Object) -end) - -asset.export(Object) - - - -asset.meta = { - Name = "Galaxy Clusters Labels", - Version = "1.1", - Description = "Digital Universe asset for Galaxy Clusters", - Author = "Brian Abbott (AMNH)", - URL = "https://www.amnh.org/research/hayden-planetarium/digital-universe", - License = "AMNH Digital Universe" -} diff --git a/data/assets/scene/digitaluniverse/constellationbounds.asset b/data/assets/scene/digitaluniverse/constellationbounds.asset index e4d0f611b2..b366279854 100644 --- a/data/assets/scene/digitaluniverse/constellationbounds.asset +++ b/data/assets/scene/digitaluniverse/constellationbounds.asset @@ -1,4 +1,8 @@ -local data = asset.syncedResource({ +local coreKernels = asset.require("spice/core") + + + +local data = asset.resource({ Name = "Constellation Files", Type = "HttpSynchronization", Identifier = "digitaluniverse_constellations_data", @@ -22,8 +26,8 @@ local Object = { Transform = { Rotation = { Type = "SpiceRotation", - SourceFrame = "J2000", - DestinationFrame = "GALACTIC" + SourceFrame = coreKernels.Frame.J2000, + DestinationFrame = coreKernels.Frame.Galactic }, Scale = { Type = "StaticScale", @@ -31,10 +35,12 @@ local Object = { } }, GUI = { - Name = "Constellation Bounds", + Name = "Constellation Boundaries", Path = "/Milky Way/Constellations", - Description = [[A Spherical mesh dividing the sky into regions that fit the - constellations]] + Description = [[As a continent is divided into countries, astronomers divide the sky + into 88 regions called constellations. Every object falls into one of these 88 + regions. The boundaries of these regions are shown in this asset. Use these in + concert with the constellation labels. Census: 88 constellations.]] } } @@ -53,9 +59,7 @@ asset.export(Object) asset.meta = { Name = "Constellation Bounds", - Version = "1.2", - Description = [[DU asset providing a Spherical mesh dividing the sky into regions that - fit the constellations]], + Description = Object.GUI.Description, Author = "Brian Abbott (AMNH)", URL = "https://www.amnh.org/research/hayden-planetarium/digital-universe", License = "AMNH Digital Universe" diff --git a/data/assets/scene/digitaluniverse/constellations.asset b/data/assets/scene/digitaluniverse/constellations.asset index 8e8ed7d626..bf1957ef16 100644 --- a/data/assets/scene/digitaluniverse/constellations.asset +++ b/data/assets/scene/digitaluniverse/constellations.asset @@ -2,18 +2,14 @@ local constellations_helper = asset.require("util/constellations_helper") -local speck = asset.syncedResource({ +local speck = asset.resource({ Name = "Constellation Files", Type = "HttpSynchronization", Identifier = "digitaluniverse_constellations_data", - Version = 2 + Version = 3 }) -local zodiacs = { - "CNC", "TAU", "PSC", "ARI", "LIB", "AQR", "CAP", "SCO", "VIR", "SGR", "GEM", "LEO" -} - local function zodiacsString(zodiacsList) local zodiacsString = "{" local isFirst = true @@ -35,31 +31,6 @@ local function zodiacsString(zodiacsList) return zodiacsString end -local ConstellationsExtragalactic = { - Identifier = "ConstellationsExtragalactic", - Renderable = { - Type = "RenderableConstellationLines", - Enabled = false, - Labels = { - File = speck .. "constellationsEXGAL.label", - Opacity = 0.4, - Color = { 0.8, 0.8, 0.8 }, - Size = 20.0, - MinMaxSize = { 20, 30 }, - Unit = "Mpc", - }, - Opacity = 0.4, - File = speck .. "constellationsEXGAL.speck", - NamesFile = speck .. "constellations.dat", - Colors = { { 0.6, 0.4, 0.4 }, { 0.8, 0.0, 0.0 }, { 0.0, 0.3, 0.8 } }, - Unit = "Mpc", - -- Selection = zodiacs - }, - GUI = { - Name = "Constellations (Extragalactic)", - Path = "/Milky Way/Constellations" - } -} local Constellations = { Identifier = "Constellations", @@ -67,15 +38,15 @@ local Constellations = { Type = "RenderableConstellationLines", Enabled = false, Labels = { - File = speck .. "constellations.label", + File = speck .. "constellation_lines.label", Opacity = 0.3, Color = { 0.8, 0.8, 0.8 }, Size = 14.5, MinMaxSize = { 8, 170 }, - Unit = "pc", + Unit = "pc" }, Opacity = 0.3, - File = speck .. "constellations.speck", + File = speck .. "constellation_lines.speck", NamesFile = speck .. "constellations.dat", Colors = { { 0.6, 0.4, 0.4 }, { 0.8, 0.0, 0.0 }, { 0.0, 0.3, 0.8 } }, Unit = "pc", @@ -83,22 +54,17 @@ local Constellations = { }, Tag = { "daytime_hidden" }, GUI = { - Name = "Constellations", + Name = "Constellation Lines", Path = "/Milky Way/Constellations", - Description = [[Census 88 constellations and labels. DU Version 3.4.
These - modern constellations are largely based on those of the Babylonians and - Greeks; however, most cultures have their own figures and stories of the sky. - More than half the official constellations adopted by scientists in 1930 were - known to the ancients over 2,000 years ago. Each star falls into one of these - 88 regions. Of course, today we know the stars in any given constellation do - not necessarily have any physical relationship with one another. One star may - be nearby, while an adjacent star in the sky may be far away.(Description - from URL)

Data Reference: various]] + Description = [[Lines connecting the stars that make up the constellation figures. + We represent the constellations by connecting the main stars that make up the + constellation "stick figures," as seen from Earth. Colors: most constellations + are pink, while the zodical constellations are red. We also color Orion and Ursa + Major blue as two recognizable constellations in the night sky. Census: 88 + constellations.]] } } -local zodiacsString = zodiacsString(zodiacs) - -- Actions local ShowConstellations = { Identifier = "os.constellations.ShowConstellations", @@ -116,28 +82,36 @@ local HideConstellations = { Identifier = "os.constellations.HideConstellations", Name = "Hide all", Command = [[ - openspace.fadeOut("Scene.Constellations.Renderable", nil, "openspace.setPropertyValueSingle('Scene.Constellations.Renderable.Enabled', false); openspace.setPropertyValueSingle("Scene.Constellations.Renderable.ConstellationSelection", {})") + openspace.fadeOut("Scene.Constellations.Renderable", nil, "openspace.setPropertyValueSingle('Scene.Constellations.Renderable.Enabled', false); openspace.setPropertyValueSingle('Scene.Constellations.Renderable.ConstellationSelection', {})") ]], Documentation = "Hides all the constellations lines", GuiPath = "/Constellations/Lines", IsLocal = false } -local ShowZodiacs = { - Identifier = "os.constellation.ShowZodiacs", - Name = "Show zodiac", - Command = [[ - openspace.setPropertyValueSingle("Scene.Constellations.Renderable.ConstellationSelection", ]] .. zodiacsString .. [[) - openspace.fadeIn("Scene.Constellations.Renderable") - ]], - Documentation = "Shows the zodiac constellations lines", - GuiPath = "/Constellations/Lines", - IsLocal = false -} +local ShowZodiacsIdentifier = "os.constellation.ShowZodiacs" + asset.onInitialize(function() - openspace.addSceneGraphNode(ConstellationsExtragalactic) + -- Defining this in here as the zodiacsString function requires the file synchronization + -- to be completed + + local zodiacsString = zodiacsString({ + "CNC", "TAU", "PSC", "ARI", "LIB", "AQR", "CAP", "SCO", "VIR", "SGR", "GEM", "LEO" + }) + local ShowZodiacs = { + Identifier = ShowZodiacsIdentifier, + Name = "Show zodiac", + Command = [[ + openspace.setPropertyValueSingle("Scene.Constellations.Renderable.ConstellationSelection", ]] .. zodiacsString .. [[) + openspace.fadeIn("Scene.Constellations.Renderable") + ]], + Documentation = "Shows the zodiac constellations lines", + GuiPath = "/Constellations/Lines", + IsLocal = false + } + openspace.addSceneGraphNode(Constellations) openspace.action.registerAction(ShowConstellations) @@ -146,27 +120,23 @@ asset.onInitialize(function() end) asset.onDeinitialize(function() - openspace.action.removeAction(ShowZodiacs) + openspace.action.removeAction(ShowZodiacsIdentifier) openspace.action.removeAction(HideConstellations) openspace.action.removeAction(ShowConstellations) openspace.removeSceneGraphNode(Constellations) - openspace.removeSceneGraphNode(ConstellationsExtragalactic) end) -asset.export(ConstellationsExtragalactic) asset.export(Constellations) asset.export("ShowConstellations", ShowConstellations.Identifier) asset.export("HideConstellations", HideConstellations.Identifier) -asset.export("ShowZodiacs", ShowZodiacs.Identifier) +asset.export("ShowZodiacs", ShowZodiacsIdentifier) asset.meta = { - Name = "Constellations", - Version = "1.3", - Description = "Digital Universe asset for constellation lines", - Author = "Brian Abbott (AMNH)", + Description = Constellations.GUI.Description, + Author = "Brian Abbott, Zack Reeves (AMNH)", URL = "https://www.amnh.org/research/hayden-planetarium/digital-universe", License = "AMNH Digital Universe" } diff --git a/data/assets/scene/digitaluniverse/deepsky.asset b/data/assets/scene/digitaluniverse/deepsky.asset index 83ac809645..3973a79262 100644 --- a/data/assets/scene/digitaluniverse/deepsky.asset +++ b/data/assets/scene/digitaluniverse/deepsky.asset @@ -1,23 +1,24 @@ -local textures = asset.syncedResource({ +local textures = asset.resource({ Name = "Deep Sky Objects Textures", Type = "HttpSynchronization", Identifier = "digitaluniverse_deepsky_textures", Version = 2 }) -local speck = asset.syncedResource({ +local speck = asset.resource({ Name = "Deep Sky Objects Speck Files", Type = "HttpSynchronization", Identifier = "digitaluniverse_deepsky_speck", - Version = 1 + Version = 2 }) local DeepSkyObjects = { Identifier = "DeepSkyObjects", Renderable = { - Type = "RenderableBillboardsCloud", + Type = "RenderablePointCloud", Enabled = false, + File = speck .. "dso.speck", Labels = { File = speck .. "dso.label", Color = { 0.1, 0.4, 0.6 }, @@ -25,22 +26,20 @@ local DeepSkyObjects = { MinMaxSize = { 16, 20 }, Unit = "pc" }, - Color = { 1.0, 1.0, 0.0 }, Opacity = 0.99, - ScaleFactor = 500.0, - File = speck .. "dso.speck", - Texture = textures .. "point3.png", - --ColorMap = speck .. "tully.cmap", - --ColorMap = speck .. "lss.cmap", - --ColorOption = { "proximity" }, - --ColorOption = { "prox5Mpc" }, - --ColorRange = { { 1.0, 30.0 } }, + Coloring = { + FixedColor = { 1.0, 1.0, 0.0 } + }, + Texture = { + File = textures .. "point3.png", + }, Unit = "pc", --FadeInDistances = { 0.05, 1.0 }, -- Fade in value in the same unit as "Unit" - BillboardMinMaxSize = { 0.0, 8.22 }, -- in pixels - --CorrectionSizeEndDistance = 22.0, - --CorrectionSizeFactor = 10.45 - EnablePixelSizeControl = true + SizeSettings = { + ScaleExponent = 21.7, + MaxSize = 0.32, + EnableMaxSizeControl = true + } }, Transform = { Rotation = { @@ -50,7 +49,7 @@ local DeepSkyObjects = { }, GUI = { Name = "Deep Sky Objects Points", - Path = "/Universe/Galaxies", + Path = "/Universe/Nearby Surveys", Description = "Point cloud and labels for Deep Sky Objects" } } @@ -58,19 +57,27 @@ local DeepSkyObjects = { local DeepSkyObjectsImages = { Identifier = "DeepSkyObjectsImages", Renderable = { - Type = "RenderablePlanesCloud", + Type = "RenderablePointCloud", Enabled = false, - Color = { 1.0, 1.0, 1.0 }, Opacity = 0.99, - ScaleFactor = 1.0, File = speck .. "dso.speck", - TexturePath = textures, - Luminosity = "radius", - ScaleLuminosity = 0.001, + Texture = { + Folder = textures + }, + -- Use fixed orientation, and rotate planes based on orientation information in + -- the dataset + OrientationRenderOption = "Fixed Rotation", + UseOrientationData = true, Unit = "pc", - -- Fade in value in the same unit as "Unit" - --FadeInDistances = {0.001, 0.05010}, - PlaneMinSize = 5.0 + SizeSettings = { + SizeMapping = { + ParameterOptions = { "radius" }, + ScaleFactor = "Parsec", + IsRadius = true + }, + -- No exponential scaling, just use size mapping to set the correct size + ScaleExponent = 0.0 + } }, Transform = { Rotation = { @@ -80,7 +87,7 @@ local DeepSkyObjectsImages = { }, GUI = { Name = "Deep Sky Objects Images", - Path = "/Universe/Galaxies", + Path = "/Universe/Nearby Surveys", Description = [[Census: 63 images and labels. DU Version 1.3.
These data are 2-D images of Messier objects placed in 3-D space. Not only do we place these images at the proper location and give them the correct orientation, we also @@ -112,7 +119,6 @@ asset.export(DeepSkyObjectsImages) asset.meta = { Name = "Deep Sky Objects Images", - Version = "1.1", Description = "Digital Universe asset for Deep Sky Objects and their Images", Author = "Nate Greenstein, Matt Everhart, Brian Abbott (AMNH)", URL = "https://www.amnh.org/research/hayden-planetarium/digital-universe", diff --git a/data/assets/scene/digitaluniverse/digitaluniverse.asset b/data/assets/scene/digitaluniverse/digitaluniverse.asset index b128554315..36ff48a180 100644 --- a/data/assets/scene/digitaluniverse/digitaluniverse.asset +++ b/data/assets/scene/digitaluniverse/digitaluniverse.asset @@ -1,47 +1,48 @@ +asset.require("./sdss") asset.require("./2dF") asset.require("./2mass") asset.require("./6dF") asset.require("./abell") -asset.require("./alternatestarlabels") +asset.require("./allsky_hydrogenalpha") +asset.require("./allsky_visible") asset.require("./backgroundradiation") asset.require("./backgroundradiation_multiverse") -asset.require("./clusters") +asset.require("./brown_dwarfs") +asset.require("./galaxy_clusters") asset.require("./constellationbounds") asset.require("./constellations") -asset.require("./deepsky") -asset.require("./dwarfs") asset.require("./exoplanets") asset.require("./exoplanets_candidates") asset.require("./globularclusters") asset.require("./grids") -asset.require("./groups") +asset.require("./galaxy_groups") asset.require("./h2regions") -asset.require("./localdwarfs") +asset.require("./local_group_dwarfs") asset.require("./milkyway") asset.require("./milkyway_arm_labels") asset.require("./milkyway_label") -asset.require("./milkyway_sphere") asset.require("./obassociations") +asset.require("./oort_cloud") asset.require("./openclusters") asset.require("./planetarynebulae") asset.require("./pulsars") asset.require("./quasars") -asset.require("./sdss") asset.require("./starlabels") +asset.require("./alternatestarlabels") asset.require("./starorbits") +asset.require("./star_uncertainty") asset.require("./stars") asset.require("./superclusters") asset.require("./supernovaremnants") asset.require("./tully") asset.require("./voids") +asset.require("./white_dwarfs") asset.meta = { Name = "Digital Universe", - Version = "1.0", - Description = [[This asset is a meta asset, containing all the assets from the AMNH - Digital Universe]], + Description = [[This asset is a meta asset, containing all the assets from the AMNH Digital Universe.]], Author = "Brian Abbott (AMNH)", URL = "https://www.amnh.org/research/hayden-planetarium/digital-universe", License = "AMNH Digital Universe" diff --git a/data/assets/scene/digitaluniverse/dwarfs.asset b/data/assets/scene/digitaluniverse/dwarfs.asset deleted file mode 100644 index 6e789834d0..0000000000 --- a/data/assets/scene/digitaluniverse/dwarfs.asset +++ /dev/null @@ -1,85 +0,0 @@ -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 = 2 -}) - - -local Object = { - Identifier = "Dwarfs", - Renderable = { - Type = "RenderableBillboardsCloud", - Enabled = false, - Labels = { - File = speck .. "dwarfs.label", - Color = { 0.5, 0.1, 0.2 }, - Size = 14.6, - MinMaxSize = { 10, 20 }, - Unit = "pc" - }, - Color = { 0.4, 0.0, 0.1 }, - Opacity = 1.0, - File = speck .. "dwarfs.speck", - Texture = textures .. "point3.png", - Unit = "pc", - ColorMap = speck .. "dwarfs.cmap", - ColorOption = { "typeindex" }, - --ColorRange = { { 1.0, 4.0} }, - ScaleFactor = 372.1, - --CorrectionSizeEndDistance = 16.1, - --CorrectionSizeFactor = 7.75, - BillboardMinMaxSize = { 0.0, 20.0 }, - EnablePixelSizeControl = true - }, - GUI = { - Name = "Brown Dwarfs", - Path = "/Milky Way", - Description = [[Census: 785 L dwarfs, 101 T dwarfs, 17 Y dwarfs. DU Version 6.4. -
In astronomy, there are dwarf stars-red, white, and brown-dwarf novae, - and even dwarf galaxies. As you might imagine, astronomers use the term dwarf - when they refer to the smaller objects in any given class. For decades it was - believed that M stars were the coolest stars in the Galaxy. Some M stars, - called red dwarfs, make up 70% of the stars in the Galaxy, including our - nearest known neighbor, Proxima Centauri. However, a new class of objects, - even cooler than M stars, was recently discovered and given a spectral type - of L. L-type objects straddle the boundary between red dwarfs and brown - dwarfs, the latter of which are not massive enough to ignite the nuclear - processes necessary for it to shine as a star. L-type objects are typically - very dim stars or brown dwarfs. Even cooler than L-type objects are T-type - objects. These are mostly brown dwarfs and resemble large, massive, - Jupiter-like objects, too large to be planets and typically too small to be - stars. Beyond the T dwarfs are the Y-type objects, which are even more - dim.(Description from URL)

Data Reference: The Brown Dwarf Kinematics - Project (Faherty+ 2019)]] - } -} - - -asset.onInitialize(function() - openspace.addSceneGraphNode(Object) -end) - -asset.onDeinitialize(function() - openspace.removeSceneGraphNode(Object) -end) - -asset.export(Object) - - - -asset.meta = { - Name = "Brown Dwarfs", - Version = "2.1", - Description = "Digital Universe asset for Brown Dwarfs", - Author = "Brian Abbott (AMNH)", - URL = "https://www.amnh.org/research/hayden-planetarium/digital-universe", - License = "AMNH Digital Universe" -} diff --git a/data/assets/scene/digitaluniverse/exoplanets.asset b/data/assets/scene/digitaluniverse/exoplanets.asset index 2c1cface48..ec0dcdfdf7 100644 --- a/data/assets/scene/digitaluniverse/exoplanets.asset +++ b/data/assets/scene/digitaluniverse/exoplanets.asset @@ -1,51 +1,53 @@ -local textures = asset.syncedResource({ +local textures = asset.resource({ Name = "Exoplanets Textures", Type = "HttpSynchronization", Identifier = "digitaluniverse_exoplanets_textures", Version = 1 }) -local speck = asset.syncedResource({ +local speck = asset.resource({ Name = "Exoplanets Speck Files", Type = "HttpSynchronization", Identifier = "digitaluniverse_exoplanets_speck", - Version = 3 + Version = 4 }) local Object = { Identifier = "Exoplanets", Renderable = { - Type = "RenderableBillboardsCloud", + Type = "RenderablePointCloud", Enabled = false, + File = speck .. "expl.speck", Labels = { File = speck .. "expl.label", Color = { 0.3, 0.3, 0.8 }, - Size = 14.8, + Size = 13.75, MinMaxSize = { 10, 100 }, Unit = "pc" }, - Color = { 1.0, 1.0, 1.0 }, Opacity = 1.0, - Texture = textures .. "target-blue.png", - File = speck .. "expl.speck", + Texture = { + File = textures .. "target-blue.png", + }, Unit = "pc", - ScaleFactor = 388.67923, - CorrectionSizeEndDistance = 15.23, - CorrectionSizeFactor = 13.3, - BillboardMinMaxSize = { 0.0, 75.0 }, - EnablePixelSizeControl = true + SizeSettings = { + ScaleExponent = 16.9, + MaxSize = 2.8, + EnableMaxSizeControl = true + } }, GUI = { Name = "Exoplanets", Path = "/Milky Way/Exoplanets", - Description = [[Census: 5,361 planets in 3,982 systems. DU Version 20.12.
- Extrasolar planets, or exoplanets, are a relatively new phenomenon in - astronomy. While many astronomers believed in their existence, no - observational evidence was available until 1995. Since that time, scientists - have discovered thousands of systems consisting of one or more planets around - a host star.(Description from URL)

Data Reference: NASA Exoplanet - Archive (CalTech/NASA)]] + Description = [[Extrasolar planets, or exoplanets, are a relatively new phenomenon in + astronomy - no observational evidence was available until 1995. To the eye, + exoplanets are lost in the glare of their host star. Unconventional techniques are + required to infer or observe them. Here, exoplanet systems are represented by a blue + ring centered on each host star. The ring is not intended to signify an orbit, but + serve only as a marker. The labels list the host star name, and if there is more + than one planet, will list the number of planets in parentheses. Census: 5,589 + planets in 4,139 systems.]] } } @@ -64,9 +66,8 @@ asset.export(Object) asset.meta = { Name = "Exoplanets", - Version = "1.1", - Description = "Digital Universe asset for Exoplanets", - Author = "Brian Abbott (AMNH)", + Description = Object.GUI.Description, + Author = "Brian Abbott, Zack Reeves (AMNH)", URL = "https://www.amnh.org/research/hayden-planetarium/digital-universe", License = "AMNH Digital Universe" } diff --git a/data/assets/scene/digitaluniverse/exoplanets_candidates.asset b/data/assets/scene/digitaluniverse/exoplanets_candidates.asset index 0786bef147..91d8dcaba8 100644 --- a/data/assets/scene/digitaluniverse/exoplanets_candidates.asset +++ b/data/assets/scene/digitaluniverse/exoplanets_candidates.asset @@ -1,47 +1,55 @@ -local textures = asset.syncedResource({ +local textures = asset.resource({ Name = "Exoplanets Candidates Textures", Type = "HttpSynchronization", Identifier = "digitaluniverse_exoplanets_candidates_textures", Version = 1 }) -local speck = asset.syncedResource({ +local speck = asset.resource({ Name = "Exoplanets Candidates Speck Files", Type = "HttpSynchronization", Identifier = "digitaluniverse_exoplanets_candidates_speck", - Version = 1 + Version = 2 }) local Object = { Identifier = "PlanetaryCandidates", Renderable = { - Type = "RenderableBillboardsCloud", + Type = "RenderablePointCloud", Enabled = false, - Color = { 1.0, 1.0, 0.0 }, Opacity = 0.99, - ScaleFactor = 410.0, - File = speck .. "exoplanet_candidates.speck", + File = speck .. "expl_candidates.speck", Unit = "pc", - Texture = textures .. "halo.png", - CorrectionSizeEndDistance = 15.86, - CorrectionSizeFactor = 8.59, - BillboardMinMaxSize = { 0.0, 30.0 }, - EnablePixelSizeControl = true + Texture = { + File = textures .. "halo.png", + }, + Coloring = { + FixedColor = { 1.0, 1.0, 0.0 }, + ColorMapping = { + File = speck .. "expl_candidates.cmap", + ParameterOptions = { + { Key = "survey_num" } + } + } + }, + SizeSettings = { + ScaleExponent = 17.8, + MaxSize = 1.0, + EnableMaxSizeControl = true + } }, GUI = { - Name = "Planetary Candidates", + Name = "Exoplanetary Candidates", Path = "/Milky Way/Exoplanets", - Description = [[Census: 6,082 stars with candidate planetary systems. DU Version 11.8. -
The exoplanet candidate stars are likely hosts for exoplanets. These are stars - plucked from NASA's Kepler and TESS space telescopes. The Kepler mission was - designed to stare at one spot, roughly twelve degrees across, in the constellation - Cygnus. By staring at one spot, the spacecraft could monitor over 500,000 stars in - that field for subtle variations in brightness. The data included here are the stars - that are considered good candidates to host planets. Rather than represent them + Description = [[The exoplanet candidate stars are likely hosts for exoplanets. These + are stars plucked from NASA's Kepler and TESS space telescopes. Further observations + are needed to confirm a planet's existence. Rather than represent them photo-realistically, with accurate colors, we choose to visualize them as generic, - pure yellow stars. (Description from URL)

Data Reference: NASA Exoplanet - Archive (CalTech/NASA)]] + colored stars. The nature of these stars is not important, it is the sheer numbers + of potential exoplanets that allows us to wonder just how many we will find in the + entire Galaxy. Colors: Yellow denote Kepler candidates, Orange stars are from the K2 + mission, and green stars are from TESS. Census: 7,225 candidate stars.]] } } @@ -59,10 +67,9 @@ asset.export(Object) asset.meta = { - Name = "Planetary Candidates", - Version = "2.1", - Description = "Digital Universe asset for Planetary Candidates", - Author = "Brian Abbott, Emily Rice, and Jason No (AMNH)", + Name = "Exoplanetary Candidates", + Description = Object.GUI.Description, + Author = "Brian Abbott, Zack Reeves, Emily Rice, and Jason No (AMNH)", URL = "https://www.amnh.org/research/hayden-planetarium/digital-universe", License = "AMNH Digital Universe" } diff --git a/data/assets/scene/digitaluniverse/galaxy_clusters.asset b/data/assets/scene/digitaluniverse/galaxy_clusters.asset new file mode 100644 index 0000000000..bd7fda1509 --- /dev/null +++ b/data/assets/scene/digitaluniverse/galaxy_clusters.asset @@ -0,0 +1,59 @@ +local transforms = asset.require("./transforms") + + + +local speck = asset.resource({ + Name = "Clusters Speck Files", + Type = "HttpSynchronization", + Identifier = "digitaluniverse_clusters_speck", + Version = 2 +}) + + +local Object = { + Identifier = "GalaxyClusterLabels", + Renderable = { + Type = "RenderablePointCloud", + Enabled = false, + Labels = { + Enabled = true, + File = speck .. "galclust.label", + Color = { 0.9, 0.5, 0.22 }, + Size = 22, + MinMaxSize = { 8, 15 }, + Unit = "Mpc", + TransformationMatrix = transforms.Supergalactic + }, + Opacity = 0.65, + Unit = "Mpc", + TransformationMatrix = transforms.Supergalactic + }, + GUI = { + Name = "Galaxy Cluster Labels", + Path = "/Universe/Nearby Surveys", + Description = [[The galaxy clusters dataset is a series of labels that mark where the + large clusters of galaxies are in the nearby universe. These labels must be used in + conjunction with the Tully galaxy group. Census: 15 galaxy cluster labels.]] + } +} + + +asset.onInitialize(function() + openspace.addSceneGraphNode(Object) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Object) +end) + +asset.export(Object) + + + +asset.meta = { + Name = "Galaxy Clusters Labels", + Description = Object.GUI.Description, + Author = "Brian Abbott (AMNH)", + URL = "https://www.amnh.org/research/hayden-planetarium/digital-universe", + License = "AMNH Digital Universe" +} diff --git a/data/assets/scene/digitaluniverse/galaxy_groups.asset b/data/assets/scene/digitaluniverse/galaxy_groups.asset new file mode 100644 index 0000000000..e051227eee --- /dev/null +++ b/data/assets/scene/digitaluniverse/galaxy_groups.asset @@ -0,0 +1,59 @@ +local transforms = asset.require("./transforms") + + + +local speck = asset.resource({ + Name = "Galaxy Groups Speck Files", + Type = "HttpSynchronization", + Identifier = "digitaluniverse_groups_speck", + Version = 1 +}) + + +local Object = { + Identifier = "NearbyGalaxyGroups", + Renderable = { + Type = "RenderablePointCloud", + Enabled = false, + Labels = { + Enabled = true, + File = speck .. "groups.label", + Color = { 0.1, 0.4, 0.2 }, + Size = 20.4, + MinMaxSize = { 8, 20 }, + Unit = "Mpc", + TransformationMatrix = transforms.Supergalactic + }, + Opacity = 0.65, + Unit = "Mpc", + TransformationMatrix = transforms.Supergalactic + }, + GUI = { + Name = "Galaxy Group Labels", + Path = "/Universe/Nearby Surveys", + Description = [[The Galaxy Groups data are a set of labels that mark the nearby + galaxy groups. The Milky Way is in the Local Group, and we are surrounded by + many other groups delineated by these labels. Census: 62 galaxy group labels.]] + } +} + + +asset.onInitialize(function() + openspace.addSceneGraphNode(Object) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Object) +end) + +asset.export(Object) + + + +asset.meta = { + Name = "Galaxy Group Labels", + Author = "Brian Abbott (AMNH)", + Description = Object.GUI.Description, + URL = "https://www.amnh.org/research/hayden-planetarium/digital-universe", + License = "AMNH Digital Universe" +} diff --git a/data/assets/scene/digitaluniverse/globularclusters.asset b/data/assets/scene/digitaluniverse/globularclusters.asset index 779002bc62..c2f97e6a63 100644 --- a/data/assets/scene/digitaluniverse/globularclusters.asset +++ b/data/assets/scene/digitaluniverse/globularclusters.asset @@ -1,56 +1,50 @@ -local textures = asset.syncedResource({ +local textures = asset.resource({ Name = "Globular Clusters Textures", Type = "HttpSynchronization", Identifier = "digitaluniverse_globularclusters_textures", Version = 1 }) -local speck = asset.syncedResource({ +local speck = asset.resource({ Name = "Globular Clusters Speck Files", Type = "HttpSynchronization", Identifier = "digitaluniverse_globularclusters_speck", - Version = 2 + Version = 3 }) local Object = { Identifier = "GlobularClusters", Renderable = { - Type = "RenderableBillboardsCloud", + Type = "RenderablePolygonCloud", Enabled = false, Labels = { File = speck .. "gc.label", - Color = { 0.5, 0.5, 0.0 }, + Color = { 0.36, 0.36, 0.0 }, Size = 16.7, MinMaxSize = { 4, 20 }, Unit = "pc" }, - Color = { 0.8, 0.8, 0.0 }, - Opacity = 0.4, + Coloring = { + FixedColor = { 0.8, 0.8, 0.0 } + }, + Opacity = 0.65, File = speck .. "gc.speck", - Texture = textures .. "point4.png", PolygonSides = 5, Unit = "pc", - ScaleFactor = 431.0, - BillboardMinMaxSize = { 0.0, 500.0 }, - EnablePixelSizeControl = true + SizeSettings = { + ScaleExponent = 18.6, + MaxSize = 13.0, + EnableMaxSizeControl = true + } }, GUI = { Name = "Globular Clusters", - Path = "/Milky Way", - Description = [[Census: 157 globular clusters. DU Version 2.6.
Globular star - clusters are gravitationally bound groups of 100,000 to 1 million stars. They - are compact, spherical "balls" of stars with very high stellar densities in - their centers (stars near their center are within a light year of one - another). These clusters are typically 30 to 100 light years in diameter. If - Earth were located inside one of these clusters, our sky would be lit by an - abundance of stars brighter than the Sun. The globular clusters form one of - the most complete data sets in the Atlas. Data for the clusters represent - almost all the clusters in our Galaxy—several on the opposite side of Galactic - center may be invisible to us. The clusters orbit the Milky Way in random - orientations, as comets orbit the Sun.(Description from URL)

Data - Reference: Properties of Galactic Globular Clusters, C. Francis+ - (U Cambridge)]] + Path = "/Milky Way/Star Clusters", + Description = [[Globular star clusters are gravitationally bound groups of 100,000 + to 1 million stars. They are compact, spherical "balls" of stars with very high + stellar densities. These clusters are typically 30 to 100 light years in diameter. + Census: 161 globular clusters.]] } } @@ -69,19 +63,8 @@ asset.export(Object) asset.meta = { Name = "Globular Clusters", - Version = "2.1", - Description = [[Census: 157 globular clusters. DU Version 2.6. Globular star clusters - are gravitationally bound groups of 100,000 to 1 million stars. They are compact, - spherical "balls" of stars with very high stellar densities in their centers (stars - near their center are within a light year of one another). These clusters are - typically 30 to 100 light years in diameter. If Earth were located inside one of these - clusters, our sky would be lit by an abundance of stars brighter than the Sun. The - globular clusters form one of the most complete data sets in the Atlas. Data for the - clusters represent almost all the clusters in our Galaxy—several on the opposite side - of Galactic center may be invisible to us. The clusters orbit the Milky Way in random - orientations, as comets orbit the Sun.(Description from URL)

Data Reference: - Properties of Galactic Globular Clusters, C. Francis+ (U Cambridge)]], - Author = "Brian Abbott (AMNH)", + Description = Object.GUI.Description, + Author = "Brian Abbott, Zack Reeves (AMNH)", URL = "https://www.amnh.org/research/hayden-planetarium/digital-universe", License = "AMNH Digital Universe" } diff --git a/data/assets/scene/digitaluniverse/grids.asset b/data/assets/scene/digitaluniverse/grids.asset index 2823482079..d36526ba0d 100644 --- a/data/assets/scene/digitaluniverse/grids.asset +++ b/data/assets/scene/digitaluniverse/grids.asset @@ -3,7 +3,7 @@ local earthTransforms = asset.require("scene/solarsystem/planets/earth/transform -local speck = asset.syncedResource({ +local speck = asset.resource({ Name = "Grids Speck Files", Type = "HttpSynchronization", Identifier = "digitaluniverse_grids_speck", @@ -66,85 +66,20 @@ local RadioSphere = { }, GUI = { Name = "Radio Sphere", - Path = "/Other/Grids" - } -} - -local OortSphere = { - Identifier = "OortSphere", - Parent = transforms.SolarSystemBarycenter.Name, - Transform = { - Scale = { - Type = "StaticScale", - Scale = 7.47989845E15 - }, - Rotation = { - Type = "StaticRotation", - Rotation = EclipticRotationMatrix - } - }, - Renderable = { - Type = "RenderableSphericalGrid", - Enabled = false, - Opacity = 0.8, - Color = { 0.8, 0.4, 0.4 }, - LineWidth = 2.0 - }, - GUI = { - Name = "Oort Sphere", - Path = "/Other/Grids" - } -} - -local EclipticSphere = { - Identifier = "EclipticSphere", - Parent = transforms.SolarSystemBarycenter.Name, - Transform = { - Scale = { - Type = "StaticScale", - Scale = 9.46377307652E17 - }, - Rotation = { - Type = "StaticRotation", - Rotation = EclipticRotationMatrix - } - }, - Renderable = { - Type = "RenderableSphericalGrid", - Enabled = false, - Opacity = 1.0, - Color = { 0.74, 0.26, 0.26 }, - LineWidth = 2.0 - }, - GUI = { - Name = "Ecliptic Sphere", - Path = "/Other/Grids" - } -} - -local EclipticSphereLabels = { - Identifier = "EclipticSphereLabels", - Parent = transforms.SolarSystemBarycenter.Name, - Renderable = { - Type = "RenderableBillboardsCloud", - Enabled = false, - Labels = { - Enabled = true, - File = speck .. "eclip.label", - Color = { 0.5, 0.5, 0.5 }, - Size = 14.75, - MinMaxSize = { 1, 50 }, - Unit = "pc", - TransformationMatrix = EclipticTransformationMatrix - }, - Color = { 1.0, 1.0, 1.0 }, - Opacity = 0.65, - Unit = "pc", - TransformationMatrix = EclipticTransformationMatrix - }, - GUI = { - Name = "Ecliptic Sphere Labels", - Path = "/Other/Grids" + Path = "/Milky Way/Grids", + Description = [[The radio sphere describes the theoretical extent of Earth's radio + signals in space. Before television carrier waves, early-warning radar first used + in World War II, and the detonation of atomic weapons, Earth was radio-quiet to the + universe (AM and FM radio signals bounce off the atmosphere and do not escape it). + After the use of these and other radio emitters began, in the late 1930s and early + 1940s, signals were able to escape the atmosphere and travel into space at the speed + of light. Since then, we have been broadcasting to the universe. We mention earlier + that this is the theoretical extent of these signals. In reality, these signals + will dissipate rapidly into the ambient cosmic noise of the universe. All light + falls off as the square of the distance, and radio waves are no different. The + signals that emanate from Earth are likely lost in the noise before they leave the + solar system, but the radio sphere remains a visually compelling astronomical + concept.]] } } @@ -154,7 +89,7 @@ local EquatorialSphere = { Transform = { Scale = { Type = "StaticScale", - Scale = 4.28601E17 + Scale = 80 * LightYear }, Rotation = { Type = "StaticRotation", @@ -164,13 +99,16 @@ local EquatorialSphere = { Renderable = { Type = "RenderableSphericalGrid", Enabled = false, - Opacity = 0.8, - Color = { 0.69, 0.68, 0.29 }, - LineWidth = 2.0 + Opacity = 1.0, + Color = { 0.3, 0.3, 0.15 }, + LineWidth = 2.0, + GridSegments = { 18, 24 }, }, GUI = { - Name = "Equatorial Sphere", - Path = "/Other/Grids" + Name = "Equatorial Coordinates", + Path = "/Night Sky/Coordinate Systems/Equatorial", + Description = [[An 80-light-year sphere representing equatorial coordinates (right + ascension and declination).]] } } @@ -178,7 +116,7 @@ local EquatorialSphereLabels = { Identifier = "EquatorialSphereLabels", Parent = transforms.SolarSystemBarycenter.Name, Renderable = { - Type = "RenderableBillboardsCloud", + Type = "RenderablePointCloud", Enabled = false, Labels = { Enabled = true, @@ -189,14 +127,70 @@ local EquatorialSphereLabels = { Unit = "pc", TransformationMatrix = EquatorialTransformationMatrix }, - Color = { 1.0, 1.0, 1.0 }, Opacity = 0.65, Unit = "pc", TransformationMatrix = EquatorialTransformationMatrix }, GUI = { - Name = "Equatorial Sphere Labels", - Path = "/Other/Grids" + Name = "Equatorial Coordinates Labels", + Path = "/Night Sky/Coordinate Systems/Equatorial", + Description = [[Labels on a sphere representing right ascension in hours and + declination in degrees.]] + } +} + +local EclipticSphere = { + Identifier = "EclipticSphere", + Parent = transforms.SolarSystemBarycenter.Name, + Transform = { + Scale = { + Type = "StaticScale", + Scale = 100 * LightYear + }, + Rotation = { + Type = "StaticRotation", + Rotation = EclipticRotationMatrix + } + }, + Renderable = { + Type = "RenderableSphericalGrid", + Enabled = false, + Opacity = 1.0, + Color = { 0.3, 0.15, 0.15 }, + LineWidth = 2.0 + }, + GUI = { + Name = "Ecliptic Coordinates", + Path = "/Night Sky/Coordinate Systems/Ecliptic", + Description = [[A 100-light-year sphere representing ecliptic coordinates (ecliptic + longitude and latitude).]] + } +} + +local EclipticSphereLabels = { + Identifier = "EclipticSphereLabels", + Parent = transforms.SolarSystemBarycenter.Name, + Renderable = { + Type = "RenderablePointCloud", + Enabled = false, + Labels = { + Enabled = true, + File = speck .. "eclip.label", + Color = { 0.5, 0.5, 0.5 }, + Size = 14.5, + MinMaxSize = { 1, 50 }, + Unit = "pc", + TransformationMatrix = EclipticTransformationMatrix + }, + Opacity = 0.65, + Unit = "pc", + TransformationMatrix = EclipticTransformationMatrix + }, + GUI = { + Name = "Ecliptic Coordinates Labels", + Path = "/Night Sky/Coordinate Systems/Ecliptic", + Description = [[Labels on a sphere representing ecliptic longitude and latitude in + degrees.]] } } @@ -206,7 +200,7 @@ local GalacticSphere = { Transform = { Scale = { Type = "StaticScale", - Scale = 9.46377307652E18 + Scale = 1000 * LightYear } }, Renderable = { @@ -214,11 +208,13 @@ local GalacticSphere = { Enabled = false, LineWidth = 2.0, Opacity = 1.0, - Color = { 0.0, 0.6, 0.6 } + Color = { 0.05, 0.25, 0.25 } }, GUI = { - Name = "Galactic Sphere", - Path = "/Other/Grids" + Name = "Galactic Coordinates", + Path = "/Night Sky/Coordinate Systems/Galactic", + Description = [[A 1000-light-year sphere representing galactic coordinates (galactic + longitude and latitude).]] } } @@ -226,23 +222,24 @@ local GalacticSphereLabels = { Identifier = "GalacticSphereLabels", Parent = transforms.SolarSystemBarycenter.Name, Renderable = { - Type = "RenderableBillboardsCloud", + Type = "RenderablePointCloud", Enabled = false, Labels = { Enabled = true, File = speck .. "galac.label", Color = { 0.5, 0.5, 0.5 }, - Size = 15.8, + Size = 15.5, MinMaxSize = { 1, 100 }, Unit = "pc" }, - Color = { 1.0, 1.0, 1.0 }, Opacity = 0.65, Unit = "pc" }, GUI = { - Name = "Galactic Sphere Labels", - Path = "/Other/Grids" + Name = "Galactic Coordinates Labels", + Path = "/Night Sky/Coordinate Systems/Galactic", + Description = [[Labels on a sphere representing galactic longitude and latitude in + degrees.]] } } @@ -261,7 +258,7 @@ local Plane1lh = { Labels = { File = speck .. "1lh.label", Color = { 0.0, 0.2, 0.5 }, - Size = 9.5, + Size = 8.9, MinMaxSize = { 0, 30 }, Unit = "Km" }, @@ -272,8 +269,10 @@ local Plane1lh = { Size = { 2 * LightHour, 2 * LightHour } }, GUI = { - Name = "1lh Grid", - Path = "/Other/Grids" + Name = "1-light-hour Grid", + Path = "/Solar System/Grids", + Description = [[A 1-light-hour Cartesian grid aligned on the plane of the Solar System.]], + OrderingNumber = LightHour } } @@ -303,8 +302,10 @@ local Plane1ld = { Size = { 2 * LightDay, 2 * LightDay } }, GUI = { - Name = "1ld Grid", - Path = "/Other/Grids" + Name = "1-light-day Grid", + Path = "/Solar System/Grids", + Description = [[A 1-light-day Cartesian grid aligned on the plane of the Solar System.]], + OrderingNumber = LightDay } } @@ -334,8 +335,10 @@ local Plane1lm = { Size = { 2 * LightMonth, 2 * LightMonth } }, GUI = { - Name = "1lm Grid", - Path = "/Other/Grids" + Name = "1-light-month Grid", + Path = "/Solar System/Grids", + Description = [[A 1-light-month Cartesian grid aligned on the plane of the Solar System.]], + OrderingNumber = LightMonth } } @@ -365,8 +368,10 @@ local Plane1ly = { Size = { 2 * LightYear, 2 * LightYear } }, GUI = { - Name = "1ly Grid", - Path = "/Other/Grids" + Name = "1-light-year Grid", + Path = "/Solar System/Grids", + Description = [[A 1-light-year Cartesian grid aligned on the plane of the Solar System.]], + OrderingNumber = LightYear } } @@ -396,8 +401,10 @@ local Plane10ly = { Size = { 10 * 2 * LightYear, 10 * 2 * LightYear } }, GUI = { - Name = "10ly Grid", - Path = "/Other/Grids" + Name = "10-light-year Grid", + Path = "/Milky Way/Grids", + Description = [[A 10-light-year Cartesian grid aligned on the plane of the Solar System.]], + OrderingNumber = 10 * LightYear } } @@ -427,8 +434,10 @@ local Plane100ly = { Size = { 100 * 2 * LightYear, 100 * 2 * LightYear } }, GUI = { - Name = "100ly Grid", - Path = "/Other/Grids" + Name = "100-light-year Grid", + Path = "/Milky Way/Grids", + Description = [[A 100-light-year Cartesian grid aligned on the plane of the Solar System.]], + OrderingNumber = 100 * LightYear } } @@ -458,8 +467,10 @@ local Plane1kly = { Size = { 1000 * 2 * LightYear, 1000 * 2 * LightYear } }, GUI = { - Name = "1kly Grid", - Path = "/Other/Grids" + Name = "1,000-light-year Grid", + Path = "/Milky Way/Grids", + Description = [[A 1,000-light-year Cartesian grid aligned on the plane of the Solar System.]], + OrderingNumber = 1000 * LightYear } } @@ -489,8 +500,10 @@ local Plane10kly = { Size = { 10000 * 2 * LightYear, 10000 * 2 * LightYear } }, GUI = { - Name = "10kly Grid", - Path = "/Other/Grids" + Name = "10,000-light-year Grid", + Path = "/Milky Way/Grids", + Description = [[A 10,000-light-year Cartesian grid aligned on the plane of the Solar System.]], + OrderingNumber = 10000 * LightYear } } @@ -502,7 +515,7 @@ local Plane100kly = { Labels = { File = speck .. "100kly.label", Color = { 0.0, 0.2, 0.5 }, - Size = 18.6, + Size = 18.0, MinMaxSize = { 0, 30 }, Unit = "Mpc" }, @@ -515,8 +528,10 @@ local Plane100kly = { Size = { 100000 * 2 * LightYear, 100000 * 2 * LightYear } }, GUI = { - Name = "100kly Grid", - Path = "/Other/Grids" + Name = "100,000-light-year Grid", + Path = "/Universe/Grids", + Description = [[A 100,000-light-year Cartesian grid aligned on the plane of the Milky Way.]], + OrderingNumber = 100000 * LightYear } } @@ -528,7 +543,7 @@ local Plane1Mly = { Labels = { File = speck .. "1Mly.label", Color = { 0.0, 0.2, 0.5 }, - Size = 19.6, + Size = 19.0, MinMaxSize = { 0, 30 }, Unit = "Mpc" }, @@ -541,8 +556,10 @@ local Plane1Mly = { Size = { 1E6 * 2 * LightYear, 1E6 * 2 * LightYear } }, GUI = { - Name = "1Mly Grid", - Path = "/Other/Grids" + Name = "1-million-light-year Grid", + Path = "/Universe/Grids", + Description = [[A 1-million-light-year Cartesian grid aligned on the plane of the Milky Way.]], + OrderingNumber = 1E6 * LightYear } } @@ -554,7 +571,7 @@ local Plane10Mly = { Labels = { File = speck .. "10Mly.label", Color = { 0.0, 0.2, 0.5 }, - Size = 20.6, + Size = 20.3, MinMaxSize = { 0, 30 }, Unit = "Mpc" }, @@ -567,8 +584,10 @@ local Plane10Mly = { Size = { 10E6 * 2 * LightYear, 10E6 * 2 * LightYear } }, GUI = { - Name = "10Mly Grid", - Path = "/Other/Grids" + Name = "10-million-light-year Grid", + Path = "/Universe/Grids", + Description = [[A 10-million-light-year Cartesian grid aligned on the plane of the Milky Way.]], + OrderingNumber = 10E6 * LightYear } } @@ -580,7 +599,7 @@ local Plane100Mly = { Labels = { File = speck .. "100Mly.label", Color = { 0.0, 0.2, 0.5 }, - Size = 21.6, + Size = 20.9, MinMaxSize = { 0, 30 }, Unit = "Mpc" }, @@ -593,8 +612,10 @@ local Plane100Mly = { Size = { 100E6 * 2 * LightYear, 100E6 * 2 * LightYear } }, GUI = { - Name = "100Mly Grid", - Path = "/Other/Grids" + Name = "100-million-light-year Grid", + Path = "/Universe/Grids", + Description = [[A 100-million-light-year Cartesian grid aligned on the plane of the Milky Way.]], + OrderingNumber = 100E6 * LightYear } } @@ -606,7 +627,7 @@ local Plane20Gly = { Labels = { File = speck .. "20Gly.label", Color = { 0.0, 0.2, 0.5 }, - Size = 23.6, + Size = 23.1, MinMaxSize = { 0, 30 }, Unit = "Mpc" }, @@ -619,15 +640,16 @@ local Plane20Gly = { Size = { 20E9 * 2 * LightYear, 20E9 * 2 * LightYear } }, GUI = { - Name = "20Gly Grid", - Path = "/Other/Grids" + Name = "20-billion-light-year Grid", + Path = "/Universe/Grids", + Description = [[A 20-billion-light-year Cartesian grid aligned on the plane of the Milky Way.]], + OrderingNumber = 20E9 * LightYear } } asset.onInitialize(function() openspace.addSceneGraphNode(RadioSphere) - openspace.addSceneGraphNode(OortSphere) openspace.addSceneGraphNode(EclipticSphere) openspace.addSceneGraphNode(EclipticSphereLabels) openspace.addSceneGraphNode(EquatorialSphere) @@ -673,7 +695,6 @@ asset.onDeinitialize(function() end) asset.export(RadioSphere) -asset.export(OortSphere) asset.export(EclipticSphere) asset.export(EclipticSphereLabels) asset.export(EquatorialSphere) @@ -698,14 +719,14 @@ asset.export(Plane20Gly) asset.meta = { Name = "Grids", - Version = "2.1", - Description = [[Various grids for showing size reference. Included: 10,000 light year - grid, 10 light year grid, 20 billion light year grid, 10 million light year grid, - 100 light year grid, 100 million light year grid, Ecliptic Coordinate Sphere - (500-light-year radius), Galactic Coordinate Sphere (1000-light-year radius), - Galaxy Coordinate Grid, Celestial Coordinates / Radio Sphere (dynamic radius), 1 - billion light year grid, Celestial Coordinate Sphere (1000000-light-year radius), - 1,000 light year grid, 1 million light year grid, 1 light year grid]], + Description = [[Various grids and spheres for showing size reference. Included: + 10,000 light year grid, 10 light year grid, 20 billion light year grid, 10 million + light year grid, 100 light year grid, 100 million light year grid, Ecliptic + Coordinate Sphere (500-light-year radius), Galactic Coordinate Sphere + (1000-light-year radius), Galaxy Coordinate Grid, Celestial Coordinates / Radio Sphere + (dynamic radius), 1 billion light year grid, Celestial Coordinate Sphere + (1000000-light-year radius), 1,000 light year grid, 1 million light year grid, + 1 light year grid.]], Author = "Brian Abbott (AMNH)", URL = "https://www.amnh.org/research/hayden-planetarium/digital-universe", License = "AMNH Digital Universe" diff --git a/data/assets/scene/digitaluniverse/groups.asset b/data/assets/scene/digitaluniverse/groups.asset deleted file mode 100644 index 6279d5cbd1..0000000000 --- a/data/assets/scene/digitaluniverse/groups.asset +++ /dev/null @@ -1,66 +0,0 @@ -local speck = asset.syncedResource({ - Name = "Galaxy Groups Speck Files", - Type = "HttpSynchronization", - Identifier = "digitaluniverse_groups_speck", - Version = 1 -}) - - -local TransformMatrix = { - -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 -} - -local Object = { - Identifier = "NearbyGalaxyGroups", - Renderable = { - Type = "RenderableBillboardsCloud", - Enabled = false, - Labels = { - Enabled = true, - File = speck .. "groups.label", - Color = { 0.1, 0.6, 0.2 }, - Size = 21.5, - MinMaxSize = { 8, 20 }, - Unit = "Mpc", - TransformationMatrix = TransformMatrix - }, - Color = { 1.0, 1.0, 1.0 }, - Opacity = 0.65, - --ScaleFactor = 10.0, - Unit = "Mpc", - TransformationMatrix = TransformMatrix - }, - GUI = { - Name = "Galaxy Group Labels", - Path = "/Universe/Galaxies", - Description = [[Census: 62 galaxy group labels. DU Version 1.2.
The Galaxy - Groups data are a set of labels that mark the nearby galaxy groups. The Milky Way - is in the Local Group, and we are surrounded by many other groups.(Description - from URL)

Data Reference: Brian Abbott (AMNH)]] - } -} - - -asset.onInitialize(function() - openspace.addSceneGraphNode(Object) -end) - -asset.onDeinitialize(function() - openspace.removeSceneGraphNode(Object) -end) - -asset.export(Object) - - - -asset.meta = { - Name = "Galaxy Group Labels", - Version = "1.1", - Author = "Brian Abbott (AMNH)", - Description = "Digital Universe asset for Galaxy Groups", - URL = "https://www.amnh.org/research/hayden-planetarium/digital-universe", - License = "AMNH Digital Universe" -} diff --git a/data/assets/scene/digitaluniverse/h2regions.asset b/data/assets/scene/digitaluniverse/h2regions.asset index 30e7f29607..21f88f9a7f 100644 --- a/data/assets/scene/digitaluniverse/h2regions.asset +++ b/data/assets/scene/digitaluniverse/h2regions.asset @@ -1,22 +1,22 @@ -local textures = asset.syncedResource({ +local textures = asset.resource({ Name = "HII Regions Textures", Type = "HttpSynchronization", Identifier = "digitaluniverse_h2regions_textures", Version = 1 }) -local speck = asset.syncedResource({ +local speck = asset.resource({ Name = "HII Regions Speck Files", Type = "HttpSynchronization", Identifier = "digitaluniverse_h2regions_speck", - Version = 3 + Version = 4 }) local Object = { Identifier = "HIIRegions", Renderable = { - Type = "RenderableBillboardsCloud", + Type = "RenderablePolygonCloud", Enabled = false, Labels = { File = speck .. "h2.label", @@ -25,30 +25,31 @@ local Object = { MinMaxSize = { 4, 20 }, Unit = "pc" }, - Color = { 0.0, 0.5, 1.0 }, + Coloring = { + FixedColor = { 0.0, 0.5, 1.0 } + }, Opacity = 0.70, File = speck .. "h2.speck", - Texture = textures .. "point4.png", PolygonSides = 6, Unit = "pc", - ScaleFactor = 420.0, - BillboardMinMaxSize = { 0.0, 300.0 }, - EnablePixelSizeControl = false + SizeSettings = { + ScaleExponent = 18.5, + MaxSize = 8.0, + EnableMaxSizeControl = true + } }, GUI = { Name = "HII Regions", - Path = "/Milky Way", - Description = [[Census: 1,271 nebulae. DU Version 4.6.
H ii (pronounced - H-two) regions are stellar nurseries for newborn stars. Stars are born from - condensing clouds of hydrogen gas. As these clouds condense, the densities - become high enough to form stars. From Earth's perspective, you'll notice that - the H ii regions all lie close to the Galactic plane. This is not an accident - of nature. These star-forming regions lie in the plane of the Galaxy because - that is where star formation occurs in spiral galaxies such as our Milky Way. - Because of this, they are great tracers of the spiral arms of the Galaxy, and - were instrumental in our understanding of the Galaxy's overall structure - (Description from URL)

Data Reference: The WISE catalog of Galactic - HII Regions (Anderson+, 2014)]] + Path = "/Milky Way/Nebulae", + Description = [[HII (pronounced "H-two") regions are stellar nurseries for newborn + stars. Stars are born from condensing clouds of hydrogen gas. As these clouds + condense, the densities become high enough to form stars. An HII region is the + surrounding clouds of hydrogen that glow from the stars born within them. The + result is a bright, glowing nebula which is seen to great distances. One local + celebrity among HII regions is the Orion Nebula (M42). These star-forming regions + lie in the plane of the Galaxy because that is where star formation occurs in + spiral galaxies such as our Milky Way. Because of this, they are great tracers of + the spiral arms of the Galaxy. Census: 1,108 star-forming regions.]] } } @@ -67,9 +68,7 @@ asset.export(Object) asset.meta = { Name = "HII Regions", - Version = "1.1", - Description = "Digital Universe asset for HII Regions", - Author = "Carter Emmart, Brian Abbott (AMNH)", + Description = Object.GUI.Description, URL = "https://www.amnh.org/research/hayden-planetarium/digital-universe", License = "AMNH Digital Universe" } diff --git a/data/assets/scene/digitaluniverse/hdf.asset b/data/assets/scene/digitaluniverse/hdf.asset index 46416d9722..68585a4aa7 100644 --- a/data/assets/scene/digitaluniverse/hdf.asset +++ b/data/assets/scene/digitaluniverse/hdf.asset @@ -1,18 +1,18 @@ -local circle = asset.syncedResource({ +local circle = asset.resource({ Name = "Circle", Type = "HttpSynchronization", Identifier = "circle_image", Version = 1 }) -local HUDFSpeck = asset.syncedResource({ +local HUDFSpeck = asset.resource({ Name = "HUDF Speck", Type = "HttpSynchronization", Identifier = "digitaluniverse_hudf_speck", Version = 1 }) -local ColorMap = asset.syncedResource({ +local ColorMap = asset.resource({ Name = "HUDF color map", Type = "HttpSynchronization", Identifier = "digitaluniverse_hudf_textures", @@ -23,19 +23,22 @@ local ColorMap = asset.syncedResource({ local Object = { Identifier = "HubbleDeepField", Renderable = { - Type = "RenderableBillboardsCloud", + Type = "RenderablePointCloud", Enabled = false, - Color = { 1.0, 1.0, 1.0 }, Opacity = 1.0, File = HUDFSpeck .. "hudf.speck", - Texture = circle .. "circle.png", - ColorMap = ColorMap .. "hudf.cmap", - ColorOption = { "redshift", "proximity" }, - ColorRange = { { 0.0, 0.075 }, { 1.0, 25.0 } }, + Texture = { + File = circle .. "circle.png", + }, + Coloring = { + ColorMapping = { + File = ColorMap .. "hudf.cmap" + } + }, Unit = "Mpc", - ScaleFactor = 505.0, - BillboardMaxSize = 4.7, - EnablePixelSizeControl = true + SizeSettings = { + ScaleExponent = 21.9 + } }, GUI = { Name = "Hubble Deep Field", @@ -62,7 +65,6 @@ asset.export(Object) asset.meta = { Name = "Hubble Ultra Deep Field", - Version = "1.2", Description = "Hubble Ultra Deep Field galaxy survey", Author = "Frank Summers (STScI), Brian Abbott (AMNH)", URL = "http://www.haydenplanetarium.org/universe", diff --git a/data/assets/scene/digitaluniverse/local_group_dwarfs.asset b/data/assets/scene/digitaluniverse/local_group_dwarfs.asset new file mode 100644 index 0000000000..4535910ce0 --- /dev/null +++ b/data/assets/scene/digitaluniverse/local_group_dwarfs.asset @@ -0,0 +1,83 @@ +local textures = asset.resource({ + Name = "Local Dwarfs Textures", + Type = "HttpSynchronization", + Identifier = "digitaluniverse_localdwarfs_textures", + Version = 1 +}) + +local speck = asset.resource({ + Name = "Local Dwarfs Speck Files", + Type = "HttpSynchronization", + Identifier = "digitaluniverse_localdwarfs_speck", + Version = 2 +}) + + +local Object = { + Identifier = "LocalDwarfGalaxies", + Renderable = { + Type = "RenderablePolygonCloud", + Enabled = false, + Opacity = 0.3, + File = speck .. "localgroup.speck", + Labels = { + File = speck .. "localgroup.label", + Color = { 0.3, 0.3, 1.0 }, + Size = 18.4, + MinMaxSize = { 7, 20 }, + Unit = "Mpc" + }, + Coloring = { + FixedColor = { 0.5, 1.0, 1.0 }, + ColorMapping = { + File = speck .. "localgroup.cmap", + ParameterOptions = { + { Key = "association" } + } + } + }, + PolygonSides = 12, + Unit = "Mpc", + SizeSettings = { + ScaleExponent = 20.77, + MaxSize = 0.7, + EnableMaxSizeControl = true + } + }, + GUI = { + Name = "Local Group", + Path = "/Universe/Nearby Surveys", + Description = [[A group of galaxies is typically composed of a small number of large + galaxies that are surrounded by a large number of small galaxies. The Milky Way + belongs to the Local Group, and is one of roughly 100 galaxies in that group. The + Milky Way, the Andromeda Galaxy (also known as Messier 31, or M31), and the + Triangulum Galaxy (M33) are three of the largest galaxies in the Local Group. Each + is a spiral galaxy containing hundreds of billions of stars. Surrounding the Milky + Way and Andromeda are a bevy of dwarf galaxies--smaller, often irregular galaxies, + that contain hundreds of millions to a few billion stars. Colors: Aqua are galaxies + associated with the Milky Way, Yellow shows galaxies huddled around the Andromeda + Galaxy, Green are other Local Group members, and Gray are neighboring galaxies not + in the Local Group. Census: 102 galaxies.]] + } +} + + +asset.onInitialize(function() + openspace.addSceneGraphNode(Object) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Object) +end) + +asset.export(Object) + + + +asset.meta = { + Name = "Local Group", + Description = Object.GUI.Description, + Author = "Brian Abbott (AMNH)", + URL = "https://www.amnh.org/research/hayden-planetarium/digital-universe", + License = "AMNH Digital Universe" +} diff --git a/data/assets/scene/digitaluniverse/localdwarfs.asset b/data/assets/scene/digitaluniverse/localdwarfs.asset deleted file mode 100644 index e18fc4b7a7..0000000000 --- a/data/assets/scene/digitaluniverse/localdwarfs.asset +++ /dev/null @@ -1,77 +0,0 @@ -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 = 2 -}) - - -local Object = { - Identifier = "LocalDwarfGalaxies", - Renderable = { - Type = "RenderableBillboardsCloud", - Enabled = false, - Labels = { - File = speck .. "localgroup.label", - Color = { 0.3, 0.3, 1.0 }, - Size = 18.3, - MinMaxSize = { 7, 20 }, - Unit = "Mpc" - }, - Color = { 0.5, 1.0, 0.2 }, - ColorMap = speck .. "localgroup.cmap", - ColorOption = { "association" }, - Opacity = 0.3, - File = speck .. "localgroup.speck", - Texture = textures .. "point4.png", - PolygonSides = 12, - Unit = "Mpc", - ScaleFactor = 465.0, - BillboardMinMaxSize = { 0.0, 20.0 }, - EnablePixelSizeControl = true - }, - GUI = { - Name = "Local Group", - Path = "/Universe/Galaxies", - Description = [[Census: 102 galaxies. DU Version 6.4.
A group of galaxies is - a small number of large galaxies that are typically surrounded by a large - number of small galaxies. The Milky Way belongs to the Local Group, and is one - of roughly 100 galaxies in that group. The Milky Way, the Andromeda Galaxy - (also known as Messier 31, or M31), and the Triangulum Galaxy (M33) are three - of the largest galaxies in the Local Group. Each is a spiral galaxy containing - hundreds of billions of stars. Surrounding the Milky Way and Andromeda are a - bevy of dwarf galaxies-smaller, often irregular galaxies, that contain - hundreds of millions to a few billion stars. (Description from URL)

- Data Reference: Properties of dwarf galaxies in the Local Group - (McConnachie+, 2012)]] - } -} - - -asset.onInitialize(function() - openspace.addSceneGraphNode(Object) -end) - -asset.onDeinitialize(function() - openspace.removeSceneGraphNode(Object) -end) - -asset.export(Object) - - - -asset.meta = { - Name = "Local Group", - Version = "2.1", - Description = "Digital Universe asset for the Local Goup", - Author = "Brian Abbott (AMNH)", - URL = "https://www.amnh.org/research/hayden-planetarium/digital-universe", - License = "AMNH Digital Universe" -} diff --git a/data/assets/scene/digitaluniverse/milkyway.asset b/data/assets/scene/digitaluniverse/milkyway.asset index 98544a780f..dd9cf291d0 100644 --- a/data/assets/scene/digitaluniverse/milkyway.asset +++ b/data/assets/scene/digitaluniverse/milkyway.asset @@ -1,67 +1,71 @@ -local planeTextures = asset.syncedResource({ +local textures = asset.resource({ Name = "Milky Way Plane Textures", Type = "HttpSynchronization", Identifier = "digitaluniverse_milkyway_textures", Version = 2 }) -local planeSpeck = asset.syncedResource({ +local speck = asset.resource({ Name = "Milky Way Plane Speck", Type = "HttpSynchronization", Identifier = "digitaluniverse_milkyway_speck", - Version = 1 + Version = 3 }) -local Plane = { +local Object = { Identifier = "MilkyWayGalaxyImage", - Parent = "Root", Renderable = { - Type = "RenderablePlanesCloud", - Enabled = true, - Color = { 1.0, 1.0, 1.0 }, + Type = "RenderablePointCloud", Opacity = 0.99, - ScaleFactor = 2.8, - File = planeSpeck .. "galaxy.speck", - TexturePath = planeTextures, - Luminosity = "size", - ScaleLuminosity = 1.0, - FadeInDistances = { 3000.0, 50000.0 }, - PlaneMinSize = 5.0, - Unit = "pc" + File = speck .. "galaxy.speck", + Texture = { + Folder = textures + }, + -- Use fixed orientation, and rotate planes based on orientation information in + -- the dataset + OrientationRenderOption = "Fixed Rotation", + UseOrientationData = true, + Unit = "pc", + Fading = { + FadeInDistances = { 16000.0, 100000.0 } -- Fade in value in the same unit as "Unit" + }, + SizeSettings = { + SizeMapping = { + ParameterOptions = { "size" } + }, + ScaleExponent = 16.936 + }, }, GUI = { Name = "Milky Way Galaxy Image", - Path = "/Milky Way", - Description = [[Census: 1 image. DU Version 2.2.
The exterior view of the - Milky Way is simply a two-dimensional image. The image is that of NGC 1232, a - galaxy thought to resemble our Milky Way. The image has been properly sized - and approximately oriented to function as a placeholder, allowing one to see - the context of the Galaxy relative to other data in the atlas. The features - you see in the image, of course, do not represent our Galaxy, per se, but - resemble similar features found in our Galaxy.(Description from URL) -

Data Reference: European Southern Observatory]] + Path = "/Milky Way/Galaxy", + Description = [[The exterior view of the Milky Way is represented here by a + two-dimensional image. The image is that of NGC 1232, a galaxy thought to resemble + our Milky Way. The image has been properly sized and approximately oriented to + function as a placeholder, allowing one to see the context of the Galaxy relative + to other data in the atlas. The features you see in the image, of course, do not + represent our Galaxy, per se, but resemble similar features found in our Galaxy. + Census: 1 image.]] } } asset.onInitialize(function() - openspace.addSceneGraphNode(Plane) + openspace.addSceneGraphNode(Object) end) asset.onDeinitialize(function() - openspace.removeSceneGraphNode(Plane) + openspace.removeSceneGraphNode(Object) end) -asset.export(Plane) +asset.export(Object) asset.meta = { Name = "MilkyWay Galaxy", - Version = "2.1", - Description = [[Digital Universe asset containt 2D image of the MilkyWay. For - extragalactic viewing]], + Description = Object.GUI.Description, Author = "Brian Abbott, Carter Emmart (AMNH)", URL = "https://www.amnh.org/research/hayden-planetarium/digital-universe", License = "AMNH Digital Universe" diff --git a/data/assets/scene/digitaluniverse/milkyway_arm_labels.asset b/data/assets/scene/digitaluniverse/milkyway_arm_labels.asset index 4ff17170e0..10e31e117c 100644 --- a/data/assets/scene/digitaluniverse/milkyway_arm_labels.asset +++ b/data/assets/scene/digitaluniverse/milkyway_arm_labels.asset @@ -1,43 +1,54 @@ -local planeTextures = asset.syncedResource({ +local textures = asset.resource({ Name = "Milky Way Plane Textures", Type = "HttpSynchronization", Identifier = "digitaluniverse_milkyway_textures", Version = 2 }) -local planeSpeck = asset.syncedResource({ +local speck = asset.resource({ Name = "Milky Way Plane Speck", Type = "HttpSynchronization", Identifier = "digitaluniverse_milkyway_speck", - Version = 1 + Version = 3 }) local Object = { Identifier = "MilkyWayGalaxyArmLabelsImage", - Parent = "Root", Renderable = { - Type = "RenderablePlanesCloud", + Type = "RenderablePointCloud", Enabled = false, - Color = { 1.0, 1.0, 1.0 }, Opacity = 0.99, - ScaleFactor = 2.8, - File = planeSpeck .. "galaxyArmLabels.speck", - TexturePath = planeTextures, - Luminosity = "size", - ScaleLuminosity = 1.0, - FadeInDistances = { 3000.0, 50000.0 }, - PlaneMinSize = 5.0, - Unit = "pc" + File = speck .. "galaxyArmLabels.speck", + Texture = { + Folder = textures + }, + -- Use fixed orientation, and rotate planes based on orientation information in + -- the dataset + OrientationRenderOption = "Fixed Rotation", + UseOrientationData = true, + Unit = "pc", + Fading = { + FadeInDistances = { 8000.0, 140000.0 } -- Fade in value in the same unit as "Unit" + }, + SizeSettings = { + SizeMapping = { + ParameterOptions = { "size" } + }, + ScaleExponent = 16.936 + }, }, GUI = { Name = "Milky Way Arms Labels", - Path = "/Milky Way", - Description = [[Census: 1 image. DU Version: 1.2. This image contains labels for - the Milky Way's spiral arms. We label them in this manner ("hard coding" the - labels into an image rather than having native labels) so that they can retain - their size, shape, and location as they overlay the galaxy. (Description from - Digital Universe Data Profiles)]] + Path = "/Milky Way/Galaxy", + Description = [[This is an image that contains labels for the Milky Way's spiral + arms. We label them in this manner--"hard-coding" the labels into an image rather + than having native labels--so that they can retain their size, shape, and location + as they overlay the galaxy. These labels are designed to be a guide, and they map + more accurately to the various datasets in the Digital Universe. For example, the + pulsars, the star-forming (HII) regions, and open clusters all show the local spiral + structure. We can use trends in these data sets to map the arms of the Milky Way. + Census: 1 image.]] } } @@ -56,28 +67,8 @@ asset.export(Object) asset.meta = { Name = "Milky Way Arms Labels", - Version = "1.1", - Description = "Image with arm labels for the Milky Way galaxy", + Description = Object.GUI.Description, Author = "Brian Abbott (AMNH)", URL = "https://www.amnh.org/research/hayden-planetarium/digital-universe", - License = [[Copyright © American Museum of Natural History. All rights reserved. -

Downloading the Atlas: AMNH offers the Atlas free of charge via our - website, http://www.haydenplanetarium.org/. The User is free to download and/or - duplicate verbatim copies of the Atlas provided this license and copyright - information accompany the Atlas.

Modifying the Atlas: The user is free to - modify the Atlas by either adding data or altering existing data, provided it is - for personal use only. Once the user modifies the Atlas, it is no longer part of - AMNH's Atlas and cannot be used publicly alongside or within the Atlas without - written permission from AMNH.

Distributing the Atlas: The user is - forbidden to distribute and use the Atlas for profit, as part of a software and/or - production system that will subsequently be redistributed, or for public - consumption (via print, electronic media, or broadcast/produced pieces) without - written permission from AMNH.

Neither the names of American Museum of - Natural History and Hayden Planetarium nor the names of their contributors may be - used to endorse or promote products derived from this Atlas without specific, - prior written permission.

The Atlas is free but is offered WITHOUT ANY - WARRANTY of any kind. We provide the Atlas as is and take no responsibility for - any damage resulting from the use of this Atlas. The entire risk as to the quality - and performance of this product is with the user.

For more information, - please visit http://www.haydenplanetarium.org/universe]] + License = "AMNH Digital Universe" } diff --git a/data/assets/scene/digitaluniverse/milkyway_label.asset b/data/assets/scene/digitaluniverse/milkyway_label.asset index d4431cb0eb..5393556afc 100644 --- a/data/assets/scene/digitaluniverse/milkyway_label.asset +++ b/data/assets/scene/digitaluniverse/milkyway_label.asset @@ -1,22 +1,19 @@ -local homespeck = asset.syncedResource({ +local transforms = asset.require("./transforms") + + + +local homespeck = asset.resource({ Name = "Home Speck File", Type = "HttpSynchronization", Identifier = "digitaluniverse_home_speck", Version = 1 }) -local TransformMatrix = { - -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 -} - -local HomeLabel = { +local Object = { Identifier = "HomeLabel", Renderable = { - Type = "RenderableBillboardsCloud", + Type = "RenderablePointCloud", Enabled = false, Labels = { Enabled = true, @@ -25,41 +22,33 @@ local HomeLabel = { Size = 20.50, MinMaxSize = { 16, 20 }, Unit = "Mpc", - TransformationMatrix = TransformMatrix - }, - Color = { 1.0, 0.4, 0.2 }, - Opacity = 0.99, - ScaleFactor = 500.0, - Unit = "Mpc", - TransformationMatrix = TransformMatrix, - FadeInDistances = { 0.05, 1.0 }, - BillboardMinMaxSize = { 0.0, 8.22 }, - EnablePixelSizeControl = true + TransformationMatrix = transforms.Supergalactic + } }, GUI = { Name = "Home Label", - Path = "/Universe/Galaxies", - Description = "Label for the Milky Way titled 'Home', sided for the galactic level" + Path = "/Universe/Nearby Surveys", + Description = [[Label for the Milky Way titled 'Home', sized for viewing outside + the Milky Way Galaxy.]] } } asset.onInitialize(function() - openspace.addSceneGraphNode(HomeLabel) + openspace.addSceneGraphNode(Object) end) asset.onDeinitialize(function() - openspace.removeSceneGraphNode(HomeLabel) + openspace.removeSceneGraphNode(Object) end) -asset.export(HomeLabel) +asset.export(Object) asset.meta = { Name = "Home Label", - Version = "1.1", - Description = "Label for the Milky Way titled 'Home', sided for the galactic level", + Description = Object.GUI.Description, Author = "OpenSpace Team", URL = "http://openspaceproject.com", License = "MIT license" diff --git a/data/assets/scene/digitaluniverse/milkyway_sphere.asset b/data/assets/scene/digitaluniverse/milkyway_sphere.asset deleted file mode 100644 index 65ed5cab71..0000000000 --- a/data/assets/scene/digitaluniverse/milkyway_sphere.asset +++ /dev/null @@ -1,58 +0,0 @@ -local sphereTextures = asset.syncedResource({ - Name = "Milky Way Sphere Textures", - Type = "HttpSynchronization", - Identifier = "milkyway_textures", - Version = 2 -}) - - -local Sphere = { - Identifier = "MilkyWay", - Transform = { - Rotation = { - Type = "StaticRotation", - Rotation = { 0, 0, math.pi } - } - }, - Renderable = { - Type = "RenderableSphere", - Size = 9.2E21, - Segments = 40, - Opacity = 0.25, - Texture = sphereTextures .. "DarkUniverse_mellinger_4k.jpg", - Orientation = "Inside", - MirrorTexture = true, - FadeOutThreshold = 0.0015, - Background = true, - DimInAtmosphere = true - }, - Tag = { "daytime_hidden" }, - GUI = { - Name = "Milky Way Sphere", - Path = "/Milky Way", - Description = [[All sky image of the Milky Way that is visible when inside. Fades - out when zooming away from the Milky Way]] - } -} - - -asset.onInitialize(function() - openspace.addSceneGraphNode(Sphere) -end) - -asset.onDeinitialize(function() - openspace.removeSceneGraphNode(Sphere) -end) - -asset.export(Sphere) - - - -asset.meta = { - Name = "Milky Way Galaxy Sphere", - Version = "2.1", - Description = "All sky image of the Milky Way", - Author = "OpenSpace Team", - URL = "http://openspaceproject.com", - License = "MIT license" -} diff --git a/data/assets/scene/digitaluniverse/obassociations.asset b/data/assets/scene/digitaluniverse/obassociations.asset index 72f5c036e3..ad3a01a619 100644 --- a/data/assets/scene/digitaluniverse/obassociations.asset +++ b/data/assets/scene/digitaluniverse/obassociations.asset @@ -1,22 +1,22 @@ -local textures = asset.syncedResource({ +local textures = asset.resource({ Name = "OB Associations Textures", Type = "HttpSynchronization", Identifier = "digitaluniverse_obassociations_textures", Version = 1 }) -local speck = asset.syncedResource({ +local speck = asset.resource({ Name = "OB Associations Speck Files", Type = "HttpSynchronization", Identifier = "digitaluniverse_obassociations_speck", - Version = 3 + Version = 4 }) local Object = { Identifier = "OBAssociations", Renderable = { - Type = "RenderableBillboardsCloud", + Type = "RenderablePolygonCloud", Enabled = false, Labels = { File = speck .. "ob.label", @@ -25,34 +25,37 @@ local Object = { MinMaxSize = { 4, 25 }, Unit = "pc" }, - Color = { 1.0, 1.0, 1.0 }, - ColorMap = speck .. "ob.cmap", - ColorOption = { "arm" }, - SizeOption = { "diameter" }, - ExactColorMap = true, + Coloring = { + ColorMapping = { + File = speck .. "ob.cmap", + ParameterOptions = { + { Key = "arm" } + } + } + }, Opacity = 0.7, File = speck .. "ob.speck", Unit = "pc", - Texture = textures .. "point4.png", PolygonSides = 7, - ScaleFactor = 390.0, - BillboardMinMaxSize = { 0.0, 450.0 }, - EnablePixelSizeControl = true + SizeSettings = { + SizeMapping = { + ParameterOptions = { "diameter" } + }, + ScaleExponent = 16.9, + MaxSize = 17, + EnableMaxSizeControl = true + } }, GUI = { Name = "OB Associations", - Path = "/Milky Way", - Description = [[Census: 61 OB associations. DU Version 2.4.
OB associations - are young groups of stars that were formed within a giant molecular cloud, but - have dispersed after the original gas and dust from the cloud was blown away - by the star's radiation pressure. Although an association's stars are no - longer gravitationally bound to one another, they share a common motion in - space because they were formed from the same cloud. This allows astronomers to - easily determine OB association membership stars. These objects are color - coded by their spiral arm membership. Blue associations trace the Sagittarius - Arm. Purple associations are in the local Orion Spur. Orange associations are - in the Perseus Arm (Description from URL)

Data Reference: New List of - OB Associations (Melnik+)]] + Path = "/Milky Way/Star Clusters", + Description = [[Stellar associations are loose agglomerations of stars that form from + the same gas cloud. OB associations typically have on the order of dozens of O and + B stars in them (hotter, massive, younger stars) in addition to cooler stars. Over + time the stars dispurse and the association is less concentrated. These associations + track relatviey recent star formation. Colors: Blue trace the Sagittarius Arm, + Purple are in the local Orion Spur, and Orange are in the Perseus Arm. Census: 61 OB + associations.]] } } @@ -71,9 +74,8 @@ asset.export(Object) asset.meta = { Name = "OB Associations", - Version = "2.1", - Description = "Digital Universe asset for OB Associations", - Author = "Brian Abbott (AMNH)", + Description = Object.GUI.Description, + Author = "Brian Abbott, Zack Reeves (AMNH)", URL = "https://www.amnh.org/research/hayden-planetarium/digital-universe", License = "AMNH Digital Universe" } diff --git a/data/assets/scene/digitaluniverse/oort_cloud.asset b/data/assets/scene/digitaluniverse/oort_cloud.asset new file mode 100644 index 0000000000..52c9e45384 --- /dev/null +++ b/data/assets/scene/digitaluniverse/oort_cloud.asset @@ -0,0 +1,72 @@ +local transforms = asset.require("scene/solarsystem/sun/transforms") + + + +local speck = asset.resource({ + Name = "Grids Speck Files", + Type = "HttpSynchronization", + Identifier = "digitaluniverse_grids_speck", + Version = 3 +}) + + +local EclipticRotationMatrix = { + -0.05487554, 0.4941095, -0.8676661, + -0.9938214 , -0.1109906, -0.0003515167, + -0.09647644, 0.8622859, 0.4971472 +} + +local Object = { + Identifier = "OortSphere", + Parent = transforms.SolarSystemBarycenter.Name, + Transform = { + Scale = { + Type = "StaticScale", + Scale = 7.47989845E15 + }, + Rotation = { + Type = "StaticRotation", + Rotation = EclipticRotationMatrix + } + }, + Renderable = { + Type = "RenderableSphericalGrid", + Enabled = false, + Opacity = 0.8, + Color = { 0.4, 0.3, 0.2 }, + LineWidth = 2.0, + Segments = 24 + }, + GUI = { + Name = "Oort Sphere", + Path = "/Solar System/Comets", + Description = [[The Oort cloud is a region of space surrounding the Sun where comets + are believed to originate. It is believed to extend from 20,000-100,000 Astronomical + Units (AU), with its greatest concentration around 50,000 AU (1 AU is the average + Earth-Sun distance, which equals 149 million kilometers, or 93 million miles). We + represent the Oort cloud with a 50,000-AU-radius, wire-frame sphere representing + the location of the central concentration. Fifty thousand astronomical units is + equal to about 10 light months, which is 0.8 light years, or 4.8 trillion miles.]] + } +} + + +asset.onInitialize(function() + openspace.addSceneGraphNode(Object) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Object) +end) + +asset.export(Object) + + + +asset.meta = { + Name = "Oort Cloud Sphere", + Description = Object.GUI.Description, + Author = "Brian Abbott (AMNH)", + URL = "https://www.amnh.org/research/hayden-planetarium/digital-universe", + License = "AMNH Digital Universe" +} diff --git a/data/assets/scene/digitaluniverse/openclusters.asset b/data/assets/scene/digitaluniverse/openclusters.asset index dd7197b1ca..035b42cda3 100644 --- a/data/assets/scene/digitaluniverse/openclusters.asset +++ b/data/assets/scene/digitaluniverse/openclusters.asset @@ -1,55 +1,52 @@ -local textures = asset.syncedResource({ +local textures = asset.resource({ Name = "Open Clusters Textures", Type = "HttpSynchronization", Identifier = "digitaluniverse_openclusters_textures", Version = 1 }) -local speck = asset.syncedResource({ +local speck = asset.resource({ Name = "Open Clusters Speck Files", Type = "HttpSynchronization", Identifier = "digitaluniverse_openclusters_speck", - Version = 3 + Version = 4 }) local Object = { Identifier = "OpenStarClusters", Renderable = { - Type = "RenderableBillboardsCloud", + Type = "RenderablePolygonCloud", Enabled = false, Labels = { File = speck .. "oc.label", - Color = { 0.05, 0.4, 0.2 }, + Color = { 0.0, 0.36, 0.14 }, Size = 15.5, MinMaxSize = { 4, 30 }, Unit = "pc" }, - Color = { 0.1, 0.8, 0.4 }, - Opacity = 0.5, + Coloring = { + FixedColor = { 0.13, 0.99, 0.50 } + }, + Opacity = 0.9, File = speck .. "oc.speck", Unit = "pc", - Texture = textures .. "point4.png", PolygonSides = 12, - ScaleFactor = 405.75, - BillboardMinMaxSize = { 0.0, 604.0 }, - EnablePixelSizeControl = true + SizeSettings = { + ScaleExponent = 17.8, + MaxSize = 23.0, + EnableMaxSizeControl = true + } }, GUI = { Name = "Open Star Clusters", - Path = "/Milky Way", - Description = [[Census: 1,867 clusters. DU Version 7.8.
An open star cluster is a - loose assemblage of stars numbering from hundreds to thousands that are bound by - their mutual gravitation. Astronomers know from their stellar spectra that stars in - open clusters are typically young. (With a star's spectrum, we can determine the - spectral type and the luminosity class, revealing the star's age.) Because these are + Path = "/Milky Way/Star Clusters", + Description = [[An open star cluster is a loose assemblage of stars numbering from + hundreds to thousands that are bound by their mutual gravitation. Because these are young stars, we expect to see them in the star-forming regions of our Galaxy, namely in the spiral arms. For this reason, open clusters exist, for the most part, in the - plane of the Galaxy, where we view the arms edge-on as that band of light in the - night sky. Because of this, open clusters were originally known as Galactic - clusters, but this term fell out of favor once astronomers began to understand that - the Galaxy includes objects beyond the Milky Way's disk.

Data Reference: - Galactic spiral structure revealed by Gaia EDR3 (Poggio+, 2021)]] + plane of the Galaxy and indicate relatively recent star formation. Census: 1,867 star + clusters.]] } } @@ -68,9 +65,8 @@ asset.export(Object) asset.meta = { Name = "Open Star Clusters", - Version = "2.1", - Description = "Digital Universe asset for Open Star Clusters", - Author = "Brian Abbott (AMNH)", + Description = Object.GUI.Description, + Author = "Brian Abbott, Zack Reeves (AMNH)", URL = "https://www.amnh.org/research/hayden-planetarium/digital-universe", License = "AMNH Digital Universe" } diff --git a/data/assets/scene/digitaluniverse/planetarynebulae.asset b/data/assets/scene/digitaluniverse/planetarynebulae.asset index afff444408..68ce205538 100644 --- a/data/assets/scene/digitaluniverse/planetarynebulae.asset +++ b/data/assets/scene/digitaluniverse/planetarynebulae.asset @@ -1,51 +1,56 @@ -local textures = asset.syncedResource({ +local textures = asset.resource({ Name = "Planetary Nebulae Textures", Type = "HttpSynchronization", Identifier = "digitaluniverse_planetarynebulae_textures", Version = 1 }) -local speck = asset.syncedResource({ +local speck = asset.resource({ Name = "Planetary Nebulae Speck Files", Type = "HttpSynchronization", Identifier = "digitaluniverse_planetarynebulae_speck", - Version = 2 + Version = 3 }) local Object = { Identifier = "PlanetaryNebulae", Renderable = { - Type = "RenderableBillboardsCloud", + Type = "RenderablePolygonCloud", Enabled = false, Labels = { File = speck .. "pn.label", - Color = { 0.25, 0.25, 0.65 }, + Color = { 0.35, 0.35, 0.60 }, Size = 16.24, MinMaxSize = { 4, 25 }, Unit = "pc" }, - Color = { 0.4, 0.4, 0.9 }, - Opacity = 0.65, + Coloring = { + FixedColor = { 0.4, 0.4, 0.9 } + }, + Opacity = 0.99, File = speck .. "pn.speck", - Texture = textures .. "point4.png", PolygonSides = 3, Unit = "pc", - ScaleFactor = 425.0, - BillboardMinMaxSize = { 0.0, 500.0 }, - EnablePixelSizeControl = true + SizeSettings = { + ScaleExponent = 18.2, + MaxSize = 19.0, + EnableMaxSizeControl = true + } }, GUI = { Name = "Planetary Nebulae", - Path = "/Milky Way", - Description = [[Census: 283 nebulae. DU Version 2.8.
A planetary nebula is an - expanding shell of gas ejected from a star late in its life cycle. Appearing - like greenish disks to a telescopic observer, planetary nebulae received their - name from their resemblance to the gaseous planets of our solar system. In no - way are they related to planets, rather, they are products of dying stars. - (Description from URL)

Data Reference: Planetary Nebulae distances - in Gaia DR2 (Kimeswenger+, 2018), Strasbourg-ESO Catalog of Planetary Nebulae - (Acker+ 1992)]] + Path = "/Milky Way/Nebulae", + Description = [[A planetary nebula is an expanding shell of gas ejected from an + average-sized star late in its life cycle. Appearing like greenish disks to a + telescopic observer, planetary nebulae received their name from their resemblance to + the gaseous planets of our solar system. In no way are they related to planets, + rather, they are products of dying stars. As the gas from the star expands, it + sweeps up the cooler gas like a snowplow. The gas glows because of the ultraviolet + light from the stellar remnant at the center. Because the planetary nebula phase of + a star's evolution is relatively short, we observe only those that have occurred + recently in the younger stellar population. Therefore, we expect to see planetary + nebulae in the disk of the Galaxy. Census: 1,657 planetary nebulae.]] } } @@ -64,9 +69,8 @@ asset.export(Object) asset.meta = { Name = "Planetary Nebulae", - Version = "2.1", - Description = "Digital Universe asset for Planetary Nebulae", - Author = "Brian Abbott (AMNH)", + Description = Object.GUI.Description, + Author = "Brian Abbott, Zack Reeves (AMNH)", URL = "https://www.amnh.org/research/hayden-planetarium/digital-universe", License = "AMNH Digital Universe" } diff --git a/data/assets/scene/digitaluniverse/pulsars.asset b/data/assets/scene/digitaluniverse/pulsars.asset index e08ea7dbeb..82be71fa9b 100644 --- a/data/assets/scene/digitaluniverse/pulsars.asset +++ b/data/assets/scene/digitaluniverse/pulsars.asset @@ -1,55 +1,55 @@ -local textures = asset.syncedResource({ +local textures = asset.resource({ Name = "Pulsars Textures", Type = "HttpSynchronization", Identifier = "digitaluniverse_pulsars_textures", Version = 1 }) -local speck = asset.syncedResource({ +local speck = asset.resource({ Name = "Pulsars Speck Files", Type = "HttpSynchronization", Identifier = "digitaluniverse_pulsars_speck", - Version = 2 + Version = 3 }) local Object = { Identifier = "Pulsars", Renderable = { - Type = "RenderableBillboardsCloud", + Type = "RenderablePolygonCloud", Enabled = false, Labels = { - File = speck .. "pulsar.label", - Color = { 0.7, 0.2, 0.2 }, - Size = 15.77, + File = speck .. "pulsars.label", + Color = { 0.75, 0.21, 0.21 }, + Size = 15.27, MinMaxSize = { 4, 20 }, Unit = "pc" }, - Color = { 0.7, 0.0, 0.0 }, + Coloring = { + FixedColor = { 0.7, 0.0, 0.0 } + }, Opacity = 1.0, - File = speck .. "pulsar.speck", - Texture = textures .. "point4.png", + File = speck .. "pulsars.speck", PolygonSides = 4, Unit = "pc", - ScaleFactor = 424.0, - BillboardMinMaxSize = { 0.0, 500.0 }, - EnablePixelSizeControl = false + SizeSettings = { + ScaleExponent = 18.1, + MaxSize = 19.0, + EnableMaxSizeControl = true + } }, GUI = { Name = "Pulsars", - Path = "/Milky Way", - Description = [[Census: 2,498 pulsars. DU Version 5.6.
Upon death, stars - leave behind one of three possible remnants: a white dwarf, a neutron star, or - a black hole. Stars that are more massive than the sun will often become - neutron stars in a violent explosion called a supernova. During a supernova, - the core of the star collapses under such high pressure that the electrons, - which normally remain outside the atomic nucleus, are forced to combine with - the protons in the nucleus. Atomic nuclei break apart, producing what is - called a degenerate state of matter. The collapse is halted when the material - cannot be packed any tighter. At this point, the star has a radius of about - 10-15 kilometers. The density of this material is so high that a teaspoonful - would weigh about 100 million tons on Earth. (Description from URL)

- Data Reference: ATNF Pulsar Catalogue, (Manchester+, 2005)]] + Path = "/Milky Way/Stellar Remnants", + Description = [[A pulsar is a spinning neutron star, an ultra-dense stellar remnant + resulting from a supernova-driven collapse of the stellar core. Upon death, stars + leave behind one of three possible remnants: a white dwarf, a neutron star, or a + black hole. Stars that are more massive than the sun will often become neutron + stars in a violent explosion called a supernova. Pulsars are not pulsing but are + spinning neutron stars whose beams of radiation point toward Earth just as a + lighthouse sweeps the horizon. Their strong magnetic fields funnel beams of light + from its poles. When these beams point to Earth, we see a strong radio signal. + Census: 3,221 pulsars.]] } } @@ -68,9 +68,8 @@ asset.export(Object) asset.meta = { Name = "Pulsars", - Version = "2.1", - Description = "Digital Universe asset for Pulsars", - Author = "Brian Abbott (AMNH)", + Description = Object.GUI.Description, + Author = "Brian Abbott, Zack Reeves (AMNH)", URL = "https://www.amnh.org/research/hayden-planetarium/digital-universe", License = "AMNH Digital Universe" } diff --git a/data/assets/scene/digitaluniverse/quasars.asset b/data/assets/scene/digitaluniverse/quasars.asset index d78ba9cc68..d9482df27a 100644 --- a/data/assets/scene/digitaluniverse/quasars.asset +++ b/data/assets/scene/digitaluniverse/quasars.asset @@ -1,18 +1,18 @@ -local textures = asset.syncedResource({ - Name = "Quasars Textures", +local textures = asset.resource({ + Name = "Point Textures", Type = "HttpSynchronization", - Identifier = "digitaluniverse_quasars_textures", - Version = 2 + Identifier = "digitaluniverse_point_textures", + Version = 1 }) -local speck = asset.syncedResource({ +local speck = asset.resource({ Name = "Quasars Speck Files", Type = "HttpSynchronization", Identifier = "digitaluniverse_quasars_speck", - Version = 2 + Version = 3 }) -local colormaps = asset.syncedResource({ +local colormaps = asset.resource({ Name = "Quasars Colormap", Type = "HttpSynchronization", Identifier = "digitaluniverse_quasars_colormap", @@ -23,33 +23,40 @@ local colormaps = asset.syncedResource({ local Object = { Identifier = "Quasars", Renderable = { - Type = "RenderableBillboardsCloud", + Type = "RenderablePointCloud", Enabled = true, - Color = { 1.0, 0.4, 0.2 }, Opacity = 0.95, - File = speck .. "quasars.speck", - Texture = textures .. "point3A.png", + File = speck .. "qso.speck", + Texture = { + File = textures .. "point3A.png", + }, Unit = "Mpc", - ScaleFactor = 540.9, - FadeInDistances = { 1000.0, 10000.0 }, -- Fade in value in the same unit as "Unit" - BillboardMinMaxSize = { 0.0, 11.1 }, - EnablePixelSizeControl = true, - ColorMap = colormaps .. "viridis.cmap", - ColorOption = { "redshift", "Tlookback", "distMpc" }, - ColorRange = { { 0.102, 7.085 }, { 1.4, 13.0 }, { 440.5, 8852.099609 } }, - UseColorMap = false + Fading = { + FadeInDistances = { 1000.0, 10000.0 } -- Fade in value in the same unit as "Unit" + }, + Coloring = { + FixedColor = { 0.85, 0.35, 0.18 }, + ColorMapping = { + Enabled = false, + File = colormaps .. "viridis.cmap", + ParameterOptions = { + { Key = "lookback_time", Range = { 1.4, 13.0 } } + } + } + }, + SizeSettings = { + ScaleExponent = 23.5, + MaxSize = 0.3, + EnableMaxSizeControl = true + } }, GUI = { Name = "Quasars", - Path = "/Universe", - Description = [[Census: 569,442 quasars. DU Version 2.2.
- Quasars are the most distant objects we can see. They are extremely active - galaxies that contain supermassive black holes which are gobbling up material - at a furious rate. The Million Quasars Catalogue is an aggregate catalog of - several surveys, including 2dF and Sloan. So, it should not be surprising that - the shape of these data mimic the shape of the Sloan and 2dF galaxy surveys, - with large parts of the sky unobserved.(Description from URL)

Data - Reference: The Million Quasars catalog (Flesch, 2017)]] + Path = "/Universe/Deep Sky Surveys", + Description = [[Quasars are the most distant objects we see. They are extremely + active galaxies that contain supermassive black holes which gobble up material at a + furious rate. As the material falls into the black hole, it forms a disk and emits + high-energy light that we see to great distances. Census: 755,850 quasars.]] } } @@ -68,9 +75,8 @@ asset.export(Object) asset.meta = { Name = "Quasars", - Version = "2.1", - Description = "Digital Universe asset for Quasars", - Author = "Brian Abbott (AMNH)", + Description = Object.GUI.Description, + Author = "Brian Abbott, Sohum Udani (AMNH)", URL = "https://www.amnh.org/research/hayden-planetarium/digital-universe", License = "AMNH Digital Universe" } diff --git a/data/assets/scene/digitaluniverse/sdss.asset b/data/assets/scene/digitaluniverse/sdss.asset index 36925c1b4c..7d59a9d162 100644 --- a/data/assets/scene/digitaluniverse/sdss.asset +++ b/data/assets/scene/digitaluniverse/sdss.asset @@ -1,58 +1,59 @@ -local textures = asset.syncedResource({ - Name = "Sloan Digital Sky Survey Textures", +local textures = asset.resource({ + Name = "Point Textures", Type = "HttpSynchronization", - Identifier = "digitaluniverse_sloandss_textures", - Version = 2 + Identifier = "digitaluniverse_point_textures", + Version = 1 }) -local speck = asset.syncedResource({ +local speck = asset.resource({ Name = "Sloan Digital Sky Survey Speck Files", Type = "HttpSynchronization", Identifier = "digitaluniverse_sloandss_speck", - Version = 2 + Version = 4 }) local Object = { Identifier = "SloanDigitalSkySurvey", Renderable = { - Type = "RenderableBillboardsCloud", + Type = "RenderablePointCloud", Enabled = true, - Color = { 0.8, 0.8, 1.0 }, Opacity = 0.8, - ScaleFactor = 520.0, - File = speck .. "SDSSgals.speck", - ColorMap = speck .. "SDSSgals.cmap", - ColorOption = { "redshift", "proximity" }, - ColorRange = { { 0.0, 0.075 }, { 1.0, 50.0 } }, - Texture = textures .. "point3A.png", + File = speck .. "sdss.speck", + Coloring = { + FixedColor = { 0.8, 0.8, 1.0 }, + ColorMapping = { + File = speck .. "SDSSgals.cmap", + ParameterOptions = { + { Key = "num_nearby_galaxies", Range = { 1.0, 25.0 } } + } + } + }, + Texture = { + File = textures .. "point3A.png", + }, Unit = "Mpc", - FadeInDistances = { 220.0, 650.0 }, -- Fade in value in the same unit as "Unit" - BillboardMinMaxSize = { 0.0, 5.5 }, - CorrectionSizeEndDistance = 20.65, - CorrectionSizeFactor = 10.41, - TextSize = 14.8, - TextMinMaxSize = { 10, 50 }, - EnablePixelSizeControl = true + Fading = { + FadeInDistances = { 220.0, 650.0 } -- Fade in value in the same unit as "Unit" + }, + SizeSettings = { + ScaleExponent = 22.6, + MaxSize = 0.15, + EnableMaxSizeControl = true + } }, GUI = { Name = "Sloan Digital Sky Survey", - Path = "/Universe/Galaxies", - Description = [[Census: 2,600,258 galaxies. DU Version 10.6.
The Sloan Digital - Sky Survey (SDSS) is an ambitious project to image about 35% of the sky, deep - into the universe. The survey measured the position and brightness of almost 1 - billion objects, and obtained spectra to more than 4 million objects. This is - not an all-sky survey, so there are large parts of the sky that remain - unobserved, which produces the bow tie distribution and the black areas where - there surely are galaxies, but we have yet to observe them. These galaxies - appear to extend beyond the 2dF survey to distances that exceed 5 billion - light years. However, the weblike structure of clusters, filaments, and voids - seems to fade by about 2 billion light years. Beyond this distance, the - completeness of the survey drops so that only the intrinsically bright - galaxies are visible. The weblike cosmic structure is echoed in these data, - with orange clusters standing out among the less dense aqua-colored galaxies - and the less dense regions of green-colored galaxies. (Description from URL) -

Data Reference: Sloan Digital Sky Survey (http://www.sdss.org/)]] + Path = "/Universe/Deep Sky Surveys", + Description = [[The Sloan Digital Sky Survey (SDSS) is an ambitious project to image + about 35% of the sky, deep into the universe. The SDSS galaxies form triangular + wedges, revealing those parts of the sky observed by the telescope. If the entire + sky were covered, you would see a spherical distribution of galaxies surrounding + the Milky Way. With only 35% of the entire sky observed, we see only a few select + slices or larger wedgelike portions from that sphere. The weblike cosmic structure + is echoed in these data, with orange clusters standing out among the less dense + aqua-colored galaxies and the less dense regions of green-colored galaxies. + Census: 2,862,767 galaxies.]] } } @@ -70,10 +71,9 @@ asset.export(Object) asset.meta = { - Name = "Sloan Digital Sky Survey", - Version = "2.1", - Description = "Digital Universe asset for The Sloan Digital Sky Survey (SDSS)", - Author = "Brian Abbott (AMNH)", + Name = "Sloan Digital Sky Survey Galaxies", + Description = Object.GUI.Description, + Author = "Brian Abbott, Zack Reeves (AMNH), Eric Gawiser (Rutgers)", URL = "https://www.amnh.org/research/hayden-planetarium/digital-universe", License = "AMNH Digital Universe" } diff --git a/data/assets/scene/digitaluniverse/star_uncertainty.asset b/data/assets/scene/digitaluniverse/star_uncertainty.asset new file mode 100644 index 0000000000..2273022321 --- /dev/null +++ b/data/assets/scene/digitaluniverse/star_uncertainty.asset @@ -0,0 +1,65 @@ +local speck = asset.resource({ + Name = "Star Uncertainty Files", + Type = "HttpSynchronization", + Identifier = "digitaluniverse_star_uncertainty_data", + Version = 1 +}) + + +local Object = { + Identifier = "StarUncertainty", + Renderable = { + Type = "RenderableConstellationLines", + Enabled = false, + Labels = { + File = speck .. "star_uncertainty.label", + Opacity = 0.75, + Color = { 0.6, 0.6, 1.0 }, + Size = 14.1, + MinMaxSize = { 8, 170 }, + Unit = "pc" + }, + Opacity = 0.8, + LineWidth = 5.0, + File = speck .. "star_uncertainty.speck", + NamesFile = speck .. "star_uncertainty.dat", + Colors = { { 1.0, 1.0, 0.0 }, { 0.0, 0.8, 1.0 }, { 0.957, 0.51, 0.10 } }, + Unit = "pc", + DimInAtmosphere = true + }, + Tag = { "daytime_hidden" }, + GUI = { + Name = "Star Distance Uncertainty", + Path = "/Milky Way/Stars", + Description = [[The uncertainty of a star's position is derived from the uncertainty + in its parallax measurement. This results in a range in distance where the star + could exist. Here we draw lines on top of select stars which give us a visual cue + of the range in possible distances for that star. Colors: Aqua lines are stars with + Gaia geometric parallax measurements (the most accurate), orange lines indicate + stars with Hipparcos geometric parallaxes, and yellow lines are stars with Gaia + photogeomentric parallaxes (the least accurate). The label includes the star name + and the length of the uncertainty in light years. Census: 3,440 stars with + uncertainty.]] + } +} + + +asset.onInitialize(function() + openspace.addSceneGraphNode(Object) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Object) +end) + +asset.export(Object) + + + +asset.meta = { + Name = "Star Distance Uncertainty", + Description = Object.GUI.Description, + Author = "Brian Abbott, Zack Reeves (AMNH)", + URL = "https://www.amnh.org/research/hayden-planetarium/digital-universe", + License = "AMNH Digital Universe" +} diff --git a/data/assets/scene/digitaluniverse/starlabels.asset b/data/assets/scene/digitaluniverse/starlabels.asset index 052001c823..368ec4a330 100644 --- a/data/assets/scene/digitaluniverse/starlabels.asset +++ b/data/assets/scene/digitaluniverse/starlabels.asset @@ -1,32 +1,32 @@ -local speck = asset.syncedResource({ +local speck = asset.resource({ Name = "Star Labels Speck Files", Type = "HttpSynchronization", Identifier = "digitaluniverse_starlabels_speck", - Version = 2 + Version = 3 }) local Object = { Identifier = "StarsLabels", Renderable = { - Type = "RenderableBillboardsCloud", + Type = "RenderablePointCloud", Enabled = false, Labels = { Enabled = true, File = speck .. "stars.label", Color = { 0.4, 0.4, 0.4 }, - Size = 14.7, + Size = 14.4, MinMaxSize = { 6, 50 }, Unit = "pc" }, - Color = { 1.0, 1.0, 1.0 }, Opacity = 0.65, Unit = "pc" }, GUI = { Name = "Stars Labels", Path = "/Milky Way/Stars", - Description = "Labels for stars in the Milky Way. See 'Stars' for more info" + Description = [[Common name labels for nearby stars in the Milky Way. See 'Stars' + for more information.]] } } @@ -45,9 +45,8 @@ asset.export(Object) asset.meta = { Name = "Star Labels", - Version = "2.1", - Description = "Digital Universe asset for labels of the stars", - Author = "Brian Abbott (AMNH)", + Description = Object.GUI.Description, + Author = "Brian Abbott, Zack Reeves, Andrew Ayala, Jackie Faherty (AMNH)", URL = "https://www.amnh.org/research/hayden-planetarium/digital-universe", License = "AMNH Digital Universe" } diff --git a/data/assets/scene/digitaluniverse/starorbits.asset b/data/assets/scene/digitaluniverse/starorbits.asset index b56ebcdc5f..4efbe36beb 100644 --- a/data/assets/scene/digitaluniverse/starorbits.asset +++ b/data/assets/scene/digitaluniverse/starorbits.asset @@ -3,164 +3,137 @@ local earth_transforms = asset.require("scene/solarsystem/planets/earth/transfor -local speck = asset.syncedResource({ - Name = "Grids Speck Files", +local speck = asset.resource({ + Name = "Star Orbits Speck Files", Type = "HttpSynchronization", Identifier = "digitaluniverse_starorbits_speck", - Version = 1 + Version = 2 }) local SunOrbit = { Identifier = "SunOrbit", - --Parent = transforms.SolarSystemBarycenter.Name, Renderable = { Type = "RenderableDUMeshes", Enabled = false, Opacity = 1.0, File = speck .. "starorbits-Sun.speck", MeshColor = { { 1.0, 0.65, 0.0 } }, - --LabelFile = speck .. "1ld.label", - -- TextColor = { 0.0, 0.2, 0.5 }, - -- TextMinMaxSize = { 0, 30 }, Unit = "pc" }, GUI = { Name = "Sun Orbit", Path = "/Milky Way/Stars/Stars Orbits", - Description = "Orbits of the Sun around the Milky Way" + Description = [[Projected orbit of the Sun around the Milky Way over the next 1 + billion years.]] } } local BarnardsOrbit = { Identifier = "BarnardsOrbit", - --Parent = transforms.SolarSystemBarycenter.Name, Renderable = { Type = "RenderableDUMeshes", Enabled = false, Opacity = 1.0, File = speck .. "starorbits-BarnardsStar.speck", MeshColor = { { 0.39, 0.58, 0.93 } }, - --LabelFile = speck .. "1ld.label", - -- TextColor = { 0.0, 0.2, 0.5 }, - -- TextSize = 10.3, - -- TextMinMaxSize = { 0, 30 }, Unit = "pc" }, GUI = { Name = "Barnards Orbit", Path = "/Milky Way/Stars/Stars Orbits", - Description = "Orbits of Barnard's Star around the Milky Way" + Description = [[Projected orbit of Barnard's Star around the Milky Way over the next + 1 billion years.]] } } local KapteynsOrbit = { Identifier = "KapteynsOrbit", - --Parent = transforms.SolarSystemBarycenter.Name, Renderable = { Type = "RenderableDUMeshes", Enabled = false, Opacity = 1.0, File = speck .. "starorbits-KapteynsStar.speck", MeshColor = { { 0.6, 0.6, 0.6 } }, - --LabelFile = speck .. "1ld.label", - -- TextColor = { 0.0, 0.2, 0.5 }, - -- TextSize = 10.3, - -- TextMinMaxSize = { 0, 30 }, Unit = "pc" }, GUI = { Name = "Kapteyns Orbit", Path = "/Milky Way/Stars/Stars Orbits", - Description = "Orbits of Kapteyn's Star around the Milky Way" + Description = [[Projected orbit of Kapteyn's Star around the Milky Way over the next + 1 billion years.]] } } local Lacaille9352Orbit = { Identifier = "Lacaille9352Orbit", - --Parent = transforms.SolarSystemBarycenter.Name, Renderable = { Type = "RenderableDUMeshes", Enabled = false, Opacity = 1.0, File = speck .. "starorbits-Lacaille9352.speck", MeshColor = { { 0.58, 0.0, 0.83 } }, - --LabelFile = speck .. "1ld.label", - -- TextColor = { 0.0, 0.2, 0.5 }, - -- TextSize = 10.3, - -- TextMinMaxSize = { 0, 30 }, Unit = "pc" }, GUI = { Name = "Lacaille 9352 Orbit", Path = "/Milky Way/Stars/Stars Orbits", - Description = "Orbits of Lacaille9352 around the Milky Way" + Description = [[Projected orbit of Lacaille9352 around the Milky Way over the next + 1 billion years.]] } } local LSR1826Orbit = { Identifier = "LSR1826Orbit", - --Parent = transforms.SolarSystemBarycenter.Name, Renderable = { Type = "RenderableDUMeshes", Enabled = false, Opacity = 1.0, File = speck .. "starorbits-LSR1826+3014.speck", MeshColor = { { 0.0, 0.39, 0.0 } }, - --LabelFile = speck .. "1ld.label", - -- TextColor = { 0.0, 0.2, 0.5 }, - -- TextSize = 10.3, - -- TextMinMaxSize = { 0, 30 }, Unit = "pc" }, GUI = { Name = "LSR1826+3014 Orbit", Path = "/Milky Way/Stars/Stars Orbits", - Description = "Orbits of LSR1826+3014 around the Milky Way" + Description = [[Projected orbit of LSR1826+3014 around the Milky Way over the next 1 + billion years.]] } } local LSRJ0822Orbit = { Identifier = "LSRJ0822Orbit", - --Parent = transforms.SolarSystemBarycenter.Name, Renderable = { Type = "RenderableDUMeshes", Enabled = false, Opacity = 1.0, File = speck .. "starorbits-LSRJ0822+1700.speck", MeshColor = { { 0.5, 1.0, 0.0 } }, - --LabelFile = speck .. "1ld.label", - -- TextColor = { 0.0, 0.2, 0.5 }, - -- TextSize = 10.3, - -- TextMinMaxSize = { 0, 30 }, Unit = "pc" }, GUI = { Name = "LSRJ0822+1700 Orbit", Path = "/Milky Way/Stars/Stars Orbits", - Description = "Orbits of LSRJ0822+1700 around the Milky Way" + Description = [[Projected orbit of LSRJ0822+1700 around the Milky Way over the next 1 + billion years.]] } } local PM_J13420Orbit = { Identifier = "PM_J13420Orbit", - --Parent = transforms.SolarSystemBarycenter.Name, Renderable = { Type = "RenderableDUMeshes", Enabled = false, Opacity = 1.0, File = speck .. "starorbits-PM_J13420-3415.speck", MeshColor = { { 0.70, 0.13, 0.13 } }, - --LabelFile = speck .. "1ld.label", - -- TextColor = { 0.0, 0.2, 0.5 }, - -- TextSize = 10.3, - -- TextMinMaxSize = { 0, 30 }, Unit = "pc" }, GUI = { Name = "PM_J13420-3415 Orbit", Path = "/Milky Way/Stars/Stars Orbits", - Description = "Orbits of PM_J13420-3415 around the Milky Way" + Description = [[Projected orbit of PM_J13420-3415 around the Milky Way over the next + 1 billion years.]] } } @@ -197,12 +170,8 @@ asset.export(PM_J13420Orbit) asset.meta = { Name = "Star Orbits", - Version = "1.1", - Description = [[Select Star Orbital paths that delineate their trajectory around the - Milky Way over 1 billion years into the future. Included: Sun, Barnards, Kapteyns, - Lacaille 9352, LSR1826+3014, LSRJ0822+1700, PM_J13420-3415.

Data - Reference: Sebastien Lepine (AMNH)]], - Author = "Brian Abbott (AMNH)", + Description = [[Projected star orbits for selected stars over the next 1 billion years. Census: 7 star orbits.]], + Author = "Brian Abbott, Zack Reeves (AMNH)", URL = "https://www.amnh.org/research/hayden-planetarium/digital-universe", License = "AMNH Digital Universe" } diff --git a/data/assets/scene/digitaluniverse/stars.asset b/data/assets/scene/digitaluniverse/stars.asset index dd818db75b..ef29bce444 100644 --- a/data/assets/scene/digitaluniverse/stars.asset +++ b/data/assets/scene/digitaluniverse/stars.asset @@ -1,25 +1,25 @@ -local speck = asset.syncedResource({ +local speck = asset.resource({ Name = "Stars Speck Files", Type = "HttpSynchronization", Identifier = "stars_du", - Version = 5 + Version = 6 }) -local sunspeck = asset.syncedResource({ +local sunspeck = asset.resource({ Name = "Stars Speck Files", Type = "HttpSynchronization", Identifier = "digitaluniverse_sunstar_speck", Version = 1 }) -local colormaps = asset.syncedResource({ +local colormaps = asset.resource({ Name = "Stars Color Table", Type = "HttpSynchronization", Identifier = "stars_colormap", Version = 3 }) -local textures = asset.syncedResource({ +local textures = asset.resource({ Name = "Stars Textures", Type = "HttpSynchronization", Identifier = "stars_textures", @@ -32,13 +32,20 @@ local Stars = { Renderable = { Type = "RenderableStars", File = speck .. "stars.speck", - Texture = textures .. "halo.png", - --ShapeTexture = textures .. "disc.png", + Core = { + Texture = textures .. "glare.png", + Multiplier = 15.0, + Gamma = 1.66, + Scale = 0.18 + }, + Glare = { + Texture = textures .. "halo.png", + Multiplier = 0.65 + }, + MagnitudeExponent = 6.325, ColorMap = colormaps .. "colorbv.cmap", OtherDataColorMap = colormaps .. "viridis.cmap", - MagnitudeExponent = 6.2, SizeComposition = "Distance Modulus", - RenderMethod = "Texture Based", -- or PSF DataMapping = { Bv = "colorb_v", Luminance = "lum", @@ -55,13 +62,13 @@ local Stars = { GUI = { Name = "Stars", Path = "/Milky Way/Stars", - Description = [[Census: 116,584 stars with 321 labels.
DU Version 8.10. This - star catalog is a combination of all available star catalogs, wherein we - choose the best distance available to place the stars around the Sun as - accurately as is possible. (Description from URL)

Data Reference: - Gaia Data Release 3 (Gaia Collaboration, 2022); XHIP: An Extended Hipparcos - Compilation (Anderson E., Francis C. 2012); Hipparcos Catalog (European Space Agency - 1997); Gliese Catalog (Gliese and Jahriess 1991)]] + Description = [[These are the nearby stars that surround the Sun and are close enough + to get accurate distances. These include all the stars we see with the unaided eye + and many stars dimmer than that. Over the entire night sky, all year round, and in + the northern and southern hemispheres, we can see roughly 9,000 stars total with + the unaided eye. Stars are the light factories of the universe, and come in a + variety of sizes, colors, and brightnesses. The base catalog is Hipparcos, with Gaia + DR3 data applied for distance and velocity when available. Census: 112,746 stars.]] } } @@ -70,14 +77,21 @@ local SunStar = { Renderable = { Type = "RenderableStars", File = sunspeck .. "sunstar.speck", - Texture = textures .. "halo.png", - --ShapeTexture = textures .. "disc.png", + Core = { + Texture = textures .. "glare.png", + Multiplier = 1.0, + Scale = 0.1 + }, + Glare = { + Texture = textures .. "halo.png", + Multiplier = 0.55, + Gamma = 1.1, + Size = 0.95 + }, + MagnitudeExponent = 6.25, ColorMap = colormaps .. "colorbv.cmap", - MagnitudeExponent = 6.2, SizeComposition = "Distance Modulus", - RenderMethod = "Texture Based", -- or PSF - FadeInDistances = { 0.0001, 0.1 }, - RenderableType = "PostDeferredTransparent", + FadeInDistances = { 0.0075, 0.1 }, DataMapping = { Bv = "colorb_v", Luminance = "lum", @@ -91,10 +105,10 @@ local SunStar = { DimInAtmosphere = true }, GUI = { - Name = "Sun Star", + Name = "Sun", Path = "/Milky Way/Stars", - Description = [[Individual star to represent the sun when outside of the solar - system]] + Description = [[Individual star to represent the Sun when outside of the Solar + System.]] } } @@ -116,9 +130,8 @@ asset.export(SunStar) asset.meta = { Name = "Stars", - Version = "2.1", - Description = "Digital Universe asset for the stars", - Author = "Brian Abbott (AMNH)", + Description = Stars.GUI.Description, + Author = "Brian Abbott, Zack Reeves, Andrew Ayala, Jackie Faherty (AMNH)", URL = "https://www.amnh.org/research/hayden-planetarium/digital-universe", License = "AMNH Digital Universe" } diff --git a/data/assets/scene/digitaluniverse/superclusters.asset b/data/assets/scene/digitaluniverse/superclusters.asset index b40fe08b91..71c50f95ad 100644 --- a/data/assets/scene/digitaluniverse/superclusters.asset +++ b/data/assets/scene/digitaluniverse/superclusters.asset @@ -1,11 +1,11 @@ -local textures = asset.syncedResource({ - Name = "Galaxy Superclusters Textures", +local textures = asset.resource({ + Name = "Point Textures", Type = "HttpSynchronization", - Identifier = "digitaluniverse_superclusters_textures", - Version = 2 + Identifier = "digitaluniverse_point_textures", + Version = 1 }) -local speck = asset.syncedResource({ +local speck = asset.resource({ Name = "Galaxy Superclusters Speck Files", Type = "HttpSynchronization", Identifier = "digitaluniverse_superclusters_speck", @@ -16,8 +16,9 @@ local speck = asset.syncedResource({ local Object = { Identifier = "GalaxySuperclusters", Renderable = { - Type = "RenderableBillboardsCloud", + Type = "RenderablePointCloud", Enabled = false, + File = speck .. "superclust.speck", Labels = { Enabled = true, File = speck .. "superclust.label", @@ -27,24 +28,26 @@ local Object = { Unit = "Mpc" }, DrawElements = false, - Color = { 1.0, 1.0, 1.0 }, Opacity = 0.65, - File = speck .. "superclust.speck", - Texture = textures .. "point3A.png", + Texture = { + File = textures .. "point3A.png", + }, Unit = "Mpc", - ScaleFactor = 531.0, - -- BillboardMinMaxSize = { 0.0, 7.2 }, - EnablePixelSizeControl = true + SizeSettings = { + ScaleExponent = 23.1, + MaxSize = 0.2, + EnableMaxSizeControl = true + } }, GUI = { - Name = "Galaxy Superclusters", - Path = "/Universe/Galaxies", - Description = [[Census: 33 labels. DU Version 1.3.
The superclusters dataset - is a set of labels that mark the major galaxy superclusters in the local universe. - They correspond to, and should be viewed with, the Abell clusters. Astronomers - estimate there are 10 million superclusters in the observable universe. - (Description from URL)

Data Reference: Superclusters of Abell and X-ray - clusters (Einasto+, 2001)]] + Name = "Supercluster Labels", + Path = "/Universe/Deep Sky Surveys", + Description = [[The superclusters dataset is a set of labels that mark the major + galaxy superclusters in the local universe. They correspond to, and should be viewed + with, the Abell clusters. Astronomers estimate there are 10 million superclusters in + the observable universe. Often, they carry constellation names because they are + viewed in those constellations from our night-sky perspective. Census: 33 + supercluster labels.]] } } @@ -63,8 +66,7 @@ asset.export(Object) asset.meta = { Name = "Galaxy Superclusters", - Version = "2.1", - Description = "Digital Universe asset for Galaxy Superclusters", + Description = Object.GUI.Description, Author = "Brian Abbott (AMNH)", URL = "https://www.amnh.org/research/hayden-planetarium/digital-universe", License = "AMNH Digital Universe" diff --git a/data/assets/scene/digitaluniverse/supernovaremnants.asset b/data/assets/scene/digitaluniverse/supernovaremnants.asset index c0909ccd2c..3b890d0858 100644 --- a/data/assets/scene/digitaluniverse/supernovaremnants.asset +++ b/data/assets/scene/digitaluniverse/supernovaremnants.asset @@ -1,50 +1,55 @@ -local textures = asset.syncedResource({ +local textures = asset.resource({ Name = "Supernova Remnants Textures", Type = "HttpSynchronization", Identifier = "digitaluniverse_supernovaremnants_textures", Version = 1 }) -local speck = asset.syncedResource({ +local speck = asset.resource({ Name = "Supernova Remnants Speck Files", Type = "HttpSynchronization", Identifier = "digitaluniverse_supernovaremnants_speck", - Version = 2 + Version = 3 }) local Object = { Identifier = "SupernovaRemnants", Renderable = { - Type = "RenderableBillboardsCloud", + Type = "RenderablePolygonCloud", Enabled = false, Labels = { File = speck .. "snr.label", - Color = { 0.6, 0.46, 0.0 }, - Size = 16.44, + Color = { 0.51, 0.40, 0.04 }, + Size = 16.0, MinMaxSize = { 4, 100 }, Unit = "pc" }, - Color = { 1.0, 0.5, 0.0 }, + Coloring = { + FixedColor = { 1.0, 0.5, 0.0 } + }, Opacity = 0.32, File = speck .. "snr.speck", - Texture = textures .. "point4.png", PolygonSides = 7, Unit = "pc", - ScaleFactor = 424.0, - --CorrectionSizeEndDistance = 17.5, - --CorrectionSizeFactor = 13.96, - BillboardMinMaxSize = { 0.0, 500.0 }, - EnablePixelSizeControl = true + SizeSettings = { + ScaleExponent = 18.4, + MaxSize = 19.0, + EnableMaxSizeControl = true + } }, GUI = { Name = "Supernova Remnants", - Path = "/Milky Way", - Description = [[Census: 112 supernova remnants.
DU Version 3.7. A supernova - remnant is the ejected gas that results from a supernova. It glows for a - cosmically short period of time before mixing with the interstellar medium. - (Description from URL)

Data Reference: The First Fermi LAT SNR - Catalog (Acero+, 2016)]] + Path = "/Milky Way/Nebulae", + Description = [[A supernova remnant is the nebulous gas left over from a supernova + explosion. This gas expands at great speeds and rams into the surrounding + interstellar gas. This excites the surrounding gas and causes it to glow, producing + the nebulous cloud we observe from Earth. A supernova remnant contains a neutron + star or pulsar at its center, the core of the dying star. The cloud that enshrouds + the core does not last long, though. After about 50,000 years, the gas mixes into + the interstellar medium and no longer glows. Astronomically, this is a very short + time, so the supernova remnants we see must be left from explosions that have + occurred recently, cosmically speaking. Census: 112 supernova remnants.]] } } @@ -62,9 +67,8 @@ asset.export(Object) asset.meta = { Name = "Supernova Remnants", - Version = "2.1", - Description = "Digital Universe asset for Supernova Remnants", - Author = "Brian Abbott (AMNH)", + Description = Object.GUI.Description, + Author = "Brian Abbott, Zack Reeves (AMNH)", URL = "https://www.amnh.org/research/hayden-planetarium/digital-universe", License = "AMNH Digital Universe" } diff --git a/data/assets/scene/digitaluniverse/transforms.asset b/data/assets/scene/digitaluniverse/transforms.asset new file mode 100644 index 0000000000..7276eb0083 --- /dev/null +++ b/data/assets/scene/digitaluniverse/transforms.asset @@ -0,0 +1,19 @@ +local Supergalactic = { + -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 +} + +asset.export("Supergalactic", Supergalactic) + + + +asset.meta = { + Name = "Supergalactic Transformation", + Description = [[This asset defines the transformation matrix to convert supergalactic + coordinates into galactic coordinates.]], + Author = "OpenSpace Team", + URL = "https://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/digitaluniverse/tully.asset b/data/assets/scene/digitaluniverse/tully.asset index fe206f45bf..ba74452a65 100644 --- a/data/assets/scene/digitaluniverse/tully.asset +++ b/data/assets/scene/digitaluniverse/tully.asset @@ -1,29 +1,26 @@ -local textures = asset.syncedResource({ +local transforms = asset.require("./transforms") + + + +local textures = asset.resource({ Name = "Tully Textures", Type = "HttpSynchronization", Identifier = "digitaluniverse_tully_textures", Version = 3 }) -local speck = asset.syncedResource({ +local speck = asset.resource({ Name = "Tully Speck Files", Type = "HttpSynchronization", Identifier = "digitaluniverse_tully_speck", - Version = 2 + Version = 4 }) -local TransformMatrix = { - -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 -} - local TullyGalaxies = { Identifier = "TullyGalaxies", Renderable = { - Type = "RenderableBillboardsCloud", + Type = "RenderablePointCloud", Enabled = true, Labels = { File = speck .. "tully.label", @@ -31,79 +28,89 @@ local TullyGalaxies = { Size = 19.36, MinMaxSize = { 8, 20 }, Unit = "Mpc", - TransformationMatrix = TransformMatrix + TransformationMatrix = transforms.Supergalactic }, - Color = { 1.0, 0.4, 0.2 }, Opacity = 0.99, - ScaleFactor = 504.0, File = speck .. "tully.speck", - Texture = textures .. "point3A.png", - --ColorMap = speck .. "tully.cmap", - ColorMap = speck .. "lss.cmap", - --ColorOption = { "proximity" }, - ColorOption = { "prox5Mpc" }, - ColorRange = { { 1.0, 30.0 } }, + SkipFirstDataPoint = true, + Texture = { + File = textures .. "point3A.png" + }, + Coloring = { + FixedColor = { 1.0, 0.4, 0.2 }, + ColorMapping = { + File = speck .. "lss.cmap", + ParameterOptions = { + { Key = "prox5Mpc", Range = { 1.0, 30.0 } } + } + } + }, Unit = "Mpc", - TransformationMatrix = TransformMatrix, - FadeInDistances = { 0.001, 1.0 }, -- Fade in value in the same unit as "Unit" - BillboardMinMaxSize = { 0.0, 7.0 }, -- in pixels - --CorrectionSizeEndDistance = 22.0, - --CorrectionSizeFactor = 10.45 - EnablePixelSizeControl = true + TransformationMatrix = transforms.Supergalactic, + Fading = { + FadeInDistances = { 0.001, 1.0 } -- Fade in value in the same unit as "Unit" + }, + SizeSettings = { + ScaleExponent = 21.7, + MaxSize = 0.3, + EnableMaxSizeControl = true + } }, GUI = { Name = "Tully Galaxies", - Path = "/Universe/Galaxies", - Description = [[Census: 30,059 galaxies. DU Version 1.5.
The Tully Catalog is - the most polished, accurate catalog of nearby galaxies. It includes over 30,000 - galaxies in the local universe that surround the Milky Way. This catalog - demonstrates the large-scale structure of the universe exceptionally well. And, - each galaxy has a representative image reflecting its morphological type, and is - properly sized and inclined. Size and shape. The data form a cube, which is an + Path = "/Universe/Nearby Surveys", + Description = [[The Tully Catalog is the most polished, accurate catalog of nearby + galaxies. It includes over 30,000 galaxies in the local universe that surround the + Milky Way. This catalog demonstrates the large-scale structure of the universe + exceptionally well. Each galaxy has a representative image that is properly sized + and inclined and reflects its morphological type. The data form a cube, which is an arbitrary cutoff based on the completeness of these data. Beyond this, data from - these sources are not as reliable, so effort is made to show a complete picture, - albeit limited by observations (for example, we cannot see dwarf galaxies much - beyond the Local Group). The size of the cube is roughly 1 billion light years on - a diagonal (so the farthest galaxies in the dataset are about 1 billion light - years from the Milky Way), or about 700 million light years per side. -

Colors. Orange denotes more dense regions of the local universe, aqua is - given to galaxies in an intermediate-density area, and green is given to lower - density regions.(Description from URL)

Data Reference: Tully Galaxy - Catalog: Brent Tully (U Hawaii), Stuart Levy (NCSA/UIUC)]] + these sources are not as reliable. The size of the cube is roughly 1 billion light + years on a diagonal, or about 700 million light years per side. Colors: Orange + denotes more dense regions of the local universe, aqua is given to galaxies in an + intermediate-density area, and green is given to lower density regions. Census: + 30,059 galaxies.]] } } local TullyGalaxiesImages = { Identifier = "TullyGalaxiesImages", Renderable = { - Type = "RenderablePlanesCloud", - Enabled = true, - Color = { 1.0, 1.0, 1.0 }, + Type = "RenderablePointCloud", Opacity = 0.99, - ScaleFactor = 1.0, File = speck .. "tully.speck", - TexturePath = textures, - Luminosity = "diamkpc", - ScaleLuminosity = 0.001, - TransformationMatrix = TransformMatrix, + SkipFirstDataPoint = true, + Texture = { + Folder = textures + }, + TransformationMatrix = transforms.Supergalactic, + -- Use fixed orientation, and rotate planes based on orientation information in + -- the dataset + OrientationRenderOption = "Fixed Rotation", + UseOrientationData = true, Unit = "Mpc", - -- Fade in value in the same unit as "Unit" - FadeInDistances = {0.0005, 0.003}, - PlaneMinSize = 1.0 + Fading = { + FadeInDistances = { 0.0005, 0.003 } -- Fade in value in the same unit as "Unit" + }, + SizeSettings = { + SizeMapping = { + ParameterOptions = { "diamkpc" }, + ScaleFactor = "Kiloparsec" + }, + -- No exponential scaling, just use size mapping to set the correct size + ScaleExponent = 0.0 + } }, GUI = { Name = "Tully Galaxies Images", - Path = "/Universe/Galaxies", - Description = [[Each galaxy is represented by an image - that represents its morphological type (spiral, elliptical, etc.). Most of these - come from The Galaxy Catalog. A handful of nearby galaxies are represented by - their actual images, which come mostly from the National Optical Astronomy - Observatory (NOAO). Each of these images has been altered from its original state. - These images were taken from Earth on some of the world's largest telescopes, so - foreground stars from our own Galaxy appear in each image. We are representing - galaxies in extragalactic space, so we have removed the stars from each image. - (Description from URL)

Data Reference: Tully Galaxy Catalog: Brent Tully - (U Hawaii), Stuart Levy (NCSA/UIUC)]] + Path = "/Universe/Nearby Surveys", + Description = [[Each Tully galaxy is represented by an image that represents its + morphological type (spiral, elliptical, etc.). Most of these come from The Galaxy + Catalog. A handful of nearby galaxies are represented by their actual images, which + come mostly from the National Optical Astronomy Observatory (NOAO). Each of these + images has been altered from its original state. Taken from Earth, foreground stars + from our own Galaxy appear in each image and were removed. Census: 30,159 galaxy + images.]] } } @@ -125,9 +132,7 @@ asset.export(TullyGalaxiesImages) asset.meta = { Name = "Tully Galaxies", - Version = "3.1", - Description = [[Digital Universe asset for Tully Galaxies, including point cloud and - images]], + Description = TullyGalaxies.GUI.Description, Author = "Stuart Levy (NCSA/UIUC), Brian Abbott (AMNH)", URL = "https://www.amnh.org/research/hayden-planetarium/digital-universe", License = "AMNH Digital Universe" diff --git a/data/assets/scene/digitaluniverse/voids.asset b/data/assets/scene/digitaluniverse/voids.asset index d8dedcca5b..66dfd12df0 100644 --- a/data/assets/scene/digitaluniverse/voids.asset +++ b/data/assets/scene/digitaluniverse/voids.asset @@ -1,4 +1,4 @@ -local speck = asset.syncedResource({ +local speck = asset.resource({ Name = "Voids Speck Files", Type = "HttpSynchronization", Identifier = "digitaluniverse_voids_speck", @@ -9,7 +9,7 @@ local speck = asset.syncedResource({ local Object = { Identifier = "Voids", Renderable = { - Type = "RenderableBillboardsCloud", + Type = "RenderablePointCloud", Enabled = false, Labels = { Enabled = true, @@ -20,23 +20,20 @@ local Object = { Unit = "Mpc" }, DrawElements = false, - Color = { 1.0, 1.0, 1.0 }, Opacity = 0.65, Unit = "Mpc" }, GUI = { Name = "Voids", - Path = "/Universe/Galaxies", - Description = [[Census: 24 cosmic voids. DU Version 1.2.
Cosmic voids are - vast, empty spaces where there are either no galaxies, or very few galaxies. - They are associated with cold spots in the cosmic microwave background (CMB) - light, the earliest picture we have of the universe (see page 58). Those cold - spots in the CMB evolved into large voids, some as much as 300 million light - years in diameter. Labels roughly denote the location of cosmic voids in the - Tully galaxies. Voids are only visible with motion cuing as you spin around - these data. The labels help to guide the eye and provide sign posts for the - largest voids in our cosmic neighborhood. (Description from URL)

Data - Reference: various sources]] + Path = "/Universe/Nearby Surveys", + Description = [[Cosmic voids are vast, empty spaces where there are either no + galaxies, or very few galaxies. They are associated with cold spots in the cosmic + microwave background (CMB) light, the earliest picture we have of the universe. + Those cold spots in the CMB evolved into large voids, some as much as 300 million + light years in diameter. Labels roughly denote the location of cosmic voids in the + Tully galaxies. Voids are only visible with motion cuing as you spin around these + data. The labels help to guide the eye and provide sign posts for the largest voids + in our cosmic neighborhood. Census: 24 cosmic void labels.]] } } @@ -55,9 +52,8 @@ asset.export(Object) asset.meta = { Name = "Voids", - Version = "2.1", Author = "Brian Abbott (AMNH)", - Description = "Digital Universe asset for Cosmic voids", + Description = Object.GUI.Description, URL = "https://www.amnh.org/research/hayden-planetarium/digital-universe", License = "AMNH Digital Universe" } diff --git a/data/assets/scene/digitaluniverse/white_dwarfs.asset b/data/assets/scene/digitaluniverse/white_dwarfs.asset new file mode 100644 index 0000000000..4d0813d4e3 --- /dev/null +++ b/data/assets/scene/digitaluniverse/white_dwarfs.asset @@ -0,0 +1,67 @@ +local textures = asset.resource({ + Name = "Point Textures", + Type = "HttpSynchronization", + Identifier = "digitaluniverse_point_textures", + Version = 1 +}) + +local speck = asset.resource({ + Name = "White Dwarf Speck Files", + Type = "HttpSynchronization", + Identifier = "digitaluniverse_white_dwarfs_speck", + Version = 1 +}) + + +local Object = { + Identifier = "WhiteDwarfs", + Renderable = { + Type = "RenderablePointCloud", + Enabled = false, + File = speck .. "wd.speck", + Texture = { + File = textures .. "point3.png", + }, + Unit = "pc", + Coloring = { + FixedColor = { 1.0, 1.0, 1.0 }, + }, + SizeSettings = { + ScaleExponent = 15.5, + MaxSize = 0.7, + EnableMaxSizeControl = true + } + }, + GUI = { + Name = "White Dwarfs", + Path = "/Milky Way/Stellar Remnants", + Description = [[A white dwarf is the core of a dying star. These are dim objects that + are roughly the size of Earth but with the desity of a sunlike star. Stars that are + not massive enough to end in a neutraon star or black hole will evolve into a white + dwarf. This is the ultimate fate of over 95% of the stars in our Galaxy. As the + star is dying, the outer layers will expand out and the gas will glow and become a + planetaery nebula, while the core of the star transforms into a white dwarf. Census: + 192,613 white dwarfs.]] + } +} + + +asset.onInitialize(function() + openspace.addSceneGraphNode(Object) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Object) +end) + +asset.export(Object) + + + +asset.meta = { + Name = "White Dwarfs", + Description = Object.GUI.Description, + Author = "Zack Reeves, Brian Abbott (AMNH)", + URL = "https://www.amnh.org/research/hayden-planetarium/digital-universe", + License = "AMNH Digital Universe" +} diff --git a/data/assets/scene/milkyway/constellations/big_dipper.asset b/data/assets/scene/milkyway/constellations/big_dipper.asset new file mode 100644 index 0000000000..1df644491b --- /dev/null +++ b/data/assets/scene/milkyway/constellations/big_dipper.asset @@ -0,0 +1,57 @@ +local speck = asset.resource({ + Name = "Big Dipper Constellation Files", + Type = "HttpSynchronization", + Identifier = "digitaluniverse_constellations_bigdipper", + Version = 1 +}) + + +local BigDipper = { + Identifier = "BigDipperConstellation", + Renderable = { + Type = "RenderableConstellationLines", + Enabled = false, + Labels = { + File = speck .. "bigdipper.label", + Opacity = 0.3, + Color = { 0.8, 0.8, 0.8 }, + Size = 14.5, + MinMaxSize = { 8, 170 }, + Unit = "pc" + }, + Opacity = 0.3, + File = speck .. "bigdipper.speck", + NamesFile = speck .. "bigdipper.dat", + Colors = { { 0.6, 0.4, 0.4 }, { 0.8, 0.0, 0.0 }, { 0.0, 0.3, 0.8 } }, + Unit = "pc", + DimInAtmosphere = true + }, + Tag = { "daytime_hidden" }, + GUI = { + Name = "Big Dipper", + Path = "/Milky Way/Constellations", + Description = [[This item only draws the big dipper, and not the rest of the + lines of the Ursa Major constellation.]] + } +} + + +asset.onInitialize(function() + openspace.addSceneGraphNode(BigDipper) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(BigDipper) +end) + +asset.export(BigDipper) + + + +asset.meta = { + Name = "Big Dipper", + Description = "Constellation lines for the Big Dipper", + Author = "OpenSpace Team", + URL = "https://www.openspaceproject.com", + License = "MIT" +} diff --git a/data/assets/scene/milkyway/constellations/constellation_art.asset b/data/assets/scene/milkyway/constellations/constellation_art.asset index f022e39395..9a0ec35623 100644 --- a/data/assets/scene/milkyway/constellations/constellation_art.asset +++ b/data/assets/scene/milkyway/constellations/constellation_art.asset @@ -1,17 +1,17 @@ -local constellationsCSV = asset.localResource("constellation_data.csv") +local constellationsCSV = asset.resource("constellation_data.csv") local transforms = asset.require("scene/solarsystem/sun/transforms") local constellations_helper = asset.require("util/constellations_helper") -local images = asset.syncedResource({ +local images = asset.resource({ Name = "Constellation Images", Type = "HttpSynchronization", Identifier = "constellation_images", Version = 4 }) -local data = asset.syncedResource({ +local data = asset.resource({ Name = "Constellation Files", Type = "HttpSynchronization", Identifier = "digitaluniverse_constellations_data", @@ -22,8 +22,6 @@ local data = asset.syncedResource({ --function that reads the file local function createConstellations(baseIdentifier, guiPath, constellationfile) local genConstellations = {} - --skip the first line - local notFirstLine = false -- define parsec to meters local PARSEC_CONSTANT = 3.0856776E16 -- how many parsecs away do you want the images to be? @@ -31,73 +29,78 @@ local function createConstellations(baseIdentifier, guiPath, constellationfile) -- but they can really be anywhere since the billboard size will scale with distance. local distanceMultiplier = 3.2 local baseScale = 1e17 - for line in io.lines(openspace.absPath(constellationfile)) do - if (notFirstLine) then - -- describes the data - local matchstring = "(.-),(.-),(.-),(.-),(.-),(.-),(.-),(.-),(.-),(.-),(.-),(.-)$" - local group, abbreviation, name, x, y, z, scale, imageName, rotX, rotY, rotZ, centerStar = line:match(matchstring) - local magVec = math.sqrt(x*x + y*y + z*z) - local normx = x / magVec - local normy = y / magVec - local normz = z / magVec + local lines = openspace.readCSVFile(openspace.absPath(constellationfile)) + for _, line in ipairs(lines) do + -- describes the data + local group = line[1] + local abbreviation = line[2] + local name = line[3] + local x = tonumber(line[4]) + local y = tonumber(line[5]) + local z = tonumber(line[6]) + local scale = tonumber(line[7]) + local imageName = line[8] + local rotX = tonumber(line[9]) + local rotY = tonumber(line[10]) + local rotZ = tonumber(line[11]) + local centerStar = line[12] + local magVec = math.sqrt(x*x + y*y + z*z) + local normx = x / magVec + local normy = y / magVec + local normz = z / magVec - -- Use the full name in the data constellations.dat if possible - -- Otherwise, use the given name in the constellation_data.csv file - local foundName = constellations_helper.findFullName(abbreviation) - if foundName ~= nil then - name = foundName - end + -- Use the full name in the data constellations.dat if possible + -- Otherwise, use the given name in the constellation_data.csv file + local foundName = constellations_helper.findFullName(abbreviation) + if foundName ~= nil then + name = foundName + end - group = (group == "" and globe or group) + group = (group == "" and globe or group) - local aconstellation = { - -- Identifier = guiPath .. "-" .. name, - Identifier = baseIdentifier .. "-" .. abbreviation, - Parent = transforms.SolarSystemBarycenter.Identifier, - Transform = { - Translation = { - Type = "StaticTranslation", - -- position is in parsecs from the SolarSystemBarycenter, so convert to meters - Position = { - normx * PARSEC_CONSTANT * distanceMultiplier, - normy * PARSEC_CONSTANT * distanceMultiplier, - normz * PARSEC_CONSTANT * distanceMultiplier - } - }, - Rotation = { - Type = "StaticRotation", - Rotation = { tonumber(rotX), tonumber(rotY), tonumber(rotZ) } + local aconstellation = { + -- Identifier = guiPath .. "-" .. name, + Identifier = baseIdentifier .. "-" .. abbreviation, + Parent = transforms.SolarSystemBarycenter.Identifier, + Transform = { + Translation = { + Type = "StaticTranslation", + -- position is in parsecs from the SolarSystemBarycenter, so convert to meters + Position = { + normx * PARSEC_CONSTANT * distanceMultiplier, + normy * PARSEC_CONSTANT * distanceMultiplier, + normz * PARSEC_CONSTANT * distanceMultiplier } }, - Renderable = { - Type = "RenderablePlaneImageLocal", - Size = tonumber(baseScale * scale * distanceMultiplier / 10), - Enabled = false, - Origin = "Center", - Billboard = false, - LazyLoading = true, - Texture = images .. imageName, - BlendMode = "Additive", - Opacity = 0.1, - DimInAtmosphere = true - }, - Tag = { "ImageConstellation", group, "daytime_hidden" }, - GUI = { - Name = name .. " Image", - Path = "/Milky Way/" .. guiPath, - Description = name .. " Image" + Rotation = { + Type = "StaticRotation", + Rotation = { tonumber(rotX), tonumber(rotY), tonumber(rotZ) } } + }, + Renderable = { + Type = "RenderablePlaneImageLocal", + Enabled = false, + Size = tonumber(baseScale * scale * distanceMultiplier / 10), + Origin = "Center", + Billboard = false, + LazyLoading = true, + Texture = images .. imageName, + BlendMode = "Additive", + Opacity = 0.1, + DimInAtmosphere = true + }, + Tag = { "ImageConstellation", group, "daytime_hidden" }, + GUI = { + Name = name .. " Image", + Path = "/Milky Way/Constellations/" .. guiPath, + Description = name .. " Image" } - table.insert(genConstellations, aconstellation) - - else - notFirstLine = true - end + } + table.insert(genConstellations, aconstellation) end return genConstellations end - local ShowArt = { Identifier = "os.constellation_art.ShowArt", Name = "Show all", @@ -192,9 +195,10 @@ asset.export("DisableArtAction", DisableArt.Identifier) asset.export("ShowZodiacArt", ShowZodiacArt.Identifier) asset.export("HideZodiacArt", HideZodiacArt.Identifier) + + asset.meta = { Name = "Constellation Images", - Version = "1.2", Description = "Artistic images depicting the constellations", Author = "James Hedberg", URL = "http://jameshedberg.com", diff --git a/data/assets/scene/milkyway/constellations/constellation_extrakeybinds.asset b/data/assets/scene/milkyway/constellations/constellation_extrakeybinds.asset index 9ff4819b07..08030f13ca 100644 --- a/data/assets/scene/milkyway/constellations/constellation_extrakeybinds.asset +++ b/data/assets/scene/milkyway/constellations/constellation_extrakeybinds.asset @@ -16,7 +16,6 @@ end) asset.meta = { Name = "Constellation Image Extra Keybinds", - Version = "1.0", Description = "Artistic images depicting the constellations", Author = "James Hedberg", URL = "http://jameshedberg.com", diff --git a/data/assets/scene/milkyway/constellations/constellation_keybinds.asset b/data/assets/scene/milkyway/constellations/constellation_keybinds.asset index d586440b3d..95066317ce 100644 --- a/data/assets/scene/milkyway/constellations/constellation_keybinds.asset +++ b/data/assets/scene/milkyway/constellations/constellation_keybinds.asset @@ -18,7 +18,6 @@ end) asset.meta = { Name = "Constellation Image Keybinds", - Version = "1.0", Description = "Artistic images depicting the constellations", Author = "James Hedberg", URL = "http://jameshedberg.com", diff --git a/data/assets/scene/milkyway/gaia/apogee.asset b/data/assets/scene/milkyway/gaia/apogee.asset index bdfd70d925..9aee4bcc6b 100644 --- a/data/assets/scene/milkyway/gaia/apogee.asset +++ b/data/assets/scene/milkyway/gaia/apogee.asset @@ -1,18 +1,18 @@ -local speck = asset.syncedResource({ +local speck = asset.resource({ Name = "Apogee Speck Files", Type = "HttpSynchronization", Identifier = "gaia_apogee", Version = 1 }) -local colormaps = asset.syncedResource({ +local colormaps = asset.resource({ Name = "Stars Color Table", Type = "HttpSynchronization", Identifier = "stars_colormap", Version = 3 }) -local textures = asset.syncedResource({ +local textures = asset.resource({ Name = "Stars Textures", Type = "HttpSynchronization", Identifier = "stars_textures", @@ -30,8 +30,9 @@ local GaiaAbundanceApogee = { OtherData = "FeH", MagnitudeExponent = 7.25, SizeComposition = "Distance Modulus", - RenderMethod = "Texture Based", - Texture = textures .. "halo.png", + Glare = { + Texture = textures .. "halo.png" + }, ColorRange = { { -0.8, 0.6 } }, -- ShapeTexture = textures .. "disc.png", ColorMap = colormaps .. "colorbv.cmap", @@ -71,7 +72,6 @@ asset.export(GaiaAbundanceApogee) asset.meta = { Name = "Gaia Abundance Apogee", - Version = "1.0", Description = "This asset contains a RenderableStars dataset with metallicity data", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/milkyway/gaia/gaia_dr2_download_stars.asset b/data/assets/scene/milkyway/gaia/gaia_dr2_download_stars.asset index 1b23bf6ab6..071f065cf8 100644 --- a/data/assets/scene/milkyway/gaia/gaia_dr2_download_stars.asset +++ b/data/assets/scene/milkyway/gaia/gaia_dr2_download_stars.asset @@ -1,7 +1,7 @@ -- Download a dataset of 618 million stars (28 GB), already preprocessed and stored in a binary octree. -- The octree was generated from the full DR2 by filtering away all stars with a parallax error higher than 0.5 -- Max Star Per Node = 50,000 and max distance = 500kpc -local gaia618Destination = asset.syncedResource({ +local gaia618Destination = asset.resource({ Name = "Gaia DR2 618M Octree", Type = "HttpSynchronization", Identifier = "gaia_stars_618M_octree", @@ -14,7 +14,7 @@ local gaia618DestinationExtracted = gaia618Destination .. "data" -- Download the full DR2 dataset with 24 values per star (preprocessed with theReadFitsTask (gaia_read.task) into 8 binary files). -- From these files new subsets can be created with the ConstructOctreeTask (gaia_octree.task). -- Total size of download is 151 GB. -local gaiaFull = asset.syncedResource({ +local gaiaFull = asset.resource({ Name = "Gaia DR2 Full Raw", Type = "HttpSynchronization", Identifier = "gaia_stars_dr2_raw", @@ -28,7 +28,6 @@ asset.export("GaiaFullDataset", gaiaFull) asset.meta = { Name = "GaiaDR2 Download Stars", - Version = "1.1", Description = [[This asset contains code to sync gaia subsets from the OpenSpace servers. Edit this file to choose which subsets to sync. WARNING can use 150GB]], Author = "ESA/Gaia/DPAC", diff --git a/data/assets/scene/milkyway/gaia/gaiastars.asset b/data/assets/scene/milkyway/gaia/gaiastars.asset index 9e46a60b54..4c2a2992f1 100644 --- a/data/assets/scene/milkyway/gaia/gaiastars.asset +++ b/data/assets/scene/milkyway/gaia/gaiastars.asset @@ -6,21 +6,21 @@ end -- Download a preprocessed binary octree of Radial Velocity subset values per star -- (preprocessed into 8 binary files). -local starsFolder = asset.syncedResource({ +local starsFolder = asset.resource({ Name = "Gaia Stars RV", Type = "HttpSynchronization", Identifier = "gaia_stars_rv_octree", Version = 1 }) -local colormaps = asset.syncedResource({ +local colormaps = asset.resource({ Name = "Stars Color Table", Type = "HttpSynchronization", Identifier = "stars_colormap", Version = 3 }) -local textures = asset.syncedResource({ +local textures = asset.resource({ Name = "Stars Textures", Type = "HttpSynchronization", Identifier = "stars_textures", @@ -79,7 +79,6 @@ asset.export(GaiaStars) asset.meta = { Name = "Gaia Stars", - Version = "1.0", Description = [[This asset contains a subset of GaiaDR2. This subset contains 7.5M stars which have accurate values for a number of columns]], Author = "ESA/Gaia/DPAC", diff --git a/data/assets/scene/milkyway/gaia/galah.asset b/data/assets/scene/milkyway/gaia/galah.asset index 4ef21201e8..2c7c3069ea 100644 --- a/data/assets/scene/milkyway/gaia/galah.asset +++ b/data/assets/scene/milkyway/gaia/galah.asset @@ -1,18 +1,18 @@ -local speck = asset.syncedResource({ +local speck = asset.resource({ Name = "Galah Speck Files", Type = "HttpSynchronization", Identifier = "gaia_galah", Version = 1 }) -local colormaps = asset.syncedResource({ +local colormaps = asset.resource({ Name = "Stars Color Table", Type = "HttpSynchronization", Identifier = "stars_colormap", Version = 3 }) -local textures = asset.syncedResource({ +local textures = asset.resource({ Name = "Stars Textures", Type = "HttpSynchronization", Identifier = "stars_textures", @@ -26,11 +26,12 @@ local GaiaAbundanceGalah = { Type = "RenderableStars", Enabled = false, File = speck .. "GaiaAbundGalah.speck", - Texture = textures .. "halo.png", + Glare = { + Texture = textures .. "halo.png" + }, -- ShapeTexture = textures .. "disc.png", MagnitudeExponent = 7.25, SizeComposition = "Distance Modulus", - RenderMethod = "Texture Based", ColorOption = "Other Data", OtherData = "FeH", ColorMap = colormaps .. "colorbv.cmap", @@ -71,7 +72,6 @@ asset.export(GaiaAbundanceGalah) asset.meta = { Name = "Gaia Abundance Galah", - Version = "1.0", Description = "This asset contains a RenderableStars dataset with metallicity data", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/milkyway/habitable_zones/habitable_zone_textures.asset b/data/assets/scene/milkyway/habitable_zones/habitable_zone_textures.asset index 1ace42d07d..ad077a8efe 100644 --- a/data/assets/scene/milkyway/habitable_zones/habitable_zone_textures.asset +++ b/data/assets/scene/milkyway/habitable_zones/habitable_zone_textures.asset @@ -1,4 +1,4 @@ -local texturesPath = asset.syncedResource({ +local texturesPath = asset.resource({ Name = "Habitable Zone Textures", Type = "HttpSynchronization", Identifier = "habitable_zone_textures", @@ -10,7 +10,6 @@ asset.export("TexturesPath", texturesPath) asset.meta = { Name = "Habitable Zone Textures", - Version = "1.0", Description = "Default textures that can be used for the habitable zone rendering", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/milkyway/milkyway/eso.asset b/data/assets/scene/milkyway/milkyway/eso.asset index 8112beb9ab..285e1c75cf 100644 --- a/data/assets/scene/milkyway/milkyway/eso.asset +++ b/data/assets/scene/milkyway/milkyway/eso.asset @@ -1,4 +1,4 @@ -local textures = asset.syncedResource({ +local textures = asset.resource({ Name = "ESO Milky Way Textures", Type = "HttpSynchronization", Identifier = "milkyway-eso_textures", @@ -15,15 +15,14 @@ local Object = { } }, Renderable = { - Type = "RenderableSphere", + Type = "RenderableSphereImageLocal", Size = 9.2E20, Segments = 40, Opacity = 0.4, Texture = textures .. "eso0932a_blend.png", Orientation = "Inside", MirrorTexture = true, - FadeOutThreshold = 0.01, - Background = true + FadeOutThreshold = 0.01 }, GUI = { Name = "Milky Way (ESO)", @@ -47,7 +46,6 @@ asset.export(Object) asset.meta = { Name = "MilkyWay Galaxy (ESO)", - Version = "1.0", Description = [[This asset contains an alternate to the Digital Universe image for the Milky Way from ESO]], Author = "ESO/S. Brunier", diff --git a/data/assets/scene/milkyway/milkyway/volume.asset b/data/assets/scene/milkyway/milkyway/volume.asset index b8959ed991..642e21d4f4 100644 --- a/data/assets/scene/milkyway/milkyway/volume.asset +++ b/data/assets/scene/milkyway/milkyway/volume.asset @@ -2,7 +2,7 @@ local transforms = asset.require("scene/solarsystem/sun/transforms") -local data = asset.syncedResource({ +local data = asset.resource({ Name = "Milkyway Volume Data", Type = "HttpSynchronization", Identifier = "milkyway_volume_data", @@ -35,7 +35,7 @@ local MilkyWayVolume = { Filename = data .. "MilkyWayRGBAVolume1024x1024x128.raw", Dimensions = { 1024, 1024, 128 }, Size = { 1.2E21, 1.2E21, 0.15E21 }, - Downscale = 0.4, + Downscale = 0.4 }, Points = { Type = "Points", @@ -45,7 +45,7 @@ local MilkyWayVolume = { } }, GUI = { - Path = "/Milky Way", + Path = "/Milky Way/Galaxy", Name = "Milky Way Volume", Description = "Volumetric rendering of Milky Way galaxy based on simulation from NAOJ" } @@ -66,7 +66,6 @@ asset.export(MilkyWayVolume) asset.meta = { Name = "Milky Way Volume", - Version = "1.1", Description = "Volumetric rendering of Milky Way galaxy based on simulations from NAOJ", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/milkyway/objects/orionnebula/cluster.asset b/data/assets/scene/milkyway/objects/orionnebula/cluster.asset index 169e2ae1b7..1e231e6a8f 100644 --- a/data/assets/scene/milkyway/objects/orionnebula/cluster.asset +++ b/data/assets/scene/milkyway/objects/orionnebula/cluster.asset @@ -2,7 +2,7 @@ local transforms = asset.require("./transforms") -local sync = asset.syncedResource({ +local sync = asset.resource({ Name = "Orion Nebula Star Cluster", Type = "HttpSynchronization", Identifier = "orion_nebula_star_cluster", @@ -16,11 +16,12 @@ local OrionClusterStars = { Renderable = { Type = "RenderableStars", File = sync .. "oricluster.speck", - Texture = sync .. "halo.png", + Glare = { + Texture = sync .. "halo.png" + }, ColorMap = sync .. "colorbv.cmap", MagnitudeExponent = 5.02, SizeComposition = "Distance Modulus", - RenderMethod = "Texture Based", DataMapping = { Bv = "colorb_v", Luminance = "lum", @@ -66,7 +67,6 @@ asset.export(OrionClusterStars) asset.meta = { Name = "Orion Nebula Star Cluster", - Version = "1.1", Description = [[Digital Universe asset for the Orion star cluster. To be used in conjunction with nebula model. Use orionnebula.asset to include both]], Author = "AMNH Digital Universe", diff --git a/data/assets/scene/milkyway/objects/orionnebula/nebula.asset b/data/assets/scene/milkyway/objects/orionnebula/nebula.asset index f7c4a66ab3..924c1c189f 100644 --- a/data/assets/scene/milkyway/objects/orionnebula/nebula.asset +++ b/data/assets/scene/milkyway/objects/orionnebula/nebula.asset @@ -1,9 +1,9 @@ -local sun = asset.require("scene/solarsystem/sun/sun") +local sun = asset.require("scene/solarsystem/sun/transforms") local transforms = asset.require("./transforms") -local sync = asset.syncedResource({ +local sync = asset.resource({ Name = "Orion Nebula Model", Type = "HttpSynchronization", Identifier = "orion_nebula_model", @@ -176,7 +176,6 @@ asset.export(OrionNebulaProplydsModel) asset.meta = { Name = "Orion Nebula Model", - Version = "1.1", Description = [[Digital Universe asset for the Orion nebula 3D model. This asset contains seperate models for the nebula, proplyds and shocks. To be used in conjunction with orion star cluster. Use orionnebula.asset to include both]], diff --git a/data/assets/scene/milkyway/objects/orionnebula/orionnebula.asset b/data/assets/scene/milkyway/objects/orionnebula/orionnebula.asset index 1ffb654593..05d56fb6bd 100644 --- a/data/assets/scene/milkyway/objects/orionnebula/orionnebula.asset +++ b/data/assets/scene/milkyway/objects/orionnebula/orionnebula.asset @@ -5,7 +5,6 @@ asset.require("./nebula") asset.meta = { Name = "Orion Nebula", - Version = "1.0", Description = [[This asset is a meta asset, containing all the assets for the Orion Nebula from the AMNH Digital Universe. This includes a 3D model and a star cluster]], Author = "Brian Abbott (AMNH)", diff --git a/data/assets/scene/milkyway/objects/orionnebula/transforms.asset b/data/assets/scene/milkyway/objects/orionnebula/transforms.asset index 1a182cafda..980e37f4ee 100644 --- a/data/assets/scene/milkyway/objects/orionnebula/transforms.asset +++ b/data/assets/scene/milkyway/objects/orionnebula/transforms.asset @@ -20,8 +20,7 @@ local NebulaPosition = { GUI = { Name = "Orion Nebula Position", Path = "/Milky Way/Orion", - Hidden = true, - Description = "Static position for Orion Nebula" + Hidden = true } } @@ -40,7 +39,6 @@ asset.export(NebulaPosition) asset.meta = { Name = "Orion Nebula Transforms", - Version = "1.0", Description = [[This asset contains the position of the Orion Nebula. Generally you would not include this asset as other assets would include it]], Author = "Brian Abbott (AMNH)", diff --git a/data/assets/scene/milkyway/stars/denver.asset b/data/assets/scene/milkyway/stars/denver.asset index a8924ad47e..270ebda755 100644 --- a/data/assets/scene/milkyway/stars/denver.asset +++ b/data/assets/scene/milkyway/stars/denver.asset @@ -1,18 +1,18 @@ -local textures = asset.syncedResource({ +local textures = asset.resource({ Name = "Stars Textures", Type = "HttpSynchronization", Identifier = "stars-denver_textures", Version = 1 }) -local speck = asset.syncedResource({ +local speck = asset.resource({ Name = "Stars Speck Files", Type = "HttpSynchronization", Identifier = "stars-denver_speck", Version = 1 }) -local colorLUT = asset.syncedResource({ +local colorLUT = asset.resource({ Name = "Stars Color Table", Type = "HttpSynchronization", Identifier = "stars-denver_colormap", @@ -25,11 +25,12 @@ local Object = { Renderable = { Type = "RenderableStars", File = speck .. "denver_stars.speck", - Texture = textures .. "halo.png", + Glare = { + Texture = textures .. "halo.png" + }, ColorMap = colorLUT .. "denver_colorbv.cmap", MagnitudeExponent = 6.2, SizeComposition = "Distance Modulus", - RenderMethod = "Texture Based", -- or PSF DataMapping = { Bv = "colorb_v", Luminance = "lum", @@ -62,7 +63,6 @@ asset.export(Object) asset.meta = { Name = "Stars Denver", - Version = "1.0", Description = [[Alternative Milky Way Atlas: based on HIPPARCOS and Yale Bright Star catalogs]], Author = "Ka chun Yu", diff --git a/data/assets/scene/solarsystem/dwarf_planets/ceres/ceres.asset b/data/assets/scene/solarsystem/dwarf_planets/ceres/ceres.asset index d7d52f6171..66a6ab71ae 100644 --- a/data/assets/scene/solarsystem/dwarf_planets/ceres/ceres.asset +++ b/data/assets/scene/solarsystem/dwarf_planets/ceres/ceres.asset @@ -1,4 +1,3 @@ -asset.require("spice/base") local transforms = asset.require("./transforms") @@ -8,9 +7,7 @@ local Ceres = { Parent = transforms.CeresPosition.Identifier, Renderable = { Type = "RenderableGlobe", - Radii = { 487.3E3, 487.3E3, 454.7E3 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 487300, 487300, 454700 } }, Tag = { "planet_solarSystem", "planet_terrestrial", "dwarf_planet" }, GUI = { @@ -22,8 +19,8 @@ local CeresLabel = { Identifier = "CeresLabel", Parent = Ceres.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Ceres", FontSize = 70.0, Size = 8.66, @@ -57,7 +54,6 @@ asset.export(CeresLabel) asset.meta = { Name = "Ceres", - Version = "1.0", Description = "Ceres globe, and main label", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/dwarf_planets/ceres/default_layers.asset b/data/assets/scene/solarsystem/dwarf_planets/ceres/default_layers.asset index 7ceaef26a8..45e789fb8a 100644 --- a/data/assets/scene/solarsystem/dwarf_planets/ceres/default_layers.asset +++ b/data/assets/scene/solarsystem/dwarf_planets/ceres/default_layers.asset @@ -5,7 +5,6 @@ asset.require("./layers/colorlayers/lamo", true) asset.meta = { Name = "Default Ceres Layers", - Version = "1.0", Description = "Default Ceres layers are: LAMO", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/dwarf_planets/ceres/kernels.asset b/data/assets/scene/solarsystem/dwarf_planets/ceres/kernels.asset index 40f52766a5..7391de40a2 100644 --- a/data/assets/scene/solarsystem/dwarf_planets/ceres/kernels.asset +++ b/data/assets/scene/solarsystem/dwarf_planets/ceres/kernels.asset @@ -1,24 +1,45 @@ -local kernels = asset.syncedResource({ +local coreKernels = asset.require("spice/core") + + + +local data = asset.resource({ Name = "Ceres Kernels", Type = "HttpSynchronization", Identifier = "ceres_kernels", Version = 1 }) -asset.export( - "CeresKernels", - { - kernels .. "ceres_v01.tpc", - kernels .. "sb_ceres_140724.bsp", - kernels .. "sb_ceres_110211.bsp" - } -) + +local kernels = { + data .. "ceres_v01.tpc", + data .. "sb_ceres_140724.bsp", + data .. "sb_ceres_110211.bsp" +} + +local ID = { + Ceres = "CERES" +} + +local Frame = { + Ceres = coreKernels.Frame.Ceres +} + + +asset.onInitialize(function() + openspace.spice.loadKernel(kernels) +end) + +asset.onDeinitialize(function() + openspace.spice.unloadKernel(kernels) +end) + +asset.export("ID", ID) +asset.export("Frame", Frame) asset.meta = { Name = "Ceres Spice Kernels", - Version = "1.0", Description = "SPICE kernels for Ceres", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/dwarf_planets/ceres/layers/colorlayers/lamo.asset b/data/assets/scene/solarsystem/dwarf_planets/ceres/layers/colorlayers/lamo.asset index 794caa9382..e661aaba8f 100644 --- a/data/assets/scene/solarsystem/dwarf_planets/ceres/layers/colorlayers/lamo.asset +++ b/data/assets/scene/solarsystem/dwarf_planets/ceres/layers/colorlayers/lamo.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "LAMO_Sweden", Name = "LAMO [Sweden]", Enabled = asset.enabled, - FilePath = asset.localResource("lamo.wms") + ZIndex = 10, + FilePath = asset.resource("lamo.wms") } @@ -21,9 +22,9 @@ end) asset.export("layer", Layer) + asset.meta = { Name = "LAMO [Sweden]", - Version = "1.0", Description = [[]], Author = "", URL = "", diff --git a/data/assets/scene/solarsystem/dwarf_planets/ceres/layers/colorlayers/lamo_local.asset b/data/assets/scene/solarsystem/dwarf_planets/ceres/layers/colorlayers/lamo_local.asset index 8ca72672c9..d018f530df 100644 --- a/data/assets/scene/solarsystem/dwarf_planets/ceres/layers/colorlayers/lamo_local.asset +++ b/data/assets/scene/solarsystem/dwarf_planets/ceres/layers/colorlayers/lamo_local.asset @@ -2,7 +2,7 @@ local globe = asset.require("../../ceres") -local textures = asset.syncedResource({ +local textures = asset.resource({ Name = "Ceres Textures", Type = "HttpSynchronization", Identifier = "ceres_textures", @@ -14,7 +14,9 @@ local Layer = { Identifier = "LAMO_Local", Name = "LAMO [Local]", Enabled = asset.enabled, - FilePath = textures .. "ceres_lamo_4096x2048.png" + ZIndex = 5, + FilePath = textures .. "ceres_lamo_4096x2048.png", + CacheSettings = { Enabled = false } } @@ -32,7 +34,6 @@ asset.export("layer", Layer) asset.meta = { Name = "LAMO [Local]", - Version = "1.0", Description = [[]], Author = "", URL = "", diff --git a/data/assets/scene/solarsystem/dwarf_planets/ceres/trail.asset b/data/assets/scene/solarsystem/dwarf_planets/ceres/trail.asset index bc6cbaaccf..9d5d66e6de 100644 --- a/data/assets/scene/solarsystem/dwarf_planets/ceres/trail.asset +++ b/data/assets/scene/solarsystem/dwarf_planets/ceres/trail.asset @@ -1,6 +1,6 @@ local transforms = asset.require("scene/solarsystem/sun/transforms") local kernels = asset.require("./kernels") -asset.require("spice/base") +local coreKernels = asset.require("spice/core") @@ -11,8 +11,8 @@ local CeresTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "CERES", - Observer = "SSB" + Target = kernels.ID.Ceres, + Observer = coreKernels.ID.SolarSystemBarycenter }, Color = { 0.2, 0.8, 0.3 }, Period = 1680, @@ -27,15 +27,11 @@ local CeresTrail = { asset.onInitialize(function() - openspace.spice.loadKernel(kernels.CeresKernels) - openspace.addSceneGraphNode(CeresTrail) end) asset.onDeinitialize(function() openspace.removeSceneGraphNode(CeresTrail) - - openspace.spice.unloadKernel(kernels.CeresKernels) end) asset.export(CeresTrail) @@ -44,7 +40,6 @@ asset.export(CeresTrail) asset.meta = { Name = "Ceres Trail", - Version = "1.0", Description = "Trail of Ceres as observed by the Sun. Data from NASA Spice", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/dwarf_planets/ceres/transforms.asset b/data/assets/scene/solarsystem/dwarf_planets/ceres/transforms.asset index 510131b2de..0770c7e4fb 100644 --- a/data/assets/scene/solarsystem/dwarf_planets/ceres/transforms.asset +++ b/data/assets/scene/solarsystem/dwarf_planets/ceres/transforms.asset @@ -1,6 +1,8 @@ local transforms = asset.require("scene/solarsystem/sun/transforms") local kernels = asset.require("./kernels") -asset.require("spice/base") +local coreKernels = asset.require("spice/core") + + local CeresPosition = { Identifier = "CeresPosition", @@ -8,13 +10,13 @@ local CeresPosition = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "CERES", - Observer = "SSB" + Target = kernels.ID.Ceres, + Observer = coreKernels.ID.SolarSystemBarycenter }, Rotation = { Type = "SpiceRotation", - SourceFrame = "IAU_CERES", - DestinationFrame = "GALACTIC" + SourceFrame = kernels.Frame.Ceres, + DestinationFrame = coreKernels.Frame.Galactic } }, GUI = { @@ -26,15 +28,11 @@ local CeresPosition = { asset.onInitialize(function() - openspace.spice.loadKernel(kernels.CeresKernels) - openspace.addSceneGraphNode(CeresPosition) end) asset.onDeinitialize(function() openspace.removeSceneGraphNode(CeresPosition) - - openspace.spice.unloadKernel(kernels.CeresKernels) end) asset.export(CeresPosition) @@ -43,7 +41,6 @@ asset.export(CeresPosition) asset.meta = { Name = "Ceres Transforms", - Version = "1.0", Description = "Ceres transform", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/dwarf_planets/eris/eris.asset b/data/assets/scene/solarsystem/dwarf_planets/eris/eris.asset index 9b62dcfa14..e7d64f4ce4 100644 --- a/data/assets/scene/solarsystem/dwarf_planets/eris/eris.asset +++ b/data/assets/scene/solarsystem/dwarf_planets/eris/eris.asset @@ -6,7 +6,6 @@ asset.require("./label", false) asset.meta = { Name = "Eris meta asset", - Version = "1.0", Description = [[Trail, Model and Label of Eris.]], Author = "OpenSpace Team", URL = "https://www.openspaceproject.com", diff --git a/data/assets/scene/solarsystem/dwarf_planets/eris/label.asset b/data/assets/scene/solarsystem/dwarf_planets/eris/label.asset index 46e1349ff3..f3022672b7 100644 --- a/data/assets/scene/solarsystem/dwarf_planets/eris/label.asset +++ b/data/assets/scene/solarsystem/dwarf_planets/eris/label.asset @@ -6,8 +6,8 @@ local Label = { Identifier = "ErisLabel", Parent = transforms.Position.Identifier, Renderable = { - Enabled = asset.enabled, Type = "RenderableLabel", + Enabled = asset.enabled, Text = "Eris", FontSize = 70.0, Size = 9.10, @@ -42,7 +42,6 @@ asset.export("Label", Label) asset.meta = { Name = "Eris Label", - Version = "1.0", Description = [[Label of Eris]], Author = "OpenSpace Team", URL = "https://www.openspaceproject.com", diff --git a/data/assets/scene/solarsystem/dwarf_planets/eris/planet.asset b/data/assets/scene/solarsystem/dwarf_planets/eris/planet.asset index 6f83956938..c84c9a4ad5 100644 --- a/data/assets/scene/solarsystem/dwarf_planets/eris/planet.asset +++ b/data/assets/scene/solarsystem/dwarf_planets/eris/planet.asset @@ -1,9 +1,9 @@ -local sun = asset.require("scene/solarsystem/sun/sun") +local sun = asset.require("scene/solarsystem/sun/transforms") local transforms = asset.require("./transforms") -local modelFolder = asset.syncedResource({ +local modelFolder = asset.resource({ Name = "Eris Model", Type = "HttpSynchronization", Identifier = "eris_model", @@ -54,7 +54,6 @@ asset.export("Planet", Planet) asset.meta = { Name = "Eris Globe", - Version = "1.0", Description = [[Globe of Eris]], Author = "OpenSpace Team", URL = "https://solarsystem.nasa.gov/planets/dwarf-planets/haumea/in-depth/", diff --git a/data/assets/scene/solarsystem/dwarf_planets/eris/trail.asset b/data/assets/scene/solarsystem/dwarf_planets/eris/trail.asset index 4fc0bbb860..418a202e70 100644 --- a/data/assets/scene/solarsystem/dwarf_planets/eris/trail.asset +++ b/data/assets/scene/solarsystem/dwarf_planets/eris/trail.asset @@ -5,21 +5,20 @@ local transforms = asset.require("./transforms") local Trail = { Identifier = "ErisTrail", - Parent = sunTransforms.SunECLIPJ2000.Identifier, + Parent = sunTransforms.SunEclipJ2000.Identifier, Renderable = { Type = "RenderableTrailOrbit", + Enabled = asset.enabled, + Translation = transforms.Translation, Color = { 0.2, 0.8, 0.3 }, Period = 205472.1258735657, Resolution = 10000, - Enabled = asset.enabled, - Fade = 1.24, - Translation = transforms.Translation + Fade = 1.24 }, Tag = { "planetTrail_dwarf" }, GUI = { Name = "Eris Trail", - Path = "/Solar System/Dwarf Planets/Eris", - Description = "Trail of Eris" + Path = "/Solar System/Dwarf Planets/Eris" } } @@ -38,7 +37,6 @@ asset.export("Trail", Trail) asset.meta = { Name = "Eris Trail", - Version = "1.0", Description = [[Trail of Eris]], Author = "OpenSpace Team", URL = "https://www.openspaceproject.com", diff --git a/data/assets/scene/solarsystem/dwarf_planets/eris/transforms.asset b/data/assets/scene/solarsystem/dwarf_planets/eris/transforms.asset index 10bb268507..4370649bc3 100644 --- a/data/assets/scene/solarsystem/dwarf_planets/eris/transforms.asset +++ b/data/assets/scene/solarsystem/dwarf_planets/eris/transforms.asset @@ -17,7 +17,7 @@ local Translation = { local Position = { Identifier = "ErisPosition", - Parent = transforms.SunECLIPJ2000.Identifier, + Parent = transforms.SunEclipJ2000.Identifier, Transform = { Translation = Translation }, @@ -30,11 +30,11 @@ local Position = { asset.onInitialize(function() - openspace.addSceneGraphNode(Position) + openspace.addSceneGraphNode(Position) end) asset.onDeinitialize(function() - openspace.removeSceneGraphNode(Position) + openspace.removeSceneGraphNode(Position) end) asset.export("Translation", Translation) @@ -44,7 +44,6 @@ asset.export("Position", Position) asset.meta = { Name = "Eris Position (Keplerian)", - Version = "1.0", Description = [[Position of Eris. KeplerTranslation Version Data from JPL Horizons]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/dwarf_planets/gonggong/gonggong.asset b/data/assets/scene/solarsystem/dwarf_planets/gonggong/gonggong.asset index c62e2e9034..9a888609b5 100644 --- a/data/assets/scene/solarsystem/dwarf_planets/gonggong/gonggong.asset +++ b/data/assets/scene/solarsystem/dwarf_planets/gonggong/gonggong.asset @@ -6,7 +6,6 @@ asset.require("./label", false) asset.meta = { Name = "Gonggong meta asset", - Version = "1.0", Description = [[Trail, Model and Label of Gonggong.]], Author = "OpenSpace Team", URL = "https://www.openspaceproject.com", diff --git a/data/assets/scene/solarsystem/dwarf_planets/gonggong/label.asset b/data/assets/scene/solarsystem/dwarf_planets/gonggong/label.asset index 9d53dea400..4f9849681c 100644 --- a/data/assets/scene/solarsystem/dwarf_planets/gonggong/label.asset +++ b/data/assets/scene/solarsystem/dwarf_planets/gonggong/label.asset @@ -6,8 +6,8 @@ local Label = { Identifier = "GonggongLabel", Parent = transforms.Position.Identifier, Renderable = { - Enabled = asset.enabled, Type = "RenderableLabel", + Enabled = asset.enabled, Text = "Gonggong", FontSize = 70.0, Size = 9.10, @@ -42,7 +42,6 @@ asset.export("Label", Label) asset.meta = { Name = "Gonggong Label", - Version = "1.0", Description = [[Label of Gonggong]], Author = "OpenSpace Team", URL = "https://www.openspaceproject.com", diff --git a/data/assets/scene/solarsystem/dwarf_planets/gonggong/planet.asset b/data/assets/scene/solarsystem/dwarf_planets/gonggong/planet.asset index 89b0015e6f..85699046f8 100644 --- a/data/assets/scene/solarsystem/dwarf_planets/gonggong/planet.asset +++ b/data/assets/scene/solarsystem/dwarf_planets/gonggong/planet.asset @@ -1,4 +1,3 @@ -local sun = asset.require("scene/solarsystem/sun/sun") local transforms = asset.require("./transforms") @@ -9,20 +8,17 @@ local Planet = { Transform = { Rotation = { Type = "ConstantRotation", - RotationAxis = {0.0, 0.0, 1.0}, + RotationAxis = { 0.0, 0.0, 1.0 }, RotationRate = 1.0 / (22.4 * 60.0 * 60.0) } }, Renderable = { Type = "RenderableGlobe", - Radii = { 615.0E3, 615.0E3, 615.0E3 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 615000, 615000, 615000 } }, GUI = { Name = "Gonggong", - Path = "/Solar System/Dwarf Planets/Gonggong", - Description = "Globe of Gonggong" + Path = "/Solar System/Dwarf Planets/Gonggong" } } @@ -41,7 +37,6 @@ asset.export("Planet", Planet) asset.meta = { Name = "Gonggong Globe", - Version = "1.0", Description = [[Globe of Gonggong]], Author = "OpenSpace Team", URL = "https://www.openspaceproject.com", diff --git a/data/assets/scene/solarsystem/dwarf_planets/gonggong/trail.asset b/data/assets/scene/solarsystem/dwarf_planets/gonggong/trail.asset index a0bbac0870..940fde7b9e 100644 --- a/data/assets/scene/solarsystem/dwarf_planets/gonggong/trail.asset +++ b/data/assets/scene/solarsystem/dwarf_planets/gonggong/trail.asset @@ -5,21 +5,20 @@ local transforms = asset.require("./transforms") local Trail = { Identifier = "GonggongTrail", - Parent = sunTransforms.SunECLIPJ2000.Identifier, + Parent = sunTransforms.SunEclipJ2000.Identifier, Renderable = { Type = "RenderableTrailOrbit", + Enabled = asset.enabled, Color = { 0.2, 0.8, 0.3 }, Period = 201582.9642396014, Resolution = 10000, - Enabled = asset.enabled, Fade = 1.24, Translation = transforms.Translation }, Tag = { "planetTrail_dwarf" }, GUI = { Name = "Gonggong Trail", - Path = "/Solar System/Dwarf Planets/Gonggong", - Description = "Trail of Gonggong" + Path = "/Solar System/Dwarf Planets/Gonggong" } } @@ -38,7 +37,6 @@ asset.export("Trail", Trail) asset.meta = { Name = "Gonggong Trail", - Version = "1.0", Description = [[Trail of Gonggong]], Author = "OpenSpace Team", URL = "https://www.openspaceproject.com", diff --git a/data/assets/scene/solarsystem/dwarf_planets/gonggong/transforms.asset b/data/assets/scene/solarsystem/dwarf_planets/gonggong/transforms.asset index 17e1c3c760..32c3ecd36d 100644 --- a/data/assets/scene/solarsystem/dwarf_planets/gonggong/transforms.asset +++ b/data/assets/scene/solarsystem/dwarf_planets/gonggong/transforms.asset @@ -17,7 +17,7 @@ local Translation = { local Position = { Identifier = "GonggongPosition", - Parent = transforms.SunECLIPJ2000.Identifier, + Parent = transforms.SunEclipJ2000.Identifier, Transform = { Translation = Translation }, @@ -44,7 +44,6 @@ asset.export("Position", Position) asset.meta = { Name = "Gonggong Position (Keplerian)", - Version = "1.0", Description = [[Position of Gonggong. KeplerTranslation Version Data from JPL Horizons]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/dwarf_planets/haumea/haumea.asset b/data/assets/scene/solarsystem/dwarf_planets/haumea/haumea.asset index 58243b6c0f..ae943d4f72 100644 --- a/data/assets/scene/solarsystem/dwarf_planets/haumea/haumea.asset +++ b/data/assets/scene/solarsystem/dwarf_planets/haumea/haumea.asset @@ -6,7 +6,6 @@ asset.require("./label", false) asset.meta = { Name = "Haumea meta asset", - Version = "1.0", Description = [[Trail, Model and Label of Haumea.]], Author = "OpenSpace Team", URL = "https://www.openspaceproject.com", diff --git a/data/assets/scene/solarsystem/dwarf_planets/haumea/label.asset b/data/assets/scene/solarsystem/dwarf_planets/haumea/label.asset index cb2ac20474..931bc317c2 100644 --- a/data/assets/scene/solarsystem/dwarf_planets/haumea/label.asset +++ b/data/assets/scene/solarsystem/dwarf_planets/haumea/label.asset @@ -6,8 +6,8 @@ local Label = { Identifier = "HaumeaLabel", Parent = transforms.Position.Identifier, Renderable = { - Enabled = asset.enabled, Type = "RenderableLabel", + Enabled = asset.enabled, Text = "Haumea", FontSize = 70.0, Size = 9.10, @@ -42,7 +42,6 @@ asset.export("Label", Label) asset.meta = { Name = "Haumea Label", - Version = "1.0", Description = [[Label of Haumea]], Author = "OpenSpace Team", URL = "https://www.openspaceproject.com", diff --git a/data/assets/scene/solarsystem/dwarf_planets/haumea/planet.asset b/data/assets/scene/solarsystem/dwarf_planets/haumea/planet.asset index 6dbbaabdea..338afdf186 100644 --- a/data/assets/scene/solarsystem/dwarf_planets/haumea/planet.asset +++ b/data/assets/scene/solarsystem/dwarf_planets/haumea/planet.asset @@ -1,9 +1,9 @@ -local sun = asset.require("scene/solarsystem/sun/sun") +local sun = asset.require("scene/solarsystem/sun/transforms") local transforms = asset.require("./transforms") -local modelFolder = asset.syncedResource({ +local modelFolder = asset.resource({ Name = "Hamuea Model", Type = "HttpSynchronization", Identifier = "hamuea_model", @@ -12,7 +12,7 @@ local modelFolder = asset.syncedResource({ local Planet = { - Identifier = "HamueaModel", + Identifier = "HaumeaModel", Parent = transforms.Position.Identifier, Transform = { Rotation = { @@ -54,7 +54,6 @@ asset.export("Planet", Planet) asset.meta = { Name = "Haumea Model", - Version = "1.0", Description = [[Model of Haumea]], Author = "OpenSpace Team", URL = "https://solarsystem.nasa.gov/planets/dwarf-planets/haumea/in-depth/", diff --git a/data/assets/scene/solarsystem/dwarf_planets/haumea/trail.asset b/data/assets/scene/solarsystem/dwarf_planets/haumea/trail.asset index edb2269d8d..4d06f318ab 100644 --- a/data/assets/scene/solarsystem/dwarf_planets/haumea/trail.asset +++ b/data/assets/scene/solarsystem/dwarf_planets/haumea/trail.asset @@ -5,15 +5,15 @@ local transforms = asset.require("./transforms") local Trail = { Identifier = "HaumeaTrail", - Parent = sunTransforms.SunECLIPJ2000.Identifier, + Parent = sunTransforms.SunEclipJ2000.Identifier, Renderable = { Type = "RenderableTrailOrbit", + Enabled = asset.enabled, + Translation = transforms.Translation, Color = { 0.2, 0.8, 0.3 }, Period = 90487.27692706819, Resolution = 10000, - Enabled = asset.enabled, - Fade = 1.24, - Translation = transforms.Translation + Fade = 1.24 }, Tag = { "planetTrail_dwarf" }, GUI = { @@ -38,7 +38,6 @@ asset.export("Trail", Trail) asset.meta = { Name = "Haumea Trail", - Version = "1.0", Description = [[Trail of Haumea]], Author = "OpenSpace Team", URL = "https://www.openspaceproject.com", diff --git a/data/assets/scene/solarsystem/dwarf_planets/haumea/transforms.asset b/data/assets/scene/solarsystem/dwarf_planets/haumea/transforms.asset index 25f96a0193..b2e7bbddbc 100644 --- a/data/assets/scene/solarsystem/dwarf_planets/haumea/transforms.asset +++ b/data/assets/scene/solarsystem/dwarf_planets/haumea/transforms.asset @@ -18,7 +18,7 @@ local Translation = { local Position = { Identifier = "HaumeaPosition", - Parent = transforms.SunECLIPJ2000.Identifier, + Parent = transforms.SunEclipJ2000.Identifier, Transform = { Translation = Translation }, @@ -45,7 +45,6 @@ asset.export("Position", Position) asset.meta = { Name = "Haumea Position (Keplerian)", - Version = "1.0", Description = [[Position of Haumea. KeplerTranslation Version Data from JPL Horizons]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/dwarf_planets/makemake/label.asset b/data/assets/scene/solarsystem/dwarf_planets/makemake/label.asset index 218bef1370..e97d8eab3f 100644 --- a/data/assets/scene/solarsystem/dwarf_planets/makemake/label.asset +++ b/data/assets/scene/solarsystem/dwarf_planets/makemake/label.asset @@ -6,8 +6,8 @@ local Label = { Identifier = "MakemakeLabel", Parent = transforms.Position.Identifier, Renderable = { - Enabled = asset.enabled, Type = "RenderableLabel", + Enabled = asset.enabled, Text = "Makemake", FontSize = 70.0, Size = 9.10, @@ -42,7 +42,6 @@ asset.export("Label", Label) asset.meta = { Name = "Makemake Label", - Version = "1.0", Description = [[Label of Makemake]], Author = "OpenSpace Team", URL = "https://www.openspaceproject.com", diff --git a/data/assets/scene/solarsystem/dwarf_planets/makemake/makemake.asset b/data/assets/scene/solarsystem/dwarf_planets/makemake/makemake.asset index 07e5287271..63d1e8dc14 100644 --- a/data/assets/scene/solarsystem/dwarf_planets/makemake/makemake.asset +++ b/data/assets/scene/solarsystem/dwarf_planets/makemake/makemake.asset @@ -6,7 +6,6 @@ asset.require("./label", false) asset.meta = { Name = "Makemake meta asset", - Version = "1.0", Description = [[Trail, Model and Label of Makemake.]], Author = "OpenSpace Team", URL = "https://www.openspaceproject.com", diff --git a/data/assets/scene/solarsystem/dwarf_planets/makemake/planet.asset b/data/assets/scene/solarsystem/dwarf_planets/makemake/planet.asset index da89544973..728f53f51b 100644 --- a/data/assets/scene/solarsystem/dwarf_planets/makemake/planet.asset +++ b/data/assets/scene/solarsystem/dwarf_planets/makemake/planet.asset @@ -1,9 +1,9 @@ -local sun = asset.require("scene/solarsystem/sun/sun") +local sun = asset.require("scene/solarsystem/sun/transforms") local transforms = asset.require("./transforms") -local modelFolder = asset.syncedResource({ +local modelFolder = asset.resource({ Name = "Makemake Model", Type = "HttpSynchronization", Identifier = "makemake_model", @@ -54,7 +54,6 @@ asset.export("Planet", Planet) asset.meta = { Name = "Makemake Globe", - Version = "1.0", Description = [[Globe of Makemake]], Author = "OpenSpace Team", URL = "https://solarsystem.nasa.gov/planets/dwarf-planets/makemake/in-depth/", diff --git a/data/assets/scene/solarsystem/dwarf_planets/makemake/trail.asset b/data/assets/scene/solarsystem/dwarf_planets/makemake/trail.asset index f9fcf61293..d9f8506ee1 100644 --- a/data/assets/scene/solarsystem/dwarf_planets/makemake/trail.asset +++ b/data/assets/scene/solarsystem/dwarf_planets/makemake/trail.asset @@ -5,21 +5,20 @@ local transforms = asset.require("./transforms") local Trail = { Identifier = "MakemakeTrail", - Parent = sunTransforms.SunECLIPJ2000.Identifier, + Parent = sunTransforms.SunEclipJ2000.Identifier, Renderable = { Type = "RenderableTrailOrbit", + Enabled = asset.enabled, + Translation = transforms.Translation, Color = { 0.2, 0.8, 0.3 }, Period = 111233.3435553189, Resolution = 10000, - Enabled = asset.enabled, - Fade = 1.24, - Translation = transforms.Translation + Fade = 1.24 }, Tag = { "planetTrail_dwarf" }, GUI = { Name = "Makemake Trail", - Path = "/Solar System/Dwarf Planets/Makemake", - Description = "Trail of Makemake" + Path = "/Solar System/Dwarf Planets/Makemake" } } @@ -38,7 +37,6 @@ asset.export("Trail", Trail) asset.meta = { Name = "Makemake Trail", - Version = "1.0", Description = [[Trail of Makemake]], Author = "OpenSpace Team", URL = "https://www.openspaceproject.com", diff --git a/data/assets/scene/solarsystem/dwarf_planets/makemake/transforms.asset b/data/assets/scene/solarsystem/dwarf_planets/makemake/transforms.asset index 18131e56d3..ebc89a82d6 100644 --- a/data/assets/scene/solarsystem/dwarf_planets/makemake/transforms.asset +++ b/data/assets/scene/solarsystem/dwarf_planets/makemake/transforms.asset @@ -18,7 +18,7 @@ local Translation = { local Position = { Identifier = "MakemakePosition", - Parent = transforms.SunECLIPJ2000.Identifier, + Parent = transforms.SunEclipJ2000.Identifier, Transform = { Translation = Translation }, @@ -31,11 +31,11 @@ local Position = { asset.onInitialize(function() - openspace.addSceneGraphNode(Position) + openspace.addSceneGraphNode(Position) end) asset.onDeinitialize(function() - openspace.removeSceneGraphNode(Position) + openspace.removeSceneGraphNode(Position) end) asset.export("Translation", Translation) @@ -45,7 +45,6 @@ asset.export("Position", Position) asset.meta = { Name = "Makemake Position (Keplerian)", - Version = "1.0", Description = [[Position of Makemake. KeplerTranslation Version Data from JPL Horizons]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/dwarf_planets/orcus/label.asset b/data/assets/scene/solarsystem/dwarf_planets/orcus/label.asset index d1022926c5..d27fc95cd9 100644 --- a/data/assets/scene/solarsystem/dwarf_planets/orcus/label.asset +++ b/data/assets/scene/solarsystem/dwarf_planets/orcus/label.asset @@ -6,8 +6,8 @@ local Label = { Identifier = "OrcusLabel", Parent = transforms.Position.Identifier, Renderable = { - Enabled = asset.enabled, Type = "RenderableLabel", + Enabled = asset.enabled, Text = "Orcus", FontSize = 70.0, Size = 9.10, @@ -42,7 +42,6 @@ asset.export("Label", Label) asset.meta = { Name = "Orcus Label", - Version = "1.0", Description = [[Label of Orcus]], Author = "OpenSpace Team", URL = "https://www.openspaceproject.com", diff --git a/data/assets/scene/solarsystem/dwarf_planets/orcus/orcus.asset b/data/assets/scene/solarsystem/dwarf_planets/orcus/orcus.asset index e50a65947f..7239b5dcb4 100644 --- a/data/assets/scene/solarsystem/dwarf_planets/orcus/orcus.asset +++ b/data/assets/scene/solarsystem/dwarf_planets/orcus/orcus.asset @@ -6,7 +6,6 @@ asset.require("./label", false) asset.meta = { Name = "Orcus meta asset", - Version = "1.0", Description = [[Trail, Model and Label of Orcus.]], Author = "OpenSpace Team", URL = "https://www.openspaceproject.com", diff --git a/data/assets/scene/solarsystem/dwarf_planets/orcus/planet.asset b/data/assets/scene/solarsystem/dwarf_planets/orcus/planet.asset index a96bfc62e8..97aeb7abc6 100644 --- a/data/assets/scene/solarsystem/dwarf_planets/orcus/planet.asset +++ b/data/assets/scene/solarsystem/dwarf_planets/orcus/planet.asset @@ -1,4 +1,4 @@ -local sun = asset.require("scene/solarsystem/sun/sun") +local sun = asset.require("scene/solarsystem/sun/transforms") local transforms = asset.require("./transforms") @@ -15,14 +15,11 @@ local Planet = { }, Renderable = { Type = "RenderableGlobe", - Radii = { 910000, 910000, 917000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 910000, 910000, 917000 } }, GUI = { Name = "Orcus", - Path = "/Solar System/Dwarf Planets/Orcus", - Description = "Globe of Orcus" + Path = "/Solar System/Dwarf Planets/Orcus" } } @@ -41,7 +38,6 @@ asset.export("Planet", Planet) asset.meta = { Name = "Orcus Globe", - Version = "1.0", Description = [[Globe of Orcus]], Author = "OpenSpace Team", URL = "https://www.openspaceproject.com", diff --git a/data/assets/scene/solarsystem/dwarf_planets/orcus/trail.asset b/data/assets/scene/solarsystem/dwarf_planets/orcus/trail.asset index f4c33eeb28..185e661178 100644 --- a/data/assets/scene/solarsystem/dwarf_planets/orcus/trail.asset +++ b/data/assets/scene/solarsystem/dwarf_planets/orcus/trail.asset @@ -5,21 +5,20 @@ local transforms = asset.require("./transforms") local Trail = { Identifier = "OrcusTrail", - Parent = sunTransforms.SunECLIPJ2000.Identifier, + Parent = sunTransforms.SunEclipJ2000.Identifier, Renderable = { Type = "RenderableTrailOrbit", + Enabled = asset.enabled, + Translation = transforms.Translation, Color = { 0.2, 0.8, 0.3 }, Period = 89359.12208173508, Resolution = 10000, - Enabled = asset.enabled, - Fade = 1.24, - Translation = transforms.Translation + Fade = 1.24 }, Tag = { "planetTrail_dwarf" }, GUI = { Name = "Orcus Trail", - Path = "/Solar System/Dwarf Planets/Orcus", - Description = "Trail of Orcus" + Path = "/Solar System/Dwarf Planets/Orcus" } } @@ -38,7 +37,6 @@ asset.export("Trail", Trail) asset.meta = { Name = "Orcus Trail", - Version = "1.0", Description = [[Trail of Orcus]], Author = "OpenSpace Team", URL = "https://www.openspaceproject.com", diff --git a/data/assets/scene/solarsystem/dwarf_planets/orcus/transforms.asset b/data/assets/scene/solarsystem/dwarf_planets/orcus/transforms.asset index 53be119447..388d13f9e9 100644 --- a/data/assets/scene/solarsystem/dwarf_planets/orcus/transforms.asset +++ b/data/assets/scene/solarsystem/dwarf_planets/orcus/transforms.asset @@ -18,7 +18,7 @@ local Translation = { local Position = { Identifier = "OrcusPosition", - Parent = transforms.SunECLIPJ2000.Identifier, + Parent = transforms.SunEclipJ2000.Identifier, Transform = { Translation = Translation }, @@ -31,11 +31,11 @@ local Position = { asset.onInitialize(function() - openspace.addSceneGraphNode(Position) + openspace.addSceneGraphNode(Position) end) asset.onDeinitialize(function() - openspace.removeSceneGraphNode(Position) + openspace.removeSceneGraphNode(Position) end) asset.export("Translation", Translation) @@ -45,7 +45,6 @@ asset.export("Position", Position) asset.meta = { Name = "Orcus Position (Keplerian)", - Version = "1.0", Description = [[Position of Orcus. KeplerTranslation Version Data from JPL Horizons]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/dwarf_planets/pluto/charon/charon.asset b/data/assets/scene/solarsystem/dwarf_planets/pluto/charon/charon.asset index 368e950a3b..6c7c0079c5 100644 --- a/data/assets/scene/solarsystem/dwarf_planets/pluto/charon/charon.asset +++ b/data/assets/scene/solarsystem/dwarf_planets/pluto/charon/charon.asset @@ -1,10 +1,11 @@ local transforms = asset.require("../transforms") -asset.require("spice/base") asset.require("../trail") +local kernels = asset.require("../kernels") +local coreKernels = asset.require("spice/core") -local labelsPath = asset.syncedResource({ +local labelsPath = asset.resource({ Name = "Pluto Labels", Type = "HttpSynchronization", Identifier = "pluto_labels", @@ -17,20 +18,18 @@ local Charon = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "CHARON", - Observer = "PLUTO BARYCENTER" + Target = kernels.ID.Charon, + Observer = kernels.ID.PlutoBarycenter }, Rotation = { Type = "SpiceRotation", - SourceFrame = "IAU_CHARON", - DestinationFrame = "GALACTIC" + SourceFrame = kernels.Frame.Charon, + DestinationFrame = coreKernels.Frame.Galactic } }, Renderable = { Type = "RenderableGlobe", Radii = { 6.035E5, 6.035E5, 6.035E5 }, - SegmentsPerPatch = 64, - Layers = {}, Labels = { Enabled = false, FileName = labelsPath .. "charon.labels", @@ -44,7 +43,7 @@ local Charon = { Color = { 1.0, 1.0, 0.0 } } }, - Tag = { "planet_solarSystem", "planet_terrestrial" }, + Tag = { "moon_solarSystem", "moon_dwarf", "moon_pluto", "moon_major", "moon_major_pluto" }, GUI = { Path = "/Solar System/Dwarf Planets/Pluto/Charon" } @@ -54,8 +53,8 @@ local CharonLabel = { Identifier = "CharonLabel", Parent = Charon.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Charon", FontSize = 70.0, Size = 6.0, @@ -93,7 +92,6 @@ asset.export(CharonLabel) asset.meta = { Name = "Charon", - Version = "1.0", Description = "Charon globe with labels", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/dwarf_planets/pluto/charon/charon_trail.asset b/data/assets/scene/solarsystem/dwarf_planets/pluto/charon/charon_trail.asset index 377b3bd797..c700e2d00f 100644 --- a/data/assets/scene/solarsystem/dwarf_planets/pluto/charon/charon_trail.asset +++ b/data/assets/scene/solarsystem/dwarf_planets/pluto/charon/charon_trail.asset @@ -1,6 +1,5 @@ local transforms = asset.require("../transforms") -asset.require("spice/base") - +local kernels = asset.require("../kernels") local CharonBarycentricTrail = { @@ -10,8 +9,8 @@ local CharonBarycentricTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "CHARON", - Observer = "PLUTO BARYCENTER" + Target = kernels.ID.Charon, + Observer = kernels.ID.PlutoBarycenter }, Color = { 0.00, 0.62, 1.00 }, Period = 6.38723, @@ -21,7 +20,8 @@ local CharonBarycentricTrail = { "moonTrail_solarSystem", "moonTrail_dwarf", "moonTrail_pluto", - "moonTrail_minor" + "moonTrail_major", + "moonTrail_major_pluto" }, GUI = { Name = "Charon Barycentric Trail", @@ -44,9 +44,7 @@ asset.export(CharonBarycentricTrail) asset.meta = { Name = "Charon Barycentric Trail", - Version = "1.0", - Description = [[Trail of Charon as observed by Pluto Barycenter. Data from - NASA Spice (see base spice asset)]], + Description = "Trail of Charon as observed by Pluto Barycenter", Author = "OpenSpace Team", URL = "http://openspaceproject.com", License = "MIT license" diff --git a/data/assets/scene/solarsystem/dwarf_planets/pluto/charon/default_layers.asset b/data/assets/scene/solarsystem/dwarf_planets/pluto/charon/default_layers.asset index 7f7bf324d0..51d37b76ca 100644 --- a/data/assets/scene/solarsystem/dwarf_planets/pluto/charon/default_layers.asset +++ b/data/assets/scene/solarsystem/dwarf_planets/pluto/charon/default_layers.asset @@ -4,7 +4,6 @@ asset.require("./layers/colorlayers/greyscale_usgs", true) asset.meta = { Name = "Default Charon Layers", - Version = "1.0", Description = "Default Charon layers are: Black & White USGS", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/dwarf_planets/pluto/charon/layers/colorlayers/greyscale_usgs.asset b/data/assets/scene/solarsystem/dwarf_planets/pluto/charon/layers/colorlayers/greyscale_usgs.asset index 32022baf74..5c7b345ef4 100644 --- a/data/assets/scene/solarsystem/dwarf_planets/pluto/charon/layers/colorlayers/greyscale_usgs.asset +++ b/data/assets/scene/solarsystem/dwarf_planets/pluto/charon/layers/colorlayers/greyscale_usgs.asset @@ -6,6 +6,7 @@ local Layer = { Identifier = "Greyscale_USGS", Name = "Black & White [USGS]", Enabled = asset.enabled, + ZIndex = 10, FilePath = "WMS:https://planetarymaps.usgs.gov/cgi-bin/mapserv?map=/maps/pluto/charon_simp_cyl.map&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&LAYERS=NEWHORIZONS_CHARON_MOSAIC&SRS=EPSG:4326&BBOX=-180,-90.0003,359.972,90" } @@ -24,7 +25,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Charon Black & White [USGS]", - Version = "1.0", Description = [[Charon New Horizons LORRI MVIC Global Mosaic 300m v1. This detailed, high-quality global mosaic of Pluto's largest moon, Charon, was assembled from nearly all of the highest-resolution images obtained by the Long-Range Reconnaissance Imager diff --git a/data/assets/scene/solarsystem/dwarf_planets/pluto/default_layers.asset b/data/assets/scene/solarsystem/dwarf_planets/pluto/default_layers.asset index 9b334acece..2e368fc852 100644 --- a/data/assets/scene/solarsystem/dwarf_planets/pluto/default_layers.asset +++ b/data/assets/scene/solarsystem/dwarf_planets/pluto/default_layers.asset @@ -4,7 +4,6 @@ asset.require("./layers/colorlayers/greyscale_usgs", true) asset.meta = { Name = "Default Pluto Layers", - Version = "1.0", Description = "Default Pluto layers are: Black & White USGS", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/dwarf_planets/pluto/kernels.asset b/data/assets/scene/solarsystem/dwarf_planets/pluto/kernels.asset index e96141f851..e5063f8687 100644 --- a/data/assets/scene/solarsystem/dwarf_planets/pluto/kernels.asset +++ b/data/assets/scene/solarsystem/dwarf_planets/pluto/kernels.asset @@ -1,23 +1,56 @@ -local kernels = asset.syncedResource({ +local coreKernels = asset.require("spice/core") + + + +local data = asset.resource({ Name = "Pluto Kernels", Type = "HttpSynchronization", Identifier = "pluto_kernels", Version = 1 }) -local PlutoKernels = { - kernels .. "NavPE_de433_od122.bsp", - kernels .. "NavSE_plu047_od122.bsp", - kernels .. "ssd_jpl_nasa_gov_plu043.bsp" + +local kernels = { + data .. "NavPE_de433_od122.bsp", + data .. "NavSE_plu047_od122.bsp", + data .. "ssd_jpl_nasa_gov_plu043.bsp" } -asset.export("PlutoKernels", PlutoKernels) +local ID = { + PlutoBarycenter = coreKernels.ID.PlutoBarycenter, + Charon = "CHARON", + Hydra = "HYDRA", + Styx = "STYX", + Nix = "NIX", + Kerberos = "KERBEROS", + Pluto = coreKernels.ID.Pluto +} + +local Frame = { + Pluto = coreKernels.Frame.Pluto, + Charon = coreKernels.Frame.Charon, + Hydra = coreKernels.Frame.Hydra, + Styx = coreKernels.Frame.Styx, + Nix = coreKernels.Frame.Nix, + Kerberos = coreKernels.Frame.Kerberos +} + + +asset.onInitialize(function() + openspace.spice.loadKernel(kernels) +end) + +asset.onDeinitialize(function() + openspace.spice.unloadKernel(kernels) +end) + +asset.export("ID", ID) +asset.export("Frame", Frame) asset.meta = { Name = "Pluto Spice Kernels", - Version = "1.0", Description = "Generic SPICE kernels for Pluto", Author = "OpenSpace Team", URL = "https://naif.jpl.nasa.gov/pub/naif/pds/wgc/kernels/spk/", diff --git a/data/assets/scene/solarsystem/dwarf_planets/pluto/layers/colorlayers/greyscale_usgs.asset b/data/assets/scene/solarsystem/dwarf_planets/pluto/layers/colorlayers/greyscale_usgs.asset index fd91a7db6f..e988a70e84 100644 --- a/data/assets/scene/solarsystem/dwarf_planets/pluto/layers/colorlayers/greyscale_usgs.asset +++ b/data/assets/scene/solarsystem/dwarf_planets/pluto/layers/colorlayers/greyscale_usgs.asset @@ -6,6 +6,7 @@ local Layer = { Identifier = "Greyscale_USGS", Name = "Black & White [USGS]", Enabled = asset.enabled, + ZIndex = 10, FilePath = "WMS:https://planetarymaps.usgs.gov/cgi-bin/mapserv?map=/maps/pluto/pluto_simp_cyl.map&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&LAYERS=NEWHORIZONS_PLUTO_MOSAIC&SRS=EPSG:4326&BBOX=-180,-90,360,90" } @@ -24,7 +25,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Pluto Black & White [USGS]", - Version = "1.0", Description = [[This detailed, high-quality global mosaic of Pluto was assembled from nearly all of the highest-resolution images obtained by the Long-Range Reconnaissance Imager (LORRI) and the Multispectral Visible Imaging Camera (MVIC) diff --git a/data/assets/scene/solarsystem/dwarf_planets/pluto/minor/hydra.asset b/data/assets/scene/solarsystem/dwarf_planets/pluto/minor/hydra.asset index aa11471028..afd8d52428 100644 --- a/data/assets/scene/solarsystem/dwarf_planets/pluto/minor/hydra.asset +++ b/data/assets/scene/solarsystem/dwarf_planets/pluto/minor/hydra.asset @@ -9,17 +9,15 @@ local Hydra = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "HYDRA", - Observer = "PLUTO BARYCENTER" + Target = kernels.ID.Hydra, + Observer = kernels.ID.PlutoBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 53000, 53000, 53000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 53000, 53000, 53000 } }, - Tag = { "moon_solarSystem", "moon_dwarf", "moon_pluto", "moon_minor" }, + Tag = { "moon_solarSystem", "moon_dwarf", "moon_pluto", "moon_minor", "moon_minor_pluto" }, GUI = { Path = "/Solar System/Dwarf Planets/Pluto/Moons/Hydra" } @@ -32,8 +30,8 @@ local HydraTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "HYDRA", - Observer = "PLUTO BARYCENTER", + Target = kernels.ID.Hydra, + Observer = kernels.ID.PlutoBarycenter }, Color = { 0.00, 0.62, 1.00 }, Period = 38.20177, @@ -43,7 +41,8 @@ local HydraTrail = { "moonTrail_solarSystem", "moonTrail_dwarf", "moonTrail_pluto", - "moonTrail_minor" + "moonTrail_minor", + "moonTrail_minor_pluto" }, GUI = { Name = "Hydra Trail", @@ -55,8 +54,8 @@ local HydraLabel = { Identifier = "HydraLabel", Parent = Hydra.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Hydra", FontSize = 70.0, Size = 6.0, @@ -78,8 +77,6 @@ local HydraLabel = { asset.onInitialize(function() - openspace.spice.loadKernel(kernels.PlutoKernels) - openspace.addSceneGraphNode(Hydra) openspace.addSceneGraphNode(HydraTrail) openspace.addSceneGraphNode(HydraLabel) @@ -89,8 +86,6 @@ asset.onDeinitialize(function() openspace.removeSceneGraphNode(HydraLabel) openspace.removeSceneGraphNode(HydraTrail) openspace.removeSceneGraphNode(Hydra) - - openspace.spice.unloadKernel(kernels.PlutoKernels) end) asset.export(Hydra) @@ -100,9 +95,7 @@ asset.export(HydraTrail) asset.meta = { Name = "Hydra", - Version = "1.0", - Description = [[Globe and trail for Pluto's moon Hydra. Data from NASA Spice (see base - spice asset)]], + Description = "Globe and trail for Pluto's moon Hydra", Author = "OpenSpace Team", URL = "http://openspaceproject.com", License = "MIT license" diff --git a/data/assets/scene/solarsystem/dwarf_planets/pluto/minor/kerberos.asset b/data/assets/scene/solarsystem/dwarf_planets/pluto/minor/kerberos.asset index fe4683585f..cfea0f7392 100644 --- a/data/assets/scene/solarsystem/dwarf_planets/pluto/minor/kerberos.asset +++ b/data/assets/scene/solarsystem/dwarf_planets/pluto/minor/kerberos.asset @@ -1,4 +1,5 @@ local transforms = asset.require("../transforms") +local kernels = asset.require("../kernels") @@ -8,17 +9,15 @@ local Kerberos = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "KERBEROS", - Observer = "PLUTO BARYCENTER" + Target = kernels.ID.Kerberos, + Observer = kernels.ID.PlutoBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 10000, 10000, 10000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 10000, 10000, 10000 } }, - Tag = { "moon_solarSystem", "moon_dwarf", "moon_pluto", "moon_minor" }, + Tag = { "moon_solarSystem", "moon_dwarf", "moon_pluto", "moon_minor", "moon_minor_pluto" }, GUI = { Path = "/Solar System/Dwarf Planets/Pluto/Moons/Kerberos" } @@ -31,8 +30,8 @@ local KerberosTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "KERBEROS", - Observer = "PLUTO BARYCENTER", + Target = kernels.ID.Kerberos, + Observer = kernels.ID.PlutoBarycenter }, Color = { 0.00, 0.62, 1.00 }, Period = 32.16756, @@ -42,7 +41,8 @@ local KerberosTrail = { "moonTrail_solarSystem", "moonTrail_dwarf", "moonTrail_pluto", - "moonTrail_minor" + "moonTrail_minor", + "moonTrail_minor_pluto" }, GUI = { Name = "Kerberos Trail", @@ -54,8 +54,8 @@ local KerberosLabel = { Identifier = "KerberosLabel", Parent = Kerberos.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Kerberos", FontSize = 70.0, Size = 6.0, @@ -96,9 +96,7 @@ asset.export(KerberosLabel) asset.meta = { Name = "Kerberos", - Version = "1.0", - Description = [[Globe and trail for Pluto's moon Kerberos. Data from NASA Spice (see - base spice asset)]], + Description = "Globe and trail for Pluto's moon Kerberos", Author = "OpenSpace Team", URL = "http://openspaceproject.com", License = "MIT license" diff --git a/data/assets/scene/solarsystem/dwarf_planets/pluto/minor/nix.asset b/data/assets/scene/solarsystem/dwarf_planets/pluto/minor/nix.asset index 85728475ec..4ca7c37417 100644 --- a/data/assets/scene/solarsystem/dwarf_planets/pluto/minor/nix.asset +++ b/data/assets/scene/solarsystem/dwarf_planets/pluto/minor/nix.asset @@ -1,4 +1,5 @@ local transforms = asset.require("../transforms") +local kernels = asset.require("../kernels") @@ -8,17 +9,15 @@ local Nix = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "NIX", - Observer = "PLUTO BARYCENTER" + Target = kernels.ID.Nix, + Observer = kernels.ID.PlutoBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 45000, 45000, 45000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 45000, 45000, 45000 } }, - Tag = { "moon_solarSystem", "moon_dwarf", "moon_pluto", "moon_minor" }, + Tag = { "moon_solarSystem", "moon_dwarf", "moon_pluto", "moon_minor", "moon_minor_pluto" }, GUI = { Path = "/Solar System/Dwarf Planets/Pluto/Moons/Nix" } @@ -31,8 +30,8 @@ local NixTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "NIX", - Observer = "PLUTO BARYCENTER", + Target = kernels.ID.Nix, + Observer = kernels.ID.PlutoBarycenter }, Color = { 0.00, 0.62, 1.00 }, Period = 24.85463, @@ -42,7 +41,8 @@ local NixTrail = { "moonTrail_solarSystem", "moonTrail_dwarf", "moonTrail_pluto", - "moonTrail_minor" + "moonTrail_minor", + "moonTrail_minor_pluto" }, GUI = { Name = "Nix Trail", @@ -54,8 +54,8 @@ local NixLabel = { Identifier = "NixLabel", Parent = Nix.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Nix", FontSize = 70.0, Size = 6.0, @@ -96,9 +96,7 @@ asset.export(NixLabel) asset.meta = { Name = "Nix", - Version = "1.0", - Description = [[Globe and trail for Pluto's moon Nix. Data from NASA Spice (see base - spice asset)]], + Description = "Globe and trail for Pluto's moon Nix", Author = "OpenSpace Team", URL = "http://openspaceproject.com", License = "MIT license" diff --git a/data/assets/scene/solarsystem/dwarf_planets/pluto/minor/styx.asset b/data/assets/scene/solarsystem/dwarf_planets/pluto/minor/styx.asset index 76d28680d1..ecb06af177 100644 --- a/data/assets/scene/solarsystem/dwarf_planets/pluto/minor/styx.asset +++ b/data/assets/scene/solarsystem/dwarf_planets/pluto/minor/styx.asset @@ -1,4 +1,6 @@ local transforms = asset.require("../transforms") +local kernels = asset.require("../kernels") + local Styx = { @@ -7,17 +9,15 @@ local Styx = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "STYX", - Observer = "PLUTO BARYCENTER" + Target = kernels.ID.Styx, + Observer = kernels.ID.PlutoBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 45000, 45000, 45000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 45000, 45000, 45000 } }, - Tag = { "moon_solarSystem", "moon_dwarf", "moon_pluto", "moon_minor" }, + Tag = { "moon_solarSystem", "moon_dwarf", "moon_pluto", "moon_minor", "moon_minor_pluto" }, GUI = { Path = "/Solar System/Dwarf Planets/Pluto/Moons/Styx" } @@ -30,8 +30,8 @@ local StyxTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "STYX", - Observer = "PLUTO BARYCENTER", + Target = kernels.ID.Styx, + Observer = kernels.ID.PlutoBarycenter }, Color = { 0.00, 0.62, 1.00 }, Period = 20.16155, @@ -41,7 +41,8 @@ local StyxTrail = { "moonTrail_solarSystem", "moonTrail_dwarf", "moonTrail_pluto", - "moonTrail_minor" + "moonTrail_minor", + "moonTrail_minor_pluto" }, GUI = { Name = "Styx Trail", @@ -53,8 +54,8 @@ local StyxLabel = { Identifier = "StyxLabel", Parent = Styx.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Styx", FontSize = 70.0, Size = 6.0, @@ -95,9 +96,7 @@ asset.export(StyxLabel) asset.meta = { Name = "Styx", - Version = "1.0", - Description = [[Globe and trail for Pluto's moon Styx. Data from NASA Spice (see base - spice asset)]], + Description = "Globe and trail for Pluto's moon Styx", Author = "OpenSpace Team", URL = "http://openspaceproject.com", License = "MIT license" diff --git a/data/assets/scene/solarsystem/dwarf_planets/pluto/pluto.asset b/data/assets/scene/solarsystem/dwarf_planets/pluto/pluto.asset index 67b23a287f..33cb68425d 100644 --- a/data/assets/scene/solarsystem/dwarf_planets/pluto/pluto.asset +++ b/data/assets/scene/solarsystem/dwarf_planets/pluto/pluto.asset @@ -1,10 +1,10 @@ local transforms = asset.require("./transforms") -asset.require("spice/base") +local coreKernels = asset.require("spice/core") asset.require("./trail") -local labelsPath = asset.syncedResource({ +local labelsPath = asset.resource({ Name = "Pluto Labels", Type = "HttpSynchronization", Identifier = "pluto_labels", @@ -18,20 +18,18 @@ local Pluto = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "PLUTO", - Observer = "PLUTO BARYCENTER" + Target = coreKernels.ID.Pluto, + Observer = coreKernels.ID.PlutoBarycenter }, Rotation = { Type = "SpiceRotation", - SourceFrame = "IAU_PLUTO", - DestinationFrame = "GALACTIC" + SourceFrame = coreKernels.Frame.Pluto, + DestinationFrame = coreKernels.Frame.Galactic } }, Renderable = { Type = "RenderableGlobe", Radii = { 1173000, 1173000, 1173000 }, - SegmentsPerPatch = 64, - Layers = {}, Labels = { Enabled = false, FileName = labelsPath .. "pluto.labels", @@ -55,8 +53,8 @@ local PlutoLabel = { Identifier = "PlutoLabel", Parent = Pluto.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Pluto", FontSize = 70.0, Size = 9.10, @@ -94,7 +92,6 @@ asset.export(PlutoLabel) asset.meta = { Name = "Pluto", - Version = "1.0", Description = "Pluto globe, and main planet label", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/dwarf_planets/pluto/pluto_trail.asset b/data/assets/scene/solarsystem/dwarf_planets/pluto/pluto_trail.asset index 44eec87c01..c755a54906 100644 --- a/data/assets/scene/solarsystem/dwarf_planets/pluto/pluto_trail.asset +++ b/data/assets/scene/solarsystem/dwarf_planets/pluto/pluto_trail.asset @@ -1,5 +1,5 @@ local transforms = asset.require("./transforms") -asset.require("spice/base") +local coreKernels = asset.require("spice/core") @@ -10,8 +10,8 @@ local PlutoTrailBarycentric = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "PLUTO", - Observer = "PLUTO BARYCENTER" + Target = coreKernels.ID.Pluto, + Observer = coreKernels.ID.PlutoBarycenter }, Color = { 0.00, 0.62, 1.00 }, Period = 6.38723, @@ -40,9 +40,7 @@ asset.export(PlutoTrailBarycentric) asset.meta = { Name = "Pluto Barycentric Trail", - Version = "1.0", - Description = [[Trail of Pluto as observed by it's Barrycenter. Data from NASA Spice - (see base spice asset)]], + Description = "Trail of Pluto as observed by its Barycenter", Author = "OpenSpace Team", URL = "http://openspaceproject.com", License = "MIT license" diff --git a/data/assets/scene/solarsystem/dwarf_planets/pluto/pluto_trail_kepler.asset b/data/assets/scene/solarsystem/dwarf_planets/pluto/pluto_trail_kepler.asset index 0d7ff1af20..e0ff0f1342 100644 --- a/data/assets/scene/solarsystem/dwarf_planets/pluto/pluto_trail_kepler.asset +++ b/data/assets/scene/solarsystem/dwarf_planets/pluto/pluto_trail_kepler.asset @@ -1,17 +1,15 @@ local transforms = asset.require("scene/solarsystem/sun/transforms") -local kernels = asset.require("./kernels").PlutoKernels -asset.require("spice/base") local AU = 1.496e+8 - local PlutoKeplerianTrail = { Identifier = "PlutoKeplerianTrail", - Parent = transforms.SunECLIPJ2000.Identifier, + Parent = transforms.SunEclipJ2000.Identifier, Renderable = { Type = "RenderableTrailOrbit", + Enabled = false, Translation = { Type = "KeplerTranslation", Eccentricity = 0.2543033082909471, @@ -20,13 +18,12 @@ local PlutoKeplerianTrail = { AscendingNode = 110.2099981996057, ArgumentOfPeriapsis = 114.2248569189779, MeanAnomaly = 14.53, - Epoch = "2000 01 01 00:00", + Epoch = "2000 JAN 01 00:00:00", Period = 7824380000 }, Color = { 0.2, 0.8, 0.3 }, Period = 90487.27692706819, - Resolution = 1000, - Enabled = false + Resolution = 1000 }, GUI = { Name = "Pluto Keplerian Trail", @@ -50,7 +47,6 @@ asset.export(PlutoKeplerianTrail) asset.meta = { Name = "Pluto Keplerian Trail", - Version = "1.0", Description = [[Full Keplerian trail of Pluto as observed by the Sun. Data from JPL Horizons]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/dwarf_planets/pluto/system.asset b/data/assets/scene/solarsystem/dwarf_planets/pluto/system.asset index d06826b9b3..bbf35ccd96 100644 --- a/data/assets/scene/solarsystem/dwarf_planets/pluto/system.asset +++ b/data/assets/scene/solarsystem/dwarf_planets/pluto/system.asset @@ -13,7 +13,6 @@ asset.require("./minor/styx") asset.meta = { Name = "Pluto System", - Version = "1.0", Description = [[Meta asset for the Pluto system, containing : Pluto, Pluto Trail, Charon, Charon Trail, Hydra, Kerberos, Nix, and Styx]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/dwarf_planets/pluto/trail.asset b/data/assets/scene/solarsystem/dwarf_planets/pluto/trail.asset index ef1632c31c..18209e1341 100644 --- a/data/assets/scene/solarsystem/dwarf_planets/pluto/trail.asset +++ b/data/assets/scene/solarsystem/dwarf_planets/pluto/trail.asset @@ -1,6 +1,5 @@ local transforms = asset.require("scene/solarsystem/sun/transforms") -local kernels = asset.require("./kernels") -asset.require("spice/base") +local coreKernels = asset.require("spice/core") @@ -11,8 +10,8 @@ local PlutoBarycenterTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "PLUTO BARYCENTER", - Observer = "SSB" + Target = coreKernels.ID.PlutoBarycenter, + Observer = coreKernels.ID.SolarSystemBarycenter }, Color = { 0.3, 0.7, 0.3 }, Period = 365.25, @@ -29,15 +28,11 @@ local PlutoBarycenterTrail = { asset.onInitialize(function() - openspace.spice.loadKernel(kernels.PlutoKernels) - openspace.addSceneGraphNode(PlutoBarycenterTrail) end) asset.onDeinitialize(function() openspace.removeSceneGraphNode(PlutoBarycenterTrail) - - openspace.spice.unloadKernel(kernels.PlutoKernels) end) asset.export(PlutoBarycenterTrail) @@ -46,9 +41,7 @@ asset.export(PlutoBarycenterTrail) asset.meta = { Name = "Pluto Barycenter Trail", - Version = "1.0", - Description = [[Trail of Pluto Barycenter as observed by the Sun. Data from NASA Spice - (see base spice asset)]], + Description = "Trail of Pluto Barycenter as observed by the Sun", Author = "OpenSpace Team", URL = "http://openspaceproject.com", License = "MIT license" diff --git a/data/assets/scene/solarsystem/dwarf_planets/pluto/transforms.asset b/data/assets/scene/solarsystem/dwarf_planets/pluto/transforms.asset index 58c15ccaed..0656a87319 100644 --- a/data/assets/scene/solarsystem/dwarf_planets/pluto/transforms.asset +++ b/data/assets/scene/solarsystem/dwarf_planets/pluto/transforms.asset @@ -1,6 +1,5 @@ local transforms = asset.require("scene/solarsystem/sun/transforms") -local kernels = asset.require("./kernels") -asset.require("spice/base") +local coreKernels = asset.require("spice/core") @@ -10,8 +9,8 @@ local PlutoBarycenter = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "PLUTO BARYCENTER", - Observer = "SSB" + Target = coreKernels.ID.PlutoBarycenter, + Observer = coreKernels.ID.SolarSystemBarycenter } }, GUI = { @@ -22,15 +21,11 @@ local PlutoBarycenter = { asset.onInitialize(function() - openspace.spice.loadKernel(kernels.PlutoKernels) - openspace.addSceneGraphNode(PlutoBarycenter) end) asset.onDeinitialize(function() openspace.removeSceneGraphNode(PlutoBarycenter) - - openspace.spice.unloadKernel(kernels.PlutoKernels) end) asset.export(PlutoBarycenter) @@ -39,7 +34,6 @@ asset.export(PlutoBarycenter) asset.meta = { Name = "Pluto Transforms", - Version = "1.0", Description = "Pluto Barycenter transform", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/dwarf_planets/quaoar/label.asset b/data/assets/scene/solarsystem/dwarf_planets/quaoar/label.asset index 571f695279..42ed67349d 100644 --- a/data/assets/scene/solarsystem/dwarf_planets/quaoar/label.asset +++ b/data/assets/scene/solarsystem/dwarf_planets/quaoar/label.asset @@ -6,8 +6,8 @@ local Label = { Identifier = "QuaoarLabel", Parent = transforms.Position.Identifier, Renderable = { - Enabled = asset.enabled, Type = "RenderableLabel", + Enabled = asset.enabled, Text = "Quaoar", FontSize = 70.0, Size = 9.10, @@ -42,7 +42,6 @@ asset.export("Label", Label) asset.meta = { Name = "Quaoar Label", - Version = "1.0", Description = [[Label of Quaoar]], Author = "OpenSpace Team", URL = "https://www.openspaceproject.com", diff --git a/data/assets/scene/solarsystem/dwarf_planets/quaoar/planet.asset b/data/assets/scene/solarsystem/dwarf_planets/quaoar/planet.asset index 15e2a00d0f..a9628d9e3b 100644 --- a/data/assets/scene/solarsystem/dwarf_planets/quaoar/planet.asset +++ b/data/assets/scene/solarsystem/dwarf_planets/quaoar/planet.asset @@ -15,9 +15,7 @@ local Planet = { }, Renderable = { Type = "RenderableGlobe", - Radii = { 1138000, 1138000, 1036000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 1138000, 1138000, 1036000 } }, GUI = { Name = "Quaoar", @@ -41,7 +39,6 @@ asset.export("Planet", Planet) asset.meta = { Name = "Quaoar Globe", - Version = "1.0", Description = [[Globe of Quaoar]], Author = "OpenSpace Team", URL = "https://www.openspaceproject.com", diff --git a/data/assets/scene/solarsystem/dwarf_planets/quaoar/quaoar.asset b/data/assets/scene/solarsystem/dwarf_planets/quaoar/quaoar.asset index 973be172e1..683e41e622 100644 --- a/data/assets/scene/solarsystem/dwarf_planets/quaoar/quaoar.asset +++ b/data/assets/scene/solarsystem/dwarf_planets/quaoar/quaoar.asset @@ -6,7 +6,6 @@ asset.require("./label", false) asset.meta = { Name = "Quaoar meta asset", - Version = "1.0", Description = [[Trail, Model and Label of Quaoar.]], Author = "OpenSpace Team", URL = "https://www.openspaceproject.com", diff --git a/data/assets/scene/solarsystem/dwarf_planets/quaoar/trail.asset b/data/assets/scene/solarsystem/dwarf_planets/quaoar/trail.asset index 1e7c5bfa6c..8ee5bcc0fc 100644 --- a/data/assets/scene/solarsystem/dwarf_planets/quaoar/trail.asset +++ b/data/assets/scene/solarsystem/dwarf_planets/quaoar/trail.asset @@ -5,15 +5,15 @@ local transforms = asset.require("./transforms") local Trail = { Identifier = "QuaoarTrail", - Parent = sunTransforms.SunECLIPJ2000.Identifier, + Parent = sunTransforms.SunEclipJ2000.Identifier, Renderable = { Type = "RenderableTrailOrbit", + Enabled = asset.enabled, + Translation = transforms.Translation, Color = { 0.2, 0.8, 0.3 }, Period = 104691.8599963541, Resolution = 10000, - Enabled = asset.enabled, - Fade = 1.24, - Translation = transforms.Translation + Fade = 1.24 }, Tag = { "planetTrail_dwarf" }, GUI = { @@ -38,7 +38,6 @@ asset.export("Trail", Trail) asset.meta = { Name = "Quaoar Trail", - Version = "1.0", Description = [[Trail of Quaoar]], Author = "OpenSpace Team", URL = "https://www.openspaceproject.com", diff --git a/data/assets/scene/solarsystem/dwarf_planets/quaoar/transforms.asset b/data/assets/scene/solarsystem/dwarf_planets/quaoar/transforms.asset index 938c66a7ae..a4ad4ec616 100644 --- a/data/assets/scene/solarsystem/dwarf_planets/quaoar/transforms.asset +++ b/data/assets/scene/solarsystem/dwarf_planets/quaoar/transforms.asset @@ -18,7 +18,7 @@ local Translation = { local Position = { Identifier = "QuaoarPosition", - Parent = transforms.SunECLIPJ2000.Identifier, + Parent = transforms.SunEclipJ2000.Identifier, Transform = { Translation = Translation }, @@ -45,7 +45,6 @@ asset.export("Position", Position) asset.meta = { Name = "Quaoar Position (Keplerian)", - Version = "1.0", Description = [[Position of Quaoar. KeplerTranslation Version Data from JPL Horizons]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/dwarf_planets/sedna/label.asset b/data/assets/scene/solarsystem/dwarf_planets/sedna/label.asset index 2aca0deb20..5e7f34382d 100644 --- a/data/assets/scene/solarsystem/dwarf_planets/sedna/label.asset +++ b/data/assets/scene/solarsystem/dwarf_planets/sedna/label.asset @@ -6,8 +6,8 @@ local Label = { Identifier = "SednaLabel", Parent = transforms.Position.Identifier, Renderable = { - Enabled = asset.enabled, Type = "RenderableLabel", + Enabled = asset.enabled, Text = "Sedna", FontSize = 70.0, Size = 9.10, @@ -42,7 +42,6 @@ asset.export("Label", Label) asset.meta = { Name = "Sedna Label", - Version = "1.0", Description = [[Label of Sedna]], Author = "OpenSpace Team", URL = "https://www.openspaceproject.com", diff --git a/data/assets/scene/solarsystem/dwarf_planets/sedna/planet.asset b/data/assets/scene/solarsystem/dwarf_planets/sedna/planet.asset index 1ca65a678d..e0f2c89cdb 100644 --- a/data/assets/scene/solarsystem/dwarf_planets/sedna/planet.asset +++ b/data/assets/scene/solarsystem/dwarf_planets/sedna/planet.asset @@ -1,4 +1,3 @@ -local sun = asset.require("scene/solarsystem/sun/sun") local transforms = asset.require("./transforms") @@ -15,9 +14,7 @@ local Planet = { }, Renderable = { Type = "RenderableGlobe", - Radii = { 995000, 1060000, 1025000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 995000, 1060000, 1025000 } }, GUI = { Name = "Sedna", @@ -41,7 +38,6 @@ asset.export("Planet", Planet) asset.meta = { Name = "Sedna Globe", - Version = "1.0", Description = [[Globe of Sedna]], Author = "OpenSpace Team", URL = "https://www.openspaceproject.com", diff --git a/data/assets/scene/solarsystem/dwarf_planets/sedna/sedna.asset b/data/assets/scene/solarsystem/dwarf_planets/sedna/sedna.asset index f8581311c1..2fc2dcc559 100644 --- a/data/assets/scene/solarsystem/dwarf_planets/sedna/sedna.asset +++ b/data/assets/scene/solarsystem/dwarf_planets/sedna/sedna.asset @@ -6,7 +6,6 @@ asset.require("./label", false) asset.meta = { Name = "Sedna meta asset", - Version = "1.0", Description = [[Trail, Model and Label of Sedna.]], Author = "OpenSpace Team", URL = "https://www.openspaceproject.com", diff --git a/data/assets/scene/solarsystem/dwarf_planets/sedna/trail.asset b/data/assets/scene/solarsystem/dwarf_planets/sedna/trail.asset index 3586cef71e..bbaa6de828 100644 --- a/data/assets/scene/solarsystem/dwarf_planets/sedna/trail.asset +++ b/data/assets/scene/solarsystem/dwarf_planets/sedna/trail.asset @@ -5,15 +5,15 @@ local transforms = asset.require("./transforms") local Trail = { Identifier = "SednaTrail", - Parent = sunTransforms.SunECLIPJ2000.Identifier, + Parent = sunTransforms.SunEclipJ2000.Identifier, Renderable = { Type = "RenderableTrailOrbit", + Enabled = asset.enabled, + Translation = transforms.Translation, Color = { 0.2, 0.8, 0.3 }, Period = 4485811.755507208, Resolution = 10000, - Enabled = asset.enabled, - Fade = 1.24, - Translation = transforms.Translation + Fade = 1.24 }, Tag = { "planetTrail_dwarf" }, GUI = { @@ -38,7 +38,6 @@ asset.export("Trail", Trail) asset.meta = { Name = "Sedna Trail", - Version = "1.0", Description = [[Trail of Sedna]], Author = "OpenSpace Team", URL = "https://www.openspaceproject.com", diff --git a/data/assets/scene/solarsystem/dwarf_planets/sedna/transforms.asset b/data/assets/scene/solarsystem/dwarf_planets/sedna/transforms.asset index a1c062e0f1..ab99f667b7 100644 --- a/data/assets/scene/solarsystem/dwarf_planets/sedna/transforms.asset +++ b/data/assets/scene/solarsystem/dwarf_planets/sedna/transforms.asset @@ -18,7 +18,7 @@ local Translation = { local Position = { Identifier = "SednaPosition", - Parent = transforms.SunECLIPJ2000.Identifier, + Parent = transforms.SunEclipJ2000.Identifier, Transform = { Translation = Translation }, @@ -45,7 +45,6 @@ asset.export("Position", Position) asset.meta = { Name = "Sedna Position (Keplerian)", - Version = "1.0", Description = [[Position of Sedna. KeplerTranslation Version Data from JPL Horizons]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/dwarf_planets/vesta/label.asset b/data/assets/scene/solarsystem/dwarf_planets/vesta/label.asset index 2b80ab524e..400036ae5c 100644 --- a/data/assets/scene/solarsystem/dwarf_planets/vesta/label.asset +++ b/data/assets/scene/solarsystem/dwarf_planets/vesta/label.asset @@ -6,8 +6,8 @@ local Label = { Identifier = "VestaLabel", Parent = transforms.Position.Identifier, Renderable = { - Enabled = asset.enabled, Type = "RenderableLabel", + Enabled = asset.enabled, Text = "Vesta", FontSize = 50.0, Size = 8.5, @@ -42,7 +42,6 @@ asset.export("Label", Label) asset.meta = { Name = "Vesta Label", - Version = "1.0", Description = [[Label of Vesta]], Author = "OpenSpace Team", URL = "https://www.openspaceproject.com", diff --git a/data/assets/scene/solarsystem/dwarf_planets/vesta/planet.asset b/data/assets/scene/solarsystem/dwarf_planets/vesta/planet.asset index 3e1bd8f547..52a2c410d7 100644 --- a/data/assets/scene/solarsystem/dwarf_planets/vesta/planet.asset +++ b/data/assets/scene/solarsystem/dwarf_planets/vesta/planet.asset @@ -1,9 +1,9 @@ -local sun = asset.require("scene/solarsystem/sun/sun") +local sun = asset.require("scene/solarsystem/sun/transforms") local transforms = asset.require("./transforms") -local models = asset.syncedResource({ +local models = asset.resource({ Name = "Vesta Models", Type = "HttpSynchronization", Identifier = "vesta_model", @@ -52,7 +52,6 @@ asset.export("Planet", VestaModel) asset.meta = { Name = "Vesta Model", - Version = "1.0", Description = [[Model of Vesta]], Author = "OpenSpace Team", URL = "https://www.openspaceproject.com", diff --git a/data/assets/scene/solarsystem/dwarf_planets/vesta/trail.asset b/data/assets/scene/solarsystem/dwarf_planets/vesta/trail.asset index a246933e18..230c86c856 100644 --- a/data/assets/scene/solarsystem/dwarf_planets/vesta/trail.asset +++ b/data/assets/scene/solarsystem/dwarf_planets/vesta/trail.asset @@ -5,15 +5,15 @@ local transforms = asset.require("./transforms") local Trail = { Identifier = "VestaTrail", - Parent = sunTransforms.SunECLIPJ2000.Identifier, + Parent = sunTransforms.SunEclipJ2000.Identifier, Renderable = { Type = "RenderableTrailOrbit", + Enabled = asset.enabled, + Translation = transforms.Translation, Color = { 0.2, 0.8, 0.3 }, Period = 1326.797192349944, Resolution = 10000, - Enabled = asset.enabled, - Fade = 1.24, - Translation = transforms.Translation + Fade = 1.24 }, Tag = { "planetTrail_dwarf" }, GUI = { @@ -38,7 +38,6 @@ asset.export("Trail", Trail) asset.meta = { Name = "Vesta Trail", - Version = "1.0", Description = [[Trail of Vesta]], Author = "OpenSpace Team", URL = "https://www.openspaceproject.com", diff --git a/data/assets/scene/solarsystem/dwarf_planets/vesta/transforms.asset b/data/assets/scene/solarsystem/dwarf_planets/vesta/transforms.asset index 1501b776ae..9280fc674f 100644 --- a/data/assets/scene/solarsystem/dwarf_planets/vesta/transforms.asset +++ b/data/assets/scene/solarsystem/dwarf_planets/vesta/transforms.asset @@ -18,7 +18,7 @@ local Translation = { local Position = { Identifier = "VestaPosition", - Parent = transforms.SunECLIPJ2000.Identifier, + Parent = transforms.SunEclipJ2000.Identifier, Transform = { Translation = Translation }, @@ -45,7 +45,6 @@ asset.export("Position", Position) asset.meta = { Name = "Vesta Position (Keplerian)", - Version = "1.0", Description = [[Position of Vesta. KeplerTranslation Version Data from JPL Horizons]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/dwarf_planets/vesta/vesta.asset b/data/assets/scene/solarsystem/dwarf_planets/vesta/vesta.asset index 69596c5abd..be9ae6b5a7 100644 --- a/data/assets/scene/solarsystem/dwarf_planets/vesta/vesta.asset +++ b/data/assets/scene/solarsystem/dwarf_planets/vesta/vesta.asset @@ -6,7 +6,6 @@ asset.require("./label", false) asset.meta = { Name = "Vesta meta asset", - Version = "1.0", Description = [[Trail, Model and Label of Vesta.]], Author = "OpenSpace Team", URL = "https://www.openspaceproject.com", diff --git a/data/assets/scene/solarsystem/heliosphere/2012/sun_earth_2012_fieldlines_batsrus.asset b/data/assets/scene/solarsystem/heliosphere/2012/sun_earth_2012_fieldlines_batsrus.asset index a80683ba5a..6a34d700e4 100644 --- a/data/assets/scene/solarsystem/heliosphere/2012/sun_earth_2012_fieldlines_batsrus.asset +++ b/data/assets/scene/solarsystem/heliosphere/2012/sun_earth_2012_fieldlines_batsrus.asset @@ -1,16 +1,16 @@ asset.require("scene/solarsystem/heliosphere/2012/reset_loop_action") -local transforms = asset.require("scene/solarsystem/planets/earth/magnetosphere/transforms_magnetosphere") +local transforms = asset.require("scene/solarsystem/planets/earth/transforms_gsm_sm") -local transferFunctions = asset.syncedResource({ +local transferFunctions = asset.resource({ Name = "Fieldlines Transfer Functions", Type = "HttpSynchronization", Identifier = "sun_earth_event_july_2012-fieldlines_transferfunctions", Version = 2 }) -local fieldlineData = asset.syncedResource({ +local fieldlineData = asset.resource({ Name = "Fieldlines Data BATSRUS", Type = "HttpSynchronization", Identifier = "sun_earth_event_july_2012-batsrus", @@ -59,7 +59,7 @@ local InteractionSphere = 6380000 -- A value slightly bigger than earth radius ----------------------LUTZ's JULY TRACES------------------------- local BatsrusJ12OpenClosed = { Identifier = "FL_BATSRUS_J12_OpenClosed", - Parent = transforms.GSMReferenceFrame.Identifier, + Parent = transforms.GeocentricSolarMagnetospheric.Identifier, InteractionSphere = InteractionSphere, Renderable = { Type = "RenderableFieldlinesSequence", @@ -89,7 +89,7 @@ local BatsrusJ12OpenClosed = { --------------------- VELOCITY FLOWLINES ------------------------ local BatsrusJ12FlowLines = { Identifier = "FL_BATSRUS_J12_FlowLines", - Parent = transforms.GSMReferenceFrame.Identifier, + Parent = transforms.GeocentricSolarMagnetospheric.Identifier, InteractionSphere = InteractionSphere, Renderable = { Type = "RenderableFieldlinesSequence", @@ -116,12 +116,12 @@ local BatsrusJ12FlowLines = { --------------------- Ashers seedpoints ------------------------ local BatsrusAsherStaticSeedsFlowLines = { Identifier = "FL_BATSRUS_ASHER_STATIC_SSEDS_FlowLines", - Parent = transforms.GSMReferenceFrame.Identifier, + Parent = transforms.GeocentricSolarMagnetospheric.Identifier, InteractionSphere = InteractionSphere, Renderable = { Type = "RenderableFieldlinesSequence", - SourceFolder = unzippedDataDestination.asherStatic, Enabled = false, + SourceFolder = unzippedDataDestination.asherStatic, InputFileType = "Osfls", ColorTablePaths = { batsrusTemperatureColorTable, @@ -165,7 +165,6 @@ asset.export(BatsrusAsherStaticSeedsFlowLines) asset.meta = { Name = "Fieldlines from Batsrus model of 2012 event", - Version = "1.0", Description = "Magnetic fieldlines from Batsrus model for a 2012 CME event", Author = "CCMC", URL = "", diff --git a/data/assets/scene/solarsystem/heliosphere/2012/sun_earth_2012_fieldlines_enlil.asset b/data/assets/scene/solarsystem/heliosphere/2012/sun_earth_2012_fieldlines_enlil.asset index 3287299a88..00e431c829 100644 --- a/data/assets/scene/solarsystem/heliosphere/2012/sun_earth_2012_fieldlines_enlil.asset +++ b/data/assets/scene/solarsystem/heliosphere/2012/sun_earth_2012_fieldlines_enlil.asset @@ -3,14 +3,14 @@ local transforms = asset.require("scene/solarsystem/sun/transforms_heliosphere") -local transferFunctions = asset.syncedResource({ +local transferFunctions = asset.resource({ Name = "Fieldlines Transfer Functions", Type = "HttpSynchronization", Identifier = "sun_earth_event_july_2012-fieldlines_transferfunctions", Version = 1 }) -local fieldlineData = asset.syncedResource({ +local fieldlineData = asset.resource({ Name = "Fieldlines Data ENLIL", Type = "HttpSynchronization", Identifier = "sun_earth_event_july_2012-enlil", @@ -66,7 +66,7 @@ local ENLILSliceEqPlane11AU1 = { ColorQuantity = 1, -- Velocity ColorTablePaths = { enlilDensityColorTable, - enlilVelocityColorTable, + enlilVelocityColorTable }, ColorTableRanges = colorRanges }, @@ -89,7 +89,7 @@ local ENLILSliceEqPlane11AU2 = { ColorQuantity = 1, -- Velocity ColorTablePaths = { enlilDensityColorTable, - enlilVelocityColorTable, + enlilVelocityColorTable }, ColorTableRanges = colorRanges }, @@ -113,7 +113,7 @@ local ENLILSliceLat411AU1 = { ColorQuantity = 1, -- Velocity ColorTablePaths = { enlilDensityColorTable, - enlilVelocityColorTable, + enlilVelocityColorTable }, ColorTableRanges = colorRanges }, @@ -137,7 +137,7 @@ local ENLILSliceLat411AU2 = { ColorQuantity = 1, -- Velocity ColorTablePaths = { enlilDensityColorTable, - enlilVelocityColorTable, + enlilVelocityColorTable }, ColorTableRanges = colorRanges }, @@ -158,7 +158,7 @@ local ENLILEarth = { Color = { 1.0, 1.0, 1.0, 0.6 }, ColorTablePaths = { enlilDensityColorTable, - enlilVelocityColorTable, + enlilVelocityColorTable }, ColorTableRanges = colorRanges }, @@ -179,7 +179,7 @@ local ENLILStereoA = { Color = { 1.0, 1.0, 1.0, 0.6 }, ColorTablePaths = { enlilDensityColorTable, - enlilVelocityColorTable, + enlilVelocityColorTable }, ColorTableRanges = colorRanges, FlowEnabled = true, @@ -229,7 +229,6 @@ asset.export(ENLILStereoA) asset.meta = { Name = "Fieldlines from ENLIL model of 2012 event", - Version = "1.0", Description = "Magnetic fieldlines from ENLIL model for a 2012 CME event", Author = "CCMC", URL = "", diff --git a/data/assets/scene/solarsystem/heliosphere/2012/sun_earth_2012_fieldlines_pfss.asset b/data/assets/scene/solarsystem/heliosphere/2012/sun_earth_2012_fieldlines_pfss.asset index 6053429e3d..9c3d4b2d67 100644 --- a/data/assets/scene/solarsystem/heliosphere/2012/sun_earth_2012_fieldlines_pfss.asset +++ b/data/assets/scene/solarsystem/heliosphere/2012/sun_earth_2012_fieldlines_pfss.asset @@ -2,14 +2,14 @@ local transforms = asset.require("scene/solarsystem/sun/transforms_heliosphere") -local transferFunctions = asset.syncedResource({ +local transferFunctions = asset.resource({ Name = "Fieldlines Transfer Functions", Type = "HttpSynchronization", Identifier = "sun_earth_event_july_2012-fieldlines_transferfunctions", Version = 1 }) -local fieldlineData = asset.syncedResource({ +local fieldlineData = asset.resource({ Name = "Fieldlines Data PFSS", Type = "HttpSynchronization", Identifier = "sun_earth_event_july_2012-pfss", @@ -23,7 +23,7 @@ local DarkSun = { Name = "Dark sun", Command = [[ local property = "Scene.Sun.Renderable.Layers.ColorLayers.Texture.Settings.Multiplier" - local textureMultiplier = openspace.getPropertyValue(property) + local textureMultiplier = openspace.propertyValue(property) if (textureMultiplier < 0.01) then openspace.setPropertyValueSingle(property, 1.0, 1) else @@ -62,7 +62,7 @@ local PFSS = { FlowSpeed = 75, ColorTablePaths = { pfssTopologyColorTable, - pfssBsignColorTable, + pfssBsignColorTable }, ColorTableRanges = { { 0, 2 }, @@ -78,14 +78,7 @@ local PFSS = { asset.onInitialize(function() openspace.action.registerAction(DarkSun) - openspace.addSceneGraphNode(PFSS) - - -- openspace.setPropertyValueSingle("Scene.FL_PFSS.Renderable.FlowEnabled", true) - -- openspace.setPropertyValueSingle("Scene.FL_PFSS.Renderable.Flow.Reversed", true) - --openspace.setPropertyValueSingle("Scene.FL_PFSS.Renderable.Flow.particleSize", 5) - --openspace.setPropertyValueSingle("Scene.FL_PFSS.Renderable.Flow.particleSpacing", 250) - --openspace.setPropertyValueSingle("Scene.FL_PFSS.Renderable.Flow.speed", 75.0) end) asset.onDeinitialize(function() @@ -100,7 +93,6 @@ asset.export("DarkSun", DarkSun.Identifier) asset.meta = { Name = "Fieldlines from PFSS model of 2012 event", - Version = "1.0", Description = "Magnetic fieldlines from PFSS model for a 2012 CME event", Author = "CCMC", URL = "", diff --git a/data/assets/scene/solarsystem/heliosphere/bastille_day/actions.asset b/data/assets/scene/solarsystem/heliosphere/bastille_day/actions.asset index f23e0e6a6e..f10942b180 100644 --- a/data/assets/scene/solarsystem/heliosphere/bastille_day/actions.asset +++ b/data/assets/scene/solarsystem/heliosphere/bastille_day/actions.asset @@ -99,7 +99,6 @@ asset.export("LongLoop", LongLoop.Identifier) asset.meta = { Name = "Bastille day actions", - Version = "1.0", Description = "Asset with actions related to Bastille day", Author = "CCMC, OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/heliosphere/bastille_day/carrington_to_heeq_rotation.asset b/data/assets/scene/solarsystem/heliosphere/bastille_day/carrington_to_heeq_rotation.asset index 2070e38baa..35c46b84a2 100644 --- a/data/assets/scene/solarsystem/heliosphere/bastille_day/carrington_to_heeq_rotation.asset +++ b/data/assets/scene/solarsystem/heliosphere/bastille_day/carrington_to_heeq_rotation.asset @@ -19,7 +19,6 @@ asset.export("CarringtonLongitudeToHEEQ180Rotation", CarringtonLongitudeToHEEQ18 asset.meta = { Name = "Carrington Longitude To HEEQ180 Rotation", - Version = "1.0", Description = "Contains a rotation for HEEQ180 to be used by another file", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/heliosphere/bastille_day/density_volume.asset b/data/assets/scene/solarsystem/heliosphere/bastille_day/density_volume.asset index 0ea120b38c..1f7dbef0e1 100644 --- a/data/assets/scene/solarsystem/heliosphere/bastille_day/density_volume.asset +++ b/data/assets/scene/solarsystem/heliosphere/bastille_day/density_volume.asset @@ -4,7 +4,7 @@ local sunAsset = asset.require("scene/solarsystem/sun/sun") -local densityDirectory = asset.syncedResource({ +local densityDirectory = asset.resource({ Name = "Bastille Day MAS Density", Type = "HttpSynchronization", Identifier = "bastille_day_mas_density", @@ -36,11 +36,11 @@ local DensityVolume = { Type = "RenderableTimeVaryingVolume", StepSize = 0.004, Brightness = 0.3, - TransferFunction = asset.localResource("transferfunctions/mas-mhd-r-squared-old.txt"), + TransferFunction = asset.resource("transferfunctions/mas-mhd-r-squared.txt"), SourceDirectory = densityDirectory, GridType = "Spherical", - SecondsBefore = 24 * 60 * 60, - SecondsAfter = 24 * 60 * 60, + SecondsBefore = openspace.time.secondsPerDay(), + SecondsAfter = openspace.time.secondsPerDay(), Dimensions = { 100, 100, 128 }, InvertDataAtZ = true }, @@ -56,11 +56,11 @@ local ToggleVolume = { Identifier = "os.bastilleday.densityvolume.ToggleVolume", Name = "Toggle volume", Command = [[ - if openspace.getPropertyValue("Scene.MAS-MHD-Density-bastille-day-2000.Renderable.Enabled") then + if openspace.propertyValue("Scene.MAS-MHD-Density-bastille-day-2000.Renderable.Enabled") then openspace.setPropertyValueSingle( "Scene.MAS-MHD-Density-bastille-day-2000.Renderable.Fade", 0.0, - openspace.getPropertyValue("OpenSpaceEngine.FadeDuration"), + openspace.propertyValue("OpenSpaceEngine.FadeDuration"), "Linear", 'openspace.setPropertyValueSingle("Scene.MAS-MHD-Density-bastille-day-2000.Renderable.Enabled", false)' ) @@ -69,7 +69,7 @@ local ToggleVolume = { openspace.setPropertyValueSingle( "Scene.MAS-MHD-Density-bastille-day-2000.Renderable.Fade", 1.0, - openspace.getPropertyValue("OpenSpaceEngine.FadeDuration"), + openspace.propertyValue("OpenSpaceEngine.FadeDuration"), "Linear" ) end @@ -97,7 +97,6 @@ asset.export("ToggleVolume", ToggleVolume.Identifier) asset.meta = { Name = "Predictive Science Inc. Volume Rendering Bastille Day", - Version = "1.1", Description = "Volumetric rendering for the bastille day CME event", Author = "CCMC, OpenSpace team", URL = "https://dx.doi.org/10.3847/1538-4357/aab36d", diff --git a/data/assets/scene/solarsystem/heliosphere/bastille_day/fieldlines.asset b/data/assets/scene/solarsystem/heliosphere/bastille_day/fieldlines.asset index 63eb7fd446..a7933043c5 100644 --- a/data/assets/scene/solarsystem/heliosphere/bastille_day/fieldlines.asset +++ b/data/assets/scene/solarsystem/heliosphere/bastille_day/fieldlines.asset @@ -4,7 +4,7 @@ local rot = asset.require("./carrington_to_heeq_rotation") -local fieldlinesDirectory = asset.syncedResource({ +local fieldlinesDirectory = asset.resource({ Name = "Bastille Day MAS Fieldlines", Type = "HttpSynchronization", Identifier = "bastille_day_mas_fieldlines", @@ -34,8 +34,8 @@ local Fieldlines = { AlphaBlendlingEnabled = false, InputFileType = "Osfls", ColorTablePaths = { - asset.localResource("transferfunctions/density-fieldlines.txt"), - asset.localResource("transferfunctions/velocity-fieldlines.txt") + asset.resource("transferfunctions/density-fieldlines.txt"), + asset.resource("transferfunctions/velocity-fieldlines.txt") }, ColorTableRanges = { { 0, 1000000 }, @@ -55,11 +55,11 @@ local ToggleFieldlines = { Identifier = "os.bastilleday.fieldlines.ToggleFieldlines", Name = "Toggle fieldlines", Command = [[ - if openspace.getPropertyValue("Scene.MAS-MHD-Fieldlines-bastille-day-2000.Renderable.Enabled") then + if openspace.propertyValue("Scene.MAS-MHD-Fieldlines-bastille-day-2000.Renderable.Enabled") then openspace.setPropertyValueSingle( "Scene.MAS-MHD-Fieldlines-bastille-day-2000.Renderable.Fade", 0.0, - openspace.getPropertyValue("OpenSpaceEngine.FadeDuration"), + openspace.propertyValue("OpenSpaceEngine.FadeDuration"), "Linear", 'openspace.setPropertyValueSingle("Scene.MAS-MHD-Fieldlines-bastille-day-2000.Renderable.Enabled", false)' ) @@ -68,7 +68,7 @@ local ToggleFieldlines = { openspace.setPropertyValueSingle( "Scene.MAS-MHD-Fieldlines-bastille-day-2000.Renderable.Fade", 1.0, - openspace.getPropertyValue("OpenSpaceEngine.FadeDuration"), + openspace.propertyValue("OpenSpaceEngine.FadeDuration"), "Linear" ) end @@ -96,7 +96,6 @@ asset.export("ToggleFieldlines", ToggleFieldlines.Identifier) asset.meta = { Name = "Predictive Science Inc. Fieldlines Bastille Day", - Version = "1.1", Description = "Magnetic fieldlines for the bastille day CME event", Author = "CCMC, Jonathan Grangien, Matthias Berg", URL = "https://dx.doi.org/10.3847/1538-4357/aab36d", diff --git a/data/assets/scene/solarsystem/heliosphere/bastille_day/fluxnodes.asset b/data/assets/scene/solarsystem/heliosphere/bastille_day/fluxnodes.asset index cf83463d8c..06069e4f4d 100644 --- a/data/assets/scene/solarsystem/heliosphere/bastille_day/fluxnodes.asset +++ b/data/assets/scene/solarsystem/heliosphere/bastille_day/fluxnodes.asset @@ -4,7 +4,7 @@ local rot = asset.require("./carrington_to_heeq_rotation") -local fluxNodesBinaries = asset.syncedResource({ +local fluxNodesBinaries = asset.resource({ Name = "Bastille day Flux nodes binaries", Type = "HttpSynchronization", Identifier = "bastille_day_streamnodes_binaries", @@ -25,7 +25,7 @@ local Fluxnodes = { Renderable = { Type = "RenderableFluxNodes", SourceFolder = fluxNodesBinaries, - ColorTablePath = asset.localResource("transferfunctions/CMR.txt"), + ColorTablePath = asset.resource("transferfunctions/CMR.txt"), ColorTableRange = { -2.0, 4.0 } }, GUI = { @@ -40,11 +40,11 @@ local ToggleFluxnodes = { Identifier = "os.bastilleday.fluxnodes.ToggleFluxnodes", Name = "Toggle flux nodes", Command = [[ - if openspace.getPropertyValue("Scene.MAS-MHD-FluxNodes-bastille-day-2000.Renderable.Enabled") then + if openspace.propertyValue("Scene.MAS-MHD-FluxNodes-bastille-day-2000.Renderable.Enabled") then openspace.setPropertyValueSingle( "Scene.MAS-MHD-FluxNodes-bastille-day-2000.Renderable.Fade", 0.0, - openspace.getPropertyValue("OpenSpaceEngine.FadeDuration"), + openspace.propertyValue("OpenSpaceEngine.FadeDuration"), "Linear", 'openspace.setPropertyValueSingle("Scene.MAS-MHD-FluxNodes-bastille-day-2000.Renderable.Enabled", false)' ) @@ -53,7 +53,7 @@ local ToggleFluxnodes = { openspace.setPropertyValueSingle( "Scene.MAS-MHD-FluxNodes-bastille-day-2000.Renderable.Fade", 1.0, - openspace.getPropertyValue("OpenSpaceEngine.FadeDuration"), + openspace.propertyValue("OpenSpaceEngine.FadeDuration"), "Linear" ) end @@ -81,7 +81,6 @@ asset.export("ToggleFluxnodes", ToggleFluxnodes.Identifier) asset.meta = { Name = "Predictive Science Inc. Flux nodes Bastille Day", - Version = "1.1", Description = "Flux nodes for the bastille day CME event", Author = "CCMC, Christian Adamsson, Emilie Ho", URL = "https://dx.doi.org/10.3847/1538-4357/aab36d", diff --git a/data/assets/scene/solarsystem/heliosphere/bastille_day/fluxnodescutplane.asset b/data/assets/scene/solarsystem/heliosphere/bastille_day/fluxnodescutplane.asset index ecc8466874..5746496ed9 100644 --- a/data/assets/scene/solarsystem/heliosphere/bastille_day/fluxnodescutplane.asset +++ b/data/assets/scene/solarsystem/heliosphere/bastille_day/fluxnodescutplane.asset @@ -4,14 +4,14 @@ local rot = asset.require("./carrington_to_heeq_rotation") -local TexturesPathEquatorial = asset.syncedResource({ +local TexturesPathEquatorial = asset.resource({ Type = "HttpSynchronization", Name = "cutplanes_textures", Identifier = "cutplanes_textures", Version = 1 }) -local TexturesPathMeridial = asset.syncedResource({ +local TexturesPathMeridial = asset.resource({ Type = "HttpSynchronization", Name = "cutplane_meridial_textures", Identifier = "cutplane_meridial_textures", @@ -78,11 +78,11 @@ local ToggleEquatorial = { Identifier = "os.bastilleday.fluxnodescutplane.ToggleEquatorial", Name = "Toggle equatorial cutplane", Command = [[ - if openspace.getPropertyValue("Scene.EquatorialCutplane-bastille-day-2000.Renderable.Enabled") then + if openspace.propertyValue("Scene.EquatorialCutplane-bastille-day-2000.Renderable.Enabled") then openspace.setPropertyValueSingle( "Scene.EquatorialCutplane-bastille-day-2000.Renderable.Fade", 0.0, - openspace.getPropertyValue("OpenSpaceEngine.FadeDuration"), + openspace.propertyValue("OpenSpaceEngine.FadeDuration"), "Linear", 'openspace.setPropertyValueSingle("Scene.EquatorialCutplane-bastille-day-2000.Renderable.Enabled", false)' ) @@ -91,7 +91,7 @@ local ToggleEquatorial = { openspace.setPropertyValueSingle( "Scene.EquatorialCutplane-bastille-day-2000.Renderable.Fade", 1.0, - openspace.getPropertyValue("OpenSpaceEngine.FadeDuration"), + openspace.propertyValue("OpenSpaceEngine.FadeDuration"), "Linear" ) end @@ -100,15 +100,16 @@ local ToggleEquatorial = { GuiPath = "/Bastille-Day 2000", IsLocal = false } + local ToggleMeridial = { Identifier = "os.bastilleday.fluxnodescutplane.ToggleMeridial", Name = "Toggle meridial cutplane", Command = [[ - if openspace.getPropertyValue("Scene.MeridialCutplane-bastille-day-2000.Renderable.Enabled") then + if openspace.propertyValue("Scene.MeridialCutplane-bastille-day-2000.Renderable.Enabled") then openspace.setPropertyValueSingle( "Scene.MeridialCutplane-bastille-day-2000.Renderable.Fade", 0.0, - openspace.getPropertyValue("OpenSpaceEngine.FadeDuration"), + openspace.propertyValue("OpenSpaceEngine.FadeDuration"), "Linear", 'openspace.setPropertyValueSingle("Scene.MeridialCutplane-bastille-day-2000.Renderable.Enabled", false)' ) @@ -117,7 +118,7 @@ local ToggleMeridial = { openspace.setPropertyValueSingle( "Scene.MeridialCutplane-bastille-day-2000.Renderable.Fade", 1.0, - openspace.getPropertyValue("OpenSpaceEngine.FadeDuration"), + openspace.propertyValue("OpenSpaceEngine.FadeDuration"), "Linear" ) end @@ -151,7 +152,6 @@ asset.export(MeridialCutplane) asset.meta = { Name = "Predictive Science Inc. Cutplanes Bastille Days", - Version = "1.1", Description = "Cutplanes for the bastille day CME event", Author = "CCMC, Christian Adamsson, Emilie Ho", URL = "https://dx.doi.org/10.3847/1538-4357/aab36d", diff --git a/data/assets/scene/solarsystem/heliosphere/bastille_day/fluxnodeslegend.asset b/data/assets/scene/solarsystem/heliosphere/bastille_day/fluxnodeslegend.asset index 8b34675423..43427b2bff 100644 --- a/data/assets/scene/solarsystem/heliosphere/bastille_day/fluxnodeslegend.asset +++ b/data/assets/scene/solarsystem/heliosphere/bastille_day/fluxnodeslegend.asset @@ -1,8 +1,4 @@ -asset.require("spice/base") - - - -local TexturesPath = asset.syncedResource({ +local TexturesPath = asset.resource({ Type = "HttpSynchronization", Name = "Streamnodes textures", Identifier = "streamnodes_legend", @@ -23,11 +19,11 @@ local ToggleLegend = { Identifier = "os.bastilleday.fluxnodelegend.ToggleLegend", Name = "Toggle the legend image", Command = [[ - if openspace.getPropertyValue("ScreenSpace.LegendFluxNodes-bastille-day-2000.Enabled") then + if openspace.propertyValue("ScreenSpace.LegendFluxNodes-bastille-day-2000.Enabled") then openspace.setPropertyValueSingle( "ScreenSpace.LegendFluxNodes-bastille-day-2000.Fade", 0.0, - openspace.getPropertyValue("OpenSpaceEngine.FadeDuration"), + openspace.propertyValue("OpenSpaceEngine.FadeDuration"), "Linear", 'openspace.setPropertyValueSingle("ScreenSpace.LegendFluxNodes-bastille-day-2000.Enabled", false)' ) @@ -36,7 +32,7 @@ local ToggleLegend = { openspace.setPropertyValueSingle( "ScreenSpace.LegendFluxNodes-bastille-day-2000.Fade", 1.0, - openspace.getPropertyValue("OpenSpaceEngine.FadeDuration"), + openspace.propertyValue("OpenSpaceEngine.FadeDuration"), "Linear" ) end @@ -53,7 +49,7 @@ local HideLegend = { openspace.setPropertyValueSingle( "ScreenSpace.LegendFluxNodes-bastille-day-2000.Fade", 0.0, - openspace.getPropertyValue("OpenSpaceEngine.FadeDuration"), + openspace.propertyValue("OpenSpaceEngine.FadeDuration"), "Linear", 'openspace.setPropertyValueSingle("ScreenSpace.LegendFluxNodes-bastille-day-2000.Enabled", false)' ) @@ -84,7 +80,6 @@ asset.export("HideLegend", HideLegend.Identifier) asset.meta = { Name = "Predictive Science Inc. Flux nodes legend for Bastille Days", - Version = "1.1", Description = [[Screen space renderable image legend of flux nodes for the bastille day CME event]], Author = "Christian Adamsson, Emilie Ho", diff --git a/data/assets/scene/solarsystem/heliosphere/bastille_day/lightindicator.asset b/data/assets/scene/solarsystem/heliosphere/bastille_day/lightindicator.asset index bcba565b53..ba36beaa06 100644 --- a/data/assets/scene/solarsystem/heliosphere/bastille_day/lightindicator.asset +++ b/data/assets/scene/solarsystem/heliosphere/bastille_day/lightindicator.asset @@ -1,5 +1,6 @@ local sunTransforms = asset.require("scene/solarsystem/sun/transforms") local earthTransforms = asset.require("scene/solarsystem/planets/earth/transforms") +local coreKernels = asset.require("spice/core") @@ -13,8 +14,8 @@ local TravelSpeedIndicator = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "SUN", - Observer = "SSB" + Target = coreKernels.ID.Sun, + Observer = coreKernels.ID.SolarSystemBarycenter } }, Renderable = { @@ -46,7 +47,6 @@ asset.export(TravelSpeedIndicator) asset.meta = { Name = "Light travel from sun to earth", - Version = "1.0", Description = "Speed of light indicator from sun to earth", Author = "CCMC, Christian Adamsson, Emilie Ho", URL = "", diff --git a/data/assets/scene/solarsystem/heliosphere/bastille_day/magnetogram.asset b/data/assets/scene/solarsystem/heliosphere/bastille_day/magnetogram.asset index 8794ab4411..17b5bbdcff 100644 --- a/data/assets/scene/solarsystem/heliosphere/bastille_day/magnetogram.asset +++ b/data/assets/scene/solarsystem/heliosphere/bastille_day/magnetogram.asset @@ -1,4 +1,4 @@ -local TexturesPath = asset.syncedResource({ +local TexturesPath = asset.resource({ Name = "Bastille Day Magnetogram", Type = "HttpSynchronization", Identifier = "bastille_day_magnetogram", @@ -15,7 +15,6 @@ asset.export("TexturesPath", TexturesPath) -- 856:75. asset.meta = { Name = "Predictive Science Inc. MAS Bastille Day Textures", - Version = "1.0", Description = [[Magnetograms of the sun as texture color layers]], Author = "Jonathan Grangien, Matthias Berg", URL = "https://dx.doi.org/10.3847/1538-4357/aab36d", diff --git a/data/assets/scene/solarsystem/heliosphere/bastille_day/magnetogram_textures.asset b/data/assets/scene/solarsystem/heliosphere/bastille_day/magnetogram_textures.asset index 7dae7bd896..9117ffe63b 100644 --- a/data/assets/scene/solarsystem/heliosphere/bastille_day/magnetogram_textures.asset +++ b/data/assets/scene/solarsystem/heliosphere/bastille_day/magnetogram_textures.asset @@ -8,7 +8,7 @@ local SwitchColorLayer = { Identifier = "os.bastilleday.magnetogramtexture.SwitchColorLayer", Name = "Next sun texture", Command = [[ - local textureList = openspace.globebrowsing.getLayers("Sun", "ColorLayers") + local textureList = openspace.globebrowsing.layers("Sun", "ColorLayers") if (magnetogramsTextureIndex == -1) then magnetogramsTextureIndex = 2 end @@ -42,7 +42,9 @@ asset.onInitialize(function() Name = imagename, --"Magnetogram-" .. i, Description = "", FilePath = imagename, - Enabled = false + Enabled = false, + ZIndex = 100, + CacheSettings = { Enabled = false } } ) end @@ -63,7 +65,6 @@ asset.export("SwitchColorLayer", SwitchColorLayer.Identifier) asset.meta = { Name = "Bastille Day magnetogram textures", - Version = "1.1", Description = [[This asset adds multiple magnetogram textures to the Sun. In addition it provides an action to cycle through the textures. See magnetogram.asset for details of the textures]], diff --git a/data/assets/scene/solarsystem/interstellar/c-2019_q4_borisov.asset b/data/assets/scene/solarsystem/interstellar/c-2019_q4_borisov.asset index 0fc0acc793..63179278e5 100644 --- a/data/assets/scene/solarsystem/interstellar/c-2019_q4_borisov.asset +++ b/data/assets/scene/solarsystem/interstellar/c-2019_q4_borisov.asset @@ -2,7 +2,7 @@ local sunTransforms = asset.require("scene/solarsystem/sun/transforms") -local trajectory = asset.syncedResource({ +local trajectory = asset.resource({ Name = "C-2019 Q4 Borisov Trajectory", Type = "HttpSynchronization", Identifier = "borisov_horizons", @@ -27,7 +27,7 @@ local C2019Q4BorisovTrail = { Color = { 0.9, 0.9, 0.0 }, StartTime = "2015 JAN 01 00:00:00", EndTime = "2050 JAN 01 00:00:00", - SampleInterval = 60 * 60 * 24 -- = 86 400 seconds in 1 day + SampleInterval = openspace.time.secondsPerDay() }, GUI = { Name = "C/2019 Q4 Borisov Trail", @@ -72,7 +72,6 @@ asset.export(C2019Q4BorisovTrail) asset.meta = { Name = "C/2019 Q4 Borisov", - Version = "1.2", Description = [[This asset contains the trail and position of C-2019 Q4 Borisov from 2015 JAN 01 00:00:00 to 2050 JAN 01 00:00:00. Data from JPL Horizons]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/interstellar/oumuamua.asset b/data/assets/scene/solarsystem/interstellar/oumuamua.asset index 0f206ee77c..28ba280136 100644 --- a/data/assets/scene/solarsystem/interstellar/oumuamua.asset +++ b/data/assets/scene/solarsystem/interstellar/oumuamua.asset @@ -2,7 +2,7 @@ local sunTransforms = asset.require("scene/solarsystem/sun/transforms") -local trajectory = asset.syncedResource({ +local trajectory = asset.resource({ Name = "'Oumuamua Trajectory", Type = "HttpSynchronization", Identifier = "oumuamua_horizons", @@ -27,8 +27,7 @@ local OumuamuaTrail = { Color = { 0.9, 0.9, 0.0 }, StartTime = "2014 JAN 01 00:00:00", EndTime = "2050 JAN 01 00:00:00", - SampleInterval = 86400, - TimeStampSubsampleFactor = 1 + SampleInterval = openspace.time.secondsPerDay() }, GUI = { Name = "'Oumuamua Trail", @@ -73,7 +72,6 @@ asset.export(OumuamuaTrail) asset.meta = { Name = "'Oumuamua", - Version = "1.2", Description = [[This asset contains the trail and position of 'Oumuamua from 2014 JAN 01 00:00:00 to 2050 JAN 01 00:00:00. Data from JPL Horizons]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/missions/apollo/11/actions.asset b/data/assets/scene/solarsystem/missions/apollo/11/actions.asset index bf9a60ca08..80a488c681 100644 --- a/data/assets/scene/solarsystem/missions/apollo/11/actions.asset +++ b/data/assets/scene/solarsystem/missions/apollo/11/actions.asset @@ -35,7 +35,6 @@ asset.export("LandingSite", LandingSite.Identifier) asset.meta = { Name = "Apollo 11 Actions", - Version = "1.0", Description = "Asset with actions related to the Apollo 11 mission", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/missions/apollo/11/apollo11.asset b/data/assets/scene/solarsystem/missions/apollo/11/apollo11.asset index f4f45209a0..f41ca6553d 100644 --- a/data/assets/scene/solarsystem/missions/apollo/11/apollo11.asset +++ b/data/assets/scene/solarsystem/missions/apollo/11/apollo11.asset @@ -1,22 +1,22 @@ -asset.require("spice/base") asset.require("../actions") asset.require("./actions") -local sun = asset.require("scene/solarsystem/sun/sun") +local sun = asset.require("scene/solarsystem/sun/transforms") local moonTransforms = asset.require("scene/solarsystem/planets/earth/moon/moon") local descentKeyframes = asset.require("./lem_descent") local descentRotationKeyframes = asset.require("./lem_descent_rotation") local kernels = asset.require("./kernels") +local coreKernels = asset.require("spice/core") -local models = asset.syncedResource({ +local models = asset.resource({ Name = "Apollo Models", Type = "HttpSynchronization", Identifier = "apollo_11_models", Version = 1 }) -local lemModel = asset.syncedResource({ +local lemModel = asset.resource({ Name = "Apollo Lem Models", Type = "HttpSynchronization", Identifier = "apollo_lem_model", @@ -25,8 +25,6 @@ local lemModel = asset.syncedResource({ --landing - 1969-07-20T20:17:40 -local ApolloSpiceId = -911 -local ApolloLemSpiceId = -911500 local Apollo11Position = { Identifier = "Apollo11Position", @@ -39,15 +37,15 @@ local Apollo11Position = { Transform = { Translation = { Type = "SpiceTranslation", - Target = ApolloSpiceId, - Observer = "MOON", - Frame = "MOON_ME" + Target = kernels.ID.Apollo11, + Observer = coreKernels.ID.Moon, + Frame = kernels.ID.MoonME } }, GUI = { - Hidden = true, Name = "Apollo 11", - Path = "/Solar System/Missions/Apollo/11" + Path = "/Solar System/Missions/Apollo/11", + Hidden = true } } @@ -88,18 +86,18 @@ local Apollo11MoonTrail = { Parent = moonTransforms.Moon.Identifier, Renderable = { Type = "RenderableTrailTrajectory", + Enabled = false, Translation = { Type = "SpiceTranslation", - Target = ApolloSpiceId, - Observer = "MOON", - Frame = "IAU_MOON" + Target = kernels.ID.Apollo11, + Observer = coreKernels.ID.Moon, + Frame = coreKernels.Frame.Moon }, Color = { 0.180000,0.510000,0.750000 }, StartTime = "1969 JUL 19 19:38:29.183", EndTime = "1969 JUL 22 04:55:35.183", SampleInterval = 60, - EnableFade = false, - Enabled = false + EnableFade = false }, GUI = { Name = "Apollo 11 Moon Orbits", @@ -107,7 +105,6 @@ local Apollo11MoonTrail = { } } - local lemTranslation = { Type = "TimelineTranslation", Keyframes = { @@ -116,9 +113,9 @@ local lemTranslation = { -- a 10s linear transition to the location where the descentKeyframes start. ["1969 JUL 20 20:14:30"] = { Type = "SpiceTranslation", - Target = ApolloLemSpiceId, - Observer = "MOON", - Frame = "IAU_MOON" + Target = kernels.ID.Apollo11LEM, + Observer = coreKernels.ID.Moon, + Frame = coreKernels.Frame.Moon }, ["1969 JUL 20 20:14:40"] = { Type = "TimelineTranslation", @@ -132,20 +129,18 @@ local lemRotation = { Keyframes = descentRotationKeyframes.keyframes } - - local Apollo11LemTrail = { Identifier = "Apollo11LemTrail", Parent = moonTransforms.Moon.Identifier, Renderable = { Type = "RenderableTrailTrajectory", + Enabled = false, Translation = lemTranslation, Color = { 0.780000,0.940000,0.340000 }, StartTime = "1969 JUL 20 19:10:25.183", EndTime = "1969 JUL 20 20:17:46.183", SampleInterval = 2, - EnableFade = false, - Enabled = false + EnableFade = false }, GUI = { Name = "Apollo 11 Lunar Lander Trail", @@ -240,8 +235,6 @@ local Apollo11LemLandedModel = { asset.onInitialize(function() - openspace.spice.loadKernel(kernels.kernels) - openspace.addSceneGraphNode(Apollo11Position) openspace.addSceneGraphNode(Apollo11LemPosition) openspace.addSceneGraphNode(Apollo11Model) @@ -259,8 +252,6 @@ asset.onDeinitialize(function() openspace.removeSceneGraphNode(Apollo11Model) openspace.removeSceneGraphNode(Apollo11LemPosition) openspace.removeSceneGraphNode(Apollo11Position) - - openspace.spice.unloadKernel(kernels.kernels) end) asset.export(Apollo11Position) diff --git a/data/assets/scene/solarsystem/missions/apollo/11/kernels.asset b/data/assets/scene/solarsystem/missions/apollo/11/kernels.asset index 3a38755977..7a7e60f90b 100644 --- a/data/assets/scene/solarsystem/missions/apollo/11/kernels.asset +++ b/data/assets/scene/solarsystem/missions/apollo/11/kernels.asset @@ -1,4 +1,4 @@ -local kernelsFolder = asset.syncedResource({ +local data = asset.resource({ Name = "Apollo Kernels", Type = "HttpSynchronization", Identifier = "apollo_11_spice", @@ -7,11 +7,30 @@ local kernelsFolder = asset.syncedResource({ local kernels = { - kernelsFolder .. "moon_080317.tf", - kernelsFolder .. "apollo_naif_ids.tf", - kernelsFolder .. "moon_pa_de421_1900-2050.bpc", - kernelsFolder .. "apollo11_orbits_full9km.bsp", - kernelsFolder .. "apollo11_orbits_lm9km.bsp" + data .. "moon_080317.tf", + data .. "apollo_naif_ids.tf", + data .. "moon_pa_de421_1900-2050.bpc", + data .. "apollo11_orbits_full9km.bsp", + data .. "apollo11_orbits_lm9km.bsp" } -asset.export("kernels", kernels) +local ID = { + Apollo11 = -911, + Apollo11LEM = -911500 +} + +local Frame = { + MoonME = "MOON_ME" +} + + +asset.onInitialize(function() + openspace.spice.loadKernel(kernels) +end) + +asset.onDeinitialize(function() + openspace.spice.unloadKernel(kernels) +end) + +asset.export("ID", ID) +asset.export("Frame", Frame) diff --git a/data/assets/scene/solarsystem/missions/apollo/11/lem.asset b/data/assets/scene/solarsystem/missions/apollo/11/lem.asset index d88745f8b7..dfdf7e861e 100644 --- a/data/assets/scene/solarsystem/missions/apollo/11/lem.asset +++ b/data/assets/scene/solarsystem/missions/apollo/11/lem.asset @@ -1,9 +1,9 @@ -local sun = asset.require("scene/solarsystem/sun/sun") +local sun = asset.require("scene/solarsystem/sun/transforms") local moon_asset = asset.require("scene/solarsystem/planets/earth/moon/moon") -local lem_model = asset.syncedResource({ +local lem_model = asset.resource({ Name = "Apollo Lem Models", Type = "HttpSynchronization", Identifier = "apollo_lem_model", @@ -18,10 +18,16 @@ local Apollo11Lem = { Translation = { Type = "GlobeTranslation", Globe = moon_asset.Moon.Identifier, - Longitude = -360+23.47306, + Longitude = -360 + 23.47306, Latitude = 0.67402, Altitude = -1927.65, UseHeightMap = false + }, + Rotation = { + Type = "GlobeRotation", + Globe = moon_asset.Moon.Identifier, + Longitude = -360 + 23.47306, + Latitude = 0.67402 } }, GUI = { @@ -42,7 +48,7 @@ local Apollo11LemModel = { Renderable = { Type = "RenderableModel", GeometryFile = lem_model .. "LM-2_ver2clean.obj", - RotationVector = { 91.044090, 171.229706, 111.666664 }, + RotationVector = { -90.0, 283.86999, 0 }, LightSources = { sun.LightSource, { diff --git a/data/assets/scene/solarsystem/missions/apollo/11/lem_flipbook.asset b/data/assets/scene/solarsystem/missions/apollo/11/lem_flipbook.asset index a8f9f9d248..bedc3c2b69 100644 --- a/data/assets/scene/solarsystem/missions/apollo/11/lem_flipbook.asset +++ b/data/assets/scene/solarsystem/missions/apollo/11/lem_flipbook.asset @@ -9,7 +9,7 @@ local flipbookCount = 19 local flipbook = nil -local vrts = asset.syncedResource({ +local vrts = asset.resource({ Name = "Apollo 11 Flipbook", Type = "HttpSynchronization", Identifier = "apollo_11_flipbook", @@ -17,7 +17,6 @@ local vrts = asset.syncedResource({ }) - asset.onInitialize(function() openspace.globebrowsing.addBlendingLayersFromDirectory(vrts, assetGlobe) flipbook = helper.createFlipbook(assetPrefix, assetGlobe, 19) @@ -43,7 +42,6 @@ asset.onInitialize(function() }) end) - asset.onDeinitialize(function() flipbook = nil diff --git a/data/assets/scene/solarsystem/missions/apollo/15/apollo15.asset b/data/assets/scene/solarsystem/missions/apollo/15/apollo15.asset index d80e9bc775..233a597e03 100644 --- a/data/assets/scene/solarsystem/missions/apollo/15/apollo15.asset +++ b/data/assets/scene/solarsystem/missions/apollo/15/apollo15.asset @@ -1,12 +1,12 @@ -asset.require("spice/base") asset.require("../actions") local moonTransforms = asset.require("scene/solarsystem/planets/earth/moon/moon") -local sun = asset.require("scene/solarsystem/sun/sun") -local kernels = asset.require("scene/solarsystem/missions/apollo/15/kernels") +local sun = asset.require("scene/solarsystem/sun/transforms") +local kernels = asset.require("./kernels") +local coreKernels = asset.require("spice/core") -local models = asset.syncedResource({ +local models = asset.resource({ Name = "Apollo Models", Type = "HttpSynchronization", Identifier = "apollo_models", @@ -17,17 +17,22 @@ local models = asset.syncedResource({ local Apollo15 = { Identifier = "Apollo15", Parent = moonTransforms.Moon.Identifier, + TimeFrame = { + Type = "TimeFrameInterval", + Start = "1971-07-30T02:22:00.00", + End = "1971-08-01T18:05:00.00" + }, Transform = { Translation = { Type = "SpiceTranslation", - Target = "APOLLO 15", - Observer = "MOON", - Frame = "IAU_MOON" + Target = kernels.ID.Apollo15, + Observer = coreKernels.ID.Moon, + Frame = coreKernels.Frame.Moon }, Rotation = { Type = "SpiceRotation", - SourceFrame = "A15_METRIC", - DestinationFrame = "GALACTIC" + SourceFrame = kernels.Frame.Apollo15Metric, + DestinationFrame = coreKernels.Frame.Galactic } }, Renderable = { @@ -39,11 +44,6 @@ local Apollo15 = { }, PerformShading = true }, - TimeFrame = { - Type = "TimeFrameInterval", - Start = "1971-07-30T02:22:00.00", - End = "1971-08-01T18:05:00.00" - }, GUI = { Name = "Apollo 15", Path = "/Solar System/Missions/Apollo/15" @@ -57,9 +57,9 @@ local Apollo15Trail = { Type = "RenderableTrailTrajectory", Translation = { Type = "SpiceTranslation", - Target = "APOLLO 15", - Observer = "MOON", - Frame = "IAU_MOON" + Target = kernels.ID.Apollo15, + Observer = coreKernels.ID.Moon, + Frame = coreKernels.Frame.Moon }, Color = { 0.70, 0.50, 0.20 }, StartTime = "1971 JUL 26", @@ -72,9 +72,8 @@ local Apollo15Trail = { } } -asset.onInitialize(function() - openspace.spice.loadKernel(kernels.kernels) +asset.onInitialize(function() openspace.addSceneGraphNode(Apollo15) openspace.addSceneGraphNode(Apollo15Trail) end) @@ -82,8 +81,6 @@ end) asset.onDeinitialize(function() openspace.removeSceneGraphNode(Apollo15Trail) openspace.removeSceneGraphNode(Apollo15) - - openspace.spice.unloadKernel(kernels.kernels) end) asset.export(Apollo15) diff --git a/data/assets/scene/solarsystem/missions/apollo/15/kernels.asset b/data/assets/scene/solarsystem/missions/apollo/15/kernels.asset index 6af820b829..6b092ae8f9 100644 --- a/data/assets/scene/solarsystem/missions/apollo/15/kernels.asset +++ b/data/assets/scene/solarsystem/missions/apollo/15/kernels.asset @@ -1,4 +1,4 @@ -local folder = asset.syncedResource({ +local data = asset.resource({ Name = "Apollo Kernels", Type = "HttpSynchronization", Identifier = "apollo_spice", @@ -7,87 +7,31 @@ local folder = asset.syncedResource({ local kernels = { - folder .. "apollo15.0001.tsc", - - -- folder .. "AS15-P_v01.bc", - folder .. "apollo15.0001.tf", - folder .. "apollo15MetricAddendum002.ti", - -- folder .. "apollo15PanoramicAddendum001.ti", - folder .. "apollo15_metric.0002.ti", - -- folder .. "apollo15_panoramic.0001.ti", - folder .. "apollo15-1.bsp", - folder .. "AS15-M_v01.bc" - -- folder .. "AS15-M_v01.bsp" + data .. "apollo15.0001.tsc", + data .. "apollo15.0001.tf", + data .. "apollo15MetricAddendum002.ti", + data .. "apollo15_metric.0002.ti", + data .. "apollo15-1.bsp", + data .. "AS15-M_v01.bc" } --- local kernels = { --- --sclk --- folder .. "apollo15.0001.tsc", +local ID = { + Apollo15 = -915 +} --- --pck --- folder .. "moon_080317.tf", --- folder .. "moon_assoc_me.tf", +local Frame = { + Apollo15Nadir = -915240, + Apollo15Metric = "A15_METRIC" +} --- --ik --- folder .. "apollo15_metric_v2.0001.ti", --- folder .. "apollo15_panoramic.0001.ti", --- --tspk --- folder .. "de421.bsp", --- folder .. "moon_pa_de421_1900-2050.bpc", +asset.onInitialize(function() + openspace.spice.loadKernel(kernels) +end) --- --iak --- folder .. "apollo15MetricAddendum002.ti", --- folder .. "apolloPanAddendum001.ti", +asset.onDeinitialize(function() + openspace.spice.unloadKernel(kernels) +end) --- --fk --- folder .. "apollo15_v2.0001.tf", --- folder .. "apollo15_v2.0002.tf", - --- --spk --- folder .. "AS15_M_REV23_SMITHED_V01.bsp", --- folder .. "AS15_M_REV4.bsp ", --- folder .. "AS15_M_REV70_SMITHED_V01.bsp", --- folder .. "AS15_M_REV04_v2.bsp ", --- folder .. "AS15_M_REV27_SMITHED_V01.bsp", --- folder .. "AS15_M_REV44_SMITHED_V01.bsp", --- folder .. "AS15_M_REV71_SMITHED_V01.bsp", --- folder .. "AS15_M_REV15_SMITHED_V01.bsp", --- folder .. "AS15_M_REV33_SMITHED_V01.bsp", --- folder .. "AS15_M_REV50_SMITHED_V01.bsp", --- folder .. "AS15_M_REV71_SMITHED_V02.bsp", --- folder .. "AS15_M_REV15_v2.bsp ", --- folder .. "AS15_M_REV34_SMITHED_V01.bsp", --- folder .. "AS15_M_REV60_SMITHED_V01.bsp", --- folder .. "AS15_M_REV72_v2.bsp", --- folder .. "AS15_M_REV16_SMITHED_V01.bsp", --- folder .. "AS15_M_REV35_SMITHED_V02.bsp", --- folder .. "AS15_M_REV62_SMITHED_V01.bsp", --- folder .. "AS15_M_REV22_SMITHED_V01.bsp", --- folder .. "AS15_M_REV38_SMITHED_V01.bsp", --- folder .. "AS15_M_REV63_SMITHED_V01.bsp", - --- --ck --- folder .. "AS15_M_REV04_SMITHED_V01.bc", --- folder .. "AS15_M_REV15_SMITHED_V01.bc", --- folder .. "AS15_M_REV16_SMITHED_V01.bc", --- folder .. "AS15_M_REV22_SMITHED_V01.bc", --- folder .. "AS15_M_REV23_SMITHED_V01.bc", --- folder .. "AS15_M_REV27_SMITHED_V01.bc", --- folder .. "AS15_M_REV33_SMITHED_V01.bc", --- folder .. "AS15_M_REV34_SMITHED_V01.bc", --- folder .. "AS15_M_REV35_SMITHED_V01.bc", --- folder .. "AS15_M_REV35_SMITHED_V02.bc", --- folder .. "AS15_M_REV38_SMITHED_V01.bc", --- folder .. "AS15_M_REV44_SMITHED_V01.bc", --- folder .. "AS15_M_REV50_SMITHED_V01.bc", --- folder .. "AS15_M_REV60_SMITHED_V01.bc", --- folder .. "AS15_M_REV62_SMITHED_V01.bc", --- folder .. "AS15_M_REV63_SMITHED_V01.bc", --- folder .. "AS15_M_REV70_SMITHED_V01.bc", --- folder .. "AS15_M_REV71_SMITHED_V01.bc", --- folder .. "AS15_M_REV71_SMITHED_V02.bc", --- folder .. "AS15_M_REV72_v2.bc", --- } - -asset.export("kernels", kernels) +asset.export("ID", ID) +asset.export("Frame", Frame) diff --git a/data/assets/scene/solarsystem/missions/apollo/17/actions.asset b/data/assets/scene/solarsystem/missions/apollo/17/actions.asset index 44fc503a4f..e7c8f98123 100644 --- a/data/assets/scene/solarsystem/missions/apollo/17/actions.asset +++ b/data/assets/scene/solarsystem/missions/apollo/17/actions.asset @@ -37,7 +37,6 @@ end) asset.meta = { Name = "Apollo 17 Actions", - Version = "1.0", Description = "Asset with actions related to the Apollo 11 mission", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/missions/apollo/17/bouldersstation2.asset b/data/assets/scene/solarsystem/missions/apollo/17/bouldersstation2.asset index 899826a0de..074b3dc905 100644 --- a/data/assets/scene/solarsystem/missions/apollo/17/bouldersstation2.asset +++ b/data/assets/scene/solarsystem/missions/apollo/17/bouldersstation2.asset @@ -1,9 +1,9 @@ -local sun = asset.require("scene/solarsystem/sun/sun") +local sun = asset.require("scene/solarsystem/sun/transforms") local moonAsset = asset.require("scene/solarsystem/planets/earth/moon/moon") -local models = asset.syncedResource({ +local models = asset.resource({ Name = "Apollo Boulders Models", Type = "HttpSynchronization", Identifier = "apollo_boulders", @@ -158,6 +158,7 @@ local Station2Boulder3Model = { } } + asset.onInitialize(function() openspace.addSceneGraphNode(Station2Boulder1Holder) openspace.addSceneGraphNode(Station2Boulder1Model) diff --git a/data/assets/scene/solarsystem/missions/apollo/17/bouldersstation6.asset b/data/assets/scene/solarsystem/missions/apollo/17/bouldersstation6.asset index ad31f48f21..5cbe8f72f5 100644 --- a/data/assets/scene/solarsystem/missions/apollo/17/bouldersstation6.asset +++ b/data/assets/scene/solarsystem/missions/apollo/17/bouldersstation6.asset @@ -1,9 +1,9 @@ -local sun = asset.require("scene/solarsystem/sun/sun") +local sun = asset.require("scene/solarsystem/sun/transforms") local moonAsset = asset.require("scene/solarsystem/planets/earth/moon/moon") -local models = asset.syncedResource({ +local models = asset.resource({ Name = "Apollo Boulders Models", Type = "HttpSynchronization", Identifier = "apollo_boulders", @@ -68,8 +68,6 @@ local Station6Frag1Model = { } } - - local Station6Frag23Holder = { Identifier = "Station_6_Fragments_2_3", Parent = moonAsset.Moon.Identifier, @@ -79,7 +77,6 @@ local Station6Frag23Holder = { } } - local Station6Frag2Model = { Identifier = "A17S6F5", Parent = Station6Frag23Holder.Identifier, diff --git a/data/assets/scene/solarsystem/missions/apollo/17/bouldersstation7.asset b/data/assets/scene/solarsystem/missions/apollo/17/bouldersstation7.asset index 20b0b71409..9ddf9748e8 100644 --- a/data/assets/scene/solarsystem/missions/apollo/17/bouldersstation7.asset +++ b/data/assets/scene/solarsystem/missions/apollo/17/bouldersstation7.asset @@ -1,9 +1,9 @@ -local sun = asset.require("scene/solarsystem/sun/sun") +local sun = asset.require("scene/solarsystem/sun/transforms") local moonAsset = asset.require("scene/solarsystem/planets/earth/moon/moon") -local models = asset.syncedResource({ +local models = asset.resource({ Name = "Apollo Boulders Models", Type = "HttpSynchronization", Identifier = "apollo_boulders", diff --git a/data/assets/scene/solarsystem/missions/apollo/17/lem.asset b/data/assets/scene/solarsystem/missions/apollo/17/lem.asset index af2be3ccc5..d1a8daca1e 100644 --- a/data/assets/scene/solarsystem/missions/apollo/17/lem.asset +++ b/data/assets/scene/solarsystem/missions/apollo/17/lem.asset @@ -1,9 +1,9 @@ -local sun = asset.require("scene/solarsystem/sun/sun") +local sun = asset.require("scene/solarsystem/sun/transforms") local moonAsset = asset.require("scene/solarsystem/planets/earth/moon/moon") -local model = asset.syncedResource({ +local model = asset.resource({ Name = "Apollo Lem Models", Type = "HttpSynchronization", Identifier = "apollo_lem_model", @@ -21,12 +21,18 @@ local Apollo17Lem = { Longitude = -329.22833, Latitude = 20.19092, UseHeightmap = true + }, + Rotation = { + Type = "GlobeRotation", + Globe = moonAsset.Moon.Identifier, + Longitude = -329.22833, + Latitude = 20.19092 } }, GUI = { - Hidden = true, Name = "Apollo 17 Lem Position", - Path = "/Solar System/Missions/Apollo/17" + Path = "/Solar System/Missions/Apollo/17", + Hidden = true } } @@ -43,7 +49,7 @@ local Apollo17LemModel = { Type = "RenderableModel", GeometryFile = model .. "LM-2_ver2clean.obj", SpecularIntensity = 0.0, - RotationVector = { 110.255219, 171.229706, 126.666664 }, + RotationVector = { -90.0, 283.86999, 0 }, LightSources = { sun.LightSource, { diff --git a/data/assets/scene/solarsystem/missions/apollo/8/actions.asset b/data/assets/scene/solarsystem/missions/apollo/8/actions.asset index 6f309dc707..c565ff484c 100644 --- a/data/assets/scene/solarsystem/missions/apollo/8/actions.asset +++ b/data/assets/scene/solarsystem/missions/apollo/8/actions.asset @@ -48,7 +48,6 @@ asset.export("Launch", Launch.Identifier) asset.meta = { Name = "Apollo 8 Actions", - Version = "1.0", Description = "Asset with actions related to the Apollo 8 mission", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/missions/apollo/8/kernels.asset b/data/assets/scene/solarsystem/missions/apollo/8/kernels.asset index 9297926544..1474dba208 100644 --- a/data/assets/scene/solarsystem/missions/apollo/8/kernels.asset +++ b/data/assets/scene/solarsystem/missions/apollo/8/kernels.asset @@ -1,4 +1,4 @@ -local kernelsFolder = asset.syncedResource({ +local data = asset.resource({ Name = "Apollo Kernels", Type = "HttpSynchronization", Identifier = "apollo_spice", @@ -7,12 +7,31 @@ local kernelsFolder = asset.syncedResource({ local kernels = { - kernelsFolder .. "moon_080317.tf", - kernelsFolder .. "apollo8.tf", - kernelsFolder .. "moon_pa_de421_1900-2050.bpc", - kernelsFolder .. "apollo8.tsc", - kernelsFolder .. "apollo8.bsp", - kernelsFolder .. "apollo8_earthrise.bc" + data .. "moon_080317.tf", + data .. "apollo8.tf", + data .. "moon_pa_de421_1900-2050.bpc", + data .. "apollo8.tsc", + data .. "apollo8.bsp", + data .. "apollo8_earthrise.bc" } -asset.export("kernels", kernels) +local ID = { + Apollo8 = -908 +} + +local Frame = { + Apollo8 = -908000, + Apollo8Earthrise = "A8_EARTHRISE" +} + + +asset.onInitialize(function() + openspace.spice.loadKernel(kernels) +end) + +asset.onDeinitialize(function() + openspace.spice.unloadKernel(kernels) +end) + +asset.export("ID", ID) +asset.export("Frame", Frame) diff --git a/data/assets/scene/solarsystem/missions/apollo/8/launch_model.asset b/data/assets/scene/solarsystem/missions/apollo/8/launch_model.asset index 374a029010..b231d1ffb8 100644 --- a/data/assets/scene/solarsystem/missions/apollo/8/launch_model.asset +++ b/data/assets/scene/solarsystem/missions/apollo/8/launch_model.asset @@ -1,10 +1,11 @@ local earth_transforms = asset.require("scene/solarsystem/planets/earth/transforms") -local sun = asset.require("scene/solarsystem/sun/sun") +local sun = asset.require("scene/solarsystem/sun/transforms") local kernels = asset.require("./kernels") +local coreKernels = asset.require("spice/core") -local models = asset.syncedResource({ +local models = asset.resource({ Name = "Apollo Models", Type = "HttpSynchronization", Identifier = "apollo_models", @@ -25,9 +26,9 @@ local Apollo8Launch = { Transform = { Translation = { Type = "SpiceTranslation", - Target = ApolloSpiceId, - Observer = "EARTH", - Frame = "IAU_EARTH" + Target = kernels.ID.Apollo8, + Observer = coreKernels.ID.Earth, + Frame = coreKernels.Frame.Earth } }, GUI = { @@ -60,16 +61,14 @@ local Apollo8LaunchModel = { PerformShading = true }, GUI = { - Hidden = true, Name = "Apollo 8 Launch Model", - Path = "/Solar System/Missions/Apollo/8" + Path = "/Solar System/Missions/Apollo/8", + Hidden = true } } asset.onInitialize(function() - openspace.spice.loadKernel(kernels.kernels) - openspace.addSceneGraphNode(Apollo8Launch) openspace.addSceneGraphNode(Apollo8LaunchModel) end) @@ -77,8 +76,6 @@ end) asset.onDeinitialize(function() openspace.removeSceneGraphNode(Apollo8LaunchModel) openspace.removeSceneGraphNode(Apollo8Launch) - - openspace.spice.unloadKernel(kernels.kernels) end) asset.export(Apollo8Launch) diff --git a/data/assets/scene/solarsystem/missions/apollo/8/model.asset b/data/assets/scene/solarsystem/missions/apollo/8/model.asset index 93cb4aa90a..a4f89cff77 100644 --- a/data/assets/scene/solarsystem/missions/apollo/8/model.asset +++ b/data/assets/scene/solarsystem/missions/apollo/8/model.asset @@ -1,10 +1,11 @@ local earth_transforms = asset.require("scene/solarsystem/planets/earth/transforms") -local sun = asset.require("scene/solarsystem/sun/sun") +local sun = asset.require("scene/solarsystem/sun/transforms") local kernels = asset.require("./kernels") +local coreKernels = asset.require("spice/core") -local models = asset.syncedResource({ +local models = asset.resource({ Name = "Apollo Models", Type = "HttpSynchronization", Identifier = "apollo_models", @@ -12,8 +13,6 @@ local models = asset.syncedResource({ }) -local ApolloSpiceId = -908 - local Apollo8 = { Identifier = "Apollo8", Parent = earth_transforms.EarthBarycenter.Identifier, @@ -25,14 +24,14 @@ local Apollo8 = { Transform = { Translation = { Type = "SpiceTranslation", - Target = ApolloSpiceId, - Observer = "EARTH BARYCENTER", - Frame = "GALACTIC" + Target = kernels.ID.Apollo8, + Observer = coreKernels.ID.EarthBarycenter, + Frame = coreKernels.Frame.Galactic }, Rotation = { Type = "SpiceRotation", - SourceFrame = "A8_EARTHRISE", - DestinationFrame = "GALACTIC", + SourceFrame = kernels.Frame.Apollo8Earthrise, + DestinationFrame = coreKernels.Frame.Galactic, TimeFrame = { -- The orientation of Apollo 8 is only available during the few minutes -- when the Earthrise picture was taken. @@ -72,9 +71,9 @@ local Apollo8Model = { PerformShading = true }, GUI = { - Hidden = true, Name = "Apollo 8 Model", - Path = "/Solar System/Missions/Apollo/8" + Path = "/Solar System/Missions/Apollo/8", + Hidden = true } } @@ -96,8 +95,6 @@ local Apollo8Pivot = { asset.onInitialize(function() - openspace.spice.loadKernel(kernels.kernels) - openspace.addSceneGraphNode(Apollo8) openspace.addSceneGraphNode(Apollo8Model) openspace.addSceneGraphNode(Apollo8Pivot) @@ -107,8 +104,6 @@ asset.onDeinitialize(function() openspace.removeSceneGraphNode(Apollo8Pivot) openspace.removeSceneGraphNode(Apollo8Model) openspace.removeSceneGraphNode(Apollo8) - - openspace.spice.unloadKernel(kernels.kernels) end) asset.export(Apollo8) diff --git a/data/assets/scene/solarsystem/missions/apollo/8/trails.asset b/data/assets/scene/solarsystem/missions/apollo/8/trails.asset index 793623406d..baf3c51688 100644 --- a/data/assets/scene/solarsystem/missions/apollo/8/trails.asset +++ b/data/assets/scene/solarsystem/missions/apollo/8/trails.asset @@ -1,11 +1,10 @@ local earth_transforms = asset.require("scene/solarsystem/planets/earth/transforms") local moon_transforms = asset.require("scene/solarsystem/planets/earth/moon/moon") local kernels = asset.require("./kernels") +local coreKernels = asset.require("spice/core") -local ApolloSpiceId = -908 - local LaunchTrail = { Identifier = "Apollo8LaunchTrail", Parent = earth_transforms.EarthIAU.Identifier, @@ -13,9 +12,9 @@ local LaunchTrail = { Type = "RenderableTrailTrajectory", Translation = { Type = "SpiceTranslation", - Target = ApolloSpiceId, - Observer = "EARTH", - Frame = "IAU_EARTH" + Target = kernels.ID.Apollo8, + Observer = coreKernels.ID.Earth, + Frame = coreKernels.Frame.Earth }, Color = { 0.70, 0.50, 0.20 }, StartTime = "1968 DEC 21 12:51:00", @@ -34,17 +33,17 @@ local MoonTrail = { Parent = moon_transforms.Moon.Identifier, Renderable = { Type = "RenderableTrailTrajectory", + Enabled = false, Translation = { Type = "SpiceTranslation", - Target = ApolloSpiceId, - Observer = "MOON", - Frame = "IAU_MOON" + Target = kernels.ID.Apollo8, + Observer = coreKernels.ID.Moon, + Frame = coreKernels.Frame.Moon }, Color = { 0.70, 0.50, 0.20 }, StartTime = "1968 DEC 23", EndTime = "1968 DEC 26", - SampleInterval = 30, - Enabled = false + SampleInterval = 30 }, GUI = { Name = "Apollo 8 Moon Trail", @@ -57,17 +56,17 @@ local EarthBarycenterTrail = { Parent = earth_transforms.EarthCenter.Identifier, Renderable = { Type = "RenderableTrailTrajectory", + Enabled = false, Translation = { Type = "SpiceTranslation", - Target = ApolloSpiceId, - Observer = "EARTH", - Frame = "GALACTIC" + Target = kernels.ID.Apollo8, + Observer = coreKernels.ID.Earth, + Frame = coreKernels.Frame.Galactic }, Color = { 0.8, 0.2, 0.2 }, StartTime = "1968 DEC 21", EndTime = "1968 DEC 28", - SampleInterval = 30, - Enabled = false + SampleInterval = 30 }, GUI = { Name = "Apollo 8 Earth Barycenter Trail", @@ -77,8 +76,6 @@ local EarthBarycenterTrail = { asset.onInitialize(function() - openspace.spice.loadKernel(kernels.kernels) - openspace.addSceneGraphNode(LaunchTrail) openspace.addSceneGraphNode(MoonTrail) openspace.addSceneGraphNode(EarthBarycenterTrail) @@ -88,8 +85,6 @@ asset.onDeinitialize(function() openspace.removeSceneGraphNode(EarthBarycenterTrail) openspace.removeSceneGraphNode(MoonTrail) openspace.removeSceneGraphNode(LaunchTrail) - - openspace.spice.unloadKernel(kernels.kernels) end) asset.export(LaunchTrail) diff --git a/data/assets/scene/solarsystem/missions/apollo/actions.asset b/data/assets/scene/solarsystem/missions/apollo/actions.asset index 078b57781e..68ab8c420e 100644 --- a/data/assets/scene/solarsystem/missions/apollo/actions.asset +++ b/data/assets/scene/solarsystem/missions/apollo/actions.asset @@ -4,12 +4,12 @@ local ToggleMoonShading = { Command = [[ openspace.setPropertyValueSingle( "Scene.Moon.Renderable.PerformShading", - not openspace.getPropertyValue("Scene.Moon.Renderable.PerformShading") + not openspace.propertyValue("Scene.Moon.Renderable.PerformShading") ) ]], Documentation = "Toggles the shading of the Moon", GuiPath = "/Missions/Apollo", - isLocal = false + IsLocal = false } local FocusMoon = { @@ -22,7 +22,7 @@ local FocusMoon = { ]], Documentation = "Set camera focus on the Moon", GuiPath = "/Missions/Apollo", - isLocal = false + IsLocal = false } local FocusEarth = { @@ -35,7 +35,7 @@ local FocusEarth = { ]], Documentation = "Set camera focus on the Earth", GuiPath = "/Missions/Apollo", - isLocal = false + IsLocal = false } @@ -55,7 +55,6 @@ end) asset.meta = { Name = "Actions - Apollo missions", - Version = "1.0", Description = "Actions related to the Apollo missions", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/missions/apollo/apollo_globebrowsing.asset b/data/assets/scene/solarsystem/missions/apollo/apollo_globebrowsing.asset index 80a25772cb..a32046950d 100644 --- a/data/assets/scene/solarsystem/missions/apollo/apollo_globebrowsing.asset +++ b/data/assets/scene/solarsystem/missions/apollo/apollo_globebrowsing.asset @@ -1,27 +1,33 @@ local moon = asset.require("scene/solarsystem/planets/earth/moon/moon") +-- This is technically not necessary, but we need to ensure that the default layers load +-- first before we add the layers from this assets or else the default layers might be +-- initialized later, causing them to appear **after** these layers +asset.require("scene/solarsystem/planets/earth/moon/default_layers") -local heightmaps = asset.syncedResource({ + + +local heightmaps = asset.resource({ Name = "Apollo Globebrowsing Heightmaps", Type = "HttpSynchronization", Identifier = "apollo_globebrowsing_heightmaps", Version = 1 }) -local basemaps = asset.syncedResource({ +local basemaps = asset.resource({ Name = "Apollo Globebrowsing Basemaps", Type = "HttpSynchronization", Identifier = "apollo_globebrowsing_basemaps", Version = 1 }) -local naclighting = asset.syncedResource({ +local naclighting = asset.resource({ Name = "Apollo Globebrowsing NAC Lighting", Type = "HttpSynchronization", Identifier = "apollo_globebrowsing_naclighting", Version = 1 }) -local stations = asset.syncedResource({ +local stations = asset.resource({ Name = "Apollo 17 Globebrowsing Stations", Type = "HttpSynchronization", Identifier = "apollo_17_stations", @@ -35,7 +41,7 @@ local ToggleKaguyaLayer = { Command = [[ openspace.setPropertyValueSingle( "Scene.Moon.Renderable.Layers.ColorLayers.Kaguya_Utah.Enabled", - not openspace.getPropertyValue("Scene.Moon.Renderable.Layers.ColorLayers.Kaguya_Utah.Enabled") + not openspace.propertyValue("Scene.Moon.Renderable.Layers.ColorLayers.Kaguya_Utah.Enabled") ) ]], Documentation = "Toggles Moon Kaguya color layer", @@ -59,6 +65,7 @@ local DisableApolloSites = { IsLocal = false } + asset.onInitialize(function() openspace.globebrowsing.addBlendingLayersFromDirectory(heightmaps, moon.Moon.Identifier) openspace.globebrowsing.addBlendingLayersFromDirectory(basemaps, moon.Moon.Identifier) diff --git a/data/assets/scene/solarsystem/missions/apollo/insignias_map.asset b/data/assets/scene/solarsystem/missions/apollo/insignias_map.asset index cebfca401f..ab1828e639 100644 --- a/data/assets/scene/solarsystem/missions/apollo/insignias_map.asset +++ b/data/assets/scene/solarsystem/missions/apollo/insignias_map.asset @@ -1,12 +1,10 @@ -- Apollo mission insignias on their locations on the Lunar surface. --- The insignias are invisible by default, but can be enabled using shown or hidden using --- the exported functions `showInsignias(interpolationDuration)` and `hideInsignias(interpolationDuration)`. local moon = asset.require("scene/solarsystem/planets/earth/moon/moon") -local insigniasPath = asset.syncedResource({ +local insigniasPath = asset.resource({ Name = "Apollo Insignias", Type = "HttpSynchronization", Identifier = "apollo_insignias", @@ -182,7 +180,7 @@ local ShowInsignias = { Command = [[openspace.setPropertyValue("Scene.Apollo*Insignia.Renderable.Opacity", 1, 0.5)]], Documentation = "Show patches of the Apollo missions on their respective landing sites", GuiPath = "/Missions/Apollo", - IsLocal = true + IsLocal = false } local HideInsignias = { @@ -191,15 +189,17 @@ local HideInsignias = { Command = [[openspace.setPropertyValue("Scene.Apollo*Insignia.Renderable.Opacity", 0, 0.5)]], Documentation = "Hide patches of the Apollo missions on their respective landing sites", GuiPath = "/Missions/Apollo", - IsLocal = true + IsLocal = false } + asset.onInitialize(function() openspace.addSceneGraphNode(Apollo11) openspace.addSceneGraphNode(Apollo12) openspace.addSceneGraphNode(Apollo14) openspace.addSceneGraphNode(Apollo15) openspace.addSceneGraphNode(Apollo16) + openspace.addSceneGraphNode(Apollo17) openspace.action.registerAction(ShowInsignias) openspace.action.registerAction(HideInsignias) @@ -209,6 +209,7 @@ asset.onDeinitialize(function() openspace.action.removeAction(HideInsignias) openspace.action.removeAction(ShowInsignias) + openspace.removeSceneGraphNode(Apollo17) openspace.removeSceneGraphNode(Apollo16) openspace.removeSceneGraphNode(Apollo15) openspace.removeSceneGraphNode(Apollo14) @@ -221,19 +222,3 @@ asset.export(Apollo12) asset.export(Apollo14) asset.export(Apollo15) asset.export(Apollo16) - -asset.export("showInsignia", function (missionNumber, interpolationDuration) - openspace.setPropertyValue("Scene.Apollo" .. missionNumber .. "Insignia.Renderable.Opacity", 1, interpolationDuration) -end) - -asset.export("hideInsignia", function (missionNumber, interpolationDuration) - openspace.setPropertyValue("Scene.Apollo" .. missionNumber .. "Insignia.Renderable.Opacity", 0, interpolationDuration) -end) - -asset.export("showInsignias", function (interpolationDuration) - openspace.setPropertyValue("Scene.Apollo*Insignia.Renderable.Opacity", 1, interpolationDuration) -end) - -asset.export("hideInsignias", function (interpolationDuration) - openspace.setPropertyValue("Scene.Apollo*Insignia.Renderable.Opacity", 0, interpolationDuration) -end) diff --git a/data/assets/scene/solarsystem/missions/apollo/mission.asset b/data/assets/scene/solarsystem/missions/apollo/mission.asset index 0271d3f71a..804cf3e4fa 100644 --- a/data/assets/scene/solarsystem/missions/apollo/mission.asset +++ b/data/assets/scene/solarsystem/missions/apollo/mission.asset @@ -1,4 +1,5 @@ local Mission = { + Identifier = "Apollo", Name = "The Apollo Missions", Image = "https://solarsystem.nasa.gov/system/downloadable_items/2962_s65-55202.jpg", Description = "Apollo was the NASA program that resulted in American astronauts' making a total of 11 spaceflights and walking on the moon. The first four flights tested the equipment used in the Apollo Program. Six of the other seven flights landed on the moon. The first Apollo flight happened in 1968. The first moon landing took place in 1969. The last moon landing was in 1972. A total of 12 astronauts walked on the moon. The astronauts conducted scientific research there. They studied the lunar surface. They collected moon rocks to bring back to Earth.", @@ -8,13 +9,13 @@ local Mission = { Name = "First image of Earthrise", Date = "1968 DEC 24 12:20:00", Image = "https://www.nasa.gov/sites/default/files/thumbnails/image/apollo_8_earthrise_1968_as08-14-2383.jpg", - Description = "On Dec. 24, 1968, Apollo 8 astronauts Frank Borman, Jim Lovell, and Bill Anders became the first humans to orbit the Moon, and the first to witness the magnificent sight called 'Earthrise'. As the spacecraft was in the process of rotating, Anders took this iconic picture showing Earth rising over the Moon's horizon.", + Description = "On Dec. 24, 1968, Apollo 8 astronauts Frank Borman, Jim Lovell, and Bill Anders became the first humans to orbit the Moon, and the first to witness the magnificent sight called 'Earthrise'. As the spacecraft was in the process of rotating, Anders took this iconic picture showing Earth rising over the Moon's horizon." }, { Name = "One giant leap for mankind", Date = "1969 JUL 20 02:56:00", Description = "At 02:56 a.m. UTC Neil Armstrong is ready to plant the first human foot on another world. With more than half a billion people watching on television, he climbs down the ladder and proclaims: 'That's one small step for a man, one giant leap for mankind'. Aldrin joins him shortly, and offers a simple but powerful description of the lunar surface: 'magnificent desolation'. They explore the surface for two and a half hours, collecting samples and taking photographs. They leave behind an American flag, a patch honoring the fallen Apollo 1 crew, and a plaque on one of Eagle's legs. It reads, 'Here men from the planet Earth first set foot upon the moon. July 1969 A.D. We came in peace for all mankind.'", - Image = "https://www.nasa.gov/sites/default/files/images/464487main_AS11-40-5886_full.jpg", + Image = "https://www.nasa.gov/sites/default/files/images/464487main_AS11-40-5886_full.jpg" } }, Phases = { @@ -30,7 +31,7 @@ local Mission = { Description = "Apollo 11 was the first mission to land on the moon. The crew consisted of Neil Armstrong, Commander, Edwin E. 'Buzz' Aldrin Jr., Lunar Module Pilot, and Michael Collins, Command Module Pilot", Image = "https://www.nasa.gov/sites/default/files/styles/full_width_feature/public/thumbnails/image/s69-31739orig.jpg", Link = "https://www.nasa.gov/mission_pages/apollo/missions/apollo11.html", - Actions = { "os.apollo11.setup.LandingSite", "os.apollo.DisableApolloSites" }, + Actions = { "os.apollo11.setup.LandingSite", "os.apollo.DisableApolloSites" } }, { Name = "Apollo Flight 15", @@ -54,5 +55,5 @@ asset.onInitialize(function() end) asset.onDeinitialize(function() - openspace.unloadMission(Mission.Name) + openspace.unloadMission(Mission) end) diff --git a/data/assets/scene/solarsystem/missions/artemis/actions.asset b/data/assets/scene/solarsystem/missions/artemis/actions.asset index dbe4064d6f..ce058276ff 100644 --- a/data/assets/scene/solarsystem/missions/artemis/actions.asset +++ b/data/assets/scene/solarsystem/missions/artemis/actions.asset @@ -22,7 +22,6 @@ asset.export("SetupLaunch", SetupLaunch.Identifier) asset.meta = { Name = "Actions - Artemis", - Version = "1.0", Description = "Actions related to the Artemis mission", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/missions/artemis/kernels.asset b/data/assets/scene/solarsystem/missions/artemis/kernels.asset new file mode 100644 index 0000000000..278e26b502 --- /dev/null +++ b/data/assets/scene/solarsystem/missions/artemis/kernels.asset @@ -0,0 +1,21 @@ +local data = asset.resource({ + Name = "Artemis Kernels", + Type = "HttpSynchronization", + Identifier = "artemis_1_kernels", + Version = 1 +}) + +local ID = { + Artemis = -1023 +} + + +asset.onInitialize(function() + openspace.spice.loadKernel(data .. "artemis.bsp") +end) + +asset.onDeinitialize(function() + openspace.spice.unloadKernel(data .. "artemis.bsp") +end) + +asset.export("ID", ID) diff --git a/data/assets/scene/solarsystem/missions/artemis/mission.asset b/data/assets/scene/solarsystem/missions/artemis/mission.asset index 195351017a..44bcce8503 100644 --- a/data/assets/scene/solarsystem/missions/artemis/mission.asset +++ b/data/assets/scene/solarsystem/missions/artemis/mission.asset @@ -1,6 +1,7 @@ -- Source: https://solarsystem.nasa.gov/missions/rosetta-philae/in-depth/ local Mission = { + Identifier = "Artemis", Name = "Artemis", TimeRange = { Start = "2022 NOV 16 06:47:00", End = "2022 DEC 11 17:40:30" }, Image = "https://www.nasa.gov/sites/default/files/thumbnails/image/em1_patch_final.png", @@ -36,7 +37,7 @@ local Mission = { Phases = { { Name = "Launch", - TimeRange = { Start = "2022 NOV 16 06:47:44", End = "2022 NOV 16 10:09:20" }, + TimeRange = { Start = "2022 NOV 16 06:47:44", End = "2022 NOV 16 10:09:20" } }, { Name = "Outbound coasting phase", @@ -63,7 +64,7 @@ local Mission = { }, { Name = "Return transit", - TimeRange = { Start = "2022 DEC 06 07:29:00", End = "2022 DEC 11 17:40:30" }, + TimeRange = { Start = "2022 DEC 06 07:29:00", End = "2022 DEC 11 17:40:30" } } } } @@ -74,5 +75,5 @@ asset.onInitialize(function() end) asset.onDeinitialize(function() - openspace.unloadMission(Mission.Name) + openspace.unloadMission(Mission) end) diff --git a/data/assets/scene/solarsystem/missions/artemis/model.asset b/data/assets/scene/solarsystem/missions/artemis/model.asset index 1cd1625d95..d90170526f 100644 --- a/data/assets/scene/solarsystem/missions/artemis/model.asset +++ b/data/assets/scene/solarsystem/missions/artemis/model.asset @@ -1,9 +1,9 @@ -local sun = asset.require("scene/solarsystem/sun/sun") +local sun = asset.require("scene/solarsystem/sun/transforms") local transforms = asset.require("./transforms") -local models = asset.syncedResource({ +local models = asset.resource({ Name = "Artemis Models", Type = "HttpSynchronization", Identifier = "artemis_1_models", @@ -21,7 +21,7 @@ local ArtemisModel = { Attached = "ArtemisModel", XAxis = { 1.0, 0.0, 0.0 }, XAxisOrthogonal = true, - YAxis = "Sun", + YAxis = sun.SunCenter.Identifier, YAxisInvert = true } }, @@ -55,7 +55,6 @@ asset.export(ArtemisModel) asset.meta = { Name = "Artemis-1 Model", - Version = "1.0", Description = "Orion capsule model for the Artemis-1 mission", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/missions/artemis/toggle_trail.asset b/data/assets/scene/solarsystem/missions/artemis/toggle_trail.asset index 28bee49bc8..bcb6a13ad7 100644 --- a/data/assets/scene/solarsystem/missions/artemis/toggle_trail.asset +++ b/data/assets/scene/solarsystem/missions/artemis/toggle_trail.asset @@ -27,8 +27,8 @@ local ToggleTrail = { end else visibility = not ( - (openspace.getPropertyValue("Scene." .. earthTrail .. ".Renderable.Fade") == 1) or - (openspace.getPropertyValue("Scene." .. moonTrail .. ".Renderable.Fade") == 1) + (openspace.propertyValue("Scene." .. earthTrail .. ".Renderable.Fade") == 1) or + (openspace.propertyValue("Scene." .. moonTrail .. ".Renderable.Fade") == 1) ) end @@ -46,7 +46,7 @@ local ToggleTrail = { node is currently in focus and only hide Artemis trails if it is in focus (as the 'Node') and 2) the transition direction (as 'Approaching' or 'Exiting')]], GuiPath = "/Artemis/Events", - IsLocal = true + IsLocal = false } diff --git a/data/assets/scene/solarsystem/missions/artemis/trail.asset b/data/assets/scene/solarsystem/missions/artemis/trail.asset index e4e66164aa..d3a29f95da 100644 --- a/data/assets/scene/solarsystem/missions/artemis/trail.asset +++ b/data/assets/scene/solarsystem/missions/artemis/trail.asset @@ -1,18 +1,10 @@ -asset.require("spice/base") local earthTransforms = asset.require("scene/solarsystem/planets/earth/transforms") local moonTransforms = asset.require("scene/solarsystem/planets/earth/moon/moon") +local kernels = asset.require("./kernels") +local coreKernels = asset.require("spice/core") -local ArtemisSpiceId = "-1023" - -local kernels = asset.syncedResource({ - Name = "Artemis Kernels", - Type = "HttpSynchronization", - Identifier = "artemis_1_kernels", - Version = 1 -}) - local ArtemisEarthTrail = { Identifier = "ArtemisEarthTrail", Parent = earthTransforms.EarthCenter.Identifier, @@ -20,9 +12,9 @@ local ArtemisEarthTrail = { Type = "RenderableTrailTrajectory", Translation = { Type = "SpiceTranslation", - Target = ArtemisSpiceId, - Observer = "EARTH", - Frame = "GALACTIC" + Target = kernels.ID.Artemis, + Observer = coreKernels.ID.Earth, + Frame = coreKernels.ID.Galactic }, Color = { 0.2, 0.78, 0.635 }, Fade = 7.0, @@ -44,9 +36,9 @@ local ArtemisMoonTrail= { Type = "RenderableTrailTrajectory", Translation = { Type = "SpiceTranslation", - Target = ArtemisSpiceId, - Observer = "MOON", - Frame = "IAU_MOON" + Target = kernels.ID.Artemis, + Observer = coreKernels.ID.Moon, + Frame = coreKernels.Frame.Moon }, Color = { 0.78, 0.43, 0.20 }, Fade = 7.0, @@ -63,8 +55,6 @@ local ArtemisMoonTrail= { asset.onInitialize(function() - openspace.spice.loadKernel(kernels .. "artemis.bsp") - openspace.addSceneGraphNode(ArtemisEarthTrail) openspace.addSceneGraphNode(ArtemisMoonTrail) end) @@ -72,8 +62,6 @@ end) asset.onDeinitialize(function() openspace.removeSceneGraphNode(ArtemisMoonTrail) openspace.removeSceneGraphNode(ArtemisEarthTrail) - - openspace.spice.unloadKernel(kernels .. "artemis.bsp") end) asset.export(ArtemisEarthTrail) @@ -83,7 +71,6 @@ asset.export(ArtemisMoonTrail) asset.meta = { Name = "Artemis-1 Trails", - Version = "1.0", Description = "Trail of Artemis-1 in respect to Earth and the Moon", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/missions/artemis/transforms.asset b/data/assets/scene/solarsystem/missions/artemis/transforms.asset index 6af48c6db4..8c32007207 100644 --- a/data/assets/scene/solarsystem/missions/artemis/transforms.asset +++ b/data/assets/scene/solarsystem/missions/artemis/transforms.asset @@ -1,48 +1,34 @@ -asset.require("spice/base") local earthTransforms = asset.require("scene/solarsystem/planets/earth/transforms") +local kernels = asset.require("./kernels") +local coreKernels = asset.require("spice/core") -local kernels = asset.syncedResource({ - Name = "Artemis Kernels", - Type = "HttpSynchronization", - Identifier = "artemis_1_kernels", - Version = 1 -}) - - -local ArtemisSpiceId = "-1023" - local ArtemisPosition = { Identifier = "ArtemisPosition", Parent = earthTransforms.EarthCenter.Identifier, Transform = { Translation = { Type = "SpiceTranslation", - Target = ArtemisSpiceId, - Observer = "EARTH", - Frame = "GALACTIC" + Target = kernels.ID.Artemis, + Observer = coreKernels.ID.Earth, + Frame = coreKernels.Frame.Galactic } }, GUI = { Name = "Artemis-1 Position", Path = "/Solar System/Missions/Artemis", - Hidden = true, - Description = "Artemis-1 position relative to Earth" + Hidden = true } } asset.onInitialize(function() - openspace.spice.loadKernel(kernels .. "artemis.bsp") - openspace.addSceneGraphNode(ArtemisPosition) end) asset.onDeinitialize(function() openspace.removeSceneGraphNode(ArtemisPosition) - - openspace.spice.unloadKernel(kernels .. "artemis.bsp") end) asset.export(ArtemisPosition) @@ -51,7 +37,6 @@ asset.export(ArtemisPosition) asset.meta = { Name = "Artemis-1 Transforms", - Version = "1.0", Description = "Artemis-1 transforms, position relative to Earth", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/missions/bepicolombo/bepicolombo.asset b/data/assets/scene/solarsystem/missions/bepicolombo/bepicolombo.asset new file mode 100644 index 0000000000..0c7155adc2 --- /dev/null +++ b/data/assets/scene/solarsystem/missions/bepicolombo/bepicolombo.asset @@ -0,0 +1,15 @@ +asset.require("./model") +asset.require("./trails") +asset.require("./mission") +asset.require("./fov") + + + +asset.meta = { + Name = "BepiColombo", + Description = + "This asset includes all of the other assets for the BepiColombo mission.", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/missions/bepicolombo/fov.asset b/data/assets/scene/solarsystem/missions/bepicolombo/fov.asset new file mode 100644 index 0000000000..6dfe003e15 --- /dev/null +++ b/data/assets/scene/solarsystem/missions/bepicolombo/fov.asset @@ -0,0 +1,10 @@ +asset.require("./fov/bela") +asset.require("./fov/hga") +asset.require("./fov/mertis") +asset.require("./fov/mgns") +asset.require("./fov/mixs") +asset.require("./fov/phebus") +asset.require("./fov/serena") +asset.require("./fov/sibbiosys") +asset.require("./fov/sixs") +asset.require("./fov/startracker") diff --git a/data/assets/scene/solarsystem/missions/bepicolombo/fov/bela.asset b/data/assets/scene/solarsystem/missions/bepicolombo/fov/bela.asset new file mode 100644 index 0000000000..d60f6f2658 --- /dev/null +++ b/data/assets/scene/solarsystem/missions/bepicolombo/fov/bela.asset @@ -0,0 +1,104 @@ +local transforms = asset.require("../model") +local kernels = asset.require("../kernels") + + + +local BelaReceiver = { + Identifier = "BepiColomboMPO_BelaReceiver", + Parent = transforms.BepiColombo.Identifier, + Renderable = { + Type = "RenderableFov", + Body = kernels.ID.MPO, + Frame = kernels.Frame.BelaReceiver, + RGB = { 0.8, 0.7, 0.7 }, + Instrument = { + Name = "MPO_BELA_RX", + Method = "CIRCLE", + Aberration = "NONE" + }, + AlwaysDrawFov = true, + PotentialTargets = { "MERCURY", "EARTH", "VENUS" } + }, + GUI = { + Name = "MPO BELA Receiver", + Path = "/Solar System/Missions/BepiColombo/Instruments", + } +} + +local BelaTransmitterMain = { + Identifier = "BepiColomboMPO_BelaTransmitterMain", + Parent = transforms.BepiColombo.Identifier, + Renderable = { + Type = "RenderableFov", + Body = kernels.ID.MPO, + Frame = kernels.Frame.BelaTransmitterMain, + RGB = { 0.8, 0.7, 0.7 }, + Instrument = { + Name = "MPO_BELA_TX_MAIN", + Method = "CIRCLE", + Aberration = "NONE" + }, + AlwaysDrawFov = true, + PotentialTargets = { "MERCURY", "EARTH", "VENUS" } + }, + GUI = { + Name = "MPO BELA Transmitter Main", + Path = "/Solar System/Missions/BepiColombo/Instruments", + } +} + +local BelaTransmitterRed = { + Identifier = "BepiColomboMPO_BelaTransmitterRed", + Parent = transforms.BepiColombo.Identifier, + Renderable = { + Type = "RenderableFov", + Body = kernels.ID.MPO, + Frame = kernels.Frame.BelaTransmitterRed, + RGB = { 0.8, 0.7, 0.7 }, + Instrument = { + Name = "MPO_BELA_TX_RED", + Method = "CIRCLE", + Aberration = "NONE" + }, + AlwaysDrawFov = true, + PotentialTargets = { "MERCURY", "EARTH", "VENUS" } + }, + GUI = { + Name = "MPO BELA Transmitter Main", + Path = "/Solar System/Missions/BepiColombo/Instruments", + } +} + +asset.onInitialize(function() + -- Circle shapes are currently not supported + -- openspace.addSceneGraphNode(BelaReceiver) + -- openspace.addSceneGraphNode(BelaTransmitterMain) + -- openspace.addSceneGraphNode(BelaTransmitterRed) +end) + +asset.onDeinitialize(function() + -- openspace.removeSceneGraphNode(BelaTransmitterRed) + -- openspace.removeSceneGraphNode(BelaTransmitterMain) + -- openspace.removeSceneGraphNode(BelaReceiver) +end) + + + +asset.meta = { + Name = "BELA", + Description = [[ + BELA for the first time will return a digitized laser reflection signal (only in a + dedicated instrument mode in order to keep the overall data volume moderate). This + will allow characterizing the surface roughness with unprecedented detail and + accuracy. BELA's albedo measurement capability will be particularly important for + permanently shaded craters where ice is suspected to be found. Here, BELA can observe + with its laser where most other remote sensing instruments will fail to obtain a + signal. In its normal operational mode, BELA employs a modified digital filter + matching algorithms for return pulse detection, while other similar instruments + (MOLA, MLA) use analog filter matching. The digital filters can be exchanged at any + time by telecommand and/or parameter upload. + ]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/missions/bepicolombo/fov/hga.asset b/data/assets/scene/solarsystem/missions/bepicolombo/fov/hga.asset new file mode 100644 index 0000000000..730c2841ae --- /dev/null +++ b/data/assets/scene/solarsystem/missions/bepicolombo/fov/hga.asset @@ -0,0 +1,46 @@ +local transforms = asset.require("../model") +local kernels = asset.require("../kernels") + + + +local HGA = { + Identifier = "BepiColomboMPO_HGA", + Parent = transforms.BepiColombo.Identifier, + Renderable = { + Type = "RenderableFov", + Body = kernels.ID.MPO, + Frame = kernels.Frame.HGA, + RGB = { 0.8, 0.7, 0.7 }, + Instrument = { + Name = "MPO_HGA", + Method = "CIRCLE", + Aberration = "NONE" + }, + AlwaysDrawFov = true, + PotentialTargets = { "MERCURY", "EARTH", "VENUS" } + }, + GUI = { + Name = "MPO HGA", + Path = "/Solar System/Missions/BepiColombo/Instruments", + } +} + + +asset.onInitialize(function() + -- Circle shapes are currently not supported + -- openspace.addSceneGraphNode(HGA) +end) + +asset.onDeinitialize(function() + -- openspace.removeSceneGraphNode(HGA) +end) + + + +asset.meta = { + Name = "HGA", + Description = "Shows the field-view for the High Gain Antenna of the MPO spacecraft.", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/missions/bepicolombo/fov/mertis.asset b/data/assets/scene/solarsystem/missions/bepicolombo/fov/mertis.asset new file mode 100644 index 0000000000..75e04598a6 --- /dev/null +++ b/data/assets/scene/solarsystem/missions/bepicolombo/fov/mertis.asset @@ -0,0 +1,100 @@ +local transforms = asset.require("../model") +local kernels = asset.require("../kernels") + + + +local MertisTis = { + Identifier = "BepiColomboMPO_MertisTis", + Parent = transforms.BepiColombo.Identifier, + Renderable = { + Type = "RenderableFov", + Body = kernels.ID.MPO, + Frame = kernels.Frame.MertisTis, + RGB = { 0.8, 0.7, 0.7 }, + Instrument = { + Name = "MPO_MERTIS_TIS", + Method = "RECTANGLE", + Aberration = "NONE" + }, + AlwaysDrawFov = true, + PotentialTargets = { "MERCURY", "EARTH", "VENUS" } + }, + GUI = { + Name = "MPO MERTIS TIS", + Path = "/Solar System/Missions/BepiColombo/Instruments", + } +} + +local MertisTisPlanet = { + Identifier = "BepiColomboMPO_MertisTisPlanet", + Parent = transforms.BepiColombo.Identifier, + Renderable = { + Type = "RenderableFov", + Body = kernels.ID.MPO, + Frame = kernels.Frame.MertisTisPlanet, + RGB = { 0.8, 0.7, 0.7 }, + Instrument = { + Name = "MPO_MERTIS_TIS_PLANET", + Method = "RECTANGLE", + Aberration = "NONE" + }, + AlwaysDrawFov = true, + PotentialTargets = { "MERCURY", "EARTH", "VENUS" } + }, + GUI = { + Name = "MPO MERTIS TIS Planet", + Path = "/Solar System/Missions/BepiColombo/Instruments", + } +} + +local MertisTisSpace = { + Identifier = "BepiColomboMPO_MertisTisSpace", + Parent = transforms.BepiColombo.Identifier, + Renderable = { + Type = "RenderableFov", + Body = kernels.ID.MPO, + Frame = kernels.Frame.MertisTisSpace, + RGB = { 0.8, 0.7, 0.7 }, + Instrument = { + Name = "MPO_MERTIS_TIS_SPACE", + Method = "RECTANGLE", + Aberration = "NONE" + }, + AlwaysDrawFov = true, + PotentialTargets = { "MERCURY", "EARTH", "VENUS" } + }, + GUI = { + Name = "MPO MERTIS TIS Space", + Path = "/Solar System/Missions/BepiColombo/Instruments", + } +} + + +asset.onInitialize(function() + openspace.addSceneGraphNode(MertisTis) + openspace.addSceneGraphNode(MertisTisPlanet) + openspace.addSceneGraphNode(MertisTisSpace) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(MertisTisSpace) + openspace.removeSceneGraphNode(MertisTisPlanet) + openspace.removeSceneGraphNode(MertisTis) +end) + + + +asset.meta = { + Name = "MERTIS", + Description = [[ + The Mercury Radiometer and Thermal Infrared Spectrometer (MERTIS) is an innovative + instrument for studying the surface composition and mineralogy of planet Mercury. + MERTIS combines an uncooled grating push broom IR-spectrometer (TIS) with a radiometer + (TIR), which will operate in the wavelength region of 7-14 and 7-40 um, respectively. + The spatial resolution of the MERTIS observations will be about 500 m globally and + better than 500 m for approximately 5-10 percent of the surface. + ]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/missions/bepicolombo/fov/mgns.asset b/data/assets/scene/solarsystem/missions/bepicolombo/fov/mgns.asset new file mode 100644 index 0000000000..836712e892 --- /dev/null +++ b/data/assets/scene/solarsystem/missions/bepicolombo/fov/mgns.asset @@ -0,0 +1,55 @@ +local transforms = asset.require("../model") +local kernels = asset.require("../kernels") + + + +local MGNS = { + Identifier = "BepiColomboMPO_MGNS", + Parent = transforms.BepiColombo.Identifier, + Renderable = { + Type = "RenderableFov", + Body = kernels.ID.MPO, + Frame = kernels.Frame.MGNS, + RGB = { 0.8, 0.7, 0.7 }, + Instrument = { + Name = "MPO_MGNS", + Method = "CIRCLE", + Aberration = "NONE" + }, + AlwaysDrawFov = true, + PotentialTargets = { "MERCURY", "EARTH", "VENUS" } + }, + GUI = { + Name = "MPO MGNS", + Path = "/Solar System/Missions/BepiColombo/Instruments", + } +} + + +asset.onInitialize(function() + -- Circle shapes are currently not supported + -- openspace.addSceneGraphNode(MGNS) +end) + +asset.onDeinitialize(function() + -- openspace.removeSceneGraphNode(MGNS) +end) + + + +asset.meta = { + Name = "MGNS", + Description = [[ + The Mercury Gamma-ray and Neutron Spectrometer (MGNS) on board BepiColombo Mercury + Planet Orbiter is designed to observe and study the gamma-ray and neutron emissions of + Mercury. The MGNS is a multifunctional scientific instrument, comprising one gamma-ray + spectrometer and four neutron detectors. The sensor unit of the gamma-ray spectrometer + consists of one 3 by 3 inches high energy resolution inorganic scintillator crystal, + i.e. CeBr3, whereas the sensor unit of the neutron detectors consists of three 3He + gas-filled tubes and one stilbene organic scintillator crystal with plastic + scintillator as its anticoincidence shield. + ]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/missions/bepicolombo/fov/mixs.asset b/data/assets/scene/solarsystem/missions/bepicolombo/fov/mixs.asset new file mode 100644 index 0000000000..1286f23bfe --- /dev/null +++ b/data/assets/scene/solarsystem/missions/bepicolombo/fov/mixs.asset @@ -0,0 +1,78 @@ +local transforms = asset.require("../model") +local kernels = asset.require("../kernels") + + + +local MIXS_C = { + Identifier = "BepiColomboMPO_MIXS-C", + Parent = transforms.BepiColombo.Identifier, + Renderable = { + Type = "RenderableFov", + Body = kernels.ID.MPO, + Frame = kernels.Frame.MIXS_C, + RGB = { 0.8, 0.7, 0.7 }, + Instrument = { + Name = "MPO_MIXS-C", + Method = "RECTANGLE", + Aberration = "NONE" + }, + AlwaysDrawFov = true, + PotentialTargets = { "MERCURY", "EARTH", "VENUS" } + }, + GUI = { + Name = "MPO MIXS-C", + Path = "/Solar System/Missions/BepiColombo/Instruments", + } +} + +local MIXS_T = { + Identifier = "BepiColomboMPO_MIXS-T", + Parent = transforms.BepiColombo.Identifier, + Renderable = { + Type = "RenderableFov", + Body = kernels.ID.MPO, + Frame = kernels.Frame.MIXS_T, + RGB = { 0.8, 0.7, 0.7 }, + Instrument = { + Name = "MPO_MIXS-T", + Method = "RECTANGLE", + Aberration = "NONE" + }, + AlwaysDrawFov = true, + PotentialTargets = { "MERCURY", "EARTH", "VENUS" } + }, + GUI = { + Name = "MPO MIXS-T", + Path = "/Solar System/Missions/BepiColombo/Instruments", + } +} + + +asset.onInitialize(function() + openspace.addSceneGraphNode(MIXS_C) + openspace.addSceneGraphNode(MIXS_T) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(MIXS_T) + openspace.removeSceneGraphNode(MIXS_C) +end) + + + +asset.meta = { + Name = "MIXS", + Description = [[ + The MIXS instrument contains two parallel telescopes, designed to map the X-ray + emission from Mercury at two angular resolutions. The narrow-field telescope (MIXS-T) + uses a grazing incidence optic with a 1 degree field-of-view (FOV) and an imaging + detector with 64 x 64 pixels. The wide-field telescope (MIXS-C) uses a collimator to + define a FOV of ~10 degrees Full Width at Zero Maximum (FWZM). Its detector is + identical to MIXS-T, but as the collimator has no imaging capability, the pixels are + aggregated into a single output. The optical axes are aligned with the nadir-pointing + axis of the spacecraft. + ]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/missions/bepicolombo/fov/phebus.asset b/data/assets/scene/solarsystem/missions/bepicolombo/fov/phebus.asset new file mode 100644 index 0000000000..18fe04b1c5 --- /dev/null +++ b/data/assets/scene/solarsystem/missions/bepicolombo/fov/phebus.asset @@ -0,0 +1,132 @@ +local transforms = asset.require("../model") +local kernels = asset.require("../kernels") + + + +local PhebusSlit75 = { + Identifier = "BepiColomboMPO_PhebusSlit75", + Parent = transforms.BepiColombo.Identifier, + Renderable = { + Type = "RenderableFov", + Body = kernels.ID.MPO, + Frame = kernels.Frame.PhebusSlit75, + RGB = { 0.8, 0.7, 0.7 }, + Instrument = { + Name = "MPO_PHEBUS_SLIT_75", + Method = "RECTANGLE", + Aberration = "NONE" + }, + AlwaysDrawFov = true, + PotentialTargets = { "MERCURY", "EARTH", "VENUS" } + }, + GUI = { + Name = "MPO Phebus Slit 75", + Path = "/Solar System/Missions/BepiColombo/Instruments", + } +} + +local PhebusSlit100 = { + Identifier = "BepiColomboMPO_PhebusSlit100", + Parent = transforms.BepiColombo.Identifier, + Renderable = { + Type = "RenderableFov", + Body = kernels.ID.MPO, + Frame = kernels.Frame.PhebusSlit100, + RGB = { 0.8, 0.7, 0.7 }, + Instrument = { + Name = "MPO_PHEBUS_SLIT_100", + Method = "RECTANGLE", + Aberration = "NONE" + }, + AlwaysDrawFov = true, + PotentialTargets = { "MERCURY", "EARTH", "VENUS" } + }, + GUI = { + Name = "MPO Phebus Slit 100", + Path = "/Solar System/Missions/BepiColombo/Instruments", + } +} + +local Phebus75 = { + Identifier = "BepiColomboMPO_Phebus75", + Parent = transforms.BepiColombo.Identifier, + Renderable = { + Type = "RenderableFov", + Body = kernels.ID.MPO, + Frame = kernels.Frame.Phebus75, + RGB = { 0.8, 0.7, 0.7 }, + Instrument = { + Name = "MPO_PHEBUS_75", + Method = "RECTANGLE", + Aberration = "NONE" + }, + AlwaysDrawFov = true, + PotentialTargets = { "MERCURY", "EARTH", "VENUS" } + }, + GUI = { + Name = "MPO Phebus 75", + Path = "/Solar System/Missions/BepiColombo/Instruments", + } +} + +local Phebus100 = { + Identifier = "BepiColomboMPO_Phebus100", + Parent = transforms.BepiColombo.Identifier, + Renderable = { + Type = "RenderableFov", + Body = kernels.ID.MPO, + Frame = kernels.Frame.Phebus100, + RGB = { 0.8, 0.7, 0.7 }, + Instrument = { + Name = "MPO_PHEBUS_100", + Method = "RECTANGLE", + Aberration = "NONE" + }, + AlwaysDrawFov = true, + PotentialTargets = { "MERCURY", "EARTH", "VENUS" } + }, + GUI = { + Name = "MPO Phebus 100", + Path = "/Solar System/Missions/BepiColombo/Instruments", + } +} + + +asset.onInitialize(function() + openspace.addSceneGraphNode(PhebusSlit75) + openspace.addSceneGraphNode(PhebusSlit100) + openspace.addSceneGraphNode(Phebus75) + openspace.addSceneGraphNode(Phebus100) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Phebus100) + openspace.removeSceneGraphNode(Phebus75) + openspace.removeSceneGraphNode(PhebusSlit100) + openspace.removeSceneGraphNode(PhebusSlit75) +end) + + + +asset.meta = { + Name = "Phebus", + Description = [[ + The PHEBUS instrument is a UV spectrometer covering the spectral range going from + 50 nm to 315 nm with two additional narrow bands in the visible around 404 nm (K line) + and 422 nm (Ca line). Photons from the source (exosphere of Mercury) are collected by + a SiC primary mirror installed inside a one-degree of freedom rotating mechanism + (360 degrees). The primary mirror focuses the photons on a slit. Spectrometric + information is obtained by the use of two gratings sharing the same pupil. Photons + going through the slit are scattered according to their wavelength onto two separate + intensified cross-delay anode detectors. One detector (labelled EUV) covers the + 55-155 nm wavelength range. The second one (labelled FUV) covers the 145-315nm + wavelength range. The two intensifiers based on Micro-Channel Plates use high voltages + at values around 3600-5000 V. The two visible narrow spectral bands are obtained by + two prisms on the side of the FUV detector that feed two identical Photo-Multiplier + Tubes. The high voltage level that is necessary for these PMT is around 1000 V. They + are called NUV Ca and NUV K detectors. + ]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/missions/bepicolombo/fov/serena.asset b/data/assets/scene/solarsystem/missions/bepicolombo/fov/serena.asset new file mode 100644 index 0000000000..d2c303524a --- /dev/null +++ b/data/assets/scene/solarsystem/missions/bepicolombo/fov/serena.asset @@ -0,0 +1,54 @@ +local transforms = asset.require("../model") +local kernels = asset.require("../kernels") + + + +local SerenaElena = { + Identifier = "BepiColomboMPO_SerenaElena", + Parent = transforms.BepiColombo.Identifier, + Renderable = { + Type = "RenderableFov", + Body = kernels.ID.MPO, + Frame = kernels.Frame.SerenaElena, + RGB = { 0.8, 0.7, 0.7 }, + Instrument = { + Name = "MPO_SERENA_ELENA", + Method = "POLYGON", + Aberration = "NONE" + }, + AlwaysDrawFov = true, + PotentialTargets = { "MERCURY", "EARTH", "VENUS" } + }, + GUI = { + Name = "MPO Serena Elena", + Path = "/Solar System/Missions/BepiColombo/Instruments", + } +} + + +asset.onInitialize(function() + openspace.addSceneGraphNode(SerenaElena) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(SerenaElena) +end) + + + +asset.meta = { + Name = "Serena", + Description = [[ + The Search for Exospheric Refilling and Emitted Natural Abundances (SERENA) is a + single instrument composed by 4 units devoted to the detection of neutral and ionized + particles in the Hermean environment. It addresses some of the main scientific + objectives of the BepiColombo mission: composition, origin and dynamics of Mercury's + exosphere and polar deposits; and structure and dynamics of Mercury's magnetosphere. + Each unit is able to operate individually and to achieve its specific scientific + objectives. In addition, the opportunity to operate sensors simultaneously greatly + improves the success of scientific objectives and allows for additional objectives. + ]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/missions/bepicolombo/fov/serena_anodes.asset b/data/assets/scene/solarsystem/missions/bepicolombo/fov/serena_anodes.asset new file mode 100644 index 0000000000..a10d997bf1 --- /dev/null +++ b/data/assets/scene/solarsystem/missions/bepicolombo/fov/serena_anodes.asset @@ -0,0 +1,798 @@ +local transforms = asset.require("../model") +local kernels = asset.require("../kernels") + + + +local SerenaElenaAN01 = { + Identifier = "BepiColomboMPO_SerenaElena_AN01", + Parent = transforms.BepiColombo.Identifier, + Renderable = { + Type = "RenderableFov", + Body = kernels.ID.MPO, + Frame = kernels.Frame.SerenaElenaAN01, + RGB = { 0.8, 0.7, 0.7 }, + Instrument = { + Name = "MPO_SERENA_ELENA_AN_01", + Method = "RECTANGLE", + Aberration = "NONE" + }, + AlwaysDrawFov = true, + PotentialTargets = { "MERCURY", "EARTH", "VENUS" } + }, + GUI = { + Name = "MPO Serena Elena AN01", + Path = "/Solar System/Missions/BepiColombo/Instruments", + } +} + +local SerenaElenaAN02 = { + Identifier = "BepiColomboMPO_SerenaElena_AN02", + Parent = transforms.BepiColombo.Identifier, + Renderable = { + Type = "RenderableFov", + Body = kernels.ID.MPO, + Frame = kernels.Frame.SerenaElenaAN02, + RGB = { 0.8, 0.7, 0.7 }, + Instrument = { + Name = "MPO_SERENA_ELENA_AN_02", + Method = "RECTANGLE", + Aberration = "NONE" + }, + AlwaysDrawFov = true, + PotentialTargets = { "MERCURY", "EARTH", "VENUS" } + }, + GUI = { + Name = "MPO Serena Elena AN02", + Path = "/Solar System/Missions/BepiColombo/Instruments", + } +} + +local SerenaElenaAN03 = { + Identifier = "BepiColomboMPO_SerenaElena_AN03", + Parent = transforms.BepiColombo.Identifier, + Renderable = { + Type = "RenderableFov", + Body = kernels.ID.MPO, + Frame = kernels.Frame.SerenaElenaAN03, + RGB = { 0.8, 0.7, 0.7 }, + Instrument = { + Name = "MPO_SERENA_ELENA_AN_03", + Method = "RECTANGLE", + Aberration = "NONE" + }, + AlwaysDrawFov = true, + PotentialTargets = { "MERCURY", "EARTH", "VENUS" } + }, + GUI = { + Name = "MPO Serena Elena AN03", + Path = "/Solar System/Missions/BepiColombo/Instruments", + } +} + +local SerenaElenaAN04 = { + Identifier = "BepiColomboMPO_SerenaElena_AN04", + Parent = transforms.BepiColombo.Identifier, + Renderable = { + Type = "RenderableFov", + Body = kernels.ID.MPO, + Frame = kernels.Frame.SerenaElenaAN04, + RGB = { 0.8, 0.7, 0.7 }, + Instrument = { + Name = "MPO_SERENA_ELENA_AN_04", + Method = "RECTANGLE", + Aberration = "NONE" + }, + AlwaysDrawFov = true, + PotentialTargets = { "MERCURY", "EARTH", "VENUS" } + }, + GUI = { + Name = "MPO Serena Elena AN04", + Path = "/Solar System/Missions/BepiColombo/Instruments", + } +} + +local SerenaElenaAN05 = { + Identifier = "BepiColomboMPO_SerenaElena_AN05", + Parent = transforms.BepiColombo.Identifier, + Renderable = { + Type = "RenderableFov", + Body = kernels.ID.MPO, + Frame = kernels.Frame.SerenaElenaAN05, + RGB = { 0.8, 0.7, 0.7 }, + Instrument = { + Name = "MPO_SERENA_ELENA_AN_05", + Method = "RECTANGLE", + Aberration = "NONE" + }, + AlwaysDrawFov = true, + PotentialTargets = { "MERCURY", "EARTH", "VENUS" } + }, + GUI = { + Name = "MPO Serena Elena AN05", + Path = "/Solar System/Missions/BepiColombo/Instruments", + } +} + +local SerenaElenaAN06 = { + Identifier = "BepiColomboMPO_SerenaElena_AN06", + Parent = transforms.BepiColombo.Identifier, + Renderable = { + Type = "RenderableFov", + Body = kernels.ID.MPO, + Frame = kernels.Frame.SerenaElenaAN06, + RGB = { 0.8, 0.7, 0.7 }, + Instrument = { + Name = "MPO_SERENA_ELENA_AN_06", + Method = "RECTANGLE", + Aberration = "NONE" + }, + AlwaysDrawFov = true, + PotentialTargets = { "MERCURY", "EARTH", "VENUS" } + }, + GUI = { + Name = "MPO Serena Elena AN06", + Path = "/Solar System/Missions/BepiColombo/Instruments", + } +} + +local SerenaElenaAN07 = { + Identifier = "BepiColomboMPO_SerenaElena_AN07", + Parent = transforms.BepiColombo.Identifier, + Renderable = { + Type = "RenderableFov", + Body = kernels.ID.MPO, + Frame = kernels.Frame.SerenaElenaAN07, + RGB = { 0.8, 0.7, 0.7 }, + Instrument = { + Name = "MPO_SERENA_ELENA_AN_07", + Method = "RECTANGLE", + Aberration = "NONE" + }, + AlwaysDrawFov = true, + PotentialTargets = { "MERCURY", "EARTH", "VENUS" } + }, + GUI = { + Name = "MPO Serena Elena AN07", + Path = "/Solar System/Missions/BepiColombo/Instruments", + } +} + +local SerenaElenaAN08 = { + Identifier = "BepiColomboMPO_SerenaElena_AN08", + Parent = transforms.BepiColombo.Identifier, + Renderable = { + Type = "RenderableFov", + Body = kernels.ID.MPO, + Frame = kernels.Frame.SerenaElenaAN08, + RGB = { 0.8, 0.7, 0.7 }, + Instrument = { + Name = "MPO_SERENA_ELENA_AN_08", + Method = "RECTANGLE", + Aberration = "NONE" + }, + AlwaysDrawFov = true, + PotentialTargets = { "MERCURY", "EARTH", "VENUS" } + }, + GUI = { + Name = "MPO Serena Elena AN08", + Path = "/Solar System/Missions/BepiColombo/Instruments", + } +} + +local SerenaElenaAN09 = { + Identifier = "BepiColomboMPO_SerenaElena_AN09", + Parent = transforms.BepiColombo.Identifier, + Renderable = { + Type = "RenderableFov", + Body = kernels.ID.MPO, + Frame = kernels.Frame.SerenaElenaAN09, + RGB = { 0.8, 0.7, 0.7 }, + Instrument = { + Name = "MPO_SERENA_ELENA_AN_09", + Method = "RECTANGLE", + Aberration = "NONE" + }, + AlwaysDrawFov = true, + PotentialTargets = { "MERCURY", "EARTH", "VENUS" } + }, + GUI = { + Name = "MPO Serena Elena AN09", + Path = "/Solar System/Missions/BepiColombo/Instruments", + } +} + +local SerenaElenaAN10 = { + Identifier = "BepiColomboMPO_SerenaElena_AN10", + Parent = transforms.BepiColombo.Identifier, + Renderable = { + Type = "RenderableFov", + Body = kernels.ID.MPO, + Frame = kernels.Frame.SerenaElenaAN10, + RGB = { 0.8, 0.7, 0.7 }, + Instrument = { + Name = "MPO_SERENA_ELENA_AN_10", + Method = "RECTANGLE", + Aberration = "NONE" + }, + AlwaysDrawFov = true, + PotentialTargets = { "MERCURY", "EARTH", "VENUS" } + }, + GUI = { + Name = "MPO Serena Elena AN10", + Path = "/Solar System/Missions/BepiColombo/Instruments", + } +} + +local SerenaElenaAN11 = { + Identifier = "BepiColomboMPO_SerenaElena_AN11", + Parent = transforms.BepiColombo.Identifier, + Renderable = { + Type = "RenderableFov", + Body = kernels.ID.MPO, + Frame = kernels.Frame.SerenaElenaAN11, + RGB = { 0.8, 0.7, 0.7 }, + Instrument = { + Name = "MPO_SERENA_ELENA_AN_11", + Method = "RECTANGLE", + Aberration = "NONE" + }, + AlwaysDrawFov = true, + PotentialTargets = { "MERCURY", "EARTH", "VENUS" } + }, + GUI = { + Name = "MPO Serena Elena AN11", + Path = "/Solar System/Missions/BepiColombo/Instruments", + } +} + +local SerenaElenaAN12 = { + Identifier = "BepiColomboMPO_SerenaElena_AN12", + Parent = transforms.BepiColombo.Identifier, + Renderable = { + Type = "RenderableFov", + Body = kernels.ID.MPO, + Frame = kernels.Frame.SerenaElenaAN12, + RGB = { 0.8, 0.7, 0.7 }, + Instrument = { + Name = "MPO_SERENA_ELENA_AN_12", + Method = "RECTANGLE", + Aberration = "NONE" + }, + AlwaysDrawFov = true, + PotentialTargets = { "MERCURY", "EARTH", "VENUS" } + }, + GUI = { + Name = "MPO Serena Elena AN12", + Path = "/Solar System/Missions/BepiColombo/Instruments", + } +} + +local SerenaElenaAN13 = { + Identifier = "BepiColomboMPO_SerenaElena_AN13", + Parent = transforms.BepiColombo.Identifier, + Renderable = { + Type = "RenderableFov", + Body = kernels.ID.MPO, + Frame = kernels.Frame.SerenaElenaAN13, + RGB = { 0.8, 0.7, 0.7 }, + Instrument = { + Name = "MPO_SERENA_ELENA_AN_13", + Method = "RECTANGLE", + Aberration = "NONE" + }, + AlwaysDrawFov = true, + PotentialTargets = { "MERCURY", "EARTH", "VENUS" } + }, + GUI = { + Name = "MPO Serena Elena AN13", + Path = "/Solar System/Missions/BepiColombo/Instruments", + } +} + +local SerenaElenaAN14 = { + Identifier = "BepiColomboMPO_SerenaElena_AN14", + Parent = transforms.BepiColombo.Identifier, + Renderable = { + Type = "RenderableFov", + Body = kernels.ID.MPO, + Frame = kernels.Frame.SerenaElenaAN14, + RGB = { 0.8, 0.7, 0.7 }, + Instrument = { + Name = "MPO_SERENA_ELENA_AN_14", + Method = "RECTANGLE", + Aberration = "NONE" + }, + AlwaysDrawFov = true, + PotentialTargets = { "MERCURY", "EARTH", "VENUS" } + }, + GUI = { + Name = "MPO Serena Elena AN14", + Path = "/Solar System/Missions/BepiColombo/Instruments", + } +} + +local SerenaElenaAN15 = { + Identifier = "BepiColomboMPO_SerenaElena_AN15", + Parent = transforms.BepiColombo.Identifier, + Renderable = { + Type = "RenderableFov", + Body = kernels.ID.MPO, + Frame = kernels.Frame.SerenaElenaAN15, + RGB = { 0.8, 0.7, 0.7 }, + Instrument = { + Name = "MPO_SERENA_ELENA_AN_15", + Method = "RECTANGLE", + Aberration = "NONE" + }, + AlwaysDrawFov = true, + PotentialTargets = { "MERCURY", "EARTH", "VENUS" } + }, + GUI = { + Name = "MPO Serena Elena AN15", + Path = "/Solar System/Missions/BepiColombo/Instruments", + } +} + +local SerenaElenaAN16 = { + Identifier = "BepiColomboMPO_SerenaElena_AN16", + Parent = transforms.BepiColombo.Identifier, + Renderable = { + Type = "RenderableFov", + Body = kernels.ID.MPO, + Frame = kernels.Frame.SerenaElenaAN16, + RGB = { 0.8, 0.7, 0.7 }, + Instrument = { + Name = "MPO_SERENA_ELENA_AN_16", + Method = "RECTANGLE", + Aberration = "NONE" + }, + AlwaysDrawFov = true, + PotentialTargets = { "MERCURY", "EARTH", "VENUS" } + }, + GUI = { + Name = "MPO Serena Elena AN16", + Path = "/Solar System/Missions/BepiColombo/Instruments", + } +} + +local SerenaElenaAN17 = { + Identifier = "BepiColomboMPO_SerenaElena_AN17", + Parent = transforms.BepiColombo.Identifier, + Renderable = { + Type = "RenderableFov", + Body = kernels.ID.MPO, + Frame = kernels.Frame.SerenaElenaAN17, + RGB = { 0.8, 0.7, 0.7 }, + Instrument = { + Name = "MPO_SERENA_ELENA_AN_17", + Method = "RECTANGLE", + Aberration = "NONE" + }, + AlwaysDrawFov = true, + PotentialTargets = { "MERCURY", "EARTH", "VENUS" } + }, + GUI = { + Name = "MPO Serena Elena AN17", + Path = "/Solar System/Missions/BepiColombo/Instruments", + } +} + +local SerenaElenaAN18 = { + Identifier = "BepiColomboMPO_SerenaElena_AN18", + Parent = transforms.BepiColombo.Identifier, + Renderable = { + Type = "RenderableFov", + Body = kernels.ID.MPO, + Frame = kernels.Frame.SerenaElenaAN18, + RGB = { 0.8, 0.7, 0.7 }, + Instrument = { + Name = "MPO_SERENA_ELENA_AN_18", + Method = "RECTANGLE", + Aberration = "NONE" + }, + AlwaysDrawFov = true, + PotentialTargets = { "MERCURY", "EARTH", "VENUS" } + }, + GUI = { + Name = "MPO Serena Elena AN18", + Path = "/Solar System/Missions/BepiColombo/Instruments", + } +} + +local SerenaElenaAN19 = { + Identifier = "BepiColomboMPO_SerenaElena_AN19", + Parent = transforms.BepiColombo.Identifier, + Renderable = { + Type = "RenderableFov", + Body = kernels.ID.MPO, + Frame = kernels.Frame.SerenaElenaAN19, + RGB = { 0.8, 0.7, 0.7 }, + Instrument = { + Name = "MPO_SERENA_ELENA_AN_19", + Method = "RECTANGLE", + Aberration = "NONE" + }, + AlwaysDrawFov = true, + PotentialTargets = { "MERCURY", "EARTH", "VENUS" } + }, + GUI = { + Name = "MPO Serena Elena AN19", + Path = "/Solar System/Missions/BepiColombo/Instruments", + } +} + +local SerenaElenaAN20 = { + Identifier = "BepiColomboMPO_SerenaElena_AN20", + Parent = transforms.BepiColombo.Identifier, + Renderable = { + Type = "RenderableFov", + Body = kernels.ID.MPO, + Frame = kernels.Frame.SerenaElenaAN20, + RGB = { 0.8, 0.7, 0.7 }, + Instrument = { + Name = "MPO_SERENA_ELENA_AN_20", + Method = "RECTANGLE", + Aberration = "NONE" + }, + AlwaysDrawFov = true, + PotentialTargets = { "MERCURY", "EARTH", "VENUS" } + }, + GUI = { + Name = "MPO Serena Elena AN20", + Path = "/Solar System/Missions/BepiColombo/Instruments", + } +} + +local SerenaElenaAN21 = { + Identifier = "BepiColomboMPO_SerenaElena_AN21", + Parent = transforms.BepiColombo.Identifier, + Renderable = { + Type = "RenderableFov", + Body = kernels.ID.MPO, + Frame = kernels.Frame.SerenaElenaAN21, + RGB = { 0.8, 0.7, 0.7 }, + Instrument = { + Name = "MPO_SERENA_ELENA_AN_21", + Method = "RECTANGLE", + Aberration = "NONE" + }, + AlwaysDrawFov = true, + PotentialTargets = { "MERCURY", "EARTH", "VENUS" } + }, + GUI = { + Name = "MPO Serena Elena AN21", + Path = "/Solar System/Missions/BepiColombo/Instruments", + } +} + +local SerenaElenaAN22 = { + Identifier = "BepiColomboMPO_SerenaElena_AN22", + Parent = transforms.BepiColombo.Identifier, + Renderable = { + Type = "RenderableFov", + Body = kernels.ID.MPO, + Frame = kernels.Frame.SerenaElenaAN22, + RGB = { 0.8, 0.7, 0.7 }, + Instrument = { + Name = "MPO_SERENA_ELENA_AN_22", + Method = "RECTANGLE", + Aberration = "NONE" + }, + AlwaysDrawFov = true, + PotentialTargets = { "MERCURY", "EARTH", "VENUS" } + }, + GUI = { + Name = "MPO Serena Elena AN22", + Path = "/Solar System/Missions/BepiColombo/Instruments", + } +} + +local SerenaElenaAN23 = { + Identifier = "BepiColomboMPO_SerenaElena_AN23", + Parent = transforms.BepiColombo.Identifier, + Renderable = { + Type = "RenderableFov", + Body = kernels.ID.MPO, + Frame = kernels.Frame.SerenaElenaAN23, + RGB = { 0.8, 0.7, 0.7 }, + Instrument = { + Name = "MPO_SERENA_ELENA_AN_23", + Method = "RECTANGLE", + Aberration = "NONE" + }, + AlwaysDrawFov = true, + PotentialTargets = { "MERCURY", "EARTH", "VENUS" } + }, + GUI = { + Name = "MPO Serena Elena AN23", + Path = "/Solar System/Missions/BepiColombo/Instruments", + } +} + +local SerenaElenaAN24 = { + Identifier = "BepiColomboMPO_SerenaElena_AN24", + Parent = transforms.BepiColombo.Identifier, + Renderable = { + Type = "RenderableFov", + Body = kernels.ID.MPO, + Frame = kernels.Frame.SerenaElenaAN24, + RGB = { 0.8, 0.7, 0.7 }, + Instrument = { + Name = "MPO_SERENA_ELENA_AN_24", + Method = "RECTANGLE", + Aberration = "NONE" + }, + AlwaysDrawFov = true, + PotentialTargets = { "MERCURY", "EARTH", "VENUS" } + }, + GUI = { + Name = "MPO Serena Elena AN24", + Path = "/Solar System/Missions/BepiColombo/Instruments", + } +} + +local SerenaElenaAN25 = { + Identifier = "BepiColomboMPO_SerenaElena_AN25", + Parent = transforms.BepiColombo.Identifier, + Renderable = { + Type = "RenderableFov", + Body = kernels.ID.MPO, + Frame = kernels.Frame.SerenaElenaAN25, + RGB = { 0.8, 0.7, 0.7 }, + Instrument = { + Name = "MPO_SERENA_ELENA_AN_25", + Method = "RECTANGLE", + Aberration = "NONE" + }, + AlwaysDrawFov = true, + PotentialTargets = { "MERCURY", "EARTH", "VENUS" } + }, + GUI = { + Name = "MPO Serena Elena AN25", + Path = "/Solar System/Missions/BepiColombo/Instruments", + } +} + +local SerenaElenaAN26 = { + Identifier = "BepiColomboMPO_SerenaElena_AN26", + Parent = transforms.BepiColombo.Identifier, + Renderable = { + Type = "RenderableFov", + Body = kernels.ID.MPO, + Frame = kernels.Frame.SerenaElenaAN26, + RGB = { 0.8, 0.7, 0.7 }, + Instrument = { + Name = "MPO_SERENA_ELENA_AN_26", + Method = "RECTANGLE", + Aberration = "NONE" + }, + AlwaysDrawFov = true, + PotentialTargets = { "MERCURY", "EARTH", "VENUS" } + }, + GUI = { + Name = "MPO Serena Elena AN26", + Path = "/Solar System/Missions/BepiColombo/Instruments", + } +} + +local SerenaElenaAN27 = { + Identifier = "BepiColomboMPO_SerenaElena_AN27", + Parent = transforms.BepiColombo.Identifier, + Renderable = { + Type = "RenderableFov", + Body = kernels.ID.MPO, + Frame = kernels.Frame.SerenaElenaAN27, + RGB = { 0.8, 0.7, 0.7 }, + Instrument = { + Name = "MPO_SERENA_ELENA_AN_27", + Method = "RECTANGLE", + Aberration = "NONE" + }, + AlwaysDrawFov = true, + PotentialTargets = { "MERCURY", "EARTH", "VENUS" } + }, + GUI = { + Name = "MPO Serena Elena AN27", + Path = "/Solar System/Missions/BepiColombo/Instruments", + } +} + +local SerenaElenaAN28 = { + Identifier = "BepiColomboMPO_SerenaElena_AN28", + Parent = transforms.BepiColombo.Identifier, + Renderable = { + Type = "RenderableFov", + Body = kernels.ID.MPO, + Frame = kernels.Frame.SerenaElenaAN28, + RGB = { 0.8, 0.7, 0.7 }, + Instrument = { + Name = "MPO_SERENA_ELENA_AN_28", + Method = "RECTANGLE", + Aberration = "NONE" + }, + AlwaysDrawFov = true, + PotentialTargets = { "MERCURY", "EARTH", "VENUS" } + }, + GUI = { + Name = "MPO Serena Elena AN28", + Path = "/Solar System/Missions/BepiColombo/Instruments", + } +} + +local SerenaElenaAN29 = { + Identifier = "BepiColomboMPO_SerenaElena_AN29", + Parent = transforms.BepiColombo.Identifier, + Renderable = { + Type = "RenderableFov", + Body = kernels.ID.MPO, + Frame = kernels.Frame.SerenaElenaAN29, + RGB = { 0.8, 0.7, 0.7 }, + Instrument = { + Name = "MPO_SERENA_ELENA_AN_29", + Method = "RECTANGLE", + Aberration = "NONE" + }, + AlwaysDrawFov = true, + PotentialTargets = { "MERCURY", "EARTH", "VENUS" } + }, + GUI = { + Name = "MPO Serena Elena AN29", + Path = "/Solar System/Missions/BepiColombo/Instruments", + } +} + +local SerenaElenaAN30 = { + Identifier = "BepiColomboMPO_SerenaElena_AN30", + Parent = transforms.BepiColombo.Identifier, + Renderable = { + Type = "RenderableFov", + Body = kernels.ID.MPO, + Frame = kernels.Frame.SerenaElenaAN30, + RGB = { 0.8, 0.7, 0.7 }, + Instrument = { + Name = "MPO_SERENA_ELENA_AN_30", + Method = "RECTANGLE", + Aberration = "NONE" + }, + AlwaysDrawFov = true, + PotentialTargets = { "MERCURY", "EARTH", "VENUS" } + }, + GUI = { + Name = "MPO Serena Elena AN30", + Path = "/Solar System/Missions/BepiColombo/Instruments", + } +} + +local SerenaElenaAN31 = { + Identifier = "BepiColomboMPO_SerenaElena_AN31", + Parent = transforms.BepiColombo.Identifier, + Renderable = { + Type = "RenderableFov", + Body = kernels.ID.MPO, + Frame = kernels.Frame.SerenaElenaAN31, + RGB = { 0.8, 0.7, 0.7 }, + Instrument = { + Name = "MPO_SERENA_ELENA_AN_31", + Method = "RECTANGLE", + Aberration = "NONE" + }, + AlwaysDrawFov = true, + PotentialTargets = { "MERCURY", "EARTH", "VENUS" } + }, + GUI = { + Name = "MPO Serena Elena AN31", + Path = "/Solar System/Missions/BepiColombo/Instruments", + } +} + +local SerenaElenaAN32 = { + Identifier = "BepiColomboMPO_SerenaElena_AN32", + Parent = transforms.BepiColombo.Identifier, + Renderable = { + Type = "RenderableFov", + Body = kernels.ID.MPO, + Frame = kernels.Frame.SerenaElenaAN32, + RGB = { 0.8, 0.7, 0.7 }, + Instrument = { + Name = "MPO_SERENA_ELENA_AN_32", + Method = "RECTANGLE", + Aberration = "NONE" + }, + AlwaysDrawFov = true, + PotentialTargets = { "MERCURY", "EARTH", "VENUS" } + }, + GUI = { + Name = "MPO Serena Elena AN32", + Path = "/Solar System/Missions/BepiColombo/Instruments", + } +} + + +asset.onInitialize(function() + openspace.addSceneGraphNode(SerenaElenaAN01) + openspace.addSceneGraphNode(SerenaElenaAN02) + openspace.addSceneGraphNode(SerenaElenaAN03) + openspace.addSceneGraphNode(SerenaElenaAN04) + openspace.addSceneGraphNode(SerenaElenaAN05) + openspace.addSceneGraphNode(SerenaElenaAN06) + openspace.addSceneGraphNode(SerenaElenaAN07) + openspace.addSceneGraphNode(SerenaElenaAN08) + openspace.addSceneGraphNode(SerenaElenaAN09) + openspace.addSceneGraphNode(SerenaElenaAN10) + openspace.addSceneGraphNode(SerenaElenaAN11) + openspace.addSceneGraphNode(SerenaElenaAN12) + openspace.addSceneGraphNode(SerenaElenaAN13) + openspace.addSceneGraphNode(SerenaElenaAN14) + openspace.addSceneGraphNode(SerenaElenaAN15) + openspace.addSceneGraphNode(SerenaElenaAN16) + openspace.addSceneGraphNode(SerenaElenaAN17) + openspace.addSceneGraphNode(SerenaElenaAN18) + openspace.addSceneGraphNode(SerenaElenaAN19) + openspace.addSceneGraphNode(SerenaElenaAN20) + openspace.addSceneGraphNode(SerenaElenaAN21) + openspace.addSceneGraphNode(SerenaElenaAN22) + openspace.addSceneGraphNode(SerenaElenaAN23) + openspace.addSceneGraphNode(SerenaElenaAN24) + openspace.addSceneGraphNode(SerenaElenaAN25) + openspace.addSceneGraphNode(SerenaElenaAN26) + openspace.addSceneGraphNode(SerenaElenaAN27) + openspace.addSceneGraphNode(SerenaElenaAN28) + openspace.addSceneGraphNode(SerenaElenaAN29) + openspace.addSceneGraphNode(SerenaElenaAN30) + openspace.addSceneGraphNode(SerenaElenaAN31) + openspace.addSceneGraphNode(SerenaElenaAN32) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(SerenaElenaAN32) + openspace.removeSceneGraphNode(SerenaElenaAN31) + openspace.removeSceneGraphNode(SerenaElenaAN30) + openspace.removeSceneGraphNode(SerenaElenaAN29) + openspace.removeSceneGraphNode(SerenaElenaAN28) + openspace.removeSceneGraphNode(SerenaElenaAN27) + openspace.removeSceneGraphNode(SerenaElenaAN26) + openspace.removeSceneGraphNode(SerenaElenaAN25) + openspace.removeSceneGraphNode(SerenaElenaAN24) + openspace.removeSceneGraphNode(SerenaElenaAN23) + openspace.removeSceneGraphNode(SerenaElenaAN22) + openspace.removeSceneGraphNode(SerenaElenaAN21) + openspace.removeSceneGraphNode(SerenaElenaAN20) + openspace.removeSceneGraphNode(SerenaElenaAN19) + openspace.removeSceneGraphNode(SerenaElenaAN18) + openspace.removeSceneGraphNode(SerenaElenaAN17) + openspace.removeSceneGraphNode(SerenaElenaAN16) + openspace.removeSceneGraphNode(SerenaElenaAN15) + openspace.removeSceneGraphNode(SerenaElenaAN14) + openspace.removeSceneGraphNode(SerenaElenaAN13) + openspace.removeSceneGraphNode(SerenaElenaAN12) + openspace.removeSceneGraphNode(SerenaElenaAN11) + openspace.removeSceneGraphNode(SerenaElenaAN10) + openspace.removeSceneGraphNode(SerenaElenaAN09) + openspace.removeSceneGraphNode(SerenaElenaAN08) + openspace.removeSceneGraphNode(SerenaElenaAN07) + openspace.removeSceneGraphNode(SerenaElenaAN06) + openspace.removeSceneGraphNode(SerenaElenaAN05) + openspace.removeSceneGraphNode(SerenaElenaAN04) + openspace.removeSceneGraphNode(SerenaElenaAN03) + openspace.removeSceneGraphNode(SerenaElenaAN02) + openspace.removeSceneGraphNode(SerenaElenaAN01) +end) + + + +asset.meta = { + Name = "Serena Anodes", + Description = [[ + The Search for Exospheric Refilling and Emitted Natural Abundances (SERENA) is a + single instrument composed by 4 units devoted to the detection of neutral and ionized + particles in the Hermean environment. It addresses some of the main scientific + objectives of the BepiColombo mission: composition, origin and dynamics of Mercury's + exosphere and polar deposits; and structure and dynamics of Mercury's magnetosphere. + Each unit is able to operate individually and to achieve its specific scientific + objectives. In addition, the opportunity to operate sensors simultaneously greatly + improves the success of scientific objectives and allows for additional objectives. + ]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/missions/bepicolombo/fov/sibbiosys.asset b/data/assets/scene/solarsystem/missions/bepicolombo/fov/sibbiosys.asset new file mode 100644 index 0000000000..1f00714adf --- /dev/null +++ b/data/assets/scene/solarsystem/missions/bepicolombo/fov/sibbiosys.asset @@ -0,0 +1,363 @@ +local transforms = asset.require("../model") +local kernels = asset.require("../kernels") + + + +local SimbioSys_HRIC_FPA = { + Identifier = "BepiColomboMPO_SIMBIOSYS_HRIC_FPA", + Parent = transforms.BepiColombo.Identifier, + Renderable = { + Type = "RenderableFov", + Body = kernels.ID.MPO, + Frame = kernels.Frame.SymbioSysHricFpa, + RGB = { 0.8, 0.7, 0.7 }, + Instrument = { + Name = "MPO_SIMBIO-SYS_HRIC_FPA", + Method = "RECTANGLE", + Aberration = "NONE" + }, + AlwaysDrawFov = true, + PotentialTargets = { "MERCURY", "EARTH", "VENUS" } + }, + GUI = { + Name = "MPO Simbio-Sys HRIC FPA", + Path = "/Solar System/Missions/BepiColombo/Instruments", + } +} + +local SimbioSys_HRIC_F550 = { + Identifier = "BepiColomboMPO_SIMBIOSYS_HRIC_F550", + Parent = transforms.BepiColombo.Identifier, + Renderable = { + Type = "RenderableFov", + Body = kernels.ID.MPO, + Frame = kernels.Frame.SymbioSysHricF550, + RGB = { 0.8, 0.7, 0.7 }, + Instrument = { + Name = "MPO_SIMBIO-SYS_HRIC_F550", + Method = "RECTANGLE", + Aberration = "NONE" + }, + AlwaysDrawFov = true, + PotentialTargets = { "MERCURY", "EARTH", "VENUS" } + }, + GUI = { + Name = "MPO Simbio-Sys HRIC F550", + Path = "/Solar System/Missions/BepiColombo/Instruments", + } +} + +local SimbioSys_HRIC_FPAN = { + Identifier = "BepiColomboMPO_SIMBIOSYS_HRIC_FPAN", + Parent = transforms.BepiColombo.Identifier, + Renderable = { + Type = "RenderableFov", + Body = kernels.ID.MPO, + Frame = kernels.Frame.SymbioSysHricFpan, + RGB = { 0.8, 0.7, 0.7 }, + Instrument = { + Name = "MPO_SIMBIO-SYS_HRIC_FPAN", + Method = "RECTANGLE", + Aberration = "NONE" + }, + AlwaysDrawFov = true, + PotentialTargets = { "MERCURY", "EARTH", "VENUS" } + }, + GUI = { + Name = "MPO Simbio-Sys HRIC FPAN", + Path = "/Solar System/Missions/BepiColombo/Instruments", + } +} + +local SimbioSys_HRIC_F750 = { + Identifier = "BepiColomboMPO_SIMBIOSYS_HRIC_F750", + Parent = transforms.BepiColombo.Identifier, + Renderable = { + Type = "RenderableFov", + Body = kernels.ID.MPO, + Frame = kernels.Frame.SymbioSysHricF750, + RGB = { 0.8, 0.7, 0.7 }, + Instrument = { + Name = "MPO_SIMBIO-SYS_HRIC_F750", + Method = "RECTANGLE", + Aberration = "NONE" + }, + AlwaysDrawFov = true, + PotentialTargets = { "MERCURY", "EARTH", "VENUS" } + }, + GUI = { + Name = "MPO Simbio-Sys HRIC F750", + Path = "/Solar System/Missions/BepiColombo/Instruments", + } +} + +local SimbioSys_HRIC_F880 = { + Identifier = "BepiColomboMPO_SIMBIOSYS_HRIC_F880", + Parent = transforms.BepiColombo.Identifier, + Renderable = { + Type = "RenderableFov", + Body = kernels.ID.MPO, + Frame = kernels.Frame.SymbioSysHricF880, + RGB = { 0.8, 0.7, 0.7 }, + Instrument = { + Name = "MPO_SIMBIO-SYS_HRIC_F880", + Method = "RECTANGLE", + Aberration = "NONE" + }, + AlwaysDrawFov = true, + PotentialTargets = { "MERCURY", "EARTH", "VENUS" } + }, + GUI = { + Name = "MPO Simbio-Sys HRIC F880", + Path = "/Solar System/Missions/BepiColombo/Instruments", + } +} + +local SimbioSys_STC_L = { + Identifier = "BepiColomboMPO_SIMBIOSYS_STC_L", + Parent = transforms.BepiColombo.Identifier, + Renderable = { + Type = "RenderableFov", + Body = kernels.ID.MPO, + Frame = kernels.Frame.SymbioSysSTCL, + RGB = { 0.8, 0.7, 0.7 }, + Instrument = { + Name = "MPO_SIMBIO-SYS_STC-L", + Method = "RECTANGLE", + Aberration = "NONE" + }, + AlwaysDrawFov = true, + PotentialTargets = { "MERCURY", "EARTH", "VENUS" } + }, + GUI = { + Name = "MPO Simbio-Sys STC L", + Path = "/Solar System/Missions/BepiColombo/Instruments", + } +} + +local SimbioSys_STC_H = { + Identifier = "BepiColomboMPO_SIMBIOSYS_STC_H", + Parent = transforms.BepiColombo.Identifier, + Renderable = { + Type = "RenderableFov", + Body = kernels.ID.MPO, + Frame = kernels.Frame.SymbioSysSTCH, + RGB = { 0.8, 0.7, 0.7 }, + Instrument = { + Name = "MPO_SIMBIO-SYS_STC-H", + Method = "RECTANGLE", + Aberration = "NONE" + }, + AlwaysDrawFov = true, + PotentialTargets = { "MERCURY", "EARTH", "VENUS" } + }, + GUI = { + Name = "MPO Simbio-Sys STC H", + Path = "/Solar System/Missions/BepiColombo/Instruments", + } +} + +local SimbioSys_STC_L_F920 = { + Identifier = "BepiColomboMPO_SIMBIOSYS_STC_L_F920", + Parent = transforms.BepiColombo.Identifier, + Renderable = { + Type = "RenderableFov", + Body = kernels.ID.MPO, + Frame = kernels.Frame.SymbioSysSTCLF920, + RGB = { 0.8, 0.7, 0.7 }, + Instrument = { + Name = "MPO_SIMBIO-SYS_STC-L_F920", + Method = "RECTANGLE", + Aberration = "NONE" + }, + AlwaysDrawFov = true, + PotentialTargets = { "MERCURY", "EARTH", "VENUS" } + }, + GUI = { + Name = "MPO Simbio-Sys STC L F920", + Path = "/Solar System/Missions/BepiColombo/Instruments", + } +} + +local SimbioSys_STC_L_F550 = { + Identifier = "BepiColomboMPO_SIMBIOSYS_STC_L_F550", + Parent = transforms.BepiColombo.Identifier, + Renderable = { + Type = "RenderableFov", + Body = kernels.ID.MPO, + Frame = kernels.Frame.SymbioSysSTCLF550, + RGB = { 0.8, 0.7, 0.7 }, + Instrument = { + Name = "MPO_SIMBIO-SYS_STC-L_F550", + Method = "RECTANGLE", + Aberration = "NONE" + }, + AlwaysDrawFov = true, + PotentialTargets = { "MERCURY", "EARTH", "VENUS" } + }, + GUI = { + Name = "MPO Simbio-Sys STC L F550", + Path = "/Solar System/Missions/BepiColombo/Instruments", + } +} + +local SimbioSys_STC_L_P700 = { + Identifier = "BepiColomboMPO_SIMBIOSYS_STC_L_P700", + Parent = transforms.BepiColombo.Identifier, + Renderable = { + Type = "RenderableFov", + Body = kernels.ID.MPO, + Frame = kernels.Frame.SymbioSysSTCLP700, + RGB = { 0.8, 0.7, 0.7 }, + Instrument = { + Name = "MPO_SIMBIO-SYS_STC-L_P700", + Method = "RECTANGLE", + Aberration = "NONE" + }, + AlwaysDrawFov = true, + PotentialTargets = { "MERCURY", "EARTH", "VENUS" } + }, + GUI = { + Name = "MPO Simbio-Sys STC L P700", + Path = "/Solar System/Missions/BepiColombo/Instruments", + } +} + +local SimbioSys_STC_H_P700 = { + Identifier = "BepiColomboMPO_SIMBIOSYS_STC_H_P700", + Parent = transforms.BepiColombo.Identifier, + Renderable = { + Type = "RenderableFov", + Body = kernels.ID.MPO, + Frame = kernels.Frame.SymbioSysSTCHP700, + RGB = { 0.8, 0.7, 0.7 }, + Instrument = { + Name = "MPO_SIMBIO-SYS_STC-H_P700", + Method = "RECTANGLE", + Aberration = "NONE" + }, + AlwaysDrawFov = true, + PotentialTargets = { "MERCURY", "EARTH", "VENUS" } + }, + GUI = { + Name = "MPO Simbio-Sys STC H P700", + Path = "/Solar System/Missions/BepiColombo/Instruments", + } +} + +local SimbioSys_STC_H_F420 = { + Identifier = "BepiColomboMPO_SIMBIOSYS_STC_H_F420", + Parent = transforms.BepiColombo.Identifier, + Renderable = { + Type = "RenderableFov", + Body = kernels.ID.MPO, + Frame = kernels.Frame.SymbioSysSTCHF420, + RGB = { 0.8, 0.7, 0.7 }, + Instrument = { + Name = "MPO_SIMBIO-SYS_STC-H_F420", + Method = "RECTANGLE", + Aberration = "NONE" + }, + AlwaysDrawFov = true, + PotentialTargets = { "MERCURY", "EARTH", "VENUS" } + }, + GUI = { + Name = "MPO Simbio-Sys STC H F420", + Path = "/Solar System/Missions/BepiColombo/Instruments", + } +} + +local SimbioSys_STC_H_F750 = { + Identifier = "BepiColomboMPO_SIMBIOSYS_STC_H_F750", + Parent = transforms.BepiColombo.Identifier, + Renderable = { + Type = "RenderableFov", + Body = kernels.ID.MPO, + Frame = kernels.Frame.SymbioSysSTCHF750, + RGB = { 0.8, 0.7, 0.7 }, + Instrument = { + Name = "MPO_SIMBIO-SYS_STC-H_F750", + Method = "RECTANGLE", + Aberration = "NONE" + }, + AlwaysDrawFov = true, + PotentialTargets = { "MERCURY", "EARTH", "VENUS" } + }, + GUI = { + Name = "MPO Simbio-Sys STC H F750", + Path = "/Solar System/Missions/BepiColombo/Instruments", + } +} + +local SimbioSys_VIHI = { + Identifier = "BepiColomboMPO_SIMBIOSYS_VIHI", + Parent = transforms.BepiColombo.Identifier, + Renderable = { + Type = "RenderableFov", + Body = kernels.ID.MPO, + Frame = kernels.Frame.SymbioSysVIHI, + RGB = { 0.8, 0.7, 0.7 }, + Instrument = { + Name = "MPO_SIMBIO-SYS_VIHI", + Method = "RECTANGLE", + Aberration = "NONE" + }, + AlwaysDrawFov = true, + PotentialTargets = { "MERCURY", "EARTH", "VENUS" } + }, + GUI = { + Name = "MPO Simbio-Sys VIHI", + Path = "/Solar System/Missions/BepiColombo/Instruments", + } +} + + +asset.onInitialize(function() + openspace.addSceneGraphNode(SimbioSys_HRIC_FPA) + openspace.addSceneGraphNode(SimbioSys_HRIC_F550) + openspace.addSceneGraphNode(SimbioSys_HRIC_FPAN) + openspace.addSceneGraphNode(SimbioSys_HRIC_F750) + openspace.addSceneGraphNode(SimbioSys_HRIC_F880) + openspace.addSceneGraphNode(SimbioSys_STC_L) + openspace.addSceneGraphNode(SimbioSys_STC_H) + openspace.addSceneGraphNode(SimbioSys_STC_L_F920) + openspace.addSceneGraphNode(SimbioSys_STC_L_F550) + openspace.addSceneGraphNode(SimbioSys_STC_L_P700) + openspace.addSceneGraphNode(SimbioSys_STC_H_P700) + openspace.addSceneGraphNode(SimbioSys_STC_H_F420) + openspace.addSceneGraphNode(SimbioSys_STC_H_F750) + openspace.addSceneGraphNode(SimbioSys_VIHI) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(SimbioSys_VIHI) + openspace.removeSceneGraphNode(SimbioSys_STC_H_F750) + openspace.removeSceneGraphNode(SimbioSys_STC_H_F420) + openspace.removeSceneGraphNode(SimbioSys_STC_H_P700) + openspace.removeSceneGraphNode(SimbioSys_STC_L_P700) + openspace.removeSceneGraphNode(SimbioSys_STC_L_F550) + openspace.removeSceneGraphNode(SimbioSys_STC_L_F920) + openspace.removeSceneGraphNode(SimbioSys_STC_H) + openspace.removeSceneGraphNode(SimbioSys_STC_L) + openspace.removeSceneGraphNode(SimbioSys_HRIC_F880) + openspace.removeSceneGraphNode(SimbioSys_HRIC_F750) + openspace.removeSceneGraphNode(SimbioSys_HRIC_FPAN) + openspace.removeSceneGraphNode(SimbioSys_HRIC_F550) + openspace.removeSceneGraphNode(SimbioSys_HRIC_FPA) +end) + + + +asset.meta = { + Name = "SYMBIO-SYS", + Description = [[ + SIMBIO-SYS has been conceived to be integrated on the BepiColombo MPO pointing in the + nadir direction in order to perform the remote sensing of the Mercury surface during + the satellite orbits. The SIMBIO-SYS instrument architecture is based on 3 different + channels composing the instrument front-end with a common main electronics and power + supply. + ]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/missions/bepicolombo/fov/sixs.asset b/data/assets/scene/solarsystem/missions/bepicolombo/fov/sixs.asset new file mode 100644 index 0000000000..78c81c9818 --- /dev/null +++ b/data/assets/scene/solarsystem/missions/bepicolombo/fov/sixs.asset @@ -0,0 +1,100 @@ +local transforms = asset.require("../model") +local kernels = asset.require("../kernels") + + + +local SixsX1 = { + Identifier = "BepiColomboMPO_SixsX1", + Parent = transforms.BepiColombo.Identifier, + Renderable = { + Type = "RenderableFov", + Body = kernels.ID.MPO, + Frame = kernels.Frame.Sixs_X1, + RGB = { 0.8, 0.7, 0.7 }, + Instrument = { + Name = "MPO_SIXS-X-1", + Method = "ELLIPSE", + Aberration = "NONE" + }, + AlwaysDrawFov = true, + PotentialTargets = { "MERCURY", "EARTH", "VENUS" } + }, + GUI = { + Name = "MPO Sixs X1", + Path = "/Solar System/Missions/BepiColombo/Instruments", + } +} + +local SixsX2 = { + Identifier = "BepiColomboMPO_SixsX2", + Parent = transforms.BepiColombo.Identifier, + Renderable = { + Type = "RenderableFov", + Body = kernels.ID.MPO, + Frame = kernels.Frame.Sixs_X2, + RGB = { 0.8, 0.7, 0.7 }, + Instrument = { + Name = "MPO_SIXS-X-2", + Method = "ELLIPSE", + Aberration = "NONE" + }, + AlwaysDrawFov = true, + PotentialTargets = { "MERCURY", "EARTH", "VENUS" } + }, + GUI = { + Name = "MPO Sixs X2", + Path = "/Solar System/Missions/BepiColombo/Instruments", + } +} + +local SixsX3 = { + Identifier = "BepiColomboMPO_SixsX3", + Parent = transforms.BepiColombo.Identifier, + Renderable = { + Type = "RenderableFov", + Body = kernels.ID.MPO, + Frame = kernels.Frame.Sixs_X3, + RGB = { 0.8, 0.7, 0.7 }, + Instrument = { + Name = "MPO_SIXS-X-3", + Method = "ELLIPSE", + Aberration = "NONE" + }, + AlwaysDrawFov = true, + PotentialTargets = { "MERCURY", "EARTH", "VENUS" } + }, + GUI = { + Name = "MPO Sixs X3", + Path = "/Solar System/Missions/BepiColombo/Instruments", + } +} + + +asset.onInitialize(function() + -- Circle shapes are currently not supported + -- openspace.addSceneGraphNode(SixsX1) + -- openspace.addSceneGraphNode(SixsX2) + -- openspace.addSceneGraphNode(SixsX3) +end) + +asset.onDeinitialize(function() + -- openspace.removeSceneGraphNode(SixsX3) + -- openspace.removeSceneGraphNode(SixsX2) + -- openspace.removeSceneGraphNode(SixsX1) +end) + + + +asset.meta = { + Name = "Sixs", + Description = [[ + The scientific investigation performed by the Solar Intensity X-ray and particle + Spectrometer (SIXS) is the determination of solar impact on the Hermean surface in the + form of direct X-rays and energetic particles, which induce observable X-ray emission + via interaction with the surface of the planet. Particles of concern here are highly + energetic solar protons and electrons. + ]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/missions/bepicolombo/fov/startracker.asset b/data/assets/scene/solarsystem/missions/bepicolombo/fov/startracker.asset new file mode 100644 index 0000000000..f5afe6f213 --- /dev/null +++ b/data/assets/scene/solarsystem/missions/bepicolombo/fov/startracker.asset @@ -0,0 +1,103 @@ +local transforms = asset.require("../model") +local kernels = asset.require("../kernels") + + + +local StarTracker1 = { + Identifier = "BepiColomboMPO_StarTracker1", + Parent = transforms.BepiColombo.Identifier, + Renderable = { + Type = "RenderableFov", + Body = kernels.ID.MPO, + Frame = kernels.Frame.StarTracker1, + RGB = { 0.8, 0.7, 0.7 }, + Instrument = { + Name = "MPO_STR-1", + Method = "CIRCLE", + Aberration = "NONE" + }, + AlwaysDrawFov = true, + PotentialTargets = { "MERCURY", "EARTH", "VENUS" } + }, + GUI = { + Name = "MPO Star Tracker 1", + Path = "/Solar System/Missions/BepiColombo/Instruments", + } +} + +local StarTracker2 = { + Identifier = "BepiColomboMPO_StarTracker2", + Parent = transforms.BepiColombo.Identifier, + Renderable = { + Type = "RenderableFov", + Body = kernels.ID.MPO, + Frame = kernels.Frame.StarTracker2, + RGB = { 0.8, 0.7, 0.7 }, + Instrument = { + Name = "MPO_STR-2", + Method = "CIRCLE", + Aberration = "NONE" + }, + AlwaysDrawFov = true, + PotentialTargets = { "MERCURY", "EARTH", "VENUS" } + }, + GUI = { + Name = "MPO Star Tracker 2", + Path = "/Solar System/Missions/BepiColombo/Instruments", + } +} + +local StarTracker3 = { + Identifier = "BepiColomboMPO_StarTracker3", + Parent = transforms.BepiColombo.Identifier, + Renderable = { + Type = "RenderableFov", + Body = kernels.ID.MPO, + Frame = kernels.Frame.StarTracker3, + RGB = { 0.8, 0.7, 0.7 }, + Instrument = { + Name = "MPO_STR-3", + Method = "CIRCLE", + Aberration = "NONE" + }, + AlwaysDrawFov = true, + PotentialTargets = { "MERCURY", "EARTH", "VENUS" } + }, + GUI = { + Name = "MPO Star Tracker 3", + Path = "/Solar System/Missions/BepiColombo/Instruments", + } +} + + +asset.onInitialize(function() + -- Circle shapes are currently not supported + -- openspace.addSceneGraphNode(StarTracker1) + -- openspace.addSceneGraphNode(StarTracker2) + -- openspace.addSceneGraphNode(StarTracker3) +end) + +asset.onDeinitialize(function() + -- openspace.removeSceneGraphNode(StarTracker1) + -- openspace.removeSceneGraphNode(StarTracker2) + -- openspace.removeSceneGraphNode(StarTracker3) +end) + + + +asset.meta = { + Name = "Star Tracker", + Description = [[ + From a functional point of view, the Autonomous Star Trackers can be seen as a video + camera plus an image processing unit that, starting from an image of the sky, extracts + the attitude information for the AOCS, measured with respect to the J2000 inertial + reference system. + + The STR can track up to 15 stars simultaneously and consists of a Single box that + contains the optical head, the main electronics and a baffle which is thermally + decoupled from the box. + ]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/missions/bepicolombo/kernels.asset b/data/assets/scene/solarsystem/missions/bepicolombo/kernels.asset new file mode 100644 index 0000000000..7963c2df11 --- /dev/null +++ b/data/assets/scene/solarsystem/missions/bepicolombo/kernels.asset @@ -0,0 +1,221 @@ +local kernels = asset.resource({ + Name = "BepiColombo Kernels", + Type = "HttpSynchronization", + Identifier = "bepicolombo_kernels", + Version = 1 +}) + + +local BepiColomboKernels = { + -- Kernel list based on bc_ops_v413_20240112_001.tm + kernels .. "bc_mpo_magboom_default_s20191107_v01.bc", + kernels .. "bc_mpo_hga_scm_20181020_20190101_s20201020_v02.bc", + kernels .. "bc_mpo_hga_scm_20190101_20200101_s20230309_v01.bc", + kernels .. "bc_mpo_hga_scm_20200101_20210101_s20230309_v01.bc", + kernels .. "bc_mpo_hga_scm_20210101_20220101_s20230309_v01.bc", + kernels .. "bc_mpo_hga_scm_20220101_20230101_s20221229_v01.bc", + kernels .. "bc_mpo_hga_scm_20230101_20240101_s20240104_v01.bc", + kernels .. "bc_mpo_hga_scm_20240101_20240111_s20240110_v01.bc", + kernels .. "bc_mpo_mga_scm_20181020_20190101_s20200109_v02.bc", + kernels .. "bc_mpo_mga_scm_20190101_20200101_s20230309_v01.bc", + kernels .. "bc_mpo_mga_scm_20200101_20210101_s20230309_v01.bc", + kernels .. "bc_mpo_mga_scm_20210101_20220101_s20230309_v01.bc", + kernels .. "bc_mpo_mga_scm_20220101_20230101_s20221229_v01.bc", + kernels .. "bc_mpo_mga_scm_20230101_20240101_s20240104_v01.bc", + kernels .. "bc_mpo_mga_scm_20240101_20240111_s20240110_v01.bc", + kernels .. "bc_mpo_sa_scm_20181020_20190101_s20211202_v01.bc", + kernels .. "bc_mpo_sa_scm_20190101_20200101_s20230309_v01.bc", + kernels .. "bc_mpo_sa_scm_20200101_20210101_s20230309_v01.bc", + kernels .. "bc_mpo_sa_scm_20210101_20220101_s20230309_v01.bc", + kernels .. "bc_mpo_sa_scm_20220101_20230101_s20221229_v01.bc", + kernels .. "bc_mpo_sa_scm_20230101_20240101_s20240104_v01.bc", + kernels .. "bc_mpo_sa_scm_20240101_20240111_s20240110_v01.bc", + kernels .. "bc_mtm_sa_scm_20181020_20190101_s20200109_v02.bc", + kernels .. "bc_mtm_sa_scm_20190101_20200101_s20230309_v01.bc", + kernels .. "bc_mtm_sa_scm_20200101_20210101_s20230309_v01.bc", + kernels .. "bc_mtm_sa_scm_20210101_20220101_s20230309_v01.bc", + kernels .. "bc_mtm_sa_scm_20220101_20230101_s20221229_v01.bc", + kernels .. "bc_mtm_sa_scm_20230101_20240101_s20240104_v01.bc", + kernels .. "bc_mtm_sa_scm_20240101_20240111_s20240110_v01.bc", + kernels .. "bc_mmo_sc_scp_20180317_20251220_f20170228_v02.bc", + kernels .. "bc_mmo_sc_slt_50038_20251220_20280305_f20170228_v02.bc", + kernels .. "bc_mtm_sc_scp_20180317_20251219_f20181121_v02.bc", + kernels .. "bc_mtm_sep_scp_20181019_20251205_f20181127_v02.bc", + kernels .. "bc_mpo_sc_prelaunch_f20181121_v01.bc", + kernels .. "bc_mpo_sc_fcp_00160_20181020_20240216_f20181127_v01.bc", + kernels .. "bc_mpo_sc_scc_20181019_20190101_s20230309_v01.bc", + kernels .. "bc_mpo_sc_scc_20190101_20200101_s20230309_v01.bc", + kernels .. "bc_mpo_sc_scc_20200101_20210101_s20230309_v01.bc", + kernels .. "bc_mpo_sc_scc_20210101_20220101_s20230309_v01.bc", + kernels .. "bc_mpo_sc_scc_20220101_20230101_s20221229_v01.bc", + kernels .. "bc_mpo_sc_scc_20230101_20240101_s20240104_v01.bc", + kernels .. "bc_mpo_sc_scc_20240101_20240111_s20240110_v01.bc", + kernels .. "bc_mpo_sc_scm_20181020_20190101_s20230309_v01.bc", + kernels .. "bc_mpo_sc_scm_20190101_20200101_s20230309_v01.bc", + kernels .. "bc_mpo_sc_scm_20200101_20210101_s20210618_v01.bc", + kernels .. "bc_mpo_sc_scm_20210101_20220101_s20230309_v01.bc", + kernels .. "bc_mpo_sc_scm_20220101_20230101_s20230309_v01.bc", + kernels .. "bc_mpo_sc_scm_20230101_20240101_s20240104_v01.bc", + kernels .. "bc_mpo_sc_scm_20240101_20240111_s20240110_v01.bc", + kernels .. "bc_mpo_v34.tf", + kernels .. "bc_mtm_v12.tf", + kernels .. "bc_mmo_v13.tf", + kernels .. "bc_ops_v01.tf", + kernels .. "bc_sci_v12.tf", + kernels .. "bc_dsk_surfaces_v03.tf", + kernels .. "rssd0004.tf", + kernels .. "earth_topo_201023.tf", + kernels .. "earthstns_jaxa_20230905.tf", + kernels .. "earthfixeditrf93.tf", + kernels .. "estrack_v04.tf", + kernels .. "bc_mmo_sc_bus_v02.bds", + kernels .. "bc_mpo_sc_bus_v02.bds", + kernels .. "bc_mpo_sc_hga_v02.bds", + kernels .. "bc_mpo_sc_mga_v02.bds", + kernels .. "bc_mpo_sc_mosif_v02.bds", + kernels .. "bc_mpo_sc_sa_v02.bds", + kernels .. "bc_mtm_sc_bus_v02.bds", + kernels .. "bc_mtm_sc_samx_v02.bds", + kernels .. "bc_mtm_sc_sapx_v02.bds", + kernels .. "mercury_m002_mes_v02.bds", + + kernels .. "bc_mpo_bela_v09.ti", + kernels .. "bc_mpo_mertis_v08.ti", + kernels .. "bc_mpo_mgns_v02.ti", + kernels .. "bc_mpo_mixs_v06.ti", + kernels .. "bc_mpo_phebus_v06.ti", + kernels .. "bc_mpo_serena_v08.ti", + kernels .. "bc_mpo_simbio-sys_v10.ti", + kernels .. "bc_mpo_sixs_v08.ti", + kernels .. "bc_mpo_str_v02.ti", + kernels .. "bc_mpo_aux_v01.ti", + kernels .. "bc_mtm_mcam_v05.ti", + kernels .. "bc_mmo_mppe_v04.ti", + kernels .. "bc_mmo_msasi_v03.ti", + kernels .. "bc_mmo_ssas_v01.ti", + + kernels .. "de403_masses.tpc", + kernels .. "gm_de431.tpc", + kernels .. "pck00011_bc_v00.tpc", + + kernels .. "earth_070425_370426_predict.bpc", + kernels .. "earth_000101_240403_240109.bpc", + + kernels .. "bc_mpo_step_20240110.tsc", + kernels .. "bc_mpo_fict_20181127.tsc", + kernels .. "bc_mmo_fict_20170228.tsc", + + kernels .. "de432s.bsp", + kernels .. "earthstns_itrf93_201023.bsp", + kernels .. "earthstns_jaxa_20230905.bsp", + kernels .. "estrack_v04.bsp", + kernels .. "bc_sci_v02.bsp", + kernels .. "bc_mmo_struct_v01.bsp", + kernels .. "bc_mmo_scp_20181019_20251220_v02.bsp", + kernels .. "bc_mtm_struct_v06.bsp", + kernels .. "bc_mtm_scp_20181019_20251219_v03.bsp", + kernels .. "bc_mpo_cog_v03.bsp", + kernels .. "bc_mpo_cog_00160_20181118_20240201_v01.bsp", + kernels .. "bc_mpo_struct_v09.bsp", + kernels .. "bc_mpo_schulte_vector_v01.bsp", + kernels .. "bc_mpo_prelaunch_v01.bsp", + kernels .. "bc_mpo_fcp_00160_20181020_20260328_v01.bsp" +} + +local ID = { + MPO = "-121" +} + +local Frame = { + MPO = "MPO_SPACECRAFT", + + HGA = "MPO_HGA", + BelaReceiver = "MPO_BELA_RX", + BelaTransmitterMain = "MPO_BELA_TX_MAIN", + BelaTransmitterRed = "MPO_BELA_TX_RED", + MertisTis = "MPO_MERTIS_TIS", + MertisTisPlanet = "MPO_MERTIS_TIS_PLANET", + MertisTisSpace = "MPO_MERTIS_TIS_SPACE", + MGNS = "MPO_MGNS", + MIXS_C = "MPO_MIXS-C", + MIXS_T = "MPO_MIXS-T", + PhebusSlit75 = "MPO_PHEBUS_SLIT_75", + PhebusSlit100 = "MPO_PHEBUS_SLIT_100", + Phebus75 = "MPO_PHEBUS_75", + Phebus100 = "MPO_PHEBUS_100", + SerenaElena = "MPO_SERENA_ELENA", + SerenaElenaAN01 = "MPO_SERENA_ELENA_AN_01", + SerenaElenaAN02 = "MPO_SERENA_ELENA_AN_02", + SerenaElenaAN03 = "MPO_SERENA_ELENA_AN_03", + SerenaElenaAN04 = "MPO_SERENA_ELENA_AN_04", + SerenaElenaAN05 = "MPO_SERENA_ELENA_AN_05", + SerenaElenaAN06 = "MPO_SERENA_ELENA_AN_06", + SerenaElenaAN07 = "MPO_SERENA_ELENA_AN_07", + SerenaElenaAN08 = "MPO_SERENA_ELENA_AN_08", + SerenaElenaAN09 = "MPO_SERENA_ELENA_AN_09", + SerenaElenaAN10 = "MPO_SERENA_ELENA_AN_10", + SerenaElenaAN11 = "MPO_SERENA_ELENA_AN_11", + SerenaElenaAN12 = "MPO_SERENA_ELENA_AN_12", + SerenaElenaAN13 = "MPO_SERENA_ELENA_AN_13", + SerenaElenaAN14 = "MPO_SERENA_ELENA_AN_14", + SerenaElenaAN15 = "MPO_SERENA_ELENA_AN_15", + SerenaElenaAN16 = "MPO_SERENA_ELENA_AN_16", + SerenaElenaAN17 = "MPO_SERENA_ELENA_AN_17", + SerenaElenaAN18 = "MPO_SERENA_ELENA_AN_18", + SerenaElenaAN19 = "MPO_SERENA_ELENA_AN_19", + SerenaElenaAN20 = "MPO_SERENA_ELENA_AN_20", + SerenaElenaAN21 = "MPO_SERENA_ELENA_AN_21", + SerenaElenaAN22 = "MPO_SERENA_ELENA_AN_22", + SerenaElenaAN23 = "MPO_SERENA_ELENA_AN_23", + SerenaElenaAN24 = "MPO_SERENA_ELENA_AN_24", + SerenaElenaAN25 = "MPO_SERENA_ELENA_AN_25", + SerenaElenaAN26 = "MPO_SERENA_ELENA_AN_26", + SerenaElenaAN27 = "MPO_SERENA_ELENA_AN_27", + SerenaElenaAN28 = "MPO_SERENA_ELENA_AN_28", + SerenaElenaAN29 = "MPO_SERENA_ELENA_AN_29", + SerenaElenaAN30 = "MPO_SERENA_ELENA_AN_30", + SerenaElenaAN31 = "MPO_SERENA_ELENA_AN_31", + SerenaElenaAN32 = "MPO_SERENA_ELENA_AN_32", + SymbioSysHricFpa = "MPO_SIMBIO-SYS_HRIC_FPA", + SymbioSysHricF550 = "MPO_SIMBIO-SYS_HRIC_F550", + SymbioSysHricFpan = "MPO_SIMBIO-SYS_HRIC_FPAN", + SymbioSysHricF750 = "MPO_SIMBIO-SYS_HRIC_F750", + SymbioSysHricF880 = "MPO_SIMBIO-SYS_HRIC_F880", + SymbioSysSTCL = "MPO_SIMBIO-SYS_STC-L", + SymbioSysSTCH = "MPO_SIMBIO-SYS_STC-H", + SymbioSysSTCLF920 = "MPO_SIMBIO-SYS_STC-L_F920", + SymbioSysSTCLF550 = "MPO_SIMBIO-SYS_STC-L_F550", + SymbioSysSTCLP700 = "MPO_SIMBIO-SYS_STC-L_P700", + SymbioSysSTCHP700 = "MPO_SIMBIO-SYS_STC-H_P700", + SymbioSysSTCHF420 = "MPO_SIMBIO-SYS_STC-H_F420", + SymbioSysSTCHF750 = "MPO_SIMBIO-SYS_STC-H_F750", + SymbioSysVIHI = "MPO_SIMBIO-SYS_VIHI", + Sixs_X1 = "MPO_SIXS-X-1", + Sixs_X2 = "MPO_SIXS-X-2", + Sixs_X3 = "MPO_SIXS-X-3", + StarTracker1 = "MPO_STR-1", + StarTracker2 = "MPO_STR-2", + StarTracker3 = "MPO_STR-3" +} + + +asset.onInitialize(function() + openspace.spice.loadKernel(BepiColomboKernels) +end) + +asset.onDeinitialize(function() + openspace.spice.unloadKernel(BepiColomboKernels) +end) + +asset.export("ID", ID) +asset.export("Frame", Frame) + + + +asset.meta = { + Name = "BepiColombo Kernels", + Description = "This asset contains the SPICE kernels for the BepiColombo mission.", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/missions/bepicolombo/mission.asset b/data/assets/scene/solarsystem/missions/bepicolombo/mission.asset new file mode 100644 index 0000000000..c108ec8b8a --- /dev/null +++ b/data/assets/scene/solarsystem/missions/bepicolombo/mission.asset @@ -0,0 +1,88 @@ +local Mission = { + Identifier = "BepiColombo", + Name = "BepiColombo", + Image = "https://scifleet.esa.int/downloads/bepi_mcs/bepicolombo.png", + Description = [[BepiColombo is Europe's first mission to Mercury. It launched in October 2018 on a journey to the smallest and least explored terrestrial planet in our Solar System. Arriving at Mercury in December 2025, it will endure temperatures in excess of 350°C and gather data during a 1 year nominal mission. The mission comprises two spacecraft: 1. Mercury Planetary Orbiter (MPO), 2. Mercury Magnetospheric Orbiter (MMO). BepiColombo is a joint mission between ESA and the Japan Aerospace Exploration Agency (JAXA), executed under ESA leadership.]], + TimeRange = { + Start = "2018 OCT 20 01:45:00", + End = "2028 MAY 01 12:00:00" -- Preliminary time + }, + Milestones = { + { + Name = "Launch", + Date = "2018 OCT 20 01:45:00" + }, + { + Name = "Earth flyby", + Date = "2020 APR 10 04:25" + }, + { + Name = "First Venus flyby", + Date = "2020 OCT 15 03:58:00" + }, + { + Name = "Second Venus flyby", + Date = "2021 AUG 10 13:51:00" + }, + { + Name = "First Mercury flyby", + Date = "2021 OCT 01 23:34:41" + }, + { + Name = "Second Mercury flyby", + Date = "2022 JUN 23 09:44:00" + }, + { + Name = "Third Mercury flyby", + Date = "2023 JUN 19 19:34:00" + }, + { + Name = "Fourth Mercury flyby", + Date = "2024 SEP 05 12:00:00" -- Preliminary time + }, + { + Name = "Fifth Mercury flyby", + Date = "2024 DEC 02 12:00:00" -- Preliminary time + }, + { + Name = "Sixth Mercury flyby", + Date = "2025 JAN 09 12:00:00" -- Preliminary time + }, + { + Name = "Mercury orbit insertion", + Date = "2025 DEC 05 12:00:00" -- Preliminary time + }, + { + Name = "MPO in final science orbit", + Date = "2026 MAR 14 12:00:00" -- Preliminary time + }, + { + Name = "End of nominal mission", + Date = "2027 MAY 01 12:00:00" -- Preliminary time + }, + { + Name = "End of extended mission", + Date = "2028 MAY 01 12:00:00" -- Preliminary time + } + }, + Phases = {} +} + + +asset.onInitialize(function() + openspace.loadMission(Mission) +end) + +asset.onDeinitialize(function() + openspace.unloadMission(Mission) +end) + + + +asset.meta = { + Name = "BepiColombo Mission", + Description = "This asset contains the mission profile information for the BepiColombo mission. The data in this file has been taken from https://www.esa.int/Science_Exploration/Space_Science/BepiColombo/BepiColombo_factsheet", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/missions/bepicolombo/model.asset b/data/assets/scene/solarsystem/missions/bepicolombo/model.asset new file mode 100644 index 0000000000..b8bad5c43a --- /dev/null +++ b/data/assets/scene/solarsystem/missions/bepicolombo/model.asset @@ -0,0 +1,83 @@ +local transform = asset.require("scene/solarsystem/sun/transforms") +local sun = asset.require("scene/solarsystem/sun/transforms") +local kernels = asset.require("./kernels") +local coreKernels = asset.require("spice/core") + + + +local modelFolder = asset.resource({ + Name = "BepiColombo Model", + Type = "HttpSynchronization", + Identifier = "bepicolombo_models", + Version = 1 +}) + + +local BepiColombo = { + Identifier = "BepiColombo", + Parent = transform.SolarSystemBarycenter.Identifier, + Transform = { + Translation = { + Type = "SpiceTranslation", + Target = kernels.ID.MPO, + Observer = coreKernels.ID.SolarSystemBarycenter + }, + Rotation = { + Type = "SpiceRotation", + SourceFrame = kernels.Frame.MPO, + DestinationFrame = coreKernels.Frame.Galactic + } + }, + GUI = { + Name = "BepiColombo", + Path = "/Solar System/Missions/BepiColombo" + } +} + +local Model = { + Identifier = "BepiColomboModel", + Parent = BepiColombo.Identifier, + Transform = { + Translation = { + Type = "StaticTranslation", + Position = { 0.0, -0.275, 0.0 } + } + }, + Renderable = { + Type = "RenderableModel", + GeometryFile = modelFolder .. "bepi_mcs.fbx", + ModelScale = 0.00075, -- The number has been determined by eyeballing it + LightSources = { + sun.LightSource + }, + PerformShading = true, + AmbientIntensity = 0.075 + }, + GUI = { + Name = "BepiColombo Model", + Path = "/Solar System/Missions/BepiColombo" + } +} + + +asset.onInitialize(function() + openspace.addSceneGraphNode(BepiColombo) + openspace.addSceneGraphNode(Model) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Model) + openspace.removeSceneGraphNode(BepiColombo) +end) + +asset.export(BepiColombo) + + + +asset.meta = { + Name = "BepiColombo Model", + Description = "This asset contains the model of the BepiColombo spacecraft. The model is retrieved from https://s2e2.cosmos.esa.int/bitbucket/projects/SPICE_KERNELS/repos/bepicolombo", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/missions/bepicolombo/trails.asset b/data/assets/scene/solarsystem/missions/bepicolombo/trails.asset new file mode 100644 index 0000000000..5dff82569c --- /dev/null +++ b/data/assets/scene/solarsystem/missions/bepicolombo/trails.asset @@ -0,0 +1,72 @@ +local kernels = asset.require("./kernels") +local mercury = asset.require("scene/solarsystem/planets/mercury/transforms") +local solarsystem = asset.require("scene/solarsystem/sun/transforms") +local coreKernels = asset.require("spice/core") + + + +local BepiColomboTrailSun = { + Identifier = "BepiColomboTrailSun", + Parent = solarsystem.SolarSystemBarycenter.Identifier, + Renderable = { + Type = "RenderableTrailTrajectory", + Translation = { + Type = "SpiceTranslation", + Target = kernels.ID.MPO, + Observer = coreKernels.ID.SolarSystemBarycenter + }, + Color = { 0.70, 0.50, 0.20 }, + StartTime = "2018 OCT 20 01:45:00", + EndTime = "2028 MAY 01 12:00:00", + SampleInterval = 60000 + }, + GUI = { + Name = "BepiColombo Trail (Sun)", + Path = "/Solar System/Missions/BepiColombo" + } +} + +local BepiColomboTrailMercury = { + Identifier = "BepiColomboTrailMercury", + Parent = mercury.MercuryBarycenter.Identifier, + Renderable = { + Type = "RenderableTrailTrajectory", + Translation = { + Type = "SpiceTranslation", + Target = kernels.ID.MPO, + Observer = coreKernels.ID.Mercury + }, + Color = { 0.625, 0.255, 0.45 }, + StartTime = "2025 DEC 05 12:00:00", + EndTime = "2028 MAY 01 12:00:00", + SampleInterval = 600 + }, + GUI = { + Name = "BepiColombo Trail (Mercury)", + Path = "/Solar System/Missions/BepiColombo" + } +} + + +asset.onInitialize(function() + openspace.addSceneGraphNode(BepiColomboTrailSun) + openspace.addSceneGraphNode(BepiColomboTrailMercury) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(BepiColomboTrailMercury) + openspace.removeSceneGraphNode(BepiColomboTrailSun) +end) + +asset.export(BepiColomboTrailSun) +asset.export(BepiColomboTrailMercury) + + + +asset.meta = { + Name = "BepiColombo Trails", + Description = "This asset contains the trails for the BepiColombo spacecraft relative to the Sun and Mercury.", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/missions/dawn/dawn.asset b/data/assets/scene/solarsystem/missions/dawn/dawn.asset index 535150e8df..d2096a1ac5 100644 --- a/data/assets/scene/solarsystem/missions/dawn/dawn.asset +++ b/data/assets/scene/solarsystem/missions/dawn/dawn.asset @@ -1,24 +1,19 @@ asset.require("scene/solarsystem/missions/dawn/mission") local transforms = asset.require("scene/solarsystem/sun/transforms") -local sun = asset.require("scene/solarsystem/sun/sun") +local sun = asset.require("scene/solarsystem/sun/transforms") +local kernels = asset.require("./kernels") +local coreKernels = asset.require("spice/core") -local kernels = asset.syncedResource({ - Name = "Dawn Kernels", - Type = "HttpSynchronization", - Identifier = "dawn_kernels", - Version = 3 -}) - -local textures = asset.syncedResource({ +local textures = asset.resource({ Name = "Dawn Textures", Type = "HttpSynchronization", Identifier = "dawn_textures", Version = 1 }) -local models = asset.syncedResource({ +local models = asset.resource({ Name = "Dawn Models", Type = "HttpSynchronization", Identifier = "dawn_model", @@ -26,49 +21,6 @@ local models = asset.syncedResource({ }) -local KernelFiles = { - kernels .. "dawn_ref_070926-150201_070829.bsp", - - --ik - kernels .. "dawn_fc_v10.ti", - - -- SPK - kernels .. "dawn_rec_070927_070930_081218_v1.bsp", - -- kernels .. "dawn_rec_110201_110328_110328_v1.bsp", - -- kernels .. "dawn_rec_110328_110419_110420_v1.bsp", - kernels .. "dawn_rec_110416_110802_110913_v1.bsp", - kernels .. "dawn_rec_110802_110831_110922_v1.bsp", - -- kernels .. "spk/dawn_rec_110831_110928_111221_v1.bsp", - -- kernels .. "dawn_rec_110928_111102_120615_v1.bsp", - -- kernels .. "dawn_rec_111102_111210_120618_v1.bsp", - -- kernels .. "dawn_rec_111211_120501_120620_v1.bsp", - kernels .. "dawn_rec_120724_120913_121213_v1.bsp", - - -- FK - kernels .. "dawn_v12.tf", - - --SCLK - kernels .. "dawn_203_sclkscet_00039.tsc", - - -- CK - kernels .. "dawn_sc_070927_070930.bc", - kernels .. "dawn_sc_110801_110807.bc", - kernels .. "dawn_sc_110808_110814.bc", - kernels .. "dawn_sc_120910_120916.bc", - - -- space craft CK files - -- kernels .. "dawn_sc_070927_070930.bc", - -- kernels .. "dawn_sc_110801_110807.bc", - -- kernels .. "dawn_sc_110808_110814.bc", - -- kernels .. "dawn_sc_120910_120916.bc", - - -- Solar array rotation kernels - kernels .. "dawn_sa_070927_070930.bc", - -- kernels .. "dawn_sa_110801_110807.bc", - -- kernels .. "dawn_sa_110808_110814.bc", - -- kernels .. "dawn_sa_120910_120916.bc" -} - local LightSources = { sun.LightSource, { @@ -84,10 +36,9 @@ local DawnPosition = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "DAWN", - Observer = "SSB" + Target = kernels.ID.Dawn, + Observer = coreKernels.ID.SolarSystemBarycenter }, - -- Rotation for model version 2 Rotation = { Type = "StaticRotation", Rotation = { math.pi / 2.0, 0.0, math.pi / 2.0 } @@ -106,8 +57,8 @@ local Dawn = { Transform = { Rotation = { Type = "SpiceRotation", - SourceFrame = "DAWN_SPACECRAFT", - DestinationFrame = "GALACTIC" + SourceFrame = kernels.Frame.Dawn, + DestinationFrame = coreKernels.Frame.Galactic } }, Renderable = { @@ -128,8 +79,8 @@ local DawnTrail = { Type = "RenderableTrailTrajectory", Translation = { Type = "SpiceTranslation", - Target = "DAWN", - Observer = "SSB" + Target = kernels.ID.Dawn, + Observer = coreKernels.ID.SolarSystemBarycenter }, Color = { 1.0, 0.8, 0.4 }, ShowFullTrail = false, @@ -153,8 +104,8 @@ local DawnFramingCamera1 = { Parent = Dawn.Identifier, Renderable = { Type = "RenderableFov", - Body = "DAWN", - Frame = "DAWN_SPACECRAFT", + Body = kernels.ID.Dawn, + Frame = kernels.Frame.Dawn, Color = { 0.8, 0.7, 0.7 }, Instrument = { Name = "DAWN_FC1", @@ -174,8 +125,8 @@ local DawnFramingCamera2 = { Parent = Dawn.Identifier, Renderable = { Type = "RenderableFov", - Body = "DAWN", - Frame = "DAWN_SPACECRAFT", + Body = kernels.ID.Dawn, + Frame = kernels.Frame.Dawn, Color = { 0.8, 0.7, 0.7 }, Instrument = { Name = "DAWN_FC2", @@ -192,8 +143,6 @@ local DawnFramingCamera2 = { asset.onInitialize(function() - openspace.spice.loadKernel(KernelFiles) - openspace.addSceneGraphNode(DawnPosition) openspace.addSceneGraphNode(Dawn) openspace.addSceneGraphNode(DawnTrail) @@ -207,8 +156,6 @@ asset.onDeinitialize(function() openspace.removeSceneGraphNode(DawnTrail) openspace.removeSceneGraphNode(Dawn) openspace.removeSceneGraphNode(DawnPosition) - - openspace.spice.unloadKernel(KernelFiles) end) asset.export(DawnPosition) @@ -221,7 +168,6 @@ asset.export(DawnFramingCamera2) asset.meta = { Name = "Dawn", - Version = "2.0", Description = "Dawn spacecraft and trail", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/missions/dawn/kernels.asset b/data/assets/scene/solarsystem/missions/dawn/kernels.asset new file mode 100644 index 0000000000..e01bcf7b53 --- /dev/null +++ b/data/assets/scene/solarsystem/missions/dawn/kernels.asset @@ -0,0 +1,89 @@ +local coreKernels = asset.require("spice/core") + + + +local dawn = asset.resource({ + Name = "Dawn Kernels", + Type = "HttpSynchronization", + Identifier = "dawn_kernels", + Version = 3 +}) + +local vesta = asset.resource({ + Name = "Vesta Kernels", + Type = "HttpSynchronization", + Identifier = "vesta_kernels", + Version = 1 +}) + + +local DawnKernels = { + dawn .. "dawn_ref_070926-150201_070829.bsp", + + -- IK + dawn .. "dawn_fc_v10.ti", + + -- SPK + dawn .. "dawn_rec_070927_070930_081218_v1.bsp", + -- dawn .. "dawn_rec_110201_110328_110328_v1.bsp", + -- dawn .. "dawn_rec_110328_110419_110420_v1.bsp", + dawn .. "dawn_rec_110416_110802_110913_v1.bsp", + dawn .. "dawn_rec_110802_110831_110922_v1.bsp", + -- dawn .. "spk/dawn_rec_110831_110928_111221_v1.bsp", + -- dawn .. "dawn_rec_110928_111102_120615_v1.bsp", + -- dawn .. "dawn_rec_111102_111210_120618_v1.bsp", + -- dawn .. "dawn_rec_111211_120501_120620_v1.bsp", + dawn .. "dawn_rec_120724_120913_121213_v1.bsp", + + -- FK + dawn .. "dawn_v12.tf", + + dawn .. "dawn_203_sclkscet_00039.tsc", + + dawn .. "dawn_sc_070927_070930.bc", + dawn .. "dawn_sc_110801_110807.bc", + dawn .. "dawn_sc_110808_110814.bc", + dawn .. "dawn_sc_120910_120916.bc", + + -- dawn .. "dawn_sc_070927_070930.bc", + -- dawn .. "dawn_sc_110801_110807.bc", + -- dawn .. "dawn_sc_110808_110814.bc", + -- dawn .. "dawn_sc_120910_120916.bc", + + + -- Solar array rotation kernels + dawn .. "dawn_sa_070927_070930.bc", + -- dawn .. "dawn_sa_110801_110807.bc", + -- dawn .. "dawn_sa_110808_110814.bc", + -- dawn .. "dawn_sa_120910_120916.bc" +} + +local VestaKernels = { + vesta .. "sb_vesta_071107.bsp" +} + +local ID = { + Dawn = "DAWN", + Vesta = "VESTA" +} + +local Frame = { + Dawn = "DAWN_SPACECRAFT", + DawnSolarArray1 = -203010, + DawnSolarArray2 = -203020, + Vesta = coreKernels.Frame.Vesta +} + + +asset.onInitialize(function() + openspace.spice.loadKernel(DawnKernels) + openspace.spice.loadKernel(VestaKernels) +end) + +asset.onDeinitialize(function() + openspace.spice.unloadKernel(VestaKernels) + openspace.spice.unloadKernel(DawnKernels) +end) + +asset.export("ID", ID) +asset.export("Frame", Frame) diff --git a/data/assets/scene/solarsystem/missions/dawn/mission.asset b/data/assets/scene/solarsystem/missions/dawn/mission.asset index 9ce396a251..5843ccea24 100644 --- a/data/assets/scene/solarsystem/missions/dawn/mission.asset +++ b/data/assets/scene/solarsystem/missions/dawn/mission.asset @@ -1,4 +1,5 @@ local Mission = { + Identifier = "Dawn", Name = "Dawn", Image = "https://photojournal.jpl.nasa.gov/jpegMod/PIA19375_modest.jpg", TimeRange = { Start = "2007 SEP 07 11:34:00", End = "2018 OCT 30 00:00:00" }, @@ -13,7 +14,7 @@ local Mission = { Name = "Flyby of Mars", Date = "2009 FEB 18 00:27:58", Image = "https://www.nasa.gov/sites/default/files/styles/full_width_feature/public/thumbnails/image/pj41_full.gif" , - Description = "On Dec. 24, 1968, Apollo 8 astronauts Frank Borman, Jim Lovell, and Bill Anders became the first humans to orbit the Moon, and the first to witness the magnificent sight called 'Earthrise'. As the spacecraft was in the process of rotating, Anders took this iconic picture showing Earth rising over the Moon's horizon.", + Description = "On Dec. 24, 1968, Apollo 8 astronauts Frank Borman, Jim Lovell, and Bill Anders became the first humans to orbit the Moon, and the first to witness the magnificent sight called 'Earthrise'. As the spacecraft was in the process of rotating, Anders took this iconic picture showing Earth rising over the Moon's horizon." } }, Phases = { @@ -38,5 +39,5 @@ asset.onInitialize(function() end) asset.onDeinitialize(function() - openspace.unloadMission(Mission.Name) + openspace.unloadMission(Mission) end) diff --git a/data/assets/scene/solarsystem/missions/dawn/vesta.asset b/data/assets/scene/solarsystem/missions/dawn/vesta.asset index 9c0caeb690..c8c28c8257 100644 --- a/data/assets/scene/solarsystem/missions/dawn/vesta.asset +++ b/data/assets/scene/solarsystem/missions/dawn/vesta.asset @@ -1,29 +1,24 @@ local transforms = asset.require("scene/solarsystem/sun/transforms") +local kernels = asset.require("./kernels") +local coreKernels = asset.require("spice/core") -local kernels = asset.syncedResource({ - Name = "Vesta Kernels", - Type = "HttpSynchronization", - Identifier = "vesta_kernels", - Version = 1 -}) - -local textures = asset.syncedResource({ +local textures = asset.resource({ Name = "Vesta Textures", Type = "HttpSynchronization", Identifier = "vesta_textures", Version = 1 }) -local images = asset.syncedResource({ +local images = asset.resource({ Name = "Vesta Images", Type = "HttpSynchronization", Identifier = "vesta_images", Version = 1 }) -local models = asset.syncedResource({ +local models = asset.resource({ Name = "Vesta Models", Type = "HttpSynchronization", Identifier = "vesta_model", @@ -37,13 +32,13 @@ local Vesta = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "VESTA", - Observer = "SSB" + Target = kernels.ID.Vesta, + Observer = coreKernels.ID.SolarSystemBarycenter }, Rotation = { Type = "SpiceRotation", - SourceFrame = "IAU_VESTA", - DestinationFrame = "GALACTIC" + SourceFrame = kernels.Frame.Vesta, + DestinationFrame = coreKernels.Frame.Galactic } }, BoundingSphere = 262000, @@ -54,8 +49,8 @@ local Vesta = { Projection = { Sequence = images, SequenceType = "image-sequence", - Observer = "DAWN", - Target = "VESTA", + Observer = kernels.ID.Dawn, + Target = kernels.ID.Vesta, Aberration = "NONE", DataInputTranslation = { @@ -121,8 +116,8 @@ local VestaTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "VESTA", - Observer = "SSB" + Target = kernels.ID.Vesta, + Observer = coreKernels.ID.SolarSystemBarycenter }, Color = { 0.7, 0.8, 0.7 }, StartTime = "2007 JUL 20 12:00:00", @@ -138,8 +133,6 @@ local VestaTrail = { asset.onInitialize(function() - openspace.spice.loadKernel(kernels .. "sb_vesta_071107.bsp") - openspace.addSceneGraphNode(Vesta) openspace.addSceneGraphNode(VestaTrail) end) @@ -147,8 +140,6 @@ end) asset.onDeinitialize(function() openspace.removeSceneGraphNode(VestaTrail) openspace.removeSceneGraphNode(Vesta) - - openspace.spice.unloadKernel(kernels .. "sb_vesta_071107.bsp") end) asset.export(Vesta) @@ -158,7 +149,6 @@ asset.export(VestaTrail) asset.meta = { Name = "Vesta", - Version = "1.1", Description = "Vesta model projection and trail", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/missions/insight/actions.asset b/data/assets/scene/solarsystem/missions/insight/actions.asset index a863a3c8ef..beac8a68eb 100644 --- a/data/assets/scene/solarsystem/missions/insight/actions.asset +++ b/data/assets/scene/solarsystem/missions/insight/actions.asset @@ -20,7 +20,7 @@ local Setup = { ]], Documentation = "Set and goto Insight Landing", GuiPath = "/Missions/Insight", - isLocal = false + IsLocal = false } local DisableLayers = { @@ -34,7 +34,7 @@ local DisableLayers = { ]], Documentation = "Disable Mars layer settings used for insight EDL", GuiPath = "/Missions/Insight", - isLocal = false + IsLocal = false } @@ -52,7 +52,6 @@ end) asset.meta = { Name = "Insight Actions", - Version = "1.0", Description = "Actions related to the Insight mission", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/missions/insight/edl.asset b/data/assets/scene/solarsystem/missions/insight/edl.asset index 8f9154cfb1..e37316b37f 100644 --- a/data/assets/scene/solarsystem/missions/insight/edl.asset +++ b/data/assets/scene/solarsystem/missions/insight/edl.asset @@ -1,33 +1,19 @@ -asset.require("spice/base") asset.require("./actions") asset.require("scene/solarsystem/planets/mars/default_layers") -local sun = asset.require("scene/solarsystem/sun/sun") +local sun = asset.require("scene/solarsystem/sun/transforms") local mars = asset.require("scene/solarsystem/planets/mars/mars") +local kernels = asset.require("./kernels") +local coreKernels = asset.require("spice/core") -local models = asset.syncedResource({ +local models = asset.resource({ Name = "Insight Models Chutes", Type = "HttpSynchronization", Identifier = "insight_models", Version = 2 }) -local ikernels = asset.syncedResource({ - Name = "Insight Kernels", - Type = "HttpSynchronization", - Identifier = "insight_kernels", - Version = 1 -}) - - -local iKernels = { - ikernels .. "nsyt_spk_cruise_od063_v1_approach2surface_SC_Lander.tsc", - ikernels .. "insight_v02.tfr", - ikernels .. "mar085s.bsp", - ikernels .. "nsyt_spk_cruise_POST_approach2surface_SC_Lander.bsp", - ikernels .. "nsyt_spk_cruise_POST_approach2surface_SC_Lander.bck" -} local RotationMatrix = { -1, 0, 0, 0, @@ -68,41 +54,41 @@ local SpiceRotationEndTime = "2018 NOV 26 19:51:39" local TranslationKeyframes = { ["1850 JAN 01 00:00:00"] = { Type = "SpiceTranslation", - Target = "INSIGHT", - Observer = "MARS", - Frame = "IAU_MARS", + Target = kernels.ID.Insight, + Observer = coreKernels.ID.Mars, + Frame = coreKernels.Frame.Mars, FixedDate = "2018 NOV 26 19:39:03" }, ["2018 NOV 26 19:39:02"] = { Type = "SpiceTranslation", - Target = "INSIGHT", - Observer = "MARS", - Frame = "IAU_MARS", + Target = kernels.ID.Insight, + Observer = coreKernels.ID.Mars, + Frame = coreKernels.Frame.Mars, FixedDate = "2018 NOV 26 19:39:03" }, ["2018 NOV 26 19:39:03"] = { Type = "SpiceTranslation", - Target = "INSIGHT", - Observer = "MARS", - Frame = "IAU_MARS" + Target = kernels.ID.Insight, + Observer = coreKernels.ID.Mars, + Frame = coreKernels.Frame.Mars }, ["2018 NOV 26 19:39:04"] = { Type = "SpiceTranslation", - Target = "INSIGHT", - Observer = "MARS", - Frame = "IAU_MARS" + Target = kernels.ID.Insight, + Observer = coreKernels.ID.Mars, + Frame = coreKernels.Frame.Mars }, ["2018 NOV 26 19:45:34"] = { Type = "SpiceTranslation", - Target = "INSIGHT", - Observer = "MARS", - Frame = "IAU_MARS" + Target = kernels.ID.Insight, + Observer = coreKernels.ID.Mars, + Frame = coreKernels.Frame.Mars }, ["2018 NOV 26 19:45:35"] = { Type = "SpiceTranslation", - Target = "INSIGHT", - Observer = "MARS", - Frame = "IAU_MARS", + Target = kernels.ID.Insight, + Observer = coreKernels.ID.Mars, + Frame = coreKernels.Frame.Mars, FixedDate = "2018 NOV 26 19:45:34" } } @@ -110,35 +96,35 @@ local TranslationKeyframes = { local RotationKeyframes = { ["1850 JAN 01 00:00:00"] = { Type = "SpiceRotation", - SourceFrame = "INSIGHT_LANDER_CRUISE", - DestinationFrame = "IAU_MARS", + SourceFrame = kernels.Frame.InsightCruise, + DestinationFrame = coreKernels.Frame.Mars, FixedDate = "2018 NOV 26 19:39:02" }, ["2018 NOV 26 19:39:02"] = { Type = "SpiceRotation", - SourceFrame = "INSIGHT_LANDER_CRUISE", - DestinationFrame = "IAU_MARS", + SourceFrame = kernels.Frame.InsightCruise, + DestinationFrame = coreKernels.Frame.Mars, FixedDate = "2018 NOV 26 19:39:02" }, ["2018 NOV 26 19:39:03"] = { Type = "SpiceRotation", - SourceFrame = "INSIGHT_LANDER_CRUISE", - DestinationFrame = "IAU_MARS" + SourceFrame = kernels.Frame.InsightCruise, + DestinationFrame = coreKernels.Frame.Mars }, ["2018 NOV 26 19:39:04"] = { Type = "SpiceRotation", - SourceFrame = "INSIGHT_LANDER_CRUISE", - DestinationFrame = "IAU_MARS" + SourceFrame = kernels.Frame.InsightCruise, + DestinationFrame = coreKernels.Frame.Mars }, ["2018 NOV 26 19:45:34"] = { Type = "SpiceRotation", - SourceFrame = "INSIGHT_LANDER_CRUISE", - DestinationFrame = "IAU_MARS" + SourceFrame = kernels.Frame.InsightCruise, + DestinationFrame = coreKernels.Frame.Mars }, ["2018 NOV 26 19:45:35"] = { Type = "SpiceRotation", - SourceFrame = "INSIGHT_LANDER_CRUISE", - DestinationFrame = "IAU_MARS", + SourceFrame = kernels.Frame.InsightCruise, + DestinationFrame = coreKernels.Frame.Mars, FixedDate = "2018 NOV 26 19:45:34" } } @@ -147,25 +133,25 @@ local RotationKeyframes = { local InsightParent = { Identifier = "InsightParent", Parent = mars.Mars.Identifier, - Transform = { - Translation ={ - Type = "TimelineTranslation", - Keyframes = TranslationKeyframes, - }, - Rotation = { - Type = "TimelineRotation", - Keyframes = RotationKeyframes, - } - }, -- TimeFrame = { -- Type = "TimeFrameInterval", -- Start = EntryTimeStart, -- End = SpiceRotationEndTime -- }, + Transform = { + Translation = { + Type = "TimelineTranslation", + Keyframes = TranslationKeyframes + }, + Rotation = { + Type = "TimelineRotation", + Keyframes = RotationKeyframes + } + }, GUI = { - Hidden = true, Name = "InsightParent", - Path = "/Solar System/Missions/Insight" + Path = "/Solar System/Missions/Insight", + Hidden = true } } @@ -188,206 +174,206 @@ local Insight = { local Insight_Entry_CapsuleA = { Identifier = "Insight_Entry_CapsuleA", Parent = Insight.Identifier, + TimeFrame = { + Type = "TimeFrameInterval", + End = LanderSeparationTime + }, Renderable = { Type = "RenderableModel", GeometryFile = models .. "cruise_insight_doubleside2_newcapsule_diffuse.obj", ModelTransform = RotationMatrix, LightSources = LightSources }, - TimeFrame = { - Type = "TimeFrameInterval", - End = LanderSeparationTime - }, GUI = { - Hidden = true, Name = "Insight Entry CapsuleA", - Path = "/Solar System/Missions/Insight" + Path = "/Solar System/Missions/Insight", + Hidden = true } } local Insight_Entry_Capsule_Ring = { Identifier = "Insight_Entry_Capsule_Ring", Parent = Insight.Identifier, + TimeFrame = { + Type = "TimeFrameInterval", + End = LanderSeparationTime + }, Renderable = { Type = "RenderableModel", GeometryFile = models .. "insight_cruise_cone_ring_foil_gold.obj", ModelTransform = RotationMatrix, LightSources = LightSources }, - TimeFrame = { - Type = "TimeFrameInterval", - End = LanderSeparationTime - }, GUI = { - Hidden = true, Name = "Insight Entry Capsule Ring", - Path = "/Solar System/Missions/Insight" + Path = "/Solar System/Missions/Insight", + Hidden = true } } local Insight_Entry_Capsule_Plugs = { Identifier = "Insight_Entry_Capsule_Plugs", Parent = Insight.Identifier, + TimeFrame = { + Type = "TimeFrameInterval", + End = LanderSeparationTime + }, Renderable = { Type = "RenderableModel", GeometryFile = models .. "insight_cruise_cone_capsule_diffuse.obj", ModelTransform = RotationMatrix, LightSources = LightSources }, - TimeFrame = { - Type = "TimeFrameInterval", - End = LanderSeparationTime - }, GUI = { - Hidden = true, Name = "Insight Entry Capsule Plugs", - Path = "/Solar System/Missions/Insight" + Path = "/Solar System/Missions/Insight", + Hidden = true } } local Insight_Entry_Heatshield = { Identifier = "Insight_Entry_Heatshield", Parent = Insight.Identifier, + TimeFrame = { + Type = "TimeFrameInterval", + End = HeatShieldSeparationTime + }, Renderable = { Type = "RenderableModel", GeometryFile = models .. "insight_cruise_heatshield_foil_gold.obj", ModelTransform = RotationMatrix, LightSources = LightSources }, - TimeFrame = { - Type = "TimeFrameInterval", - End = HeatShieldSeparationTime - }, GUI = { - Hidden = true, Name = "Insight Entry Heatshield", - Path = "/Solar System/Missions/Insight" + Path = "/Solar System/Missions/Insight", + Hidden = true } } local Insight_Parachute_0 = { Identifier = "Insight_Parachute_0", Parent = Insight.Identifier, + TimeFrame = { + Type = "TimeFrameInterval", + Start = ParachuteDeployTime1, + End = ParachuteDeployTime20 + }, Renderable = { Type = "RenderableModel", GeometryFile = models .. "insight_chute_frame01_diff1.obj", ModelTransform = RotationMatrix, LightSources = LightSources }, - TimeFrame = { - Type = "TimeFrameInterval", - Start = ParachuteDeployTime1, - End = ParachuteDeployTime20 - }, GUI = { - Hidden = true, Name = "Insight Parachute0", - Path = "/Solar System/Missions/Insight" + Path = "/Solar System/Missions/Insight", + Hidden = true } } local Insight_Parachute_Cords_0 = { Identifier = "Insight_Parachute_Cords_0", Parent = Insight.Identifier, + TimeFrame = { + Type = "TimeFrameInterval", + Start = ParachuteDeployTime1, + End = ParachuteDeployTime20 + }, Renderable = { Type = "RenderableModel", GeometryFile = models .. "insight_chute_frame01_cords1.obj", ModelTransform = RotationMatrix, LightSources = LightSources }, - TimeFrame = { - Type = "TimeFrameInterval", - Start = ParachuteDeployTime1, - End = ParachuteDeployTime20 - }, GUI = { - Hidden = true, Name = "Insight ParachuteC0", - Path = "/Solar System/Missions/Insight" + Path = "/Solar System/Missions/Insight", + Hidden = true } } local Insight_Parachute_20 = { Identifier = "Insight_Parachute_20", Parent = Insight.Identifier, + TimeFrame = { + Type = "TimeFrameInterval", + Start = ParachuteDeployTime20, + End = ParachuteDeployTime40 + }, Renderable = { Type = "RenderableModel", GeometryFile = models .. "insight_chute_frame20_diff1.obj", ModelTransform = RotationMatrix, LightSources = LightSources }, - TimeFrame = { - Type = "TimeFrameInterval", - Start = ParachuteDeployTime20, - End = ParachuteDeployTime40 - }, GUI = { - Hidden = true, Name = "Insight Parachute20", - Path = "/Solar System/Missions/Insight" + Path = "/Solar System/Missions/Insight", + Hidden = true } } local Insight_Parachute_Cords_20 = { Identifier = "Insight_Parachute_Cords_20", Parent = Insight.Identifier, + TimeFrame = { + Type = "TimeFrameInterval", + Start = ParachuteDeployTime20, + End = ParachuteDeployTime40 + }, Renderable = { Type = "RenderableModel", GeometryFile = models .. "insight_chute_frame20_cords1.obj", ModelTransform = RotationMatrix, LightSources = LightSources }, - TimeFrame = { - Type = "TimeFrameInterval", - Start = ParachuteDeployTime20, - End = ParachuteDeployTime40 - }, GUI = { - Hidden = true, Name = "Insight ParachuteC20", - Path = "/Solar System/Missions/Insight" + Path = "/Solar System/Missions/Insight", + Hidden = true } } local Insight_Parachute_40 = { Identifier = "Insight_Parachute_40", Parent = Insight.Identifier, + TimeFrame = { + Type = "TimeFrameInterval", + Start = ParachuteDeployTime40, + End = LanderSeparationTime + }, Renderable = { Type = "RenderableModel", GeometryFile = models .. "chute_doubleside_frame40_diff.obj", ModelTransform = RotationMatrix, LightSources = LightSources }, - TimeFrame = { - Type = "TimeFrameInterval", - Start = ParachuteDeployTime40, - End = LanderSeparationTime - }, GUI = { - Hidden = true, Name = "Insight Parachute40", - Path = "/Solar System/Missions/Insight" + Path = "/Solar System/Missions/Insight", + Hidden = true } } local Insight_Parachute_Cords_40 = { Identifier = "Insight_Parachute_Cords_40", Parent = Insight.Identifier, + TimeFrame = { + Type = "TimeFrameInterval", + Start = ParachuteDeployTime40, + End = LanderSeparationTime + }, Renderable = { Type = "RenderableModel", GeometryFile = models .. "insight_chute_frame40_cords1.obj", ModelTransform = RotationMatrix, LightSources = LightSources }, - TimeFrame = { - Type = "TimeFrameInterval", - Start = ParachuteDeployTime40, - End = LanderSeparationTime - }, GUI = { - Hidden = true, Name = "Insight ParachuteC40", - Path = "/Solar System/Missions/Insight" + Path = "/Solar System/Missions/Insight", + Hidden = true } } @@ -401,9 +387,9 @@ local Insight_Lander_A001 = { LightSources = LightSources }, GUI = { - Hidden = true, Name = "Insight Lander A001", - Path = "/Solar System/Missions/Insight" + Path = "/Solar System/Missions/Insight", + Hidden = true } } @@ -417,9 +403,9 @@ local Insight_Lander_A002 = { LightSources = LightSources }, GUI = { - Hidden = true, Name = "Insight Lander A002", - Path = "/Solar System/Missions/Insight" + Path = "/Solar System/Missions/Insight", + Hidden = true } } @@ -433,9 +419,9 @@ local Insight_Lander_A003 = { LightSources = LightSources }, GUI = { - Hidden = true, Name = "Insight Lander A003", - Path = "/Solar System/Missions/Insight" + Path = "/Solar System/Missions/Insight", + Hidden = true } } @@ -449,9 +435,9 @@ local Insight_Lander_A004 = { LightSources = LightSources }, GUI = { - Hidden = true, Name = "Insight Lander A004", - Path = "/Solar System/Missions/Insight" + Path = "/Solar System/Missions/Insight", + Hidden = true } } @@ -465,9 +451,9 @@ local Insight_Lander_A005 = { LightSources = LightSources }, GUI = { - Hidden = true, Name = "Insight Lander A005", - Path = "/Solar System/Missions/Insight" + Path = "/Solar System/Missions/Insight", + Hidden = true } } @@ -481,9 +467,9 @@ local Insight_Lander_A006 = { LightSources = LightSources }, GUI = { - Hidden = true, Name = "Insight Lander A006", - Path = "/Solar System/Missions/Insight" + Path = "/Solar System/Missions/Insight", + Hidden = true } } @@ -497,9 +483,9 @@ local Insight_Lander_A007 = { LightSources = LightSources }, GUI = { - Hidden = true, Name = "Insight Lander A007", - Path = "/Solar System/Missions/Insight" + Path = "/Solar System/Missions/Insight", + Hidden = true } } @@ -513,9 +499,9 @@ local Insight_Lander_A008 = { LightSources = LightSources }, GUI = { - Hidden = true, Name = "Insight Lander A008", - Path = "/Solar System/Missions/Insight" + Path = "/Solar System/Missions/Insight", + Hidden = true } } @@ -529,9 +515,9 @@ local Insight_Lander_foil1 = { LightSources = LightSources }, GUI = { - Hidden = true, Name = "Insight Lander foil", - Path = "/Solar System/Missions/Insight" + Path = "/Solar System/Missions/Insight", + Hidden = true } } @@ -545,9 +531,9 @@ local Insight_Lander_Tex01 = { LightSources = LightSources }, GUI = { - Hidden = true, Name = "Insight Lander Tex01", - Path = "/Solar System/Missions/Insight" + Path = "/Solar System/Missions/Insight", + Hidden = true } } @@ -561,91 +547,91 @@ local Insight_Lander_Tex02 = { LightSources = LightSources }, GUI = { - Hidden = true, Name = "Insight Lander Tex02", - Path = "/Solar System/Missions/Insight" + Path = "/Solar System/Missions/Insight", + Hidden = true } } local Insight_Legs_Stowed_tex = { Identifier = "Insight_Legs_Stowed_tex", Parent = Insight.Identifier, + TimeFrame = { + Type = "TimeFrameInterval", + Start = HeatShieldSeparationTime, + End = LegDeployTime + }, Renderable = { Type = "RenderableModel", GeometryFile = models .. "insight_lander_legs_stow_tex01.obj", ModelTransform = RotationMatrix, LightSources = LightSources }, - TimeFrame = { - Type = "TimeFrameInterval", - Start = HeatShieldSeparationTime, - End = LegDeployTime - }, GUI = { - Hidden = true, Name = "Insight legs_stow_tex", - Path = "/Solar System/Missions/Insight" + Path = "/Solar System/Missions/Insight", + Hidden = true } } local Insight_Legs_Stowed_AO06 = { Identifier = "Insight_Legs_Stowed_AO", Parent = Insight.Identifier, + TimeFrame = { + Type = "TimeFrameInterval", + Start = HeatShieldSeparationTime, + End = LegDeployTime + }, Renderable = { Type = "RenderableModel", GeometryFile = models .. "insight_lander_legs_stow_AO06.obj", ModelTransform = RotationMatrix, LightSources = LightSources }, - TimeFrame = { - Type = "TimeFrameInterval", - Start = HeatShieldSeparationTime, - End = LegDeployTime - }, GUI = { - Hidden = true, Name = "Insight legs_stow_AO", - Path = "/Solar System/Missions/Insight" + Path = "/Solar System/Missions/Insight", + Hidden = true } } local Insight_Legs_Deployed_tex = { Identifier = "Insight_Legs_Deployed_tex", Parent = Insight.Identifier, + TimeFrame = { + Type = "TimeFrameInterval", + Start = LegDeployTime + }, Renderable = { Type = "RenderableModel", GeometryFile = models .. "insight_lander_legs_deploy_tex01.obj", ModelTransform = RotationMatrix, LightSources = LightSources }, - TimeFrame = { - Type = "TimeFrameInterval", - Start = LegDeployTime - }, GUI = { - Hidden = true, Name = "Insight legs_deploy_tex", - Path = "/Solar System/Missions/Insight" + Path = "/Solar System/Missions/Insight", + Hidden = true } } local Insight_Legs_Deployed_AO06 = { Identifier = "Insight_Legs_Deployed_AO", Parent = Insight.Identifier, + TimeFrame = { + Type = "TimeFrameInterval", + Start = LegDeployTime + }, Renderable = { Type = "RenderableModel", GeometryFile = models .. "insight_lander_legs_deploy_AO06.obj", ModelTransform = RotationMatrix, LightSources = LightSources }, - TimeFrame = { - Type = "TimeFrameInterval", - Start = LegDeployTime - }, GUI = { - Hidden = true, Name = "Insight legs_deploy_AO", - Path = "/Solar System/Missions/Insight" + Path = "/Solar System/Missions/Insight", + Hidden = true } } @@ -659,9 +645,9 @@ local Insight_Panels_Stowed_tex = { LightSources = LightSources }, GUI = { - Hidden = true, Name = "Insight panels_stow_tex", - Path = "/Solar System/Missions/Insight" + Path = "/Solar System/Missions/Insight", + Hidden = true } } @@ -675,9 +661,9 @@ local Insight_Panels_Stowed_tex2 = { LightSources = LightSources }, GUI = { - Hidden = true, Name = "Insight panels_stow_tex2", - Path = "/Solar System/Missions/Insight" + Path = "/Solar System/Missions/Insight", + Hidden = true } } @@ -691,47 +677,46 @@ local Insight_Panels_Stowed_AO01 = { LightSources = LightSources }, GUI = { - Hidden = true, Name = "Insight panels_stow_AO", - Path = "/Solar System/Missions/Insight" + Path = "/Solar System/Missions/Insight", + Hidden = true } } local Insight_Panels_Deployed_tex = { Identifier = "Insight_panels_Deployed_tex", Parent = Insight.Identifier, + TimeFrame = { + Type = "TimeFrameInterval", + Start = PanelDeployTime + }, Renderable = { Type = "RenderableModel", GeometryFile = models .. "insight_lander_panels_deploy_tex01.obj", ModelTransform = RotationMatrix, LightSources = LightSources }, - TimeFrame = { - Type = "TimeFrameInterval", - Start = PanelDeployTime - }, GUI = { - Hidden = true, Name = "Insight panels_deploy_tex", - Path = "/Solar System/Missions/Insight" + Path = "/Solar System/Missions/Insight", + Hidden = true } } local Insight_Panels_Deployed_tex2 = { Identifier = "Insight_panels_Deployed_tex2", Parent = Insight.Identifier, + TimeFrame = { + Type = "TimeFrameInterval", + Start = PanelDeployTime + }, Renderable = { Type = "RenderableModel", GeometryFile = models .. "insight_lander_panels_deploy_tex02.obj", ModelTransform = RotationMatrix, LightSources = LightSources }, - TimeFrame = { - Type = "TimeFrameInterval", - Start = PanelDeployTime - }, GUI = { - -- Hidden = true, Name = "Insight panels_deploy_tex2", Path = "/Solar System/Missions/Insight" } @@ -740,29 +725,34 @@ local Insight_Panels_Deployed_tex2 = { local Insight_Panels_Deployed_AO06 = { Identifier = "Insight_panels_Deployed_AO", Parent = Insight.Identifier, + TimeFrame = { + Type = "TimeFrameInterval", + Start = PanelDeployTime + }, Renderable = { Type = "RenderableModel", GeometryFile = models .. "insight_lander_panels_deploy_AO01.obj", ModelTransform = RotationMatrix, LightSources = LightSources }, - TimeFrame = { - Type = "TimeFrameInterval", - Start = PanelDeployTime - }, GUI = { - Hidden = true, Name = "Insight panels_deploy_AO", - Path = "/Solar System/Missions/Insight" + Path = "/Solar System/Missions/Insight", + Hidden = true } } local Insight_Trail = { Identifier = "InsightTrail", Parent = "Mars", + TimeFrame = { + Type = "TimeFrameInterval", + Start = EntryTimeStart, + End = LanderSeparationTime + }, Renderable = { - Enabled = false, Type = "RenderableTrailTrajectory", + Enabled = false, Translation = { Type = "SpiceTranslation", Target = -189, @@ -774,20 +764,14 @@ local Insight_Trail = { EndTime = "2018 NOV 26 19:51:40.890", SampleInterval = 2 }, - TimeFrame = { - Type = "TimeFrameInterval", - Start = EntryTimeStart, - End = LanderSeparationTime - }, GUI = { Name = "Insight Trail", Path = "/Solar System/Missions/Insight" } } -asset.onInitialize(function() - openspace.spice.loadKernel(iKernels) +asset.onInitialize(function() openspace.addSceneGraphNode(InsightParent) openspace.addSceneGraphNode(Insight) openspace.addSceneGraphNode(Insight_Entry_CapsuleA) @@ -859,8 +843,6 @@ asset.onDeinitialize(function() openspace.removeSceneGraphNode(Insight_Entry_CapsuleA) openspace.removeSceneGraphNode(Insight) openspace.removeSceneGraphNode(InsightParent) - - openspace.spice.unloadKernel(iKernels) end) asset.export(InsightParent) diff --git a/data/assets/scene/solarsystem/missions/insight/kernels.asset b/data/assets/scene/solarsystem/missions/insight/kernels.asset new file mode 100644 index 0000000000..010c3cefa8 --- /dev/null +++ b/data/assets/scene/solarsystem/missions/insight/kernels.asset @@ -0,0 +1,36 @@ +local data = asset.resource({ + Name = "Insight Kernels", + Type = "HttpSynchronization", + Identifier = "insight_kernels", + Version = 1 +}) + + +local Kernels = { + data .. "nsyt_spk_cruise_od063_v1_approach2surface_SC_Lander.tsc", + data .. "insight_v02.tfr", + data .. "mar085s.bsp", + data .. "nsyt_spk_cruise_POST_approach2surface_SC_Lander.bsp", + data .. "nsyt_spk_cruise_POST_approach2surface_SC_Lander.bck" +} + +local ID = { + Insight = "INSIGHT" +} + +local Frame = { + Insight = -189000, + InsightCruise = "INSIGHT_LANDER_CRUISE" +} + + +asset.onInitialize(function() + openspace.spice.loadKernel(Kernels) +end) + +asset.onDeinitialize(function() + openspace.spice.unloadKernel(Kernels) +end) + +asset.export("ID", ID) +asset.export("Frame", Frame) diff --git a/data/assets/scene/solarsystem/missions/juice/dashboard.asset b/data/assets/scene/solarsystem/missions/juice/dashboard.asset index b334e828e8..fdd20f5580 100644 --- a/data/assets/scene/solarsystem/missions/juice/dashboard.asset +++ b/data/assets/scene/solarsystem/missions/juice/dashboard.asset @@ -3,6 +3,7 @@ local jupiter = asset.require("scene/solarsystem/planets/jupiter/jupiter") local ganymede = asset.require("scene/solarsystem/planets/jupiter/ganymede/ganymede") + local DistanceJuiceJupiter = { Type = "DashboardItemDistance", Identifier = "JuiceJupiterDistance", diff --git a/data/assets/scene/solarsystem/missions/juice/fieldlines.asset b/data/assets/scene/solarsystem/missions/juice/fieldlines.asset index 87c1a52555..e578bd3471 100644 --- a/data/assets/scene/solarsystem/missions/juice/fieldlines.asset +++ b/data/assets/scene/solarsystem/missions/juice/fieldlines.asset @@ -2,7 +2,7 @@ local transforms = asset.require("./transforms") -local data = asset.syncedResource({ +local data = asset.resource({ Type = "HttpSynchronization", Name = "Ganymede Plane Simulations", Identifier = "juice_ganymede_fieldlines", @@ -21,11 +21,12 @@ local GanymedeMagnetosphere = { ColorMethod = "By Quantity", ColorQuantity = 0, ColorTableRanges = { { 62.556353386366766, 1665.5534182835445 } }, - ColorTablePaths = { asset.localResource("CMR-illuminance2.txt") }, + ColorTablePaths = { asset.resource("CMR-illuminance2.txt") }, Color = { 0.03, 0.0, 0.0, 1.0 }, ParticleSpacing = 42.0, ParticleSize = 30.0, - FlowColor = { 1.0, 1.0, 1.0, 0.1 } + FlowColor = { 1.0, 1.0, 1.0, 0.1 }, + DomainEnabled = false }, GUI = { @@ -48,7 +49,6 @@ end) asset.meta = { Name = "Static fieldline representation of Ganymede's magnetic field", - Version = "1.0", Description = [[ Showing a single timestep of the magnetic fieldlines around Ganymede in the GPHIO coordinate system diff --git a/data/assets/scene/solarsystem/missions/juice/fov/gala.asset b/data/assets/scene/solarsystem/missions/juice/fov/gala.asset index 355903784f..e1bf3b5373 100644 --- a/data/assets/scene/solarsystem/missions/juice/fov/gala.asset +++ b/data/assets/scene/solarsystem/missions/juice/fov/gala.asset @@ -13,8 +13,8 @@ local Gala = { }, Renderable = { Type = "RenderableFov", - Body = "JUICE", - Frame = "JUICE_GALA_RXT", + Body = kernels.ID.Juice, + Frame = kernels.Frame.Gala, RGB = { 0.8, 0.7, 0.7 }, Instrument = { Name = "JUICE_GALA_RXT", @@ -22,8 +22,7 @@ local Gala = { Aberration = "NONE" }, AlwaysDrawFov = true, - PotentialTargets = { "JUPITER", "CALLISTO", "EUROPA", "GANYMEDE", "IO" }, - FrameConversions = {} + PotentialTargets = { "JUPITER", "CALLISTO", "EUROPA", "GANYMEDE", "IO" } }, GUI = { Name = "Gala FOV", @@ -33,7 +32,6 @@ local Gala = { } - asset.onInitialize(function() -- Circle shapes are currently not supported openspace.addSceneGraphNode(Gala) @@ -49,7 +47,6 @@ asset.export(Gala) asset.meta = { Name = "GALA", - Version = "1.0", Description = [[ Shows the field-view for the Ganymede Laser Altimeter (GALA) instrument onboard Juice, measuring a 2.5D heightfield of Ganymede and Europa. See diff --git a/data/assets/scene/solarsystem/missions/juice/fov/janus.asset b/data/assets/scene/solarsystem/missions/juice/fov/janus.asset index bca6d46432..65d440a769 100644 --- a/data/assets/scene/solarsystem/missions/juice/fov/janus.asset +++ b/data/assets/scene/solarsystem/missions/juice/fov/janus.asset @@ -19,8 +19,8 @@ local Janus = { }, Renderable = { Type = "RenderableFov", - Body = "JUICE", - Frame = "JUICE_JANUS", + Body = kernels.ID.Juice, + Frame = kernels.Frame.Janus, RGB = { 0.8, 0.7, 0.7 }, Instrument = { Name = "JUICE_JANUS", @@ -28,8 +28,7 @@ local Janus = { Aberration = "NONE" }, AlwaysDrawFov = true, - PotentialTargets = { "JUPITER", "CALLISTO", "EUROPA", "GANYMEDE", "IO" }, - FrameConversions = {} + PotentialTargets = { "JUPITER", "CALLISTO", "EUROPA", "GANYMEDE", "IO" } }, GUI = { Name = "Janus FOV", @@ -53,7 +52,6 @@ asset.export(Janus) asset.meta = { Name = "Janus", - Version = "1.0", Description = [[ Shows the field-view for the Jovis Amorum ac Natorum Undique Scrutator (JANUS) instrument onboard Juice, which is the camera operating in visible wavelengths. See diff --git a/data/assets/scene/solarsystem/missions/juice/fov/jmc.asset b/data/assets/scene/solarsystem/missions/juice/fov/jmc.asset index 6ca3e491a7..57e183f1e7 100644 --- a/data/assets/scene/solarsystem/missions/juice/fov/jmc.asset +++ b/data/assets/scene/solarsystem/missions/juice/fov/jmc.asset @@ -13,8 +13,8 @@ local JMC1 = { }, Renderable = { Type = "RenderableFov", - Body = "JUICE", - Frame = "JUICE_JMC-1", + Body = kernels.ID.Juice, + Frame = kernels.Frame.JMC1, RGB = { 0.8, 0.7, 0.7 }, Instrument = { Name = "JUICE_JMC-1", @@ -22,8 +22,7 @@ local JMC1 = { Aberration = "NONE" }, AlwaysDrawFov = true, - PotentialTargets = { "JUPITER", "CALLISTO", "EUROPA", "GANYMEDE", "IO" }, - FrameConversions = {} + PotentialTargets = { "JUPITER", "CALLISTO", "EUROPA", "GANYMEDE", "IO" } }, GUI = { Name = "JUICE_JMC-1 FOV", @@ -42,8 +41,8 @@ local JMC2 = { }, Renderable = { Type = "RenderableFov", - Body = "JUICE", - Frame = "JUICE_JMC-2", + Body = kernels.ID.Juice, + Frame = kernels.Frame.JMC2, RGB = { 0.8, 0.7, 0.7 }, Instrument = { Name = "JUICE_JMC-2", @@ -51,8 +50,7 @@ local JMC2 = { Aberration = "NONE" }, AlwaysDrawFov = true, - PotentialTargets = { "JUPITER", "CALLISTO", "EUROPA", "GANYMEDE", "IO" }, - FrameConversions = {} + PotentialTargets = { "JUPITER", "CALLISTO", "EUROPA", "GANYMEDE", "IO" } }, GUI = { Name = "JUICE_JMC-2 FOV", @@ -62,7 +60,6 @@ local JMC2 = { } - asset.onInitialize(function() openspace.addSceneGraphNode(JMC1) openspace.addSceneGraphNode(JMC2) @@ -80,7 +77,6 @@ asset.export(JMC2) asset.meta = { Name = "JMC", - Version = "1.0", Description = [[ Shows the field-view for the Juice Monitoring Cameras (JMC) onboard Juice, which provide status information about the deployment of various Juice systems, like the diff --git a/data/assets/scene/solarsystem/missions/juice/fov/majis.asset b/data/assets/scene/solarsystem/missions/juice/fov/majis.asset index 0b62bdd2c1..2802dbce6a 100644 --- a/data/assets/scene/solarsystem/missions/juice/fov/majis.asset +++ b/data/assets/scene/solarsystem/missions/juice/fov/majis.asset @@ -13,8 +13,8 @@ local MajisVisnir = { }, Renderable = { Type = "RenderableFov", - Body = "JUICE", - Frame = "JUICE_MAJIS_VISNIR", + Body = kernels.ID.Juice, + Frame = kernels.Frame.MajisVisnir, RGB = { 0.8, 0.7, 0.7 }, Instrument = { Name = "JUICE_MAJIS_VISNIR", @@ -22,8 +22,7 @@ local MajisVisnir = { Aberration = "NONE" }, AlwaysDrawFov = true, - PotentialTargets = { "JUPITER", "CALLISTO", "EUROPA", "GANYMEDE", "IO" }, - FrameConversions = {} + PotentialTargets = { "JUPITER", "CALLISTO", "EUROPA", "GANYMEDE", "IO" } }, GUI = { Name = "Majis Visnir FOV", @@ -45,8 +44,8 @@ local MajisVisnirB2 = { }, Renderable = { Type = "RenderableFov", - Body = "JUICE", - Frame = "JUICE_MAJIS_VISNIR_B2", + Body = kernels.ID.Juice, + Frame = kernels.Frame.MajisVisnirB2, RGB = { 0.8, 0.7, 0.7 }, Instrument = { Name = "JUICE_MAJIS_VISNIR_B2", @@ -54,8 +53,7 @@ local MajisVisnirB2 = { Aberration = "NONE" }, AlwaysDrawFov = true, - PotentialTargets = { "JUPITER", "CALLISTO", "EUROPA", "GANYMEDE", "IO" }, - FrameConversions = {} + PotentialTargets = { "JUPITER", "CALLISTO", "EUROPA", "GANYMEDE", "IO" } }, GUI = { Name = "Majis Visnir B2 FOV", @@ -73,8 +71,8 @@ local MajisVisnirB4 = { }, Renderable = { Type = "RenderableFov", - Body = "JUICE", - Frame = "JUICE_MAJIS_VISNIR_B4", + Body = kernels.ID.Juice, + Frame = kernels.Frame.MajisVisnirB4, RGB = { 0.8, 0.7, 0.7 }, Instrument = { Name = "JUICE_MAJIS_VISNIR_B4", @@ -82,8 +80,7 @@ local MajisVisnirB4 = { Aberration = "NONE" }, AlwaysDrawFov = true, - PotentialTargets = { "JUPITER", "CALLISTO", "EUROPA", "GANYMEDE", "IO" }, - FrameConversions = {} + PotentialTargets = { "JUPITER", "CALLISTO", "EUROPA", "GANYMEDE", "IO" } }, GUI = { Name = "Majis Visnir B4 FOV", @@ -101,8 +98,8 @@ local MajisIr = { }, Renderable = { Type = "RenderableFov", - Body = "JUICE", - Frame = "JUICE_MAJIS_IR", + Body = kernels.ID.Juice, + Frame = kernels.Frame.MajisIR, RGB = { 0.8, 0.7, 0.7 }, Instrument = { Name = "JUICE_MAJIS_IR", @@ -110,8 +107,7 @@ local MajisIr = { Aberration = "NONE" }, AlwaysDrawFov = true, - PotentialTargets = { "JUPITER", "CALLISTO", "EUROPA", "GANYMEDE", "IO" }, - FrameConversions = {} + PotentialTargets = { "JUPITER", "CALLISTO", "EUROPA", "GANYMEDE", "IO" } }, GUI = { Name = "Majis IR FOV", @@ -129,8 +125,8 @@ local MajisIrB2 = { }, Renderable = { Type = "RenderableFov", - Body = "JUICE", - Frame = "JUICE_MAJIS_IR_B2", + Body = kernels.ID.Juice, + Frame = kernels.Frame.MajisIRB2, RGB = { 0.8, 0.7, 0.7 }, Instrument = { Name = "JUICE_MAJIS_IR_B2", @@ -138,8 +134,7 @@ local MajisIrB2 = { Aberration = "NONE" }, AlwaysDrawFov = true, - PotentialTargets = { "JUPITER", "CALLISTO", "EUROPA", "GANYMEDE", "IO" }, - FrameConversions = {} + PotentialTargets = { "JUPITER", "CALLISTO", "EUROPA", "GANYMEDE", "IO" } }, GUI = { Name = "Majis IR B2 FOV", @@ -157,8 +152,8 @@ local MajisIrB4 = { }, Renderable = { Type = "RenderableFov", - Body = "JUICE", - Frame = "JUICE_MAJIS_IR_B4", + Body = kernels.ID.Juice, + Frame = kernels.Frame.MajisIRB4, RGB = { 0.8, 0.7, 0.7 }, Instrument = { Name = "JUICE_MAJIS_IR_B4", @@ -166,8 +161,7 @@ local MajisIrB4 = { Aberration = "NONE" }, AlwaysDrawFov = true, - PotentialTargets = { "JUPITER", "CALLISTO", "EUROPA", "GANYMEDE", "IO" }, - FrameConversions = {} + PotentialTargets = { "JUPITER", "CALLISTO", "EUROPA", "GANYMEDE", "IO" } }, GUI = { Name = "Majis IR B4 FOV", @@ -185,8 +179,8 @@ local Majis = { }, Renderable = { Type = "RenderableFov", - Body = "JUICE", - Frame = "JUICE_MAJIS", + Body = kernels.ID.Juice, + Frame = kernels.Frame.Majis, RGB = { 0.8, 0.7, 0.7 }, Instrument = { Name = "JUICE_MAJIS", @@ -194,8 +188,7 @@ local Majis = { Aberration = "NONE" }, AlwaysDrawFov = true, - PotentialTargets = { "JUPITER", "CALLISTO", "EUROPA", "GANYMEDE", "IO" }, - FrameConversions = {} + PotentialTargets = { "JUPITER", "CALLISTO", "EUROPA", "GANYMEDE", "IO" } }, GUI = { Name = "Majis FOV", @@ -245,7 +238,6 @@ asset.export(Majis) asset.meta = { Name = "Majis", - Version = "1.0", Description = [[ Shows the field-view for the Moon and Jupiter Imaging Spectrometer (MAJIS) onboard Juice, which is going to take spectroscopic measurements of the Jovian moons and diff --git a/data/assets/scene/solarsystem/missions/juice/fov/navcam.asset b/data/assets/scene/solarsystem/missions/juice/fov/navcam.asset index b976099c87..1adead87e0 100644 --- a/data/assets/scene/solarsystem/missions/juice/fov/navcam.asset +++ b/data/assets/scene/solarsystem/missions/juice/fov/navcam.asset @@ -13,8 +13,8 @@ local NavCam = { }, Renderable = { Type = "RenderableFov", - Body = "JUICE", - Frame = "JUICE_NAVCAM-1", + Body = kernels.ID.Juice, + Frame = kernels.Frame.NavCam, RGB = { 0.8, 0.7, 0.7 }, Instrument = { Name = "JUICE_NAVCAM-1", @@ -22,8 +22,7 @@ local NavCam = { Aberration = "NONE" }, AlwaysDrawFov = true, - PotentialTargets = { "JUPITER", "CALLISTO", "EUROPA", "GANYMEDE", "IO" }, - FrameConversions = {} + PotentialTargets = { "JUPITER", "CALLISTO", "EUROPA", "GANYMEDE", "IO" } }, GUI = { Name = "NavCam FOV", @@ -47,7 +46,6 @@ asset.export(NavCam) asset.meta = { Name = "NavCam", - Version = "1.0", Description = [[ Shows the field-view for the navigational camera (NavCam) onboard Juice, which is used to measure the location of Juice. See diff --git a/data/assets/scene/solarsystem/missions/juice/fov/rime.asset b/data/assets/scene/solarsystem/missions/juice/fov/rime.asset index e0b5cf14cc..185a8afc35 100644 --- a/data/assets/scene/solarsystem/missions/juice/fov/rime.asset +++ b/data/assets/scene/solarsystem/missions/juice/fov/rime.asset @@ -14,8 +14,8 @@ local RimeBase = { }, Renderable = { Type = "RenderableFov", - Body = "JUICE", - Frame = "JUICE_RIME_BASE", + Body = kernels.ID.Juice, + Frame = kernels.Frame.RimeBase, RGB = { 0.8, 0.7, 0.7 }, Instrument = { Name = "JUICE_RIME_BASE", @@ -23,8 +23,7 @@ local RimeBase = { Aberration = "NONE" }, AlwaysDrawFov = true, - PotentialTargets = { "JUPITER", "CALLISTO", "EUROPA", "GANYMEDE", "IO" }, - FrameConversions = {} + PotentialTargets = { "JUPITER", "CALLISTO", "EUROPA", "GANYMEDE", "IO" } }, GUI = { Name = "Rime Base FOV", @@ -44,8 +43,8 @@ local Rime = { }, Renderable = { Type = "RenderableFov", - Body = "JUICE", - Frame = "JUICE_RIME", + Body = kernels.ID.Juice, + Frame = kernels.Frame.Rime, RGB = { 0.8, 0.7, 0.7 }, Instrument = { Name = "JUICE_RIME", @@ -53,8 +52,7 @@ local Rime = { Aberration = "NONE" }, AlwaysDrawFov = true, - PotentialTargets = { "JUPITER", "CALLISTO", "EUROPA", "GANYMEDE", "IO" }, - FrameConversions = {} + PotentialTargets = { "JUPITER", "CALLISTO", "EUROPA", "GANYMEDE", "IO" } }, GUI = { Name = "Rime FOV", @@ -81,7 +79,6 @@ asset.export(RimeBase) asset.meta = { Name = "RIME", - Version = "1.0", Description = [[ Shows the field-view for the Radar for Icy Moons Exploration (RIME) onboard Juice, which is a ground-penetrating radar meant to measure the subsurface structure of the diff --git a/data/assets/scene/solarsystem/missions/juice/fov/startracker.asset b/data/assets/scene/solarsystem/missions/juice/fov/startracker.asset index 466393fa49..42a7fefc8e 100644 --- a/data/assets/scene/solarsystem/missions/juice/fov/startracker.asset +++ b/data/assets/scene/solarsystem/missions/juice/fov/startracker.asset @@ -13,8 +13,8 @@ local StarOh1 = { }, Renderable = { Type = "RenderableFov", - Body = "JUICE", - Frame = "JUICE_STR-OH1", + Body = kernels.ID.Juice, + Frame = kernels.Frame.StarTrackerOH1, RGB = { 0.0, 0.0, 0.0 }, Instrument = { Name = "JUICE_STR-OH1", @@ -22,8 +22,7 @@ local StarOh1 = { Aberration = "NONE" }, AlwaysDrawFov = true, - PotentialTargets = { "JUPITER", "CALLISTO", "EUROPA", "GANYMEDE", "IO" }, - FrameConversions = {} + PotentialTargets = { "JUPITER", "CALLISTO", "EUROPA", "GANYMEDE", "IO" } }, GUI = { Name = "Star Tracker OH1 FOV", @@ -42,8 +41,8 @@ local StarOh2 = { }, Renderable = { Type = "RenderableFov", - Body = "JUICE", - Frame = "JUICE_STR-OH2", + Body = kernels.ID.Juice, + Frame = kernels.Frame.StarTrackerOH2, RGB = { 0.0, 0.0, 0.0 }, Instrument = { Name = "JUICE_STR-OH2", @@ -51,8 +50,7 @@ local StarOh2 = { Aberration = "NONE" }, AlwaysDrawFov = true, - PotentialTargets = { "JUPITER", "CALLISTO", "EUROPA", "GANYMEDE", "IO" }, - FrameConversions = {} + PotentialTargets = { "JUPITER", "CALLISTO", "EUROPA", "GANYMEDE", "IO" } }, GUI = { Name = "Star Tracker OH2 FOV", @@ -71,8 +69,8 @@ local StarOh3 = { }, Renderable = { Type = "RenderableFov", - Body = "JUICE", - Frame = "JUICE_STR-OH3", + Body = kernels.ID.Juice, + Frame = kernels.Frame.StarTrackerOH3, RGB = { 0.0, 0.0, 0.0 }, Instrument = { Name = "JUICE_STR-OH3", @@ -80,8 +78,7 @@ local StarOh3 = { Aberration = "NONE" }, AlwaysDrawFov = true, - PotentialTargets = { "JUPITER", "CALLISTO", "EUROPA", "GANYMEDE", "IO" }, - FrameConversions = {} + PotentialTargets = { "JUPITER", "CALLISTO", "EUROPA", "GANYMEDE", "IO" } }, GUI = { Name = "Star Tracker OH3 FOV", @@ -111,7 +108,6 @@ asset.export(StarOh3) asset.meta = { Name = "Star Tracker", - Version = "1.0", Description = [[ Shows the field-view for the three headed "Hydra" star trackers onboard Juice, which is measuring the location of stars and comparing them to their known locations in diff --git a/data/assets/scene/solarsystem/missions/juice/fov/swi.asset b/data/assets/scene/solarsystem/missions/juice/fov/swi.asset index 0daa1ec8e3..8e06bff28e 100644 --- a/data/assets/scene/solarsystem/missions/juice/fov/swi.asset +++ b/data/assets/scene/solarsystem/missions/juice/fov/swi.asset @@ -14,8 +14,8 @@ local SwiCh2 = { }, Renderable = { Type = "RenderableFov", - Body = "JUICE", - Frame = "JUICE_SWI_CH2", + Body = kernels.ID.Juice, + Frame = kernels.Frame.SwiCH2, RGB = { 0.0, 0.0, 0.0 }, Instrument = { Name = "JUICE_SWI_CH2", @@ -23,8 +23,7 @@ local SwiCh2 = { Aberration = "NONE" }, AlwaysDrawFov = true, - PotentialTargets = { "JUPITER", "CALLISTO", "EUROPA", "GANYMEDE", "IO" }, - FrameConversions = {} + PotentialTargets = { "JUPITER", "CALLISTO", "EUROPA", "GANYMEDE", "IO" } }, GUI = { Name = "SWI CH2 FOV", @@ -49,8 +48,8 @@ local SwiFull = { }, Renderable = { Type = "RenderableFov", - Body = "JUICE", - Frame = "JUICE_SWI_FULL", + Body = kernels.ID.Juice, + Frame = kernels.Frame.SwiFull, RGB = { 0.0, 0.0, 0.0 }, Instrument = { Name = "JUICE_SWI_FULL", @@ -58,8 +57,7 @@ local SwiFull = { Aberration = "NONE" }, AlwaysDrawFov = true, - PotentialTargets = { "JUPITER", "CALLISTO", "EUROPA", "GANYMEDE", "IO" }, - FrameConversions = {} + PotentialTargets = { "JUPITER", "CALLISTO", "EUROPA", "GANYMEDE", "IO" } }, GUI = { Name = "SWI Full FOV", @@ -87,8 +85,8 @@ local SwiFullGCO500 = { }, Renderable = { Type = "RenderableFov", - Body = "JUICE", - Frame = "JUICE_SWI_FULL_GCO500", + Body = kernels.ID.Juice, + Frame = kernels.Frame.SwiFullGCO500, RGB = { 0.0, 0.0, 0.0 }, Instrument = { Name = "JUICE_SWI_FULL_GCO500", @@ -96,8 +94,7 @@ local SwiFullGCO500 = { Aberration = "NONE" }, AlwaysDrawFov = true, - PotentialTargets = { "JUPITER", "CALLISTO", "EUROPA", "GANYMEDE", "IO" }, - FrameConversions = {} + PotentialTargets = { "JUPITER", "CALLISTO", "EUROPA", "GANYMEDE", "IO" } }, GUI = { Name = "SWI Full GCO500 FOV", @@ -131,7 +128,6 @@ asset.export(SwiFull) asset.meta = { Name = "SWI", - Version = "1.0", Description = [[ Shows the field-view for the Submillimetre Wave Instrument (SWI), which is measuring the chemistry, meteorology, and structure of Jupiters middle atmosphere as well as the diff --git a/data/assets/scene/solarsystem/missions/juice/fov/uvs.asset b/data/assets/scene/solarsystem/missions/juice/fov/uvs.asset index ba26479825..e264b5b0fd 100644 --- a/data/assets/scene/solarsystem/missions/juice/fov/uvs.asset +++ b/data/assets/scene/solarsystem/missions/juice/fov/uvs.asset @@ -13,8 +13,8 @@ local UVS = { }, Renderable = { Type = "RenderableFov", - Body = "JUICE", - Frame = "JUICE_UVS", + Body = kernels.ID.Juice, + Frame = kernels.Frame.UVS, RGB = { 0.8, 0.7, 0.7 }, Instrument = { Name = "JUICE_UVS", @@ -22,8 +22,7 @@ local UVS = { Aberration = "NONE" }, AlwaysDrawFov = true, - PotentialTargets = { "JUPITER", "CALLISTO", "EUROPA", "GANYMEDE", "IO" }, - FrameConversions = {} + PotentialTargets = { "JUPITER", "CALLISTO", "EUROPA", "GANYMEDE", "IO" } }, GUI = { Name = "UVS FOV", @@ -47,7 +46,6 @@ asset.export(UVS) asset.meta = { Name = "UVS", - Version = "1.0", Description = [[ Shows the field-view for the Ultraviolet Spectograph (UVS), which is measuring the composition, chemistry, structure, and variability of Europa's atmopshere. See diff --git a/data/assets/scene/solarsystem/missions/juice/kernels.asset b/data/assets/scene/solarsystem/missions/juice/kernels.asset index db17a3b901..98e67d9096 100644 --- a/data/assets/scene/solarsystem/missions/juice/kernels.asset +++ b/data/assets/scene/solarsystem/missions/juice/kernels.asset @@ -1,4 +1,4 @@ -local kernels = asset.syncedResource({ +local data = asset.resource({ Name = "JUICE Kernels", Type = "HttpSynchronization", Identifier = "juice_kernels", @@ -9,58 +9,100 @@ local kernels = asset.syncedResource({ -- Kernels downloaded aon 2023-04-18 -- + GPHIO from Ronan local Kernels = { - kernels .. "juice_sc_attc_000031_230414_230503_v03.bc", - kernels .. "juice_lpbooms_s160326_v01.bc", - kernels .. "juice_magboom_s160326_v01.bc", - kernels .. "juice_majis_scan_zero_v01.bc", - kernels .. "juice_mga_meas_230413_230415_s230414_v01.bc", - kernels .. "juice_mga_zero_v02.bc", - kernels .. "juice_sa_meas_230413_230415_s230414_v01.bc", - kernels .. "juice_sa_zero_v01.bc", - kernels .. "juice_sc_meas_230413_230415_s230414_v01.bc", - kernels .. "juice_swi_scan_zero_v01.bc", + data .. "juice_sc_attc_000031_230414_230503_v03.bc", + data .. "juice_lpbooms_s160326_v01.bc", + data .. "juice_magboom_s160326_v01.bc", + data .. "juice_majis_scan_zero_v01.bc", + data .. "juice_mga_meas_230413_230415_s230414_v01.bc", + data .. "juice_mga_zero_v02.bc", + data .. "juice_sa_meas_230413_230415_s230414_v01.bc", + data .. "juice_sa_zero_v01.bc", + data .. "juice_sc_meas_230413_230415_s230414_v01.bc", + data .. "juice_swi_scan_zero_v01.bc", - kernels .. "juice_v32.tf", - kernels .. "juice_roi_v02.tf", - kernels .. "gphio.tf", + data .. "juice_v32.tf", + data .. "juice_roi_v02.tf", + data .. "gphio.tf", - kernels .. "juice_aux_v02.ti", - kernels .. "juice_gala_v05.ti", - kernels .. "juice_janus_v07.ti", - kernels .. "juice_jmag_v02.ti", - kernels .. "juice_jmc_v02.ti", - kernels .. "juice_majis_v07.ti", - kernels .. "juice_navcam_v01.ti", - kernels .. "juice_pep_v12.ti", - kernels .. "juice_radem_v01.ti", - kernels .. "juice_rime_v04.ti", - kernels .. "juice_rpwi_v03.ti", - kernels .. "juice_str_v01.ti", - kernels .. "juice_swi_v07.ti", - kernels .. "juice_uvs_v06.ti", + data .. "juice_aux_v02.ti", + data .. "juice_gala_v05.ti", + data .. "juice_janus_v07.ti", + data .. "juice_jmag_v02.ti", + data .. "juice_jmc_v02.ti", + data .. "juice_majis_v07.ti", + data .. "juice_navcam_v01.ti", + data .. "juice_pep_v12.ti", + data .. "juice_radem_v01.ti", + data .. "juice_rime_v04.ti", + data .. "juice_rpwi_v03.ti", + data .. "juice_str_v01.ti", + data .. "juice_swi_v07.ti", + data .. "juice_uvs_v06.ti", - kernels .. "juice_jup010.tpc", - kernels .. "juice_roi_v01.tpc", + data .. "juice_jup010.tpc", + data .. "juice_roi_v01.tpc", - kernels .. "juice_step_230414_v01.tsc", + data .. "juice_step_230414_v01.tsc", - kernels .. "juice_crema_5_1_150lb_23_1_v01.bsp", - kernels .. "juice_orbc_000031_230414_310721_v03.bsp", - kernels .. "jup343_19900101_20500101.bsp", - kernels .. "jup344-s2003_j24_19900101_20500101.bsp", - kernels .. "jup346_19900101_20500101.bsp", - kernels .. "jup365_19900101_20500101.bsp", - kernels .. "juice_struct_v17.bsp", - kernels .. "juice_roi_v02.bsp" + data .. "juice_crema_5_1_150lb_23_1_v01.bsp", + data .. "juice_orbc_000031_230414_310721_v03.bsp", + data .. "jup343_19900101_20500101.bsp", + data .. "jup344-s2003_j24_19900101_20500101.bsp", + data .. "jup346_19900101_20500101.bsp", + data .. "jup365_19900101_20500101.bsp", + data .. "juice_struct_v17.bsp", + data .. "juice_roi_v02.bsp" } -asset.export("Kernels", Kernels) + +local ID = { + Juice = "JUICE" +} + +local Frame = { + Juice = "JUICE_SPACECRAFT", + + Gala = "JUICE_GALA_RXT", + Janus = "JUICE_JANUS", + JMC1 = "JUICE_JMC-1", + JMC2 = "JUICE_JMC-2", + MajisVisnir = "JUICE_MAJIS_VISNIR", + MajisVisnirB2 = "JUICE_MAJIS_VISNIR_B2", + MajisVisnirB4 = "JUICE_MAJIS_VISNIR_B4", + MajisIR = "JUICE_MAJIS_IR", + MajisIRB2 = "JUICE_MAJIS_IR_B2", + MajisIRB4 = "JUICE_MAJIS_IR_B4", + Majis = "JUICE_MAJIS", + NavCam = "JUICE_NAVCAM-1", + RimeBase = "JUICE_RIME_BASE", + Rime = "JUICE_RIME", + StarTrackerOH1 = "JUICE_STR-OH1", + StarTrackerOH2 = "JUICE_STR-OH2", + StarTrackerOH3 = "JUICE_STR-OH3", + SwiCH2 = "JUICE_SWI_CH2", + SwiFull = "JUICE_SWI_FULL", + SwiFullGCO500 = "JUICE_SWI_FULL_GCO500", + UVS = "JUICE_UVS", + + GPHIO = "GPHIO" +} + + +asset.onInitialize(function() + openspace.spice.loadKernel(Kernels) +end) + +asset.onDeinitialize(function() + openspace.spice.unloadKernel(Kernels) +end) + +asset.export("ID", ID) +asset.export("Frame", Frame) asset.meta = { Name = "Spice Kernels for the Juice Mission", - Version = "1.0", Description = [[ Kernels were acquired from the official Juice mailing list and extended with the GPHIO kernel provided by Ronan Modolo for the fieldline and plane data visualization diff --git a/data/assets/scene/solarsystem/missions/juice/mission.asset b/data/assets/scene/solarsystem/missions/juice/mission.asset new file mode 100644 index 0000000000..3554bc5c5f --- /dev/null +++ b/data/assets/scene/solarsystem/missions/juice/mission.asset @@ -0,0 +1,68 @@ +local Mission = { + Identifier = "Juice", + Name = "Juice", + Image = "https://www.esa.int/var/esa/storage/images/science_exploration/space_science/juice/23388092-2-eng-GB/Juice_pillars.jpg", + Description = "ESA's Jupiter Icy Moons Explorer, Juice, will make detailed observations of the giant gas planet and its three large ocean-bearing moons - Ganymede, Callisto and Europa - with a suite of remote sensing, geophysical, and in situ instruments. The mission will characterize these moons as both planetary objects and possible habitats, explore Jupiter's complex environment in depth, and study the wider Jupiter system as an archetype for gas giants across the Universe.", + Milestones = { + { + Name = "Earth flyby 1", + Date = "2024 AUG 01 00:00:00" + }, + { + Name = "Venus flyby", + Date = "2025 AUG 01 00:00:00" + }, + { + Name = "Earth flyby 2", + Date = "2026 SEP 01 00:00:00" + }, + { + Name = "Earth flyby 3", + Date = "2029 JAN 01 00:00:00" + }, + { + Name = "Arrival at Jupiter", + Date = "2031 JUL 01 00:00:00" + }, + { + Name = "Europa flyby 1", + Date = "2032 JUL 02 16:21:51" + }, + { + Name = "Europa flyby 2", + Date = "2032 JUL 16 22:18:22" + } + }, + Phases = { + { + Name = "Journey to Jupiter", + TimeRange = { Start = "2023 APR 05 16:25:00", End = "2031 JUL 01 00:00:00" } + }, + { + Name = "Jupiter orbit", + TimeRange = { Start = "2031 JUL 01 00:00:00", End = "2033 NOV 01 00:00:00" }, + Phases = { + { + Name = "Jupiter inclined phase - Callisto flybys", + TimeRange = { Start = "2032 AUG 01 00:00:00", End = "2033 AUG 01 00:00:00" }, + Description = "ESA's Jupiter Icy Moons Explorer - Juice - will catch its first glimpse of ancient, cratered Callisto in June 2032, going on to whizz past the moon 21 times before making a final flyby in 2034. During these close encounters, Juice will collect valuable scientific treasure about the moon.", + + } + } + }, + { + Name = "Ganymede orbit", + TimeRange = { Start = "2034 NOV 01 00:00:00", End = "2035 SEP 01 00:00:00" }, + Description = "Monstrous, mysterious Ganymede is the primary target of ESA's Jupiter Icy Moons Explorer (Juice) and the largest moon in the Solar System - larger even than Pluto and Mercury! Though Juice will make flybys of all three of Jupiter's largest Galilean moons (Ganymede, Europa and Callisto), Ganymede is the only one that the spacecraft will orbit. In doing so, Juice will become the first spacecraft ever to orbit a moon other than our own, enabling us to see the Jovian world in a whole new light. Ganymede is also the only moon in the Solar System to generate its own magnetic field. Juice will explore various key topics: Ganymede's puzzling magnetic field, its hidden ocean, its complex core, its ice content and shell, its interactions with its local environment and that of Jupiter, its past and present activity, and whether or not the moon could be - or ever have been - a habitable environment." + } + } +} + + +asset.onInitialize(function() + openspace.loadMission(Mission) +end) + +asset.onDeinitialize(function() + openspace.unloadMission(Mission) +end) diff --git a/data/assets/scene/solarsystem/missions/juice/model.asset b/data/assets/scene/solarsystem/missions/juice/model.asset index c6a25379f0..1dbb7c4f4a 100644 --- a/data/assets/scene/solarsystem/missions/juice/model.asset +++ b/data/assets/scene/solarsystem/missions/juice/model.asset @@ -3,7 +3,7 @@ local transforms = asset.require("./transforms") -local model = asset.syncedResource({ +local model = asset.resource({ Name = "JUICE Model", Type = "HttpSynchronization", Identifier = "juice_models", @@ -27,7 +27,6 @@ local JuiceModel = { }, Renderable = { Type = "RenderableModel", - Body = "JUICE", GeometryFile = model .. "juice.fbx", ModelScale = "Centimeter", LightSources = { @@ -67,7 +66,6 @@ asset.export(JuiceModel) asset.meta = { Name = "Juice Model", - Version = "1.0", Description = [[ The model of the JUICE spacecraft. The model file was taken from https://www.cosmos.esa.int/web/esac-cmso/scifleet. diff --git a/data/assets/scene/solarsystem/missions/juice/plane.asset b/data/assets/scene/solarsystem/missions/juice/plane.asset index 8ce670a85e..39acf75d8b 100644 --- a/data/assets/scene/solarsystem/missions/juice/plane.asset +++ b/data/assets/scene/solarsystem/missions/juice/plane.asset @@ -4,7 +4,7 @@ local transforms = asset.require("./transforms") -- Datasets created using the script found at: -- https://github.com/OpenSpace/scripts/tree/master/juice-gphio-image-conversion -local data = asset.syncedResource({ +local data = asset.resource({ Type = "HttpSynchronization", Name = "Ganymede Plane Simulations", Identifier = "juice_ganymede_plane_cuts", @@ -21,9 +21,9 @@ local xy_n = { Parent = transforms.GPHIO.Identifier, Renderable = { Type = "RenderablePlaneImageLocal", + Enabled = false, Size = Size, - Texture = data .. "XY-n.png", - Enabled = false + Texture = data .. "XY-n.png" }, GUI = { Name = "Ganymede XY Plane N", @@ -37,9 +37,9 @@ local xy_t = { Parent = transforms.GPHIO.Identifier, Renderable = { Type = "RenderablePlaneImageLocal", + Enabled = false, Size = Size, - Texture = data .. "XY-T.png", - Enabled = false + Texture = data .. "XY-T.png" }, GUI = { Name = "Ganymede XY Plane T", @@ -53,9 +53,9 @@ local xy_u = { Parent = transforms.GPHIO.Identifier, Renderable = { Type = "RenderablePlaneImageLocal", + Enabled = false, Size = Size, - Texture = data .. "XY-U.png", - Enabled = false + Texture = data .. "XY-U.png" }, GUI = { Name = "Ganymede XY Plane U", @@ -70,9 +70,9 @@ local xy_utot = { Parent = transforms.GPHIO.Identifier, Renderable = { Type = "RenderablePlaneImageLocal", + Enabled = false, Size = Size, - Texture = data .. "XY-Utot.png", - Enabled = false + Texture = data .. "XY-Utot.png" }, GUI = { Name = "Ganymede XY Plane U_tot", @@ -87,9 +87,9 @@ local xy_ux = { Parent = transforms.GPHIO.Identifier, Renderable = { Type = "RenderablePlaneImageLocal", + Enabled = false, Size = Size, - Texture = data .. "XY-Ux.png", - Enabled = false + Texture = data .. "XY-Ux.png" }, GUI = { Name = "Ganymede XY Plane Ux", @@ -104,9 +104,9 @@ local xy_uy = { Parent = transforms.GPHIO.Identifier, Renderable = { Type = "RenderablePlaneImageLocal", + Enabled = false, Size = Size, - Texture = data .. "XY-Uy.png", - Enabled = false + Texture = data .. "XY-Uy.png" }, GUI = { Name = "Ganymede XY Plane Uy", @@ -121,9 +121,9 @@ local xy_uz = { Parent = transforms.GPHIO.Identifier, Renderable = { Type = "RenderablePlaneImageLocal", + Enabled = false, Size = Size, - Texture = data .. "XY-Uz.png", - Enabled = false + Texture = data .. "XY-Uz.png" }, GUI = { Name = "Ganymede XY Plane Uz", @@ -144,9 +144,9 @@ local xz_n = { }, Renderable = { Type = "RenderablePlaneImageLocal", + Enabled = false, Size = Size, - Texture = data .. "XZ-n.png", - Enabled = false + Texture = data .. "XZ-n.png" }, GUI = { Name = "Ganymede XZ Plane N", @@ -166,9 +166,9 @@ local xz_t = { }, Renderable = { Type = "RenderablePlaneImageLocal", + Enabled = false, Size = Size, - Texture = data .. "XZ-T.png", - Enabled = false + Texture = data .. "XZ-T.png" }, GUI = { Name = "Ganymede XZ Plane T", @@ -188,9 +188,9 @@ local xz_u = { }, Renderable = { Type = "RenderablePlaneImageLocal", + Enabled = false, Size = Size, - Texture = data .. "XZ-U.png", - Enabled = false + Texture = data .. "XZ-U.png" }, GUI = { Name = "Ganymede XZ Plane U", @@ -211,9 +211,9 @@ local xz_utot = { }, Renderable = { Type = "RenderablePlaneImageLocal", + Enabled = false, Size = Size, - Texture = data .. "XZ-Utot.png", - Enabled = false + Texture = data .. "XZ-Utot.png" }, GUI = { Name = "Ganymede XZ Plane U_tot", @@ -234,9 +234,9 @@ local xz_ux = { }, Renderable = { Type = "RenderablePlaneImageLocal", + Enabled = false, Size = Size, - Texture = data .. "XZ-Ux.png", - Enabled = false + Texture = data .. "XZ-Ux.png" }, GUI = { Name = "Ganymede XZ Plane Ux", @@ -257,9 +257,9 @@ local xz_uy = { }, Renderable = { Type = "RenderablePlaneImageLocal", + Enabled = false, Size = Size, - Texture = data .. "XZ-Uy.png", - Enabled = false + Texture = data .. "XZ-Uy.png" }, GUI = { Name = "Ganymede XZ Plane Uy", @@ -280,9 +280,9 @@ local xz_uz = { }, Renderable = { Type = "RenderablePlaneImageLocal", + Enabled = false, Size = Size, - Texture = data .. "XZ-Uz.png", - Enabled = false + Texture = data .. "XZ-Uz.png" }, GUI = { Name = "Ganymede XZ Plane Uz", @@ -348,7 +348,6 @@ asset.export(xz_uz) asset.meta = { Name = "Ganymede Cut Planes", - Version = "1.0", Description = [[ Cutplane visualizations of Ganymede's magnetic field as prepared by Ronan Modolo. ]], diff --git a/data/assets/scene/solarsystem/missions/juice/trails/earth.asset b/data/assets/scene/solarsystem/missions/juice/trails/earth.asset index 08d7316072..278ed32b85 100644 --- a/data/assets/scene/solarsystem/missions/juice/trails/earth.asset +++ b/data/assets/scene/solarsystem/missions/juice/trails/earth.asset @@ -1,5 +1,6 @@ local transforms = asset.require("scene/solarsystem/planets/earth/transforms") local kernels = asset.require("../kernels") +local coreKernels = asset.require("spice/core") @@ -10,8 +11,8 @@ local JuiceTrailEarth = { Type = "RenderableTrailTrajectory", Translation = { Type = "SpiceTranslation", - Target = "JUICE", - Observer = "EARTH BARYCENTER" + Target = kernels.ID.Juice, + Observer = coreKernels.ID.EarthBarycenter }, Color = { 0.30, 0.70, 0.20 }, StartTime = "2023 APR 05 12:00:00.000", @@ -27,15 +28,11 @@ local JuiceTrailEarth = { asset.onInitialize(function() - openspace.spice.loadKernel(kernels.Kernels) - openspace.addSceneGraphNode(JuiceTrailEarth) end) asset.onDeinitialize(function() openspace.removeSceneGraphNode(JuiceTrailEarth) - - openspace.spice.unloadKernel(kernels.Kernels) end) asset.export(JuiceTrailEarth) @@ -44,7 +41,6 @@ asset.export(JuiceTrailEarth) asset.meta = { Name = "Juice trajectory relative to the Earth barycenter", - Version = "1.0", Description = [[ The trajectory of the Juice spacecraft relative to the Earth barycenter ]], diff --git a/data/assets/scene/solarsystem/missions/juice/trails/ganymede.asset b/data/assets/scene/solarsystem/missions/juice/trails/ganymede.asset index 3618fcdb92..6d466cda2d 100644 --- a/data/assets/scene/solarsystem/missions/juice/trails/ganymede.asset +++ b/data/assets/scene/solarsystem/missions/juice/trails/ganymede.asset @@ -1,4 +1,5 @@ local transforms = asset.require("../transforms") +local kernelsJup = asset.require("scene/solarsystem/planets/jupiter/kernels") local kernels = asset.require("../kernels") @@ -10,8 +11,8 @@ local JuiceTrailGanymede = { Type = "RenderableTrailTrajectory", Translation = { Type = "SpiceTranslation", - Target = "JUICE", - Observer = "GANYMEDE" + Target = kernels.ID.Juice, + Observer = kernelsJup.ID.Ganymede }, Color = { 0.70, 0.770, 0.35 }, StartTime = "2034 DEC 01 00:00:00.000", @@ -27,15 +28,11 @@ local JuiceTrailGanymede = { asset.onInitialize(function() - openspace.spice.loadKernel(kernels.Kernels) - openspace.addSceneGraphNode(JuiceTrailGanymede) end) asset.onDeinitialize(function() openspace.removeSceneGraphNode(JuiceTrailGanymede) - - openspace.spice.unloadKernel(kernels.Kernels) end) asset.export(JuiceTrailGanymede) @@ -44,7 +41,6 @@ asset.export(JuiceTrailGanymede) asset.meta = { Name = "Juice trajectory relative to Ganymede", - Version = "1.0", Description = [[ The trajectory of the Juice spacecraft relative to Ganymede ]], diff --git a/data/assets/scene/solarsystem/missions/juice/trails/jupiter.asset b/data/assets/scene/solarsystem/missions/juice/trails/jupiter.asset index 4d7fbf2ea9..e1e77f21ea 100644 --- a/data/assets/scene/solarsystem/missions/juice/trails/jupiter.asset +++ b/data/assets/scene/solarsystem/missions/juice/trails/jupiter.asset @@ -1,5 +1,6 @@ local transforms = asset.require("scene/solarsystem/planets/jupiter/transforms") local kernels = asset.require("../kernels") +local coreKernels = asset.require("spice/core") @@ -10,8 +11,8 @@ local JuiceTrailJupiter = { Type = "RenderableTrailTrajectory", Translation = { Type = "SpiceTranslation", - Target = "JUICE", - Observer = "JUPITER BARYCENTER" + Target = kernels.ID.Juice, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.70, 0.370, 0.45 }, StartTime = "2031 JUL 02 00:00:00.000", @@ -27,15 +28,11 @@ local JuiceTrailJupiter = { asset.onInitialize(function() - openspace.spice.loadKernel(kernels.Kernels) - openspace.addSceneGraphNode(JuiceTrailJupiter) end) asset.onDeinitialize(function() openspace.removeSceneGraphNode(JuiceTrailJupiter) - - openspace.spice.unloadKernel(kernels.Kernels) end) asset.export(JuiceTrailJupiter) @@ -44,7 +41,6 @@ asset.export(JuiceTrailJupiter) asset.meta = { Name = "Juice trajectory relative to Jupiter", - Version = "1.0", Description = [[ The trajectory of the Juice spacecraft relative to Jupiter ]], diff --git a/data/assets/scene/solarsystem/missions/juice/trails/ssb.asset b/data/assets/scene/solarsystem/missions/juice/trails/ssb.asset index ea0da1b5e1..aad27fb39a 100644 --- a/data/assets/scene/solarsystem/missions/juice/trails/ssb.asset +++ b/data/assets/scene/solarsystem/missions/juice/trails/ssb.asset @@ -1,5 +1,6 @@ local transforms = asset.require("scene/solarsystem/sun/transforms") local kernels = asset.require("../kernels") +local coreKernels = asset.require("spice/core") @@ -10,8 +11,8 @@ local JuiceTrail = { Type = "RenderableTrailTrajectory", Translation = { Type = "SpiceTranslation", - Target = "JUICE", - Observer = "SSB" + Target = kernels.ID.Juice, + Observer = coreKernels.ID.SolarSystemBarycenter }, Color = { 0.85, 0.85, 0.85 }, StartTime = "2023 APR 05 12:00:00.000", @@ -27,15 +28,11 @@ local JuiceTrail = { asset.onInitialize(function() - openspace.spice.loadKernel(kernels.Kernels) - openspace.addSceneGraphNode(JuiceTrail) end) asset.onDeinitialize(function() openspace.removeSceneGraphNode(JuiceTrail) - - openspace.spice.unloadKernel(kernels.Kernels) end) asset.export(JuiceTrail) @@ -44,7 +41,6 @@ asset.export(JuiceTrail) asset.meta = { Name = "Juice trajectory relative to the solar system's barycenter", - Version = "1.0", Description = [[ The trajectory of the Juice spacecraft relative to the solar system's barycenter ]], diff --git a/data/assets/scene/solarsystem/missions/juice/transforms.asset b/data/assets/scene/solarsystem/missions/juice/transforms.asset index 2d625b021c..d5967031cd 100644 --- a/data/assets/scene/solarsystem/missions/juice/transforms.asset +++ b/data/assets/scene/solarsystem/missions/juice/transforms.asset @@ -1,5 +1,7 @@ local jupiterTransforms = asset.require("scene/solarsystem/planets/jupiter/transforms") +local kernelsJup = asset.require("scene/solarsystem/planets/jupiter/kernels") local kernels = asset.require("./kernels") +local coreKernels = asset.require("spice/core") @@ -14,13 +16,13 @@ local Juice = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "JUICE", - Observer = "JUPITER BARYCENTER" + Target = kernels.ID.Juice, + Observer = coreKernels.ID.JupiterBarycenter }, Rotation = { Type = "SpiceRotation", - SourceFrame = "JUICE_SPACECRAFT", - DestinationFrame = "GALACTIC" + SourceFrame = kernels.Frame.Juice, + DestinationFrame = coreKernels.Frame.Galactic } }, GUI = { @@ -36,8 +38,8 @@ local GanymedePosition = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "GANYMEDE", - Observer = "JUPITER BARYCENTER" + Target = kernelsJup.ID.Ganymede, + Observer = coreKernels.ID.JupiterBarycenter } }, GUI = { @@ -52,8 +54,8 @@ local GPHIO = { Transform = { Rotation = { Type = "SpiceRotation", - SourceFrame = "GPHIO", - DestinationFrame = "GALACTIC" + SourceFrame = kernels.Frame.GPHIO, + DestinationFrame = coreKernels.Frame.Galactic } }, GUI = { @@ -69,8 +71,6 @@ local GPHIO = { asset.onInitialize(function() - openspace.spice.loadKernel(kernels.Kernels) - openspace.addSceneGraphNode(Juice) openspace.addSceneGraphNode(GanymedePosition) openspace.addSceneGraphNode(GPHIO) @@ -80,8 +80,6 @@ asset.onDeinitialize(function() openspace.removeSceneGraphNode(GPHIO) openspace.removeSceneGraphNode(GanymedePosition) openspace.removeSceneGraphNode(Juice) - - openspace.spice.unloadKernel(kernels.Kernels) end) asset.export(Juice) @@ -92,7 +90,6 @@ asset.export(GPHIO) asset.meta = { Name = "Transformations for the JUICE mission profile", - Version = "1.0", Description = [[ Contains all of the base transformations necessary for the JUICE mission in the Jovian system diff --git a/data/assets/scene/solarsystem/missions/juno/juno.asset b/data/assets/scene/solarsystem/missions/juno/juno.asset index 49e25abfd2..89eef4a490 100644 --- a/data/assets/scene/solarsystem/missions/juno/juno.asset +++ b/data/assets/scene/solarsystem/missions/juno/juno.asset @@ -1,12 +1,13 @@ asset.require("scene/solarsystem/missions/juno/mission") asset.require("scene/solarsystem/planets/jupiter/layers/colorlayers/jupiter_video") local transforms = asset.require("scene/solarsystem/planets/jupiter/transforms") -local sun = asset.require("scene/solarsystem/sun/sun") +local sun = asset.require("scene/solarsystem/sun/transforms") local kernels = asset.require("./kernels") +local coreKernels = asset.require("spice/core") -local model = asset.syncedResource({ +local model = asset.resource({ Name = "Juno Model", Type = "HttpSynchronization", Identifier = "juno_model", @@ -31,13 +32,13 @@ local Juno = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "JUNO", - Observer = "JUPITER BARYCENTER" + Target = kernels.ID.Juno, + Observer = coreKernels.ID.JupiterBarycenter }, Rotation = { Type = "SpiceRotation", - SourceFrame = "JUNO_SPACECRAFT", - DestinationFrame = "GALACTIC" + SourceFrame = kernels.Frame.Juno, + DestinationFrame = coreKernels.Frame.Galactic } }, Renderable = { @@ -65,8 +66,8 @@ local JunoTrail = { Type = "RenderableTrailTrajectory", Translation = { Type = "SpiceTranslation", - Target = "JUNO", - Observer = "JUPITER BARYCENTER" + Target = kernels.ID.Juno, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.70, 0.50, 0.20 }, StartTime = "2016 JUL 01", @@ -81,8 +82,6 @@ local JunoTrail = { asset.onInitialize(function() - openspace.spice.loadKernel(kernels.kernels) - openspace.addSceneGraphNode(Juno) openspace.addSceneGraphNode(JunoTrail) end) @@ -90,8 +89,6 @@ end) asset.onDeinitialize(function() openspace.removeSceneGraphNode(JunoTrail) openspace.removeSceneGraphNode(Juno) - - openspace.spice.unloadKernel(kernels.kernels) end) asset.export(Juno) diff --git a/data/assets/scene/solarsystem/missions/juno/kernels.asset b/data/assets/scene/solarsystem/missions/juno/kernels.asset index 570b4fcc16..d2d03b78bf 100644 --- a/data/assets/scene/solarsystem/missions/juno/kernels.asset +++ b/data/assets/scene/solarsystem/missions/juno/kernels.asset @@ -1,5 +1,4 @@ - -local kernels = asset.syncedResource({ +local data = asset.resource({ Name = "Juno Kernels", Type = "HttpSynchronization", Identifier = "juno_kernels", @@ -7,113 +6,131 @@ local kernels = asset.syncedResource({ }) -local JunoKernels = { - kernels .. "juno_v12.tf", - kernels .. "JNO_SCLKSCET.00039.tsc", - kernels .. "juno_jade_v00.ti", - kernels .. "juno_jedi_v00.ti", - kernels .. "juno_jiram_v01.ti", - kernels .. "juno_junocam_v00.ti", - kernels .. "juno_mag_v00.ti", - kernels .. "juno_mwr_v01.ti", - kernels .. "juno_struct_v01.ti", - kernels .. "juno_uvs_v00.ti", - kernels .. "juno_waves_v00.ti", - kernels .. "juno_mwr_v01.ti", - kernels .. "spk_merge_110805_171017_130515.bsp", - kernels .. "spk_ref_210111_251021_210111.bsp", - kernels .. "juno_sc_nom_110807_171016_v01.bc", - kernels .. "juno_sc_prl_110930_111028_jc003c01_v01.bc", - kernels .. "juno_sc_prl_111028_111125_jc004b00_v01.bc", - kernels .. "juno_sc_prl_111125_111223_jc005b00_v01.bc", - kernels .. "juno_sc_prl_111223_120127_jc006a02_v01.bc", - kernels .. "juno_sc_prl_120127_120217_jc007a00_v01.bc", - kernels .. "juno_sc_prl_120217_120316_jc008b00_v02.bc", - kernels .. "juno_sc_prl_120316_120413_jc009a00_v01.bc", - kernels .. "juno_sc_prl_120413_120511_jc010a04_v01.bc", - kernels .. "juno_sc_prl_120511_120608_jc011a01_v02.bc", - kernels .. "juno_sc_prl_120608_120706_jc012b01_v01.bc", - kernels .. "juno_sc_prl_120706_120802_jc013a01_v01.bc", - kernels .. "juno_sc_prl_120802_120824_jc014b01_v01.bc", - kernels .. "juno_sc_prl_120824_120928_jc015m00_v01.bc", - kernels .. "juno_sc_prl_120919_120928_jc015o00_v01.bc", - kernels .. "juno_sc_prl_120928_121026_jc016c03_v01.bc", - kernels .. "juno_sc_prl_121026_121123_jc017a01_v01.bc", - kernels .. "juno_sc_prl_121123_121221_jc018b01_v01.bc", - kernels .. "juno_sc_prl_121221_130118_jc019a01_v01.bc", - kernels .. "juno_sc_prl_130118_130215_jc020b01_v01.bc", - kernels .. "juno_sc_prl_130315_130412_jc022b01_v01.bc", - kernels .. "juno_sc_prl_130412_130510_jc023b03_v01.bc", - kernels .. "juno_sc_prl_130510_130607_jc024a01_v01.bc", - kernels .. "juno_sc_prl_130607_130705_jc025a00_v01.bc", - kernels .. "juno_sc_prl_130705_130802_jc026a01_v01.bc", - kernels .. "juno_sc_prl_130726_131020_jx024a02_EFB_v03.bc", - kernels .. "juno_sc_prl_130802_130830_jc027a02_v01.bc", - kernels .. "juno_sc_prl_130830_130927_jc028a01_v01.bc", - kernels .. "juno_sc_prl_130926_131025_jc029a00_v01.bc", - kernels .. "juno_sc_prl_130927_131025_jc029c01_v01.bc", - kernels .. "juno_sc_prl_131022_131025_jc029f00_v01.bc", - kernels .. "juno_sc_prl_131025_131122_jc030b04_v01.bc", - kernels .. "juno_sc_prl_131122_131220_jc031b01_v01.bc", - kernels .. "juno_sc_prl_131220_140124_jc032a01_v01.bc", - kernels .. "juno_sc_prl_140124_140214_jc033a01_v01.bc", - kernels .. "juno_sc_prl_140214_140314_jc034b01_v01.bc", - kernels .. "juno_sc_prl_140314_140411_jc035a01_v01.bc", - kernels .. "juno_sc_prl_140411_140509_jc036b01_v01.bc", - kernels .. "juno_sc_prl_140509_140606_jc037b02_v01.bc", - kernels .. "juno_sc_prl_140606_140704_jc038a01_v01.bc", - kernels .. "juno_sc_prl_140704_140801_jc039b01_v01.bc", - kernels .. "juno_sc_prl_140801_140829_jc040a01_v01.bc", - kernels .. "juno_sc_prl_140829_140926_jc041a01_v01.bc", - kernels .. "juno_sc_prl_140926_141024_jc042a01_v01.bc", - kernels .. "juno_sc_prl_141024_141121_jc043a01_v01.bc", - kernels .. "juno_sc_prl_141105_141121_jc043m01_v01.bc", - kernels .. "juno_sc_prl_141107_141121_jc043s01_v01.bc", - kernels .. "juno_sc_prl_141121_141219_jc044a01_v01.bc", - kernels .. "juno_sc_prl_141219_150123_jc045a01_v01.bc", - kernels .. "juno_sc_prl_150123_150213_jc046a01_v01.bc", - kernels .. "juno_sc_prl_150213_150313_jc047a01_v01.bc", - kernels .. "juno_sc_prl_150312_150409_jc048a01_v01.bc", - kernels .. "juno_sc_prl_150410_150508_jc049a01_v01.bc", - kernels .. "juno_sc_prl_150508_150605_jc050a01_v01.bc", - kernels .. "juno_sc_prl_150605_150703_jc051a01_v01.bc", - kernels .. "juno_sc_prl_150703_150731_jc052a01_v01.bc", - kernels .. "juno_sc_prl_150731_150828_jc053a01_v01.bc", - kernels .. "juno_sc_prl_150805_150828_jc053m00_v01.bc", - kernels .. "juno_sc_prl_150807_150828_jc053s00_v01.bc", - kernels .. "juno_sc_prl_150828_150924_jc054a00_v01.bc", - kernels .. "juno_sc_prl_150924_151023_jc055a00_v01.bc", - kernels .. "juno_sc_prl_151023_151120_jc056a00_v01.bc", - kernels .. "juno_sc_prl_151120_151218_jc057a00_v01.bc", - kernels .. "juno_sc_prl_151218_160115_jc058a00_v01.bc", - kernels .. "juno_sc_prl_160115_160212_jc059a00_v01.bc", - kernels .. "juno_sc_prl_160212_160311_jc060a00_v01.bc", - kernels .. "juno_sc_prl_160311_160408_jc061a00_v01.bc", - kernels .. "juno_sc_prl_160408_160506_jc062a00_v01.bc", - kernels .. "juno_sc_prl_160506_160603_jc063a00_v01.bc", - kernels .. "juno_sc_prl_160603_160630_jc064a00_v01.bc", - kernels .. "juno_sc_prl_160708_160729_jm0001rp_v02.bc", - kernels .. "juno_sc_prl_160729_160826_jm0002rp_v01.bc", - kernels .. "juno_sc_prl_160827_160920_jm0003a00_v01.bc", - kernels .. "juno_sc_prl_160924_161019_jm0004a00_v01.bc", - kernels .. "juno_sc_prl_161014_161115_jm0005a00_v01.bc", - kernels .. "juno_sc_prl_161022_161115_jm0005b00_v01.bc", - kernels .. "juno_sc_prl_161115_161213_jx0405rp_v01.bc", - kernels .. "juno_sc_prl_161210_170115_jm0031a00_v01.bc", - kernels .. "juno_sc_prl_170115_170201_jm0032a00_v01.bc", - kernels .. "juno_sc_prl_170201_170309_jm0041a00_v01.bc", - kernels .. "juno_sc_prl_170309_170326_jm0042rp_v01.bc", - kernels .. "juno_sc_prl_170326_170427_jm0051rp_v01.bc", - kernels .. "juno_sc_prl_170427_170518_jm0052rp_v01.bc", - kernels .. "juno_sc_prl_170518_170615_jm0061a00_v01.bc", - kernels .. "juno_sc_prl_170615_170710_jm0062a00_v01.bc", - kernels .. "juno_sc_prl_170710_170805_jm0071a00_v01.bc", - kernels .. "juno_sc_prl_170805_170831_jm0072a00_v01.bc", - kernels .. "juno_sc_prl_170831_170927_jm0081a00_v01.bc", - kernels .. "juno_sc_prl_170927_171023_jm0082a00_v01.bc", - kernels .. "juno_sc_prl_171023_171030_jm0091a00_v01.bc", - kernels .. "juno_sc_prl_171023_171030_jm0091a00_v01.bc", - kernels .. "juno_sc_prl_230228_230407_jm0490rp_v01.bc" +local Kernels = { + data .. "juno_v12.tf", + data .. "JNO_SCLKSCET.00039.tsc", + data .. "juno_jade_v00.ti", + data .. "juno_jedi_v00.ti", + data .. "juno_jiram_v01.ti", + data .. "juno_junocam_v00.ti", + data .. "juno_mag_v00.ti", + data .. "juno_mwr_v01.ti", + data .. "juno_struct_v01.ti", + data .. "juno_uvs_v00.ti", + data .. "juno_waves_v00.ti", + data .. "juno_mwr_v01.ti", + data .. "spk_merge_110805_171017_130515.bsp", + data .. "spk_ref_210111_251021_210111.bsp", + data .. "juno_sc_nom_110807_171016_v01.bc", + data .. "juno_sc_prl_110930_111028_jc003c01_v01.bc", + data .. "juno_sc_prl_111028_111125_jc004b00_v01.bc", + data .. "juno_sc_prl_111125_111223_jc005b00_v01.bc", + data .. "juno_sc_prl_111223_120127_jc006a02_v01.bc", + data .. "juno_sc_prl_120127_120217_jc007a00_v01.bc", + data .. "juno_sc_prl_120217_120316_jc008b00_v02.bc", + data .. "juno_sc_prl_120316_120413_jc009a00_v01.bc", + data .. "juno_sc_prl_120413_120511_jc010a04_v01.bc", + data .. "juno_sc_prl_120511_120608_jc011a01_v02.bc", + data .. "juno_sc_prl_120608_120706_jc012b01_v01.bc", + data .. "juno_sc_prl_120706_120802_jc013a01_v01.bc", + data .. "juno_sc_prl_120802_120824_jc014b01_v01.bc", + data .. "juno_sc_prl_120824_120928_jc015m00_v01.bc", + data .. "juno_sc_prl_120919_120928_jc015o00_v01.bc", + data .. "juno_sc_prl_120928_121026_jc016c03_v01.bc", + data .. "juno_sc_prl_121026_121123_jc017a01_v01.bc", + data .. "juno_sc_prl_121123_121221_jc018b01_v01.bc", + data .. "juno_sc_prl_121221_130118_jc019a01_v01.bc", + data .. "juno_sc_prl_130118_130215_jc020b01_v01.bc", + data .. "juno_sc_prl_130315_130412_jc022b01_v01.bc", + data .. "juno_sc_prl_130412_130510_jc023b03_v01.bc", + data .. "juno_sc_prl_130510_130607_jc024a01_v01.bc", + data .. "juno_sc_prl_130607_130705_jc025a00_v01.bc", + data .. "juno_sc_prl_130705_130802_jc026a01_v01.bc", + data .. "juno_sc_prl_130726_131020_jx024a02_EFB_v03.bc", + data .. "juno_sc_prl_130802_130830_jc027a02_v01.bc", + data .. "juno_sc_prl_130830_130927_jc028a01_v01.bc", + data .. "juno_sc_prl_130926_131025_jc029a00_v01.bc", + data .. "juno_sc_prl_130927_131025_jc029c01_v01.bc", + data .. "juno_sc_prl_131022_131025_jc029f00_v01.bc", + data .. "juno_sc_prl_131025_131122_jc030b04_v01.bc", + data .. "juno_sc_prl_131122_131220_jc031b01_v01.bc", + data .. "juno_sc_prl_131220_140124_jc032a01_v01.bc", + data .. "juno_sc_prl_140124_140214_jc033a01_v01.bc", + data .. "juno_sc_prl_140214_140314_jc034b01_v01.bc", + data .. "juno_sc_prl_140314_140411_jc035a01_v01.bc", + data .. "juno_sc_prl_140411_140509_jc036b01_v01.bc", + data .. "juno_sc_prl_140509_140606_jc037b02_v01.bc", + data .. "juno_sc_prl_140606_140704_jc038a01_v01.bc", + data .. "juno_sc_prl_140704_140801_jc039b01_v01.bc", + data .. "juno_sc_prl_140801_140829_jc040a01_v01.bc", + data .. "juno_sc_prl_140829_140926_jc041a01_v01.bc", + data .. "juno_sc_prl_140926_141024_jc042a01_v01.bc", + data .. "juno_sc_prl_141024_141121_jc043a01_v01.bc", + data .. "juno_sc_prl_141105_141121_jc043m01_v01.bc", + data .. "juno_sc_prl_141107_141121_jc043s01_v01.bc", + data .. "juno_sc_prl_141121_141219_jc044a01_v01.bc", + data .. "juno_sc_prl_141219_150123_jc045a01_v01.bc", + data .. "juno_sc_prl_150123_150213_jc046a01_v01.bc", + data .. "juno_sc_prl_150213_150313_jc047a01_v01.bc", + data .. "juno_sc_prl_150312_150409_jc048a01_v01.bc", + data .. "juno_sc_prl_150410_150508_jc049a01_v01.bc", + data .. "juno_sc_prl_150508_150605_jc050a01_v01.bc", + data .. "juno_sc_prl_150605_150703_jc051a01_v01.bc", + data .. "juno_sc_prl_150703_150731_jc052a01_v01.bc", + data .. "juno_sc_prl_150731_150828_jc053a01_v01.bc", + data .. "juno_sc_prl_150805_150828_jc053m00_v01.bc", + data .. "juno_sc_prl_150807_150828_jc053s00_v01.bc", + data .. "juno_sc_prl_150828_150924_jc054a00_v01.bc", + data .. "juno_sc_prl_150924_151023_jc055a00_v01.bc", + data .. "juno_sc_prl_151023_151120_jc056a00_v01.bc", + data .. "juno_sc_prl_151120_151218_jc057a00_v01.bc", + data .. "juno_sc_prl_151218_160115_jc058a00_v01.bc", + data .. "juno_sc_prl_160115_160212_jc059a00_v01.bc", + data .. "juno_sc_prl_160212_160311_jc060a00_v01.bc", + data .. "juno_sc_prl_160311_160408_jc061a00_v01.bc", + data .. "juno_sc_prl_160408_160506_jc062a00_v01.bc", + data .. "juno_sc_prl_160506_160603_jc063a00_v01.bc", + data .. "juno_sc_prl_160603_160630_jc064a00_v01.bc", + data .. "juno_sc_prl_160708_160729_jm0001rp_v02.bc", + data .. "juno_sc_prl_160729_160826_jm0002rp_v01.bc", + data .. "juno_sc_prl_160827_160920_jm0003a00_v01.bc", + data .. "juno_sc_prl_160924_161019_jm0004a00_v01.bc", + data .. "juno_sc_prl_161014_161115_jm0005a00_v01.bc", + data .. "juno_sc_prl_161022_161115_jm0005b00_v01.bc", + data .. "juno_sc_prl_161115_161213_jx0405rp_v01.bc", + data .. "juno_sc_prl_161210_170115_jm0031a00_v01.bc", + data .. "juno_sc_prl_170115_170201_jm0032a00_v01.bc", + data .. "juno_sc_prl_170201_170309_jm0041a00_v01.bc", + data .. "juno_sc_prl_170309_170326_jm0042rp_v01.bc", + data .. "juno_sc_prl_170326_170427_jm0051rp_v01.bc", + data .. "juno_sc_prl_170427_170518_jm0052rp_v01.bc", + data .. "juno_sc_prl_170518_170615_jm0061a00_v01.bc", + data .. "juno_sc_prl_170615_170710_jm0062a00_v01.bc", + data .. "juno_sc_prl_170710_170805_jm0071a00_v01.bc", + data .. "juno_sc_prl_170805_170831_jm0072a00_v01.bc", + data .. "juno_sc_prl_170831_170927_jm0081a00_v01.bc", + data .. "juno_sc_prl_170927_171023_jm0082a00_v01.bc", + data .. "juno_sc_prl_171023_171030_jm0091a00_v01.bc", + data .. "juno_sc_prl_171023_171030_jm0091a00_v01.bc", + data .. "juno_sc_prl_230228_230407_jm0490rp_v01.bc" } -asset.export("kernels", JunoKernels) +local ID = { + Juno = "JUNO" +} + +local Frame = { + Juno = "JUNO_SPACECRAFT" +} + + +asset.onInitialize(function() + openspace.spice.loadKernel(Kernels) +end) + +asset.onDeinitialize(function() + openspace.spice.unloadKernel(Kernels) +end) + +asset.export("ID", ID) +asset.export("Frame", Frame) diff --git a/data/assets/scene/solarsystem/missions/juno/mission.asset b/data/assets/scene/solarsystem/missions/juno/mission.asset index 9daee794a8..b823e46e3f 100644 --- a/data/assets/scene/solarsystem/missions/juno/mission.asset +++ b/data/assets/scene/solarsystem/missions/juno/mission.asset @@ -1,4 +1,5 @@ local Mission = { + Identifier = "Juno", Name = "Juno", Image = "https://upload.wikimedia.org/wikipedia/commons/3/32/Juno_mission_insignia.svg", Description = "On August 5, 2011, NASA's Juno spacecraft embarked on a 5-year journey to our solar system's largest planet - the gas giant Jupiter. Its mission: to probe beneath the planet's dense clouds and answer questions about the origin and evolution of Jupiter, our solar system, and giant planets in general across the cosmos. Juno arrived at Jupiter on July 4, 2016, after a 5-year, 1.7-billion-mile journey, and settled into a 53-day polar orbit stretching from just above Jupiter's cloud tops to the outer reaches of the Jovian magnetosphere.", @@ -7,7 +8,7 @@ local Mission = { Name = "Arrival at Jupiter", Date = "2016 JUL 04 00:00:00", Image = "https://www.nasa.gov/sites/default/files/styles/full_width_feature/public/thumbnails/image/pj41_full.gif" , - Description = "On Dec. 24, 1968, Apollo 8 astronauts Frank Borman, Jim Lovell, and Bill Anders became the first humans to orbit the Moon, and the first to witness the magnificent sight called 'Earthrise'. As the spacecraft was in the process of rotating, Anders took this iconic picture showing Earth rising over the Moon's horizon.", + Description = "On Dec. 24, 1968, Apollo 8 astronauts Frank Borman, Jim Lovell, and Bill Anders became the first humans to orbit the Moon, and the first to witness the magnificent sight called 'Earthrise'. As the spacecraft was in the process of rotating, Anders took this iconic picture showing Earth rising over the Moon's horizon." } }, Phases = { @@ -43,5 +44,5 @@ asset.onInitialize(function() end) asset.onDeinitialize(function() - openspace.unloadMission(Mission.Name) + openspace.unloadMission(Mission) end) diff --git a/data/assets/scene/solarsystem/missions/messenger/kernels.asset b/data/assets/scene/solarsystem/missions/messenger/kernels.asset index 9be3910dc7..7890c05f28 100644 --- a/data/assets/scene/solarsystem/missions/messenger/kernels.asset +++ b/data/assets/scene/solarsystem/missions/messenger/kernels.asset @@ -1,4 +1,4 @@ -local kernels = asset.syncedResource({ +local data = asset.resource({ Name = "Messenger Kernels", Type = "HttpSynchronization", Identifier = "messenger_spice", @@ -7,35 +7,52 @@ local kernels = asset.syncedResource({ local Kernels = { - kernels .. "messenger_2548.tsc", - kernels .. "msgr_v231.tf", + data .. "messenger_2548.tsc", + data .. "msgr_v231.tf", - kernels .. "de405.bsp", - kernels .. "msgr_040803_150430_150430_od431sc_2.bsp", - kernels .. "msgr_antenna_v000.bsp", - kernels .. "msgr_de405_de423s.bsp", + data .. "de405.bsp", + data .. "msgr_040803_150430_150430_od431sc_2.bsp", + data .. "msgr_antenna_v000.bsp", + data .. "msgr_de405_de423s.bsp", - kernels .. "msgr_epps_v100.ti", - kernels .. "msgr_grns_v110.ti", - kernels .. "msgr_mag_v021.ti", - kernels .. "msgr_mascs_v100.ti", - kernels .. "msgr_mdis_v160.ti", - kernels .. "msgr_mla_v010.ti", - kernels .. "msgr_rs_v111.ti", - kernels .. "msgr_xrs_v001.ti", + data .. "msgr_epps_v100.ti", + data .. "msgr_grns_v110.ti", + data .. "msgr_mag_v021.ti", + data .. "msgr_mascs_v100.ti", + data .. "msgr_mdis_v160.ti", + data .. "msgr_mla_v010.ti", + data .. "msgr_rs_v111.ti", + data .. "msgr_xrs_v001.ti", + data .. "pck00008.tpc", + data .. "pck00008_msgr.tpc", + data .. "pck00009_msgr_v10.tpc", + data .. "pck00010_msgr_v10.tpc", + data .. "pck00010_msgr_v23.tpc", + data .. "pck00010.tpc", - kernels .. "pck00008.tpc", - kernels .. "pck00008_msgr.tpc", - kernels .. "pck00009_msgr_v10.tpc", - kernels .. "pck00010_msgr_v10.tpc", - kernels .. "pck00010_msgr_v23.tpc", - kernels .. "pck00010.tpc", - - kernels .. "msgr_1103_v02.bc", - kernels .. "msgr_1104_v02.bc", - kernels .. "msgr_1105_v02.bc", - kernels .. "msgr_1106_v02.bc" + data .. "msgr_1103_v02.bc", + data .. "msgr_1104_v02.bc", + data .. "msgr_1105_v02.bc", + data .. "msgr_1106_v02.bc" } -asset.export("Kernels", Kernels) +local ID = { + Messenger = "MESSENGER" +} + +local Frame = { + Messenger = "MSGR_SPACECRAFT" +} + + +asset.onInitialize(function() + openspace.spice.loadKernel(Kernels) +end) + +asset.onDeinitialize(function() + openspace.spice.unloadKernel(Kernels) +end) + +asset.export("ID", ID) +asset.export("Frame", Frame) diff --git a/data/assets/scene/solarsystem/missions/messenger/mercurymagnetosphere.asset b/data/assets/scene/solarsystem/missions/messenger/mercurymagnetosphere.asset index 2f5015562f..7d5be5882e 100644 --- a/data/assets/scene/solarsystem/missions/messenger/mercurymagnetosphere.asset +++ b/data/assets/scene/solarsystem/missions/messenger/mercurymagnetosphere.asset @@ -1,6 +1,9 @@ local mercuryTransforms = asset.require("scene/solarsystem/planets/mercury/transforms") +local coreKernels = asset.require("spice/core") -local localFolder = asset.syncedResource({ + + +local localFolder = asset.resource({ Name = "Mercury Magnetosphere", Type = "HttpSynchronization", Identifier = "mercury_magnetosphere", @@ -17,13 +20,13 @@ local Magnetosphere = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "MERCURY", - Observer = "MERCURY BARYCENTER" + Target = coreKernels.ID.Mercury, + Observer = coreKernels.ID.MercuryBarycenter }, Rotation = { Type = "SpiceRotation", SourceFrame = "MERCURYSE", - DestinationFrame = "GALACTIC" + DestinationFrame = coreKernels.Frame.Galactic }, Scale = { Type = "StaticScale", @@ -32,15 +35,15 @@ local Magnetosphere = { }, Renderable = { Type = "RenderableTimeVaryingVolume", + Enabled = false, SourceDirectory = localFolder, TransferFunction = localFolder .. "transferfunction.txt", Variable = "rho", StepSize = 0.003, Dimensions = { 64, 64, 64 }, GridType = "Cartesian", - SecondsBefore = 24 * 60 * 60 * 365 * 100, - SecondsAfter = 24 * 60 * 60 * 365 * 100, - Enabled = false + SecondsBefore = 100 * openspace.time.secondsPerYear(), + SecondsAfter = 100 * openspace.time.secondsPerYear() }, GUI = { Name = "Mercury Magnetosphere", diff --git a/data/assets/scene/solarsystem/missions/messenger/messenger.asset b/data/assets/scene/solarsystem/missions/messenger/messenger.asset index 47e5850e97..04805ebcab 100644 --- a/data/assets/scene/solarsystem/missions/messenger/messenger.asset +++ b/data/assets/scene/solarsystem/missions/messenger/messenger.asset @@ -1,10 +1,12 @@ -local sun = asset.require("scene/solarsystem/sun/sun") +local sun = asset.require("scene/solarsystem/sun/transforms") local sunTransforms = asset.require("scene/solarsystem/sun/transforms") local mercuryTransforms = asset.require("scene/solarsystem/planets/mercury/transforms") local kernels = asset.require("./kernels") +local coreKernels = asset.require("spice/core") -local models = asset.syncedResource({ + +local models = asset.resource({ Name = "Messenger Models", Type = "HttpSynchronization", Identifier = "messenger_model", @@ -30,13 +32,13 @@ local Messenger = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "MESSENGER", - Observer = "SSB" + Target = kernels.ID.Messenger, + Observer = coreKernels.ID.SolarSystemBarycenter }, Rotation = { Type = "SpiceRotation", - SourceFrame = "MSGR_SPACECRAFT", - DestinationFrame = "GALACTIC" + SourceFrame = kernels.Frame.Messenger, + DestinationFrame = coreKernels.Frame.Galactic } }, GUI = { @@ -153,8 +155,6 @@ local MessengerTrail = { asset.onInitialize(function() - openspace.spice.loadKernel(kernels.Kernels) - openspace.addSceneGraphNode(Messenger) openspace.addSceneGraphNode(MessengerProbeBlack) openspace.addSceneGraphNode(MessengerProbeFoil) @@ -172,8 +172,6 @@ asset.onDeinitialize(function() openspace.removeSceneGraphNode(MessengerProbeFoil) openspace.removeSceneGraphNode(MessengerProbeBlack) openspace.removeSceneGraphNode(Messenger) - - openspace.spice.unloadKernel(kernels.Kernels) end) asset.export(Messenger) diff --git a/data/assets/scene/solarsystem/missions/newhorizons/actions.asset b/data/assets/scene/solarsystem/missions/newhorizons/actions.asset index 68e637aaca..0d632d4a92 100644 --- a/data/assets/scene/solarsystem/missions/newhorizons/actions.asset +++ b/data/assets/scene/solarsystem/missions/newhorizons/actions.asset @@ -8,7 +8,7 @@ local FocusNewHorizons = { ]], Documentation = "Sets the focus of the camera on 'NewHorizons'", GuiPath = "/Missions/New Horizons", - isLocal = false + IsLocal = false } local AimPluto = { @@ -21,7 +21,7 @@ local AimPluto = { ]], Documentation = "Anchor at New Horizons, Aim at Pluto", GuiPath = "/Missions/New Horizons", - isLocal = false + IsLocal = false } local FocusPluto = { @@ -34,7 +34,7 @@ local FocusPluto = { ]], Documentation = "Sets the focus of the camera on 'Pluto'", GuiPath = "/Missions/New Horizons", - isLocal = false + IsLocal = false } local FocusCharon = { @@ -47,20 +47,20 @@ local FocusCharon = { ]], Documentation = "Sets the focus of the camera on 'Charon'", GuiPath = "/Missions/New Horizons", - isLocal = false + IsLocal = false } local ToggleImageProjection = { Identifier = "os.newhorizons.ToggleImageProjection", Name = "Toggle NH image projection", Command = [[ - local enabled = openspace.getPropertyValue("Scene.PlutoProjection.Renderable.ProjectionComponent.PerformProjection") + local enabled = openspace.propertyValue("Scene.PlutoProjection.Renderable.ProjectionComponent.PerformProjection") openspace.setPropertyValue("Scene.PlutoProjection.Renderable.ProjectionComponent.PerformProjection", not enabled) openspace.setPropertyValue("Scene.CharonProjection.Renderable.ProjectionComponent.PerformProjection", not enabled) ]], Documentation = "Toggles New Horizons image projection", GuiPath = "/Missions/New Horizons", - isLocal = false + IsLocal = false } local ClearImageProjections = { @@ -72,7 +72,7 @@ local ClearImageProjections = { ]], Documentation = "Removes all image projections from Pluto and Charon", GuiPath = "/Missions/New Horizons", - isLocal = false + IsLocal = false } local Approach = { @@ -85,7 +85,7 @@ local Approach = { ]], Documentation = "Jumps to the 14th of July 2015 at 0900 UTC and clears all projections", GuiPath = "/Missions/New Horizons", - isLocal = false + IsLocal = false } local IncreaseHeightmapPluto = { @@ -94,12 +94,12 @@ local IncreaseHeightmapPluto = { Command = [[ openspace.setPropertyValueSingle( "Scene.PlutoProjection.Renderable.HeightExaggeration", - openspace.getPropertyValue("Scene.PlutoProjection.Renderable.HeightExaggeration") + 5000 + openspace.propertyValue("Scene.PlutoProjection.Renderable.HeightExaggeration") + 5000 ) ]], Documentation = "Increases the height map exaggeration on Pluto", GuiPath = "/Missions/New Horizons", - isLocal = false + IsLocal = false } local DecreaseHeightmapPluto = { @@ -108,12 +108,12 @@ local DecreaseHeightmapPluto = { Command = [[ openspace.setPropertyValueSingle( "Scene.PlutoProjection.Renderable.HeightExaggeration", - openspace.getPropertyValue("Scene.PlutoProjection.Renderable.HeightExaggeration") - 5000 + openspace.propertyValue("Scene.PlutoProjection.Renderable.HeightExaggeration") - 5000 ) ]], Documentation = "Decreases the height map exaggeration on Pluto", GuiPath = "/Missions/New Horizons", - isLocal = false + IsLocal = false } local IncreaseHeightmapCharon = { @@ -122,12 +122,12 @@ local IncreaseHeightmapCharon = { Command = [[ openspace.setPropertyValueSingle( "Scene.CharonProjection.Renderable.HeightExaggeration", - openspace.getPropertyValue("Scene.CharonProjection.Renderable.HeightExaggeration") + 5000 + openspace.propertyValue("Scene.CharonProjection.Renderable.HeightExaggeration") + 5000 ) ]], Documentation = "Increases the height map exaggeration on Charon", GuiPath = "/Missions/New Horizons", - isLocal = false + IsLocal = false } local DecreaseHeightmapCharon = { @@ -136,12 +136,12 @@ local DecreaseHeightmapCharon = { Command = [[ openspace.setPropertyValueSingle( "Scene.CharonProjection.Renderable.HeightExaggeration", - openspace.getPropertyValue("Scene.CharonProjection.Renderable.HeightExaggeration") - 5000 + openspace.propertyValue("Scene.CharonProjection.Renderable.HeightExaggeration") - 5000 ) ]], Documentation = "Decreases the height map exaggeration on Charon", GuiPath = "/Missions/New Horizons", - isLocal = false + IsLocal = false } local TogglePlutoTrail = { @@ -150,12 +150,12 @@ local TogglePlutoTrail = { Command = [[ openspace.setPropertyValueSingle( "Scene.PlutoBarycentricTrail.Renderable.Enabled", - not openspace.getPropertyValue("Scene.PlutoBarycentricTrail.Renderable.Enabled") + not openspace.propertyValue("Scene.PlutoBarycentricTrail.Renderable.Enabled") ) ]], Documentation = "Toggles the visibility of the trail behind Pluto", GuiPath = "/Missions/New Horizons", - isLocal = false + IsLocal = false } local TogglePlutoLabels = { @@ -164,39 +164,39 @@ local TogglePlutoLabels = { Command = [[ openspace.setPropertyValueSingle( "Scene.PlutoText.Renderable.Enabled", - not openspace.getPropertyValue("Scene.PlutoText.Renderable.Enabled") + not openspace.propertyValue("Scene.PlutoText.Renderable.Enabled") ) openspace.setPropertyValueSingle( "Scene.CharonText.Renderable.Enabled", - not openspace.getPropertyValue("Scene.CharonText.Renderable.Enabled") + not openspace.propertyValue("Scene.CharonText.Renderable.Enabled") ) openspace.setPropertyValueSingle( "Scene.HydraText.Renderable.Enabled", - not openspace.getPropertyValue("Scene.HydraText.Renderable.Enabled") + not openspace.propertyValue("Scene.HydraText.Renderable.Enabled") ) openspace.setPropertyValueSingle( "Scene.NixText.Renderable.Enabled", - not openspace.getPropertyValue("Scene.NixText.Renderable.Enabled") + not openspace.propertyValue("Scene.NixText.Renderable.Enabled") ) openspace.setPropertyValueSingle( "Scene.KerberosText.Renderable.Enabled", - not openspace.getPropertyValue("Scene.KerberosText.Renderable.Enabled") + not openspace.propertyValue("Scene.KerberosText.Renderable.Enabled") ) openspace.setPropertyValueSingle( "Scene.StyxText.Renderable.Enabled", - not openspace.getPropertyValue("Scene.StyxText.Renderable.Enabled") + not openspace.propertyValue("Scene.StyxText.Renderable.Enabled") ) ]], Documentation = "Toggles the visibility of the text labels of Pluto, Charon, Hydra, Nix, Kerberos, and Styx", GuiPath = "/Missions/New Horizons", - isLocal = false + IsLocal = false } local ToggleNewHorizonsLabels = { Identifier = "os.newhorizons.ToggleNewHorizonsLabels", Name = "Toggle New Horizons labels", Command = [[ - local v = openspace.getPropertyValue("Scene.Labels.Renderable.Opacity") + local v = openspace.propertyValue("Scene.Labels.Renderable.Opacity") if v <= 0.5 then openspace.setPropertyValueSingle("Scene.Labels.Renderable.Opacity", 1.0, 2.0) else @@ -205,7 +205,7 @@ local ToggleNewHorizonsLabels = { ]], Documentation = "Toggles the visibility of the labels for the New Horizons instruments", GuiPath = "/Missions/New Horizons", - isLocal = false + IsLocal = false } local ToggleShadows = { @@ -214,16 +214,16 @@ local ToggleShadows = { Command = [[ openspace.setPropertyValueSingle( "Scene.PlutoShadow.Renderable.Enabled", - not openspace.getPropertyValue("Scene.PlutoShadow.Renderable.Enabled") + not openspace.propertyValue("Scene.PlutoShadow.Renderable.Enabled") ) openspace.setPropertyValueSingle( "Scene.CharonShadow.Renderable.Enabled", - not openspace.getPropertyValue("Scene.CharonShadow.Renderable.Enabled") + not openspace.propertyValue("Scene.CharonShadow.Renderable.Enabled") ) ]], Documentation = "Toggles the visibility of the shadow visualization of Pluto and Charon", GuiPath = "/Missions/New Horizons", - isLocal = false + IsLocal = false } local ToggleNewHorizonsTrail = { @@ -232,12 +232,12 @@ local ToggleNewHorizonsTrail = { Command = [[ openspace.setPropertyValueSingle( "Scene.NewHorizonsTrailPluto.Renderable.Enabled", - not openspace.getPropertyValue("Scene.NewHorizonsTrailPluto.Renderable.Enabled") + not openspace.propertyValue("Scene.NewHorizonsTrailPluto.Renderable.Enabled") ) ]], Documentation = "Toggles the trail of New Horizons", GuiPath = "/Missions/New Horizons", - isLocal = false + IsLocal = false } @@ -300,7 +300,6 @@ asset.export("ToggleNewHorizonsTrail", ToggleNewHorizonsTrail.Identifier) asset.meta = { Name = "New Horizons actions", - Version = "1.0", Description = "Actions for the New Horizons mission", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/missions/newhorizons/charon.asset b/data/assets/scene/solarsystem/missions/newhorizons/charon.asset index e75ca41ad1..dfd4699df4 100644 --- a/data/assets/scene/solarsystem/missions/newhorizons/charon.asset +++ b/data/assets/scene/solarsystem/missions/newhorizons/charon.asset @@ -1,9 +1,11 @@ local transforms = asset.require("./transforms") local sunTransforms = asset.require("scene/solarsystem/sun/transforms") +local kernels = asset.require("./kernels") +local coreKernels = asset.require("spice/core") -local textures = asset.syncedResource({ +local textures = asset.resource({ Name = "Charon Textures", Type = "HttpSynchronization", Identifier = "charon_textures", @@ -19,13 +21,13 @@ local CharonProjection = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "CHARON", - Observer = "PLUTO BARYCENTER" + Target = kernels.ID.Charon, + Observer = kernels.ID.PlutoBarycenter }, Rotation = { Type = "SpiceRotation", - SourceFrame = "IAU_CHARON", - DestinationFrame = "GALACTIC" + SourceFrame = kernels.Frame.Charon, + DestinationFrame = coreKernels.Frame.Galactic } }, Renderable = { @@ -42,12 +44,12 @@ local CharonProjection = { }, MeridianShift = true, Projection = { - Observer = "NEW HORIZONS", - Target = "CHARON", + Observer = kernels.ID.NewHorizons, + Target = kernels.ID.Charon, Aberration = "NONE", AspectRatio = 2, Instrument = { - Name = "NH_LORRI", + Name = kernels.Frame.Lorri, Method = "ELLIPSOID", Aberration = "NONE", Fovy = 0.2907, @@ -56,8 +58,8 @@ local CharonProjection = { Far = 10000 }, PotentialTargets = { - "PLUTO", - "CHARON" + kernels.ID.Pluto, + kernels.ID.Charon } } }, @@ -97,10 +99,10 @@ local CharonShadow = { Type = "RenderableShadowCylinder", Opacity = 0.25, TerminatorType = "PENUMBRAL", - LightSource = "SUN", - Observer = "NEW HORIZONS", - Body = "CHARON", - BodyFrame = "IAU_CHARON", + LightSource = coreKernels.ID.Sun, + Observer = kernels.ID.NewHorizons, + Body = kernels.ID.Charon, + BodyFrame = kernels.Frame.Charon, Aberration = "NONE" }, GUI = { diff --git a/data/assets/scene/solarsystem/missions/newhorizons/fov.asset b/data/assets/scene/solarsystem/missions/newhorizons/fov.asset index 6dd28a8226..149e8c4ec7 100644 --- a/data/assets/scene/solarsystem/missions/newhorizons/fov.asset +++ b/data/assets/scene/solarsystem/missions/newhorizons/fov.asset @@ -1,4 +1,6 @@ local transforms = asset.require("./transforms") +local kernels = asset.require("./kernels") +local coreKernels = asset.require("spice/core") @@ -18,17 +20,16 @@ local Lorri = { }, Renderable = { Type = "RenderableFov", - Body = "NEW HORIZONS", - Frame = "NH_SPACECRAFT", + Body = kernels.ID.NewHorizons, + Frame = kernels.Frame.NewHorizons, Color = { 0.8, 0.7, 0.7 }, Instrument = { - Name = "NH_LORRI", + Name = kernels.Frame.Lorri, Aberration = "NONE" }, PotentialTargets = { - "Pluto", - "Charon", - -- "Jupiter", "Io", "Europa", "Ganymede", "Callisto" + kernels.ID.Pluto, + kernels.ID.Charon } }, GUI = { @@ -48,17 +49,16 @@ local RalphLeisa = { }, Renderable = { Type = "RenderableFov", - Body = "NEW HORIZONS", - Frame = "NH_SPACECRAFT", + Body = kernels.ID.NewHorizons, + Frame = kernels.Frame.NewHorizons, RGB = { 0.8, 0.7, 0.7 }, Instrument = { - Name = "NH_RALPH_LEISA", + Name = kernels.Frame.RalphLeisa, Aberration = "NONE" }, PotentialTargets = { - "Pluto", - "Charon", - -- "Jupiter", "Io", "Europa", "Ganymede", "Callisto" + kernels.ID.Pluto, + kernels.ID.Charon } }, GUI = { @@ -78,17 +78,16 @@ local RalphMvicPan1 = { }, Renderable = { Type = "RenderableFov", - Body = "NEW HORIZONS", - Frame = "NH_SPACECRAFT", + Body = kernels.ID.NewHorizons, + Frame = kernels.Frame.NewHorizons, RGB = { 0.8, 0.7, 0.7 }, Instrument = { - Name = "NH_RALPH_MVIC_PAN1", + Name = kernels.Frame.RalphMvicPan1, Aberration = "NONE" }, PotentialTargets = { - "Pluto", - "Charon", - -- "Jupiter", "Io", "Europa", "Ganymede", "Callisto" + kernels.ID.Pluto, + kernels.ID.Charon } }, GUI = { @@ -108,17 +107,16 @@ local RalphMvicPan2 = { }, Renderable = { Type = "RenderableFov", - Body = "NEW HORIZONS", - Frame = "NH_SPACECRAFT", + Body = kernels.ID.NewHorizons, + Frame = kernels.Frame.NewHorizons, RGB = { 0.8, 0.7, 0.7 }, Instrument = { - Name = "NH_RALPH_MVIC_PAN2", + Name = kernels.Frame.RalphMvicPan2, Aberration = "NONE" }, PotentialTargets = { - "Pluto", - "Charon", - -- "Jupiter", "Io", "Europa", "Ganymede", "Callisto" + kernels.ID.Pluto, + kernels.ID.Charon } }, GUI = { @@ -138,17 +136,16 @@ local RalphMvicRed = { }, Renderable = { Type = "RenderableFov", - Body = "NEW HORIZONS", - Frame = "NH_SPACECRAFT", + Body = kernels.ID.NewHorizons, + Frame = kernels.Frame.NewHorizons, RGB = { 0.8, 0.7, 0.7 }, Instrument = { - Name = "NH_RALPH_MVIC_RED", + Name = kernels.Frame.RalphMvicRed, Aberration = "NONE" }, PotentialTargets = { - "Pluto", - "Charon", - -- "Jupiter", "Io", "Europa", "Ganymede", "Callisto" + kernels.ID.Pluto, + kernels.ID.Charon } }, GUI = { @@ -168,17 +165,16 @@ local RalphMvicBlue = { }, Renderable = { Type = "RenderableFov", - Body = "NEW HORIZONS", - Frame = "NH_SPACECRAFT", + Body = kernels.ID.NewHorizons, + Frame = kernels.Frame.NewHorizons, RGB = { 0.8, 0.7, 0.7 }, Instrument = { - Name = "NH_RALPH_MVIC_BLUE", + Name = kernels.Frame.RalphMvicBlue, Aberration = "NONE" }, PotentialTargets = { - "Pluto", - "Charon", - -- "Jupiter", "Io", "Europa", "Ganymede", "Callisto" + kernels.ID.Pluto, + kernels.ID.Charon } }, GUI = { @@ -198,17 +194,16 @@ local RalphMvicFt = { }, Renderable = { Type = "RenderableFov", - Body = "NEW HORIZONS", - Frame = "NH_SPACECRAFT", + Body = kernels.ID.NewHorizons, + Frame = kernels.Frame.NewHorizons, RGB = { 0.8, 0.7, 0.7 }, Instrument = { - Name = "NH_RALPH_MVIC_FT", + Name = kernels.Frame.RalphMvicFT, Aberration = "NONE" }, PotentialTargets = { - "Pluto", - "Charon", - -- "Jupiter", "Io", "Europa", "Ganymede", "Callisto" + kernels.ID.Pluto, + kernels.ID.Charon } }, GUI = { @@ -228,17 +223,16 @@ local RalphMvicMethane = { }, Renderable = { Type = "RenderableFov", - Body = "NEW HORIZONS", - Frame = "NH_SPACECRAFT", + Body = kernels.ID.NewHorizons, + Frame = kernels.Frame.NewHorizons, RGB = { 0.8, 0.7, 0.7 }, Instrument = { - Name = "NH_RALPH_MVIC_METHANE", + Name = kernels.Frame.RalphMvicMethane, Aberration = "NONE" }, PotentialTargets = { - "Pluto", - "Charon", - -- "Jupiter", "Io", "Europa", "Ganymede", "Callisto" + kernels.ID.Pluto, + kernels.ID.Charon } }, GUI = { @@ -258,17 +252,16 @@ local RalphMvicNir = { }, Renderable = { Type = "RenderableFov", - Body = "NEW HORIZONS", - Frame = "NH_SPACECRAFT", + Body = kernels.ID.NewHorizons, + Frame = kernels.Frame.NewHorizons, RGB = { 0.8, 0.7, 0.7 }, Instrument = { - Name = "NH_RALPH_MVIC_NIR", + Name = kernels.Frame.RalphMvicNIR, Aberration = "NONE" }, PotentialTargets = { - "Pluto", - "Charon", - -- "Jupiter", "Io", "Europa", "Ganymede", "Callisto" + kernels.ID.Pluto, + kernels.ID.Charon } }, GUI = { @@ -288,17 +281,16 @@ local AliceAirglow = { }, Renderable = { Type = "RenderableFov", - Body = "NEW HORIZONS", - Frame = "NH_SPACECRAFT", + Body = kernels.ID.NewHorizons, + Frame = kernels.Frame.NewHorizons, RGB = { 0.8, 0.7, 0.7 }, Instrument = { - Name = "NH_ALICE_AIRGLOW", + Name = kernels.Frame.AliceAirglow, Aberration = "NONE" }, PotentialTargets = { - "Pluto", - "Charon", - -- "Jupiter", "Io", "Europa", "Ganymede", "Callisto" + kernels.ID.Pluto, + kernels.ID.Charon }, SimplifyBounds = true }, @@ -319,17 +311,16 @@ local AliceSoc = { }, Renderable = { Type = "RenderableFov", - Body = "NEW HORIZONS", - Frame = "NH_SPACECRAFT", + Body = kernels.ID.NewHorizons, + Frame = kernels.Frame.NewHorizons, RGB = { 0.8, 0.7, 0.7 }, Instrument = { - Name = "NH_ALICE_SOC", + Name = kernels.Frame.AliceSOC, Aberration = "NONE" }, PotentialTargets = { - "Pluto", - "Charon", - -- "Jupiter", "Io", "Europa", "Ganymede", "Callisto" + kernels.ID.Pluto, + kernels.ID.Charon } }, GUI = { @@ -353,9 +344,9 @@ local Rex = { }, Renderable = { Type = "RenderableCrawlingLine", - Source = "NH_REX", - Target = "EARTH", - Instrument = "NH_REX", + Source = kernels.ID.Rex, + Target = coreKernels.ID.Earth, + Instrument = kernels.Frame.Rex, Color = { Start = { 1.0, 0.7, 0.0, 1.0 }, End = { 0.0, 0.0, 0.0, 0.0 } diff --git a/data/assets/scene/solarsystem/missions/newhorizons/kernels.asset b/data/assets/scene/solarsystem/missions/newhorizons/kernels.asset index 0b998693ab..81742b78e1 100644 --- a/data/assets/scene/solarsystem/missions/newhorizons/kernels.asset +++ b/data/assets/scene/solarsystem/missions/newhorizons/kernels.asset @@ -1,4 +1,8 @@ -local Kernels = asset.syncedResource({ +local coreKernels = asset.require("spice/core") + + + +local data = asset.resource({ Name = "New Horizons Kernels", Type = "HttpSynchronization", Identifier = "newhorizons_kernels", @@ -7,41 +11,88 @@ local Kernels = asset.syncedResource({ local NewHorizonsKernels = { - Kernels .. "nh_pred_20141201_20190301_od122.bsp", - Kernels .. "NavSE_plu047_od122.bsp", - Kernels .. "NavPE_de433_od122.bsp", + data .. "nh_pred_20141201_20190301_od122.bsp", + data .. "NavSE_plu047_od122.bsp", + data .. "NavPE_de433_od122.bsp", - Kernels .. "new-horizons_1121.tsc", + data .. "new-horizons_1121.tsc", - Kernels .. "nh_scispi_2015_pred.bc", - Kernels .. "nh_scispi_2015_recon.bc", - Kernels .. "nh_lorri_wcs.bc", + data .. "nh_scispi_2015_pred.bc", + data .. "nh_scispi_2015_recon.bc", + data .. "nh_lorri_wcs.bc", - Kernels .. "PLU_LORRI_ALL_161216.bc", + data .. "PLU_LORRI_ALL_161216.bc", - Kernels .. "nh_targets_v001.tpc", - Kernels .. "nh_pcnh_005.tpc", + data .. "nh_targets_v001.tpc", + data .. "nh_pcnh_005.tpc", - Kernels .. "nh_v220.tf", - Kernels .. "nh_allinstruments_v002.ti", - Kernels .. "nh_alice_v200.ti", - Kernels .. "nh_lorri_v201.ti", - Kernels .. "nh_pepssi_v110.ti", - Kernels .. "nh_ralph_v100.ti", - Kernels .. "nh_rex_v100.ti", - Kernels .. "nh_sdc_v101.ti", - Kernels .. "nh_swap_v100.ti", - Kernels .. "nh_astr_v000.ti", - Kernels .. "nh_fss_v000.ti", - Kernels .. "nh_soc_misc_v001.tf", - Kernels .. "nh_stars.bsp" + data .. "nh_v220.tf", + data .. "nh_allinstruments_v002.ti", + data .. "nh_alice_v200.ti", + data .. "nh_lorri_v201.ti", + data .. "nh_pepssi_v110.ti", + data .. "nh_ralph_v100.ti", + data .. "nh_rex_v100.ti", + data .. "nh_sdc_v101.ti", + data .. "nh_swap_v100.ti", + data .. "nh_astr_v000.ti", + data .. "nh_fss_v000.ti", + data .. "nh_soc_misc_v001.tf", + data .. "nh_stars.bsp" } local PlutoKernels = { - Kernels .. "NavPE_de433_od122.bsp", - Kernels .. "NavSE_plu047_od122.bsp" + data .. "NavPE_de433_od122.bsp", + data .. "NavSE_plu047_od122.bsp" } -asset.export("Kernels", Kernels) +local ID = { + NewHorizons = "NEW HORIZONS", + Rex = "NH_REX", + PlutoBarycenter = coreKernels.ID.PlutoBarycenter, + Pluto = coreKernels.ID.Pluto, + Charon = "CHARON", + Nix = "NIX", + Hydra = "HYDRA", + Kerberos = "KERBEROS", + Styx = "SYNX" +} + +local Frame = { + NewHorizons = "NH_SPACECRAFT", + Lorri = "NH_LORRI", + RalphLeisa = "NH_RALPH_LEISA", + RalphMvicPan1 = "NH_RALPH_MVIC_PAN1", + RalphMvicPan2 = "NH_RALPH_MVIC_PAN2", + RalphMvicRed = "NH_RALPH_MVIC_RED", + RalphMvicBlue = "NH_RALPH_MVIC_BLUE", + RalphMvicFT = "NH_RALPH_MVIC_FT", + RalphMvicMethane = "NH_RALPH_MVIC_METHANE", + RalphMvicNIR = "NH_RALPH_MVIC_NIR", + AliceAirglow = "NH_ALICE_AIRGLOW", + AliceSOC = "NH_ALICE_SOC", + Rex = "NH_REX", + + Pluto = coreKernels.Frame.Pluto, + Charon = coreKernels.Frame.Charon, + Hydra = coreKernels.Frame.Hydra, + Styx = coreKernels.Frame.Styx, + Nix = coreKernels.Frame.Nix, + Kerberos = coreKernels.Frame.Kerberos +} + + +asset.onInitialize(function() + openspace.spice.loadKernel(NewHorizonsKernels) + openspace.spice.loadKernel(PlutoKernels) +end) + +asset.onDeinitialize(function() + openspace.spice.unloadKernel(PlutoKernels) + openspace.spice.unloadKernel(NewHorizonsKernels) +end) + +asset.export("ID", ID) +asset.export("Frame", Frame) asset.export("NewHorizonsKernels", NewHorizonsKernels) asset.export("PlutoKernels", PlutoKernels) diff --git a/data/assets/scene/solarsystem/missions/newhorizons/label.asset b/data/assets/scene/solarsystem/missions/newhorizons/label.asset index ba41511879..b41125e178 100644 --- a/data/assets/scene/solarsystem/missions/newhorizons/label.asset +++ b/data/assets/scene/solarsystem/missions/newhorizons/label.asset @@ -2,7 +2,7 @@ local NewHorizonsModel = asset.require("./model") -local models = asset.syncedResource({ +local models = asset.resource({ Name = "New Horizons Model", Type = "HttpSynchronization", Identifier = "newhorizons_model", @@ -14,7 +14,6 @@ local Labels = { Parent = NewHorizonsModel.NewHorizons.Identifier, Renderable = { Type = "RenderableModel", - Body = "NEW HORIZONS", GeometryFile = models .. "Labels.obj", AmbientIntensity = 0.8 }, diff --git a/data/assets/scene/solarsystem/missions/newhorizons/mission.asset b/data/assets/scene/solarsystem/missions/newhorizons/mission.asset index 2450233836..99dff527e6 100644 --- a/data/assets/scene/solarsystem/missions/newhorizons/mission.asset +++ b/data/assets/scene/solarsystem/missions/newhorizons/mission.asset @@ -3,6 +3,7 @@ -- are approximate and need fixing local Mission = { + Identifier = "NewHorizons", Name = "New Horizons", Phases = { { @@ -126,5 +127,5 @@ asset.onInitialize(function() end) asset.onDeinitialize(function() - openspace.unloadMission(Mission.Name) + openspace.unloadMission(Mission) end) diff --git a/data/assets/scene/solarsystem/missions/newhorizons/model.asset b/data/assets/scene/solarsystem/missions/newhorizons/model.asset index 85abd73ebe..f6e3ef6109 100644 --- a/data/assets/scene/solarsystem/missions/newhorizons/model.asset +++ b/data/assets/scene/solarsystem/missions/newhorizons/model.asset @@ -1,9 +1,9 @@ local transforms = asset.require("./transforms") -local sun = asset.require("scene/solarsystem/sun/sun") +local sun = asset.require("scene/solarsystem/sun/transforms") -local models = asset.syncedResource({ +local models = asset.resource({ Name = "New Horizons Model", Type = "HttpSynchronization", Identifier = "newhorizons_model", @@ -16,7 +16,6 @@ local NewHorizons = { Parent = transforms.NewHorizonsPosition.Identifier, Renderable = { Type = "RenderableModel", - Body = "NEW HORIZONS", GeometryFile = models .. "NewHorizonsCleanModel.obj", AmbientIntensity = 0.2, DiffuseIntensity = 1.0, diff --git a/data/assets/scene/solarsystem/missions/newhorizons/othermoons.asset b/data/assets/scene/solarsystem/missions/newhorizons/othermoons.asset index 547b844a69..3c58d84824 100644 --- a/data/assets/scene/solarsystem/missions/newhorizons/othermoons.asset +++ b/data/assets/scene/solarsystem/missions/newhorizons/othermoons.asset @@ -5,28 +5,28 @@ local Styx = asset.require("scene/solarsystem/dwarf_planets/pluto/minor/styx") -local hydraTextures = asset.syncedResource({ +local hydraTextures = asset.resource({ Name = "Hydra Textures", Type = "HttpSynchronization", Identifier = "hydra_textures", Version = 1 }) -local kerberosTextures = asset.syncedResource({ +local kerberosTextures = asset.resource({ Name = "Kerberos Textures", Type = "HttpSynchronization", Identifier = "kerberos_textures", Version = 1 }) -local nixTextures = asset.syncedResource({ +local nixTextures = asset.resource({ Name = "Nix Textures", Type = "HttpSynchronization", Identifier = "nix_textures", Version = 1 }) -local styxTextures = asset.syncedResource({ +local styxTextures = asset.resource({ Name = "Styx Textures", Type = "HttpSynchronization", Identifier = "styx_textures", @@ -45,7 +45,7 @@ local HydraText = { }, Renderable = { Type = "RenderablePlaneImageLocal", - Size = 10.0^6.3, + Size = 1995262.315, Origin = "Center", Billboard = true, Texture = hydraTextures .. "Hydra-Text.png", diff --git a/data/assets/scene/solarsystem/missions/newhorizons/pluto.asset b/data/assets/scene/solarsystem/missions/newhorizons/pluto.asset index b2d33dfb94..747fa0adfe 100644 --- a/data/assets/scene/solarsystem/missions/newhorizons/pluto.asset +++ b/data/assets/scene/solarsystem/missions/newhorizons/pluto.asset @@ -1,31 +1,32 @@ local transforms = asset.require("./transforms") local sunTransforms = asset.require("scene/solarsystem/sun/transforms") local kernels = asset.require("./kernels") +local coreKernels = asset.require("spice/core") -local assets = asset.syncedResource({ +local assets = asset.resource({ Name = "Pluto Assets", Type = "HttpSynchronization", Identifier = "newhorizons_plutoencounter_pluto_assets", Version = 1 }) -local encounterTextures = asset.syncedResource({ +local encounterTextures = asset.resource({ Name = "Pluto Encounter Textures", Type = "HttpSynchronization", Identifier = "newhorizons_plutoencounter_pluto_textures", Version = 4 }) -local textures = asset.syncedResource({ +local textures = asset.resource({ Name = "Pluto Textures", Type = "HttpSynchronization", Identifier = "pluto_textures", Version = 5 }) -local images = asset.syncedResource({ +local images = asset.resource({ Name = "Pluto Images", Type = "HttpSynchronization", Identifier = "newhorizons_plutoencounter_pluto_images", @@ -41,13 +42,13 @@ local PlutoProjection = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "PLUTO", - Observer = "PLUTO BARYCENTER" + Target = kernels.ID.Pluto, + Observer = kernels.ID.PlutoBarycenter }, Rotation = { Type = "SpiceRotation", - SourceFrame = "IAU_PLUTO", - DestinationFrame = "GALACTIC" + SourceFrame = kernels.Frame.Pluto, + DestinationFrame = coreKernels.Frame.Galactic } }, Renderable = { @@ -71,70 +72,70 @@ local PlutoProjection = { EventFile = assets .. "core_v9h_obs_getmets_v8_time_fix_nofrcd_mld.txt", -- SequenceType = "hybrid", SequenceType = "image-sequence", - Observer = "NEW HORIZONS", - Target = "PLUTO", + Observer = kernels.ID.NewHorizons, + Target = kernels.ID.Pluto, Aberration = "NONE", AspectRatio = 2, DataInputTranslation = { Instrument = { LORRI = { DetectorType = "Camera", - Spice = { "NH_LORRI" } + Spice = { kernels.Frame.Lorri } }, RALPH_MVIC_PAN_FRAME = { DetectorType = "Scanner", StopCommand = "RALPH_ABORT", - Spice = { "NH_RALPH_MVIC_FT" } + Spice = { kernels.Frame.RalphMvicFT } }, RALPH_MVIC_COLOR = { DetectorType = "Scanner", StopCommand = "END_NOM", Spice = { - "NH_RALPH_MVIC_NIR", - "NH_RALPH_MVIC_METHANE", - "NH_RALPH_MVIC_RED", - "NH_RALPH_MVIC_BLUE" + kernels.Frame.RalphMvicNIR, + kernels.Frame.RalphMvicMethane, + kernels.Frame.RalphMvicRed, + kernels.Frame.RalphMvicBlue } }, RALPH_LEISA = { DetectorType = "Scanner", StopCommand = "END_NOM", - Spice = { "NH_RALPH_LEISA" } + Spice = { kernels.Frame.RalphLeisa } }, RALPH_MVIC_PAN1 = { DetectorType = "Scanner", StopCommand = "END_NOM", - Spice = { "NH_RALPH_MVIC_PAN1" } + Spice = { kernels.Frame.RalphMvicPan1 } }, RALPH_MVIC_PAN2 = { DetectorType = "Scanner", StopCommand = "END_NOM", - Spice = { "NH_RALPH_MVIC_PAN2" } + Spice = { kernels.Frame.RalphMvicPan2 } }, ALICE_Use_AIRGLOW = { DetectorType = "Scanner", StopCommand = "ALICE_END_PIXELLIST", - Spice = { "NH_ALICE_AIRGLOW" } + Spice = { kernels.Frame.AliceAirglow } }, ALICE_Use_AIRGLOW = { DetectorType = "Scanner", StopCommand = "ALICE_END_HISTOGRAM", - Spice = { "NH_ALICE_AIRGLOW" } + Spice = { kernels.Frame.AliceAirglow } }, ALICE_Use_SOCC = { DetectorType = "Scanner", StopCommand = "ALICE_END_PIXELLIST", - Spice = { "NH_ALICE_SOC" } + Spice = { kernels.Frame.AliceSOC } }, ALICE_Use_SOCC = { DetectorType = "Scanner", StopCommand = "ALICE_END_HISTOGRAM", - Spice = { "NH_ALICE_SOC" } + Spice = { kernels.Frame.AliceSOC } }, REX_START = { DetectorType = "Scanner", StopCommand = "REX_MODE_OFF", - Spice = { "NH_REX" } + Spice = { kernels.Frame.Rex } } }, Target = { @@ -155,7 +156,7 @@ local PlutoProjection = { } }, Instrument = { - Name = "NH_LORRI", + Name = kernels.Frame.Lorri, Method = "ELLIPSOID", Aberration = "NONE", Fovy = 0.2907, @@ -164,12 +165,12 @@ local PlutoProjection = { Far = 10000 }, PotentialTargets = { - "PLUTO", - "CHARON", - "NIX", - "HYDRA", - "P5", - "P4" + kernels.ID.Pluto, + kernels.ID.Charon, + kernels.ID.Nix, + kernels.ID.Hydra, + kernels.ID.Styx, + kernels.ID.Kerberos } } }, @@ -225,10 +226,10 @@ local PlutoShadow = { Type = "RenderableShadowCylinder", Opacity = 0.25, TerminatorType = "PENUMBRAL", - LightSource = "SUN", - Observer = "NEW HORIZONS", - Body = "PLUTO", - BodyFrame = "IAU_PLUTO", + LightSource = coreKernels.ID.Sun, + Observer = kernels.ID.NewHorizons, + Body = kernels.ID.Pluto, + BodyFrame = kernels.Frame.Pluto, Aberration = "NONE" }, GUI = { @@ -239,8 +240,6 @@ local PlutoShadow = { asset.onInitialize(function() - openspace.spice.loadKernel(kernels.NewHorizonsKernels) - openspace.addSceneGraphNode(PlutoProjection) openspace.addSceneGraphNode(PlutoBarycenterLabel) openspace.addSceneGraphNode(PlutoText) @@ -252,8 +251,6 @@ asset.onDeinitialize(function() openspace.removeSceneGraphNode(PlutoText) openspace.removeSceneGraphNode(PlutoBarycenterLabel) openspace.removeSceneGraphNode(PlutoProjection) - - openspace.spice.unloadKernel(kernels.NewHorizonsKernels) end) asset.export(PlutoProjection) diff --git a/data/assets/scene/solarsystem/missions/newhorizons/trail.asset b/data/assets/scene/solarsystem/missions/newhorizons/trail.asset index c6c1753240..6abb7c6966 100644 --- a/data/assets/scene/solarsystem/missions/newhorizons/trail.asset +++ b/data/assets/scene/solarsystem/missions/newhorizons/trail.asset @@ -1,4 +1,5 @@ local transforms = asset.require("./transforms") +local kernels = asset.require("./kernels") @@ -9,8 +10,8 @@ local TrailAtPluto = { Type = "RenderableTrailTrajectory", Translation = { Type = "SpiceTranslation", - Target = "NEW HORIZONS", - Observer = "PLUTO BARYCENTER" + Target = kernels.ID.NewHorizons, + Observer = kernels.ID.PlutoBarycenter }, Color = { 1.0, 0.8, 0.4 }, ShowFullTrail = true, diff --git a/data/assets/scene/solarsystem/missions/newhorizons/transforms.asset b/data/assets/scene/solarsystem/missions/newhorizons/transforms.asset index 62dd6bcd64..347db1f371 100644 --- a/data/assets/scene/solarsystem/missions/newhorizons/transforms.asset +++ b/data/assets/scene/solarsystem/missions/newhorizons/transforms.asset @@ -1,5 +1,6 @@ local sunTransforms = asset.require("scene/solarsystem/sun/transforms") local kernels = asset.require("./kernels") +local coreKernels = asset.require("spice/core") @@ -14,8 +15,8 @@ local PlutoBarycenterAccurate = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "PLUTO BARYCENTER", - Observer = "SSB" + Target = kernels.ID.PlutoBarycenter, + Observer = coreKernels.ID.SolarSystemBarycenter } }, GUI = { @@ -30,13 +31,13 @@ local NewHorizonsPosition = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "NEW HORIZONS", - Observer = "PLUTO BARYCENTER" + Target = kernels.ID.NewHorizons, + Observer = kernels.ID.PlutoBarycenter }, Rotation = { Type = "SpiceRotation", - SourceFrame = "NH_SPACECRAFT", - DestinationFrame = "GALACTIC" + SourceFrame = kernels.Frame.NewHorizons, + DestinationFrame = coreKernels.Frame.Galactic } }, GUI = { @@ -47,9 +48,6 @@ local NewHorizonsPosition = { asset.onInitialize(function() - openspace.spice.loadKernel(kernels.PlutoKernels) - openspace.spice.loadKernel(kernels.NewHorizonsKernels) - openspace.addSceneGraphNode(PlutoBarycenterAccurate) openspace.addSceneGraphNode(NewHorizonsPosition) end) @@ -57,9 +55,6 @@ end) asset.onDeinitialize(function() openspace.removeSceneGraphNode(NewHorizonsPosition) openspace.removeSceneGraphNode(PlutoBarycenterAccurate) - - openspace.spice.unloadKernel(kernels.NewHorizonsKernels) - openspace.spice.unloadKernel(kernels.PlutoKernels) end) asset.export(PlutoBarycenterAccurate) diff --git a/data/assets/scene/solarsystem/missions/osirisrex/actions.asset b/data/assets/scene/solarsystem/missions/osirisrex/actions.asset index c44984a77a..09f90f1fca 100644 --- a/data/assets/scene/solarsystem/missions/osirisrex/actions.asset +++ b/data/assets/scene/solarsystem/missions/osirisrex/actions.asset @@ -8,7 +8,7 @@ local FocusOsirisRex = { ]], Documentation = "Sets the focus of the camera on 'OsirisRex'", GuiPath = "/Missions/Osiris Rex", - isLocal = false + IsLocal = false } local FocusBennu = { @@ -21,7 +21,7 @@ local FocusBennu = { ]], Documentation = "Sets the focus of the camera on 'Bennu'", GuiPath = "/Missions/Osiris Rex", - isLocal = false + IsLocal = false } local SetupBennuApproach = { @@ -33,7 +33,7 @@ local SetupBennuApproach = { ]], Documentation = "Sets the time to the approach at Bennu", GuiPath = "/Missions/Osiris Rex", - isLocal = false + IsLocal = false } local SetupBennuSurvey = { @@ -45,7 +45,7 @@ local SetupBennuSurvey = { ]], Documentation = "Sets the time to the preliminary survey of Bennu", GuiPath = "/Missions/Osiris Rex", - isLocal = false + IsLocal = false } local SetupBennuEventB = { @@ -57,7 +57,7 @@ local SetupBennuEventB = { ]], Documentation = "Sets the time to the orbital B event", GuiPath = "/Missions/Osiris Rex", - isLocal = false + IsLocal = false } local SetupBennuReconEvent = { @@ -69,7 +69,7 @@ local SetupBennuReconEvent = { ]], Documentation = "Sets the time to the recon event", GuiPath = "/Missions/Osiris Rex", - isLocal = false + IsLocal = false } local ToggleSunMarker = { @@ -78,12 +78,12 @@ local ToggleSunMarker = { Command = [[ openspace.setPropertyValueSingle( "Scene.SunMarker.Renderable.Enabled", - not openspace.getPropertyValue("Scene.SunMarker.Renderable.Enabled") + not openspace.propertyValue("Scene.SunMarker.Renderable.Enabled") ) ]], Documentation = "Toggles the visibility of the text marking the location of the Sun", GuiPath = "/Missions/Osiris Rex", - isLocal = false + IsLocal = false } local AimAtBennu = { @@ -119,7 +119,7 @@ local SetLaunchTime = { ]], Documentation = "Look at the launch of OSIRIS-REx", GuiPath = "/Missions/Osiris Rex", - isLocal = false + IsLocal = false } local LookImageCapture = { @@ -133,9 +133,10 @@ local LookImageCapture = { ]], Documentation = "Look at the image capture of OSIRIS-REx", GuiPath = "/Missions/Osiris Rex", - isLocal = false + IsLocal = false } + asset.onInitialize(function() openspace.action.registerAction(FocusOsirisRex) openspace.action.registerAction(FocusBennu) @@ -177,7 +178,6 @@ asset.export("LookImageCapture", LookImageCapture.Identifier) asset.meta = { Name = "OsirisRex Actions", - Version = "1.0", Description = "Actions related to the OsirisRex mission", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/missions/osirisrex/bennu.asset b/data/assets/scene/solarsystem/missions/osirisrex/bennu.asset index 60e8a60bf6..bafdcab1f2 100644 --- a/data/assets/scene/solarsystem/missions/osirisrex/bennu.asset +++ b/data/assets/scene/solarsystem/missions/osirisrex/bennu.asset @@ -1,9 +1,11 @@ local transforms = asset.require("./transforms") -local sun = asset.require("scene/solarsystem/sun/sun") +local sun = asset.require("scene/solarsystem/sun/transforms") +local kernels = asset.require("./kernels") +local coreKernels = asset.require("spice/core") -local models = asset.syncedResource({ +local models = asset.resource({ Name = "Bennu Models", Type = "HttpSynchronization", Identifier = "bennu_models", @@ -11,22 +13,19 @@ local models = asset.syncedResource({ }) -local BennuBodyId = "2101955" - local Bennu = { Identifier = "Bennu", Parent = transforms.BennuBarycenter.Identifier, Transform = { Rotation = { Type = "SpiceRotation", - SourceFrame = "IAU_BENNU", - DestinationFrame = "GALACTIC" + SourceFrame = kernels.Frame.Bennu, + DestinationFrame = coreKernels.Frame.Galactic } }, Renderable = { - Enabled = false, Type = "RenderableModel", - Body = BennuBodyId, + Enabled = false, GeometryFile = models .. "Bennu_v20_200k_an.obj", LightSources = { sun.LightSource diff --git a/data/assets/scene/solarsystem/missions/osirisrex/bennu_projection.asset b/data/assets/scene/solarsystem/missions/osirisrex/bennu_projection.asset index 74f24bbd89..2b7e392ea6 100644 --- a/data/assets/scene/solarsystem/missions/osirisrex/bennu_projection.asset +++ b/data/assets/scene/solarsystem/missions/osirisrex/bennu_projection.asset @@ -1,23 +1,25 @@ local transforms = asset.require("./transforms") local sunTransforms = asset.require("scene/solarsystem/sun/transforms") +local kernels = asset.require("./kernels") +local coreKernels = asset.require("spice/core") -local models = asset.syncedResource({ +local models = asset.resource({ Name = "Bennu Models", Type = "HttpSynchronization", Identifier = "bennu_models", Version = 2 }) -local images = asset.syncedResource({ +local images = asset.resource({ Name = "Bennu Images Approach", Type = "HttpSynchronization", Identifier = "osirisrex_bennu_images_approach", Version = 1 }) -local imagesA = asset.syncedResource({ +local imagesA = asset.resource({ Name = "Bennu Images A", Type = "HttpSynchronization", Identifier = "osirisrex_bennu_images_orbit_a", @@ -25,35 +27,33 @@ local imagesA = asset.syncedResource({ }) -local BennuBodyId = "2101955" - local BennuProjection = { Identifier = "BennuProjection", Parent = transforms.BennuBarycenter.Identifier, Transform = { Rotation = { Type = "SpiceRotation", - SourceFrame = "IAU_BENNU", - DestinationFrame = "GALACTIC" + SourceFrame = kernels.Frame.Bennu, + DestinationFrame = coreKernels.Frame.Galactic } }, Renderable = { Enabled = true, Type = "RenderableModelProjection", - Body = BennuBodyId, + Body = kernels.ID.Bennu, GeometryFile = models .. "Bennu_v20_200k_an.obj", Projection = { Sequence = { images, imagesA }, SequenceType = "image-sequence", - Observer = "OSIRIS-REX", - Target = BennuBodyId, + Observer = kernels.ID.OsirisRex, + Target = kernels.ID.Bennu, Aberration = "NONE", TextureMap = true, DataInputTranslation = { Instruments = { ORX_OCAMS_POLYCAM = { DetectorType = "Camera", - Spice = { "ORX_OCAMS_POLYCAM" }, + Spice = { kernels.Frame.Polycam }, }, }, Target = { @@ -72,7 +72,7 @@ local BennuProjection = { } }, Instrument = { -- INVALID DATA - JUST FOR TESTING - Name = "ORX_OCAMS_POLYCAM", + Name = kernels.Frame.Polycam, Method = "ELLIPSOID", Aberration = "NONE", Fovy = 0.792, @@ -95,8 +95,8 @@ local BennuTrail = { Type = "RenderableTrailTrajectory", Translation = { Type = "SpiceTranslation", - Target = BennuBodyId, - Observer = "SSB" + Target = kernels.ID.Bennu, + Observer = coreKernels.ID.SolarSystemBarycenter }, Color = { 0.4, 0.0, 0.7 }, StartTime = "2015 JAN 01 00:00:00.000", diff --git a/data/assets/scene/solarsystem/missions/osirisrex/dashboard.asset b/data/assets/scene/solarsystem/missions/osirisrex/dashboard.asset index 14dc377f73..5427a98485 100644 --- a/data/assets/scene/solarsystem/missions/osirisrex/dashboard.asset +++ b/data/assets/scene/solarsystem/missions/osirisrex/dashboard.asset @@ -1,3 +1,8 @@ +local transforms = asset.require("./transforms") +local model = asset.require("./model") + + + local Spacing = { Type = "DashboardItemSpacing", Identifier = "OsirisRexSpacing", @@ -10,9 +15,9 @@ local Distance = { Identifier = "OsirisRexBennuDistance", GuiName = "OSIRIS-REx Bennu Distance", SourceType = "Node", - SourceNodeName = "OsirisRex", + SourceNodeName = model.OsirisRex.Identifier, DestinationType = "Node", - DestinationNodeName = "BennuBarycenter" + DestinationNodeName = transforms.BennuBarycenter.Identifier } local Instruments = { diff --git a/data/assets/scene/solarsystem/missions/osirisrex/imageplane.asset b/data/assets/scene/solarsystem/missions/osirisrex/imageplane.asset index 6dc8f08889..529a9e19f2 100644 --- a/data/assets/scene/solarsystem/missions/osirisrex/imageplane.asset +++ b/data/assets/scene/solarsystem/missions/osirisrex/imageplane.asset @@ -1,8 +1,9 @@ local transforms = asset.require("./transforms") +local kernels = asset.require("./kernels") -local textures = asset.syncedResource({ +local textures = asset.resource({ Name = "Bennu Textures", Type = "HttpSynchronization", Identifier = "bennu_textures", @@ -17,10 +18,10 @@ local ImagePlane = { Parent = transforms.BennuBarycenter.Identifier, Renderable = { Type = "RenderablePlaneProjection", - Frame = "IAU_BENNU", + Frame = kernels.Frame.Bennu, DefaultTarget = BennuBodyId, - Spacecraft = "OSIRIS-REX", - Instrument = "ORX_OCAMS_POLYCAM", + Spacecraft = kernels.ID.OsirisRex, + Instrument = kernels.Frame.Polycam, Moving = false, Texture = textures .. "defaultProj.png" }, diff --git a/data/assets/scene/solarsystem/missions/osirisrex/kernels.asset b/data/assets/scene/solarsystem/missions/osirisrex/kernels.asset index e3147a0153..c7cd4915f7 100644 --- a/data/assets/scene/solarsystem/missions/osirisrex/kernels.asset +++ b/data/assets/scene/solarsystem/missions/osirisrex/kernels.asset @@ -1,4 +1,8 @@ -local kernels = asset.syncedResource({ +local coreKernels = asset.require("spice/core") + + + +local data = asset.resource({ Name = "Osiris Rex Kernels", Type = "HttpSynchronization", Identifier = "osirisrex_kernels", @@ -6,111 +10,133 @@ local kernels = asset.syncedResource({ }) -local OsirisRexKernels = { - kernels .. "orx_v14.tf", - kernels .. "orx_ocams_v07.ti", - kernels .. "orx_rexis_v01.ti", - kernels .. "ORX_SCLKSCET.00061.tsc", - kernels .. "bennu_v17.tpc", - kernels .. "orx_struct_v04.bsp", - kernels .. "orx_sa_red_200106_v02.bc", - kernels .. "orx_sa_red_200107_v02.bc", - kernels .. "orx_sa_red_200108_v02.bc", - kernels .. "orx_sa_red_200109_v02.bc", - kernels .. "orx_sa_red_200110_v02.bc", - kernels .. "orx_sa_rel_200106_200112_v01.bc", - kernels .. "orx_sc_rel_160909_160911_v01.bc", - kernels .. "orx_sc_rel_160912_160918_v01.bc", - kernels .. "orx_sc_rel_160919_160925_v01.bc", - kernels .. "orx_sc_rel_160926_161002_v01.bc", - kernels .. "orx_sc_rel_181029_181104_v02.bc", - kernels .. "orx_sc_rel_190218_190224_v02.bc", - kernels .. "orx_sc_rel_200106_200112_v01.bc", - kernels .. "orx_sc_rel_201019_201025_v01.bc", - kernels .. "orx_sc_rel_201012_201018_v01.bc", - kernels .. "orx_sc_red_200106_v02.bc", - kernels .. "orx_sc_red_200107_v02.bc", - kernels .. "orx_sc_red_200108_v02.bc", - kernels .. "orx_sc_red_200109_v02.bc", - kernels .. "orx_sc_red_201020_v02.bc", - kernels .. "orx_sc_red_201017_v03.bc", - kernels .. "orx_sc_red_201018_v02.bc", - kernels .. "orx_sc_red_201019_v02.bc", - kernels .. "orx_r_160909_160910_v01.bc", - kernels .. "orx_r_160910_160913_v01.bc", - kernels .. "orx_r_160913_160915_v01.bc", - kernels .. "orx_r_160915_160919_v01.bc", - kernels .. "orx_r_160918_160922_v01.bc", - kernels .. "orx_r_160919_160922_v01.bc", - kernels .. "orx_r_200105_200107_v02.bc", - kernels .. "orx_r_200106_200108_v02.bc", - kernels .. "orx_r_200107_200109_v02.bc", - kernels .. "orx_r_200107_200112_v01.bc", - kernels .. "orx_r_200108_200110_v02.bc", - kernels .. "orx_r_200109_200111_v02.bc", - kernels .. "orx_r_201019_201021_v06.bc", - kernels .. "orx_r_201018_201021_v02.bc", - kernels .. "orx_r_201018_201020_v03.bc", - kernels .. "orx_r_201017_201019_v03.bc", - kernels .. "orx_p_160910_161005_xc001b_v01.bc", - kernels .. "orx_p_200106_200113_2002_od205_v01.bc", - kernels .. "orx_p_200106_200113_2002_od209_v01.bc", - kernels .. "orx_p_200106_200113_2002_od210_v01.bc", - kernels .. "orx_p_201019_201026_2043tag_od293_v03.bc", - kernels .. "orx_p_201012_201019_2042_od291_v04.bc", - kernels .. "orx_p_210411_210510_xq006_od297_v05.bc", - kernels .. "orx_p_210509_210513_xr001_adm_final_mod_od311_v01.bc", - kernels .. "orx_p_210509_210607_xr001_od298_v00.bc", - kernels .. "orx_p_230824_231008_src_release_od298_v00.bc", - kernels .. "OREX_20160904_M45_complete.bsp", - kernels .. "OREX_20160908_M60_complete.bsp", - kernels .. "orx_struct_polycam_v01.bc", - kernels .. "de424.bsp", - kernels .. "bennu_refdrmc_v1.bsp", - kernels .. "orx_160908_231024_pgaa2_day06m60.bsp", - kernels .. "orx_160908_231024_pgaa3_day06m60_v1.bsp", - kernels .. "orx_160909_161228_160919_od005_tcm1_v2.bsp", - kernels .. "orx_160909_161228_160930_od006_tcm1_v1.bsp", - kernels .. "orx_160909_170101_160912_od004_v1.bsp", - kernels .. "orx_160909_170101_161010_od008_v1.bsp", - kernels .. "spk_orx_160908_231024_pgaa2_day06m60_v3.bsp", - kernels .. "orx_160909_231024_refod009_v2.bsp", - kernels .. "orx_171006_231024_171005_refod027_v1.bsp", - kernels .. "orx_180301_181201_180921_od044_v1.bsp", - kernels .. "orx_180801_190302_181218_od077_v1.bsp", - kernels .. "orx_181203_190302_190104_od085_v1.bsp", - kernels .. "orx_181231_190305_190215_od099_v1.bsp", - kernels .. "orx_190201_190327_190315_od110_v1.bsp", - kernels .. "orx_190301_190424_190412_od125_v1.bsp", - kernels .. "orx_190401_190522_190508_od137_v1.bsp", - kernels .. "orx_190426_190605_190522_od143_v1.bsp", - kernels .. "orx_190511_190619_190603_od148_v1.bsp", - kernels .. "orx_190601_190625_190614_od154_v1.bsp", - kernels .. "orx_190612_190917_190730_od170_v1.bsp", - kernels .. "orx_190712_190917_190814_od175_v1.bsp", - kernels .. "orx_190809_191008_190923_od182_v1.bsp", - kernels .. "orx_190809_191015_191004_od187_v1.bsp", - kernels .. "orx_190915_191029_191014_od191_v1.bsp", - kernels .. "orx_191001_191105_191021_od194_v1.bsp", - kernels .. "orx_191015_191112_191030_od198_v1.bsp", - kernels .. "orx_191027_200101_191104_od200_v1.bsp", - kernels .. "orx_191101_200225_200214_od223_v1.bsp", - kernels .. "orx_200127_200324_200311_od232_v1.bsp", - kernels .. "orx_200305_200421_200410_od239_v1.bsp", - kernels .. "orx_200401_200418_200418_od242_v2.bsp", - kernels .. "orx_200414_200519_200504_od248_v1.bsp", - kernels .. "orx_200430_200714_200701_od263_v1.bsp", - kernels .. "orx_200616_200811_200727_od269_v1.bsp", - kernels .. "orx_200709_200814_200814_od276_v1.bsp", - kernels .. "orx_200811_200908_200828_od280_v1.bsp", - kernels .. "orx_200827_201020_201020_od294_v1.bsp", - kernels .. "orx_201020_201020_201020_od294_v1.bsp", - kernels .. "orx_201020_201109_201020_od294_v1.bsp", - kernels .. "orx_201020_210524_210103_od297_v1.bsp", - kernels .. "orx_210101_210330_210310_od302_v1.bsp", - kernels .. "orx_210115_210701_210426_od310-N-ADM-P_v1.bsp", - kernels .. "orx_210408_210701_210503_od311-N-ADM-F_v1.bsp", - kernels .. "orx_210509_231025_210119_od298-R-ADM1-P-DB1_v1.bsp" +local Kernels = { + data .. "orx_v14.tf", + data .. "orx_ocams_v07.ti", + data .. "orx_rexis_v01.ti", + data .. "ORX_SCLKSCET.00061.tsc", + data .. "bennu_v17.tpc", + data .. "orx_struct_v04.bsp", + data .. "orx_sa_red_200106_v02.bc", + data .. "orx_sa_red_200107_v02.bc", + data .. "orx_sa_red_200108_v02.bc", + data .. "orx_sa_red_200109_v02.bc", + data .. "orx_sa_red_200110_v02.bc", + data .. "orx_sa_rel_200106_200112_v01.bc", + data .. "orx_sc_rel_160909_160911_v01.bc", + data .. "orx_sc_rel_160912_160918_v01.bc", + data .. "orx_sc_rel_160919_160925_v01.bc", + data .. "orx_sc_rel_160926_161002_v01.bc", + data .. "orx_sc_rel_181029_181104_v02.bc", + data .. "orx_sc_rel_190218_190224_v02.bc", + data .. "orx_sc_rel_200106_200112_v01.bc", + data .. "orx_sc_rel_201019_201025_v01.bc", + data .. "orx_sc_rel_201012_201018_v01.bc", + data .. "orx_sc_red_200106_v02.bc", + data .. "orx_sc_red_200107_v02.bc", + data .. "orx_sc_red_200108_v02.bc", + data .. "orx_sc_red_200109_v02.bc", + data .. "orx_sc_red_201020_v02.bc", + data .. "orx_sc_red_201017_v03.bc", + data .. "orx_sc_red_201018_v02.bc", + data .. "orx_sc_red_201019_v02.bc", + data .. "orx_r_160909_160910_v01.bc", + data .. "orx_r_160910_160913_v01.bc", + data .. "orx_r_160913_160915_v01.bc", + data .. "orx_r_160915_160919_v01.bc", + data .. "orx_r_160918_160922_v01.bc", + data .. "orx_r_160919_160922_v01.bc", + data .. "orx_r_200105_200107_v02.bc", + data .. "orx_r_200106_200108_v02.bc", + data .. "orx_r_200107_200109_v02.bc", + data .. "orx_r_200107_200112_v01.bc", + data .. "orx_r_200108_200110_v02.bc", + data .. "orx_r_200109_200111_v02.bc", + data .. "orx_r_201019_201021_v06.bc", + data .. "orx_r_201018_201021_v02.bc", + data .. "orx_r_201018_201020_v03.bc", + data .. "orx_r_201017_201019_v03.bc", + data .. "orx_p_160910_161005_xc001b_v01.bc", + data .. "orx_p_200106_200113_2002_od205_v01.bc", + data .. "orx_p_200106_200113_2002_od209_v01.bc", + data .. "orx_p_200106_200113_2002_od210_v01.bc", + data .. "orx_p_201019_201026_2043tag_od293_v03.bc", + data .. "orx_p_201012_201019_2042_od291_v04.bc", + data .. "orx_p_210411_210510_xq006_od297_v05.bc", + data .. "orx_p_210509_210513_xr001_adm_final_mod_od311_v01.bc", + data .. "orx_p_210509_210607_xr001_od298_v00.bc", + data .. "orx_p_230824_231008_src_release_od298_v00.bc", + data .. "OREX_20160904_M45_complete.bsp", + data .. "OREX_20160908_M60_complete.bsp", + data .. "orx_struct_polycam_v01.bc", + data .. "de424.bsp", + data .. "bennu_refdrmc_v1.bsp", + data .. "orx_160908_231024_pgaa2_day06m60.bsp", + data .. "orx_160908_231024_pgaa3_day06m60_v1.bsp", + data .. "orx_160909_161228_160919_od005_tcm1_v2.bsp", + data .. "orx_160909_161228_160930_od006_tcm1_v1.bsp", + data .. "orx_160909_170101_160912_od004_v1.bsp", + data .. "orx_160909_170101_161010_od008_v1.bsp", + data .. "spk_orx_160908_231024_pgaa2_day06m60_v3.bsp", + data .. "orx_160909_231024_refod009_v2.bsp", + data .. "orx_171006_231024_171005_refod027_v1.bsp", + data .. "orx_180301_181201_180921_od044_v1.bsp", + data .. "orx_180801_190302_181218_od077_v1.bsp", + data .. "orx_181203_190302_190104_od085_v1.bsp", + data .. "orx_181231_190305_190215_od099_v1.bsp", + data .. "orx_190201_190327_190315_od110_v1.bsp", + data .. "orx_190301_190424_190412_od125_v1.bsp", + data .. "orx_190401_190522_190508_od137_v1.bsp", + data .. "orx_190426_190605_190522_od143_v1.bsp", + data .. "orx_190511_190619_190603_od148_v1.bsp", + data .. "orx_190601_190625_190614_od154_v1.bsp", + data .. "orx_190612_190917_190730_od170_v1.bsp", + data .. "orx_190712_190917_190814_od175_v1.bsp", + data .. "orx_190809_191008_190923_od182_v1.bsp", + data .. "orx_190809_191015_191004_od187_v1.bsp", + data .. "orx_190915_191029_191014_od191_v1.bsp", + data .. "orx_191001_191105_191021_od194_v1.bsp", + data .. "orx_191015_191112_191030_od198_v1.bsp", + data .. "orx_191027_200101_191104_od200_v1.bsp", + data .. "orx_191101_200225_200214_od223_v1.bsp", + data .. "orx_200127_200324_200311_od232_v1.bsp", + data .. "orx_200305_200421_200410_od239_v1.bsp", + data .. "orx_200401_200418_200418_od242_v2.bsp", + data .. "orx_200414_200519_200504_od248_v1.bsp", + data .. "orx_200430_200714_200701_od263_v1.bsp", + data .. "orx_200616_200811_200727_od269_v1.bsp", + data .. "orx_200709_200814_200814_od276_v1.bsp", + data .. "orx_200811_200908_200828_od280_v1.bsp", + data .. "orx_200827_201020_201020_od294_v1.bsp", + data .. "orx_201020_201020_201020_od294_v1.bsp", + data .. "orx_201020_201109_201020_od294_v1.bsp", + data .. "orx_201020_210524_210103_od297_v1.bsp", + data .. "orx_210101_210330_210310_od302_v1.bsp", + data .. "orx_210115_210701_210426_od310-N-ADM-P_v1.bsp", + data .. "orx_210408_210701_210503_od311-N-ADM-F_v1.bsp", + data .. "orx_210509_231025_210119_od298-R-ADM1-P-DB1_v1.bsp" } -asset.export("kernels", OsirisRexKernels) +local ID = { + OsirisRex = "OSIRIS-REX", + Bennu = "2101955" +} + +local Frame = { + OsirisRex = "ORX_SPACECRAFT", + Polycam = "ORX_OCAMS_POLYCAM", + Rexis = "ORX_REXIS", + Bennu = coreKernels.Frame.Bennu +} + + +asset.onInitialize(function() + openspace.spice.loadKernel(Kernels) +end) + +asset.onDeinitialize(function() + openspace.spice.unloadKernel(Kernels) +end) + +asset.export("ID", ID) +asset.export("Frame", Frame) diff --git a/data/assets/scene/solarsystem/missions/osirisrex/mission.asset b/data/assets/scene/solarsystem/missions/osirisrex/mission.asset index 5ddde1a336..d2d3e229d6 100644 --- a/data/assets/scene/solarsystem/missions/osirisrex/mission.asset +++ b/data/assets/scene/solarsystem/missions/osirisrex/mission.asset @@ -30,6 +30,7 @@ https://www.asteroidmission.org/wp-content/uploads/2018/10/SPP-Approach-Poster-1 --]] local Mission = { + Identifier = "OsirisRex", Name = "OSIRIS-REx", Description = "Launched on Sept. 8, 2016, the Origins, Spectral Interpretation, Resource Identification, Security-Regolith Explorer (OSIRIS-REx) spacecraft traveled to a near-Earth asteroid called Bennu (formerly 1999 RQ36), and collected a sample of the of rocks and material from the surface that it will return to Earth in 2023. The mission will help scientists investigate how planets formed and how life began, as well as improve our understanding of asteroids that could impact Earth.", Image = "https://www.nasa.gov/sites/default/files/styles/full_width_feature/public/thumbnails/image/osiris-rex-mission-logo12_copy.png", @@ -308,5 +309,5 @@ asset.onInitialize(function() end) asset.onDeinitialize(function() - openspace.unloadMission(Mission.Name) + openspace.unloadMission(Mission) end) diff --git a/data/assets/scene/solarsystem/missions/osirisrex/model.asset b/data/assets/scene/solarsystem/missions/osirisrex/model.asset index 51f43d3b60..647eea7f94 100644 --- a/data/assets/scene/solarsystem/missions/osirisrex/model.asset +++ b/data/assets/scene/solarsystem/missions/osirisrex/model.asset @@ -1,12 +1,13 @@ local transforms = asset.require("./transforms") -local sun = asset.require("scene/solarsystem/sun/sun") +local sun = asset.require("scene/solarsystem/sun/transforms") local sunTransforms = asset.require("scene/solarsystem/sun/transforms") local earthTransforms = asset.require("scene/solarsystem/planets/earth/transforms") local kernels = asset.require("./kernels") +local coreKernels = asset.require("spice/core") -local models = asset.syncedResource({ +local models = asset.resource({ Name = "Osiris Rex Models", Type = "HttpSynchronization", Identifier = "osirisrex_models", @@ -22,18 +23,17 @@ local OsirisRex = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "OSIRIS-REX", - Observer = "SSB" + Target = kernels.ID.OsirisRex, + Observer = coreKernels.ID.SolarSystemBarycenter }, Rotation = { Type = "SpiceRotation", - SourceFrame = "ORX_SPACECRAFT", - DestinationFrame = "GALACTIC" + SourceFrame = kernels.Frame.OsirisRex, + DestinationFrame = coreKernels.Frame.Galactic } }, Renderable = { Type = "RenderableModel", - Body = "OSIRIS-REX", GeometryFile = models .. "orx_base_resized_12_sep_2016.obj", LightSources = { sun.LightSource, @@ -60,13 +60,12 @@ local PolyCam = { }, Rotation = { Type = "SpiceRotation", - SourceFrame = "ORX_OCAMS_POLYCAM", - DestinationFrame = "ORX_SPACECRAFT" + SourceFrame = kernels.Frame.Polycam, + DestinationFrame = kernels.Frame.OsirisRex } }, Renderable = { Type = "RenderableModel", - Body = "OSIRIS-REX", GeometryFile = models .. "orx_polycam_resized_12_sep_2016.obj", LightSources = { sun.LightSource, @@ -86,9 +85,19 @@ local PolyCam = { local Rexis = { Identifier = "ORX_REXIS", Parent = OsirisRex.Identifier, + Transform = { + Translation = { + Type = "StaticTranslation", + Position = { 0, 0.3371, 0.2712 } + }, + Rotation = { + Type = "SpiceRotation", + SourceFrame = kernels.Frame.Rexis, + DestinationFrame = kernels.Frame.OsirisRex + } + }, Renderable = { Type = "RenderableModel", - Body = "OSIRIS-REX", GeometryFile = models .. "orx_rexis_resized_12_sep_2016.obj", LightSources = { sun.LightSource, @@ -99,17 +108,6 @@ local Rexis = { } } }, - Transform = { - Translation = { - Type = "StaticTranslation", - Position = { 0, 0.3371, 0.2712 } - }, - Rotation = { - Type = "SpiceRotation", - SourceFrame = "ORX_REXIS", - DestinationFrame = "ORX_SPACECRAFT" - } - }, GUI = { Name = "REXIS", Path = "/Solar System/Missions/OSIRIS REx/Instruments" @@ -122,14 +120,14 @@ local PolyCamFov = { Renderable = { Type = "RenderableFov", Body = "OSIRIS-REX", - Frame = "ORX_OCAMS_POLYCAM", + Frame = kernels.Frame.Polycam, RGB = { 0.8, 0.7, 0.7 }, Instrument = { - Name = "ORX_OCAMS_POLYCAM", + Name = kernels.Frame.Polycam, Method = "ELLIPSOID", Aberration = "NONE" }, - PotentialTargets = { BennuBodyId } + PotentialTargets = { kernels.ID.Bennu } }, GUI = { Name = "POLYCAM FOV", @@ -144,17 +142,17 @@ local PolyCamFov = { -- Parent = Rexis.Identifier, -- Renderable = { -- Type = "RenderableFov", --- Body = "OSIRIS-REX", --- Frame = "ORX_REXIS", +-- Body = kernels.Frame.OsirisRex, +-- Frame = kernels.Frame.Rexis, -- RGB = { 0.8, 0.7, 0.7 }, -- Instrument = { -- Name = "ORX_REXIS", -- Method = "ELLIPSOID", -- Aberration = "NONE" -- }, --- PotentialTargets = { BennuBodyId }, +-- PotentialTargets = { kernels.ID.Bennu }, -- FrameConversions = { --- [BennuBodyId] = "IAU_BENNU" +-- [kernels.ID.Bennu] = kernels.Frame.Bennu -- } -- }, -- GUI = { @@ -163,9 +161,8 @@ local PolyCamFov = { -- } -- } -asset.onInitialize(function() - openspace.spice.loadKernel(kernels.kernels) +asset.onInitialize(function() openspace.addSceneGraphNode(OsirisRex) openspace.addSceneGraphNode(PolyCam) openspace.addSceneGraphNode(Rexis) @@ -179,8 +176,6 @@ asset.onDeinitialize(function() openspace.removeSceneGraphNode(Rexis) openspace.removeSceneGraphNode(PolyCam) openspace.removeSceneGraphNode(OsirisRex) - - openspace.spice.unloadKernel(kernels.kernels) end) asset.export(OsirisRex) diff --git a/data/assets/scene/solarsystem/missions/osirisrex/trail.asset b/data/assets/scene/solarsystem/missions/osirisrex/trail.asset index 21b220636a..e3502cedd8 100644 --- a/data/assets/scene/solarsystem/missions/osirisrex/trail.asset +++ b/data/assets/scene/solarsystem/missions/osirisrex/trail.asset @@ -1,11 +1,11 @@ local transforms = asset.require("./transforms") local sunTransforms = asset.require("scene/solarsystem/sun/transforms") local earthTransforms = asset.require("scene/solarsystem/planets/earth/transforms") +local kernels = asset.require("./kernels") +local coreKernels = asset.require("spice/core") -local BennuBodyId = 2101955 - local OsirisRexTrailEarth = { Identifier = "OsirisRexTrailEarth", Parent = earthTransforms.EarthIAU.Identifier, @@ -13,9 +13,9 @@ local OsirisRexTrailEarth = { Type = "RenderableTrailTrajectory", Translation = { Type = "SpiceTranslation", - Target = "OSIRIS-REX", - Frame = "IAU_EARTH", - Observer = "EARTH" + Target = kernels.Frame.OsirisRex, + Frame = coreKernels.Frame.Earth, + Observer = coreKernels.ID.Earth }, Color = { 0.9, 0.9, 0.0 }, StartTime = "2016 SEP 8 23:05:00.50", @@ -35,8 +35,8 @@ local OsirisRexTrailSolarSystem = { Type = "RenderableTrailTrajectory", Translation = { Type = "SpiceTranslation", - Target = "OSIRIS-REX", - Observer = "SSB" + Target = kernels.ID.OsirisRex, + Observer = coreKernels.ID.SolarSystemBarycenter }, Color = { 0.2, 0.9, 0.2 }, StartTime = "2016 SEP 8 23:05:00.50", @@ -56,8 +56,8 @@ local OsirisRexTrailBennu = { Type = "RenderableTrailTrajectory", Translation = { Type = "SpiceTranslation", - Target = "OSIRIS-REX", - Observer = BennuBodyId + Target = kernels.ID.OsirisRex, + Observer = kernels.ID.Bennu }, Color = { 0.9, 0.2, 0.9 }, StartTime = "2018 SEP 4 00:00:00", diff --git a/data/assets/scene/solarsystem/missions/osirisrex/transforms.asset b/data/assets/scene/solarsystem/missions/osirisrex/transforms.asset index c4a34ec9e5..7820cade83 100644 --- a/data/assets/scene/solarsystem/missions/osirisrex/transforms.asset +++ b/data/assets/scene/solarsystem/missions/osirisrex/transforms.asset @@ -1,17 +1,17 @@ local transforms = asset.require("scene/solarsystem/sun/transforms") +local kernels = asset.require("./kernels") +local coreKernels = asset.require("spice/core") -local BennuBodyId = 2101955 - local BennuBarycenter = { Identifier = "BennuBarycenter", Parent = transforms.SolarSystemBarycenter.Identifier, Transform = { Translation = { Type = "SpiceTranslation", - Target = BennuBodyId, - Observer = "SSB" + Target = kernels.ID.Bennu, + Observer = coreKernels.ID.SolarSystemBarycenter } }, GUI = { diff --git a/data/assets/scene/solarsystem/missions/perseverance/actions.asset b/data/assets/scene/solarsystem/missions/perseverance/actions.asset index 63ecd648f1..62af6a1edc 100644 --- a/data/assets/scene/solarsystem/missions/perseverance/actions.asset +++ b/data/assets/scene/solarsystem/missions/perseverance/actions.asset @@ -20,7 +20,7 @@ local Setup = { ]], Documentation = "Sets time and layers for Perseverance landing", GuiPath = "/Missions/Perseverance", - isLocal = false + IsLocal = false } @@ -38,7 +38,6 @@ asset.export("Setup", Setup.Identifier) asset.meta = { Name = "Perseverance Actions", - Version = "1.0", Description = "Actions related to the Perseverance mission", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/missions/perseverance/kernels.asset b/data/assets/scene/solarsystem/missions/perseverance/kernels.asset new file mode 100644 index 0000000000..ec5204db90 --- /dev/null +++ b/data/assets/scene/solarsystem/missions/perseverance/kernels.asset @@ -0,0 +1,50 @@ +local coreKernels = asset.require("spice/core") + + + +local data = asset.resource({ + Name = "Mars 2020 Kernels", + Type = "HttpSynchronization", + Identifier = "perseverance_kernels", + Version = 2 +}) + + +local Kernels = { + data .. "m2020.tf", + data .. "m2020.tsc", + data .. "m2020_v04.tf", + + data .. "m2020_cruise_recon_nospin_v1.bc", + data .. "m2020_cruise_recon_rawrt_v1.bc", + data .. "m2020_cruise_recon_raweng_v1.bc", + data .. "m2020_edl_v01.bc", + + data .. "m2020_cruise_od138_v1.bsp", + data .. "m2020_edl_v01.bsp", + data .. "m2020_surf_rover_loc_0000_0089_v1.bsp" +} + +local ID = { + Perseverance = -168, + + Mars = coreKernels.ID.Mars, + MarsBarycenter = coreKernels.ID.MarsBarycenter +} + +local Frame = { + Mars = coreKernels.Frame.Mars +} + + +asset.onInitialize(function() + openspace.spice.loadKernel(Kernels) +end) + +asset.onDeinitialize(function() + openspace.spice.unloadKernel(Kernels) +end) + +asset.export("ID", ID) +asset.export("Frame", Frame) + diff --git a/data/assets/scene/solarsystem/missions/perseverance/mission.asset b/data/assets/scene/solarsystem/missions/perseverance/mission.asset index 6a27ddc505..db45229dae 100644 --- a/data/assets/scene/solarsystem/missions/perseverance/mission.asset +++ b/data/assets/scene/solarsystem/missions/perseverance/mission.asset @@ -1,4 +1,5 @@ local Mission = { + Identifier = "Perseverance", Name = "Mars 2020 Perseverance Events on Mars", Phases = { { @@ -34,5 +35,5 @@ asset.onInitialize(function() end) asset.onDeinitialize(function() - openspace.unloadMission(Mission.Name) + openspace.unloadMission(Mission) end) diff --git a/data/assets/scene/solarsystem/missions/perseverance/model.asset b/data/assets/scene/solarsystem/missions/perseverance/model.asset index 35e044dca2..36a73de73a 100644 --- a/data/assets/scene/solarsystem/missions/perseverance/model.asset +++ b/data/assets/scene/solarsystem/missions/perseverance/model.asset @@ -1,11 +1,12 @@ local trail = asset.require("./trail") local marsTransforms = asset.require("scene/solarsystem/planets/mars/transforms") -local sun = asset.require("scene/solarsystem/sun/sun") -local spice = asset.require("./spice") +local sun = asset.require("scene/solarsystem/sun/transforms") +local kernels = asset.require("./kernels") +local coreKernels = asset.require("spice/core") -local models = asset.syncedResource({ +local models = asset.resource({ Name = "Perseverance Model", Type = "HttpSynchronization", Identifier = "perseverance_models", @@ -16,41 +17,41 @@ local models = asset.syncedResource({ local TranslationKeyframes = { ["1850 JAN 01 00:00:00"] = { Type = "SpiceTranslation", - Target = spice.ID, - Observer = "MARS", - Frame = "IAU_MARS", + Target = kernels.ID.Perseverance, + Observer = kernels.ID.Mars, + Frame = kernels.Frame.Mars, FixedDate = "2020 JUL 17 13:56:43" }, ["2020 JUL 17 13:56:42"] = { Type = "SpiceTranslation", - Target = spice.ID, - Observer = "MARS", - Frame = "IAU_MARS", + Target = kernels.ID.Perseverance, + Observer = kernels.ID.Mars, + Frame = kernels.Frame.Mars, FixedDate = "2020 JUL 17 13:56:43" }, ["2020 JUL 17 13:56:43"] = { Type = "SpiceTranslation", - Target = spice.ID, - Observer = "MARS", - Frame = "IAU_MARS" + Target = kernels.ID.Perseverance, + Observer = kernels.ID.Mars, + Frame = kernels.Frame.Mars }, ["2020 JUL 17 13:56:44"] = { Type = "SpiceTranslation", - Target = spice.ID, - Observer = "MARS", - Frame = "IAU_MARS" + Target = kernels.ID.Perseverance, + Observer = kernels.ID.Mars, + Frame = kernels.Frame.Mars }, ["2021 FEB 18 20:43:48"] = { Type = "SpiceTranslation", - Target = spice.ID, - Observer = "MARS", - Frame = "IAU_MARS" + Target = kernels.ID.Perseverance, + Observer = kernels.ID.Mars, + Frame = kernels.Frame.Mars }, ["2021 FEB 18 20:43:49"] = { Type = "SpiceTranslation", - Target = spice.ID, - Observer = "MARS", - Frame = "IAU_MARS", + Target = kernels.ID.Perseverance, + Observer = kernels.ID.Mars, + Frame = kernels.Frame.Mars, FixedDate = "2021 FEB 18 20:43:48" } } @@ -61,13 +62,13 @@ local PerseveranceNode = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "MARS", - Observer = "MARS BARYCENTER" + Target = kernels.ID.Mars, + Observer = kernels.ID.MarsBarycenter }, Rotation = { Type = "SpiceRotation", - SourceFrame = "IAU_MARS", - DestinationFrame = "GALACTIC" + SourceFrame = kernels.Frame.Mars, + DestinationFrame = coreKernels.Frame.Galactic } }, GUI = { @@ -110,7 +111,6 @@ local Body = { Parent = PerseveranceModel.Identifier, Renderable = { Type = "RenderableModel", - Body = "MARS SCIENCE LABORATORY", GeometryFile = models .. "Perseverance.obj", LightSources = { sun.LightSource, @@ -130,8 +130,6 @@ local Body = { asset.onInitialize(function() - openspace.spice.loadKernel(spice.Kernels) - openspace.addSceneGraphNode(PerseveranceNode) openspace.addSceneGraphNode(Perseverance) openspace.addSceneGraphNode(PerseveranceModel) @@ -143,8 +141,6 @@ asset.onDeinitialize(function() openspace.removeSceneGraphNode(PerseveranceModel) openspace.removeSceneGraphNode(Perseverance) openspace.removeSceneGraphNode(PerseveranceNode) - - openspace.spice.unloadKernel(spice.Kernels) end) asset.export(PerseveranceNode) diff --git a/data/assets/scene/solarsystem/missions/perseverance/shortcuts.asset b/data/assets/scene/solarsystem/missions/perseverance/shortcuts.asset index 20eb2f1d94..83654bb2f3 100644 --- a/data/assets/scene/solarsystem/missions/perseverance/shortcuts.asset +++ b/data/assets/scene/solarsystem/missions/perseverance/shortcuts.asset @@ -4,11 +4,11 @@ local PerseveranceLandingTime = "2021 FEB 18 20:32:16" local PerseveranceNavigationState = [[ { Anchor = "Perseverance", - Pitch = 0.567457E-4, - Position = { 1.240506E1,-1.369270E1,-2.423553E0 }, + Pitch = 0.0000567457, + Position = { 12.40506, -13.69270, -2.423553 }, ReferenceFrame = "Root", - Up = { 0.441211E0,0.247019E0,0.862737E0 }, - Yaw = -0.446853E-4 + Up = { 0.441211, 0.247019, 0.862737 }, + Yaw = -0.0000446853 } ]] diff --git a/data/assets/scene/solarsystem/missions/perseverance/spice.asset b/data/assets/scene/solarsystem/missions/perseverance/spice.asset deleted file mode 100644 index 73d631ed94..0000000000 --- a/data/assets/scene/solarsystem/missions/perseverance/spice.asset +++ /dev/null @@ -1,26 +0,0 @@ -local kernels = asset.syncedResource({ - Name = "Mars 2020 Kernels", - Type = "HttpSynchronization", - Identifier = "perseverance_kernels", - Version = 2 -}) - - -local m2020_kernels = { - kernels .. "m2020.tf", - kernels .. "m2020.tsc", - kernels .. "m2020_v04.tf", - - kernels .. "m2020_cruise_recon_nospin_v1.bc", - kernels .. "m2020_cruise_recon_rawrt_v1.bc", - kernels .. "m2020_cruise_recon_raweng_v1.bc", - kernels .. "m2020_edl_v01.bc", - - kernels .. "m2020_cruise_od138_v1.bsp", - kernels .. "m2020_edl_v01.bsp", - kernels .. "m2020_surf_rover_loc_0000_0089_v1.bsp" -} - -asset.export("Kernels", m2020_kernels) -asset.export("ID", -168) - diff --git a/data/assets/scene/solarsystem/missions/perseverance/trail.asset b/data/assets/scene/solarsystem/missions/perseverance/trail.asset index 912a7222c6..97d4c232d8 100644 --- a/data/assets/scene/solarsystem/missions/perseverance/trail.asset +++ b/data/assets/scene/solarsystem/missions/perseverance/trail.asset @@ -1,6 +1,7 @@ local sunTransforms = asset.require("scene/solarsystem/sun/transforms") local marsTransforms = asset.require("scene/solarsystem/planets/mars/transforms") -local spice = asset.require("./spice") +local kernels = asset.require("./kernels") +local coreKernels = asset.require("spice/core") @@ -13,16 +14,16 @@ local PerseveranceTrailSun = { Parent = sunTransforms.SolarSystemBarycenter.Identifier, Renderable = { Type = "RenderableTrailTrajectory", + Enabled = false, Translation = { Type = "SpiceTranslation", - Target = spice.ID, - Observer = "SSB" + Target = kernels.ID.Perseverance, + Observer = coreKernels.ID.SolarSystemBarycenter }, Color = { 0.2, 0.7, 0.1 }, StartTime = StartTime, EndTime = EndTime, - SampleInterval = 100, - Enabled = false + SampleInterval = 100 }, GUI = { Name = "Perseverance Trail (Sun)", @@ -35,16 +36,16 @@ local PerseveranceTrailMars = { Parent = marsTransforms.MarsBarycenter.Identifier, Renderable = { Type = "RenderableTrailTrajectory", + Enabled = false, Translation = { Type = "SpiceTranslation", - Target = spice.ID, - Observer = "MARS BARYCENTER" + Target = kernels.ID.Perseverance, + Observer = kernels.ID.MarsBarycenter }, Color = { 0.7, 0.9, 0.6 }, StartTime = ApproachMars, EndTime = "2021 FEB 18 20:43:48", - SampleInterval = 100, - Enabled = false + SampleInterval = 100 }, GUI = { Name = "Perseverance Trail (Mars)", @@ -54,8 +55,6 @@ local PerseveranceTrailMars = { asset.onInitialize(function() - openspace.spice.loadKernel(spice.Kernels) - openspace.addSceneGraphNode(PerseveranceTrailSun) openspace.addSceneGraphNode(PerseveranceTrailMars) end) @@ -63,8 +62,6 @@ end) asset.onDeinitialize(function() openspace.removeSceneGraphNode(PerseveranceTrailMars) openspace.removeSceneGraphNode(PerseveranceTrailSun) - - openspace.spice.unloadKernel(spice.Kernels) end) asset.export(PerseveranceTrailSun) diff --git a/data/assets/scene/solarsystem/missions/pioneer/pioneer10.asset b/data/assets/scene/solarsystem/missions/pioneer/pioneer10.asset index d89b7809e3..57ed722850 100644 --- a/data/assets/scene/solarsystem/missions/pioneer/pioneer10.asset +++ b/data/assets/scene/solarsystem/missions/pioneer/pioneer10.asset @@ -1,9 +1,10 @@ local sunTransforms = asset.require("scene/solarsystem/sun/transforms") local model = asset.require("scene/solarsystem/missions/pioneer/pioneermodel") +local coreKernels = asset.require("spice/core") -local kernelsFolder = asset.syncedResource({ +local kernelsFolder = asset.resource({ Name = "Pioneer Kernels", Type = "HttpSynchronization", Identifier = "pioneer_10_spice", @@ -20,7 +21,7 @@ local Pioneer10 = { Translation = { Type = "SpiceTranslation", Target = Pioneer10ID, - Observer = "SSB" + Observer = coreKernels.ID.SolarSystemBarycenter } }, Renderable = model.PioneerModel, @@ -39,14 +40,12 @@ local Pioneer10Trail = { Translation = { Type = "SpiceTranslation", Target = Pioneer10ID, - Observer = "SSB" + Observer = coreKernels.ID.SolarSystemBarycenter }, Color = { 0.70, 0.50, 0.20 }, StartTime = "1972 MAR 03 02:04:00", EndTime = "1990 JAN 02 00:00:00", - EnableFade = false, - SampleInterval = 6545 * 2 - -- 6545 is the number of days between the Start and End time (aka sample every 2d) + EnableFade = false }, GUI = { Name = "Pioneer 10 Trail (SPICE)", @@ -78,7 +77,6 @@ asset.export(Pioneer10Trail) asset.meta = { Name = "Pioneer 10", - Version = "1.0", Description = [[Pioneer 10 Model and Trail. Driven by SPICE data for high accuracy from March 3rd, 1972 to January 2nd, 1990]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/missions/pioneer/pioneer11.asset b/data/assets/scene/solarsystem/missions/pioneer/pioneer11.asset index 6b58a8e995..4db1484673 100644 --- a/data/assets/scene/solarsystem/missions/pioneer/pioneer11.asset +++ b/data/assets/scene/solarsystem/missions/pioneer/pioneer11.asset @@ -1,9 +1,10 @@ local sunTransforms = asset.require("scene/solarsystem/sun/transforms") local model = asset.require("scene/solarsystem/missions/pioneer/pioneermodel") +local coreKernels = asset.require("spice/core") -local kernelsFolder = asset.syncedResource({ +local kernelsFolder = asset.resource({ Name = "Pioneer Kernels", Type = "HttpSynchronization", Identifier = "pioneer_11_spice", @@ -25,7 +26,7 @@ local Pioneer11 = { Translation = { Type = "SpiceTranslation", Target = Pioneer11ID, - Observer = "SSB" + Observer = coreKernels.ID.SolarSystemBarycenter } }, Renderable = model.PioneerModel, @@ -44,14 +45,12 @@ local Pioneer11Trail = { Translation = { Type = "SpiceTranslation", Target = Pioneer11ID, - Observer = "SSB" + Observer = coreKernels.ID.SolarSystemBarycenter }, Color = { 0.70, 0.50, 0.20 }, StartTime = "1973 APR 06 02:25:00.000", EndTime = "1990 JAN 02 00:00:00.000", - EnableFade = false, - -- 6087 is the number of days between the Start and End time (so sample every 2d) - SampleInterval = 6087 * 2 + EnableFade = false }, GUI = { Name = "Pioneer 11 Trail (SPICE)", @@ -83,7 +82,6 @@ asset.export(Pioneer11Trail) asset.meta = { Name = "Pioneer 11", - Version = "1.0", Description = [[Pioneer 11 Model and Trail. Driven by SPICE data for high accuracy from April 6th, 1973 to January 2nd, 1990]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/missions/pioneer/pioneermodel.asset b/data/assets/scene/solarsystem/missions/pioneer/pioneermodel.asset index bd138d8ee8..855ff414b8 100644 --- a/data/assets/scene/solarsystem/missions/pioneer/pioneermodel.asset +++ b/data/assets/scene/solarsystem/missions/pioneer/pioneermodel.asset @@ -1,8 +1,8 @@ -local sun = asset.require("scene/solarsystem/sun/sun") +local sun = asset.require("scene/solarsystem/sun/transforms") -local modelFolder = asset.syncedResource({ +local modelFolder = asset.resource({ Name = "Pioneer 10/11 Models", Type = "HttpSynchronization", Identifier = "pioneer_10_11_model", @@ -29,7 +29,6 @@ asset.export("PioneerModel", ModelRenderable) asset.meta = { Name = "Pioneer Model", - Version = "1.0", Description = [[Pioneer model asset. Used by both pioneer 10 and pioneer 11 asset. Untextured version of model from NASA 3D resources]], Author = "NASA", diff --git a/data/assets/scene/solarsystem/missions/rosetta/67p.asset b/data/assets/scene/solarsystem/missions/rosetta/67p.asset index b472df33f6..27c0dafd75 100644 --- a/data/assets/scene/solarsystem/missions/rosetta/67p.asset +++ b/data/assets/scene/solarsystem/missions/rosetta/67p.asset @@ -1,22 +1,24 @@ local transforms = asset.require("scene/solarsystem/sun/transforms") +local kernels = asset.require("./kernels") +local coreKernels = asset.require("spice/core") -local textures = asset.syncedResource({ +local textures = asset.resource({ Name = "67P Textures", Type = "HttpSynchronization", Identifier = "67p_textures", Version = 2 }) -local models = asset.syncedResource({ +local models = asset.resource({ Name = "67P Models", Type = "HttpSynchronization", Identifier = "67p_models", Version = 1 }) -local images = asset.syncedResource({ +local images = asset.resource({ Name = "Rosetta Images", Type = "HttpSynchronization", Identifier = "rosettaimages", @@ -31,11 +33,16 @@ local imagesDestination = images .. "images" local Barycenter = { Identifier = "67PBarycenter", Parent = transforms.SolarSystemBarycenter.Identifier, + TimeFrame = { + Type = "TimeFrameInterval", + Start = "2014 JAN 01 00:00:00.000", + End = "2017 JAN 01 00:00:00.000" + }, Transform = { Translation = { Type = "SpiceTranslation", - Target = "CHURYUMOV-GERASIMENKO", - Observer = "SSB" + Target = kernels.ID.ChurymovGerasimenko, + Observer = coreKernels.ID.SolarSystemBarycenter } }, GUI = { @@ -50,8 +57,8 @@ local Comet67P = { Transform = { Rotation = { Type = "SpiceRotation", - SourceFrame = "67P/C-G_CK", - DestinationFrame = "GALACTIC" + SourceFrame = kernels.Frame.ChurymovGerasimenko, + DestinationFrame = coreKernels.Frame.Galactic } }, BoundingSphere = 5000.0, @@ -61,8 +68,8 @@ local Comet67P = { Projection = { Sequence = { imagesDestination }, SequenceType = "image-sequence", - Observer = "ROSETTA", - Target = "CHURYUMOV-GERASIMENKO", + Observer = kernels.ID.Rosetta, + Target = kernels.ID.ChurymovGerasimenko, Aberration = "NONE", TextureMap = true, ShadowMap = true, @@ -70,7 +77,7 @@ local Comet67P = { Instrument = { NAVCAM = { DetectorType = "Camera", - Spice = { "ROS_NAVCAM-A" } + Spice = { kernels.Frame.NavCam } } }, Target = { @@ -95,7 +102,7 @@ local Comet67P = { } }, Instrument = { - Name = "ROS_NAVCAM-A", + Name = kernels.Frame.NavCam, Method = "ELLIPSOID", Aberration = "NONE", Fovy = 5.00, @@ -116,8 +123,8 @@ local Trail67P = { Type = "RenderableTrailTrajectory", Translation = { Type = "SpiceTranslation", - Target = "CHURYUMOV-GERASIMENKO", - Observer = "SSB" + Target = kernels.ID.ChurymovGerasimenko, + Observer = coreKernels.ID.SolarSystemBarycenter }, Color = { 0.1, 0.9, 0.2 }, StartTime = "2014 JAN 01 00:00:00.000", @@ -130,7 +137,6 @@ local Trail67P = { } } --- actions local Focus67p = { Identifier = "os.rosetta.Focus67p", Name = "Focus on 67P", @@ -141,7 +147,7 @@ local Focus67p = { ]], Documentation = "Sets the focus of the camera on 67P", GuiPath = "/Missions/Rosetta", - isLocal = false + IsLocal = false } local ClearImageProjections = { @@ -152,7 +158,7 @@ local ClearImageProjections = { ]], Documentation = "Removes all image projections from 67P", GuiPath = "/Missions/Rosetta", - isLocal = false + IsLocal = false } local Toggle67pProjection = { @@ -161,12 +167,12 @@ local Toggle67pProjection = { Command = [[ openspace.setPropertyValueSingle( "Scene.67P.Renderable.ProjectionComponent.PerformProjection", - not openspace.getPropertyValue("Scene.67P.Renderable.ProjectionComponent.PerformProjection") + not openspace.propertyValue("Scene.67P.Renderable.ProjectionComponent.PerformProjection") ) ]], Documentation = "Enables or disables the image projection on 67P", GuiPath = "/Missions/Rosetta", - isLocal = false + IsLocal = false } diff --git a/data/assets/scene/solarsystem/missions/rosetta/actions.asset b/data/assets/scene/solarsystem/missions/rosetta/actions.asset index 3b97f170f7..81b11f4dfb 100644 --- a/data/assets/scene/solarsystem/missions/rosetta/actions.asset +++ b/data/assets/scene/solarsystem/missions/rosetta/actions.asset @@ -2,14 +2,14 @@ local ToggleOuterPlanetaryTrails = { Identifier = "os.rosetta.ToggleOuterPlanetaryTrails", Name = "Toggle outer planetary trails", Command = [[ - local list = openspace.getProperty("{planetTrail_giants}.Renderable.Enabled") + local list = openspace.property("{planetTrail_giants}.Renderable.Enabled") for _,v in pairs(list) do - openspace.setPropertyValueSingle(v, not openspace.getPropertyValue(v)) + openspace.setPropertyValueSingle(v, not openspace.propertyValue(v)) end ]], Documentation = "Toggles the visibility of all trails further from the Sun than 67P", GuiPath = "/Missions/Rosetta", - isLocal = false + IsLocal = false } @@ -27,7 +27,6 @@ asset.export("ToggleOuterPlanetaryTrails", ToggleOuterPlanetaryTrails.Identifier asset.meta = { Name = "Rosetta actions", - Version = "1.0", Description = "Actions related to the Rosetta mission", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/missions/rosetta/dashboard.asset b/data/assets/scene/solarsystem/missions/rosetta/dashboard.asset index 04c76ffb27..6091b75d85 100644 --- a/data/assets/scene/solarsystem/missions/rosetta/dashboard.asset +++ b/data/assets/scene/solarsystem/missions/rosetta/dashboard.asset @@ -1,4 +1,5 @@ -asset.require("./rosetta") +local rosetta = asset.require("./rosetta") +local cg = asset.require("./67p") @@ -14,9 +15,9 @@ local Distance = { Identifier = "Rosetta67PDistance", GuiName = "Rosetta 67P Distance", SourceType = "Node", - SourceNodeName = "Rosetta", + SourceNodeName = rosetta.Rosetta.Identifier, DestinationType = "Node", - DestinationNodeName = "67P" + DestinationNodeName = cg.Comet67P.Identifier } local Instruments = { diff --git a/data/assets/scene/solarsystem/missions/rosetta/kernels.asset b/data/assets/scene/solarsystem/missions/rosetta/kernels.asset new file mode 100644 index 0000000000..3d4766270f --- /dev/null +++ b/data/assets/scene/solarsystem/missions/rosetta/kernels.asset @@ -0,0 +1,94 @@ +local data = asset.resource({ + Name = "Rosetta Kernels", + Type = "HttpSynchronization", + Identifier = "rosetta_kernels", + Version = 2 +}) + + +local Kernels = { + data .. "ROS_160929_STEP.TSC", + + data .. "RORB_DV_257_03___T19_00345.BSP", + data .. "CORB_DV_257_03___T19_00345.BSP", + data .. "LORB_C_G_FIXED_RBD_7_V2_0.BSP", + data .. "LORB_ROS_SC_PRESEP_V1_0.BSP", + + data .. "ATNR_P040302093352_T6_00127.BC", + + data .. "ROS_STRUCT_V8.BSP", + + data .. "ROS_ALICE_V17.TI", + data .. "ROS_CIVA_V11.TI", + data .. "ROS_CONSERT_V11.TI", + data .. "ROS_COSIMA_V15.TI", + data .. "ROS_DIM_V11.TI", + data .. "ROS_GIADA_V12.TI", + data .. "ROS_MIDAS_V11.TI", + data .. "ROS_MIRO_V11.TI", + data .. "ROS_NAVCAM_V03.TI", + data .. "ROS_OSIRIS_V17.TI", + data .. "ROS_ROLIS_V03.TI", + data .. "ROS_ROSINA_V12.TI", + data .. "ROS_RPC_V20.TI", + + data .. "ROS_V38.TF", + + data .. "RATT_DV_257_02_01_T6_00344.BC", + data .. "RATT_DV_223_01_01_T6_00302.BC", + data .. "RATT_DV_145_01_01_T6_00216.BC", + + data .. "CATT_DV_257_03_______00344.BC", + data .. "CATT_DV_223_02_______00302.BC", + data .. "CATT_DV_145_02_______00216.BC", + + data .. "ROS_HGA_2004_V0002.BC", + data .. "ROS_HGA_2005_V0002.BC", + data .. "ROS_HGA_2006_V0002.BC", + data .. "ROS_HGA_2007_V0002.BC", + data .. "ROS_HGA_2008_V0020.BC", + data .. "ROS_HGA_2009_V0053.BC", + data .. "ROS_HGA_2010_V0047.BC", + data .. "ROS_HGA_2011_V0019.BC", + data .. "ROS_HGA_2014_V0045.BC", + data .. "ROS_HGA_2015_V0054.BC", + data .. "ROS_HGA_2016_V0043.BC", + + data .. "ROS_SA_2004_V0002.BC", + data .. "ROS_SA_2005_V0002.BC", + data .. "ROS_SA_2006_V0002.BC", + data .. "ROS_SA_2007_V0002.BC", + data .. "ROS_SA_2008_V0039.BC", + data .. "ROS_SA_2009_V0055.BC", + data .. "ROS_SA_2010_V0053.BC", + data .. "ROS_SA_2011_V0021.BC", + data .. "ROS_SA_2014_V0048.BC", + data .. "ROS_SA_2015_V0043.BC", + data .. "ROS_SA_2016_V0042.BC", + + data .. "ROS_CG_RAD_V10.TPC" +} + +local ID = { + Rosetta = "ROSETTA", + Philae = "PHILAE", + ChurymovGerasimenko = "CHURYUMOV-GERASIMENKO" +} + +local Frame = { + Rosetta = "ROS_SPACECRAFT", + NavCam = "ROS_NAVCAM-A", + ChurymovGerasimenko = "67P/C-G_CK" +} + + +asset.onInitialize(function() + openspace.spice.loadKernel(Kernels) +end) + +asset.onDeinitialize(function() + openspace.spice.unloadKernel(Kernels) +end) + +asset.export("ID", ID) +asset.export("Frame", Frame) diff --git a/data/assets/scene/solarsystem/missions/rosetta/mission.asset b/data/assets/scene/solarsystem/missions/rosetta/mission.asset index d2e87043f5..3ee1cbb585 100644 --- a/data/assets/scene/solarsystem/missions/rosetta/mission.asset +++ b/data/assets/scene/solarsystem/missions/rosetta/mission.asset @@ -1,6 +1,7 @@ -- Source: https://solarsystem.nasa.gov/missions/rosetta-philae/in-depth/ local Mission = { + Identifier = "Rosetta", Name = "Rosetta", TimeRange = { Start = "2004 MAR 02 00:00:00", End = "2016 SEP 30 00:00:00" }, Image = "https://www.cosmos.esa.int/documents/522118/522182/Rosetta_logo.png/cd85878d-2fac-e086-e32a-df0eaee5e505?t=1614026031720", @@ -113,5 +114,5 @@ asset.onInitialize(function() end) asset.onDeinitialize(function() - openspace.unloadMission(Mission.Name) + openspace.unloadMission(Mission) end) diff --git a/data/assets/scene/solarsystem/missions/rosetta/rosetta.asset b/data/assets/scene/solarsystem/missions/rosetta/rosetta.asset index c18ba5bfa2..cd03949867 100644 --- a/data/assets/scene/solarsystem/missions/rosetta/rosetta.asset +++ b/data/assets/scene/solarsystem/missions/rosetta/rosetta.asset @@ -1,73 +1,18 @@ -local sun = asset.require("scene/solarsystem/sun/sun") +local sun = asset.require("scene/solarsystem/sun/transforms") local sunTransforms = asset.require("scene/solarsystem/sun/transforms") local transforms = asset.require("./67p") +local kernels = asset.require("./kernels") +local coreKernels = asset.require("spice/core") -local models = asset.syncedResource({ +local models = asset.resource({ Name = "Rosetta Models", Type = "HttpSynchronization", Identifier = "rosetta_model", Version = 5 }) -local kernels = asset.syncedResource({ - Name = "Rosetta Kernels", - Type = "HttpSynchronization", - Identifier = "rosetta_kernels", - Version = 1 -}) - - -local RosettaKernels = { - kernels .. "ROS_160718_STEP.TSC", - kernels .. "ros_triv.tsc", - - kernels .. "CORB_DV_243_01___T19_00325.BSP", - kernels .. "CORB_DV_223_01___T19_00302.BSP", - kernels .. "CORB_DV_145_01___T19_00216.BSP", - - kernels .. "LORB_DV_236_01___T19_00318.BSP", - kernels .. "LORB_DV_223_01___T19_00302.BSP", - kernels .. "LORB_DV_145_01___T19_00216.BSP", - - kernels .. "RORB_DV_243_01___T19_00325.BSP", - kernels .. "RORB_DV_223_01___T19_00302.BSP", - kernels .. "RORB_DV_145_01___T19_00216.BSP", - - kernels .. "ATNR_P040302093352_00127.BC", - - kernels .. "ROS_STRUCT_V5.BSP", - - kernels .. "ROS_NAVCAM_V01.TI", - - kernels .. "ROS_CHURYUMOV_V01.TF", - kernels .. "ROS_V26.TF", - - -- CK - -- Rosetta attitude - kernels .. "RATT_DV_243_01_01____00325.BC", - kernels .. "RATT_DV_223_01_01____00302.BC", - kernels .. "RATT_DV_145_01_01____00216.BC", - - -- Comet attitude - kernels .. "CATT_DV_243_01_______00325.BC", - kernels .. "CATT_DV_223_01_______00302.BC", - kernels .. "CATT_DV_145_01_______00216.BC", - - -- High gain antenna - kernels .. "ROS_HGA_2016_V0035.BC", - kernels .. "ROS_HGA_2015_V0053.BC", - kernels .. "ROS_HGA_2014_V0044.BC", - - -- Solar arrays - kernels .. "ROS_SA_2016_V0034.BC", - kernels .. "ROS_SA_2015_V0042.BC", - kernels .. "ROS_SA_2014_V0047.BC", - - kernels .. "ROS_CGS_RSOC_V03.TPC" -} - local RotationMatrix = { 0, 1, 0, 0, 0, 0, 1, 0, @@ -78,16 +23,21 @@ local RotationMatrix = { local RosettaPosition = { Identifier = "RosettaPosition", Parent = sunTransforms.SolarSystemBarycenter.Identifier, + TimeFrame = { + Type = "TimeFrameInterval", + Start = "2014 JAN 01 00:00:00.000", + End = "2016 OCT 01 00:00:00.000" + }, Transform = { Translation = { Type = "SpiceTranslation", - Target = "ROSETTA", - Observer = "SSB" + Target = kernels.ID.Rosetta, + Observer = coreKernels.ID.SolarSystemBarycenter }, Rotation = { Type = "SpiceRotation", - SourceFrame = "ROS_SPACECRAFT", - DestinationFrame = "GALACTIC" + SourceFrame = kernels.Frame.Rosetta, + DestinationFrame = coreKernels.Frame.Galactic } }, GUI = { @@ -132,13 +82,13 @@ local PhilaePosition = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "PHILAE", - Observer = "CHURYUMOV-GERASIMENKO" + Target = kernels.ID.Philae, + Observer = kernels.ID.ChurymovGerasimenko }, Rotation = { Type = "SpiceRotation", - SourceFrame = "ROS_SPACECRAFT", - DestinationFrame = "GALACTIC", + SourceFrame = kernels.Frame.Rosetta, + DestinationFrame = coreKernels.Frame.Galactic } }, GUI = { @@ -152,6 +102,10 @@ local Philae = { Identifier = "Philae", Parent = PhilaePosition.Identifier, Transform = { + Translation = { + Type = "StaticTranslation", + Position = { 1.0, 0.0, -1.25 } + }, Rotation = { Type = "StaticRotation", Rotation = { 0.0, math.pi / 2.0, 0.0 } @@ -189,11 +143,11 @@ local NavCamFov = { Parent = NavCam.Identifier, Renderable = { Type = "RenderableFov", - Body = "ROSETTA", - Frame = "ROS_NAVCAM-A", + Body = kernels.ID.Rosetta, + Frame = kernels.Frame.NavCam, RGB = { 0.8, 0.7, 0.7 }, Instrument = { - Name = "ROS_NAVCAM-A", + Name = kernels.Frame.NavCam, Method = "ELLIPSOID", Aberration = "NONE" }, @@ -213,10 +167,10 @@ local ImagePlane = { Parent = transforms.Comet67P.Identifier, Renderable = { Type = "RenderablePlaneProjection", - Frame = "67P/C-G_CK", + Frame = kernels.Frame.ChurymovGerasimenko, DefaultTarget = "CHURYUMOV-GERASIMENKO", - Spacecraft = "ROSETTA", - Instrument = "ROS_NAVCAM-A", + Spacecraft = kernels.ID.Rosetta, + Instrument = kernels.Frame.NavCam, Moving = false, Texture = models .. "defaultProj.png" }, @@ -233,8 +187,8 @@ local RosettaCometTrail = { Type = "RenderableTrailTrajectory", Translation = { Type = "SpiceTranslation", - Target = "ROSETTA", - Observer = "CHURYUMOV-GERASIMENKO" + Target = kernels.ID.Rosetta, + Observer = kernels.ID.ChurymovGerasimenko }, Color = { 0.288, 0.375, 0.934 }, StartTime = "2014 AUG 01 12:00:00", @@ -254,8 +208,8 @@ local PhilaeTrail = { Type = "RenderableTrailTrajectory", Translation = { Type = "SpiceTranslation", - Target = "PHILAE", - Observer = "CHURYUMOV-GERASIMENKO" + Target = kernels.ID.Philae, + Observer = kernels.ID.ChurymovGerasimenko }, Color = { 0.8, 0.5, 1.0 }, StartTime = "2014 NOV 12 08:35:00", @@ -278,7 +232,7 @@ local FocusRosetta = { ]], Documentation = "Sets the focus of the camera on Rosetta", GuiPath = "/Missions/Rosetta", - isLocal = false + IsLocal = false } local SetupLanderRelease = { @@ -289,7 +243,7 @@ local SetupLanderRelease = { ]], Documentation = "Jumps to the time when the Philae lander is released", GuiPath = "/Missions/Rosetta", - isLocal = false + IsLocal = false } local ToggleImagePlane = { @@ -298,12 +252,12 @@ local ToggleImagePlane = { Command = [[ openspace.setPropertyValueSingle( "Scene.ImagePlaneRosetta.Renderable.Enabled", - not openspace.getPropertyValue("Scene.ImagePlaneRosetta.Renderable.Enabled") + not openspace.propertyValue("Scene.ImagePlaneRosetta.Renderable.Enabled") ) ]], Documentation = "Toggles the visibility of the free floating image plane", GuiPath = "/Missions/Rosetta", - isLocal = false + IsLocal = false } local TogglePhilaeTrail = { @@ -312,18 +266,16 @@ local TogglePhilaeTrail = { Command = [[ openspace.setPropertyValueSingle( "Scene.PhilaeTrail.Renderable.Enabled", - not openspace.getPropertyValue("Scene.PhilaeTrail.Renderable.Enabled") + not openspace.propertyValue("Scene.PhilaeTrail.Renderable.Enabled") ) ]], Documentation = "Toggles the visibility of Philae's trail", GuiPath = "/Missions/Rosetta", - isLocal = false + IsLocal = false } asset.onInitialize(function() - openspace.spice.loadKernel(RosettaKernels) - openspace.addSceneGraphNode(RosettaPosition) openspace.addSceneGraphNode(Rosetta) openspace.addSceneGraphNode(PhilaePosition) @@ -355,8 +307,6 @@ asset.onDeinitialize(function() openspace.removeSceneGraphNode(PhilaePosition) openspace.removeSceneGraphNode(Rosetta) openspace.removeSceneGraphNode(RosettaPosition) - - openspace.spice.unloadKernel(RosettaKernels) end) asset.export(RosettaPosition) diff --git a/data/assets/scene/solarsystem/missions/voyager/actions.asset b/data/assets/scene/solarsystem/missions/voyager/actions.asset index 44d11901c6..293e1d8abb 100644 --- a/data/assets/scene/solarsystem/missions/voyager/actions.asset +++ b/data/assets/scene/solarsystem/missions/voyager/actions.asset @@ -6,7 +6,7 @@ local SetupJupiterApproach = { ]], Documentation = "Sets the time for Voyager's approach to Jupiter", GuiPath = "/Missions/Voyager", - isLocal = false + IsLocal = false } local SetupSaturnApproach = { @@ -17,7 +17,7 @@ local SetupSaturnApproach = { ]], Documentation = "Sets the time for Voyager's approach to Saturn", GuiPath = "/Missions/Voyager", - isLocal = false + IsLocal = false } local JupiterFocus = { @@ -30,7 +30,7 @@ local JupiterFocus = { ]], Documentation = "Set the camera focus to Jupiter", GuiPath = "/Missions/Voyager", - isLocal = false + IsLocal = false } local SaturnFocus = { @@ -43,21 +43,21 @@ local SaturnFocus = { ]], Documentation = "Sets the camera focus on Saturn", GuiPath = "/Missions/Voyager", - isLocal = false + IsLocal = false } local ToggleMinorMoonTrails = { Identifier = "os.voyager.ToggleMinorMoonTrails", Name = "Toggle minor trails", Command = [[ - local list = openspace.getProperty("{moonTrail_minor}.Renderable.Enabled") + local list = openspace.property("{moonTrail_minor}.Renderable.Enabled") for _,v in pairs(list) do - openspace.setPropertyValueSingle(v, not openspace.getPropertyValue(v)) + openspace.setPropertyValueSingle(v, not openspace.propertyValue(v)) end ]], Documentation = "Toggles the trails of the minor moons", GuiPath = "/Trails", - isLocal = false + IsLocal = false } @@ -87,7 +87,6 @@ asset.export("ToggleMinorMoonTrails", ToggleMinorMoonTrails.Identifier) asset.meta = { Name = "Voyager Actions", - Version = "1.0", Description = "Actions related to the Voyager 1 and 2 missions", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/missions/voyager/dashboard.asset b/data/assets/scene/solarsystem/missions/voyager/dashboard.asset index 45307f17fc..64ab43fa87 100644 --- a/data/assets/scene/solarsystem/missions/voyager/dashboard.asset +++ b/data/assets/scene/solarsystem/missions/voyager/dashboard.asset @@ -1,11 +1,16 @@ +local voyager1 = asset.require("./voyager1") +local voyager2 = asset.require("./voyager2") +local earth = asset.require("scene/solarsystem/planets/earth/earth") + + local DistanceVoyager1 = { Type = "DashboardItemDistance", Identifier = "Voyager1Distance", GuiName = "Voyager 1 - Earth Distance", SourceType = "Node", - SourceNodeName = "Voyager_1", + SourceNodeName = voyager1.Voyager_1.Identifier, DestinationType = "Node", - DestinationNodeName = "Earth", + DestinationNodeName = earth.Earth.Identifier, Enabled = asset.enabled } @@ -14,9 +19,9 @@ local DistanceVoyager2 = { Identifier = "Voyager2Distance", GuiName = "Voyager 2 - Earth Distance", SourceType = "Node", - SourceNodeName = "Voyager_2", + SourceNodeName = voyager2.Voyager_2.Identifier, DestinationType = "Node", - DestinationNodeName = "Earth", + DestinationNodeName = earth.Earth.Identifier, Enabled = asset.enabled } diff --git a/data/assets/scene/solarsystem/missions/voyager/mission.asset b/data/assets/scene/solarsystem/missions/voyager/mission.asset index 9431085a89..23b712834d 100644 --- a/data/assets/scene/solarsystem/missions/voyager/mission.asset +++ b/data/assets/scene/solarsystem/missions/voyager/mission.asset @@ -5,6 +5,7 @@ -- are approximate and need fixing local Mission = { + Identifier = "Voyager", Name = "Voyager", Image = "https://upload.wikimedia.org/wikipedia/commons/8/87/Voyager_-_mission_logo.png", Description = "The twin Voyager 1 and 2 spacecraft are exploring where nothing from Earth has flown before. Continuing on their more-than-40-year journey since their 1977 launches, they each are much farther away from Earth and the sun than Pluto. In August 2012, Voyager 1 made the historic entry into interstellar space, the region between stars, filled with material ejected by the death of nearby stars millions of years ago. Voyager 2 entered interstellar space on November 5, 2018 and scientists hope to learn more about this region. Both spacecraft are still sending scientific information about their surroundings through the Deep Space Network, or DSN. The primary mission was the exploration of Jupiter and Saturn. After making a string of discoveries there — such as active volcanoes on Jupiter's moon Io and intricacies of Saturn's rings — the mission was extended. Voyager 2 went on to explore Uranus and Neptune, and is still the only spacecraft to have visited those outer planets. The adventurers' current mission, the Voyager Interstellar Mission (VIM), will explore the outermost edge of the Sun's domain. And beyond.", @@ -56,11 +57,11 @@ local Mission = { }, { Name = "Reached 100 astronomical units", - Date = "2006 AUG 16 00:00:00", + Date = "2006 AUG 16 00:00:00" }, { Name = "Voyager 1 enters interstellar space", - Date = "2012 AUG 01 00:00:00", + Date = "2012 AUG 01 00:00:00" } }, Phases = { @@ -108,7 +109,7 @@ local Mission = { { Name = "Voyager 2 Neptune Encounter", TimeRange = { Start = "1989 AUG 25 00:00:00", End = "1989 AUG 25 00:00:00" } - } + } } } } @@ -120,5 +121,5 @@ asset.onInitialize(function() end) asset.onDeinitialize(function() - openspace.unloadMission(Mission.Name) + openspace.unloadMission(Mission) end) diff --git a/data/assets/scene/solarsystem/missions/voyager/voyager1.asset b/data/assets/scene/solarsystem/missions/voyager/voyager1.asset index 14e4e19228..c328d4a974 100644 --- a/data/assets/scene/solarsystem/missions/voyager/voyager1.asset +++ b/data/assets/scene/solarsystem/missions/voyager/voyager1.asset @@ -1,20 +1,20 @@ -local sun = asset.require("scene/solarsystem/sun/sun") local sunTransforms = asset.require("scene/solarsystem/sun/transforms") +local coreKernels = asset.require("spice/core") -local models = asset.syncedResource({ +local models = asset.resource({ Name = "Voyager Model", Type = "HttpSynchronization", Identifier = "voyager_model", - Version = 1 + Version = 2 }) -local kernels = asset.syncedResource({ +local kernels = asset.resource({ Name = "Voyager 1 Kernels", Type = "HttpSynchronization", Identifier = "voyager1_spice", - Version = 1 + Version = 2 }) @@ -25,8 +25,9 @@ local Kernels = { kernels .. "voyager_1.ST+1991_a54418u.merged.bsp", kernels .. "vgr1_jup230.bsp", kernels .. "vgr1_sat337.bsp", + kernels .. "vgr1.x2100.bsp", kernels .. "vgr1_super.bc", - kernels .. "vgr1_super_v2.bc" + kernels .. "vgr1_super_v2.bc", } local RotationMatrix = { @@ -48,7 +49,7 @@ local Voyager1 = { Rotation = { Type = "SpiceRotation", SourceFrame = "VG1_SC_BUS", - DestinationFrame = "GALACTIC", + DestinationFrame = coreKernels.Frame.Galactic, TimeFrame = { Type = "TimeFrameInterval", Start = "1977-SEP-05 14:10:11.786", @@ -56,60 +57,26 @@ local Voyager1 = { } } }, + Renderable = { + Type = "RenderableModel", + Enabled = asset.enabled, + GeometryFile = models .. "Voyager.glb", + ModelTransform = RotationMatrix, + LightSources = { + sunTransforms.LightSource, + { + Identifier = "Camera", + Type = "CameraLightSource", + Intensity = 0.5 + } + } + }, GUI = { Name = "Voyager 1", Path = "/Solar System/Missions/Voyager 1" } } -local Voyager1Main = { - Identifier = "Voyager_1_Main", - Parent = Voyager1.Identifier, - Renderable = { - Type = "RenderableModel", - Enabled = asset.enabled, - GeometryFile = models .. "voyager-main.obj", - ModelTransform = RotationMatrix, - LightSources = { - sun.LightSource, - { - Identifier = "Camera", - Type = "CameraLightSource", - Intensity = 0.5 - } - } - }, - Tag = { "voyager1_part" }, - GUI = { - Name = "Voyager 1 Main", - Path = "/Solar System/Missions/Voyager 1" - } -} - -local Voyager1Antenna = { - Identifier = "Voyager_1_Antenna", - Parent = Voyager1.Identifier, - Renderable = { - Type = "RenderableModel", - Enabled = asset.enabled, - GeometryFile = models .. "voyager-antenna.obj", - ModelTransform = RotationMatrix, - LightSources = { - sun.LightSource, - { - Identifier = "Camera", - Type = "CameraLightSource", - Intensity = 0.5 - } - } - }, - Tag = { "voyager1_part" }, - GUI = { - Name = "Voyager 1 Antenna", - Path = "/Solar System/Missions/Voyager 1" - } -} - -- The trails are organized as follows. The cruise phases can be resolved in relatively -- low resolution since they are just straight lines -- The encounter phases should be much higher resolution or otherwise artifacts would @@ -123,13 +90,11 @@ local VoyagerTrailCruiseEarthJupiter = { Translation = { Type = "SpiceTranslation", Target = "VOYAGER 1", - Observer = "SSB" + Observer = coreKernels.ID.SolarSystemBarycenter }, Color = { 0.70, 0.50, 0.20 }, StartTime = "1977 SEP 05", - EndTime = "1979 MAR 04", - -- 545 is the number of days between the Start and End time - SampleInterval = 545 * 2 + EndTime = "1979 MAR 04" }, Tag = { "voyager1_trail" }, GUI = { @@ -147,7 +112,7 @@ local VoyagerTrailEncounterJupiter = { Translation = { Type = "SpiceTranslation", Target = "VOYAGER 1", - Observer = "SSB" + Observer = coreKernels.ID.SolarSystemBarycenter }, Color = { 0.70, 0.50, 0.20 }, EnableFade = false, @@ -172,14 +137,12 @@ local VoyagerTrailCruiseJupiterSaturn = { Translation = { Type = "SpiceTranslation", Target = "VOYAGER 1", - Observer = "SSB" + Observer = coreKernels.ID.SolarSystemBarycenter }, EnableFade = false, Color = { 0.70, 0.50, 0.20 }, StartTime = "1979 MAR 09", - EndTime = "1980 NOV 11", - -- 618 is the number of days between the Start and End time - SampleInterval = 618 * 2 + EndTime = "1980 NOV 11" }, Tag = { "voyager1_trail" }, GUI = { @@ -197,7 +160,7 @@ local VoyagerTrailEncounterSaturn = { Translation = { Type = "SpiceTranslation", Target = "VOYAGER 1", - Observer = "SSB" + Observer = coreKernels.ID.SolarSystemBarycenter }, EnableFade = false, Color = { 0.70, 0.50, 0.20 }, @@ -222,14 +185,12 @@ local VoyagerTrailCruiseSaturnInf = { Translation = { Type = "SpiceTranslation", Target = "VOYAGER 1", - Observer = "SSB" + Observer = coreKernels.ID.SolarSystemBarycenter }, EnableFade = false, Color = { 0.70, 0.50, 0.20 }, StartTime = "1980 NOV 16", - EndTime = "2300 JAN 01", - -- 116558 is the number of days between the Start and End time - SampleInterval = 116558 * 2 + EndTime = "2100 JAN 01" }, Tag = { "voyager1_trail" }, GUI = { @@ -249,7 +210,7 @@ local FocusVoyager1 = { ]], Documentation = "Set camera focus to Voyager 1", GuiPath = "/Missions/Voyager", - isLocal = false + IsLocal = false } @@ -257,8 +218,6 @@ asset.onInitialize(function() openspace.spice.loadKernel(Kernels) openspace.addSceneGraphNode(Voyager1) - openspace.addSceneGraphNode(Voyager1Main) - openspace.addSceneGraphNode(Voyager1Antenna) openspace.addSceneGraphNode(VoyagerTrailCruiseEarthJupiter) openspace.addSceneGraphNode(VoyagerTrailEncounterJupiter) openspace.addSceneGraphNode(VoyagerTrailCruiseJupiterSaturn) @@ -276,18 +235,25 @@ asset.onDeinitialize(function() openspace.removeSceneGraphNode(VoyagerTrailCruiseJupiterSaturn) openspace.removeSceneGraphNode(VoyagerTrailEncounterJupiter) openspace.removeSceneGraphNode(VoyagerTrailCruiseEarthJupiter) - openspace.removeSceneGraphNode(Voyager1Antenna) - openspace.removeSceneGraphNode(Voyager1Main) openspace.removeSceneGraphNode(Voyager1) openspace.spice.unloadKernel(Kernels) end) asset.export(Voyager1) -asset.export(Voyager1Main) -asset.export(Voyager1Antenna) asset.export(VoyagerTrailCruiseEarthJupiter) asset.export(VoyagerTrailEncounterJupiter) asset.export(VoyagerTrailCruiseJupiterSaturn) asset.export(VoyagerTrailEncounterSaturn) asset.export(VoyagerTrailCruiseSaturnInf) + +asset.meta = { + Name = "Voyager 1 Model and Trails", + Description = [[ + Voyager 1 model and trails from 1977 SEP 05 to 2100 JAN 01. Model credit: + NASA Visualization Technology Applications And Development (VTAD) + ]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/missions/voyager/voyager2.asset b/data/assets/scene/solarsystem/missions/voyager/voyager2.asset index 4c6543dfb4..178428d12c 100644 --- a/data/assets/scene/solarsystem/missions/voyager/voyager2.asset +++ b/data/assets/scene/solarsystem/missions/voyager/voyager2.asset @@ -1,20 +1,20 @@ -local sun = asset.require("scene/solarsystem/sun/sun") local sunTransforms = asset.require("scene/solarsystem/sun/transforms") +local coreKernels = asset.require("spice/core") -local models = asset.syncedResource({ +local models = asset.resource({ Name = "Voyager Model", Type = "HttpSynchronization", Identifier = "voyager_model", - Version = 1 + Version = 2 }) -local kernels = asset.syncedResource({ +local kernels = asset.resource({ Name = "Voyager 2 Kernels", Type = "HttpSynchronization", Identifier = "voyager2_spice", - Version = 1 + Version = 2 }) @@ -27,6 +27,7 @@ local Kernels = { kernels .. "vgr2_sat337.bsp", kernels .. "vgr2_ura083.bsp", kernels .. "vgr2_nep081.bsp", + kernels .. "vgr2.x2100.bsp", kernels .. "vgr2_super.bc", kernels .. "vgr2_super_v2.bc" } @@ -42,6 +43,11 @@ local RotationMatrix = { local Voyager2 = { Identifier = "Voyager_2", Parent = sunTransforms.SolarSystemBarycenter.Identifier, + TimeFrame = { + Type = "TimeFrameInterval", + Start = "1977-AUG-20 16:07:06.535", + End = "2027-DEC-27" + }, Transform = { Translation = { Type = "SpiceTranslation", @@ -51,11 +57,20 @@ local Voyager2 = { Rotation = { Type = "SpiceRotation", SourceFrame = "VG2_SC_BUS", - DestinationFrame = "GALACTIC", - TimeFrame = { - Type = "TimeFrameInterval", - Start = "1977-AUG-20 16:07:06.535", - End = "2027-DEC-27" + DestinationFrame = coreKernels.Frame.Galactic + } + }, + Renderable = { + Type = "RenderableModel", + Enabled = asset.enabled, + GeometryFile = models .. "Voyager.glb", + ModelTransform = RotationMatrix, + LightSources = { + sunTransforms.LightSource, + { + Identifier = "Camera", + Type = "CameraLightSource", + Intensity = 0.5 } } }, @@ -65,54 +80,6 @@ local Voyager2 = { } } -local Voyager2Main = { - Identifier = "Voyager_2_Main", - Parent = Voyager2.Identifier, - Renderable = { - Type = "RenderableModel", - Enabled = asset.enabled, - GeometryFile = models .. "voyager-main.obj", - ModelTransform = RotationMatrix, - LightSources = { - sun.LightSource, - { - Identifier = "Camera", - Type = "CameraLightSource", - Intensity = 0.5 - } - } - }, - Tag = { "voyager2_part" }, - GUI = { - Name = "Voyager 2 Main", - Path = "/Solar System/Missions/Voyager 2" - } -} - -local Voyager2Antenna = { - Identifier = "Voyager_2_Antenna", - Parent = Voyager2.Identifier, - Renderable = { - Type = "RenderableModel", - Enabled = asset.enabled, - GeometryFile = models .. "voyager-antenna.obj", - ModelTransform = RotationMatrix, - LightSources = { - sun.LightSource, - { - Identifier = "Camera", - Type = "CameraLightSource", - Intensity = 0.5 - } - } - }, - Tag = { "voyager2_part" }, - GUI = { - Name = "Voyager 2 Antenna", - Path = "/Solar System/Missions/Voyager 2" - } -} - -- The trails are organized as follows. The cruise phases can be resolved in relatively -- low resolution since they are just straight lines -- The encounter phases should be much higher resolution or otherwise artifacts would @@ -122,6 +89,7 @@ local VoyagerTrailCruiseEarthJupiter = { Parent = sunTransforms.SolarSystemBarycenter.Identifier, Renderable = { Type = "RenderableTrailTrajectory", + Enabled = asset.enabled, Translation = { Type = "SpiceTranslation", Target = "VOYAGER 2", @@ -129,10 +97,7 @@ local VoyagerTrailCruiseEarthJupiter = { }, Color = { 0.70, 0.50, 0.20 }, StartTime = "1977-AUG-20 16:07:06.535", - EndTime = "1979 JUL 06", - -- 669 is the number of days between the Start and End time - SampleInterval = 669 * 2, - Enabled = asset.enabled + EndTime = "1979 JUL 06" }, Tag = { "voyager2_trail" }, GUI = { @@ -180,9 +145,7 @@ local VoyagerTrailCruiseJupiterSaturn = { EnableFade = false, Color = { 0.70, 0.50, 0.20 }, StartTime = "1979 JUL 15", - EndTime = "1981 AUG 23", - -- 770 is the number of days between the Start and End time - SampleInterval = 770 * 2 + EndTime = "1981 AUG 23" }, Tag = { "voyager2_trail" }, GUI = { @@ -230,9 +193,7 @@ local VoyagerTrailCruiseSaturnUranus = { EnableFade = false, Color = { 0.70, 0.50, 0.20 }, StartTime = "1981 AUG 30", - EndTime = "1986 JAN 22", - -- 1971 is the number of days between the Start and End time - SampleInterval = 1971 * 2 + EndTime = "1986 JAN 22" }, Tag = { "voyager2_trail" }, GUI = { @@ -280,9 +241,7 @@ local VoyagerTrailCruiseUranusNeptune = { EnableFade = false, Color = { 0.70, 0.50, 0.20 }, StartTime = "1986 JAN 27", - EndTime = "1989 AUG 24", - -- 1305 is the number of days between the Start and End time - SampleInterval = 1305 * 2 + EndTime = "1989 AUG 24" }, Tag = { "voyager2_trail" }, GUI = { @@ -307,8 +266,7 @@ local VoyagerTrailEncounterNeptune = { -- @TODO: Probably an off-by-one bug in RenderableTrailTrajectory? StartTime = "1989 AUG 23 22:30:00", EndTime = "1989 AUG 26", - SampleInterval = 100, - Enabled = asset.enabled + SampleInterval = 100 }, Tag = { "voyager2_trail" }, GUI = { @@ -331,9 +289,7 @@ local VoyagerTrailCruiseNeptuneInf = { EnableFade = false, Color = { 0.70, 0.50, 0.20 }, StartTime = "1989 AUG 26", - EndTime = "2300 JAN 01", - -- 113353 is the number of days between the Start and End time - SampleInterval = 113353 * 2 + EndTime = "2100 JAN 01" }, Tag = { "voyager2_trail" }, GUI = { @@ -352,7 +308,7 @@ local FocusVoyager2 = { ]], Documentation = "Set camera focus to Voyager 2", GuiPath = "/Missions/Voyager", - isLocal = false + IsLocal = false } @@ -362,8 +318,6 @@ asset.onInitialize(function() openspace.action.registerAction(FocusVoyager2) openspace.addSceneGraphNode(Voyager2) - openspace.addSceneGraphNode(Voyager2Main) - openspace.addSceneGraphNode(Voyager2Antenna) openspace.addSceneGraphNode(VoyagerTrailCruiseEarthJupiter) openspace.addSceneGraphNode(VoyagerTrailEncounterJupiter) openspace.addSceneGraphNode(VoyagerTrailCruiseJupiterSaturn) @@ -385,8 +339,6 @@ asset.onDeinitialize(function() openspace.removeSceneGraphNode(VoyagerTrailCruiseJupiterSaturn) openspace.removeSceneGraphNode(VoyagerTrailEncounterJupiter) openspace.removeSceneGraphNode(VoyagerTrailCruiseEarthJupiter) - openspace.removeSceneGraphNode(Voyager2Antenna) - openspace.removeSceneGraphNode(Voyager2Main) openspace.removeSceneGraphNode(Voyager2) openspace.action.removeAction(FocusVoyager2) @@ -395,8 +347,6 @@ asset.onDeinitialize(function() end) asset.export(Voyager2) -asset.export(Voyager2Main) -asset.export(Voyager2Antenna) asset.export(VoyagerTrailCruiseEarthJupiter) asset.export(VoyagerTrailEncounterJupiter) asset.export(VoyagerTrailCruiseJupiterSaturn) @@ -406,3 +356,14 @@ asset.export(VoyagerTrailEncounterUranus) asset.export(VoyagerTrailCruiseUranusNeptune) asset.export(VoyagerTrailEncounterNeptune) asset.export(VoyagerTrailCruiseNeptuneInf) + +asset.meta = { + Name = "Voyager 2 Model and Trails", + Description = [[ + Voyager 2 model and trails from 1977 AUG 20 16:07:06.535 to 2100 JAN 01. Model credit: + NASA Visualization Technology Applications And Development (VTAD) + ]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/missions/voyagerpioneer/voyager1_2__pioneer10_11.asset b/data/assets/scene/solarsystem/missions/voyagerpioneer/voyager1_2__pioneer10_11.asset index ba8948f0d9..d8fa9d58ac 100644 --- a/data/assets/scene/solarsystem/missions/voyagerpioneer/voyager1_2__pioneer10_11.asset +++ b/data/assets/scene/solarsystem/missions/voyagerpioneer/voyager1_2__pioneer10_11.asset @@ -1,11 +1,11 @@ -local voyager_horizons = asset.syncedResource({ +local voyager_horizons = asset.resource({ Name = "Voyager horizons", Type = "HttpSynchronization", Identifier = "voyager_horizons", Version = 1 }) -local pioneer_horizons = asset.syncedResource({ +local pioneer_horizons = asset.resource({ Name = "Pioneer horizons", Type = "HttpSynchronization", Identifier = "pioneer_horizons", @@ -13,8 +13,6 @@ local pioneer_horizons = asset.syncedResource({ }) -local SampleInterval = 24 * 60 * 60 - local Voyager1 = { Identifier = "Voyager1", Parent = "SolarSystemBarycenter", @@ -34,8 +32,7 @@ local Voyager1 = { Fade = 5.0, StartTime = "1977 SEP 06 00:00:00", EndTime = "2030 JAN 01 00:00:00", - SampleInterval = SampleInterval, - TimeStampSubsampleFactor = 1 + SampleInterval = openspace.time.secondsPerDay() }, GUI = { Name = "Voyager 1 Trail", @@ -64,8 +61,7 @@ local Voyager2 = { Fade = 5.0, StartTime = "1977 AUG 21 00:00:00", EndTime = "2030 JAN 01 00:00:00", - SampleInterval = SampleInterval, - TimeStampSubsampleFactor = 1 + SampleInterval = openspace.time.secondsPerDay() }, GUI = { Name = "Voyager 2 Trail", @@ -94,8 +90,7 @@ local Pioneer10 = { Fade = 5.0, StartTime = "1972 MAR 04 00:00:00", EndTime = "2030 JAN 01 00:00:00", - SampleInterval = SampleInterval, - TimeStampSubsampleFactor = 1 + SampleInterval = openspace.time.secondsPerDay() }, GUI = { Name = "Pioneer 10 Trail", @@ -124,8 +119,7 @@ local Pioneer11 ={ Fade = 5.0, StartTime = "1973 APR 07 00:00:00", EndTime = "2030 JAN 01 00:00:00", - SampleInterval = SampleInterval, - TimeStampSubsampleFactor = 1 + SampleInterval = openspace.time.secondsPerDay() }, GUI = { Name = "Pioneer 11 Trail", @@ -159,7 +153,6 @@ asset.export(Pioneer11) asset.meta = { Name = "Pioneer and Voyager Trails", - Version = "1.1", Description = [[Pioneer 10, Pioneer 11, Voyager 1 and Voyager 2 trails. Driven by JPL Horizons data for better performance then spice but lower resolution. Data is from shortly after mission launches until January 1st, 2030]], diff --git a/data/assets/scene/solarsystem/planets/base_layers.asset b/data/assets/scene/solarsystem/planets/base_layers.asset new file mode 100644 index 0000000000..b9203c6a45 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/base_layers.asset @@ -0,0 +1,40 @@ +asset.require("./mercury/layers/base_layers") + +asset.require("./venus/layers/base_layers") + +asset.require("./earth/layers/base_layers") + +asset.require("./mars/layers/base_layers") + +asset.require("./jupiter/default_layers") +asset.require("./jupiter/callisto/default_layers") +asset.require("./jupiter/europa/layers/local_layers") +asset.require("./jupiter/ganymede/default_layers") +asset.require("./jupiter/io/default_layers") + +asset.require("./saturn/default_layers") +asset.require("./saturn/dione/default_layers") +asset.require("./saturn/hyperion/default_layers") +asset.require("./saturn/iapetus/default_layers") +asset.require("./saturn/mimas/default_layers") +asset.require("./saturn/rhea/default_layers") +asset.require("./saturn/tethys/default_layers") +asset.require("./saturn/titan/default_layers") + +asset.require("./uranus/default_layers") + +asset.require("./neptune/default_layers") + + + +asset.meta = { + Name = "Base Solar System Layers", + Description = [[Adds base layers for all planets. Remove this asset and include + individual layers for planets to customize planet layers. + The base layers do not depend on any particular OpenSpace server but are still + dependent on internet access. + ]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/default_layers.asset b/data/assets/scene/solarsystem/planets/default_layers.asset index b3f332561e..cf5dafcb95 100644 --- a/data/assets/scene/solarsystem/planets/default_layers.asset +++ b/data/assets/scene/solarsystem/planets/default_layers.asset @@ -1,39 +1,17 @@ -asset.require("./earth/default_layers") -asset.require("./earth/moon/default_layers") - -asset.require("./jupiter/default_layers") -asset.require("./jupiter/callisto/default_layers") -asset.require("./jupiter/europa/default_layers") -asset.require("./jupiter/ganymede/default_layers") -asset.require("./jupiter/io/default_layers") - -asset.require("./mars/default_layers") - -asset.require("./mercury/default_layers") - -asset.require("./neptune/default_layers") - -asset.require("./saturn/default_layers") -asset.require("./saturn/dione/default_layers") -asset.require("./saturn/enceladus/default_layers") -asset.require("./saturn/hyperion/default_layers") -asset.require("./saturn/iapetus/default_layers") -asset.require("./saturn/mimas/default_layers") -asset.require("./saturn/rhea/default_layers") -asset.require("./saturn/tethys/default_layers") -asset.require("./saturn/titan/default_layers") - -asset.require("./uranus/default_layers") - -asset.require("./venus/default_layers") +asset.require("./base_layers") +asset.require("./utah_layers") +asset.require("./sweden_layers") +asset.require("./newyork_layers") asset.meta = { Name = "Default Solar System Layers", - Version = "1.0", Description = [[Adds default layers for all planets. Remove this asset and include - individual layers for planets to customize planet layers]], + individual layers for planets to customize planet layers + + Layers loaded from all servers + ]], Author = "OpenSpace Team", URL = "http://openspaceproject.com", License = "MIT license" diff --git a/data/assets/scene/solarsystem/planets/earth/atmosphere.asset b/data/assets/scene/solarsystem/planets/earth/atmosphere.asset index 16805b0950..b112638123 100644 --- a/data/assets/scene/solarsystem/planets/earth/atmosphere.asset +++ b/data/assets/scene/solarsystem/planets/earth/atmosphere.asset @@ -32,7 +32,7 @@ local Atmosphere = { -- Extinction coefficients Extinction = {3.426, 8.298, 0.356} }, - H_O = 8.0, + H_O = 8.0 }, ]] -- Default @@ -101,7 +101,6 @@ asset.export(Atmosphere) asset.meta = { Name = "Earth Atmosphere", - Version = "1.1", Description = "RenderableAtmosphere for Earth", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/earth/default_layers.asset b/data/assets/scene/solarsystem/planets/earth/default_layers.asset index ace0e7a0d7..cb687fb2f0 100644 --- a/data/assets/scene/solarsystem/planets/earth/default_layers.asset +++ b/data/assets/scene/solarsystem/planets/earth/default_layers.asset @@ -1,47 +1,24 @@ -asset.require("./layers/colorlayers/blue_marble", false) -asset.require("./layers/colorlayers/esri_viirs_combo", true) -asset.require("./layers/colorlayers/esri_noaa20_combo", false) -asset.require("./layers/colorlayers/esri_world_imagery", false) -asset.require("./layers/colorlayers/viirs_snpp_temporal", false) -asset.require("./layers/colorlayers/aqua_modis_temporal", false) -asset.require("./layers/colorlayers/terra_modis_temporal", false) -asset.require("./layers/colorlayers/bmng_utah", false) -asset.require("./layers/colorlayers/bmng_sweden", false) -asset.require("./layers/colorlayers/bmng_newyork", false) -asset.require("./layers/colorlayers/amsr2_gcom_w1_sea_ice_concentration_temporal", false) -asset.require("./layers/colorlayers/modis_terra_chlorophyll_a_temporal", false) -asset.require("./layers/colorlayers/ghrsst_l4_mur_sea_surface_temperature_temporal", false) - -asset.require("./layers/heightlayers/blue_marble_height", false) -asset.require("./layers/heightlayers/terrain_tileset", true) - -asset.require("./layers/nightlayers/earth_at_night_2012", true) -asset.require("./layers/nightlayers/earth_night_texture", false) -asset.require("./layers/nightlayers/earth_at_night_temporal", false) - -asset.require("./layers/overlays/coastlines", false) -asset.require("./layers/overlays/reference_features", false) -asset.require("./layers/overlays/reference_labels", false) -asset.require("./layers/overlays/tile_indices", false) -asset.require("./layers/overlays/size_reference", false) - -asset.require("./layers/watermasks/gebco_sweden", false) -asset.require("./layers/watermasks/gebco_utah", false) -asset.require("./layers/watermasks/gebco_newyork", false) -asset.require("./layers/watermasks/modis_water_mask", true) +asset.require("./layers/base_layers", true) +asset.require("./layers/utah_layers", false) +asset.require("./layers/sweden_layers", false) +asset.require("./layers/newyork_layers", false) asset.meta = { Name = "Default Earth Layers", - Version = "1.0", - Description = [[Default Earth layers are: ESRI VIIRS Combo, ESRI World Imagery, VIIRS - SNPP (Temporal), Aqua Modis (Temporal), Terra Modis (Temporal), BMNG, AMSR2 GCOM - W1 Sea Ice Concentration (Temporal), MODIS Terra Chlorophyll A (Temporal), GHRSST, - L4 G1SST Sea Surface Temperature (Temporal), GHRSST L4 MUR Sea Surface Temperature - (Temporal), World Elevation (3D), Earth at Night 2012, Coastlines, Reference - Features, Reference Labels, Tile Indicies, Size Reference, Gebco, and Modis Water - Mask]], + Description = [[Default Earth layers are: Blue Marble, + ESRI VIIRS Combo, ESRI NOAA20 Combo, ESRI World Imagery, VIIRS SNPP (Temporal), + Aqua Modis (Temporal), Terra Modis (Temporal), + AMSR2 GCOM W1 Sea Ice Concentration (Temporal), MODIS Terra Chlorophyll A (Temporal), + GHRSST L4 MUR Sea Surface Temperature (Temporal), BMNG, Blue Marble Height (3D), + World Elevation (3D), Earth at Night 2012, Earth at Night Texture, + Earth at Night (Temporal), Coastlines, Reference Features, Reference Labels, + Tile Indicies, Size Reference, Gebco and Modis Water Mask. + + + Layers loaded from all servers + ]], Author = "OpenSpace Team", URL = "http://openspaceproject.com", License = "MIT license" diff --git a/data/assets/scene/solarsystem/planets/earth/earth.asset b/data/assets/scene/solarsystem/planets/earth/earth.asset index e970802f7f..e8917f7928 100644 --- a/data/assets/scene/solarsystem/planets/earth/earth.asset +++ b/data/assets/scene/solarsystem/planets/earth/earth.asset @@ -2,7 +2,7 @@ local transforms = asset.require("./transforms") -local labelsPath = asset.syncedResource({ +local labelsPath = asset.resource({ Name = "Earth Labels", Type = "HttpSynchronization", Identifier = "earth_labels", @@ -19,9 +19,7 @@ local Earth = { Renderable = { Type = "RenderableGlobe", Radii = EarthEllipsoid, - SegmentsPerPatch = 64, PerformShading = false, - Layers = {}, ShadowGroup = { Sources = { { Name = "Sun", Radius = 696300000 }, @@ -55,8 +53,8 @@ local EarthLabel = { Identifier = "EarthLabel", Parent = Earth.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Earth", FontSize = 70.0, Size = 8.50, @@ -86,21 +84,21 @@ local FocusEarth = { ]], Documentation = "Set camera focus on the Earth", GuiPath = "/Solar System/Earth", - isLocal = false + IsLocal = false } local ToggleSatelliteTrails = { Identifier = "os.solarsystem.ToggleSatelliteTrails", Name = "Toggle satellite trails", Command = [[ - local list = openspace.getProperty("{earth_satellites}.Renderable.Enabled") + local list = openspace.property("{earth_satellites}.Renderable.Enabled") for _,v in pairs(list) do - openspace.setPropertyValueSingle(v, not openspace.getPropertyValue(v)) + openspace.setPropertyValueSingle(v, not openspace.propertyValue(v)) end ]], Documentation = "Toggle trails on or off for satellites around Earth", GuiPath = "/Solar System/Earth", - isLocal = false + IsLocal = false } @@ -127,7 +125,6 @@ asset.export(EarthLabel) asset.meta = { Name = "Earth", - Version = "1.1", Description = "Earth is a special planet with special needs", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/earth/eclipse_shadow.asset b/data/assets/scene/solarsystem/planets/earth/eclipse_shadow.asset new file mode 100644 index 0000000000..6543fcc589 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/eclipse_shadow.asset @@ -0,0 +1,46 @@ +local transforms = asset.require("scene/solarsystem/planets/earth/moon/moon") +local coreKernels = asset.require("spice/core") + + + +local EarthMoonShadow = { + Identifier = "EarthMoonShadow", + Parent = transforms.Moon.Identifier, + Renderable = { + Type = "RenderableEclipseCone", + Opacity = 1.0, + ShadowLength = 1.0, + UmbralShadowColor = { 0.85, 1.0, 1.0, 0.20 }, + PenumbralShadowColor = { 0.35, 0.35, 0.35, 0.29 }, + LightSource = coreKernels.ID.Sun, + LightSourceFrame = coreKernels.Frame.Sun, + Shadower = coreKernels.ID.Moon, + ShadowerFrame = coreKernels.Frame.Moon, + Shadowee = coreKernels.ID.Earth + }, + GUI = { + Name = "Earth/Moon Shadow", + Path = "/Solar System/Planets/Earth" + } +} + + +asset.onInitialize(function() + openspace.addSceneGraphNode(EarthMoonShadow) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(EarthMoonShadow) +end) + +asset.export(EarthMoonShadow) + + + +asset.meta = { + Name = "Eclipse Shadow", + Description = "The penumbral and umbral shadow eclipses for the Earth-Moon system", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/earth/eclipses/5000_years.asset b/data/assets/scene/solarsystem/planets/earth/eclipses/5000_years.asset new file mode 100644 index 0000000000..4ffd138b61 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/eclipses/5000_years.asset @@ -0,0 +1,49 @@ +local globe = asset.require("../earth") + + + +local texturesPath = asset.resource({ + Name = "5000 Years of Total Solar Eclipses", + Type = "HttpSynchronization", + Identifier = "earth_eclipse_5000_years", + Version = 1 +}) + + +local Layer = { + Identifier = "5000_Years_Eclipses", + Name = "5000 Years of Total Solar Eclipses", + Enabled = asset.enabled, + ZIndex = 100, + FilePath = texturesPath .. "eclipse_freq_heatmap.tif", + Description = [[ + This is a heatmap showing the density of solar eclipse paths over the Earth during the 5000-year period between 2000 BCE and 3000 CE. It uses the list of eclipses calculated by Fred Espenak and Jean Meeus and published in 2006 as the Five Millennium Canon of Solar Eclipses. The paths of the 3742 eclipses classified in the Canon as either "T" (total) or "H" (hybrid or total-annular) were drawn into a global map with a pixel resolution of 4 minutes (1/15 of a degree) of latitude and longitude. The pixels counted the eclipse paths as they were drawn, and each pixel location ended up experiencing anywhere from one to 35 eclipses. + + For more information visit the NASA's Scientific Visualization Studio that generated this image: https://svs.gsfc.nasa.gov/5222 + + Thanks to Visualizer Ernie Wright and Technical support Ian Jones and Laurence Schuler for this. + + See also the paper by Jean Meeus, The Frequency of Total and Annular Solar Eclipses for a Given Place, JBAA 92, 3 (April 1982), pp 124-126. + ]], + CacheSettings = { Enabled = false } +} + + +asset.onInitialize(function() + openspace.globebrowsing.addLayer(globe.Earth.Identifier, "ColorLayers", Layer) +end) + +asset.onDeinitialize(function() + openspace.globebrowsing.deleteLayer(globe.Earth.Identifier, "ColorLayers", Layer) +end) + +asset.export("layer", Layer) + + +asset.meta = { + Name = "5000 Years of Total Solar Eclipses", + Description = Layer.Description, + Author = "OpenSpace Team", + URL = "https://svs.gsfc.nasa.gov/5222", + License = "NASA" +} diff --git a/data/assets/scene/solarsystem/planets/earth/eclipses/corona/corona20170821.asset b/data/assets/scene/solarsystem/planets/earth/eclipses/corona/corona20170821.asset new file mode 100644 index 0000000000..02176e3200 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/eclipses/corona/corona20170821.asset @@ -0,0 +1,72 @@ +local transforms = asset.require("scene/solarsystem/sun/transforms") + + + +local videos = asset.resource({ + Name = "Eclipse Corona Video", + Type = "HttpSynchronization", + Identifier = "earth-eclipse-corona", + Version = 1 +}) + + +local Plane = { + Identifier = "CoronaVideoPlane", + Parent = transforms.SunIAU.Identifier, + Transform = { + Rotation = { + Type = "StaticRotation", + Rotation = { 1.57, 0.0, 0.45 } + }, + Scale = { + Type = "StaticScale", + Scale = 30.3 + } + }, + Renderable = { + Type = "RenderableVideoPlane", + Enabled = false, + MirrorBackside = true, + Size = 30000000, + Video = videos .. "corona20170821_0171.mp4", + PlaybackMode = "MapToSimulationTime", + StartTime = "2017 08 21 00:00:00", + EndTime = "2017 08 21 23:59:59" + }, + GUI = { + Name = "Sun Corona", + Path = "/Solar System/Sun" + } +} + + +asset.onInitialize(function() + openspace.addSceneGraphNode(Plane) + + openspace.scriptScheduler.loadScheduledScript( + "2017 AUG 21 00:00:00", + [[openspace.setPropertyValueSingle("Scene.CoronaVideoPlane.Renderable.Enabled", true)]], + [[openspace.setPropertyValueSingle("Scene.CoronaVideoPlane.Renderable.Enabled", false)]] + ) + openspace.scriptScheduler.loadScheduledScript( + "2017 AUG 21 23:59:59", + [[openspace.setPropertyValueSingle("Scene.CoronaVideoPlane.Renderable.Enabled", false)]], + [[openspace.setPropertyValueSingle("Scene.CoronaVideoPlane.Renderable.Enabled", true)]] + ) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Plane) +end) + +asset.export(Plane) + + + +asset.meta = { + Name = "Corona 2017-08-21", + Description = "An SDO video of the Sun for the day 2017-08-21", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/earth/eclipses/eclipses.asset b/data/assets/scene/solarsystem/planets/earth/eclipses/eclipses.asset new file mode 100644 index 0000000000..08edb1d99d --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/eclipses/eclipses.asset @@ -0,0 +1,5 @@ +asset.require("./timeline") +asset.require("./corona/corona20170821") +asset.require("./grid/earth_ecliptic_radial_grid") +asset.require("./grid/moon_radial_grid") +asset.require("./paths/paths") diff --git a/data/assets/scene/solarsystem/planets/earth/eclipses/grid/earth_ecliptic_radial_grid.asset b/data/assets/scene/solarsystem/planets/earth/eclipses/grid/earth_ecliptic_radial_grid.asset new file mode 100644 index 0000000000..de490a5d80 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/eclipses/grid/earth_ecliptic_radial_grid.asset @@ -0,0 +1,58 @@ +local transforms = asset.require("scene/solarsystem/planets/earth/transforms") + + + +local EclipticRotationMatrix = { + -0.05487554, 0.4941095, -0.8676661, + -0.9938214, -0.1109906, -0.0003515167, + -0.09647644, 0.8622859, 0.4971472 +} + + +local eclipticGrid = { + Identifier = "EarthEclipticRadialGrid", + Parent = transforms.EarthCenter.Identifier, + Transform = { + Rotation = { + Type = "StaticRotation", + Rotation = EclipticRotationMatrix + }, + Scale = { + Type = "StaticScale", + Scale = 430000000 + }, + }, + Renderable = { + Type = "RenderableRadialGrid", + Color = { 0.086, 0.106, 0.431 }, + LineWidth = 2.0, + GridSegments = { 8, 8 }, + CircleSegments = 64, + Radii = { 0.0, 1.0 } + }, + GUI = { + Name = "Earth Ecliptic Grid", + Path = "/Solar System/Planets/Earth" + } +} + + +asset.onInitialize(function() + openspace.addSceneGraphNode(eclipticGrid) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(eclipticGrid) +end) + +asset.export(eclipticGrid) + + + +asset.meta = { + Name = "Earth Ecliptic Grid", + Description = "A grid that shows the ecliptic of the Earth a radial grid", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/earth/eclipses/grid/moon_radial_grid.asset b/data/assets/scene/solarsystem/planets/earth/eclipses/grid/moon_radial_grid.asset new file mode 100644 index 0000000000..9b3ca56a3d --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/eclipses/grid/moon_radial_grid.asset @@ -0,0 +1,48 @@ +local moon = asset.require("scene/solarsystem/planets/earth/moon/moon") + + + +local orbitalPlaneGrid = { + Identifier = "MoonOrbitalPlaneRadialGrid", + Parent = "Moon", + Transform = { + Scale = { + Type = "StaticScale", + Scale = 430000000 + }, + }, + Renderable = { + Type = "RenderableRadialGrid", + Color = { 0.502, 0.502, 0.502 }, + LineWidth = 2.0, + GridSegments = { 8, 8 }, + CircleSegments = 64, + Radii = { 0.0, 1.0 } + }, + GUI = { + Name = "Moon Ecliptic Grid", + Path = "/Solar System/Planets/Earth/Moon" + } +} + + + +asset.onInitialize(function() + openspace.addSceneGraphNode(orbitalPlaneGrid) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(orbitalPlaneGrid) +end) + +asset.export(orbitalPlaneGrid) + + + +asset.meta = { + Name = "Moon Orbital Plane", + Description = "A grid that shows the orbital plane of the Moon", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/earth/eclipses/paths/annular.asset b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/annular.asset new file mode 100644 index 0000000000..39df373484 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/annular.asset @@ -0,0 +1,20 @@ +asset.require("./annular/2003-05-31") +asset.require("./annular/2005-10-03") +asset.require("./annular/2006-09-22") +asset.require("./annular/2008-02-07") +asset.require("./annular/2009-01-26") +asset.require("./annular/2010-01-15") +asset.require("./annular/2012-05-20") +asset.require("./annular/2013-05-10") +asset.require("./annular/2014-04-29") +asset.require("./annular/2016-09-01") +asset.require("./annular/2017-02-26") +asset.require("./annular/2019-12-26") +asset.require("./annular/2020-06-21") +asset.require("./annular/2021-06-10") +asset.require("./annular/2023-10-14") +asset.require("./annular/2024-10-02") +asset.require("./annular/2026-02-17") +asset.require("./annular/2027-02-06") +asset.require("./annular/2028-01-26") +asset.require("./annular/2030-06-01") diff --git a/data/assets/scene/solarsystem/planets/earth/eclipses/paths/annular/2003-05-31.asset b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/annular/2003-05-31.asset new file mode 100644 index 0000000000..cd2120ace3 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/annular/2003-05-31.asset @@ -0,0 +1,34 @@ +local earth = asset.require("scene/solarsystem/planets/earth/earth") +local data = asset.require("../annular_data") + + + +local Layer = { + Identifier = "Annular-2003-05-31", + Enabled = false, + File = data.path .. "2003-05-31.geojson", + HeightOffset = 2000.0, + DefaultProperties = { + LineWidth = 2.0, + Extrude = true + } +} + + +asset.onInitialize(function() + openspace.globebrowsing.addGeoJson(earth.Earth.Identifier, Layer) +end) + +asset.onDeinitialize(function() + openspace.globebrowsing.deleteGeoJson(earth.Earth.Identifier, Layer) +end) + + + +asset.meta = { + Name = "Annular 2003-05-31", + Description = "Annular eclipse map for 2003-05-31", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/earth/eclipses/paths/annular/2005-10-03.asset b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/annular/2005-10-03.asset new file mode 100644 index 0000000000..8c067aebfe --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/annular/2005-10-03.asset @@ -0,0 +1,34 @@ +local earth = asset.require("scene/solarsystem/planets/earth/earth") +local data = asset.require("../annular_data") + + + +local Layer = { + Identifier = "Annular-2005-10-03", + Enabled = false, + File = data.path .. "2005-10-03.geojson", + HeightOffset = 2000.0, + DefaultProperties = { + LineWidth = 2.0, + Extrude = true + } +} + + +asset.onInitialize(function() + openspace.globebrowsing.addGeoJson(earth.Earth.Identifier, Layer) +end) + +asset.onDeinitialize(function() + openspace.globebrowsing.deleteGeoJson(earth.Earth.Identifier, Layer) +end) + + + +asset.meta = { + Name = "Annular 2005-10-03", + Description = "Annular eclipse map for 2005-10-03", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/earth/eclipses/paths/annular/2006-09-22.asset b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/annular/2006-09-22.asset new file mode 100644 index 0000000000..fd880a3381 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/annular/2006-09-22.asset @@ -0,0 +1,34 @@ +local earth = asset.require("scene/solarsystem/planets/earth/earth") +local data = asset.require("../annular_data") + + + +local Layer = { + Identifier = "Annular-2006-09-22", + Enabled = false, + File = data.path .. "2006-09-22.geojson", + HeightOffset = 2000.0, + DefaultProperties = { + LineWidth = 2.0, + Extrude = true + } +} + + +asset.onInitialize(function() + openspace.globebrowsing.addGeoJson(earth.Earth.Identifier, Layer) +end) + +asset.onDeinitialize(function() + openspace.globebrowsing.deleteGeoJson(earth.Earth.Identifier, Layer) +end) + + + +asset.meta = { + Name = "Annular 2006-09-22", + Description = "Annular eclipse map for 2006-09-22", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/earth/eclipses/paths/annular/2008-02-07.asset b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/annular/2008-02-07.asset new file mode 100644 index 0000000000..07a87ff0e3 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/annular/2008-02-07.asset @@ -0,0 +1,34 @@ +local earth = asset.require("scene/solarsystem/planets/earth/earth") +local data = asset.require("../annular_data") + + + +local Layer = { + Identifier = "Annular-2008-02-07", + Enabled = false, + File = data.path .. "2008-02-07.geojson", + HeightOffset = 2000.0, + DefaultProperties = { + LineWidth = 2.0, + Extrude = true + } +} + + +asset.onInitialize(function() + openspace.globebrowsing.addGeoJson(earth.Earth.Identifier, Layer) +end) + +asset.onDeinitialize(function() + openspace.globebrowsing.deleteGeoJson(earth.Earth.Identifier, Layer) +end) + + + +asset.meta = { + Name = "Annular 2008-02-07", + Description = "Annular eclipse map for 2008-02-07", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/earth/eclipses/paths/annular/2009-01-26.asset b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/annular/2009-01-26.asset new file mode 100644 index 0000000000..8d5b5ba5b4 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/annular/2009-01-26.asset @@ -0,0 +1,34 @@ +local earth = asset.require("scene/solarsystem/planets/earth/earth") +local data = asset.require("../annular_data") + + + +local Layer = { + Identifier = "Annular-2009-01-26", + Enabled = false, + File = data.path .. "2009-01-26.geojson", + HeightOffset = 2000.0, + DefaultProperties = { + LineWidth = 2.0, + Extrude = true + } +} + + +asset.onInitialize(function() + openspace.globebrowsing.addGeoJson(earth.Earth.Identifier, Layer) +end) + +asset.onDeinitialize(function() + openspace.globebrowsing.deleteGeoJson(earth.Earth.Identifier, Layer) +end) + + + +asset.meta = { + Name = "Annular 2009-01-26", + Description = "Annular eclipse map for 2009-01-26", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/earth/eclipses/paths/annular/2010-01-15.asset b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/annular/2010-01-15.asset new file mode 100644 index 0000000000..85b778302c --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/annular/2010-01-15.asset @@ -0,0 +1,34 @@ +local earth = asset.require("scene/solarsystem/planets/earth/earth") +local data = asset.require("../annular_data") + + + +local Layer = { + Identifier = "Annular-2010-01-15", + Enabled = false, + File = data.path .. "2010-01-15.geojson", + HeightOffset = 2000.0, + DefaultProperties = { + LineWidth = 2.0, + Extrude = true + } +} + + +asset.onInitialize(function() + openspace.globebrowsing.addGeoJson(earth.Earth.Identifier, Layer) +end) + +asset.onDeinitialize(function() + openspace.globebrowsing.deleteGeoJson(earth.Earth.Identifier, Layer) +end) + + + +asset.meta = { + Name = "Annular 2010-01-15", + Description = "Annular eclipse map for 2010-01-15", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/earth/eclipses/paths/annular/2012-05-20.asset b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/annular/2012-05-20.asset new file mode 100644 index 0000000000..6a6cbac1bc --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/annular/2012-05-20.asset @@ -0,0 +1,34 @@ +local earth = asset.require("scene/solarsystem/planets/earth/earth") +local data = asset.require("../annular_data") + + + +local Layer = { + Identifier = "Annular-2012-05-20", + Enabled = false, + File = data.path .. "2012-05-20.geojson", + HeightOffset = 2000.0, + DefaultProperties = { + LineWidth = 2.0, + Extrude = true + } +} + + +asset.onInitialize(function() + openspace.globebrowsing.addGeoJson(earth.Earth.Identifier, Layer) +end) + +asset.onDeinitialize(function() + openspace.globebrowsing.deleteGeoJson(earth.Earth.Identifier, Layer) +end) + + + +asset.meta = { + Name = "Annular 2012-05-20", + Description = "Annular eclipse map for 2012-05-20", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/earth/eclipses/paths/annular/2013-05-10.asset b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/annular/2013-05-10.asset new file mode 100644 index 0000000000..3afe637ea7 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/annular/2013-05-10.asset @@ -0,0 +1,34 @@ +local earth = asset.require("scene/solarsystem/planets/earth/earth") +local data = asset.require("../annular_data") + + + +local Layer = { + Identifier = "Annular-2013-05-10", + Enabled = false, + File = data.path .. "2013-05-10.geojson", + HeightOffset = 2000.0, + DefaultProperties = { + LineWidth = 2.0, + Extrude = true + } +} + + +asset.onInitialize(function() + openspace.globebrowsing.addGeoJson(earth.Earth.Identifier, Layer) +end) + +asset.onDeinitialize(function() + openspace.globebrowsing.deleteGeoJson(earth.Earth.Identifier, Layer) +end) + + + +asset.meta = { + Name = "Annular 2013-05-10", + Description = "Annular eclipse map for 2013-05-10", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/earth/eclipses/paths/annular/2014-04-29.asset b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/annular/2014-04-29.asset new file mode 100644 index 0000000000..893e63c166 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/annular/2014-04-29.asset @@ -0,0 +1,34 @@ +local earth = asset.require("scene/solarsystem/planets/earth/earth") +local data = asset.require("../annular_data") + + + +local Layer = { + Identifier = "Annular-2014-04-29", + Enabled = false, + File = data.path .. "2014-04-29.geojson", + HeightOffset = 2000.0, + DefaultProperties = { + LineWidth = 2.0, + Extrude = true + } +} + + +asset.onInitialize(function() + openspace.globebrowsing.addGeoJson(earth.Earth.Identifier, Layer) +end) + +asset.onDeinitialize(function() + openspace.globebrowsing.deleteGeoJson(earth.Earth.Identifier, Layer) +end) + + + +asset.meta = { + Name = "Annular 2014-04-29", + Description = "Annular eclipse map for 2014-04-29", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/earth/eclipses/paths/annular/2016-09-01.asset b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/annular/2016-09-01.asset new file mode 100644 index 0000000000..6595181954 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/annular/2016-09-01.asset @@ -0,0 +1,34 @@ +local earth = asset.require("scene/solarsystem/planets/earth/earth") +local data = asset.require("../annular_data") + + + +local Layer = { + Identifier = "Annular-2016-09-01", + Enabled = false, + File = data.path .. "2016-09-01.geojson", + HeightOffset = 2000.0, + DefaultProperties = { + LineWidth = 2.0, + Extrude = true + } +} + + +asset.onInitialize(function() + openspace.globebrowsing.addGeoJson(earth.Earth.Identifier, Layer) +end) + +asset.onDeinitialize(function() + openspace.globebrowsing.deleteGeoJson(earth.Earth.Identifier, Layer) +end) + + + +asset.meta = { + Name = "Annular 2016-09-01", + Description = "Annular eclipse map for 2016-09-01", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/earth/eclipses/paths/annular/2017-02-26.asset b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/annular/2017-02-26.asset new file mode 100644 index 0000000000..b0ddff5030 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/annular/2017-02-26.asset @@ -0,0 +1,34 @@ +local earth = asset.require("scene/solarsystem/planets/earth/earth") +local data = asset.require("../annular_data") + + + +local Layer = { + Identifier = "Annular-2017-02-26", + Enabled = false, + File = data.path .. "2017-02-26.geojson", + HeightOffset = 2000.0, + DefaultProperties = { + LineWidth = 2.0, + Extrude = true + } +} + + +asset.onInitialize(function() + openspace.globebrowsing.addGeoJson(earth.Earth.Identifier, Layer) +end) + +asset.onDeinitialize(function() + openspace.globebrowsing.deleteGeoJson(earth.Earth.Identifier, Layer) +end) + + + +asset.meta = { + Name = "Annular 2017-02-26", + Description = "Annular eclipse map for 2017-02-26", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/earth/eclipses/paths/annular/2019-12-26.asset b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/annular/2019-12-26.asset new file mode 100644 index 0000000000..cdfdcbbc73 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/annular/2019-12-26.asset @@ -0,0 +1,34 @@ +local earth = asset.require("scene/solarsystem/planets/earth/earth") +local data = asset.require("../annular_data") + + + +local Layer = { + Identifier = "Annular-2019-12-26", + Enabled = false, + File = data.path .. "2019-12-26.geojson", + HeightOffset = 2000.0, + DefaultProperties = { + LineWidth = 2.0, + Extrude = true + } +} + + +asset.onInitialize(function() + openspace.globebrowsing.addGeoJson(earth.Earth.Identifier, Layer) +end) + +asset.onDeinitialize(function() + openspace.globebrowsing.deleteGeoJson(earth.Earth.Identifier, Layer) +end) + + + +asset.meta = { + Name = "Annular 2019-12-26", + Description = "Annular eclipse map for 2019-12-26", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/earth/eclipses/paths/annular/2020-06-21.asset b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/annular/2020-06-21.asset new file mode 100644 index 0000000000..31c3f77c4f --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/annular/2020-06-21.asset @@ -0,0 +1,34 @@ +local earth = asset.require("scene/solarsystem/planets/earth/earth") +local data = asset.require("../annular_data") + + + +local Layer = { + Identifier = "Annular-2020-06-21", + Enabled = false, + File = data.path .. "2020-06-21.geojson", + HeightOffset = 2000.0, + DefaultProperties = { + LineWidth = 2.0, + Extrude = true + } +} + + +asset.onInitialize(function() + openspace.globebrowsing.addGeoJson(earth.Earth.Identifier, Layer) +end) + +asset.onDeinitialize(function() + openspace.globebrowsing.deleteGeoJson(earth.Earth.Identifier, Layer) +end) + + + +asset.meta = { + Name = "Annular 2020-06-21", + Description = "Annular eclipse map for 2020-06-21", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/earth/eclipses/paths/annular/2021-06-10.asset b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/annular/2021-06-10.asset new file mode 100644 index 0000000000..d680c04d89 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/annular/2021-06-10.asset @@ -0,0 +1,35 @@ +local earth = asset.require("scene/solarsystem/planets/earth/earth") +local data = asset.require("../annular_data") + + + +local Layer = { + Identifier = "Annular-2021-06-10", + Enabled = false, + File = data.path .. "2021-06-10.geojson", + HeightOffset = 2000.0, + DefaultProperties = { + LineWidth = 2.0, + Extrude = true + } +} + + +asset.onInitialize(function() + -- @TODO: The file contains a non-simple geometry which is currently not supported + -- openspace.globebrowsing.addGeoJson(earth.Earth.Identifier, Layer) +end) + +asset.onDeinitialize(function() + -- openspace.globebrowsing.deleteGeoJson(earth.Earth.Identifier, Layer) +end) + + + +asset.meta = { + Name = "Annular 2021-06-10", + Description = "Annular eclipse map for 2021-06-10", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/earth/eclipses/paths/annular/2023-10-14.asset b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/annular/2023-10-14.asset new file mode 100644 index 0000000000..6fa8c35393 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/annular/2023-10-14.asset @@ -0,0 +1,34 @@ +local earth = asset.require("scene/solarsystem/planets/earth/earth") +local data = asset.require("../annular_data") + + + +local Layer = { + Identifier = "Annular-2023-10-14", + Enabled = false, + File = data.path .. "2023-10-14.geojson", + HeightOffset = 2000.0, + DefaultProperties = { + LineWidth = 2.0, + Extrude = true + } +} + + +asset.onInitialize(function() + openspace.globebrowsing.addGeoJson(earth.Earth.Identifier, Layer) +end) + +asset.onDeinitialize(function() + openspace.globebrowsing.deleteGeoJson(earth.Earth.Identifier, Layer) +end) + + + +asset.meta = { + Name = "Annular 2023-10-14", + Description = "Annular eclipse map for 2023-10-14", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/earth/eclipses/paths/annular/2024-10-02.asset b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/annular/2024-10-02.asset new file mode 100644 index 0000000000..be7c775d48 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/annular/2024-10-02.asset @@ -0,0 +1,34 @@ +local earth = asset.require("scene/solarsystem/planets/earth/earth") +local data = asset.require("../annular_data") + + + +local Layer = { + Identifier = "Annular-2024-10-02", + Enabled = false, + File = data.path .. "2024-10-02.geojson", + HeightOffset = 2000.0, + DefaultProperties = { + LineWidth = 2.0, + Extrude = true + } +} + + +asset.onInitialize(function() + openspace.globebrowsing.addGeoJson(earth.Earth.Identifier, Layer) +end) + +asset.onDeinitialize(function() + openspace.globebrowsing.deleteGeoJson(earth.Earth.Identifier, Layer) +end) + + + +asset.meta = { + Name = "Annular 2024-10-02", + Description = "Annular eclipse map for 2024-10-02", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/earth/eclipses/paths/annular/2026-02-17.asset b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/annular/2026-02-17.asset new file mode 100644 index 0000000000..ac4a8e7152 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/annular/2026-02-17.asset @@ -0,0 +1,34 @@ +local earth = asset.require("scene/solarsystem/planets/earth/earth") +local data = asset.require("../annular_data") + + + +local Layer = { + Identifier = "Annular-2026-02-17", + Enabled = false, + File = data.path .. "2026-02-17.geojson", + HeightOffset = 2000.0, + DefaultProperties = { + LineWidth = 2.0, + Extrude = true + } +} + + +asset.onInitialize(function() + openspace.globebrowsing.addGeoJson(earth.Earth.Identifier, Layer) +end) + +asset.onDeinitialize(function() + openspace.globebrowsing.deleteGeoJson(earth.Earth.Identifier, Layer) +end) + + + +asset.meta = { + Name = "Annular 2026-02-17", + Description = "Annular eclipse map for 2026-02-17", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/earth/eclipses/paths/annular/2027-02-06.asset b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/annular/2027-02-06.asset new file mode 100644 index 0000000000..3df7a73fa4 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/annular/2027-02-06.asset @@ -0,0 +1,34 @@ +local earth = asset.require("scene/solarsystem/planets/earth/earth") +local data = asset.require("../annular_data") + + + +local Layer = { + Identifier = "Annular-2027-02-06", + Enabled = false, + File = data.path .. "2027-02-06.geojson", + HeightOffset = 2000.0, + DefaultProperties = { + LineWidth = 2.0, + Extrude = true + } +} + + +asset.onInitialize(function() + openspace.globebrowsing.addGeoJson(earth.Earth.Identifier, Layer) +end) + +asset.onDeinitialize(function() + openspace.globebrowsing.deleteGeoJson(earth.Earth.Identifier, Layer) +end) + + + +asset.meta = { + Name = "Annular 2027-02-06", + Description = "Annular eclipse map for 2027-02-06", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/earth/eclipses/paths/annular/2028-01-26.asset b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/annular/2028-01-26.asset new file mode 100644 index 0000000000..74069fc105 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/annular/2028-01-26.asset @@ -0,0 +1,34 @@ +local earth = asset.require("scene/solarsystem/planets/earth/earth") +local data = asset.require("../annular_data") + + + +local Layer = { + Identifier = "Annular-2028-01-26", + Enabled = false, + File = data.path .. "2028-01-26.geojson", + HeightOffset = 2000.0, + DefaultProperties = { + LineWidth = 2.0, + Extrude = true + } +} + + +asset.onInitialize(function() + openspace.globebrowsing.addGeoJson(earth.Earth.Identifier, Layer) +end) + +asset.onDeinitialize(function() + openspace.globebrowsing.deleteGeoJson(earth.Earth.Identifier, Layer) +end) + + + +asset.meta = { + Name = "Annular 2028-01-26", + Description = "Annular eclipse map for 2028-01-26", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/earth/eclipses/paths/annular/2030-06-01.asset b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/annular/2030-06-01.asset new file mode 100644 index 0000000000..77e6fc68a6 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/annular/2030-06-01.asset @@ -0,0 +1,34 @@ +local earth = asset.require("scene/solarsystem/planets/earth/earth") +local data = asset.require("../annular_data") + + + +local Layer = { + Identifier = "Annular-2030-06-01", + Enabled = false, + File = data.path .. "2030-06-01.geojson", + HeightOffset = 2000.0, + DefaultProperties = { + LineWidth = 2.0, + Extrude = true + } +} + + +asset.onInitialize(function() + openspace.globebrowsing.addGeoJson(earth.Earth.Identifier, Layer) +end) + +asset.onDeinitialize(function() + openspace.globebrowsing.deleteGeoJson(earth.Earth.Identifier, Layer) +end) + + + +asset.meta = { + Name = "Annular 2030-06-01", + Description = "Annular eclipse map for 2030-06-01", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/earth/eclipses/paths/annular_data.asset b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/annular_data.asset new file mode 100644 index 0000000000..1a74b9beb5 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/annular_data.asset @@ -0,0 +1,8 @@ +local data = asset.resource({ + Name = "Annular Eclipse Paths", + Type = "HttpSynchronization", + Identifier = "earth-eclipse-path-annular", + Version = 1 +}) + +asset.export("path", data) diff --git a/data/assets/scene/solarsystem/planets/earth/eclipses/paths/hybrid.asset b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/hybrid.asset new file mode 100644 index 0000000000..d42ee8ec41 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/hybrid.asset @@ -0,0 +1,4 @@ +asset.require("./hybrid/2005-04-08") +asset.require("./hybrid/2013-11-03") +asset.require("./hybrid/2023-04-20") +asset.require("./hybrid/2031-11-14") diff --git a/data/assets/scene/solarsystem/planets/earth/eclipses/paths/hybrid/2005-04-08.asset b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/hybrid/2005-04-08.asset new file mode 100644 index 0000000000..2c8dcc13b8 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/hybrid/2005-04-08.asset @@ -0,0 +1,34 @@ +local earth = asset.require("scene/solarsystem/planets/earth/earth") +local data = asset.require("../hybrid_data") + + + +local Layer = { + Identifier = "Hybrid-2005-04-08", + Enabled = false, + File = data.path .. "2005-04-08.geojson", + HeightOffset = 2000.0, + DefaultProperties = { + LineWidth = 2.0, + Extrude = true + } +} + + +asset.onInitialize(function() + openspace.globebrowsing.addGeoJson(earth.Earth.Identifier, Layer) +end) + +asset.onDeinitialize(function() + openspace.globebrowsing.deleteGeoJson(earth.Earth.Identifier, Layer) +end) + + + +asset.meta = { + Name = "Hybrid 2005-04-08", + Description = "Hybrid eclipse map for 2005-04-08", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/earth/eclipses/paths/hybrid/2013-11-03.asset b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/hybrid/2013-11-03.asset new file mode 100644 index 0000000000..324a4873a7 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/hybrid/2013-11-03.asset @@ -0,0 +1,34 @@ +local earth = asset.require("scene/solarsystem/planets/earth/earth") +local data = asset.require("../hybrid_data") + + + +local Layer = { + Identifier = "Hybrid-2013-11-03", + Enabled = false, + File = data.path .. "2013-11-03.geojson", + HeightOffset = 2000.0, + DefaultProperties = { + LineWidth = 2.0, + Extrude = true + } +} + + +asset.onInitialize(function() + openspace.globebrowsing.addGeoJson(earth.Earth.Identifier, Layer) +end) + +asset.onDeinitialize(function() + openspace.globebrowsing.deleteGeoJson(earth.Earth.Identifier, Layer) +end) + + + +asset.meta = { + Name = "Hybrid 2013-11-03", + Description = "Hybrid eclipse map for 2013-11-03", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/earth/eclipses/paths/hybrid/2023-04-20.asset b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/hybrid/2023-04-20.asset new file mode 100644 index 0000000000..a73f860353 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/hybrid/2023-04-20.asset @@ -0,0 +1,34 @@ +local earth = asset.require("scene/solarsystem/planets/earth/earth") +local data = asset.require("../hybrid_data") + + + +local Layer = { + Identifier = "Hybrid-2023-04-20", + Enabled = false, + File = data.path .. "2023-04-20.geojson", + HeightOffset = 2000.0, + DefaultProperties = { + LineWidth = 2.0, + Extrude = true + } +} + + +asset.onInitialize(function() + openspace.globebrowsing.addGeoJson(earth.Earth.Identifier, Layer) +end) + +asset.onDeinitialize(function() + openspace.globebrowsing.deleteGeoJson(earth.Earth.Identifier, Layer) +end) + + + +asset.meta = { + Name = "Hybrid 2023-04-20", + Description = "Hybrid eclipse map for 2023-04-20", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/earth/eclipses/paths/hybrid/2031-11-14.asset b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/hybrid/2031-11-14.asset new file mode 100644 index 0000000000..833ae519a2 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/hybrid/2031-11-14.asset @@ -0,0 +1,34 @@ +local earth = asset.require("scene/solarsystem/planets/earth/earth") +local data = asset.require("../hybrid_data") + + + +local Layer = { + Identifier = "Hybrid-2031-11-14", + Enabled = false, + File = data.path .. "2031-11-14.geojson", + HeightOffset = 2000.0, + DefaultProperties = { + LineWidth = 2.0, + Extrude = true + } +} + + +asset.onInitialize(function() + openspace.globebrowsing.addGeoJson(earth.Earth.Identifier, Layer) +end) + +asset.onDeinitialize(function() + openspace.globebrowsing.deleteGeoJson(earth.Earth.Identifier, Layer) +end) + + + +asset.meta = { + Name = "Hybrid 2031-11-14", + Description = "Hybrid eclipse map for 2031-11-14", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/earth/eclipses/paths/hybrid_data.asset b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/hybrid_data.asset new file mode 100644 index 0000000000..7c2f11f26d --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/hybrid_data.asset @@ -0,0 +1,8 @@ +local data = asset.resource({ + Name = "Hybrid Eclipse Paths", + Type = "HttpSynchronization", + Identifier = "earth-eclipse-path-hybrid", + Version = 1 +}) + +asset.export("path", data) diff --git a/data/assets/scene/solarsystem/planets/earth/eclipses/paths/paths.asset b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/paths.asset new file mode 100644 index 0000000000..28e34ec5e9 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/paths.asset @@ -0,0 +1,3 @@ +asset.require("./annular") +asset.require("./hybrid") +asset.require("./total") diff --git a/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total.asset b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total.asset new file mode 100644 index 0000000000..f247b90f61 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total.asset @@ -0,0 +1,26 @@ +asset.require("./total/2003-11-23") +asset.require("./total/2006-03-29") +asset.require("./total/2008-08-01") +asset.require("./total/2009-07-22") +asset.require("./total/2010-07-11") +asset.require("./total/2012-11-13") +asset.require("./total/2015-03-20") +asset.require("./total/2016-03-09") +asset.require("./total/2017-08-21") +asset.require("./total/2019-07-02") +asset.require("./total/2020-12-14") +asset.require("./total/2021-12-04") +asset.require("./total/2024-04-08") +asset.require("./total/2026-08-12") +asset.require("./total/2027-08-02") +asset.require("./total/2028-07-22") +asset.require("./total/2030-11-25") +asset.require("./total/2033-03-30") +asset.require("./total/2034-03-20") +asset.require("./total/2035-09-02") +asset.require("./total/2037-07-13") +asset.require("./total/2038-12-26") +asset.require("./total/2039-12-15") +asset.require("./total/2041-04-30") +asset.require("./total/2042-04-20") +asset.require("./total/2043-04-09") diff --git a/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2003-11-23.asset b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2003-11-23.asset new file mode 100644 index 0000000000..e37b14ffd0 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2003-11-23.asset @@ -0,0 +1,34 @@ +local earth = asset.require("scene/solarsystem/planets/earth/earth") +local data = asset.require("../total_data") + + + +local Layer = { + Identifier = "Total-2003-11-23", + Enabled = false, + File = data.path .. "2003-11-23.geojson", + HeightOffset = 2000.0, + DefaultProperties = { + LineWidth = 2.0, + Extrude = true + } +} + + +asset.onInitialize(function() + openspace.globebrowsing.addGeoJson(earth.Earth.Identifier, Layer) +end) + +asset.onDeinitialize(function() + openspace.globebrowsing.deleteGeoJson(earth.Earth.Identifier, Layer) +end) + + + +asset.meta = { + Name = "Total 2003-11-23", + Description = "Total eclipse map for 2003-11-23", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2006-03-29.asset b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2006-03-29.asset new file mode 100644 index 0000000000..2e90cf30a0 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2006-03-29.asset @@ -0,0 +1,34 @@ +local earth = asset.require("scene/solarsystem/planets/earth/earth") +local data = asset.require("../total_data") + + + +local Layer = { + Identifier = "Total-2006-03-29", + Enabled = false, + File = data.path .. "2006-03-29.geojson", + HeightOffset = 2000.0, + DefaultProperties = { + LineWidth = 2.0, + Extrude = true + } +} + + +asset.onInitialize(function() + openspace.globebrowsing.addGeoJson(earth.Earth.Identifier, Layer) +end) + +asset.onDeinitialize(function() + openspace.globebrowsing.deleteGeoJson(earth.Earth.Identifier, Layer) +end) + + + +asset.meta = { + Name = "Total 2006-03-29", + Description = "Total eclipse map for 2006-03-29", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2008-08-01.asset b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2008-08-01.asset new file mode 100644 index 0000000000..5954ae4231 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2008-08-01.asset @@ -0,0 +1,34 @@ +local earth = asset.require("scene/solarsystem/planets/earth/earth") +local data = asset.require("../total_data") + + + +local Layer = { + Identifier = "Total-2008-08-01", + Enabled = false, + File = data.path .. "2008-08-01.geojson", + HeightOffset = 2000.0, + DefaultProperties = { + LineWidth = 2.0, + Extrude = true + } +} + + +asset.onInitialize(function() + openspace.globebrowsing.addGeoJson(earth.Earth.Identifier, Layer) +end) + +asset.onDeinitialize(function() + openspace.globebrowsing.deleteGeoJson(earth.Earth.Identifier, Layer) +end) + + + +asset.meta = { + Name = "Total 2008-08-01", + Description = "Total eclipse map for 2008-08-01", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2009-07-22.asset b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2009-07-22.asset new file mode 100644 index 0000000000..08c268e486 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2009-07-22.asset @@ -0,0 +1,34 @@ +local earth = asset.require("scene/solarsystem/planets/earth/earth") +local data = asset.require("../total_data") + + + +local Layer = { + Identifier = "Total-2009-07-22", + Enabled = false, + File = data.path .. "2009-07-22.geojson", + HeightOffset = 2000.0, + DefaultProperties = { + LineWidth = 2.0, + Extrude = true + } +} + + +asset.onInitialize(function() + openspace.globebrowsing.addGeoJson(earth.Earth.Identifier, Layer) +end) + +asset.onDeinitialize(function() + openspace.globebrowsing.deleteGeoJson(earth.Earth.Identifier, Layer) +end) + + + +asset.meta = { + Name = "Total 2009-07-22", + Description = "Total eclipse map for 2009-07-22", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2010-07-11.asset b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2010-07-11.asset new file mode 100644 index 0000000000..203feea490 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2010-07-11.asset @@ -0,0 +1,34 @@ +local earth = asset.require("scene/solarsystem/planets/earth/earth") +local data = asset.require("../total_data") + + + +local Layer = { + Identifier = "Total-2010-07-11", + Enabled = false, + File = data.path .. "2010-07-11.geojson", + HeightOffset = 2000.0, + DefaultProperties = { + LineWidth = 2.0, + Extrude = true + } +} + + +asset.onInitialize(function() + openspace.globebrowsing.addGeoJson(earth.Earth.Identifier, Layer) +end) + +asset.onDeinitialize(function() + openspace.globebrowsing.deleteGeoJson(earth.Earth.Identifier, Layer) +end) + + + +asset.meta = { + Name = "Total 2010-07-11", + Description = "Total eclipse map for 2010-07-11", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2012-11-13.asset b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2012-11-13.asset new file mode 100644 index 0000000000..9afec60525 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2012-11-13.asset @@ -0,0 +1,34 @@ +local earth = asset.require("scene/solarsystem/planets/earth/earth") +local data = asset.require("../total_data") + + + +local Layer = { + Identifier = "Total-2012-11-13", + Enabled = false, + File = data.path .. "2012-11-13.geojson", + HeightOffset = 2000.0, + DefaultProperties = { + LineWidth = 2.0, + Extrude = true + } +} + + +asset.onInitialize(function() + openspace.globebrowsing.addGeoJson(earth.Earth.Identifier, Layer) +end) + +asset.onDeinitialize(function() + openspace.globebrowsing.deleteGeoJson(earth.Earth.Identifier, Layer) +end) + + + +asset.meta = { + Name = "Total 2012-11-13", + Description = "Total eclipse map for 2012-11-13", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2015-03-20.asset b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2015-03-20.asset new file mode 100644 index 0000000000..e733aa5b3a --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2015-03-20.asset @@ -0,0 +1,34 @@ +local earth = asset.require("scene/solarsystem/planets/earth/earth") +local data = asset.require("../total_data") + + + +local Layer = { + Identifier = "Total-2015-03-20", + Enabled = false, + File = data.path .. "2015-03-20.geojson", + HeightOffset = 2000.0, + DefaultProperties = { + LineWidth = 2.0, + Extrude = true + } +} + + +asset.onInitialize(function() + openspace.globebrowsing.addGeoJson(earth.Earth.Identifier, Layer) +end) + +asset.onDeinitialize(function() + openspace.globebrowsing.deleteGeoJson(earth.Earth.Identifier, Layer) +end) + + + +asset.meta = { + Name = "Total 2015-03-20", + Description = "Total eclipse map for 2015-03-20", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2016-03-09.asset b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2016-03-09.asset new file mode 100644 index 0000000000..aad772655f --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2016-03-09.asset @@ -0,0 +1,34 @@ +local earth = asset.require("scene/solarsystem/planets/earth/earth") +local data = asset.require("../total_data") + + + +local Layer = { + Identifier = "Total-2016-03-09", + Enabled = false, + File = data.path .. "2016-03-09.geojson", + HeightOffset = 2000.0, + DefaultProperties = { + LineWidth = 2.0, + Extrude = true + } +} + + +asset.onInitialize(function() + openspace.globebrowsing.addGeoJson(earth.Earth.Identifier, Layer) +end) + +asset.onDeinitialize(function() + openspace.globebrowsing.deleteGeoJson(earth.Earth.Identifier, Layer) +end) + + + +asset.meta = { + Name = "Total 2016-03-09", + Description = "Total eclipse map for 2016-03-09", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2017-08-21.asset b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2017-08-21.asset new file mode 100644 index 0000000000..4d8b25b734 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2017-08-21.asset @@ -0,0 +1,34 @@ +local earth = asset.require("scene/solarsystem/planets/earth/earth") +local data = asset.require("../total_data") + + + +local Layer = { + Identifier = "Total-2017-08-21", + Enabled = false, + File = data.path .. "2017-08-21.geojson", + HeightOffset = 2000.0, + DefaultProperties = { + LineWidth = 2.0, + Extrude = true + } +} + + +asset.onInitialize(function() + openspace.globebrowsing.addGeoJson(earth.Earth.Identifier, Layer) +end) + +asset.onDeinitialize(function() + openspace.globebrowsing.deleteGeoJson(earth.Earth.Identifier, Layer) +end) + + + +asset.meta = { + Name = "Total 2017-08-21", + Description = "Total eclipse map for 2017-08-21", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2019-07-02.asset b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2019-07-02.asset new file mode 100644 index 0000000000..463955f014 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2019-07-02.asset @@ -0,0 +1,34 @@ +local earth = asset.require("scene/solarsystem/planets/earth/earth") +local data = asset.require("../total_data") + + + +local Layer = { + Identifier = "Total-2019-07-02", + Enabled = false, + File = data.path .. "2019-07-02.geojson", + HeightOffset = 2000.0, + DefaultProperties = { + LineWidth = 2.0, + Extrude = true + } +} + + +asset.onInitialize(function() + openspace.globebrowsing.addGeoJson(earth.Earth.Identifier, Layer) +end) + +asset.onDeinitialize(function() + openspace.globebrowsing.deleteGeoJson(earth.Earth.Identifier, Layer) +end) + + + +asset.meta = { + Name = "Total 2019-07-02", + Description = "Total eclipse map for 2019-07-02", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2020-12-14.asset b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2020-12-14.asset new file mode 100644 index 0000000000..d14ce27524 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2020-12-14.asset @@ -0,0 +1,34 @@ +local earth = asset.require("scene/solarsystem/planets/earth/earth") +local data = asset.require("../total_data") + + + +local Layer = { + Identifier = "Total-2020-12-14", + Enabled = false, + File = data.path .. "2020-12-14.geojson", + HeightOffset = 2000.0, + DefaultProperties = { + LineWidth = 2.0, + Extrude = true + } +} + + +asset.onInitialize(function() + openspace.globebrowsing.addGeoJson(earth.Earth.Identifier, Layer) +end) + +asset.onDeinitialize(function() + openspace.globebrowsing.deleteGeoJson(earth.Earth.Identifier, Layer) +end) + + + +asset.meta = { + Name = "Total 2020-12-14", + Description = "Total eclipse map for 2020-12-14", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2021-12-04.asset b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2021-12-04.asset new file mode 100644 index 0000000000..341a466735 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2021-12-04.asset @@ -0,0 +1,34 @@ +local earth = asset.require("scene/solarsystem/planets/earth/earth") +local data = asset.require("../total_data") + + + +local Layer = { + Identifier = "Total-2021-12-04", + Enabled = false, + File = data.path .. "2021-12-04.geojson", + HeightOffset = 2000.0, + DefaultProperties = { + LineWidth = 2.0, + Extrude = true + } +} + + +asset.onInitialize(function() + openspace.globebrowsing.addGeoJson(earth.Earth.Identifier, Layer) +end) + +asset.onDeinitialize(function() + openspace.globebrowsing.deleteGeoJson(earth.Earth.Identifier, Layer) +end) + + + +asset.meta = { + Name = "Total 2021-12-04", + Description = "Total eclipse map for 2021-12-04", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2024-04-08.asset b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2024-04-08.asset new file mode 100644 index 0000000000..4d1bf0a6a2 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2024-04-08.asset @@ -0,0 +1,34 @@ +local earth = asset.require("scene/solarsystem/planets/earth/earth") +local data = asset.require("../total_data") + + + +local Layer = { + Identifier = "Total-2024-04-08", + Enabled = false, + File = data.path .. "2024-04-08.geojson", + HeightOffset = 2000.0, + DefaultProperties = { + LineWidth = 2.0, + Extrude = true + } +} + + +asset.onInitialize(function() + openspace.globebrowsing.addGeoJson(earth.Earth.Identifier, Layer) +end) + +asset.onDeinitialize(function() + openspace.globebrowsing.deleteGeoJson(earth.Earth.Identifier, Layer) +end) + + + +asset.meta = { + Name = "Total 2024-04-08", + Description = "Total eclipse map for 2024-04-08", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2026-08-12.asset b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2026-08-12.asset new file mode 100644 index 0000000000..dd3cc09e19 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2026-08-12.asset @@ -0,0 +1,34 @@ +local earth = asset.require("scene/solarsystem/planets/earth/earth") +local data = asset.require("../total_data") + + + +local Layer = { + Identifier = "Total-2026-08-12", + Enabled = false, + File = data.path .. "2026-08-12.geojson", + HeightOffset = 2000.0, + DefaultProperties = { + LineWidth = 2.0, + Extrude = true + } +} + + +asset.onInitialize(function() + openspace.globebrowsing.addGeoJson(earth.Earth.Identifier, Layer) +end) + +asset.onDeinitialize(function() + openspace.globebrowsing.deleteGeoJson(earth.Earth.Identifier, Layer) +end) + + + +asset.meta = { + Name = "Total 2026-08-12", + Description = "Total eclipse map for 2026-08-12", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2027-08-02.asset b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2027-08-02.asset new file mode 100644 index 0000000000..f5c7bb3ac0 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2027-08-02.asset @@ -0,0 +1,34 @@ +local earth = asset.require("scene/solarsystem/planets/earth/earth") +local data = asset.require("../total_data") + + + +local Layer = { + Identifier = "Total-2027-08-02", + Enabled = false, + File = data.path .. "2027-08-02.geojson", + HeightOffset = 2000.0, + DefaultProperties = { + LineWidth = 2.0, + Extrude = true + } +} + + +asset.onInitialize(function() + openspace.globebrowsing.addGeoJson(earth.Earth.Identifier, Layer) +end) + +asset.onDeinitialize(function() + openspace.globebrowsing.deleteGeoJson(earth.Earth.Identifier, Layer) +end) + + + +asset.meta = { + Name = "Total 2027-08-02", + Description = "Total eclipse map for 2027-08-02", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2028-07-22.asset b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2028-07-22.asset new file mode 100644 index 0000000000..d27392a283 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2028-07-22.asset @@ -0,0 +1,34 @@ +local earth = asset.require("scene/solarsystem/planets/earth/earth") +local data = asset.require("../total_data") + + + +local Layer = { + Identifier = "Total-2028-07-22", + Enabled = false, + File = data.path .. "2028-07-22.geojson", + HeightOffset = 2000.0, + DefaultProperties = { + LineWidth = 2.0, + Extrude = true + } +} + + +asset.onInitialize(function() + openspace.globebrowsing.addGeoJson(earth.Earth.Identifier, Layer) +end) + +asset.onDeinitialize(function() + openspace.globebrowsing.deleteGeoJson(earth.Earth.Identifier, Layer) +end) + + + +asset.meta = { + Name = "Total 2028-07-22", + Description = "Total eclipse map for 2028-07-22", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2030-11-25.asset b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2030-11-25.asset new file mode 100644 index 0000000000..7b269d180f --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2030-11-25.asset @@ -0,0 +1,34 @@ +local earth = asset.require("scene/solarsystem/planets/earth/earth") +local data = asset.require("../total_data") + + + +local Layer = { + Identifier = "Total-2030-11-25", + Enabled = false, + File = data.path .. "2030-11-25.geojson", + HeightOffset = 2000.0, + DefaultProperties = { + LineWidth = 2.0, + Extrude = true + } +} + + +asset.onInitialize(function() + openspace.globebrowsing.addGeoJson(earth.Earth.Identifier, Layer) +end) + +asset.onDeinitialize(function() + openspace.globebrowsing.deleteGeoJson(earth.Earth.Identifier, Layer) +end) + + + +asset.meta = { + Name = "Total 2030-11-25", + Description = "Total eclipse map for 2030-11-25", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2033-03-30.asset b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2033-03-30.asset new file mode 100644 index 0000000000..503855985d --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2033-03-30.asset @@ -0,0 +1,34 @@ +local earth = asset.require("scene/solarsystem/planets/earth/earth") +local data = asset.require("../total_data") + + + +local Layer = { + Identifier = "Total-2033-03-30", + Enabled = false, + File = data.path .. "2033-03-30.geojson", + HeightOffset = 2000.0, + DefaultProperties = { + LineWidth = 2.0, + Extrude = true + } +} + + +asset.onInitialize(function() + openspace.globebrowsing.addGeoJson(earth.Earth.Identifier, Layer) +end) + +asset.onDeinitialize(function() + openspace.globebrowsing.deleteGeoJson(earth.Earth.Identifier, Layer) +end) + + + +asset.meta = { + Name = "Total 2033-03-30", + Description = "Total eclipse map for 2033-03-30", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2034-03-20.asset b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2034-03-20.asset new file mode 100644 index 0000000000..a1168bfe2b --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2034-03-20.asset @@ -0,0 +1,34 @@ +local earth = asset.require("scene/solarsystem/planets/earth/earth") +local data = asset.require("../total_data") + + + +local Layer = { + Identifier = "Total-2034-03-20", + Enabled = false, + File = data.path .. "2034-03-20.geojson", + HeightOffset = 2000.0, + DefaultProperties = { + LineWidth = 2.0, + Extrude = true + } +} + + +asset.onInitialize(function() + openspace.globebrowsing.addGeoJson(earth.Earth.Identifier, Layer) +end) + +asset.onDeinitialize(function() + openspace.globebrowsing.deleteGeoJson(earth.Earth.Identifier, Layer) +end) + + + +asset.meta = { + Name = "Total 2034-03-20", + Description = "Total eclipse map for 2034-03-20", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2035-09-02.asset b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2035-09-02.asset new file mode 100644 index 0000000000..cf7827acc5 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2035-09-02.asset @@ -0,0 +1,34 @@ +local earth = asset.require("scene/solarsystem/planets/earth/earth") +local data = asset.require("../total_data") + + + +local Layer = { + Identifier = "Total-2035-09-02", + Enabled = false, + File = data.path .. "2035-09-02.geojson", + HeightOffset = 2000.0, + DefaultProperties = { + LineWidth = 2.0, + Extrude = true + } +} + + +asset.onInitialize(function() + openspace.globebrowsing.addGeoJson(earth.Earth.Identifier, Layer) +end) + +asset.onDeinitialize(function() + openspace.globebrowsing.deleteGeoJson(earth.Earth.Identifier, Layer) +end) + + + +asset.meta = { + Name = "Total 2035-09-02", + Description = "Total eclipse map for 2035-09-02", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2037-07-13.asset b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2037-07-13.asset new file mode 100644 index 0000000000..15fc082dab --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2037-07-13.asset @@ -0,0 +1,34 @@ +local earth = asset.require("scene/solarsystem/planets/earth/earth") +local data = asset.require("../total_data") + + + +local Layer = { + Identifier = "Total-2037-07-13", + Enabled = false, + File = data.path .. "2037-07-13.geojson", + HeightOffset = 2000.0, + DefaultProperties = { + LineWidth = 2.0, + Extrude = true + } +} + + +asset.onInitialize(function() + openspace.globebrowsing.addGeoJson(earth.Earth.Identifier, Layer) +end) + +asset.onDeinitialize(function() + openspace.globebrowsing.deleteGeoJson(earth.Earth.Identifier, Layer) +end) + + + +asset.meta = { + Name = "Total 2037-07-13", + Description = "Total eclipse map for 2037-07-13", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2038-12-26.asset b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2038-12-26.asset new file mode 100644 index 0000000000..92c3bf1de0 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2038-12-26.asset @@ -0,0 +1,34 @@ +local earth = asset.require("scene/solarsystem/planets/earth/earth") +local data = asset.require("../total_data") + + + +local Layer = { + Identifier = "Total-2038-12-26", + Enabled = false, + File = data.path .. "2038-12-26.geojson", + HeightOffset = 2000.0, + DefaultProperties = { + LineWidth = 2.0, + Extrude = true + } +} + + +asset.onInitialize(function() + openspace.globebrowsing.addGeoJson(earth.Earth.Identifier, Layer) +end) + +asset.onDeinitialize(function() + openspace.globebrowsing.deleteGeoJson(earth.Earth.Identifier, Layer) +end) + + + +asset.meta = { + Name = "Total 2038-12-26", + Description = "Total eclipse map for 2038-12-26", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2039-12-15.asset b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2039-12-15.asset new file mode 100644 index 0000000000..53edd247ef --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2039-12-15.asset @@ -0,0 +1,34 @@ +local earth = asset.require("scene/solarsystem/planets/earth/earth") +local data = asset.require("../total_data") + + + +local Layer = { + Identifier = "Total-2039-12-15", + Enabled = false, + File = data.path .. "2039-12-15.geojson", + HeightOffset = 2000.0, + DefaultProperties = { + LineWidth = 2.0, + Extrude = true + } +} + + +asset.onInitialize(function() + openspace.globebrowsing.addGeoJson(earth.Earth.Identifier, Layer) +end) + +asset.onDeinitialize(function() + openspace.globebrowsing.deleteGeoJson(earth.Earth.Identifier, Layer) +end) + + + +asset.meta = { + Name = "Total 2039-12-15", + Description = "Total eclipse map for 2039-12-15", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2041-04-30.asset b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2041-04-30.asset new file mode 100644 index 0000000000..1d1a60b078 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2041-04-30.asset @@ -0,0 +1,34 @@ +local earth = asset.require("scene/solarsystem/planets/earth/earth") +local data = asset.require("../total_data") + + + +local Layer = { + Identifier = "Total-2041-04-30", + Enabled = false, + File = data.path .. "2041-04-30.geojson", + HeightOffset = 2000.0, + DefaultProperties = { + LineWidth = 2.0, + Extrude = true + } +} + + +asset.onInitialize(function() + openspace.globebrowsing.addGeoJson(earth.Earth.Identifier, Layer) +end) + +asset.onDeinitialize(function() + openspace.globebrowsing.deleteGeoJson(earth.Earth.Identifier, Layer) +end) + + + +asset.meta = { + Name = "Total 2041-04-30", + Description = "Total eclipse map for 2041-04-30", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2042-04-20.asset b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2042-04-20.asset new file mode 100644 index 0000000000..f4fc2a76a1 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2042-04-20.asset @@ -0,0 +1,34 @@ +local earth = asset.require("scene/solarsystem/planets/earth/earth") +local data = asset.require("../total_data") + + + +local Layer = { + Identifier = "Total-2042-04-20", + Enabled = false, + File = data.path .. "2042-04-20.geojson", + HeightOffset = 2000.0, + DefaultProperties = { + LineWidth = 2.0, + Extrude = true + } +} + + +asset.onInitialize(function() + openspace.globebrowsing.addGeoJson(earth.Earth.Identifier, Layer) +end) + +asset.onDeinitialize(function() + openspace.globebrowsing.deleteGeoJson(earth.Earth.Identifier, Layer) +end) + + + +asset.meta = { + Name = "Total 2042-04-20", + Description = "Total eclipse map for 2042-04-20", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2043-04-09.asset b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2043-04-09.asset new file mode 100644 index 0000000000..aa48d081eb --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total/2043-04-09.asset @@ -0,0 +1,34 @@ +local earth = asset.require("scene/solarsystem/planets/earth/earth") +local data = asset.require("../total_data") + + + +local Layer = { + Identifier = "Total-2043-04-09", + Enabled = false, + File = data.path .. "2043-04-09.geojson", + HeightOffset = 2000.0, + DefaultProperties = { + LineWidth = 2.0, + Extrude = true + } +} + + +asset.onInitialize(function() + openspace.globebrowsing.addGeoJson(earth.Earth.Identifier, Layer) +end) + +asset.onDeinitialize(function() + openspace.globebrowsing.deleteGeoJson(earth.Earth.Identifier, Layer) +end) + + + +asset.meta = { + Name = "Total 2043-04-09", + Description = "Total eclipse map for 2043-04-09", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total_data.asset b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total_data.asset new file mode 100644 index 0000000000..ff5da00b86 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/eclipses/paths/total_data.asset @@ -0,0 +1,8 @@ +local data = asset.resource({ + Name = "Total Eclipse Paths", + Type = "HttpSynchronization", + Identifier = "earth-eclipse-path-total", + Version = 1 +}) + +asset.export("path", data) diff --git a/data/assets/scene/solarsystem/planets/earth/eclipses/timeline.asset b/data/assets/scene/solarsystem/planets/earth/eclipses/timeline.asset new file mode 100644 index 0000000000..a94559e606 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/eclipses/timeline.asset @@ -0,0 +1,2290 @@ +local Timeline = { + Identifier = "Eclipses", + Name = "Eclipses", + Image = "https://www.esa.int/var/esa/storage/images/esa_multimedia/images/2019/07/stages_of_a_total_solar_eclipse/19468511-1-eng-GB/Stages_of_a_total_solar_eclipse_pillars.jpg", + Description = "An eclipse is an awe-inspiring celestial event that drastically changes the appearance of the two biggest objects we see in our sky: our Sun and Moon. On Earth, people can experience solar eclipses when Earth, the Moon, and the Sun line up. There are four types of solar eclipses: total, partial, hybrid, and annular. The type of eclipse that people get to see depends on how the Moon aligns with Earth and the Sun, and how far away the Moon is from Earth. In addition to inspiring artists and musicians, eclipses have driven numerous scientific discoveries. For over a century, solar eclipses helped scientists decipher the Sun's structure and explosive events, find evidence for the theory of general relativity, discover a new element, and much more. Scientists still study eclipses to make new discoveries about the Sun, Earth, and our space environment. Total solar eclipses are particularly important because they allow scientists to see a part of the Sun's atmosphere - known as the corona - which is too faint to see except when the bright light of the Sun's surface is blocked.", + TimeRange = { + Start = "1900 Jan 01", + End = "2099 Dec 31" + }, + Milestones = { + { + Name = "Total Eclipse", + Date = "1901 May 18 05:33:48", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1901-05-18.gif" + }, + { + Name = "Annular Eclipse", + Date = "1901 Nov 11 07:28:21", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1901-11-11.gif" + }, + { + Name = "Partial Eclipse", + Date = "1902 Apr 08 14:05:06", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1902-04-08.gif" + }, + { + Name = "Partial Eclipse", + Date = "1902 May 07 22:34:16", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1902-05-07.gif" + }, + { + Name = "Partial Eclipse", + Date = "1902 Oct 31 08:00:18", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1902-10-31.gif" + }, + { + Name = "Annular Eclipse", + Date = "1903 Mar 29 01:35:2", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1903-03-29.gif" + }, + { + Name = "Total Eclipse", + Date = "1903 Sep 21 04:39:52", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1903-09-21.gif" + }, + { + Name = "Annular Eclipse", + Date = "1904 Mar 17 05:40:44", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1904-03-17.gif" + }, + { + Name = "Total Eclipse", + Date = "1904 Sep 09 20:44:21", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1904-09-09.gif" + }, + { + Name = "Annular Eclipse", + Date = "1905 Mar 06 05:12:26", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1905-03-06.gif" + }, + { + Name = "Total Eclipse", + Date = "1905 Aug 30 13:07:26", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1905-08-30.gif" + }, + { + Name = "Partial Eclipse", + Date = "1906 Feb 23 07:43:20", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1906-02-23.gif" + }, + { + Name = "Partial Eclipse", + Date = "1906 Jul 21 13:14:19", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1906-07-21.gif" + }, + { + Name = "Partial Eclipse", + Date = "1906 Aug 20 01:12:50", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1906-08-20.gif" + }, + { + Name = "Total Eclipse", + Date = "1907 Jan 14 06:05:43", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1907-01-14.gif" + }, + { + Name = "Annular Eclipse", + Date = "1907 Jul 10 15:24:32", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1907-07-10.gif" + }, + { + Name = "Total Eclipse", + Date = "1908 Jan 03 21:45:22", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1908-01-03.gif" + }, + { + Name = "Annular Eclipse", + Date = "1908 Jun 28 16:29:51", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1908-06-28.gif" + }, + { + Name = "Hybrid Eclipse", + Date = "1908 Dec 23 11:44:28", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1908-12-23.gif" + }, + { + Name = "Hybrid Eclipse", + Date = "1909 Jun 17 23:18:38", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1909-06-17.gif" + }, + { + Name = "Partial Eclipse", + Date = "1909 Dec 12 19:44:48", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1909-12-12.gif" + }, + { + Name = "Total Eclipse", + Date = "1910 May 09 05:42:13", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1910-05-09.gif" + }, + { + Name = "Partial Eclipse", + Date = "1910 Nov 02 02:08:32", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1910-11-02.gif" + }, + { + Name = "Total Eclipse", + Date = "1911 Apr 28 22:27:22", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1911-04-28.gif" + }, + { + Name = "Annular Eclipse", + Date = "1911 Oct 22 04:13:02", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1911-10-22.gif" + }, + { + Name = "Hybrid Eclipse", + Date = "1912 Apr 17 11:34:22", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1912-04-17.gif" + }, + { + Name = "Total Eclipse", + Date = "1912 Oct 10 13:36:14", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1912-10-10.gif" + }, + { + Name = "Partial Eclipse", + Date = "1913 Apr 06 17:33:07", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1913-04-06.gif" + }, + { + Name = "Partial Eclipse", + Date = "1913 Aug 31 20:52:12", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1913-08-31.gif" + }, + { + Name = "Partial Eclipse", + Date = "1913 Sep 30 04:45:49", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1913-09-30.gif" + }, + { + Name = "Annular Eclipse", + Date = "1914 Feb 25 00:13:01", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1914-02-25.gif" + }, + { + Name = "Total Eclipse", + Date = "1914 Aug 21 12:34:27", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1914-08-21.gif" + }, + { + Name = "Annular Eclipse", + Date = "1915 Feb 14 04:33:20", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1915-02-14.gif" + }, + { + Name = "Annular Eclipse", + Date = "1915 Aug 10 22:52:25", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1915-08-10.gif" + }, + { + Name = "Total Eclipse", + Date = "1916 Feb 03 16:00:21", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1916-02-03.gif" + }, + { + Name = "Annular Eclipse", + Date = "1916 Jul 30 02:06:10", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1916-07-30.gif" + }, + { + Name = "Partial Eclipse", + Date = "1916 Dec 24 20:46:22", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1916-12-24.gif" + }, + { + Name = "Partial Eclipse", + Date = "1917 Jan 23 07:28:31", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1917-01-23.gif" + }, + { + Name = "Partial Eclipse", + Date = "1917 Jun 19 13:16:21", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1917-06-19.gif" + }, + { + Name = "Partial Eclipse", + Date = "1917 Jul 19 02:42:42", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1917-07-19.gif" + }, + { + Name = "Annular Eclipse", + Date = "1917 Dec 14 09:27:20", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1917-12-14.gif" + }, + { + Name = "Total Eclipse", + Date = "1918 Jun 08 22:07:43", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1918-06-08.gif" + }, + { + Name = "Annular Eclipse", + Date = "1918 Dec 03 15:22:02", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1918-12-03.gif" + }, + { + Name = "Total Eclipse", + Date = "1919 May 29 13:08:55", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1919-05-29.gif" + }, + { + Name = "Annular Eclipse", + Date = "1919 Nov 22 15:14:12", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1919-11-22.gif" + }, + { + Name = "Partial Eclipse", + Date = "1920 May 18 06:14:55", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1920-05-18.gif" + }, + { + Name = "Partial Eclipse", + Date = "1920 Nov 10 15:52:15", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1920-11-10.gif" + }, + { + Name = "Annular Eclipse", + Date = "1921 Apr 08 09:15:01", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1921-04-08.gif" + }, + { + Name = "Total Eclipse", + Date = "1921 Oct 01 12:35:58", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1921-10-01.gif" + }, + { + Name = "Annular Eclipse", + Date = "1922 Mar 28 13:05:26", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1922-03-28.gif" + }, + { + Name = "Total Eclipse", + Date = "1922 Sep 21 04:40:31", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1922-09-21.gif" + }, + { + Name = "Annular Eclipse", + Date = "1923 Mar 17 12:44:58", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1923-03-17.gif" + }, + { + Name = "Total Eclipse", + Date = "1923 Sep 10 20:47:29", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1923-09-10.gif" + }, + { + Name = "Partial Eclipse", + Date = "1924 Mar 05 15:44:20", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1924-03-05.gif" + }, + { + Name = "Partial Eclipse", + Date = "1924 Jul 31 19:58:20", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1924-07-31.gif" + }, + { + Name = "Partial Eclipse", + Date = "1924 Aug 30 08:23:00", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1924-08-30.gif" + }, + { + Name = "Total Eclipse", + Date = "1925 Jan 24 14:54:03", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1925-01-24.gif" + }, + { + Name = "Annular Eclipse", + Date = "1925 Jul 20 21:48:42", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1925-07-20.gif" + }, + { + Name = "Total Eclipse", + Date = "1926 Jan 14 06:36:58", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1926-01-14.gif" + }, + { + Name = "Annular Eclipse", + Date = "1926 Jul 09 23:06:02", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1926-07-09.gif" + }, + { + Name = "Annular Eclipse", + Date = "1927 Jan 03 20:22:53", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1927-01-03.gif" + }, + { + Name = "Total Eclipse", + Date = "1927 Jun 29 06:23:27", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1927-06-29.gif" + }, + { + Name = "Partial Eclipse", + Date = "1927 Dec 24 03:59:41", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1927-12-24.gif" + }, + { + Name = "Total Eclipse", + Date = "1928 May 19 13:24:20", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1928-05-19.gif" + }, + { + Name = "Partial Eclipse", + Date = "1928 Jun 17 20:27:28", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1928-06-17.gif" + }, + { + Name = "Partial Eclipse", + Date = "1928 Nov 12 09:48:24", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1928-11-12.gif" + }, + { + Name = "Total Eclipse", + Date = "1929 May 09 06:10:34", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1929-05-09.gif" + }, + { + Name = "Annular Eclipse", + Date = "1929 Nov 01 12:05:10", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1929-11-01.gif" + }, + { + Name = "Hybrid Eclipse", + Date = "1930 Apr 28 19:03:34", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1930-04-28.gif" + }, + { + Name = "Total Eclipse", + Date = "1930 Oct 21 21:43:53", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1930-10-21.gif" + }, + { + Name = "Partial Eclipse", + Date = "1931 Apr 18 00:45:35", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1931-04-18.gif" + }, + { + Name = "Partial Eclipse", + Date = "1931 Sep 12 04:41:25", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1931-09-12.gif" + }, + { + Name = "Partial Eclipse", + Date = "1931 Oct 11 12:55:40", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1931-10-11.gif" + }, + { + Name = "Annular Eclipse", + Date = "1932 Mar 07 07:55:50", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1932-03-07.gif" + }, + { + Name = "Total Eclipse", + Date = "1932 Aug 31 20:03:41", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1932-08-31.gif" + }, + { + Name = "Annular Eclipse", + Date = "1933 Feb 24 12:46:39", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1933-02-24.gif" + }, + { + Name = "Annular Eclipse", + Date = "1933 Aug 21 05:49:11", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1933-08-21.gif" + }, + { + Name = "Total Eclipse", + Date = "1934 Feb 14 00:38:41", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1934-02-14.gif" + }, + { + Name = "Annular Eclipse", + Date = "1934 Aug 10 08:37:48", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1934-08-10.gif" + }, + { + Name = "Partial Eclipse", + Date = "1935 Jan 05 05:35:46", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1935-01-05.gif" + }, + { + Name = "Partial Eclipse", + Date = "1935 Feb 03 16:16:20", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1935-02-03.gif" + }, + { + Name = "Partial Eclipse", + Date = "1935 Jun 30 19:59:46", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1935-06-30.gif" + }, + { + Name = "Partial Eclipse", + Date = "1935 Jul 30 09:16:28", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1935-07-30.gif" + }, + { + Name = "Annular Eclipse", + Date = "1935 Dec 25 17:59:52", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1935-12-25.gif" + }, + { + Name = "Total Eclipse", + Date = "1936 Jun 19 05:20:31", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1936-06-19.gif" + }, + { + Name = "Annular Eclipse", + Date = "1936 Dec 13 23:28:12", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1936-12-13.gif" + }, + { + Name = "Total Eclipse", + Date = "1937 Jun 08 20:41:02", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1937-06-08.gif" + }, + { + Name = "Annular Eclipse", + Date = "1937 Dec 02 23:05:45", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1937-12-02.gif" + }, + { + Name = "Total Eclipse", + Date = "1938 May 29 13:50:19", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1938-05-29.gif" + }, + { + Name = "Partial Eclipse", + Date = "1938 Nov 21 23:52:25", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1938-11-21.gif" + }, + { + Name = "Annular Eclipse", + Date = "1939 Apr 19 16:45:53", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1939-04-19.gif" + }, + { + Name = "Total Eclipse", + Date = "1939 Oct 12 20:40:23", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1939-10-12.gif" + }, + { + Name = "Annular Eclipse", + Date = "1940 Apr 07 20:21:21", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1940-04-07.gif" + }, + { + Name = "Total Eclipse", + Date = "1940 Oct 01 12:44:06", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1940-10-01.gif" + }, + { + Name = "Annular Eclipse", + Date = "1941 Mar 27 20:08:08", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1941-03-27.gif" + }, + { + Name = "Total Eclipse", + Date = "1941 Sep 21 04:34:03", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1941-09-21.gif" + }, + { + Name = "Partial Eclipse", + Date = "1942 Mar 16 23:37:07", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1942-03-16.gif" + }, + { + Name = "Partial Eclipse", + Date = "1942 Aug 12 02:45:12", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1942-08-12.gif" + }, + { + Name = "Partial Eclipse", + Date = "1942 Sep 10 15:39:32", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1942-09-10.gif" + }, + { + Name = "Total Eclipse", + Date = "1943 Feb 04 23:38:10", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1943-02-04.gif" + }, + { + Name = "Annular Eclipse", + Date = "1943 Aug 01 04:16:13", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1943-08-01.gif" + }, + { + Name = "Total Eclipse", + Date = "1944 Jan 25 15:26:42", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1944-01-25.gif" + }, + { + Name = "Annular Eclipse", + Date = "1944 Jul 20 05:43:13", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1944-07-20.gif" + }, + { + Name = "Annular Eclipse", + Date = "1945 Jan 14 05:01:43", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1945-01-14.gif" + }, + { + Name = "Total Eclipse", + Date = "1945 Jul 09 13:27:45", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1945-07-09.gif" + }, + { + Name = "Partial Eclipse", + Date = "1946 Jan 03 12:16:11", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1946-01-03.gif" + }, + { + Name = "Partial Eclipse", + Date = "1946 May 30 21:00:24", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1946-05-30.gif" + }, + { + Name = "Partial Eclipse", + Date = "1946 Jun 29 03:51:58", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1946-06-29.gif" + }, + { + Name = "Partial Eclipse", + Date = "1946 Nov 23 17:37:12", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1946-11-23.gif" + }, + { + Name = "Total Eclipse", + Date = "1947 May 20 13:47:47", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1947-05-20.gif" + }, + { + Name = "Annular Eclipse", + Date = "1947 Nov 12 20:05:37", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1947-11-12.gif" + }, + { + Name = "Annular Eclipse", + Date = "1948 May 09 02:26:04", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1948-05-09.gif" + }, + { + Name = "Total Eclipse", + Date = "1948 Nov 01 05:59:18", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1948-11-01.gif" + }, + { + Name = "Partial Eclipse", + Date = "1949 Apr 28 07:48:53", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1949-04-28.gif" + }, + { + Name = "Partial Eclipse", + Date = "1949 Oct 21 21:13:01", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1949-10-21.gif" + }, + { + Name = "Annular Eclipse", + Date = "1950 Mar 18 15:32:01", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1950-03-18.gif" + }, + { + Name = "Total Eclipse", + Date = "1950 Sep 12 03:38:47", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1950-09-12.gif" + }, + { + Name = "Annular Eclipse", + Date = "1951 Mar 07 20:53:40", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1951-03-07.gif" + }, + { + Name = "Annular Eclipse", + Date = "1951 Sep 01 12:51:51", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1951-09-01.gif" + }, + { + Name = "Total Eclipse", + Date = "1952 Feb 25 09:11:35", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1952-02-25.gif" + }, + { + Name = "Annular Eclipse", + Date = "1952 Aug 20 15:13:35", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1952-08-20.gif" + }, + { + Name = "Partial Eclipse", + Date = "1953 Feb 14 00:59:30", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1953-02-14.gif" + }, + { + Name = "Partial Eclipse", + Date = "1953 Jul 11 02:44:14", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1953-07-11.gif" + }, + { + Name = "Partial Eclipse", + Date = "1953 Aug 09 15:55:03", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1953-08-09.gif" + }, + { + Name = "Annular Eclipse", + Date = "1954 Jan 05 02:32:01", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1954-01-05.gif" + }, + { + Name = "Total Eclipse", + Date = "1954 Jun 30 12:32:38", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1954-06-30.gif" + }, + { + Name = "Annular Eclipse", + Date = "1954 Dec 25 07:36:42", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1954-12-25.gif" + }, + { + Name = "Total Eclipse", + Date = "1955 Jun 20 04:10:42", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1955-06-20.gif" + }, + { + Name = "Annular Eclipse", + Date = "1955 Dec 14 07:02:25", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1955-12-14.gif" + }, + { + Name = "Total Eclipse", + Date = "1956 Jun 08 21:20:39", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1956-06-08.gif" + }, + { + Name = "Partial Eclipse", + Date = "1956 Dec 02 08:00:35", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1956-12-02.gif" + }, + { + Name = "Annular Eclipse", + Date = "1957 Apr 30 00:05:28", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1957-04-30.gif" + }, + { + Name = "Total Eclipse", + Date = "1957 Oct 23 04:54:02", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1957-10-23.gif" + }, + { + Name = "Annular Eclipse", + Date = "1958 Apr 19 03:27:17", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1958-04-19.gif" + }, + { + Name = "Total Eclipse", + Date = "1958 Oct 12 20:55:28", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1958-10-12.gif" + }, + { + Name = "Annular Eclipse", + Date = "1959 Apr 08 03:24:08", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1959-04-08.gif" + }, + { + Name = "Total Eclipse", + Date = "1959 Oct 02 12:27:00", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1959-10-02.gif" + }, + { + Name = "Partial Eclipse", + Date = "1960 Mar 27 07:25:07", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1960-03-27.gif" + }, + { + Name = "Partial Eclipse", + Date = "1960 Sep 20 22:59:56", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1960-09-20.gif" + }, + { + Name = "Total Eclipse", + Date = "1961 Feb 15 08:19:48", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1961-02-15.gif" + }, + { + Name = "Annular Eclipse", + Date = "1961 Aug 11 10:46:47", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1961-08-11.gif" + }, + { + Name = "Total Eclipse", + Date = "1962 Feb 05 00:12:38", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1962-02-05.gif" + }, + { + Name = "Annular Eclipse", + Date = "1962 Jul 31 12:25:33", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1962-07-31.gif" + }, + { + Name = "Annular Eclipse", + Date = "1963 Jan 25 13:37:12", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1963-01-25.gif" + }, + { + Name = "Total Eclipse", + Date = "1963 Jul 20 20:36:13", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1963-07-20.gif" + }, + { + Name = "Partial Eclipse", + Date = "1964 Jan 14 20:30:08", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1964-01-14.gif" + }, + { + Name = "Partial Eclipse", + Date = "1964 Jun 10 04:34:07", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1964-06-10.gif" + }, + { + Name = "Partial Eclipse", + Date = "1964 Jul 09 11:17:53", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1964-07-09.gif" + }, + { + Name = "Partial Eclipse", + Date = "1964 Dec 04 01:31:54", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1964-12-04.gif" + }, + { + Name = "Total Eclipse", + Date = "1965 May 30 21:17:31", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1965-05-30.gif" + }, + { + Name = "Annular Eclipse", + Date = "1965 Nov 23 04:14:51", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1965-11-23.gif" + }, + { + Name = "Annular Eclipse", + Date = "1966 May 20 09:39:02", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1966-05-20.gif" + }, + { + Name = "Total Eclipse", + Date = "1966 Nov 12 14:23:28", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1966-11-12.gif" + }, + { + Name = "Partial Eclipse", + Date = "1967 May 09 14:42:48", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1967-05-09.gif" + }, + { + Name = "Total Eclipse", + Date = "1967 Nov 02 05:38:56", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1967-11-02.gif" + }, + { + Name = "Partial Eclipse", + Date = "1968 Mar 28 23:00:30", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1968-03-28.gif" + }, + { + Name = "Total Eclipse", + Date = "1968 Sep 22 11:18:46", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1968-09-22.gif" + }, + { + Name = "Annular Eclipse", + Date = "1969 Mar 18 04:54:57", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1969-03-18.gif" + }, + { + Name = "Annular Eclipse", + Date = "1969 Sep 11 19:58:59", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1969-09-11.gif" + }, + { + Name = "Total Eclipse", + Date = "1970 Mar 07 17:38:30", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1970-03-07.gif" + }, + { + Name = "Annular Eclipse", + Date = "1970 Aug 31 21:55:30", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1970-08-31.gif" + }, + { + Name = "Partial Eclipse", + Date = "1971 Feb 25 09:38:07", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1971-02-25.gif" + }, + { + Name = "Partial Eclipse", + Date = "1971 Jul 22 09:31:55", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1971-07-22.gif" + }, + { + Name = "Partial Eclipse", + Date = "1971 Aug 20 22:39:31", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1971-08-20.gif" + }, + { + Name = "Annular Eclipse", + Date = "1972 Jan 16 11:03:22", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1972-01-16.gif" + }, + { + Name = "Total Eclipse", + Date = "1972 Jul 10 19:46:38", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1972-07-10.gif" + }, + { + Name = "Annular Eclipse", + Date = "1973 Jan 04 15:46:21", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1973-01-04.gif" + }, + { + Name = "Total Eclipse", + Date = "1973 Jun 30 11:38:41", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1973-06-30.gif" + }, + { + Name = "Annular Eclipse", + Date = "1973 Dec 24 15:02:44", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1973-12-24.gif" + }, + { + Name = "Total Eclipse", + Date = "1974 Jun 20 04:48:04", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1974-06-20.gif" + }, + { + Name = "Partial Eclipse", + Date = "1974 Dec 13 16:13:13", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1974-12-13.gif" + }, + { + Name = "Partial Eclipse", + Date = "1975 May 11 07:17:33", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1975-05-11.gif" + }, + { + Name = "Partial Eclipse", + Date = "1975 Nov 03 13:15:54", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1975-11-03.gif" + }, + { + Name = "Annular Eclipse", + Date = "1976 Apr 29 10:24:18", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1976-04-29.gif" + }, + { + Name = "Total Eclipse", + Date = "1976 Oct 23 05:13:45", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1976-10-23.gif" + }, + { + Name = "Annular Eclipse", + Date = "1977 Apr 18 10:31:30", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1977-04-18.gif" + }, + { + Name = "Total Eclipse", + Date = "1977 Oct 12 20:27:27", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1977-10-12.gif" + }, + { + Name = "Partial Eclipse", + Date = "1978 Apr 07 15:03:47", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1978-04-07.gif" + }, + { + Name = "Partial Eclipse", + Date = "1978 Oct 02 06:28:43", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1978-10-02.gif" + }, + { + Name = "Total Eclipse", + Date = "1979 Feb 26 16:55:06", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1979-02-26.gif" + }, + { + Name = "Annular Eclipse", + Date = "1979 Aug 22 17:22:38", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1979-08-22.gif" + }, + { + Name = "Total Eclipse", + Date = "1980 Feb 16 08:54:01", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1980-02-16.gif" + }, + { + Name = "Annular Eclipse", + Date = "1980 Aug 10 19:12:21", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1980-08-10.gif" + }, + { + Name = "Annular Eclipse", + Date = "1981 Feb 04 22:09:24", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1981-02-04.gif" + }, + { + Name = "Total Eclipse", + Date = "1981 Jul 31 03:46:37", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1981-07-31.gif" + }, + { + Name = "Partial Eclipse", + Date = "1982 Jan 25 04:42:53", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1982-01-25.gif" + }, + { + Name = "Partial Eclipse", + Date = "1982 Jun 21 12:04:33", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1982-06-21.gif" + }, + { + Name = "Partial Eclipse", + Date = "1982 Jul 20 18:44:44", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1982-07-20.gif" + }, + { + Name = "Partial Eclipse", + Date = "1982 Dec 15 09:32:09", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1982-12-15.gif" + }, + { + Name = "Total Eclipse", + Date = "1983 Jun 11 04:43:33", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1983-06-11.gif" + }, + { + Name = "Annular Eclipse", + Date = "1983 Dec 04 12:31:15", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1983-12-04.gif" + }, + { + Name = "Annular Eclipse", + Date = "1984 May 30 16:45:41", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1984-05-30.gif" + }, + { + Name = "Total Eclipse", + Date = "1984 Nov 22 22:54:17", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1984-11-22.gif" + }, + { + Name = "Partial Eclipse", + Date = "1985 May 19 21:29:38", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1985-05-19.gif" + }, + { + Name = "Total Eclipse", + Date = "1985 Nov 12 14:11:27", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1985-11-12.gif" + }, + { + Name = "Partial Eclipse", + Date = "1986 Apr 09 06:21:22", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1986-04-09.gif" + }, + { + Name = "Hybrid Eclipse", + Date = "1986 Oct 03 19:06:15", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1986-10-03.gif" + }, + { + Name = "Hybrid Eclipse", + Date = "1987 Mar 29 12:49:47", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1987-03-29.gif" + }, + { + Name = "Annular Eclipse", + Date = "1987 Sep 23 03:12:22", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1987-09-23.gif" + }, + { + Name = "Total Eclipse", + Date = "1988 Mar 18 01:58:56", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1988-03-18.gif" + }, + { + Name = "Annular Eclipse", + Date = "1988 Sep 11 04:44:29", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1988-09-11.gif" + }, + { + Name = "Partial Eclipse", + Date = "1989 Mar 07 18:08:41", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1989-03-07.gif" + }, + { + Name = "Partial Eclipse", + Date = "1989 Aug 31 05:31:47", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1989-08-31.gif" + }, + { + Name = "Annular Eclipse", + Date = "1990 Jan 26 19:31:24", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1990-01-26.gif" + }, + { + Name = "Total Eclipse", + Date = "1990 Jul 22 03:03:07", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1990-07-22.gif" + }, + { + Name = "Annular Eclipse", + Date = "1991 Jan 15 23:53:51", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1991-01-15.gif" + }, + { + Name = "Total Eclipse", + Date = "1991 Jul 11 19:07:01", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1991-07-11.gif" + }, + { + Name = "Annular Eclipse", + Date = "1992 Jan 04 23:05:37", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1992-01-04.gif" + }, + { + Name = "Total Eclipse", + Date = "1992 Jun 30 12:11:22", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1992-06-30.gif" + }, + { + Name = "Partial Eclipse", + Date = "1992 Dec 24 00:31:41", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1992-12-24.gif" + }, + { + Name = "Partial Eclipse", + Date = "1993 May 21 14:20:15", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1993-05-21.gif" + }, + { + Name = "Partial Eclipse", + Date = "1993 Nov 13 21:45:51", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1993-11-13.gif" + }, + { + Name = "Annular Eclipse", + Date = "1994 May 10 17:12:26", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1994-05-10.gif" + }, + { + Name = "Total Eclipse", + Date = "1994 Nov 03 13:40:06", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1994-11-03.gif" + }, + { + Name = "Annular Eclipse", + Date = "1995 Apr 29 17:33:21", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1995-04-29.gif" + }, + { + Name = "Total Eclipse", + Date = "1995 Oct 24 04:33:30", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1995-10-24.gif" + }, + { + Name = "Partial Eclipse", + Date = "1996 Apr 17 22:38:12", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1996-04-17.gif" + }, + { + Name = "Partial Eclipse", + Date = "1996 Oct 12 14:03:04", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1996-10-12.gif" + }, + { + Name = "Total Eclipse", + Date = "1997 Mar 09 01:24:51", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1997-03-09.gif" + }, + { + Name = "Partial Eclipse", + Date = "1997 Sep 02 00:04:48", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1997-09-02.gif" + }, + { + Name = "Total Eclipse", + Date = "1998 Feb 26 17:29:27", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1998-02-26.gif" + }, + { + Name = "Annular Eclipse", + Date = "1998 Aug 22 02:07:11", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1998-08-22.gif" + }, + { + Name = "Annular Eclipse", + Date = "1999 Feb 16 06:34:38", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1999-02-16.gif" + }, + { + Name = "Total Eclipse", + Date = "1999 Aug 11 11:04:09", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/1999-08-11.gif" + }, + { + Name = "Partial Eclipse", + Date = "2000 Feb 05 12:50:27", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/2000-02-05.gif" + }, + { + Name = "Partial Eclipse", + Date = "2000 Jul 01 19:33:34", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/2000-07-01.gif" + }, + { + Name = "Partial Eclipse", + Date = "2000 Jul 31 02:14:08", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/2000-07-31.gif" + }, + { + Name = "Partial Eclipse", + Date = "2000 Dec 25 17:35:57", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/1901-2000/2000-12-25.gif" + }, + { + Name = "Total Eclipse", + Date = "2001 Jun 21 12:04:46", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2001-06-21.gif" + }, + { + Name = "Annular Eclipse", + Date = "2001 Dec 14 20:53:01", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2001-12-14.gif" + }, + { + Name = "Annular Eclipse", + Date = "2002 Jun 10 23:45:22", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2002-06-10.gif" + }, + { + Name = "Total Eclipse", + Date = "2002 Dec 04 07:32:16", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2002-12-04.gif" + }, + { + Name = "Annular Eclipse", + Date = "2003 May 31 04:09:22", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2003-05-31.gif" + }, + { + Name = "Total Eclipse", + Date = "2003 Nov 23 22:50:22", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2003-11-23.gif" + }, + { + Name = "Partial Eclipse", + Date = "2004 Apr 19 13:35:05", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2004-04-19.gif" + }, + { + Name = "Partial Eclipse", + Date = "2004 Oct 14 03:00:23", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2004-10-14.gif" + }, + { + Name = "Hybrid Eclipse", + Date = "2005 Apr 08 20:36:51", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2005-04-08.gif" + }, + { + Name = "Annular Eclipse", + Date = "2005 Oct 03 10:32:47", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2005-10-03.gif" + }, + { + Name = "Total Eclipse", + Date = "2006 Mar 29 10:12:23", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2006-03-29.gif" + }, + { + Name = "Annular Eclipse", + Date = "2006 Sep 22 11:41:16", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2006-09-22.gif" + }, + { + Name = "Partial Eclipse", + Date = "2007 Mar 19 02:32:57", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2007-03-19.gif" + }, + { + Name = "Partial Eclipse", + Date = "2007 Sep 11 12:32:24", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2007-09-11.gif" + }, + { + Name = "Annular Eclipse", + Date = "2008 Feb 07 03:56:10", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2008-02-07.gif" + }, + { + Name = "Total Eclipse", + Date = "2008 Aug 01 10:22:12", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2008-08-01.gif" + }, + { + Name = "Annular Eclipse", + Date = "2009 Jan 26 07:59:45", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2009-01-26.gif" + }, + { + Name = "Total Eclipse", + Date = "2009 Jul 22 02:36:25", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2009-07-22.gif" + }, + { + Name = "Annular Eclipse", + Date = "2010 Jan 15 07:07:39", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2010-01-15.gif" + }, + { + Name = "Total Eclipse", + Date = "2010 Jul 11 19:34:38", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2010-07-11.gif" + }, + { + Name = "Partial Eclipse", + Date = "2011 Jan 04 08:51:4", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2011-01-04.gif" + }, + { + Name = "Partial Eclipse", + Date = "2011 Jun 01 21:17:18", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2011-06-01.gif" + }, + { + Name = "Partial Eclipse", + Date = "2011 Jul 01 08:39:30", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2011-07-01.gif" + }, + { + Name = "Partial Eclipse", + Date = "2011 Nov 25 06:21:24", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2011-11-25.gif" + }, + { + Name = "Annular Eclipse", + Date = "2012 May 20 23:53:54", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2012-05-20.gif" + }, + { + Name = "Total Eclipse", + Date = "2012 Nov 13 22:12:55", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2012-11-13.gif" + }, + { + Name = "Annular Eclipse", + Date = "2013 May 10 00:26:20", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2013-05-10.gif" + }, + { + Name = "Hybrid Eclipse", + Date = "2013 Nov 03 12:47:36", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2013-11-03.gif" + }, + { + Name = "Annular Eclipse", + Date = "2014 Apr 29 06:04:33", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2014-04-29.gif" + }, + { + Name = "Partial Eclipse", + Date = "2014 Oct 23 21:45:39", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2014-10-23.gif" + }, + { + Name = "Total Eclipse", + Date = "2015 Mar 20 09:46:47", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2015-03-20.gif" + }, + { + Name = "Partial Eclipse", + Date = "2015 Sep 13 06:55:19", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2015-09-13.gif" + }, + { + Name = "Total Eclipse", + Date = "2016 Mar 09 01:58:19", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2016-03-09.gif" + }, + { + Name = "Annular Eclipse", + Date = "2016 Sep 01 09:08:02", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2016-09-01.gif" + }, + { + Name = "Annular Eclipse", + Date = "2017 Feb 26 14:54:33", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2017-02-26.gif" + }, + { + Name = "Total Eclipse", + Date = "2017 Aug 21 18:26:40", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2017-08-21.gif" + }, + { + Name = "Partial Eclipse", + Date = "2018 Feb 15 20:52:33", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2018-02-15.gif" + }, + { + Name = "Partial Eclipse", + Date = "2018 Jul 13 03:02:16", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2018-07-13.gif" + }, + { + Name = "Partial Eclipse", + Date = "2018 Aug 11 09:47:28", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2018-08-11.gif" + }, + { + Name = "Partial Eclipse", + Date = "2019 Jan 06 01:42:38", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2019-01-06.gif" + }, + { + Name = "Total Eclipse", + Date = "2019 Jul 02 19:24:07", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2019-07-02.gif" + }, + { + Name = "Annular Eclipse", + Date = "2019 Dec 26 05:18:53", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2019-12-26.gif" + }, + { + Name = "Annular Eclipse", + Date = "2020 Jun 21 06:41:15", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2020-06-21.gif" + }, + { + Name = "Total Eclipse", + Date = "2020 Dec 14 16:14:39", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2020-12-14.gif" + }, + { + Name = "Annular Eclipse", + Date = "2021 Jun 10 10:43:07", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2021-06-10.gif" + }, + { + Name = "Total Eclipse", + Date = "2021 Dec 04 07:34:38", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2021-12-04.gif" + }, + { + Name = "Partial Eclipse", + Date = "2022 Apr 30 20:42:36", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2022-04-30.gif" + }, + { + Name = "Partial Eclipse", + Date = "2022 Oct 25 11:01:20", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2022-10-25.gif" + }, + { + Name = "Hybrid Eclipse", + Date = "2023 Apr 20 04:17:56", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2023-04-20.gif" + }, + { + Name = "Annular Eclipse", + Date = "2023 Oct 14 18:00:41", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2023-10-14.gif" + }, + { + Name = "Total Eclipse", + Date = "2024 Apr 08 18:18:29", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2024-04-08.gif" + }, + { + Name = "Annular Eclipse", + Date = "2024 Oct 02 18:46:13", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2024-10-02.gif" + }, + { + Name = "Partial Eclipse", + Date = "2025 Mar 29 10:48:36", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2025-03-29.gif" + }, + { + Name = "Partial Eclipse", + Date = "2025 Sep 21 19:43:04", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2025-09-21.gif" + }, + { + Name = "Annular Eclipse", + Date = "2026 Feb 17 12:13:06", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2026-02-17.gif" + }, + { + Name = "Total Eclipse", + Date = "2026 Aug 12 17:47:06", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2026-08-12.gif" + }, + { + Name = "Annular Eclipse", + Date = "2027 Feb 06 16:00:48", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2027-02-06.gif" + }, + { + Name = "Total Eclipse", + Date = "2027 Aug 02 10:07:50", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2027-08-02.gif" + }, + { + Name = "Annular Eclipse", + Date = "2028 Jan 26 15:08:59", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2028-01-26.gif" + }, + { + Name = "Total Eclipse", + Date = "2028 Jul 22 02:56:40", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2028-07-22.gif" + }, + { + Name = "Partial Eclipse", + Date = "2029 Jan 14 17:13:48", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2029-01-14.gif" + }, + { + Name = "Partial Eclipse", + Date = "2029 Jun 12 04:06:13", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2029-06-12.gif" + }, + { + Name = "Partial Eclipse", + Date = "2029 Jul 11 15:37:19", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2029-07-11.gif" + }, + { + Name = "Partial Eclipse", + Date = "2029 Dec 05 15:03:58", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2029-12-05.gif" + }, + { + Name = "Annular Eclipse", + Date = "2030 Jun 01 06:29:13", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2030-06-01.gif" + }, + { + Name = "Total Eclipse", + Date = "2030 Nov 25 06:51:37", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2030-11-25.gif" + }, + { + Name = "Annular Eclipse", + Date = "2031 May 21 07:16:04", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2031-05-21.gif" + }, + { + Name = "Hybrid Eclipse", + Date = "2031 Nov 14 21:07:31", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2031-11-14.gif" + }, + { + Name = "Annular Eclipse", + Date = "2032 May 09 13:26:42", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2032-05-09.gif" + }, + { + Name = "Partial Eclipse", + Date = "2032 Nov 03 05:34:13", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2032-11-03.gif" + }, + { + Name = "Total Eclipse", + Date = "2033 Mar 30 18:02:36", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2033-03-30.gif" + }, + { + Name = "Partial Eclipse", + Date = "2033 Sep 23 13:54:31", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2033-09-23.gif" + }, + { + Name = "Total Eclipse", + Date = "2034 Mar 20 10:18:45", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2034-03-20.gif" + }, + { + Name = "Annular Eclipse", + Date = "2034 Sep 12 16:19:28", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2034-09-12.gif" + }, + { + Name = "Annular Eclipse", + Date = "2035 Mar 09 23:05:54", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2035-03-09.gif" + }, + { + Name = "Total Eclipse", + Date = "2035 Sep 02 01:56:46", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2035-09-02.gif" + }, + { + Name = "Partial Eclipse", + Date = "2036 Feb 27 04:46:49", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2036-02-27.gif" + }, + { + Name = "Partial Eclipse", + Date = "2036 Jul 23 10:32:06", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2036-07-23.gif" + }, + { + Name = "Partial Eclipse", + Date = "2036 Aug 21 17:25:45", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2036-08-21.gif" + }, + { + Name = "Partial Eclipse", + Date = "2037 Jan 16 09:48:55", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2037-01-16.gif" + }, + { + Name = "Total Eclipse", + Date = "2037 Jul 13 02:40:36", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2037-07-13.gif" + }, + { + Name = "Annular Eclipse", + Date = "2038 Jan 05 13:47:11", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2038-01-05.gif" + }, + { + Name = "Annular Eclipse", + Date = "2038 Jul 02 13:32:55", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2038-07-02.gif" + }, + { + Name = "Total Eclipse", + Date = "2038 Dec 26 01:00:10", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2038-12-26.gif" + }, + { + Name = "Annular Eclipse", + Date = "2039 Jun 21 17:12:54", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2039-06-21.gif" + }, + { + Name = "Total Eclipse", + Date = "2039 Dec 15 16:23:46", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2039-12-15.gif" + }, + { + Name = "Partial Eclipse", + Date = "2040 May 11 03:43:02", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2040-05-11.gif" + }, + { + Name = "Partial Eclipse", + Date = "2040 Nov 04 19:09:02", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2040-11-04.gif" + }, + { + Name = "Total Eclipse", + Date = "2041 Apr 30 11:52:21", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2041-04-30.gif" + }, + { + Name = "Annular Eclipse", + Date = "2041 Oct 25 01:36:22", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2041-10-25.gif" + }, + { + Name = "Total Eclipse", + Date = "2042 Apr 20 02:17:30", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2042-04-20.gif" + }, + { + Name = "Annular Eclipse", + Date = "2042 Oct 14 02:00:42", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2042-10-14.gif" + }, + { + Name = "Total Eclipse", + Date = "2043 Apr 09 18:57:49", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2043-04-09.gif" + }, + { + Name = "Annular Eclipse", + Date = "2043 Oct 03 03:01:49", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2043-10-03.gif" + }, + { + Name = "Annular Eclipse", + Date = "2044 Feb 28 20:24:39", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2044-02-28.gif" + }, + { + Name = "Total Eclipse", + Date = "2044 Aug 23 01:17:02", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2044-08-23.gif" + }, + { + Name = "Annular Eclipse", + Date = "2045 Feb 16 23:56:07", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2045-02-16.gif" + }, + { + Name = "Total Eclipse", + Date = "2045 Aug 12 17:42:39", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2045-08-12.gif" + }, + { + Name = "Annular Eclipse", + Date = "2046 Feb 05 23:06:26", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2046-02-05.gif" + }, + { + Name = "Total Eclipse", + Date = "2046 Aug 02 10:21:13", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2046-08-02.gif" + }, + { + Name = "Partial Eclipse", + Date = "2047 Jan 26 01:33:18", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2047-01-26.gif" + }, + { + Name = "Partial Eclipse", + Date = "2047 Jun 23 10:52:31", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2047-06-23.gif" + }, + { + Name = "Partial Eclipse", + Date = "2047 Jul 22 22:36:17", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2047-07-22.gif" + }, + { + Name = "Partial Eclipse", + Date = "2047 Dec 16 23:50:12", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2047-12-16.gif" + }, + { + Name = "Annular Eclipse", + Date = "2048 Jun 11 12:58:53", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2048-06-11.gif" + }, + { + Name = "Total Eclipse", + Date = "2048 Dec 05 15:35:27", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2048-12-05.gif" + }, + { + Name = "Annular Eclipse", + Date = "2049 May 31 13:59:59", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2049-05-31.gif" + }, + { + Name = "Hybrid Eclipse", + Date = "2049 Nov 25 05:33:48", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2049-11-25.gif" + }, + { + Name = "Hybrid Eclipse", + Date = "2050 May 20 20:42:50", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2050-05-20.gif" + }, + { + Name = "Partial Eclipse", + Date = "2050 Nov 14 13:30:53", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2050-11-14.gif" + }, + { + Name = "Partial Eclipse", + Date = "2051 Apr 11 02:10:39", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2051-04-11.gif" + }, + { + Name = "Partial Eclipse", + Date = "2051 Oct 04 21:02:14", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2051-10-04.gif" + }, + { + Name = "Total Eclipse", + Date = "2052 Mar 30 18:31:53", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2052-03-30.gif" + }, + { + Name = "Annular Eclipse", + Date = "2052 Sep 22 23:39:10", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2052-09-22.gif" + }, + { + Name = "Annular Eclipse", + Date = "2053 Mar 20 07:08:19", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2053-03-20.gif" + }, + { + Name = "Total Eclipse", + Date = "2053 Sep 12 09:34:09", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2053-09-12.gif" + }, + { + Name = "Partial Eclipse", + Date = "2054 Mar 09 12:33:40", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2054-03-09.gif" + }, + { + Name = "Partial Eclipse", + Date = "2054 Aug 03 18:04:02", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2054-08-03.gif" + }, + { + Name = "Partial Eclipse", + Date = "2054 Sep 02 01:09:34", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2054-09-02.gif" + }, + { + Name = "Partial Eclipse", + Date = "2055 Jan 27 17:54:05", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2055-01-27.gif" + }, + { + Name = "Total Eclipse", + Date = "2055 Jul 24 09:57:50", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2055-07-24.gif" + }, + { + Name = "Annular Eclipse", + Date = "2056 Jan 16 22:16:45", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2056-01-16.gif" + }, + { + Name = "Annular Eclipse", + Date = "2056 Jul 12 20:21:59", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2056-07-12.gif" + }, + { + Name = "Total Eclipse", + Date = "2057 Jan 05 09:47:52", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2057-01-05.gif" + }, + { + Name = "Annular Eclipse", + Date = "2057 Jul 01 23:40:15", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2057-07-01.gif" + }, + { + Name = "Total Eclipse", + Date = "2057 Dec 26 01:14:35", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2057-12-26.gif" + }, + { + Name = "Partial Eclipse", + Date = "2058 May 22 10:39:25", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2058-05-22.gif" + }, + { + Name = "Partial Eclipse", + Date = "2058 Jun 21 00:19:35", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2058-06-21.gif" + }, + { + Name = "Partial Eclipse", + Date = "2058 Nov 16 03:23:07", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2058-11-16.gif" + }, + { + Name = "Total Eclipse", + Date = "2059 May 11 19:22:16", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2059-05-11.gif" + }, + { + Name = "Annular Eclipse", + Date = "2059 Nov 05 09:18:15", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2059-11-05.gif" + }, + { + Name = "Total Eclipse", + Date = "2060 Apr 30 10:10:00", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2060-04-30.gif" + }, + { + Name = "Annular Eclipse", + Date = "2060 Oct 24 09:24:10", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2060-10-24.gif" + }, + { + Name = "Total Eclipse", + Date = "2061 Apr 20 02:56:49", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2061-04-20.gif" + }, + { + Name = "Annular Eclipse", + Date = "2061 Oct 13 10:32:10", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2061-10-13.gif" + }, + { + Name = "Partial Eclipse", + Date = "2062 Mar 11 04:26:16", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2062-03-11.gif" + }, + { + Name = "Partial Eclipse", + Date = "2062 Sep 03 08:54:27", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2062-09-03.gif" + }, + { + Name = "Annular Eclipse", + Date = "2063 Feb 28 07:43:30", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2063-02-28.gif" + }, + { + Name = "Total Eclipse", + Date = "2063 Aug 24 01:22:11", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2063-08-24.gif" + }, + { + Name = "Annular Eclipse", + Date = "2064 Feb 17 07:00:23", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2064-02-17.gif" + }, + { + Name = "Total Eclipse", + Date = "2064 Aug 12 17:46:06", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2064-08-12.gif" + }, + { + Name = "Partial Eclipse", + Date = "2065 Feb 05 09:52:26", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2065-02-05.gif" + }, + { + Name = "Partial Eclipse", + Date = "2065 Jul 03 17:33:52", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2065-07-03.gif" + }, + { + Name = "Partial Eclipse", + Date = "2065 Aug 02 05:34:17", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2065-08-02.gif" + }, + { + Name = "Partial Eclipse", + Date = "2065 Dec 27 08:39:56", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2065-12-27.gif" + }, + { + Name = "Annular Eclipse", + Date = "2066 Jun 22 19:25:48", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2066-06-22.gif" + }, + { + Name = "Total Eclipse", + Date = "2066 Dec 17 00:23:40", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2066-12-17.gif" + }, + { + Name = "Annular Eclipse", + Date = "2067 Jun 11 20:42:26", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2067-06-11.gif" + }, + { + Name = "Hybrid Eclipse", + Date = "2067 Dec 06 14:03:43", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2067-12-06.gif" + }, + { + Name = "Total Eclipse", + Date = "2068 May 31 03:56:39", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2068-05-31.gif" + }, + { + Name = "Partial Eclipse", + Date = "2068 Nov 24 21:32:30", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2068-11-24.gif" + }, + { + Name = "Partial Eclipse", + Date = "2069 Apr 21 10:11:09", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2069-04-21.gif" + }, + { + Name = "Partial Eclipse", + Date = "2069 May 20 17:53:18", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2069-05-20.gif" + }, + { + Name = "Partial Eclipse", + Date = "2069 Oct 15 04:19:56", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2069-10-15.gif" + }, + { + Name = "Total Eclipse", + Date = "2070 Apr 11 02:36:09", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2070-04-11.gif" + }, + { + Name = "Annular Eclipse", + Date = "2070 Oct 04 07:08:57", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2070-10-04.gif" + }, + { + Name = "Annular Eclipse", + Date = "2071 Mar 31 15:01:06", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2071-03-31.gif" + }, + { + Name = "Total Eclipse", + Date = "2071 Sep 23 17:20:28", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2071-09-23.gif" + }, + { + Name = "Partial Eclipse", + Date = "2072 Mar 19 20:10:31", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2072-03-19.gif" + }, + { + Name = "Total Eclipse", + Date = "2072 Sep 12 08:59:20", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2072-09-12.gif" + }, + { + Name = "Partial Eclipse", + Date = "2073 Feb 07 01:55:59", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2073-02-07.gif" + }, + { + Name = "Total Eclipse", + Date = "2073 Aug 03 17:15:23", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2073-08-03.gif" + }, + { + Name = "Annular Eclipse", + Date = "2074 Jan 27 06:44:15", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2074-01-27.gif" + }, + { + Name = "Annular Eclipse", + Date = "2074 Jul 24 03:10:32", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2074-07-24.gif" + }, + { + Name = "Total Eclipse", + Date = "2075 Jan 16 18:36:04", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2075-01-16.gif" + }, + { + Name = "Annular Eclipse", + Date = "2075 Jul 13 06:05:44", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2075-07-13.gif" + }, + { + Name = "Total Eclipse", + Date = "2076 Jan 06 10:07:27", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2076-01-06.gif" + }, + { + Name = "Partial Eclipse", + Date = "2076 Jun 01 17:31:22", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2076-06-01.gif" + }, + { + Name = "Partial Eclipse", + Date = "2076 Jul 01 06:50:43", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2076-07-01.gif" + }, + { + Name = "Partial Eclipse", + Date = "2076 Nov 26 11:43:01", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2076-11-26.gif" + }, + { + Name = "Total Eclipse", + Date = "2077 May 22 02:46:05", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2077-05-22.gif" + }, + { + Name = "Annular Eclipse", + Date = "2077 Nov 15 17:07:56", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2077-11-15.gif" + }, + { + Name = "Total Eclipse", + Date = "2078 May 11 17:56:55", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2078-05-11.gif" + }, + { + Name = "Annular Eclipse", + Date = "2078 Nov 04 16:55:44", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2078-11-04.gif" + }, + { + Name = "Total Eclipse", + Date = "2079 May 01 10:50:13", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2079-05-01.gif" + }, + { + Name = "Annular Eclipse", + Date = "2079 Oct 24 18:11:21", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2079-10-24.gif" + }, + { + Name = "Partial Eclipse", + Date = "2080 Mar 21 12:20:15", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2080-03-21.gif" + }, + { + Name = "Partial Eclipse", + Date = "2080 Sep 13 16:38:09", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2080-09-13.gif" + }, + { + Name = "Annular Eclipse", + Date = "2081 Mar 10 15:23:31", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2081-03-10.gif" + }, + { + Name = "Total Eclipse", + Date = "2081 Sep 03 09:07:31", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2081-09-03.gif" + }, + { + Name = "Annular Eclipse", + Date = "2082 Feb 27 14:47:00", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2082-02-27.gif" + }, + { + Name = "Total Eclipse", + Date = "2082 Aug 24 01:16:21", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2082-08-24.gif" + }, + { + Name = "Partial Eclipse", + Date = "2083 Feb 16 18:06:36", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2083-02-16.gif" + }, + { + Name = "Partial Eclipse", + Date = "2083 Jul 15 00:14:23", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2083-07-15.gif" + }, + { + Name = "Partial Eclipse", + Date = "2083 Aug 13 12:34:41", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2083-08-13.gif" + }, + { + Name = "Partial Eclipse", + Date = "2084 Jan 07 17:30:24", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2084-01-07.gif" + }, + { + Name = "Annular Eclipse", + Date = "2084 Jul 03 01:50:26", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2084-07-03.gif" + }, + { + Name = "Total Eclipse", + Date = "2084 Dec 27 09:13:48", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2084-12-27.gif" + }, + { + Name = "Annular Eclipse", + Date = "2085 Jun 22 03:21:16", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2085-06-22.gif" + }, + { + Name = "Annular Eclipse", + Date = "2085 Dec 16 22:37:48", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2085-12-16.gif" + }, + { + Name = "Total Eclipse", + Date = "2086 Jun 11 11:07:14", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2086-06-11.gif" + }, + { + Name = "Partial Eclipse", + Date = "2086 Dec 06 05:38:55", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2086-12-06.gif" + }, + { + Name = "Partial Eclipse", + Date = "2087 May 02 18:04:42", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2087-05-02.gif" + }, + { + Name = "Partial Eclipse", + Date = "2087 Jun 01 01:27:14", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2087-06-01.gif" + }, + { + Name = "Partial Eclipse", + Date = "2087 Oct 26 11:46:57", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2087-10-26.gif" + }, + { + Name = "Total Eclipse", + Date = "2088 Apr 21 10:31:49", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2088-04-21.gif" + }, + { + Name = "Annular Eclipse", + Date = "2088 Oct 14 14:48:05", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2088-10-14.gif" + }, + { + Name = "Annular Eclipse", + Date = "2089 Apr 10 22:44:42", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2089-04-10.gif" + }, + { + Name = "Total Eclipse", + Date = "2089 Oct 04 01:15:23", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2089-10-04.gif" + }, + { + Name = "Partial Eclipse", + Date = "2090 Mar 31 03:38:08", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2090-03-31.gif" + }, + { + Name = "Total Eclipse", + Date = "2090 Sep 23 16:56:36", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2090-09-23.gif" + }, + { + Name = "Partial Eclipse", + Date = "2091 Feb 18 09:54:40", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2091-02-18.gif" + }, + { + Name = "Total Eclipse", + Date = "2091 Aug 15 00:34:43", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2091-08-15.gif" + }, + { + Name = "Annular Eclipse", + Date = "2092 Feb 07 15:10:20", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2092-02-07.gif" + }, + { + Name = "Annular Eclipse", + Date = "2092 Aug 03 09:59:33", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2092-08-03.gif" + }, + { + Name = "Total Eclipse", + Date = "2093 Jan 27 03:22:16", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2093-01-27.gif" + }, + { + Name = "Annular Eclipse", + Date = "2093 Jul 23 12:32:04", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2093-07-23.gif" + }, + { + Name = "Total Eclipse", + Date = "2094 Jan 16 18:59:03", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2094-01-16.gif" + }, + { + Name = "Partial Eclipse", + Date = "2094 Jun 13 00:22:11", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2094-06-13.gif" + }, + { + Name = "Partial Eclipse", + Date = "2094 Jul 12 13:24:35", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2094-07-12.gif" + }, + { + Name = "Partial Eclipse", + Date = "2094 Dec 07 20:05:56", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2094-12-07.gif" + }, + { + Name = "Total Eclipse", + Date = "2095 Jun 02 10:07:40", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2095-06-02.gif" + }, + { + Name = "Annular Eclipse", + Date = "2095 Nov 27 01:02:57", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2095-11-27.gif" + }, + { + Name = "Total Eclipse", + Date = "2096 May 22 01:37:14", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2096-05-22.gif" + }, + { + Name = "Annular Eclipse", + Date = "2096 Nov 15 00:36:15", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2096-11-15.gif" + }, + { + Name = "Total Eclipse", + Date = "2097 May 11 18:34:31", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2097-05-11.gif" + }, + { + Name = "Annular Eclipse", + Date = "2097 Nov 04 02:01:25", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2097-11-04.gif" + }, + { + Name = "Partial Eclipse", + Date = "2098 Apr 01 20:02:31", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2098-04-01.gif" + }, + { + Name = "Partial Eclipse", + Date = "2098 Sep 25 00:31:16", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2098-09-25.gif" + }, + { + Name = "Partial Eclipse", + Date = "2098 Oct 24 10:36:11", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2098-10-24.gif" + }, + { + Name = "Annular Eclipse", + Date = "2099 Mar 21 22:54:32", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2099-03-21.gif" + }, + { + Name = "Total Eclipse", + Date = "2099 Sep 14 16:57:53", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2099-09-14.gif" + }, + { + Name = "Annular Eclipse", + Date = "2100 Mar 10 22:28:11", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2100-03-10.gif" + }, + { + Name = "Total Eclipse", + Date = "2100 Sep 04 08:49:20", + Image = "https://eclipse.gsfc.nasa.gov/5MCSEmap/2001-2100/2100-09-04.gif" + } + } +} + +asset.onInitialize(function() + openspace.loadMission(Timeline) +end) + +asset.onDeinitialize(function() + openspace.unloadMission(Timeline) +end) + + + +asset.meta = { + Name = "Eclipses Timeline", + Description = "A timeline that shows all of the eclipses in the past and next 100 years", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/earth/grids.asset b/data/assets/scene/solarsystem/planets/earth/grids.asset index 86f1a74494..64857f4652 100644 --- a/data/assets/scene/solarsystem/planets/earth/grids.asset +++ b/data/assets/scene/solarsystem/planets/earth/grids.asset @@ -1,4 +1,5 @@ local transforms = asset.require("./transforms") +local coreKernels = asset.require("spice/core") @@ -20,8 +21,8 @@ local plane1lsec = { }, Translation = { Type = "SpiceTranslation", - Target = "EARTH BARYCENTER", - Observer = "SSB" + Target = coreKernels.ID.EarthBarycenter, + Observer = coreKernels.ID.SolarSystemBarycenter } }, Renderable = { @@ -48,8 +49,8 @@ local plane1lmin = { }, Translation = { Type = "SpiceTranslation", - Target = "EARTH BARYCENTER", - Observer = "SSB" + Target = coreKernels.ID.EarthBarycenter, + Observer = coreKernels.ID.SolarSystemBarycenter } }, Renderable = { @@ -85,7 +86,6 @@ asset.export(plane1lmin) asset.meta = { Name = "Earth Grid", - Version = "1.0", Description = [[Grids that are useful to show distances around Earth]], Author = "OpenSpace Team", License = "MIT license" diff --git a/data/assets/scene/solarsystem/planets/earth/kernels/GSM.ti b/data/assets/scene/solarsystem/planets/earth/kernels/GSM.ti deleted file mode 100644 index 360c3274f3..0000000000 --- a/data/assets/scene/solarsystem/planets/earth/kernels/GSM.ti +++ /dev/null @@ -1,33 +0,0 @@ -Geocentric Solar Magnetospheric (GSM) frame: -Used by the BATSRUS model -This Kernel's ID is not a valid ID! - - +X is parallel to the geometric earth-sun position vector. - - +Z axis is normalized component of north centered geomagnetic dipole - vector orthogonal to GSM +X axis. - - +Y completes the right-handed frame. - -\begindata - -FRAME_GSM = 13371333 -FRAME_13371333_NAME = 'GSM' -FRAME_13371333_CLASS = 5 -FRAME_13371333_CLASS_ID = 13371333 -FRAME_13371333_CENTER = 399 -FRAME_13371333_RELATIVE = 'GALACTIC' -FRAME_13371333_DEF_STYLE = 'PARAMETERIZED' -FRAME_13371333_FAMILY = 'TWO-VECTOR' -FRAME_13371333_PRI_AXIS = 'X' -FRAME_13371333_PRI_VECTOR_DEF = 'OBSERVER_TARGET_POSITION' -FRAME_13371333_PRI_OBSERVER = 'EARTH' -FRAME_13371333_PRI_TARGET = 'SUN' -FRAME_13371333_PRI_ABCORR = 'NONE' -FRAME_13371333_SEC_AXIS = 'Z' -FRAME_13371333_SEC_VECTOR_DEF = 'CONSTANT' -FRAME_13371333_SEC_FRAME = 'ECLIPJ2000' -FRAME_13371333_SEC_SPEC = 'LATITUDINAL' -FRAME_13371333_SEC_UNITS = 'DEGREES' -FRAME_13371333_SEC_LONGITUDE = 288.43 -FRAME_13371333_SEC_LATITUDE = 79.54 diff --git a/data/assets/scene/solarsystem/planets/earth/lagrange_points/l1/kernels.asset b/data/assets/scene/solarsystem/planets/earth/lagrange_points/l1/kernels.asset new file mode 100644 index 0000000000..1e275688ef --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/lagrange_points/l1/kernels.asset @@ -0,0 +1,22 @@ +local kernels = asset.resource({ + Name = "Lagrange Kernels", + Type = "HttpSynchronization", + Identifier = "earth_lagrange_kernels", + Version = 1 +}) + + +local ID = { + L1 = 391 +} + + +asset.onInitialize(function() + openspace.spice.loadKernel(kernels .. "L1_de431.bsp") +end) + +asset.onDeinitialize(function() + openspace.spice.unloadKernel(kernels .. "L1_de431.bsp") +end) + +asset.export("ID", ID) diff --git a/data/assets/scene/solarsystem/planets/earth/lagrange_points/l1.asset b/data/assets/scene/solarsystem/planets/earth/lagrange_points/l1/l1.asset similarity index 57% rename from data/assets/scene/solarsystem/planets/earth/lagrange_points/l1.asset rename to data/assets/scene/solarsystem/planets/earth/lagrange_points/l1/l1.asset index 313853a4a5..c1806432eb 100644 --- a/data/assets/scene/solarsystem/planets/earth/lagrange_points/l1.asset +++ b/data/assets/scene/solarsystem/planets/earth/lagrange_points/l1/l1.asset @@ -1,48 +1,21 @@ -asset.require("spice/base") -local transforms = asset.require("scene/solarsystem/sun/transforms") +local transforms = asset.require("./transforms") -local circle = asset.syncedResource({ +local circle = asset.resource({ Name = "Circle", Type = "HttpSynchronization", Identifier = "circle_image", Version = 1 }) -local kernels = asset.syncedResource({ - Name = "Lagrange Kernels", - Type = "HttpSynchronization", - Identifier = "earth_lagrange_kernels", - Version = 1 -}) - - -local L1 = 391 - -local L1Position = { - Identifier = "L1Position", - Parent = transforms.SolarSystemBarycenter.Identifier, - Transform = { - Translation = { - Type = "SpiceTranslation", - Target = L1, - Observer = "SSB" - } - }, - Tag = { "lagrange_points_earth" , "lagrange_points_earth_l1" }, - GUI = { - Name = "L1 Position", - Path = "/Solar System/Planets/Earth/Lagrange Points", - Hidden = true - } -} local L1 = { Identifier = "L1", - Parent = L1Position.Identifier, + Parent = transforms.L1Position.Identifier, Renderable = { Type = "RenderablePlaneImageLocal", + Enabled = asset.enabled, Billboard = true, Size = 70000000, Texture = circle .. "circle.png", @@ -57,9 +30,10 @@ local L1 = { local L1Label = { Identifier = "L1Label", - Parent = L1Position.Identifier, + Parent = transforms.L1Position.Identifier, Renderable = { Type = "RenderableLabel", + Enabled = asset.enabled, Text = "L1", FontSize = 50, Size = 7.5, @@ -78,9 +52,6 @@ local L1Label = { asset.onInitialize(function() - openspace.spice.loadKernel(kernels .. "L1_de431.bsp") - - openspace.addSceneGraphNode(L1Position) openspace.addSceneGraphNode(L1) openspace.addSceneGraphNode(L1Label) end) @@ -88,12 +59,8 @@ end) asset.onDeinitialize(function() openspace.removeSceneGraphNode(L1Label) openspace.removeSceneGraphNode(L1) - openspace.removeSceneGraphNode(L1Position) - - openspace.spice.unloadKernel(kernels .. "L1_de431.bsp") end) -asset.export(L1Position) asset.export(L1) asset.export(L1Label) @@ -101,7 +68,6 @@ asset.export(L1Label) asset.meta = { Name = "Lagrange point L1", - Version = "1.0", Description = "Lagrange point L1 node and label", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/earth/lagrange_points/l1/transforms.asset b/data/assets/scene/solarsystem/planets/earth/lagrange_points/l1/transforms.asset new file mode 100644 index 0000000000..57ec462907 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/lagrange_points/l1/transforms.asset @@ -0,0 +1,34 @@ +local transforms = asset.require("scene/solarsystem/sun/transforms") +local kernels = asset.require("./kernels") +local coreKernels = asset.require("spice/core") + + + +local L1Position = { + Identifier = "L1Position", + Parent = transforms.SolarSystemBarycenter.Identifier, + Transform = { + Translation = { + Type = "SpiceTranslation", + Target = kernels.ID.L1, + Observer = coreKernels.ID.SolarSystemBarycenter + } + }, + Tag = { "lagrange_points_earth" , "lagrange_points_earth_l1" }, + GUI = { + Name = "L1 Position", + Path = "/Solar System/Planets/Earth/Lagrange Points", + Hidden = true + } +} + + +asset.onInitialize(function() + openspace.addSceneGraphNode(L1Position) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(L1Position) +end) + +asset.export(L1Position) diff --git a/data/assets/scene/solarsystem/planets/earth/lagrange_points/l2.asset b/data/assets/scene/solarsystem/planets/earth/lagrange_points/l2.asset deleted file mode 100644 index 3d165d1940..0000000000 --- a/data/assets/scene/solarsystem/planets/earth/lagrange_points/l2.asset +++ /dev/null @@ -1,200 +0,0 @@ -asset.require("scene/solarsystem/sun/sun") -asset.require("spice/base") -local transforms = asset.require("scene/solarsystem/sun/transforms") - - - -local circle = asset.syncedResource({ - Name = "Circle", - Type = "HttpSynchronization", - Identifier = "circle_image", - Version = 1 -}) - -local kernels = asset.syncedResource({ - Name = "Lagrange Kernels", - Type = "HttpSynchronization", - Identifier = "earth_lagrange_kernels", - Version = 2 -}) - - -local L2 = 392 - -local L2Position = { - Identifier = "L2Position", - Parent = transforms.SolarSystemBarycenter.Identifier, - Transform = { - Translation = { - Type = "SpiceTranslation", - Target = L2, - Observer = "SSB" - } - }, - Tag = { "lagrange_points_earth", "lagrange_points_earth_l2" }, - GUI = { - Name = "L2 Position", - Path = "/Solar System/Planets/Earth/Lagrange Points", - Hidden = true - } -} - --- This ref. frame co-revolves with L2 and is needed for a more intuitive trail of JWST in --- relation to L2 -local L2CoRevFrame = { - Identifier = "L2CoRevFrame", - Parent = L2Position.Identifier, - Transform = { - Rotation = { - Type = "SpiceRotation", - SourceFrame = "L2_COREV", - DestinationFrame = "GALACTIC" - } - }, - Tag = { "lagrange_points_earth", "lagrange_points_earth_l2" }, - GUI = { - Name = "L2 Co-revolving Reference Frame", - Path = "/Solar System/Planets/Earth/Lagrange Points", - Hidden = true - } -} - -local L2Small = { - Identifier = "L2Small", - Parent = L2Position.Identifier, - Renderable = { - Type = "RenderablePlaneImageLocal", - Billboard = true, - Size = 4000000, - Texture = circle .. "circle.png", - BlendMode = "Additive" - }, - Tag = { "lagrange_points_earth_l2_small" }, - GUI = { - Name = "L2 Small", - Path = "/Solar System/Planets/Earth/Lagrange Points" - } -} - -local L2 = { - Identifier = "L2", - Parent = L2Position.Identifier, - Renderable = { - Type = "RenderablePlaneImageLocal", - Billboard = true, - Size = 70000000, - Texture = circle .. "circle.png", - BlendMode = "Additive" - }, - Tag = { "lagrange_points_earth", "lagrange_points_earth_l2" }, - GUI = { - Name = "L2", - Path = "/Solar System/Planets/Earth/Lagrange Points" - } -} - -local L2SmallLabel = { - Identifier = "L2SmallLabel", - Parent = L2Position.Identifier, - Renderable = { - Type = "RenderableLabel", - Text = "L2", - FontSize = 50.0, - Size = 6.0, - MinMaxSize = { 1.0, 100.0 }, - OrientationOption = "Camera View Direction", - BlendMode = "Normal", - EnableFading = false - }, - Tag = { "lagrange_points_earth_l2_small" }, - GUI = { - Name = "L2 Small Label", - Path = "/Solar System/Planets/Earth/Lagrange Points", - Description = "Small label for L2" - } -} - -local L2Label = { - Identifier = "L2Label", - Parent = L2Position.Identifier, - Renderable = { - Type = "RenderableLabel", - Text = "L2", - FontSize = 50, - Size = 7.5, - MinMaxSize = { 1.0, 100.0 }, - OrientationOption = "Camera View Direction", - BlendMode = "Normal", - EnableFading = false - }, - Tag = { "lagrange_points_earth", "lagrange_points_earth_l2" }, - GUI = { - Name = "L2 Label", - Path = "/Solar System/Planets/Earth/Lagrange Points", - Description = "Main label for L2" - } -} - -local L2SunLine = { - Identifier = "L2SunLine", - Parent = transforms.SolarSystemBarycenter.Identifier, - Renderable = { - Type = "RenderableNodeLine", - StartNode = "Sun", - EndNode = "L2Small", - Color = { 0.5, 0.5, 0.5 }, - LineWidth = 2 - }, - Tag = { "lagrange_points_earth_l2_small" }, - GUI = { - Name = "Sun to L2 Line", - Path = "/Solar System/Planets/Earth/Lagrange Points" - } -} - - -asset.onInitialize(function() - openspace.spice.loadKernel(kernels .. "L2_de431.bsp") - openspace.spice.loadKernel(kernels .. "L2_corev.tf") - - openspace.addSceneGraphNode(L2Position) - openspace.addSceneGraphNode(L2CoRevFrame) - openspace.addSceneGraphNode(L2Small) - openspace.addSceneGraphNode(L2) - openspace.addSceneGraphNode(L2SunLine) - openspace.addSceneGraphNode(L2SmallLabel) - openspace.addSceneGraphNode(L2Label) -end) - -asset.onDeinitialize(function() - openspace.removeSceneGraphNode(L2Label) - openspace.removeSceneGraphNode(L2SmallLabel) - openspace.removeSceneGraphNode(L2SunLine) - openspace.removeSceneGraphNode(L2) - openspace.removeSceneGraphNode(L2Small) - openspace.removeSceneGraphNode(L2CoRevFrame) - openspace.removeSceneGraphNode(L2Position) - - openspace.spice.unloadKernel(kernels .. "L2_corev.tf") - openspace.spice.unloadKernel(kernels .. "L2_de431.bsp") -end) - -asset.export(L2Position) -asset.export(L2CoRevFrame) -asset.export(L2Small) -asset.export(L2) -asset.export(L2SunLine) -asset.export(L2SmallLabel) -asset.export(L2Label) - - - -asset.meta = { - Name = "Lagrange point L2", - Version = "1.0", - Description = [[Lagrange point L2 large and small nodes, sun line, and large and small - labels]], - Author = "OpenSpace Team", - URL = "http://openspaceproject.com", - License = "MIT license" -} diff --git a/data/assets/scene/solarsystem/planets/earth/lagrange_points/l2/kernels.asset b/data/assets/scene/solarsystem/planets/earth/lagrange_points/l2/kernels.asset new file mode 100644 index 0000000000..3ac78a69a1 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/lagrange_points/l2/kernels.asset @@ -0,0 +1,29 @@ +local kernels = asset.resource({ + Name = "Lagrange Kernels", + Type = "HttpSynchronization", + Identifier = "earth_lagrange_kernels", + Version = 2 +}) + + +local ID = { + L2 = 392 +} + +local Frame = { + L2Corevolving = "L2_COREV" +} + + +asset.onInitialize(function() + openspace.spice.loadKernel(kernels .. "L2_de431.bsp") + openspace.spice.loadKernel(kernels .. "L2_corev.tf") +end) + +asset.onDeinitialize(function() + openspace.spice.unloadKernel(kernels .. "L2_corev.tf") + openspace.spice.unloadKernel(kernels .. "L2_de431.bsp") +end) + +asset.export("ID", ID) +asset.export("Frame", Frame) diff --git a/data/assets/scene/solarsystem/planets/earth/lagrange_points/l2/l2.asset b/data/assets/scene/solarsystem/planets/earth/lagrange_points/l2/l2.asset new file mode 100644 index 0000000000..4ae51aa794 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/lagrange_points/l2/l2.asset @@ -0,0 +1,122 @@ +local transforms = asset.require("./transforms") + + + +local circle = asset.resource({ + Name = "Circle", + Type = "HttpSynchronization", + Identifier = "circle_image", + Version = 1 +}) + + +local L2Small = { + Identifier = "L2Small", + Parent = transforms.L2Position.Identifier, + Renderable = { + Type = "RenderablePlaneImageLocal", + Enabled = asset.enabled, + Billboard = true, + Size = 4000000, + Texture = circle .. "circle.png", + BlendMode = "Additive" + }, + Tag = { "lagrange_points_earth", "lagrange_points_earth_l2_small" }, + GUI = { + Name = "L2 Small", + Path = "/Solar System/Planets/Earth/Lagrange Points" + } +} + +local L2 = { + Identifier = "L2", + Parent = transforms.L2Position.Identifier, + Renderable = { + Type = "RenderablePlaneImageLocal", + Enabled = asset.enabled, + Billboard = true, + Size = 70000000, + Texture = circle .. "circle.png", + BlendMode = "Additive" + }, + Tag = { "lagrange_points_earth", "lagrange_points_earth_l2" }, + GUI = { + Name = "L2", + Path = "/Solar System/Planets/Earth/Lagrange Points" + } +} + +local L2SmallLabel = { + Identifier = "L2SmallLabel", + Parent = transforms.L2Position.Identifier, + Renderable = { + Type = "RenderableLabel", + Enabled = asset.enabled, + Text = "L2", + FontSize = 50.0, + Size = 6.0, + MinMaxSize = { 1.0, 100.0 }, + OrientationOption = "Camera View Direction", + BlendMode = "Normal", + EnableFading = false + }, + Tag = { "lagrange_points_earth", "lagrange_points_earth_l2_small" }, + GUI = { + Name = "L2 Small Label", + Path = "/Solar System/Planets/Earth/Lagrange Points", + Description = "Small label for L2" + } +} + +local L2Label = { + Identifier = "L2Label", + Parent = transforms.L2Position.Identifier, + Renderable = { + Type = "RenderableLabel", + Enabled = asset.enabled, + Text = "L2", + FontSize = 50, + Size = 7.5, + MinMaxSize = { 1.0, 100.0 }, + OrientationOption = "Camera View Direction", + BlendMode = "Normal", + EnableFading = false + }, + Tag = { "lagrange_points_earth", "lagrange_points_earth_l2" }, + GUI = { + Name = "L2 Label", + Path = "/Solar System/Planets/Earth/Lagrange Points", + Description = "Main label for L2" + } +} + + +asset.onInitialize(function() + openspace.addSceneGraphNode(L2Small) + openspace.addSceneGraphNode(L2) + openspace.addSceneGraphNode(L2SmallLabel) + openspace.addSceneGraphNode(L2Label) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(L2Label) + openspace.removeSceneGraphNode(L2SmallLabel) + openspace.removeSceneGraphNode(L2) + openspace.removeSceneGraphNode(L2Small) +end) + +asset.export(L2Small) +asset.export(L2) +asset.export(L2SmallLabel) +asset.export(L2Label) + + + +asset.meta = { + Name = "Lagrange point L2", + Description = [[Lagrange point L2 large and small nodes, and large and small + labels]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/earth/lagrange_points/l2/l2sunline.asset b/data/assets/scene/solarsystem/planets/earth/lagrange_points/l2/l2sunline.asset new file mode 100644 index 0000000000..16c3bb83ba --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/lagrange_points/l2/l2sunline.asset @@ -0,0 +1,44 @@ +local sun = asset.require("scene/solarsystem/sun/sun") +local sunTransforms = asset.require("scene/solarsystem/sun/transforms") +local transforms = asset.require("./transforms") + + + +local L2SunLine = { + Identifier = "L2SunLine", + Parent = sunTransforms.SolarSystemBarycenter.Identifier, + Renderable = { + Type = "RenderableNodeLine", + Enabled = asset.enabled, + StartNode = sun.Sun.Identifier, + EndNode = transforms.L2Position.Identifier, + Color = { 0.5, 0.5, 0.5 }, + LineWidth = 2 + }, + Tag = { "lagrange_points_earth_l2_small" }, + GUI = { + Name = "Sun to L2 Line", + Path = "/Solar System/Planets/Earth/Lagrange Points" + } +} + + +asset.onInitialize(function() + openspace.addSceneGraphNode(L2SunLine) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(L2SunLine) +end) + +asset.export(L2SunLine) + + + +asset.meta = { + Name = "Lagrange Point L2 to Sun Line", + Description = [[Lagrange point L2 to Sun line]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/earth/lagrange_points/l2/transforms.asset b/data/assets/scene/solarsystem/planets/earth/lagrange_points/l2/transforms.asset new file mode 100644 index 0000000000..2fc0f468ee --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/lagrange_points/l2/transforms.asset @@ -0,0 +1,57 @@ +local transforms = asset.require("scene/solarsystem/sun/transforms") +local kernels = asset.require("./kernels") +local coreKernels = asset.require("spice/core") + + + +local L2Position = { + Identifier = "L2Position", + Parent = transforms.SolarSystemBarycenter.Identifier, + Transform = { + Translation = { + Type = "SpiceTranslation", + Target = kernels.ID.L2, + Observer = coreKernels.ID.SolarSystemBarycenter + } + }, + Tag = { "lagrange_points_earth", "lagrange_points_earth_l2" }, + GUI = { + Name = "L2 Position", + Path = "/Solar System/Planets/Earth/Lagrange Points", + Hidden = true + } +} + +-- This reference frame co-revolves with L2 and can be useful for trails for certain +-- spacecraft that orbit in relation to L2. It is for exmaple used for JWST +local L2CoRevFrame = { + Identifier = "L2CoRevFrame", + Parent = L2Position.Identifier, + Transform = { + Rotation = { + Type = "SpiceRotation", + SourceFrame = kernels.Frame.L2Corevolving, + DestinationFrame = coreKernels.Frame.Galactic + } + }, + Tag = { "lagrange_points_earth", "lagrange_points_earth_l2" }, + GUI = { + Name = "L2 Co-revolving Reference Frame", + Path = "/Solar System/Planets/Earth/Lagrange Points", + Hidden = true + } +} + + +asset.onInitialize(function() + openspace.addSceneGraphNode(L2Position) + openspace.addSceneGraphNode(L2CoRevFrame) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(L2CoRevFrame) + openspace.removeSceneGraphNode(L2Position) +end) + +asset.export(L2Position) +asset.export(L2CoRevFrame) diff --git a/data/assets/scene/solarsystem/planets/earth/lagrange_points/l4/kernels.asset b/data/assets/scene/solarsystem/planets/earth/lagrange_points/l4/kernels.asset new file mode 100644 index 0000000000..7b6aea683b --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/lagrange_points/l4/kernels.asset @@ -0,0 +1,22 @@ +local kernels = asset.resource({ + Name = "Lagrange Kernels", + Type = "HttpSynchronization", + Identifier = "earth_lagrange_kernels", + Version = 1 +}) + + +local ID = { + L4 = 394 +} + + +asset.onInitialize(function() + openspace.spice.loadKernel(kernels .. "L4_de431.bsp") +end) + +asset.onDeinitialize(function() + openspace.spice.unloadKernel(kernels .. "L4_de431.bsp") +end) + +asset.export("ID", ID) diff --git a/data/assets/scene/solarsystem/planets/earth/lagrange_points/l4.asset b/data/assets/scene/solarsystem/planets/earth/lagrange_points/l4/l4.asset similarity index 57% rename from data/assets/scene/solarsystem/planets/earth/lagrange_points/l4.asset rename to data/assets/scene/solarsystem/planets/earth/lagrange_points/l4/l4.asset index ff370b3f89..7dda9ff4e9 100644 --- a/data/assets/scene/solarsystem/planets/earth/lagrange_points/l4.asset +++ b/data/assets/scene/solarsystem/planets/earth/lagrange_points/l4/l4.asset @@ -1,48 +1,21 @@ -asset.require("spice/base") -local transforms = asset.require("scene/solarsystem/sun/transforms") +local transforms = asset.require("./transforms") -local circle = asset.syncedResource({ +local circle = asset.resource({ Name = "Circle", Type = "HttpSynchronization", Identifier = "circle_image", Version = 1 }) -local kernels = asset.syncedResource({ - Name = "Lagrange Kernels", - Type = "HttpSynchronization", - Identifier = "earth_lagrange_kernels", - Version = 1 -}) - - -local L4 = 394 - -local L4Position = { - Identifier = "L4Position", - Parent = transforms.SolarSystemBarycenter.Identifier, - Transform = { - Translation = { - Type = "SpiceTranslation", - Target = L4, - Observer = "SSB" - } - }, - Tag = { "lagrange_points_earth", "lagrange_points_earth_l4" }, - GUI = { - Name = "L4 Position", - Path = "/Solar System/Planets/Earth/Lagrange Points", - Hidden = true - } -} local L4 = { Identifier = "L4", - Parent = L4Position.Identifier, + Parent = transforms.L4Position.Identifier, Renderable = { Type = "RenderablePlaneImageLocal", + Enabled = asset.enabled, Billboard = true, Size = 800000000, Texture = circle .. "circle.png", @@ -57,9 +30,10 @@ local L4 = { local L4Label = { Identifier = "L4Label", - Parent = L4Position.Identifier, + Parent = transforms.L4Position.Identifier, Renderable = { Type = "RenderableLabel", + Enabled = asset.enabled, Text = "L4", FontSize = 50, Size = 8.5, @@ -78,9 +52,6 @@ local L4Label = { asset.onInitialize(function() - openspace.spice.loadKernel(kernels .. "L4_de431.bsp") - - openspace.addSceneGraphNode(L4Position) openspace.addSceneGraphNode(L4) openspace.addSceneGraphNode(L4Label) end) @@ -88,12 +59,8 @@ end) asset.onDeinitialize(function() openspace.removeSceneGraphNode(L4Label) openspace.removeSceneGraphNode(L4) - openspace.removeSceneGraphNode(L4Position) - - openspace.spice.unloadKernel(kernels .. "L4_de431.bsp") end) -asset.export(L4Position) asset.export(L4) asset.export(L4Label) @@ -101,7 +68,6 @@ asset.export(L4Label) asset.meta = { Name = "Lagrange point L4", - Version = "1.0", Description = "Lagrange point L4 node and label", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/earth/lagrange_points/l4/transforms.asset b/data/assets/scene/solarsystem/planets/earth/lagrange_points/l4/transforms.asset new file mode 100644 index 0000000000..9bf6a983e9 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/lagrange_points/l4/transforms.asset @@ -0,0 +1,34 @@ +local transforms = asset.require("scene/solarsystem/sun/transforms") +local kernels = asset.require("./kernels") +local coreKernels = asset.require("spice/core") + + + +local L4Position = { + Identifier = "L4Position", + Parent = transforms.SolarSystemBarycenter.Identifier, + Transform = { + Translation = { + Type = "SpiceTranslation", + Target = kernels.ID.L4, + Observer = coreKernels.ID.SolarSystemBarycenter + } + }, + Tag = { "lagrange_points_earth", "lagrange_points_earth_l4" }, + GUI = { + Name = "L4 Position", + Path = "/Solar System/Planets/Earth/Lagrange Points", + Hidden = true + } +} + + +asset.onInitialize(function() + openspace.addSceneGraphNode(L4Position) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(L4Position) +end) + +asset.export(L4Position) diff --git a/data/assets/scene/solarsystem/planets/earth/lagrange_points/l5/kernels.asset b/data/assets/scene/solarsystem/planets/earth/lagrange_points/l5/kernels.asset new file mode 100644 index 0000000000..359677a6c4 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/lagrange_points/l5/kernels.asset @@ -0,0 +1,22 @@ +local kernels = asset.resource({ + Name = "Lagrange Kernels", + Type = "HttpSynchronization", + Identifier = "earth_lagrange_kernels", + Version = 1 +}) + + +local ID = { + L5 = 395 +} + + +asset.onInitialize(function() + openspace.spice.loadKernel(kernels .. "L5_de431.bsp") +end) + +asset.onDeinitialize(function() + openspace.spice.unloadKernel(kernels .. "L5_de431.bsp") +end) + +asset.export("ID", ID) diff --git a/data/assets/scene/solarsystem/planets/earth/lagrange_points/l5.asset b/data/assets/scene/solarsystem/planets/earth/lagrange_points/l5/l5.asset similarity index 52% rename from data/assets/scene/solarsystem/planets/earth/lagrange_points/l5.asset rename to data/assets/scene/solarsystem/planets/earth/lagrange_points/l5/l5.asset index 66b90ffb49..a7f71a277c 100644 --- a/data/assets/scene/solarsystem/planets/earth/lagrange_points/l5.asset +++ b/data/assets/scene/solarsystem/planets/earth/lagrange_points/l5/l5.asset @@ -1,48 +1,21 @@ -asset.require("spice/base") -local transforms = asset.require("scene/solarsystem/sun/transforms") +local transforms = asset.require("./transforms") -local circle = asset.syncedResource({ +local circle = asset.resource({ Name = "Circle", Type = "HttpSynchronization", Identifier = "circle_image", Version = 1 }) -local kernels = asset.syncedResource({ - Name = "Lagrange Kernels", - Type = "HttpSynchronization", - Identifier = "earth_lagrange_kernels", - Version = 1 -}) - - -local L5 = 395 - -local L5Position = { - Identifier = "L5Position", - Parent = transforms.SolarSystemBarycenter.Identifier, - Transform = { - Translation = { - Type = "SpiceTranslation", - Target = L5, - Observer = "SSB" - } - }, - Tag = { "lagrange_points_earth", "lagrange_points_earth_l5" }, - GUI = { - Name = "L5 Position", - Path = "/Solar System/Planets/Earth/Lagrange points", - Hidden = true - } -} local L5 = { Identifier = "L5", - Parent = L5Position.Identifier, + Parent = transforms.L5Position.Identifier, Renderable = { Type = "RenderablePlaneImageLocal", + Enabled = asset.enabled, Billboard = true, Size = 800000000, Texture = circle .. "circle.png", @@ -51,15 +24,16 @@ local L5 = { Tag = { "lagrange_points_earth", "lagrange_points_earth_l5" }, GUI = { Name = "L5", - Path = "/Solar System/Planets/Earth/Lagrange points" + Path = "/Solar System/Planets/Earth/Lagrange Points" } } local L5Label = { Identifier = "L5Label", - Parent = L5Position.Identifier, + Parent = transforms.L5Position.Identifier, Renderable = { Type = "RenderableLabel", + Enabled = asset.enabled, Text = "L5", FontSize = 50, Size = 8.5, @@ -71,16 +45,13 @@ local L5Label = { Tag = { "lagrange_points_earth", "lagrange_points_earth_l5" }, GUI = { Name = "L5 Label", - Path = "/Solar System/Planets/Earth/Lagrange points", + Path = "/Solar System/Planets/Earth/Lagrange Points", Description = "Main label for L5" } } asset.onInitialize(function() - openspace.spice.loadKernel(kernels .. "L5_de431.bsp") - - openspace.addSceneGraphNode(L5Position) openspace.addSceneGraphNode(L5) openspace.addSceneGraphNode(L5Label) end) @@ -88,12 +59,9 @@ end) asset.onDeinitialize(function() openspace.removeSceneGraphNode(L5Label) openspace.removeSceneGraphNode(L5) - openspace.removeSceneGraphNode(L5Position) - openspace.spice.unloadKernel(kernels .. "L5_de431.bsp") end) -asset.export(L5Position) asset.export(L5) asset.export(L5Label) @@ -101,7 +69,6 @@ asset.export(L5Label) asset.meta = { Name = "Lagrange point L5", - Version = "1.0", Description = "Lagrange point L5 node and label", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/earth/lagrange_points/l5/transforms.asset b/data/assets/scene/solarsystem/planets/earth/lagrange_points/l5/transforms.asset new file mode 100644 index 0000000000..fef44db03d --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/lagrange_points/l5/transforms.asset @@ -0,0 +1,34 @@ +local transforms = asset.require("scene/solarsystem/sun/transforms") +local kernels = asset.require("./kernels") +local coreKernels = asset.require("spice/core") + + + +local L5Position = { + Identifier = "L5Position", + Parent = transforms.SolarSystemBarycenter.Identifier, + Transform = { + Translation = { + Type = "SpiceTranslation", + Target = kernels.ID.L5, + Observer = coreKernels.ID.SolarSystemBarycenter + } + }, + Tag = { "lagrange_points_earth", "lagrange_points_earth_l5" }, + GUI = { + Name = "L5 Position", + Path = "/Solar System/Planets/Earth/Lagrange Points", + Hidden = true + } +} + + +asset.onInitialize(function() + openspace.addSceneGraphNode(L5Position) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(L5Position) +end) + +asset.export(L5Position) diff --git a/data/assets/scene/solarsystem/planets/earth/lagrange_points/lagrange_points.asset b/data/assets/scene/solarsystem/planets/earth/lagrange_points/lagrange_points.asset index d8c6614270..f4b46b7f6a 100644 --- a/data/assets/scene/solarsystem/planets/earth/lagrange_points/lagrange_points.asset +++ b/data/assets/scene/solarsystem/planets/earth/lagrange_points/lagrange_points.asset @@ -1,13 +1,12 @@ -asset.require("./l1") -asset.require("./l2") -asset.require("./l4") -asset.require("./l5") +asset.require("./l1/l1") +asset.require("./l2/l2") +asset.require("./l4/l4") +asset.require("./l5/l5") asset.meta = { Name = "Earth Lagrange Points", - Version = "1.0", Description = [[Meta asset to include all the Earth Lagrange points. Includes L1, L2, L4 and L5]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/planets/earth/layers/base_layers.asset b/data/assets/scene/solarsystem/planets/earth/layers/base_layers.asset new file mode 100644 index 0000000000..3f09579c0c --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/layers/base_layers.asset @@ -0,0 +1,43 @@ +asset.require("./colorlayers/blue_marble", false) +asset.require("./colorlayers/esri_viirs_combo", asset.enabled) +asset.require("./colorlayers/esri_noaa20_combo", false) +asset.require("./colorlayers/esri_world_imagery", false) +asset.require("./colorlayers/viirs_noaa20_temporal", false) +asset.require("./colorlayers/aqua_modis_temporal", false) +asset.require("./colorlayers/terra_modis_temporal", false) +asset.require("./colorlayers/amsr2_gcom_w1_sea_ice_concentration_temporal", false) +asset.require("./colorlayers/modis_terra_chlorophyll_a_temporal", false) +asset.require("./colorlayers/ghrsst_l4_mur_sea_surface_temperature_temporal", false) + +asset.require("./heightlayers/blue_marble_height", false) +asset.require("./heightlayers/terrain_tileset", asset.enabled) + +asset.require("./nightlayers/earth_at_night_2012", asset.enabled) +asset.require("./nightlayers/earth_night_texture", false) +asset.require("./nightlayers/earth_at_night_temporal", false) + +asset.require("./overlays/coastlines", false) +asset.require("./overlays/reference_features", false) +asset.require("./overlays/reference_labels", false) +asset.require("./overlays/tile_indices", false) +asset.require("./overlays/size_reference", false) + +asset.require("./watermasks/modis_water_mask", asset.enabled) + + + +asset.meta = { + Name = "Base Earth Layers", + Description = [[Base Earth layers are: Blue Marble, ESRI VIIRS Combo, ESRI NOAA20 Combo, + ESRI World Imagery, VIIRS SNPP (Temporal), Aqua Modis (Temporal), + Terra Modis (Temporal), AMSR2 GCOM W1 Sea Ice Concentration (Temporal), + MODIS Terra Chlorophyll A (Temporal), + GHRSST L4 MUR Sea Surface Temperature (Temporal), Blue Marble Height (3D), + World Elevation (3D), Earth at Night 2012, Earth at Night Texture, + Earth at Night (Temporal), Coastlines, Reference Features, Reference Labels, + Tile Indicies, Size Reference, and Modis Water Mask. + ]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/amsr2_gcom_w1_sea_ice_concentration_temporal.asset b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/amsr2_gcom_w1_sea_ice_concentration_temporal.asset index 1eccf39e08..e0d85ac696 100644 --- a/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/amsr2_gcom_w1_sea_ice_concentration_temporal.asset +++ b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/amsr2_gcom_w1_sea_ice_concentration_temporal.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "AMSR2_GCOM_W1_Sea_Ice_Concentration_Temporal", Name = "AMSR2 GCOM W1 Sea Ice Concentration (Temporal)", Enabled = asset.enabled, - Type = "TemporalTileLayer", + ZIndex = 100, + Type = "TemporalTileProvider", Mode = "Prototyped", Prototyped = { Time = { @@ -44,7 +45,6 @@ asset.export("layer", Layer) asset.meta = { Name = "AMSR2 GCOM W1 Sea Ice Concentration (Temporal)", - Version = "1.1", Description = "GIBS hosted layer", Author = "NASA EOSDIS Global Imagery Browse Services", URL = "https://earthdata.nasa.gov/eosdis/science-system-description/eosdis-components/gibs", diff --git a/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/aqua_modis_temporal.asset b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/aqua_modis_temporal.asset index 10cc8fa385..aecc50d2e0 100644 --- a/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/aqua_modis_temporal.asset +++ b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/aqua_modis_temporal.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "Aqua_Modis_Temporal", Name = "Aqua Modis (Temporal)", Enabled = asset.enabled, - Type = "TemporalTileLayer", + ZIndex = 20, + Type = "TemporalTileProvider", Mode = "Prototyped", Prototyped = { Time = { @@ -49,7 +50,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Aqua Modis (Temporal)", - Version = "1.1", Description = "GIBS hosted layer", Author = "NASA EOSDIS Global Imagery Browse Services", URL = "https://earthdata.nasa.gov/eosdis/science-system-description/eosdis-components/gibs", diff --git a/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/blue_marble.asset b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/blue_marble.asset index f9244b2208..6c0d330505 100644 --- a/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/blue_marble.asset +++ b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/blue_marble.asset @@ -2,7 +2,7 @@ local globe = asset.require("../../earth") -local texturesPath = asset.syncedResource({ +local texturesPath = asset.resource({ Name = "Earth Textures", Type = "HttpSynchronization", Identifier = "earth_textures", @@ -14,8 +14,10 @@ local Layer = { Identifier = "Blue_Marble", Name = "Blue Marble", Enabled = asset.enabled, + ZIndex = 5, FilePath = texturesPath .. "earth_bluemarble.jpg", - Description = "Earth image from Blue Marble Next Generation" + Description = "Earth image from Blue Marble Next Generation", + CacheSettings = { Enabled = false } } @@ -33,7 +35,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Blue Marble", - Version = "1.1", Description = [[Fallback layer for earth image if no internet is available. Contains Blue Marble Next Generation]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/bmng_newyork.asset b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/bmng_newyork.asset index a816a633c9..e8755e7cf6 100644 --- a/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/bmng_newyork.asset +++ b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/bmng_newyork.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "BMNG_NewYork", Name = "BMNG [New York]", Enabled = asset.enabled, - FilePath = asset.localResource("bmng_newyork.wms"), + ZIndex = 10, + FilePath = asset.resource("bmng_newyork.wms"), Description = [[Web loaded full resolution map of Blue Marble Next Generation. This map is hosted on the OpenSpace servers in New York]] } @@ -26,7 +27,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Blue Marble Next Generation (New York)", - Version = "1.1", Description = [[Web loaded full resolution map of Blue Marble Next Generation. This map is hosted on the OpenSpace servers in New York]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/bmng_sweden.asset b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/bmng_sweden.asset index 3f71e1f649..8bb5bd5a38 100644 --- a/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/bmng_sweden.asset +++ b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/bmng_sweden.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "BMNG_Sweden", Name = "BMNG [Sweden]", Enabled = asset.enabled, - FilePath = asset.localResource("bmng_sweden.wms"), + ZIndex = 10, + FilePath = asset.resource("bmng_sweden.wms"), Description = [[Web loaded full resolution map of Blue Marble Next Generation. This map is hosted on the OpenSpace servers in Sweden]] } @@ -26,7 +27,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Blue Marble Next Generation (Sweden)", - Version = "1.1", Description = [[Web loaded full resolution map of Blue Marble Next Generation. This map is hosted on the OpenSpace servers in Sweden]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/bmng_utah.asset b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/bmng_utah.asset index 71e07bc43a..3d1d2bc5ea 100644 --- a/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/bmng_utah.asset +++ b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/bmng_utah.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "BMNG_Utah", Name = "BMNG [Utah]", Enabled = asset.enabled, - FilePath = asset.localResource("bmng_utah.wms"), + ZIndex = 10, + FilePath = asset.resource("bmng_utah.wms"), Description = [[Web loaded full resolution map of Blue Marble Next Generation. This map is hosted on the OpenSpace servers in Utah]] } @@ -26,7 +27,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Blue Marble Next Generation (Utah)", - Version = "1.1", Description = [[Web loaded full resolution map of Blue Marble Next Generation. This map is hosted on the OpenSpace servers in Utah]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/definitions/noaa20.asset b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/definitions/noaa20.asset new file mode 100644 index 0000000000..f65ff9e786 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/definitions/noaa20.asset @@ -0,0 +1,32 @@ +local Layer = { + Identifier = "Temporal_NOAA20_VIIRS", + Name = "Temporal NOAA20 VIIRS", + Type = "TemporalTileProvider", + Mode = "Prototyped", + Prototyped = { + Time = { + Start = "2018-01-05", + End = "Today" + }, + TemporalResolution = "1d", + TimeFormat = "YYYY-MM-DD", + Prototype = openspace.globebrowsing.createTemporalGibsGdalXml( + "VIIRS_NOAA20_CorrectedReflectance_TrueColor", + "250m", + "jpg" + ) + }, + PadTiles = false +} + +asset.export("Layer", Layer) + + + +asset.meta = { + Name = "NOAA 20", + Description = [[A layer that sources its images from the NOAA-20 satellite that is part of the Joint Polar Satellite System.]], + Author = "OpenSpace Team", + URL = "http://www.openspaceproject.com", + License = "MIT License" +} diff --git a/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/definitions/noaa21.asset b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/definitions/noaa21.asset new file mode 100644 index 0000000000..45f5807a23 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/definitions/noaa21.asset @@ -0,0 +1,32 @@ +local Layer = { + Identifier = "Temporal_NOAA21_VIIRS", + Name = "Temporal NOAA21 VIIRS", + Type = "TemporalTileProvider", + Mode = "Prototyped", + Prototyped = { + Time = { + Start = "2024-04-19", + End = "Today" + }, + TemporalResolution = "1d", + TimeFormat = "YYYY-MM-DD", + Prototype = openspace.globebrowsing.createTemporalGibsGdalXml( + "VIIRS_NOAA21_CorrectedReflectance_TrueColor", + "250m", + "jpg" + ) + }, + PadTiles = false +} + +asset.export("Layer", Layer) + + + +asset.meta = { + Name = "NOAA 20", + Description = [[A layer that sources its images from the NOAA-21 satellite that is part of the Joint Polar Satellite System.]], + Author = "OpenSpace Team", + URL = "http://www.openspaceproject.com", + License = "MIT License" +} diff --git a/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/definitions/snpp.asset b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/definitions/snpp.asset new file mode 100644 index 0000000000..d6656ff70c --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/definitions/snpp.asset @@ -0,0 +1,32 @@ +local Layer = { + Identifier = "Temporal_SNPP_VIIRS", + Name = "Temporal SNPP VIIRS", + Type = "TemporalTileProvider", + Mode = "Prototyped", + Prototyped = { + Time = { + Start = "2015-11-24", + End = "Today" + }, + TemporalResolution = "1d", + TimeFormat = "YYYY-MM-DD", + Prototype = openspace.globebrowsing.createTemporalGibsGdalXml( + "VIIRS_SNPP_CorrectedReflectance_TrueColor", + "250m", + "jpg" + ) + }, + PadTiles = false +} + +asset.export("Layer", Layer) + + + +asset.meta = { + Name = "NOAA 20", + Description = [[A layer that sources its images from the Suomi NPP satellite that is part of the Joint Polar Satellite System.]], + Author = "OpenSpace Team", + URL = "http://www.openspaceproject.com", + License = "MIT License" +} diff --git a/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_noaa20_combo.asset b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_noaa20_combo.asset index 6ab7e6c7e6..19466f157a 100644 --- a/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_noaa20_combo.asset +++ b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_noaa20_combo.asset @@ -1,4 +1,5 @@ local globe = asset.require("../../earth") +local noaa20 = asset.require("./definitions/noaa20") @@ -6,37 +7,19 @@ local Layer = { Identifier = "ESRI_NOAA20_Combo", Name = "ESRI NOAA20 Combo", Enabled = asset.enabled, - Type = "ByLevelTileLayer", + ZIndex = 30, + Type = "TileProviderByLevel", LevelTileProviders = { { MaxLevel = 4, - TileProvider = { - Identifier = "Temporal_VIIRS_NOAA20", - Name = "Temporal VIIRS NOAA20", - Type = "TemporalTileLayer", - Mode = "Prototyped", - Prototyped = { - Time = { - Start = "2020-04-25", - End = "Today" - }, - TemporalResolution = "1d", - TimeFormat = "YYYY-MM-DD", - Prototype = openspace.globebrowsing.createTemporalGibsGdalXml( - "VIIRS_NOAA20_CorrectedReflectance_TrueColor", - "250m", - "jpg" - ) - }, - PadTiles = false - } + TileProvider = noaa20.Layer }, { MaxLevel = 22, TileProvider = { Identifier = "ESRI_World_Imagery", Name = "ESRI World Imagery", - FilePath = asset.localResource("esri_world_imagery.wms"), + FilePath = asset.resource("esri_world_imagery.wms"), PadTiles = false } } @@ -61,7 +44,6 @@ asset.export("layer", Layer) asset.meta = { Name = "ESRI NOAA20 VIIRS Combo", - Version = "1.0", Description = [[Level based layer combining "NOAA20 SNPP (Temporal)" and ESRI World Imagery. "NOAA20 SNPP (Temporal)" is faded out at tile level 4]], Author = "OpenSpace Tem", diff --git a/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_noaa21_combo.asset b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_noaa21_combo.asset new file mode 100644 index 0000000000..06b44c5325 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_noaa21_combo.asset @@ -0,0 +1,52 @@ +local globe = asset.require("../../earth") +local noaa21 = asset.require("./definitions/noaa21") + + + +local Layer = { + Identifier = "ESRI_NOAA21_Combo", + Name = "ESRI NOAA21 Combo", + Enabled = asset.enabled, + ZIndex = 30, + Type = "TileProviderByLevel", + LevelTileProviders = { + { + MaxLevel = 4, + TileProvider = noaa21.Layer + }, + { + MaxLevel = 22, + TileProvider = { + Identifier = "ESRI_World_Imagery", + Name = "ESRI World Imagery", + FilePath = asset.resource("esri_world_imagery.wms"), + PadTiles = false + } + } + }, + PadTiles = false, + Description = [[Level based layer combining "NOAA20 SNPP (Temporal)" and ESRI World + Imagery. "NOAA20 SNPP (Temporal)" is faded out at tile level 4]] +} + + +asset.onInitialize(function() + openspace.globebrowsing.addLayer(globe.Earth.Identifier, "ColorLayers", Layer) +end) + +asset.onDeinitialize(function() + openspace.globebrowsing.deleteLayer(globe.Earth.Identifier, "ColorLayers", Layer) +end) + +asset.export("layer", Layer) + + + +asset.meta = { + Name = "ESRI NOAA20 VIIRS Combo", + Description = [[Level based layer combining "NOAA20 SNPP (Temporal)" and ESRI World + Imagery. "NOAA20 SNPP (Temporal)" is faded out at tile level 4]], + Author = "OpenSpace Tem", + URL = "http://www.openspaceproject.com", + License = "MIT License" +} diff --git a/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_snpp_combo.asset b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_snpp_combo.asset new file mode 100644 index 0000000000..2ee2480dc3 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_snpp_combo.asset @@ -0,0 +1,52 @@ +local globe = asset.require("../../earth") +local snpp = asset.require("./definitions/snpp") + + + +local Layer = { + Identifier = "ESRI_VIIRS_Combo", + Name = "ESRI VIIRS Combo", + Enabled = asset.enabled, + ZIndex = 20, + Type = "TileProviderByLevel", + LevelTileProviders = { + { + MaxLevel = 4, + TileProvider = snpp.Layer + }, + { + MaxLevel = 22, + TileProvider = { + Identifier = "ESRI_World_Imagery", + Name = "ESRI World Imagery", + FilePath = asset.resource("esri_world_imagery.wms"), + PadTiles = false + } + } + }, + PadTiles = false, + Description = [[Level based layer combining "VIIRS SNPP (Temporal)" and ESRI World + Imagery. "VIIRS SNPP (Temporal)" is faded out at tile level 4]] +} + + +asset.onInitialize(function() + openspace.globebrowsing.addLayer(globe.Earth.Identifier, "ColorLayers", Layer) +end) + +asset.onDeinitialize(function() + openspace.globebrowsing.deleteLayer(globe.Earth.Identifier, "ColorLayers", Layer) +end) + +asset.export("layer", Layer) + + + +asset.meta = { + Name = "ESRI VIIRS Combo", + Description = [[Level based layer combining "VIIRS SNPP (Temporal)" and ESRI World + Imagery. "VIIRS SNPP (Temporal)" is faded out at tile level 4]], + Author = "OpenSpace Tem", + URL = "http://www.openspaceproject.com", + License = "MIT License" +} diff --git a/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_viirs_combo.asset b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_viirs_combo.asset index 8a3bb8da0a..4c3e24bd9c 100644 --- a/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_viirs_combo.asset +++ b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_viirs_combo.asset @@ -1,4 +1,7 @@ local globe = asset.require("../../earth") +local snpp = asset.require("./definitions/snpp") +local noaa20 = asset.require("./definitions/noaa20") +local noaa21 = asset.require("./definitions/noaa21") @@ -6,29 +9,20 @@ local Layer = { Identifier = "ESRI_VIIRS_Combo", Name = "ESRI VIIRS Combo", Enabled = asset.enabled, - Type = "ByLevelTileLayer", + ZIndex = 20, + Type = "TileProviderByLevel", LevelTileProviders = { { MaxLevel = 4, TileProvider = { - Identifier = "Temporal_VIIRS_SNPP", - Name = "Temporal VIIRS SNPP", - Type = "TemporalTileLayer", - Mode = "Prototyped", - Prototyped = { - Time = { - Start = "2015-11-24", - End = "Today" - }, - TemporalResolution = "1d", - TimeFormat = "YYYY-MM-DD", - Prototype = openspace.globebrowsing.createTemporalGibsGdalXml( - "VIIRS_SNPP_CorrectedReflectance_TrueColor", - "250m", - "jpg" - ) - }, - PadTiles = false + Identifier = "VIIRS_Joint_Layer", + Name = "VIIRS Joint Layer", + Type = "TileProviderByDate", + Providers = { + ["2015-11-24"] = snpp.Layer, + ["2018-01-05"] = noaa20.Layer, + ["2024-04-19"] = noaa21.Layer + } } }, { @@ -36,14 +30,14 @@ local Layer = { TileProvider = { Identifier = "ESRI_World_Imagery", Name = "ESRI World Imagery", - FilePath = asset.localResource("esri_world_imagery.wms"), + FilePath = asset.resource("esri_world_imagery.wms"), PadTiles = false } } }, PadTiles = false, - Description = [[Level based layer combining "VIIRS SNPP (Temporal)" and ESRI World - Imagery. "VIIRS SNPP (Temporal)" is faded out at tile level 4]] + Description = [[Level based layer combining different VIIRS layers and ESRI World + Imagery. VIIRS is faded out at tile level 4]] } @@ -61,7 +55,6 @@ asset.export("layer", Layer) asset.meta = { Name = "ESRI VIIRS Combo", - Version = "1.1", Description = [[Level based layer combining "VIIRS SNPP (Temporal)" and ESRI World Imagery. "VIIRS SNPP (Temporal)" is faded out at tile level 4]], Author = "OpenSpace Tem", diff --git a/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_viirs_combo_sweden.asset b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_viirs_combo_sweden.asset new file mode 100644 index 0000000000..ec96772a81 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_viirs_combo_sweden.asset @@ -0,0 +1,63 @@ +local globe = asset.require("../../earth") +local snpp = asset.require("./definitions/snpp") +local noaa20 = asset.require("./definitions/noaa20") +local noaa21 = asset.require("./definitions/noaa21") + + + +local Layer = { + Identifier = "ESRI_VIIRS_Combo_UsSweden", + Name = "ESRI VIIRS Combo [US/Sweden]", + Enabled = asset.enabled, + ZIndex = 20, + Type = "TileProviderByLevel", + LevelTileProviders = { + { + MaxLevel = 4, + TileProvider = { + Identifier = "VIIRS_Joint_Layer", + Name = "VIIRS Joint Layer", + Type = "TileProviderByDate", + Providers = { + ["2015-11-24"] = snpp.Layer, + ["2018-01-05"] = noaa20.Layer, + ["2024-04-19"] = noaa21.Layer + } + } + }, + { + MaxLevel = 22, + TileProvider = { + Identifier = "ESRI_World_Imagery_Sweden", + Name = "ESRI World Imagery [Sweden]", + FilePath = asset.resource("esri_world_imagery_sweden.wms"), + PadTiles = false + } + } + }, + PadTiles = false, + Description = [[Level based layer combining different VIIRS layers and ESRI World + Imagery. VIIRS is faded out at tile level 4]] +} + + +asset.onInitialize(function() + openspace.globebrowsing.addLayer(globe.Earth.Identifier, "ColorLayers", Layer) +end) + +asset.onDeinitialize(function() + openspace.globebrowsing.deleteLayer(globe.Earth.Identifier, "ColorLayers", Layer) +end) + +asset.export("layer", Layer) + + + +asset.meta = { + Name = "ESRI VIIRS Combo", + Description = [[Level based layer combining "VIIRS SNPP (Temporal)" and ESRI World + Imagery. "VIIRS SNPP (Temporal)" is faded out at tile level 4]], + Author = "OpenSpace Tem", + URL = "http://www.openspaceproject.com", + License = "MIT License" +} diff --git a/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_world_imagery.asset b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_world_imagery.asset index 25c3faf776..4664f3d2c7 100644 --- a/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_world_imagery.asset +++ b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_world_imagery.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "ESRI_World_Imagery", Name = "ESRI World Imagery", Enabled = asset.enabled, - FilePath = asset.localResource("esri_world_imagery.wms"), + ZIndex = 10, + FilePath = asset.resource("esri_world_imagery.wms"), Description = [[World Imagery provides one meter or better satellite and aerial imagery in many parts of the world and lower resolution satellite imagery worldwide. The map includes 15m TerraColor imagery at small and mid-scales @@ -34,7 +35,6 @@ asset.export("layer", Layer) asset.meta = { Name = "ESRI World Imagery", - Version = "1.1", Description = "Main web loaded map layer for Earth. This layer is hosted by ESRI", Author = "ESRI", URL = "https://www.arcgis.com/home/item.html?id=10df2279f9684e4a9f6a7f08febac2a9", diff --git a/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_world_imagery.wms b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_world_imagery.wms index 34b474d295..5b2de30119 100644 --- a/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_world_imagery.wms +++ b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_world_imagery.wms @@ -6,7 +6,7 @@ -180.0 90 180 - -89.999999 + -90 19 2 1 diff --git a/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_world_imagery_sweden.asset b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_world_imagery_sweden.asset new file mode 100644 index 0000000000..b0f95b6f82 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_world_imagery_sweden.asset @@ -0,0 +1,42 @@ +local globe = asset.require("../../earth") + + + +local Layer = { + Identifier = "ESRI_World_Imagery_Sweden", + Name = "ESRI World Imagery [Sweden]", + Enabled = asset.enabled, + ZIndex = 10, + FilePath = asset.resource("esri_world_imagery_sweden.wms"), + Description = [[World Imagery provides one meter or better satellite and aerial + imagery in many parts of the world and lower resolution satellite imagery + worldwide. The map includes 15m TerraColor imagery at small and mid-scales + (~1:591M down to ~1:72k) and 2.5m SPOT Imagery (~1:288k to ~1:72k) for the world. + The map features 0.5m resolution imagery in the continental United States and + parts of Western Europe from Maxar. Additional Maxar sub-meter imagery is + featured in many parts of the world. In other parts of the world, imagery at + different resolutions has been contributed by the GIS User Community. In select + communities, very high resolution imagery (down to 0.03m) is available down to + ~1:280 scale. (Description from URL)]] +} + + +asset.onInitialize(function() + openspace.globebrowsing.addLayer(globe.Earth.Identifier, "ColorLayers", Layer) +end) + +asset.onDeinitialize(function() + openspace.globebrowsing.deleteLayer(globe.Earth.Identifier, "ColorLayers", Layer) +end) + +asset.export("layer", Layer) + + + +asset.meta = { + Name = "ESRI World Imagery", + Description = "Main web loaded map layer for Earth. This layer is hosted by ESRI", + Author = "ESRI", + URL = "https://www.arcgis.com/home/item.html?id=10df2279f9684e4a9f6a7f08febac2a9", + License = "Esri Master License Agreement" +} diff --git a/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_world_imagery_sweden.wms b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_world_imagery_sweden.wms new file mode 100644 index 0000000000..01cf55ef13 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_world_imagery_sweden.wms @@ -0,0 +1,21 @@ + + + http://liu-se.wms.openspaceproject.com/Earth/Esri_World_Imagery/tile/${z}/${y}/${x}.jpg + + + -180.0 + 90 + 180 + -90 + 19 + 2 + 1 + top + + EPSG:4326 + 256 + 256 + 3 + 5 + 5 + diff --git a/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_world_imagery_wayback.asset b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_world_imagery_wayback.asset new file mode 100644 index 0000000000..76e05aee71 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_world_imagery_wayback.asset @@ -0,0 +1,154 @@ +local globe = asset.require("../../earth") + + + +local WaybackLayer20140220 = { + Identifier = "ESRI_World_Imagery_Wayback_20140220", + ZIndex = 10, + FilePath = asset.resource("esri_world_imagery_wayback/20140220.wms"), + Description = [[The ESRI World Imagery dataset from the wayback feature showing the + Earth how it looked like in 2014 FEB 20. https://livingatlas.arcgis.com/wayback]] +} + +local WaybackLayer20150430 = { + Identifier = "ESRI_World_Imagery_Wayback_20150430", + ZIndex = 10, + FilePath = asset.resource("esri_world_imagery_wayback/20150430.wms"), + Description = [[The ESRI World Imagery dataset from the wayback feature showing the + Earth how it looked like in 2015 APR 30. https://livingatlas.arcgis.com/wayback]] +} + +local WaybackLayer20160613 = { + Identifier = "ESRI_World_Imagery_Wayback_20160613", + ZIndex = 10, + FilePath = asset.resource("esri_world_imagery_wayback/20160613.wms"), + Description = [[The ESRI World Imagery dataset from the wayback feature showing the + Earth how it looked like in 2016 JUN 13. https://livingatlas.arcgis.com/wayback]] +} + +local WaybackLayer20180108 = { + Identifier = "ESRI_World_Imagery_Wayback_20180108", + ZIndex = 10, + FilePath = asset.resource("esri_world_imagery_wayback/20180108.wms"), + Description = [[The ESRI World Imagery dataset from the wayback feature showing the + Earth how it looked like in 2018 JAN 08. https://livingatlas.arcgis.com/wayback]] +} + +local WaybackLayer20180627 = { + Identifier = "ESRI_World_Imagery_Wayback_20180627", + ZIndex = 10, + FilePath = asset.resource("esri_world_imagery_wayback/20180627.wms"), + Description = [[The ESRI World Imagery dataset from the wayback feature showing the + Earth how it looked like in 2018 JUN 27. https://livingatlas.arcgis.com/wayback]] +} + +local WaybackLayer20190626 = { + Identifier = "ESRI_World_Imagery_Wayback_20190626", + ZIndex = 10, + FilePath = asset.resource("esri_world_imagery_wayback/20190626.wms"), + Description = [[The ESRI World Imagery dataset from the wayback feature showing the + Earth how it looked like in 2019 JUN 26. https://livingatlas.arcgis.com/wayback]] +} + +local WaybackLayer20200610 = { + Identifier = "ESRI_World_Imagery_Wayback_20200610", + ZIndex = 10, + FilePath = asset.resource("esri_world_imagery_wayback/20200610.wms"), + Description = [[The ESRI World Imagery dataset from the wayback feature showing the + Earth how it looked like in 2020 JUN 10. https://livingatlas.arcgis.com/wayback]] +} + +local WaybackLayer20210408 = { + Identifier = "ESRI_World_Imagery_Wayback_20210408", + ZIndex = 10, + FilePath = asset.resource("esri_world_imagery_wayback/20210408.wms"), + Description = [[The ESRI World Imagery dataset from the wayback feature showing the + Earth how it looked like in 2021 APR 08. https://livingatlas.arcgis.com/wayback]] +} + +local WaybackLayer20211221 = { + Identifier = "ESRI_World_Imagery_Wayback_20211221", + ZIndex = 10, + FilePath = asset.resource("esri_world_imagery_wayback/20211221.wms"), + Description = [[The ESRI World Imagery dataset from the wayback feature showing the + Earth how it looked like in 2021 DEC 21. https://livingatlas.arcgis.com/wayback]] +} + +local WaybackLayer20221012 = { + Identifier = "ESRI_World_Imagery_Wayback_20221012", + ZIndex = 10, + FilePath = asset.resource("esri_world_imagery_wayback/20221012.wms"), + Description = [[The ESRI World Imagery dataset from the wayback feature showing the + Earth how it looked like in 2022 OCT 12. https://livingatlas.arcgis.com/wayback]] +} + +local WaybackLayer20230613 = { + Identifier = "ESRI_World_Imagery_Wayback_20230613", + ZIndex = 10, + FilePath = asset.resource("esri_world_imagery_wayback/20230613.wms"), + Description = [[The ESRI World Imagery dataset from the wayback feature showing the + Earth how it looked like in 2023 JUN 13. https://livingatlas.arcgis.com/wayback]] +} + +local WaybackLayer20231207 = { + Identifier = "ESRI_World_Imagery_Wayback_20231207", + ZIndex = 10, + FilePath = asset.resource("esri_world_imagery_wayback/20231207.wms"), + Description = [[The ESRI World Imagery dataset from the wayback feature showing the + Earth how it looked like in 2023 DEC 07. https://livingatlas.arcgis.com/wayback]] +} + + +asset.onInitialize(function() + openspace.globebrowsing.addLayer(globe.Earth.Identifier, "ColorLayers", WaybackLayer20140220) + openspace.globebrowsing.addLayer(globe.Earth.Identifier, "ColorLayers", WaybackLayer20150430) + openspace.globebrowsing.addLayer(globe.Earth.Identifier, "ColorLayers", WaybackLayer20160613) + openspace.globebrowsing.addLayer(globe.Earth.Identifier, "ColorLayers", WaybackLayer20180108) + openspace.globebrowsing.addLayer(globe.Earth.Identifier, "ColorLayers", WaybackLayer20180627) + openspace.globebrowsing.addLayer(globe.Earth.Identifier, "ColorLayers", WaybackLayer20190626) + openspace.globebrowsing.addLayer(globe.Earth.Identifier, "ColorLayers", WaybackLayer20200610) + openspace.globebrowsing.addLayer(globe.Earth.Identifier, "ColorLayers", WaybackLayer20210408) + openspace.globebrowsing.addLayer(globe.Earth.Identifier, "ColorLayers", WaybackLayer20211221) + openspace.globebrowsing.addLayer(globe.Earth.Identifier, "ColorLayers", WaybackLayer20221012) + openspace.globebrowsing.addLayer(globe.Earth.Identifier, "ColorLayers", WaybackLayer20230613) + openspace.globebrowsing.addLayer(globe.Earth.Identifier, "ColorLayers", WaybackLayer20231207) +end) + +asset.onDeinitialize(function() + openspace.globebrowsing.deleteLayer(globe.Earth.Identifier, "ColorLayers", WaybackLayer20231207) + openspace.globebrowsing.deleteLayer(globe.Earth.Identifier, "ColorLayers", WaybackLayer20230613) + openspace.globebrowsing.deleteLayer(globe.Earth.Identifier, "ColorLayers", WaybackLayer20221012) + openspace.globebrowsing.deleteLayer(globe.Earth.Identifier, "ColorLayers", WaybackLayer20211221) + openspace.globebrowsing.deleteLayer(globe.Earth.Identifier, "ColorLayers", WaybackLayer20210408) + openspace.globebrowsing.deleteLayer(globe.Earth.Identifier, "ColorLayers", WaybackLayer20200610) + openspace.globebrowsing.deleteLayer(globe.Earth.Identifier, "ColorLayers", WaybackLayer20190626) + openspace.globebrowsing.deleteLayer(globe.Earth.Identifier, "ColorLayers", WaybackLayer20180627) + openspace.globebrowsing.deleteLayer(globe.Earth.Identifier, "ColorLayers", WaybackLayer20180108) + openspace.globebrowsing.deleteLayer(globe.Earth.Identifier, "ColorLayers", WaybackLayer20160613) + openspace.globebrowsing.deleteLayer(globe.Earth.Identifier, "ColorLayers", WaybackLayer20150430) + openspace.globebrowsing.deleteLayer(globe.Earth.Identifier, "ColorLayers", WaybackLayer20140220) +end) + +asset.export("layer20140220", WaybackLayer20140220) +asset.export("layer20150430", WaybackLayer20150430) +asset.export("layer20160613", WaybackLayer20160613) +asset.export("layer20180108", WaybackLayer20180108) +asset.export("layer20180627", WaybackLayer20180627) +asset.export("layer20190626", WaybackLayer20190626) +asset.export("layer20200610", WaybackLayer20200610) +asset.export("layer20210408", WaybackLayer20210408) +asset.export("layer20211221", WaybackLayer20211221) +asset.export("layer20221012", WaybackLayer20221012) +asset.export("layer20230613", WaybackLayer20230613) +asset.export("layer20231207", WaybackLayer20231207) + + + +asset.meta = { + Name = "ESRI World Imagery Wayback machine", + Description = [[Access to the ESRI World Imagery Wayback machine layers ranging from + 2014 to 2023]], + Author = "ESRI", + URL = "https://livingatlas.arcgis.com/wayback", + License = "Esri Master License Agreement" +} diff --git a/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_world_imagery_wayback/20140220.wms b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_world_imagery_wayback/20140220.wms new file mode 100644 index 0000000000..b2a2bfa18a --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_world_imagery_wayback/20140220.wms @@ -0,0 +1,21 @@ + + + http://liu-se.wms.openspaceproject.com/Earth/Esri_Wayback/tile/10/${z}/${y}/${x} + + + -180.0 + 90 + 180 + -90 + 19 + 2 + 1 + top + + EPSG:4326 + 256 + 256 + 3 + 5 + 5 + diff --git a/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_world_imagery_wayback/20150430.wms b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_world_imagery_wayback/20150430.wms new file mode 100644 index 0000000000..e4cabf068f --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_world_imagery_wayback/20150430.wms @@ -0,0 +1,21 @@ + + + http://liu-se.wms.openspaceproject.com/Earth/Esri_Wayback/tile/23880/${z}/${y}/${x} + + + -180.0 + 90 + 180 + -90 + 19 + 2 + 1 + top + + EPSG:4326 + 256 + 256 + 3 + 5 + 5 + diff --git a/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_world_imagery_wayback/20160613.wms b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_world_imagery_wayback/20160613.wms new file mode 100644 index 0000000000..86ea70aef5 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_world_imagery_wayback/20160613.wms @@ -0,0 +1,21 @@ + + + http://liu-se.wms.openspaceproject.com/Earth/Esri_Wayback/tile/11509/${z}/${y}/${x} + + + -180.0 + 90 + 180 + -90 + 19 + 2 + 1 + top + + EPSG:4326 + 256 + 256 + 3 + 5 + 5 + diff --git a/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_world_imagery_wayback/20180108.wms b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_world_imagery_wayback/20180108.wms new file mode 100644 index 0000000000..38f9de5ba0 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_world_imagery_wayback/20180108.wms @@ -0,0 +1,21 @@ + + + http://liu-se.wms.openspaceproject.com/Earth/Esri_Wayback/tile/13161/${z}/${y}/${x} + + + -180.0 + 90 + 180 + -90 + 19 + 2 + 1 + top + + EPSG:4326 + 256 + 256 + 3 + 5 + 5 + diff --git a/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_world_imagery_wayback/20180627.wms b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_world_imagery_wayback/20180627.wms new file mode 100644 index 0000000000..9bfdfefc00 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_world_imagery_wayback/20180627.wms @@ -0,0 +1,21 @@ + + + http://liu-se.wms.openspaceproject.com/Earth/Esri_Wayback/tile/11334/${z}/${y}/${x} + + + -180.0 + 90 + 180 + -90 + 19 + 2 + 1 + top + + EPSG:4326 + 256 + 256 + 3 + 5 + 5 + diff --git a/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_world_imagery_wayback/20190626.wms b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_world_imagery_wayback/20190626.wms new file mode 100644 index 0000000000..272eb62d4e --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_world_imagery_wayback/20190626.wms @@ -0,0 +1,21 @@ + + + http://liu-se.wms.openspaceproject.com/Earth/Esri_Wayback/tile/645/${z}/${y}/${x} + + + -180.0 + 90 + 180 + -90 + 19 + 2 + 1 + top + + EPSG:4326 + 256 + 256 + 3 + 5 + 5 + diff --git a/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_world_imagery_wayback/20200610.wms b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_world_imagery_wayback/20200610.wms new file mode 100644 index 0000000000..e289c32548 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_world_imagery_wayback/20200610.wms @@ -0,0 +1,21 @@ + + + http://liu-se.wms.openspaceproject.com/Earth/Esri_Wayback/tile/11135/${z}/${y}/${x} + + + -180.0 + 90 + 180 + -90 + 19 + 2 + 1 + top + + EPSG:4326 + 256 + 256 + 3 + 5 + 5 + diff --git a/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_world_imagery_wayback/20210408.wms b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_world_imagery_wayback/20210408.wms new file mode 100644 index 0000000000..ae992e75f1 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_world_imagery_wayback/20210408.wms @@ -0,0 +1,21 @@ + + + http://liu-se.wms.openspaceproject.com/Earth/Esri_Wayback/tile/6863/${z}/${y}/${x} + + + -180.0 + 90 + 180 + -90 + 19 + 2 + 1 + top + + EPSG:4326 + 256 + 256 + 3 + 5 + 5 + diff --git a/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_world_imagery_wayback/20211221.wms b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_world_imagery_wayback/20211221.wms new file mode 100644 index 0000000000..628fbf81b4 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_world_imagery_wayback/20211221.wms @@ -0,0 +1,21 @@ + + + http://liu-se.wms.openspaceproject.com/Earth/Esri_Wayback/tile/26120/${z}/${y}/${x} + + + -180.0 + 90 + 180 + -90 + 19 + 2 + 1 + top + + EPSG:4326 + 256 + 256 + 3 + 5 + 5 + diff --git a/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_world_imagery_wayback/20221012.wms b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_world_imagery_wayback/20221012.wms new file mode 100644 index 0000000000..44aafcf12f --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_world_imagery_wayback/20221012.wms @@ -0,0 +1,21 @@ + + + http://liu-se.wms.openspaceproject.com/Earth/Esri_Wayback/tile/44988/${z}/${y}/${x} + + + -180.0 + 90 + 180 + -90 + 19 + 2 + 1 + top + + EPSG:4326 + 256 + 256 + 3 + 5 + 5 + diff --git a/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_world_imagery_wayback/20230613.wms b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_world_imagery_wayback/20230613.wms new file mode 100644 index 0000000000..ae41d06d4e --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_world_imagery_wayback/20230613.wms @@ -0,0 +1,21 @@ + + + http://liu-se.wms.openspaceproject.com/Earth/Esri_Wayback/tile/25982/${z}/${y}/${x} + + + -180.0 + 90 + 180 + -90 + 19 + 2 + 1 + top + + EPSG:4326 + 256 + 256 + 3 + 5 + 5 + diff --git a/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_world_imagery_wayback/20231207.wms b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_world_imagery_wayback/20231207.wms new file mode 100644 index 0000000000..9a6388ad64 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/esri_world_imagery_wayback/20231207.wms @@ -0,0 +1,21 @@ + + + http://liu-se.wms.openspaceproject.com/Earth/Esri_Wayback/tile/56102/${z}/${y}/${x} + + + -180.0 + 90 + 180 + -90 + 19 + 2 + 1 + top + + EPSG:4326 + 256 + 256 + 3 + 5 + 5 + diff --git a/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/ghrsst_l4_mur_sea_surface_temperature_temporal.asset b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/ghrsst_l4_mur_sea_surface_temperature_temporal.asset index fc016ab893..80a3536893 100644 --- a/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/ghrsst_l4_mur_sea_surface_temperature_temporal.asset +++ b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/ghrsst_l4_mur_sea_surface_temperature_temporal.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "GHRSST_L4_MUR_Sea_Surface_Temperature_Temporal", Name = "GHRSST L4 MUR Sea Surface Temperature (Temporal)", Enabled = asset.enabled, - Type = "TemporalTileLayer", + ZIndex = 100, + Type = "TemporalTileProvider", Mode = "Prototyped", Prototyped = { Time = { @@ -40,7 +41,6 @@ asset.export("layer", Layer) asset.meta = { Name = "GHRSST L4 MUR Sea Surface Temperature (Temporal)", - Version = "1.1", Description = "GIBS hosted layer", Author = "NASA EOSDIS Global Imagery Browse Services", URL = "https://earthdata.nasa.gov/eosdis/science-system-description/eosdis-components/gibs", diff --git a/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/modis_terra_chlorophyll_a_temporal.asset b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/modis_terra_chlorophyll_a_temporal.asset index 12dcbb3d36..4c534d3d9a 100644 --- a/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/modis_terra_chlorophyll_a_temporal.asset +++ b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/modis_terra_chlorophyll_a_temporal.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "MODIS_Terra_Chlorophyll_A_Temporal", Name = "MODIS Terra Chlorophyll A (Temporal)", Enabled = asset.enabled, - Type = "TemporalTileLayer", + ZIndex = 100, + Type = "TemporalTileProvider", Mode = "Prototyped", Prototyped = { Time = { @@ -16,7 +17,7 @@ local Layer = { TemporalResolution = "1d", TimeFormat = "YYYY-MM-DD", Prototype = openspace.globebrowsing.createTemporalGibsGdalXml( - "MODIS_Terra_Chlorophyll_A", + "MODIS_Terra_L2_Chlorophyll_A", "1km", "png" ) @@ -40,7 +41,6 @@ asset.export("layer", Layer) asset.meta = { Name = "MODIS Terra Chlorophyll A (Temporal)", - Version = "1.1", Description = "GIBS hosted layer", Author = "NASA EOSDIS Global Imagery Browse Services", URL = "https://earthdata.nasa.gov/eosdis/science-system-description/eosdis-components/gibs", diff --git a/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/terra_modis_temporal.asset b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/terra_modis_temporal.asset index d58a03a00b..5e2ff5e695 100644 --- a/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/terra_modis_temporal.asset +++ b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/terra_modis_temporal.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "Terra_Modis_Temporal", Name = "Terra Modis (Temporal)", Enabled = asset.enabled, - Type = "TemporalTileLayer", + ZIndex = 20, + Type = "TemporalTileProvider", Mode = "Prototyped", Prototyped = { Time = { @@ -40,7 +41,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Terra Modis (Temporal)", - Version = "1.1", Description = "GIBS hosted layer", Author = "NASA EOSDIS Global Imagery Browse Services", URL = "https://earthdata.nasa.gov/eosdis/science-system-description/eosdis-components/gibs", diff --git a/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/viirs_noaa20_temporal.asset b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/viirs_noaa20_temporal.asset index 4798202aa7..4380875f21 100644 --- a/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/viirs_noaa20_temporal.asset +++ b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/viirs_noaa20_temporal.asset @@ -1,46 +1,20 @@ local globe = asset.require("../../earth") +local noaa20 = asset.require("./definitions/noaa20") -local Layer = { - Identifier = "VIIRS_NOAA20_Temporal", - Name = "VIIRS NOAA20 (Temporal)", - Enabled = asset.enabled, - Type = "TemporalTileLayer", - Mode = "Prototyped", - Prototyped = { - Time = { - Start = "2020-04-25", - End = "Yesterday" - }, - TemporalResolution = "1d", - TimeFormat = "YYYY-MM-DD", - Prototype = openspace.globebrowsing.createTemporalGibsGdalXml( - "VIIRS_NOAA20_CorrectedReflectance_TrueColor", - "250m", - "jpg" - ) - }, - Description = [[Temporal coverage: 11 November 2015 - Present. The imagery resolution - is 0.25 km, and the temporal resolution is daily]] -} - - asset.onInitialize(function() - openspace.globebrowsing.addLayer(globe.Earth.Identifier, "ColorLayers", Layer) + openspace.globebrowsing.addLayer(globe.Earth.Identifier, "ColorLayers", noaa20.Layer) end) asset.onDeinitialize(function() - openspace.globebrowsing.deleteLayer(globe.Earth.Identifier, "ColorLayers", Layer) + openspace.globebrowsing.deleteLayer(globe.Earth.Identifier, "ColorLayers", noaa20.Layer) end) -asset.export("layer", Layer) - asset.meta = { Name = "VIIRS NOAA20 (Temporal)", - Version = "1.1", Description = "This layer has the best daily Earth Image", Author = "NASA EOSDIS Global Imagery Browse Services", URL = diff --git a/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/viirs_noaa21_temporal.asset b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/viirs_noaa21_temporal.asset new file mode 100644 index 0000000000..e74851f857 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/viirs_noaa21_temporal.asset @@ -0,0 +1,23 @@ +local globe = asset.require("../../earth") +local noaa21 = asset.require("./definitions/noaa21") + + + +asset.onInitialize(function() + openspace.globebrowsing.addLayer(globe.Earth.Identifier, "ColorLayers", noaa21.Layer) +end) + +asset.onDeinitialize(function() + openspace.globebrowsing.deleteLayer(globe.Earth.Identifier, "ColorLayers", noaa21.Layer) +end) + + + +asset.meta = { + Name = "VIIRS NOAA21 (Temporal)", + Description = "This layer has the best daily Earth Image", + Author = "NASA EOSDIS Global Imagery Browse Services", + URL = + "https://earthdata.nasa.gov/eosdis/science-system-description/eosdis-components/gibs", + License = "NASA" +} diff --git a/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/viirs_snpp_temporal.asset b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/viirs_snpp_temporal.asset index 81209d74a8..bf07ec7483 100644 --- a/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/viirs_snpp_temporal.asset +++ b/data/assets/scene/solarsystem/planets/earth/layers/colorlayers/viirs_snpp_temporal.asset @@ -1,46 +1,20 @@ local globe = asset.require("../../earth") +local snpp = asset.require("./definitions/snpp") -local Layer = { - Identifier = "VIIRS_SNPP_Temporal", - Name = "VIIRS SNPP (Temporal)", - Enabled = asset.enabled, - Type = "TemporalTileLayer", - Mode = "Prototyped", - Prototyped = { - Time = { - Start = "2015-11-24", - End = "Yesterday" - }, - TemporalResolution = "1d", - TimeFormat = "YYYY-MM-DD", - Prototype = openspace.globebrowsing.createTemporalGibsGdalXml( - "VIIRS_SNPP_CorrectedReflectance_TrueColor", - "250m", - "jpg" - ) - }, - Description = [[Temporal coverage: 11 November 2015 - Present. The imagery resolution - is 0.25 km, and the temporal resolution is daily]] -} - - asset.onInitialize(function() - openspace.globebrowsing.addLayer(globe.Earth.Identifier, "ColorLayers", Layer) + openspace.globebrowsing.addLayer(globe.Earth.Identifier, "ColorLayers", snpp.Layer) end) asset.onDeinitialize(function() - openspace.globebrowsing.deleteLayer(globe.Earth.Identifier, "ColorLayers", Layer) + openspace.globebrowsing.deleteLayer(globe.Earth.Identifier, "ColorLayers", snpp.Layer) end) -asset.export("layer", Layer) - asset.meta = { Name = "VIIRS SNPP (Temporal)", - Version = "1.1", Description = "This layer has the best daily Earth Image", Author = "NASA EOSDIS Global Imagery Browse Services", URL = diff --git a/data/assets/scene/solarsystem/planets/earth/layers/heightlayers/blue_marble_height.asset b/data/assets/scene/solarsystem/planets/earth/layers/heightlayers/blue_marble_height.asset index bc2d6a2b45..9b8433f619 100644 --- a/data/assets/scene/solarsystem/planets/earth/layers/heightlayers/blue_marble_height.asset +++ b/data/assets/scene/solarsystem/planets/earth/layers/heightlayers/blue_marble_height.asset @@ -2,7 +2,7 @@ local globe = asset.require("../../earth") -local texturesPath = asset.syncedResource({ +local texturesPath = asset.resource({ Name = "Earth Textures", Type = "HttpSynchronization", Identifier = "earth_textures", @@ -14,8 +14,15 @@ local Layer = { Name = "Earth Bluemarble Height", Identifier = "Earth_Bluemarble_Height", Enabled = asset.enabled, + ZIndex = 5, FilePath = texturesPath .. "earth_bluemarble_height.jpg", - Description = "Topographic layer from Blue Marble Next Generation" + Description = "Topographic layer from Blue Marble Next Generation", + --note these values were just chosen to try to closly match the look of the ESRI Terrain layer + Settings = { + Multiplier = 40, + Offset = -600 + }, + CacheSettings = { Enabled = false } } @@ -33,7 +40,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Earth Bluemarble Height", - Version = "1.1", Description = [[Fallback layer for earth height if no internet is available. Contains Blue Marble Next Generation Topographic]], Author = "NASA", diff --git a/data/assets/scene/solarsystem/planets/earth/layers/heightlayers/terrain_tileset.asset b/data/assets/scene/solarsystem/planets/earth/layers/heightlayers/terrain_tileset.asset index 8892c0cb89..bb2d2e0a5f 100644 --- a/data/assets/scene/solarsystem/planets/earth/layers/heightlayers/terrain_tileset.asset +++ b/data/assets/scene/solarsystem/planets/earth/layers/heightlayers/terrain_tileset.asset @@ -6,8 +6,9 @@ local Layer = { Identifier = "Terrain_tileset", Name = "Terrain tileset", Enabled = asset.enabled, - FilePath = asset.localResource("terrain_tileset.wms"), - TilePixelSize = 512, + ZIndex = 10, + FilePath = asset.resource("terrain_tileset.wms"), + TilePixelSize = 129, Description = [[This globe layer presents elevation data at approximately 90m or 1km per pixel resolution for the world. The elevation data includes 90m Shuttle Radar Topography Mission (SRTM) elevation data from NASA and National @@ -30,7 +31,6 @@ asset.export("layer", Layer) asset.meta = { Name = "World Elevation (3D)", - Version = "1.1", Description = "Main web loaded height layer for Earth. This layer is hosted by ESRI", Author = "ESRI", URL = "https://www.arcgis.com/home/item.html?id=1b48cd3b6276416784fe90a68c580a89", diff --git a/data/assets/scene/solarsystem/planets/earth/layers/newyork_layers.asset b/data/assets/scene/solarsystem/planets/earth/layers/newyork_layers.asset new file mode 100644 index 0000000000..3e17640093 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/layers/newyork_layers.asset @@ -0,0 +1,24 @@ +asset.require("./base_layers") +asset.require("./colorlayers/bmng_newyork", false) +asset.require("./watermasks/gebco_newyork", false) + + + +asset.meta = { + Name = "Default Earth Layers (New York)", + Description = [[Default Earth layers are: Blue Marble, + ESRI VIIRS Combo, ESRI NOAA20 Combo, ESRI World Imagery, VIIRS SNPP (Temporal), + Aqua Modis (Temporal), Terra Modis (Temporal), + AMSR2 GCOM W1 Sea Ice Concentration (Temporal), MODIS Terra Chlorophyll A (Temporal), + GHRSST L4 MUR Sea Surface Temperature (Temporal), BMNG, Blue Marble Height (3D), + World Elevation (3D), Earth at Night 2012, Earth at Night Texture, + Earth at Night (Temporal), Coastlines, Reference Features, Reference Labels, + Tile Indicies, Size Reference, Gebco and Modis Water Mask. + + + Layers only loaded from the New York server + ]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/earth/layers/nightlayers/earth_at_night_2012.asset b/data/assets/scene/solarsystem/planets/earth/layers/nightlayers/earth_at_night_2012.asset index ab8a2062e7..83cb95bd8c 100644 --- a/data/assets/scene/solarsystem/planets/earth/layers/nightlayers/earth_at_night_2012.asset +++ b/data/assets/scene/solarsystem/planets/earth/layers/nightlayers/earth_at_night_2012.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "Earth_at_Night_2012", Name = "Earth at Night 2012", Enabled = asset.enabled, - FilePath = asset.localResource("earth_at_night_2012.wms"), + ZIndex = 10, + FilePath = asset.resource("earth_at_night_2012.wms"), Description = [[The lights of cities and villages trace the outlines of civilization in this global view]] } @@ -26,7 +27,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Earth at Night 2012", - Version = "1.1", Description = "Main web loaded night layer for Earth. This layer is hosted by GIBS", Author = "OpenSpace Team", URL = "https://visibleearth.nasa.gov/images/79765/night-lights-2012-map", diff --git a/data/assets/scene/solarsystem/planets/earth/layers/nightlayers/earth_at_night_temporal.asset b/data/assets/scene/solarsystem/planets/earth/layers/nightlayers/earth_at_night_temporal.asset index cec806e322..9335950d43 100644 --- a/data/assets/scene/solarsystem/planets/earth/layers/nightlayers/earth_at_night_temporal.asset +++ b/data/assets/scene/solarsystem/planets/earth/layers/nightlayers/earth_at_night_temporal.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "Earth_at_Night_Temporal", Name = "Earth at Night (Temporal)", Enabled = asset.enabled, - Type = "TemporalTileLayer", + ZIndex = 20, + Type = "TemporalTileProvider", Mode = "Prototyped", Prototyped = { Time = { @@ -56,7 +57,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Earth at Night (Temporal)", - Version = "1.1", Description = "Temporal layer for earth with daily night image", Author = "OpenSpace Team", URL = "https://worldview.earthdata.nasa.gov/?l=VIIRS_SNPP_DayNightBand_ENCC", diff --git a/data/assets/scene/solarsystem/planets/earth/layers/nightlayers/earth_at_night_temporal_blue_yellow.asset b/data/assets/scene/solarsystem/planets/earth/layers/nightlayers/earth_at_night_temporal_blue_yellow.asset index 0f017472f1..6faeb39b8a 100644 --- a/data/assets/scene/solarsystem/planets/earth/layers/nightlayers/earth_at_night_temporal_blue_yellow.asset +++ b/data/assets/scene/solarsystem/planets/earth/layers/nightlayers/earth_at_night_temporal_blue_yellow.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "Earth_at_Night_Temporal_Blue_Yellow", Name = "Earth at Night Blue Yellow (Temporal)", Enabled = asset.enabled, - Type = "TemporalTileLayer", + ZIndex = 20, + Type = "TemporalTileProvider", Mode = "Prototyped", Prototyped = { Time = { @@ -56,7 +57,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Earth at Night Blue Yellow(Temporal)", - Version = "1.1", Description = "Temporal layer for earth with daily night image", Author = "OpenSpace Team", URL = "https://worldview.earthdata.nasa.gov/?l=VIIRS_SNPP_DayNightBand_ENCC", diff --git a/data/assets/scene/solarsystem/planets/earth/layers/nightlayers/earth_night_texture.asset b/data/assets/scene/solarsystem/planets/earth/layers/nightlayers/earth_night_texture.asset index b42d01213a..588f856b0d 100644 --- a/data/assets/scene/solarsystem/planets/earth/layers/nightlayers/earth_night_texture.asset +++ b/data/assets/scene/solarsystem/planets/earth/layers/nightlayers/earth_night_texture.asset @@ -2,7 +2,7 @@ local globe = asset.require("../../earth") -local texturesPath = asset.syncedResource({ +local texturesPath = asset.resource({ Name = "Earth Textures", Type = "HttpSynchronization", Identifier = "earth_textures", @@ -14,8 +14,10 @@ local Layer = { Identifier = "Earth_Night_Texture", Name = "Earth Night Texture", Enabled = asset.enabled, + ZIndex = 5, FilePath = texturesPath .. "earth_night.png", - Description = "Earth's city lights are clearly visible from space" + Description = "Earth's city lights are clearly visible from space", + CacheSettings = { Enabled = false } } @@ -33,7 +35,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Blue Marble Night", - Version = "1.1", Description = "Fallback layer for earth night image if no internet is available", Author = "OpenSpace Team", URL = "https://visibleearth.nasa.gov/collection/1484/blue-marble", diff --git a/data/assets/scene/solarsystem/planets/earth/layers/overlays/coastlines.asset b/data/assets/scene/solarsystem/planets/earth/layers/overlays/coastlines.asset index 4a35585b02..948bcc9d4d 100644 --- a/data/assets/scene/solarsystem/planets/earth/layers/overlays/coastlines.asset +++ b/data/assets/scene/solarsystem/planets/earth/layers/overlays/coastlines.asset @@ -4,7 +4,7 @@ local globe = asset.require("../../earth") local Layer = { Identifier = "Coastlines", - FilePath = asset.localResource("coastlines.wms"), + FilePath = asset.resource("coastlines.wms"), Enabled = asset.enabled } @@ -23,7 +23,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Earth Coastlines Layer", - Version = "1.0", Description = "Coastlines layer for Earth globe", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/earth/layers/overlays/reference_features.asset b/data/assets/scene/solarsystem/planets/earth/layers/overlays/reference_features.asset index 0e8f3d3ec8..0a8a28081e 100644 --- a/data/assets/scene/solarsystem/planets/earth/layers/overlays/reference_features.asset +++ b/data/assets/scene/solarsystem/planets/earth/layers/overlays/reference_features.asset @@ -6,7 +6,7 @@ local Layer = { Identifier = "Reference_Features", Name = "Reference Features", Enabled = asset.enabled, - FilePath = asset.localResource("reference_features.wms") + FilePath = asset.resource("reference_features.wms") } @@ -24,7 +24,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Earth Reference Features", - Version = "1.0", Description = "Reference Features layer for Earth globe", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/earth/layers/overlays/reference_labels.asset b/data/assets/scene/solarsystem/planets/earth/layers/overlays/reference_labels.asset index 462b635511..0f8af74d3e 100644 --- a/data/assets/scene/solarsystem/planets/earth/layers/overlays/reference_labels.asset +++ b/data/assets/scene/solarsystem/planets/earth/layers/overlays/reference_labels.asset @@ -6,7 +6,7 @@ local Layer = { Identifier = "Reference_Labels", Name = "Reference Labels", Enabled = asset.enabled, - FilePath = asset.localResource("reference_labels.wms") + FilePath = asset.resource("reference_labels.wms") } @@ -24,7 +24,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Earth Reference Labels", - Version = "1.0", Description = "Reference Labels layer for Earth globe", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/earth/layers/overlays/size_reference.asset b/data/assets/scene/solarsystem/planets/earth/layers/overlays/size_reference.asset index 5f6e75648b..00bdae7b5a 100644 --- a/data/assets/scene/solarsystem/planets/earth/layers/overlays/size_reference.asset +++ b/data/assets/scene/solarsystem/planets/earth/layers/overlays/size_reference.asset @@ -6,7 +6,7 @@ local Layer ={ Identifier = "Size_Reference", Name = "Size Reference", Enabled = asset.enabled, - Type = "SizeReferenceTileLayer", + Type = "SizeReferenceTileProvider", Radii = globe.Earth.Renderable.Radii } @@ -25,7 +25,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Earth Size Reference", - Version = "1.0", Description = "Size reference layer for Earth globe", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/earth/layers/overlays/tile_indices.asset b/data/assets/scene/solarsystem/planets/earth/layers/overlays/tile_indices.asset index 83acd1c8dd..45afa564ea 100644 --- a/data/assets/scene/solarsystem/planets/earth/layers/overlays/tile_indices.asset +++ b/data/assets/scene/solarsystem/planets/earth/layers/overlays/tile_indices.asset @@ -6,7 +6,7 @@ local Layer = { Identifier = "Tile_Indices", Name = "Tile Indices", Enabled = asset.enabled, - Type = "TileIndexTileLayer" + Type = "TileIndexTileProvider" } @@ -24,7 +24,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Earth Tile Indices", - Version = "1.0", Description = "Tile index layer for Earth globe", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/earth/layers/sweden_layers.asset b/data/assets/scene/solarsystem/planets/earth/layers/sweden_layers.asset new file mode 100644 index 0000000000..490c5c35c5 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/layers/sweden_layers.asset @@ -0,0 +1,24 @@ +asset.require("./base_layers") +asset.require("./colorlayers/bmng_sweden", false) +asset.require("./watermasks/gebco_sweden", false) + + + +asset.meta = { + Name = "Default Earth Layers (Sweden)", + Description = [[Default Earth layers are: Blue Marble, + ESRI VIIRS Combo, ESRI NOAA20 Combo, ESRI World Imagery, VIIRS SNPP (Temporal), + Aqua Modis (Temporal), Terra Modis (Temporal), + AMSR2 GCOM W1 Sea Ice Concentration (Temporal), MODIS Terra Chlorophyll A (Temporal), + GHRSST L4 MUR Sea Surface Temperature (Temporal), BMNG, Blue Marble Height (3D), + World Elevation (3D), Earth at Night 2012, Earth at Night Texture, + Earth at Night (Temporal), Coastlines, Reference Features, Reference Labels, + Tile Indicies, Size Reference, Gebco and Modis Water Mask. + + + Layers only loaded from the Sweden server + ]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/earth/layers/utah_layers.asset b/data/assets/scene/solarsystem/planets/earth/layers/utah_layers.asset new file mode 100644 index 0000000000..e3116f6cf1 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/layers/utah_layers.asset @@ -0,0 +1,24 @@ +asset.require("./base_layers") +asset.require("./colorlayers/bmng_utah", false) +asset.require("./watermasks/gebco_utah", false) + + + +asset.meta = { + Name = "Default Earth Layers (Utah)", + Description = [[Default Earth layers are: Blue Marble, + ESRI VIIRS Combo, ESRI NOAA20 Combo, ESRI World Imagery, VIIRS SNPP (Temporal), + Aqua Modis (Temporal), Terra Modis (Temporal), + AMSR2 GCOM W1 Sea Ice Concentration (Temporal), MODIS Terra Chlorophyll A (Temporal), + GHRSST L4 MUR Sea Surface Temperature (Temporal), BMNG, Blue Marble Height (3D), + World Elevation (3D), Earth at Night 2012, Earth at Night Texture, + Earth at Night (Temporal), Coastlines, Reference Features, Reference Labels, + Tile Indicies, Size Reference, Gebco and Modis Water Mask. + + + Layers only loaded from the Utah server + ]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/earth/layers/watermasks/gebco_newyork.asset b/data/assets/scene/solarsystem/planets/earth/layers/watermasks/gebco_newyork.asset index b961f411a6..60c3e1e078 100644 --- a/data/assets/scene/solarsystem/planets/earth/layers/watermasks/gebco_newyork.asset +++ b/data/assets/scene/solarsystem/planets/earth/layers/watermasks/gebco_newyork.asset @@ -6,7 +6,8 @@ local Layer = { Name = "Gebco [New York]", Identifier = "Gebco_NewYork", Enabled = asset.enabled, - FilePath = asset.localResource("gebco_newyork.wms") + ZIndex = 10, + FilePath = asset.resource("gebco_newyork.wms") } @@ -24,7 +25,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Gebco WaterMask Layer (New York)", - Version = "1.0", Description = "WaterMask layer for Earth globe", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/earth/layers/watermasks/gebco_sweden.asset b/data/assets/scene/solarsystem/planets/earth/layers/watermasks/gebco_sweden.asset index 8b3c2e49d1..720d0d8910 100644 --- a/data/assets/scene/solarsystem/planets/earth/layers/watermasks/gebco_sweden.asset +++ b/data/assets/scene/solarsystem/planets/earth/layers/watermasks/gebco_sweden.asset @@ -6,7 +6,8 @@ local Layer = { Name = "Gebco [Sweden]", Identifier = "Gebco_Sweden", Enabled = asset.enabled, - FilePath = asset.localResource("gebco_sweden.wms") + ZIndex = 10, + FilePath = asset.resource("gebco_sweden.wms") } @@ -24,7 +25,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Gebco WaterMask Layer (Sweden)", - Version = "1.0", Description = "WaterMask layer for Earth globe", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/earth/layers/watermasks/gebco_utah.asset b/data/assets/scene/solarsystem/planets/earth/layers/watermasks/gebco_utah.asset index aa6ea8e5a0..2cef03f883 100644 --- a/data/assets/scene/solarsystem/planets/earth/layers/watermasks/gebco_utah.asset +++ b/data/assets/scene/solarsystem/planets/earth/layers/watermasks/gebco_utah.asset @@ -6,7 +6,8 @@ local Layer = { Name = "Gebco [Utah]", Identifier = "Gebco_Utah", Enabled = asset.enabled, - FilePath = asset.localResource("gebco_utah.wms") + ZIndex = 10, + FilePath = asset.resource("gebco_utah.wms") } @@ -24,7 +25,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Gebco WaterMask Layer (Utah)", - Version = "1.0", Description = "WaterMask layer for Earth globe", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/earth/layers/watermasks/modis_water_mask.asset b/data/assets/scene/solarsystem/planets/earth/layers/watermasks/modis_water_mask.asset index 73f03a8c97..49d1a2444a 100644 --- a/data/assets/scene/solarsystem/planets/earth/layers/watermasks/modis_water_mask.asset +++ b/data/assets/scene/solarsystem/planets/earth/layers/watermasks/modis_water_mask.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "MODIS_Water_Mask", Name = "MODIS Water Mask", Enabled = asset.enabled, - FilePath = asset.localResource("modis_water_mask.wms") + ZIndex = 20, + FilePath = asset.resource("modis_water_mask.wms") } @@ -24,7 +25,6 @@ asset.export("layer", Layer) asset.meta = { Name = "MODIS Water Mask", - Version = "1.0", Description = "MODIS Water Mask layer for Earth globe", Author = "NASA EOSDIS Global Imagery Browse Services", URL = "https://earthdata.nasa.gov/eosdis/science-system-description/".. diff --git a/data/assets/scene/solarsystem/planets/earth/magnetosphere/magnetosphere.asset b/data/assets/scene/solarsystem/planets/earth/magnetosphere/magnetosphere.asset index 0d10b2134d..5190136a15 100644 --- a/data/assets/scene/solarsystem/planets/earth/magnetosphere/magnetosphere.asset +++ b/data/assets/scene/solarsystem/planets/earth/magnetosphere/magnetosphere.asset @@ -1,10 +1,10 @@ -local transforms = asset.require("./transforms_magnetosphere") +local transforms = asset.require("scene/solarsystem/planets/earth/transforms_gsm_static") -local transferFunction = asset.localResource("CMR-illuminance2.txt") +local transferFunction = asset.resource("CMR-illuminance2.txt") -local fieldlinesDirectory = asset.syncedResource({ +local fieldlinesDirectory = asset.resource({ Name = "Magnetosphere 2012 event", Type = "HttpSynchronization", Identifier = "magnetosphere_2012_event", @@ -13,12 +13,13 @@ local fieldlinesDirectory = asset.syncedResource({ local EarthMagnetosphere = { Identifier = "EarthMagnetosphere", - Parent = transforms.GSMReferenceFrame.Identifier, + Parent = transforms.GeocentricSolarMagnetosphericStatic.Identifier, InteractionSphere = 6380000, -- A value slightly bigger than earth radius Renderable = { Type = "RenderableFieldlinesSequence", SourceFolder = fieldlinesDirectory, LineWidth = 1.0, + ShowAtAllTimes = true, AlphaBlendlingEnabled = false, InputFileType = "Osfls", -- OpenSpace Field lines sequence MaskingEnabled = true, @@ -27,8 +28,8 @@ local EarthMagnetosphere = { ColorMethod = "By Quantity", ColorQuantity = 4, -- speed ColorTableRanges = { { 50, 300 } }, - ColorTablePaths = { transferFunction }, LoadAtRuntime = true, + ColorTablePaths = { transferFunction }, ScaleToMeters = 1.0, Color = { 1.0, 0.725, 0.75, 0.8 } }, @@ -53,7 +54,6 @@ asset.export(EarthMagnetosphere) asset.meta = { Name = "Static generic magnetosphere of fieldlines", - Version = "1.1", Description = "Generic static magnetosphere fieldlines. Actual timestep 2012-07-14T00-00-00-000. Defaultly colored by speed; 50-300 km/s", Author = "CCMC", URL = "", diff --git a/data/assets/scene/solarsystem/planets/earth/magnetosphere/transforms_magnetosphere.asset b/data/assets/scene/solarsystem/planets/earth/magnetosphere/transforms_magnetosphere.asset deleted file mode 100644 index 64b90d6b05..0000000000 --- a/data/assets/scene/solarsystem/planets/earth/magnetosphere/transforms_magnetosphere.asset +++ /dev/null @@ -1,49 +0,0 @@ -local transforms = asset.require("scene/solarsystem/planets/earth/transforms") -asset.require("spice/base") - - - -local GSMKernel = asset.localResource("../kernels/GSM.ti") - -local GSMReferenceFrame = { - Identifier = "GSMReferenceFrame", - Parent = transforms.EarthCenter.Identifier, - Transform = { - Rotation = { - Type = "SpiceRotation", - SourceFrame = "GSM", -- Geocentric Solar Magnetospheric - DestinationFrame = "GALACTIC" - } - }, - GUI = { - Name = "GSM Reference Frame", - Path = "/Solar System/Planets/Earth", - Hidden = true - } -} - - -asset.onInitialize(function() - openspace.spice.loadKernel(GSMKernel) - - openspace.addSceneGraphNode(GSMReferenceFrame) -end) - -asset.onDeinitialize(function() - openspace.removeSceneGraphNode(GSMReferenceFrame) - - openspace.spice.unloadKernel(GSMKernel) -end) - -asset.export(GSMReferenceFrame) - - - -asset.meta = { - Name = "Earth magnetosphere transforms", - Version = "1.1", - Description = "Earth transforms: GSMReferenceFrame. Geocentric Solar Magnetospheric", - Author = "CCMC", - URL = "http://openspaceproject.com", - License = "MIT license" -} diff --git a/data/assets/scene/solarsystem/planets/earth/markers.asset b/data/assets/scene/solarsystem/planets/earth/markers.asset index 04fe9c6f57..84f22944c8 100644 --- a/data/assets/scene/solarsystem/planets/earth/markers.asset +++ b/data/assets/scene/solarsystem/planets/earth/markers.asset @@ -2,7 +2,7 @@ local transforms = asset.require("./transforms") -local texturesPath = asset.syncedResource({ +local texturesPath = asset.resource({ Name = "Earth Textures", Type = "HttpSynchronization", Identifier = "earth_textures", @@ -43,7 +43,6 @@ asset.export(EarthMarker) asset.meta = { Name = "Earth marker", - Version = "1.1", Description = "Earth marker with name, sized for Solar System view", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/default_layers.asset b/data/assets/scene/solarsystem/planets/earth/moon/default_layers.asset index 590c938ca1..8ff0f20392 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/default_layers.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/default_layers.asset @@ -1,32 +1,17 @@ -asset.require("./layers/colorlayers/wac_utah", true) -asset.require("./layers/colorlayers/wac_sweden", false) -asset.require("./layers/colorlayers/wac_newyork", false) -asset.require("./layers/colorlayers/clemuvvis_utah", false) -asset.require("./layers/colorlayers/clemuvvis_sweden", false) -asset.require("./layers/colorlayers/clemuvvis_newyork", false) -asset.require("./layers/colorlayers/uvvishybrid_utah", false) -asset.require("./layers/colorlayers/uvvishybrid_sweden", false) -asset.require("./layers/colorlayers/uvvishybrid_newyork", false) -asset.require("./layers/colorlayers/kaguya_utah", false) -asset.require("./layers/colorlayers/kaguya_sweden", false) -asset.require("./layers/colorlayers/kaguya_newyork", false) -asset.require("./layers/colorlayers/lola_clr_shade_utah", false) -asset.require("./layers/colorlayers/lola_clr_shade_sweden", false) -asset.require("./layers/colorlayers/lola_clr_shade_newyork", false) -asset.require("./layers/colorlayers/lola_shade_utah", false) -asset.require("./layers/colorlayers/lola_shade_sweden", false) -asset.require("./layers/colorlayers/lola_shade_newyork", false) - -asset.require("./layers/heightlayers/loladem_utah", true) -asset.require("./layers/heightlayers/loladem_sweden", false) -asset.require("./layers/heightlayers/loladem_newyork", false) +asset.require("./layers/utah_layers", true) +asset.require("./layers/sweden_layers", false) +asset.require("./layers/newyork_layers", false) asset.meta = { Name = "Default Moon layers", - Version = "1.0", - Description = "This asset adds the default layers to the Moon globe", + Description = [[Default Moon layers are: WAC, Clem Uvvis, Uvvis Hybrid, Kaguya, + LRO LOLA Color Shaded Relief 388m v4, Lola Shade, and Lola DEM (3D). + + + Layers loaded from all servers + ]], Author = "OpenSpace Team", URL = "http://openspaceproject.com", License = "MIT license" diff --git a/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/apollo_15_metric_newyork.asset b/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/apollo_15_metric_newyork.asset index 0f04dd67e0..0c75620191 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/apollo_15_metric_newyork.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/apollo_15_metric_newyork.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "Apollo15Metric_NewYork", Name = "Apollo 15 Metric Cam [New York]", Enabled = asset.enabled, - FilePath = asset.localResource("apollo_15_metric_newyork.wms"), + ZIndex = 50, + FilePath = asset.resource("apollo_15_metric_newyork.wms"), Description = [[ The Apollo 15 Metric (Mapping) Camera obtained high-quality metric photographs, on black and white film, with high geometric precision of the lunar surface from lunar @@ -33,7 +34,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Kaguya [New York]", - Version = "1.1", Description = [[Moon SELENE Kaguya TC Global Orthomosaic 474m v2 layer for Moon globe. This map is hosted on the OpenSpace server in New York]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/clemuvvis_newyork.asset b/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/clemuvvis_newyork.asset index a6a076cd0f..1bf226b867 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/clemuvvis_newyork.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/clemuvvis_newyork.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "ClemUvvis_NewYork", Name = "Clem Uvvis [New York]", Enabled = asset.enabled, - FilePath = asset.localResource("clemuvvis_newyork.wms"), + ZIndex = 20, + FilePath = asset.resource("clemuvvis_newyork.wms"), Settings = { Gamma = 1.14, Multiplier = 1.4 @@ -32,7 +33,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Clem Uvvis [New York]", - Version = "1.1", Description = [[Moon Clementine UVVIS Global Mosaic 118m v2 map of the Moon. This map is hosted on the OpenSpace server in New York]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/clemuvvis_sweden.asset b/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/clemuvvis_sweden.asset index 8fed8d750a..a5b0822ad5 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/clemuvvis_sweden.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/clemuvvis_sweden.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "ClemUvvis_Sweden", Name = "Clem Uvvis [Sweden]", Enabled = asset.enabled, - FilePath = asset.localResource("clemuvvis_sweden.wms"), + ZIndex = 20, + FilePath = asset.resource("clemuvvis_sweden.wms"), Settings = { Gamma = 1.14, Multiplier = 1.4 @@ -32,7 +33,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Clem Uvvis [Sweden]", - Version = "1.1", Description = [[Moon Clementine UVVIS Global Mosaic 118m v2 map of the Moon. This map is hosted on the OpenSpace server in Sweden]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/clemuvvis_utah.asset b/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/clemuvvis_utah.asset index b1d7a0e6fa..3802c8a7b6 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/clemuvvis_utah.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/clemuvvis_utah.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "ClemUvvis_Utah", Name = "Clem Uvvis [Utah]", Enabled = asset.enabled, - FilePath = asset.localResource("clemuvvis_utah.wms"), + ZIndex = 20, + FilePath = asset.resource("clemuvvis_utah.wms"), Settings = { Gamma = 1.14, Multiplier = 1.4 @@ -33,7 +34,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Clem Uvvis [Utah]", - Version = "1.1", Description = [[Moon Clementine UVVIS Global Mosaic 118m v2 map of the Moon. This map is hosted on the OpenSpace server in Utah]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/kaguya_newyork.asset b/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/kaguya_newyork.asset index 1e27e41394..34f5bae257 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/kaguya_newyork.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/kaguya_newyork.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "Kaguya_NewYork", Name = "Kaguya [New York]", Enabled = asset.enabled, - FilePath = asset.localResource("kaguya_newyork.vrt"), + ZIndex = 20, + FilePath = asset.resource("kaguya_newyork.vrt"), Settings = { Gamma = 1.0, Multiplier = 1.23 @@ -32,7 +33,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Kaguya [New York]", - Version = "1.1", Description = [[Moon SELENE Kaguya TC Global Orthomosaic 474m v2 layer for Moon globe. This map is hosted on the OpenSpace server in New York]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/kaguya_sweden.asset b/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/kaguya_sweden.asset index df22023c77..81780f4255 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/kaguya_sweden.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/kaguya_sweden.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "Kaguya_Sweden", Name = "Kaguya [Sweden]", Enabled = asset.enabled, - FilePath = asset.localResource("kaguya_sweden.vrt"), + ZIndex = 20, + FilePath = asset.resource("kaguya_sweden.vrt"), Settings = { Gamma = 1.0, Multiplier = 1.23 @@ -32,7 +33,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Kaguya [Sweden]", - Version = "1.1", Description = [[Moon SELENE Kaguya TC Global Orthomosaic 474m v2 layer for Moon globe. This map is hosted on the OpenSpace server in Sweden]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/kaguya_utah.asset b/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/kaguya_utah.asset index ccc6e1db1b..3588904c7a 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/kaguya_utah.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/kaguya_utah.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "Kaguya_Utah", Name = "Kaguya [Utah]", Enabled = asset.enabled, - FilePath = asset.localResource("kaguya_utah.vrt"), + ZIndex = 20, + FilePath = asset.resource("kaguya_utah.vrt"), Settings = { Gamma = 1.0, Multiplier = 1.23 @@ -32,7 +33,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Kaguya [Utah]", - Version = "1.1", Description = [[Moon SELENE Kaguya TC Global Orthomosaic 474m v2 layer for Moon globe. This map is hosted on the OpenSpace server in Utah]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/lo_mr_mosaic_newyork.asset b/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/lo_mr_mosaic_newyork.asset index ea8a0f12f2..ecf4959a18 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/lo_mr_mosaic_newyork.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/lo_mr_mosaic_newyork.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "LO_MR_Mosaic_NewYork", Name = "Moon Lunar Orbiter Digital Photographic Global Mosaic 59m v1 [New York]", Enabled = asset.enabled, - FilePath = asset.localResource("lo_mr_mosaic_newyork.wms"), + ZIndex = 20, + FilePath = asset.resource("lo_mr_mosaic_newyork.wms"), Description = [[ This Lunar Orbiter (LO) mosaic of the Moon was constructed using photographs acquired by LO III, IV and V. Work towards constructing the global mosaic @@ -41,7 +42,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Moon Lunar Orbiter Digital Photographic Global Mosaic [New York]", - Version = "1.0", Description = [[Moon Lunar Orbiter Digital Photographic Global Mosaic 59m v1. This map is hosted on the OpenSpace server in New York]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/lo_mr_mosaic_sweden.asset b/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/lo_mr_mosaic_sweden.asset index bdb6289b30..c98c0626bc 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/lo_mr_mosaic_sweden.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/lo_mr_mosaic_sweden.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "LO_MR_Mosaic_Sweden", Name = "Moon Lunar Orbiter Digital Photographic Global Mosaic 59m v1 [Sweden]", Enabled = asset.enabled, - FilePath = asset.localResource("lo_mr_mosaic_sweden.wms"), + ZIndex = 20, + FilePath = asset.resource("lo_mr_mosaic_sweden.wms"), Description = [[ This Lunar Orbiter (LO) mosaic of the Moon was constructed using photographs acquired by LO III, IV and V. Work towards constructing the global mosaic spanned over seven @@ -40,7 +41,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Moon Lunar Orbiter Digital Photographic Global Mosaic [Sweden]", - Version = "1.0", Description = [[Moon Lunar Orbiter Digital Photographic Global Mosaic 59m v1. This map is hosted on the OpenSpace server in Sweden]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/lola_clr_shade_newyork.asset b/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/lola_clr_shade_newyork.asset index 6ec6420c62..a08607a103 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/lola_clr_shade_newyork.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/lola_clr_shade_newyork.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "Lola_Clr_Shade_NewYork", Name = "LRO LOLA Color Shaded Relief 388m v4 [New York]", Enabled = asset.enabled, - FilePath = asset.localResource("lola_clr_shade_newyork.wms"), + ZIndex = 100, + FilePath = asset.resource("lola_clr_shade_newyork.wms"), Description = [[This is a colorized shaded-relief of a original polar digital elevation model (DEM) from the Lunar Orbiter Laser Altimeter (LOLA; Smith et al., 2010), an instrument on the National Aeronautics and Space Agency (NASA) Lunar Reconnaissance @@ -32,7 +33,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Lola Color Shade [New York]", - Version = "1.1", Description = [[Moon LRO LOLA Color Shaded Relief 388m v4 layer for Moon globe. This map is hosted on the OpenSpace server in New York]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/lola_clr_shade_sweden.asset b/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/lola_clr_shade_sweden.asset index 573f18aa71..b2c60119c5 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/lola_clr_shade_sweden.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/lola_clr_shade_sweden.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "Lola_Clr_Shade_Sweden", Name = "LRO LOLA Color Shaded Relief 388m v4 [Sweden]", Enabled = asset.enabled, - FilePath = asset.localResource("lola_clr_shade_sweden.wms"), + ZIndex = 100, + FilePath = asset.resource("lola_clr_shade_sweden.wms"), Description = [[This is a colorized shaded-relief of a original polar digital elevation model (DEM) from the Lunar Orbiter Laser Altimeter (LOLA; Smith et al., 2010), an instrument on the National Aeronautics and Space Agency (NASA) Lunar Reconnaissance @@ -32,7 +33,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Lola Color Shade [Sweden]", - Version = "1.1", Description = [[Moon LRO LOLA Color Shaded Relief 388m v4 layer for Moon globe. This map is hosted on the OpenSpace server in Sweden]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/lola_clr_shade_utah.asset b/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/lola_clr_shade_utah.asset index bbd2185b61..7b168d7d25 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/lola_clr_shade_utah.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/lola_clr_shade_utah.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "Lola_Clr_Shade_Utah", Name = "LRO LOLA Color Shaded Relief 388m v4 [Utah]", Enabled = asset.enabled, - FilePath = asset.localResource("lola_clr_shade_utah.wms"), + ZIndex = 100, + FilePath = asset.resource("lola_clr_shade_utah.wms"), Description = [[This is a colorized shaded-relief of a original polar digital elevation model (DEM) from the Lunar Orbiter Laser Altimeter (LOLA; Smith et al., 2010), an instrument on the National Aeronautics and Space Agency (NASA) Lunar Reconnaissance @@ -32,7 +33,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Lola Color Shade [Utah]", - Version = "1.1", Description = [[Moon LRO LOLA Color Shaded Relief 388m v4 layer for Moon globe. This map is hosted on the OpenSpace server in Utah]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/lola_shade_newyork.asset b/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/lola_shade_newyork.asset index b7dfd05486..5a9d1cd611 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/lola_shade_newyork.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/lola_shade_newyork.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "Lola_Shade_NewYork", Name = "Lola Shade [New York]", Enabled = asset.enabled, - FilePath = asset.localResource("lola_shade_newyork.wms"), + ZIndex = 100, + FilePath = asset.resource("lola_shade_newyork.wms"), Description = [[This is a shaded-relief of a original polar digital elevation model (DEM) from the Lunar Orbiter Laser Altimeter (LOLA; Smith et al., 2010), an instrument on the National Aeronautics and Space Agency (NASA) Lunar Reconnaissance Orbiter (LRO) @@ -32,7 +33,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Lola Shade [New York]", - Version = "1.1", Description = [[Moon LRO LOLA Shaded Relief 237m v4 layer for Moon globe. This map is hosted on the OpenSpace server in New York]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/lola_shade_sweden.asset b/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/lola_shade_sweden.asset index 32febd2575..12dc1938ff 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/lola_shade_sweden.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/lola_shade_sweden.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "Lola_Shade_Sweden", Name = "Lola Shade [Sweden]", Enabled = asset.enabled, - FilePath = asset.localResource("lola_shade_sweden.wms"), + ZIndex = 100, + FilePath = asset.resource("lola_shade_sweden.wms"), Description = [[This is a shaded-relief of a original polar digital elevation model (DEM) from the Lunar Orbiter Laser Altimeter (LOLA; Smith et al., 2010), an instrument on the National Aeronautics and Space Agency (NASA) Lunar Reconnaissance Orbiter (LRO) @@ -32,7 +33,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Lola Shade [Sweden]", - Version = "1.1", Description = [[Moon LRO LOLA Shaded Relief 237m v4 layer for Moon globe. This map is hosted on the OpenSpace server in Sweden]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/lola_shade_utah.asset b/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/lola_shade_utah.asset index 98ede5bd6b..6589076128 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/lola_shade_utah.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/lola_shade_utah.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "Lola_Shade_Utah", Name = "Lola Shade [Utah]", Enabled = asset.enabled, - FilePath = asset.localResource("lola_shade_utah.wms"), + ZIndex = 100, + FilePath = asset.resource("lola_shade_utah.wms"), Description = [[This is a shaded-relief of a original polar digital elevation model (DEM) from the Lunar Orbiter Laser Altimeter (LOLA; Smith et al., 2010), an instrument on the National Aeronautics and Space Agency (NASA) Lunar Reconnaissance Orbiter (LRO) @@ -32,7 +33,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Lola Shade [Utah]", - Version = "1.1", Description = [[Moon LRO LOLA Shaded Relief 237m v4 layer for Moon globe. This map is hosted on the OpenSpace server in Utah]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/moon_texture.asset b/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/moon_texture.asset index d5f236e673..f2bfa53954 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/moon_texture.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/moon_texture.asset @@ -2,11 +2,11 @@ local globe = asset.require("../../moon") -local texturesPath = asset.syncedResource({ +local texturesPath = asset.resource({ Name = "Moon Textures", Type = "HttpSynchronization", Identifier = "moon_textures", - Version = 1 + Version = 2 }) @@ -14,8 +14,10 @@ local Layer = { Identifier = "Moon_Texture", Name = "Moon Texture", Enabled = asset.enabled, + ZIndex = 5, FilePath = texturesPath .. "WAC_GLOBAL_E000N0000_032P.png", - Description = "Lower Resolution offline version of WAC layer" + Description = "Lower Resolution offline version of WAC layer", + CacheSettings = { Enabled = false } } @@ -33,7 +35,6 @@ asset.export("Layer", Layer) asset.meta = { Name = "Moon Texture", - Version = "1.0", Description = "Offline lower resolution version of Moon WAC layer, available for offline use", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/uvvishybrid_newyork.asset b/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/uvvishybrid_newyork.asset index 7a89103305..34d898513f 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/uvvishybrid_newyork.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/uvvishybrid_newyork.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "UvvisHybrid_NewYork", Name = "Uvvis Hybrid [New York]", Enabled = asset.enabled, - FilePath = asset.localResource("uvvishybrid_newyork.wms"), + ZIndex = 10, + FilePath = asset.resource("uvvishybrid_newyork.wms"), Settings = { Gamma = 0.52, Multiplier = 0.65 @@ -36,7 +37,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Uvvis Hybrid [New York]", - Version = "1.1", Description = [[Moon Lunar Orbiter - Clementine UVVISv2 Hybrid Mosaic 59m v1 map of the Moon. This map is hosted on the OpenSpace server in New York]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/uvvishybrid_sweden.asset b/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/uvvishybrid_sweden.asset index eba3c74b84..a984b0135f 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/uvvishybrid_sweden.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/uvvishybrid_sweden.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "UvvisHybrid_Sweden", Name = "Uvvis Hybrid [Sweden]", Enabled = asset.enabled, - FilePath = asset.localResource("uvvishybrid_sweden.wms"), + ZIndex = 10, + FilePath = asset.resource("uvvishybrid_sweden.wms"), Settings = { Gamma = 0.52, Multiplier = 0.65 @@ -36,7 +37,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Uvvis Hybrid [Sweden]", - Version = "1.1", Description = [[Moon Lunar Orbiter - Clementine UVVISv2 Hybrid Mosaic 59m v1 map of the Moon. This map is hosted on the OpenSpace server in Sweden]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/uvvishybrid_utah.asset b/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/uvvishybrid_utah.asset index 1fab137ebf..ef03a86502 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/uvvishybrid_utah.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/uvvishybrid_utah.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "UvvisHybrid_Utah", Name = "Uvvis Hybrid [Utah]", Enabled = asset.enabled, - FilePath = asset.localResource("uvvishybrid_utah.wms"), + ZIndex = 10, + FilePath = asset.resource("uvvishybrid_utah.wms"), Settings = { Gamma = 0.52, Multiplier = 0.65 @@ -36,7 +37,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Uvvis Hybrid [Utah]", - Version = "1.1", Description = [[Moon Lunar Orbiter - Clementine UVVISv2 Hybrid Mosaic 59m v1 map of the Moon. This map is hosted on the OpenSpace server in Utah]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/wac_newyork.asset b/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/wac_newyork.asset index c4416d5928..f0f91dd87f 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/wac_newyork.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/wac_newyork.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "WAC_NewYork", Name = "WAC [New York]", Enabled = asset.enabled, - FilePath = asset.localResource("wac_newyork.wms"), + ZIndex = 10, + FilePath = asset.resource("wac_newyork.wms"), Settings = { Gamma = 0.84 }, Description = [[Lunar Reconnaissance Orbiter Camera (LROC) Wide Angle Camera (WAC) aboard the Lunar Reconnaissance Orbiter (LRO) has allowed the instrument team to @@ -45,7 +46,6 @@ asset.export("layer", Layer) asset.meta = { Name = "WAC [New York]", - Version = "2.0", Description = [[Wide Angle Color map of the Moon. This map is hosted on the OpenSpace server in New York]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/wac_sweden.asset b/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/wac_sweden.asset index cf28ca5bd3..e95682f8ae 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/wac_sweden.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/wac_sweden.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "WAC_Sweden", Name = "WAC [Sweden]", Enabled = asset.enabled, - FilePath = asset.localResource("wac_sweden.wms"), + ZIndex = 10, + FilePath = asset.resource("wac_sweden.wms"), Settings = { Gamma = 0.84 }, Description = [[Lunar Reconnaissance Orbiter Camera (LROC) Wide Angle Camera (WAC) aboard the Lunar Reconnaissance Orbiter (LRO) has allowed the instrument team to @@ -45,7 +46,6 @@ asset.export("layer", Layer) asset.meta = { Name = "WAC [Sweden]", - Version = "2.0", Description = [[Wide Angle Color map of the Moon. This map is hosted on the OpenSpace server in Sweden]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/wac_utah.asset b/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/wac_utah.asset index a5033b2521..5200a1b940 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/wac_utah.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/wac_utah.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "WAC_Utah", Name = "WAC [Utah]", Enabled = asset.enabled, - FilePath = asset.localResource("wac_utah.wms"), + ZIndex = 10, + FilePath = asset.resource("wac_utah.wms"), Settings = { Gamma = 0.84 }, Description = [[Lunar Reconnaissance Orbiter Camera (LROC) Wide Angle Camera (WAC) aboard the Lunar Reconnaissance Orbiter (LRO) has allowed the instrument team to @@ -45,7 +46,6 @@ asset.export("layer", Layer) asset.meta = { Name = "WAC [Utah]", - Version = "2.0", Description = [[Wide Angle Color map of the Moon. This map is hosted on the OpenSpace server in Utah]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/wac_v1_newyork.asset b/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/wac_v1_newyork.asset index c6619d72f9..642c9db6bb 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/wac_v1_newyork.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/wac_v1_newyork.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "WAC_V1_NewYork", Name = "WAC V1 [New York]", Enabled = asset.enabled, - FilePath = asset.localResource("wac_v1_newyork.wms"), + ZIndex = 10, + FilePath = asset.resource("wac_v1_newyork.wms"), Settings = { Gamma = 0.84 }, Description = [[Lunar Reconnaissance Orbiter Camera (LROC) Wide Angle Camera (WAC) aboard the Lunar Reconnaissance Orbiter (LRO) has allowed the instrument team to @@ -34,7 +35,6 @@ asset.export("layer", Layer) asset.meta = { Name = "WAC [New York]", - Version = "1.2", Description = [[Wide Angle Color map of the Moon. This map is hosted on the OpenSpace server in New York]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/wac_v1_sweden.asset b/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/wac_v1_sweden.asset index eb0c4fad2a..64aeadff89 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/wac_v1_sweden.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/wac_v1_sweden.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "WAC_V1_Sweden", Name = "WAC V1 [Sweden]", Enabled = asset.enabled, - FilePath = asset.localResource("wac_v1_sweden.wms"), + ZIndex = 10, + FilePath = asset.resource("wac_v1_sweden.wms"), Settings = { Gamma = 0.84 }, Description = [[Lunar Reconnaissance Orbiter Camera (LROC) Wide Angle Camera (WAC) aboard the Lunar Reconnaissance Orbiter (LRO) has allowed the instrument team to @@ -34,7 +35,6 @@ asset.export("layer", Layer) asset.meta = { Name = "WAC [Sweden]", - Version = "1.2", Description = [[Wide Angle Color map of the Moon. This map is hosted on the OpenSpace server in Sweden]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/wac_v1_utah.asset b/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/wac_v1_utah.asset index bbeff64218..e37808bc10 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/wac_v1_utah.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/layers/colorlayers/wac_v1_utah.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "WAC_V1_Utah", Name = "WAC V1 [Utah]", Enabled = asset.enabled, - FilePath = asset.localResource("wac_v1_utah.wms"), + ZIndex = 10, + FilePath = asset.resource("wac_v1_utah.wms"), Settings = { Gamma = 0.84 }, Description = [[Lunar Reconnaissance Orbiter Camera (LROC) Wide Angle Camera (WAC) aboard the Lunar Reconnaissance Orbiter (LRO) has allowed the instrument team to @@ -34,7 +35,6 @@ asset.export("layer", Layer) asset.meta = { Name = "WAC v1 [Utah]", - Version = "1.2", Description = [[Wide Angle Color map of the Moon. This map is hosted on the OpenSpace server in Utah]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/layers/heightlayers/loladem_newyork.asset b/data/assets/scene/solarsystem/planets/earth/moon/layers/heightlayers/loladem_newyork.asset index 2bb42cb75a..ee17b7d42e 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/layers/heightlayers/loladem_newyork.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/layers/heightlayers/loladem_newyork.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "LolaDem_NewYork", Name = "Lola DEM [New York]", Enabled = asset.enabled, - FilePath = asset.localResource("loladem_newyork.wms"), + ZIndex = 10, + FilePath = asset.resource("loladem_newyork.wms"), TilePixelSize = 360, Settings = { Multiplier = 0.5 }, Description = [[This digital elevation model (DEM) is based on data from the Lunar @@ -32,7 +33,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Lola DEM [New York]", - Version = "1.1", Description = [[Moon LRO LOLA DEM 118m v1 layer for Moon globe. This map is hosted on the OpenSpace server in New York]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/layers/heightlayers/loladem_sweden.asset b/data/assets/scene/solarsystem/planets/earth/moon/layers/heightlayers/loladem_sweden.asset index 1f104ba1a7..1de2197085 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/layers/heightlayers/loladem_sweden.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/layers/heightlayers/loladem_sweden.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "LolaDem_Sweden", Name = "Lola DEM [Sweden]", Enabled = asset.enabled, - FilePath = asset.localResource("loladem_sweden.wms"), + ZIndex = 10, + FilePath = asset.resource("loladem_sweden.wms"), TilePixelSize = 360, Settings = { Multiplier = 0.5 } } @@ -26,7 +27,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Lola DEM [Sweden]", - Version = "1.1", Description = [[Moon LRO LOLA DEM 118m v1 layer for Moon globe. This map is hosted on the OpenSpace server in Sweden]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/layers/heightlayers/loladem_utah.asset b/data/assets/scene/solarsystem/planets/earth/moon/layers/heightlayers/loladem_utah.asset index e71e47147e..9cf24409d8 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/layers/heightlayers/loladem_utah.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/layers/heightlayers/loladem_utah.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "LolaDem_Utah", Name = "Lola DEM [Utah]", Enabled = asset.enabled, - FilePath = asset.localResource("loladem_utah.wms"), + ZIndex = 10, + FilePath = asset.resource("loladem_utah.wms"), TilePixelSize = 360, Settings = { Multiplier = 0.5 }, Description = [[This digital elevation model (DEM) is based on data from the Lunar @@ -32,7 +33,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Lola DEM [Utah]", - Version = "1.1", Description = [[Moon LRO LOLA DEM 118m v1 layer for Moon globe. This map is hosted on the OpenSpace server in Utah]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/layers/newyork_layers.asset b/data/assets/scene/solarsystem/planets/earth/moon/layers/newyork_layers.asset new file mode 100644 index 0000000000..85ece9ff45 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/moon/layers/newyork_layers.asset @@ -0,0 +1,23 @@ +asset.require("./colorlayers/wac_newyork", asset.enabled) +asset.require("./colorlayers/clemuvvis_newyork", false) +asset.require("./colorlayers/uvvishybrid_newyork", false) +asset.require("./colorlayers/kaguya_newyork", false) +asset.require("./colorlayers/lola_clr_shade_newyork", false) +asset.require("./colorlayers/lola_shade_newyork", false) + +asset.require("./heightlayers/loladem_newyork", asset.enabled) + + + +asset.meta = { + Name = "Default Moon layers (New York)", + Description = [[Default Moon layers are: WAC, Clem Uvvis, Uvvis Hybrid, Kaguya, + LRO LOLA Color Shaded Relief 388m v4, Lola Shade, and Lola DEM (3D). + + + Layers only loaded from the New York server + ]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/earth/moon/layers/overlays/size_reference.asset b/data/assets/scene/solarsystem/planets/earth/moon/layers/overlays/size_reference.asset index 684ffeb1fc..7bde99ba2e 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/layers/overlays/size_reference.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/layers/overlays/size_reference.asset @@ -6,7 +6,7 @@ local Layer = { Identifier = "Size_Reference", Name = "Size Reference", Enabled = asset.enabled, - Type = "SizeReferenceTileLayer", + Type = "SizeReferenceTileProvider", Radii = globe.Moon.Renderable.Radii } @@ -25,7 +25,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Moon Size Reference", - Version = "1.0", Description = "Size reference layer for Moon globe", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/layers/overlays/tile_indices.asset b/data/assets/scene/solarsystem/planets/earth/moon/layers/overlays/tile_indices.asset index b1edc92ce2..2218be8957 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/layers/overlays/tile_indices.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/layers/overlays/tile_indices.asset @@ -6,7 +6,7 @@ local Layer = { Identifier = "Tile_Indices", Name = "Tile Indices", Enabled = asset.enabled, - Type = "TileIndexTileLayer" + Type = "TileIndexTileProvider" } @@ -24,7 +24,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Moon Tile Indices", - Version = "1.0", Description = "Tile index layer for Moon globe", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/layers/sweden_layers.asset b/data/assets/scene/solarsystem/planets/earth/moon/layers/sweden_layers.asset new file mode 100644 index 0000000000..328f20b333 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/moon/layers/sweden_layers.asset @@ -0,0 +1,23 @@ +asset.require("./colorlayers/wac_sweden", asset.enabled) +asset.require("./colorlayers/clemuvvis_sweden", false) +asset.require("./colorlayers/uvvishybrid_sweden", false) +asset.require("./colorlayers/kaguya_sweden", false) +asset.require("./colorlayers/lola_clr_shade_sweden", false) +asset.require("./colorlayers/lola_shade_sweden", false) + +asset.require("./heightlayers/loladem_sweden", asset.enabled) + + + +asset.meta = { + Name = "Default Moon layers (Sweden)", + Description = [[Default Moon layers are: WAC, Clem Uvvis, Uvvis Hybrid, Kaguya, + LRO LOLA Color Shaded Relief 388m v4, Lola Shade, and Lola DEM (3D). + + + Layers only loaded from the Sweden server + ]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/earth/moon/layers/utah_layers.asset b/data/assets/scene/solarsystem/planets/earth/moon/layers/utah_layers.asset new file mode 100644 index 0000000000..54df0fdf5c --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/moon/layers/utah_layers.asset @@ -0,0 +1,23 @@ +asset.require("./colorlayers/wac_utah", asset.enabled) +asset.require("./colorlayers/clemuvvis_utah", false) +asset.require("./colorlayers/uvvishybrid_utah", false) +asset.require("./colorlayers/kaguya_utah", false) +asset.require("./colorlayers/lola_clr_shade_utah", false) +asset.require("./colorlayers/lola_shade_utah", false) + +asset.require("./heightlayers/loladem_utah", asset.enabled) + + + +asset.meta = { + Name = "Default Moon layers (Utah)", + Description = [[Default Moon layers are: WAC, Clem Uvvis, Uvvis Hybrid, Kaguya, + LRO LOLA Color Shaded Relief 388m v4, Lola Shade, and Lola DEM (3D). + + + Layers only loaded from the Utah server + ]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/earth/moon/markers.asset b/data/assets/scene/solarsystem/planets/earth/moon/markers.asset new file mode 100644 index 0000000000..7516de40e7 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/moon/markers.asset @@ -0,0 +1,50 @@ +local transforms = asset.require("./moon") + + + +local texturesPath = asset.resource({ + Name = "Moon Textures", + Type = "HttpSynchronization", + Identifier = "moon_textures", + Version = 3 +}) + + +local MoonMarker = { + Identifier = "MoonMarker", + Parent = transforms.Moon.Identifier, + Renderable = { + Type = "RenderablePlaneImageLocal", + Enabled = false, + Size = 3.0E7, + Origin = "Center", + Billboard = true, + Texture = texturesPath .. "marker.png", + BlendMode = "Additive" + }, + GUI = { + Name = "Moon Marker", + Path = "/Solar System/Planets/Earth/Moon" + } +} + + +asset.onInitialize(function() + openspace.addSceneGraphNode(MoonMarker) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(MoonMarker) +end) + +asset.export(MoonMarker) + + + +asset.meta = { + Name = "Moon marker", + Description = "Moon marker with name, sized for Earth view", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/earth/moon/moon.asset b/data/assets/scene/solarsystem/planets/earth/moon/moon.asset index a0105c1798..ec6b2f0c33 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/moon.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/moon.asset @@ -1,11 +1,11 @@ -asset.require("spice/base") local transforms = asset.require("scene/solarsystem/planets/earth/transforms") local sunAsset = asset.require("scene/solarsystem/sun/sun") local earthAsset = asset.require("../earth") +local coreKernels = asset.require("spice/core") -local labelsPath = asset.syncedResource({ +local labelsPath = asset.resource({ Name = "Moon Labels", Type = "HttpSynchronization", Identifier = "moon_labels", @@ -19,20 +19,18 @@ local Moon = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "MOON", - Observer = "EARTH BARYCENTER" + Target = coreKernels.ID.Moon, + Observer = coreKernels.ID.EarthBarycenter }, Rotation = { Type = "SpiceRotation", - SourceFrame = "IAU_MOON", - DestinationFrame = "GALACTIC" + SourceFrame = coreKernels.Frame.Moon, + DestinationFrame = coreKernels.Frame.Galactic } }, Renderable = { Type = "RenderableGlobe", Radii = 1738140, - SegmentsPerPatch = 64, - Layers = {}, ShadowGroup = { Sources = { { Name = sunAsset.Sun.Identifier, Radius = 696300000 }, @@ -94,7 +92,7 @@ local FocusMoon = { ]], Documentation = "Set camera focus on the Moon", GuiPath = "/Solar System/Earth/Moon", - isLocal = false + IsLocal = false } local ToggleMoonShading = { @@ -103,12 +101,12 @@ local ToggleMoonShading = { Command = [[ openspace.setPropertyValueSingle( "Scene.Moon.Renderable.PerformShading", - not openspace.getPropertyValue("Scene.Moon.Renderable.PerformShading") + not openspace.propertyValue("Scene.Moon.Renderable.PerformShading") ) ]], Documentation = "Toggles the shading of the Moon", GuiPath = "/Solar System/Earth/Moon", - isLocal = false + IsLocal = false } @@ -137,7 +135,6 @@ asset.export("ToggleMoonShading", ToggleMoonShading.Identifier) asset.meta = { Name = "Moon", - Version = "1.2", Description = "Moon globe with labels and actions", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/Apollo_15_Metric_Cam_DEM.asset b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/Apollo_15_Metric_Cam_DEM.asset index 964d2edc0e..aea2431c0e 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/Apollo_15_Metric_Cam_DEM.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/Apollo_15_Metric_Cam_DEM.asset @@ -6,34 +6,41 @@ local globeIdentifier = asset.require("scene/solarsystem//planets/earth/moon/moon").Moon.Identifier + + local treks_Apollo15_MetricCam_ClrShade_Global_1024ppd = { Identifier = "Apollo15_MetricCam_ClrShade_Global_1024ppd", Name = [[Apollo 15 Metric Cam DEM, ColorHillshade]], - FilePath = asset.localResource("Apollo_15_Metric_Cam_DEM/ColorHillshade.vrt"), + ZIndex = 50, + FilePath = asset.resource("Apollo_15_Metric_Cam_DEM/ColorHillshade.vrt"), Description = [[]] } local treks_Apollo15_MetricCam_ClrConf_Global_1024ppd = { Identifier = "Apollo15_MetricCam_ClrConf_Global_1024ppd", Name = [[Apollo 15 Metric Cam DEM, Colorized Confidence]], - FilePath = asset.localResource("Apollo_15_Metric_Cam_DEM/Colorized_Confidence.vrt"), + ZIndex = 50, + FilePath = asset.resource("Apollo_15_Metric_Cam_DEM/Colorized_Confidence.vrt"), Description = [[]] } local treks_Apollo15_MetricCam_Gray_Global_1024ppd = { Identifier = "Apollo15_MetricCam_Gray_Global_1024ppd", Name = [[Apollo 15 Metric Cam DEM, Grayscale]], - FilePath = asset.localResource("Apollo_15_Metric_Cam_DEM/Grayscale.vrt"), + ZIndex = 50, + FilePath = asset.resource("Apollo_15_Metric_Cam_DEM/Grayscale.vrt"), Description = [[]] } local treks_Apollo15_MetricCam_Shade_Global_1024ppd = { Identifier = "Apollo15_MetricCam_Shade_Global_1024ppd", Name = [[Apollo 15 Metric Cam DEM, Hillshade]], - FilePath = asset.localResource("Apollo_15_Metric_Cam_DEM/Hillshade.vrt"), + ZIndex = 50, + FilePath = asset.resource("Apollo_15_Metric_Cam_DEM/Hillshade.vrt"), Description = [[]] } + asset.onInitialize(function() openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_Apollo15_MetricCam_ClrShade_Global_1024ppd) openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_Apollo15_MetricCam_ClrConf_Global_1024ppd) @@ -54,9 +61,9 @@ asset.export("Apollo15_MetricCam_Gray_Global_1024ppd", treks_Apollo15_MetricCam_ asset.export("Apollo15_MetricCam_Shade_Global_1024ppd", treks_Apollo15_MetricCam_Shade_Global_1024ppd) + asset.meta = { - Name = [[NASA Treks Layers for Moon Apollo_15_Metric_Cam_DEM], - Version = "1.0", + Name = [[NASA Treks Layers for Moon Apollo_15_Metric_Cam_DEM]], Author = "NASA/Treks", URL = "https://trek.nasa.gov/moon", License = "NASA/Treks", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/Apollo_15_Pan_Cam_DEM.asset b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/Apollo_15_Pan_Cam_DEM.asset index a55c41ca8c..8c08136de2 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/Apollo_15_Pan_Cam_DEM.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/Apollo_15_Pan_Cam_DEM.asset @@ -6,27 +6,33 @@ local globeIdentifier = asset.require("scene/solarsystem//planets/earth/moon/moon").Moon.Identifier + + local treks_Apollo15_PanCam_ClrShade_25N311E_5mp = { Identifier = "Apollo15_PanCam_ClrShade_25N311E_5mp", Name = [[Apollo 15 Pan Cam DEM, Aristarchus Plateau 1, ColorHillshade]], - FilePath = asset.localResource("Apollo_15_Pan_Cam_DEM/Aristarchus_Plateau_1.vrt"), + ZIndex = 50, + FilePath = asset.resource("Apollo_15_Pan_Cam_DEM/Aristarchus_Plateau_1.vrt"), Description = [[]] } local treks_Apollo15_PanCam_ClrShade_28N307E_3mp = { Identifier = "Apollo15_PanCam_ClrShade_28N307E_3mp", Name = [[Apollo 15 Pan Cam DEM, Aristarchus Plateau 2, ColorHillshade]], - FilePath = asset.localResource("Apollo_15_Pan_Cam_DEM/Aristarchus_Plateau_2.vrt"), + ZIndex = 50, + FilePath = asset.resource("Apollo_15_Pan_Cam_DEM/Aristarchus_Plateau_2.vrt"), Description = [[]] } local treks_Apollo15_PanCam_ClrShade_19S129E_5mp = { Identifier = "Apollo15_PanCam_ClrShade_19S129E_5mp", Name = [[Apollo 15 Pan Cam DEM, Tsiolkovskiy Crater, ColorHillshade]], - FilePath = asset.localResource("Apollo_15_Pan_Cam_DEM/Tsiolkovskiy_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("Apollo_15_Pan_Cam_DEM/Tsiolkovskiy_Crater.vrt"), Description = [[]] } + asset.onInitialize(function() openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_Apollo15_PanCam_ClrShade_25N311E_5mp) openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_Apollo15_PanCam_ClrShade_28N307E_3mp) @@ -44,9 +50,9 @@ asset.export("Apollo15_PanCam_ClrShade_28N307E_3mp", treks_Apollo15_PanCam_ClrSh asset.export("Apollo15_PanCam_ClrShade_19S129E_5mp", treks_Apollo15_PanCam_ClrShade_19S129E_5mp) + asset.meta = { - Name = [[NASA Treks Layers for Moon Apollo_15_Pan_Cam_DEM], - Version = "1.0", + Name = [[NASA Treks Layers for Moon Apollo_15_Pan_Cam_DEM]], Author = "NASA/Treks", URL = "https://trek.nasa.gov/moon", License = "NASA/Treks", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/Apollo_15_Pan_Cam_Image_Mosaic.asset b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/Apollo_15_Pan_Cam_Image_Mosaic.asset index a85f90fcb7..b5940572c1 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/Apollo_15_Pan_Cam_Image_Mosaic.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/Apollo_15_Pan_Cam_Image_Mosaic.asset @@ -6,27 +6,33 @@ local globeIdentifier = asset.require("scene/solarsystem//planets/earth/moon/moon").Moon.Identifier + + local treks_Apollo15_PanCam_Mosaic_25N311E_150cmp = { Identifier = "Apollo15_PanCam_Mosaic_25N311E_150cmp", Name = [[Apollo 15 Pan Cam Image Mosaic, Aristarchus Plateau 1]], - FilePath = asset.localResource("Apollo_15_Pan_Cam_Image_Mosaic/Aristarchus_Plateau_1.vrt"), + ZIndex = 50, + FilePath = asset.resource("Apollo_15_Pan_Cam_Image_Mosaic/Aristarchus_Plateau_1.vrt"), Description = [[]] } local treks_Apollo15_PanCam_Mosaic_28N307E_1mp = { Identifier = "Apollo15_PanCam_Mosaic_28N307E_1mp", Name = [[Apollo 15 Pan Cam Image Mosaic, Aristarchus Plateau 2]], - FilePath = asset.localResource("Apollo_15_Pan_Cam_Image_Mosaic/Aristarchus_Plateau_2.vrt"), + ZIndex = 50, + FilePath = asset.resource("Apollo_15_Pan_Cam_Image_Mosaic/Aristarchus_Plateau_2.vrt"), Description = [[]] } local treks_Apollo15_PanCam_Mosaic_19S129E_2mp = { Identifier = "Apollo15_PanCam_Mosaic_19S129E_2mp", Name = [[Apollo 15 Pan Cam Image Mosaic, Tsiolkovskiy Crater]], - FilePath = asset.localResource("Apollo_15_Pan_Cam_Image_Mosaic/Tsiolkovskiy_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("Apollo_15_Pan_Cam_Image_Mosaic/Tsiolkovskiy_Crater.vrt"), Description = [[]] } + asset.onInitialize(function() openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_Apollo15_PanCam_Mosaic_25N311E_150cmp) openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_Apollo15_PanCam_Mosaic_28N307E_1mp) @@ -44,9 +50,9 @@ asset.export("Apollo15_PanCam_Mosaic_28N307E_1mp", treks_Apollo15_PanCam_Mosaic_ asset.export("Apollo15_PanCam_Mosaic_19S129E_2mp", treks_Apollo15_PanCam_Mosaic_19S129E_2mp) + asset.meta = { - Name = [[NASA Treks Layers for Moon Apollo_15_Pan_Cam_Image_Mosaic], - Version = "1.0", + Name = [[NASA Treks Layers for Moon Apollo_15_Pan_Cam_Image_Mosaic]], Author = "NASA/Treks", URL = "https://trek.nasa.gov/moon", License = "NASA/Treks", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/Apollo_16_Metric_Cam_DEM.asset b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/Apollo_16_Metric_Cam_DEM.asset index fb5b11d029..9d74660154 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/Apollo_16_Metric_Cam_DEM.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/Apollo_16_Metric_Cam_DEM.asset @@ -6,27 +6,33 @@ local globeIdentifier = asset.require("scene/solarsystem//planets/earth/moon/moon").Moon.Identifier + + local treks_Apollo16_MetricCam_ClrConf_Global_1024ppd = { Identifier = "Apollo16_MetricCam_ClrConf_Global_1024ppd", Name = [[Apollo 16 Metric Cam DEM, Colorized Confidence]], - FilePath = asset.localResource("Apollo_16_Metric_Cam_DEM/Colorized_Confidence.vrt"), + ZIndex = 50, + FilePath = asset.resource("Apollo_16_Metric_Cam_DEM/Colorized_Confidence.vrt"), Description = [[]] } local treks_Apollo16_MetricCam_Gray_Global_1024ppd = { Identifier = "Apollo16_MetricCam_Gray_Global_1024ppd", Name = [[Apollo 16 Metric Cam DEM, Grayscale]], - FilePath = asset.localResource("Apollo_16_Metric_Cam_DEM/Grayscale.vrt"), + ZIndex = 50, + FilePath = asset.resource("Apollo_16_Metric_Cam_DEM/Grayscale.vrt"), Description = [[]] } local treks_Apollo16_MetricCam_Shade_Global_1024ppd = { Identifier = "Apollo16_MetricCam_Shade_Global_1024ppd", Name = [[Apollo 16 Metric Cam DEM, Hillshade]], - FilePath = asset.localResource("Apollo_16_Metric_Cam_DEM/Hillshade.vrt"), + ZIndex = 50, + FilePath = asset.resource("Apollo_16_Metric_Cam_DEM/Hillshade.vrt"), Description = [[]] } + asset.onInitialize(function() openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_Apollo16_MetricCam_ClrConf_Global_1024ppd) openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_Apollo16_MetricCam_Gray_Global_1024ppd) @@ -44,9 +50,9 @@ asset.export("Apollo16_MetricCam_Gray_Global_1024ppd", treks_Apollo16_MetricCam_ asset.export("Apollo16_MetricCam_Shade_Global_1024ppd", treks_Apollo16_MetricCam_Shade_Global_1024ppd) + asset.meta = { - Name = [[NASA Treks Layers for Moon Apollo_16_Metric_Cam_DEM], - Version = "1.0", + Name = [[NASA Treks Layers for Moon Apollo_16_Metric_Cam_DEM]], Author = "NASA/Treks", URL = "https://trek.nasa.gov/moon", License = "NASA/Treks", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/Apollo_17_Metric_Cam_DEM.asset b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/Apollo_17_Metric_Cam_DEM.asset index 2bf7517b6e..e517f41b13 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/Apollo_17_Metric_Cam_DEM.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/Apollo_17_Metric_Cam_DEM.asset @@ -6,20 +6,25 @@ local globeIdentifier = asset.require("scene/solarsystem//planets/earth/moon/moon").Moon.Identifier + + local treks_Apollo17_MetricCam_ClrShade_Global_1024ppd = { Identifier = "Apollo17_MetricCam_ClrShade_Global_1024ppd", Name = [[Apollo 17 Metric Cam DEM, ColorHillshade]], - FilePath = asset.localResource("Apollo_17_Metric_Cam_DEM/ColorHillshade.vrt"), + ZIndex = 50, + FilePath = asset.resource("Apollo_17_Metric_Cam_DEM/ColorHillshade.vrt"), Description = [[]] } local treks_Apollo17_MetricCam_Gray_Global_1024ppd = { Identifier = "Apollo17_MetricCam_Gray_Global_1024ppd", Name = [[Apollo 17 Metric Cam DEM, Grayscale]], - FilePath = asset.localResource("Apollo_17_Metric_Cam_DEM/Grayscale.vrt"), + ZIndex = 50, + FilePath = asset.resource("Apollo_17_Metric_Cam_DEM/Grayscale.vrt"), Description = [[]] } + asset.onInitialize(function() openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_Apollo17_MetricCam_ClrShade_Global_1024ppd) openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_Apollo17_MetricCam_Gray_Global_1024ppd) @@ -34,9 +39,9 @@ asset.export("Apollo17_MetricCam_ClrShade_Global_1024ppd", treks_Apollo17_Metric asset.export("Apollo17_MetricCam_Gray_Global_1024ppd", treks_Apollo17_MetricCam_Gray_Global_1024ppd) + asset.meta = { Name = [[NASA Treks Layers for Moon Apollo_17_Metric_Cam_DEM], - Version = "1.0", Author = "NASA/Treks", URL = "https://trek.nasa.gov/moon", License = "NASA/Treks", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/Apollo_Zone_Metric_Cam.asset b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/Apollo_Zone_Metric_Cam.asset index 0999b62972..8d456e27ad 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/Apollo_Zone_Metric_Cam.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/Apollo_Zone_Metric_Cam.asset @@ -6,13 +6,17 @@ local globeIdentifier = asset.require("scene/solarsystem//planets/earth/moon/moon").Moon.Identifier + + local treks_ApolloZone_MetricCam_Shade_Global_1024ppd = { Identifier = "ApolloZone_MetricCam_Shade_Global_1024ppd", Name = [[Apollo Zone Metric Cam, Hillshade]], - FilePath = asset.localResource("Apollo_Zone_Metric_Cam/Hillshade.vrt"), + ZIndex = 50, + FilePath = asset.resource("Apollo_Zone_Metric_Cam/Hillshade.vrt"), Description = [[]] } + asset.onInitialize(function() openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_ApolloZone_MetricCam_Shade_Global_1024ppd) end) @@ -24,9 +28,9 @@ end) asset.export("ApolloZone_MetricCam_Shade_Global_1024ppd", treks_ApolloZone_MetricCam_Shade_Global_1024ppd) + asset.meta = { - Name = [[NASA Treks Layers for Moon Apollo_Zone_Metric_Cam], - Version = "1.0", + Name = [[NASA Treks Layers for Moon Apollo_Zone_Metric_Cam]], Author = "NASA/Treks", URL = "https://trek.nasa.gov/moon", License = "NASA/Treks", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/Apollo_Zone_Metric_Cam_DEM.asset b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/Apollo_Zone_Metric_Cam_DEM.asset index bd9c029f1e..59fe56c6b0 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/Apollo_Zone_Metric_Cam_DEM.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/Apollo_Zone_Metric_Cam_DEM.asset @@ -6,13 +6,17 @@ local globeIdentifier = asset.require("scene/solarsystem//planets/earth/moon/moon").Moon.Identifier + + local treks_ApolloZone_MetricCam_ClrShade_Global_1024ppd = { Identifier = "ApolloZone_MetricCam_ClrShade_Global_1024ppd", Name = [[Apollo Zone Metric Cam DEM, ColorHillshade]], - FilePath = asset.localResource("Apollo_Zone_Metric_Cam_DEM/ColorHillshade.vrt"), + ZIndex = 50, + FilePath = asset.resource("Apollo_Zone_Metric_Cam_DEM/ColorHillshade.vrt"), Description = [[]] } + asset.onInitialize(function() openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_ApolloZone_MetricCam_ClrShade_Global_1024ppd) end) @@ -24,9 +28,9 @@ end) asset.export("ApolloZone_MetricCam_ClrShade_Global_1024ppd", treks_ApolloZone_MetricCam_ClrShade_Global_1024ppd) + asset.meta = { - Name = [[NASA Treks Layers for Moon Apollo_Zone_Metric_Cam_DEM], - Version = "1.0", + Name = [[NASA Treks Layers for Moon Apollo_Zone_Metric_Cam_DEM]], Author = "NASA/Treks", URL = "https://trek.nasa.gov/moon", License = "NASA/Treks", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/Global.asset b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/Global.asset index 382f4693db..123fc56510 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/Global.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/Global.asset @@ -6,122 +6,141 @@ local globeIdentifier = asset.require("scene/solarsystem//planets/earth/moon/moon").Moon.Identifier + + local treks_Apollo15_MetricCam_Mosaic_Global_4096ppd = { Identifier = "Apollo15_MetricCam_Mosaic_Global_4096ppd", Name = [[Apollo 15 Metric Cam Image Mosaic]], - FilePath = asset.localResource("Global/Apollo_15_Metric_Cam_Image_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("Global/Apollo_15_Metric_Cam_Image_Mosaic.vrt"), Description = [[]] } local treks_Apollo17_MetricCam_Mosaic_Global_3033ppd = { Identifier = "Apollo17_MetricCam_Mosaic_Global_3033ppd", Name = [[Apollo 17 Metric Cam Image Mosaic]], - FilePath = asset.localResource("Global/Apollo_17_Metric_Cam_Image_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("Global/Apollo_17_Metric_Cam_Image_Mosaic.vrt"), Description = [[]] } local treks_ApolloZone_MetricCam_Mosaic_Global_3033ppd = { Identifier = "ApolloZone_MetricCam_Mosaic_Global_3033ppd", Name = [[Apollo Zone Metric Cam Image Mosaic]], - FilePath = asset.localResource("Global/Apollo_Zone_Metric_Cam_Image_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("Global/Apollo_Zone_Metric_Cam_Image_Mosaic.vrt"), Description = [[]] } local treks_Clem_UVVIS_FeO_Clr_Global_152ppd = { Identifier = "Clem_UVVIS_FeO_Clr_Global_152ppd", Name = [[Clementine UVVIS FeO Weight Percent]], - FilePath = asset.localResource("Global/Clementine_UVVIS_FeO_Weight_Percent.vrt"), + ZIndex = 50, + FilePath = asset.resource("Global/Clementine_UVVIS_FeO_Weight_Percent.vrt"), Description = [[]] } local treks_Clem_UVVIS_OpticalMaturity_Gray_Global_152ppd = { Identifier = "Clem_UVVIS_OpticalMaturity_Gray_Global_152ppd", Name = [[Clementine UVVIS Optical Maturity]], - FilePath = asset.localResource("Global/Clementine_UVVIS_Optical_Maturity.vrt"), + ZIndex = 50, + FilePath = asset.resource("Global/Clementine_UVVIS_Optical_Maturity.vrt"), Description = [[]] } local treks_Clem_UVVIS_TiO2_Clr_Global_152ppd = { Identifier = "Clem_UVVIS_TiO2_Clr_Global_152ppd", Name = [[Clementine UVVIS TiO2 Weight Percent]], - FilePath = asset.localResource("Global/Clementine_UVVIS_TiO2_Weight_Percent.vrt"), + ZIndex = 50, + FilePath = asset.resource("Global/Clementine_UVVIS_TiO2_Weight_Percent.vrt"), Description = [[]] } local treks_Kaguya_TCortho_Mosaic_Global_4096ppd = { Identifier = "Kaguya_TCortho_Mosaic_Global_4096ppd", Name = [[Kaguya TC Ortho Mosaic]], - FilePath = asset.localResource("Global/Kaguya_TC_Ortho_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("Global/Kaguya_TC_Ortho_Mosaic.vrt"), Description = [[]] } local treks_LP_NS_H_Clr_Global_2ppd = { Identifier = "LP_NS_H_Clr_Global_2ppd", Name = [[LP NS H Abundance]], - FilePath = asset.localResource("Global/LP_NS_H_Abundance.vrt"), + ZIndex = 50, + FilePath = asset.resource("Global/LP_NS_H_Abundance.vrt"), Description = [[]] } local treks_LRO_Diviner_CF_NoFill_Global_8ppd = { Identifier = "LRO_Diviner_CF_NoFill_Global_8ppd", Name = [[LRO Diviner CF Mosaic]], - FilePath = asset.localResource("Global/LRO_Diviner_CF_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("Global/LRO_Diviner_CF_Mosaic.vrt"), Description = [[]] } local treks_LRO_WAC_Mosaic_Global_303ppd = { Identifier = "LRO_WAC_Mosaic_Global_303ppd", Name = [[LRO LROC WAC Image Mosaic]], - FilePath = asset.localResource("Global/LRO_LROC_WAC_Image_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("Global/LRO_LROC_WAC_Image_Mosaic.vrt"), Description = [[]] } local treks_LRO_MiniRF_S1_Gray_Global_128ppd = { Identifier = "LRO_MiniRF_S1_Gray_Global_128ppd", Name = [[LRO Mini-RF First Stokes Parameter]], - FilePath = asset.localResource("Global/LRO_Mini-RF_First_Stokes_Parameter.vrt"), + ZIndex = 50, + FilePath = asset.resource("Global/LRO_Mini-RF_First_Stokes_Parameter.vrt"), Description = [[]] } local treks_LRO_WAC_Mosaic_Global_303ppd_v02 = { Identifier = "LRO_WAC_Mosaic_Global_303ppd_v02", Name = [[LRO WAC Mosaic v2]], - FilePath = asset.localResource("Global/LRO_WAC_Mosaic_v2.vrt"), + ZIndex = 50, + FilePath = asset.resource("Global/LRO_WAC_Mosaic_v2.vrt"), Description = [[]] } local treks_SchrodingerCraterMareUnit_50cmV10eq = { Identifier = "SchrodingerCraterMareUnit_50cmV10eq", Name = [[LROC NAC Uncontrolled Mosaic of Mare Unit in Schrodinger Crater]], - FilePath = asset.localResource("Global/LROC_NAC_Uncontrolled_Mosaic_of_Mare_Unit_in_Schrodinger_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("Global/LROC_NAC_Uncontrolled_Mosaic_of_Mare_Unit_in_Schrodinger_Crater.vrt"), Description = [[This is a 50cm/px uncontrolled visible image mosaic generated using Lunar Reconnaissance Orbiter Camera (LROC) Narrow Angle Camera (NAC) images from the Lunar Reconnaissance Orbiter mission. Each NAC image was registered horizontally to the LRO's Lunar Orbiter Laser Altimeter (LOLA) global DEM, and then mosaicked together and color balanced. ]] } local treks_SchrodingerCraterMassif_50cmV10eq = { Identifier = "SchrodingerCraterMassif_50cmV10eq", Name = [[LROC NAC Uncontrolled Mosaic of Massif in Schrodinger Crater]], - FilePath = asset.localResource("Global/LROC_NAC_Uncontrolled_Mosaic_of_Massif_in_Schrodinger_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("Global/LROC_NAC_Uncontrolled_Mosaic_of_Massif_in_Schrodinger_Crater.vrt"), Description = [[This is a 50cm/px uncontrolled visible image mosaic generated using Lunar Reconnaissance Orbiter Camera (LROC) Narrow Angle Camera (NAC) images from the Lunar Reconnaissance Orbiter mission. Each NAC image was registered horizontally to the LRO's Lunar Orbiter Laser Altimeter (LOLA) global DEM, and then mosaicked together and color balanced. ]] } local treks_LRO_LOLAKaguya_ClrHillshade_60N60S_512ppd = { Identifier = "LRO_LOLAKaguya_ClrHillshade_60N60S_512ppd", Name = [[LRO LOLA and Kaguya TC Color Hillshade 512ppd]], - FilePath = asset.localResource("Global/LRO_LOLA_and_Kaguya_TC_Color_Hillshade_512ppd.vrt"), + ZIndex = 50, + FilePath = asset.resource("Global/LRO_LOLA_and_Kaguya_TC_Color_Hillshade_512ppd.vrt"), Description = [[This is a colorized shaded-relief representation of the Lunar surface generated from the LOLA and Kaguya merged DEM product. The LOLA and Kaguya Teams have created an improved lunar digital elevation model (DEM) covering latitudes within ±60°, at a horizontal resolution of 512 pixels per degree (∼59 m at the equator) and a typical vertical accuracy ∼3 to 4 m. This DEM is constructed from ∼4.5×109 geodetically-accurate topographic heights from the Lunar Orbiter Laser Altimeter (LOLA) onboard the Lunar Reconnaissance Orbiter, to which we co-registered 43,200 stereo-derived DEMs (each 1×1 degree) from the SELENE Terrain Camera (TC) (∼1010 pixels total). After co-registration, approximately 90% of the TC DEMs show root-mean-square vertical residuals with the LOLA data of <5 m compared to ∼50% prior to co-registration. We use the co-registered TC data to estimate and correct orbital and pointing geolocation errors from the LOLA altimetric profiles (typically amounting to <10 m horizontally and <1 m vertically). By combining both co-registered datasets, we obtain a near-global DEM with high geodetic accuracy, and without the need for surface interpolation. We evaluate the resulting LOLA + TC merged DEM (designated as “SLDEM2015”) with particular attention to quantifying seams and crossover errors. The legend coveys the mapping colors to elevation values (meters) and map values are referred to a radius of 1737400 m.]] } local treks_LRO_LOLAKaguya_Hillshade_60N60S_512ppd = { Identifier = "LRO_LOLAKaguya_Hillshade_60N60S_512ppd", Name = [[LRO LOLA and Kaguya TC Hillshade 512ppd]], - FilePath = asset.localResource("Global/LRO_LOLA_and_Kaguya_TC_Hillshade_512ppd.vrt"), + ZIndex = 50, + FilePath = asset.resource("Global/LRO_LOLA_and_Kaguya_TC_Hillshade_512ppd.vrt"), Description = [[This is a shaded-relief representation of the Lunar surface generated from the LOLA and Kaguya merged DEM product. The LOLA and Kaguya Teams have created an improved lunar digital elevation model (DEM) covering latitudes within ±60°, at a horizontal resolution of 512 pixels per degree (∼59 m at the equator) and a typical vertical accuracy ∼3 to 4 m. This DEM is constructed from ∼4.5×109 geodetically-accurate topographic heights from the Lunar Orbiter Laser Altimeter (LOLA) onboard the Lunar Reconnaissance Orbiter, to which we co-registered 43,200 stereo-derived DEMs (each 1×1 degree) from the SELENE Terrain Camera (TC) (∼1010 pixels total). After co-registration, approximately 90% of the TC DEMs show root-mean-square vertical residuals with the LOLA data of <5 m compared to ∼50% prior to co-registration. We use the co-registered TC data to estimate and correct orbital and pointing geolocation errors from the LOLA altimetric profiles (typically amounting to <10 m horizontally and <1 m vertically). By combining both co-registered datasets, we obtain a near-global DEM with high geodetic accuracy, and without the need for surface interpolation. We evaluate the resulting LOLA + TC merged DEM (designated as “SLDEM2015”) with particular attention to quantifying seams and crossover errors. Elevation values are in meters and map values are referred to a radius of 1737400 m.]] } local treks_Lunar_Clementine_UVVIS_Warp_ClrRatio_Global_200m = { Identifier = "Lunar_Clementine_UVVIS_Warp_ClrRatio_Global_200m", Name = [[Clementine UVVIS Warped Color Ratio]], - FilePath = asset.localResource("Global/Clementine_UVVIS_Warped_Color_Ratio.vrt"), + ZIndex = 50, + FilePath = asset.resource("Global/Clementine_UVVIS_Warped_Color_Ratio.vrt"), Description = [[This base represents the Clementine Ultraviolet/Visible (UVVIS) warped color-ratio mineral map. This was generated from the UVVIS mosaics using three spectral filters (415, 750, and 1000 nm) and which were previously warped (spatially adjusted) to the ULCN2005 control network. The mosaic is a composite in which the ratio of the 750/415nm bands is used for the red-channel brightness, 415/750nm for the blue channel, and the 750/1000nm ratio controls the green channel. Resolution of this mosaic is 200 meters per pixel (m). Color interpretations: @@ -134,17 +153,20 @@ For more information on how the color ratio was derived, please see Lucy et al., local treks_LRO_LOLA_Illumination_NPole65N_240m_EQ = { Identifier = "LRO_LOLA_Illumination_NPole65N_240m_EQ", Name = [[LOLA Permanently Shadowed Regions Northpole 240m]], - FilePath = asset.localResource("Global/LOLA_Permanently_Shadowed_Regions_Northpole_240m.vrt"), + ZIndex = 50, + FilePath = asset.resource("Global/LOLA_Permanently_Shadowed_Regions_Northpole_240m.vrt"), Description = [[This data product is a map of the permanently shadowed regions (PSRs) in the lunar North Pole. The map resolution is 240m/pix by 240m/pix, true at the pole in polar stereographic (spherical) projection. The calculations are based on the LOLA elevation map LDEM_75N_240M and are described in. The values are binary, indicating whether a pixel is in permanent shadow (1) or not (0, NoDATA).]] } local treks_LRO_LOLA_Illumination_SPole65S_240m_EQ = { Identifier = "LRO_LOLA_Illumination_SPole65S_240m_EQ", Name = [[LOLA Permanently Shadowed Regions Southpole 240m]], - FilePath = asset.localResource("Global/LOLA_Permanently_Shadowed_Regions_Southpole_240m.vrt"), + ZIndex = 50, + FilePath = asset.resource("Global/LOLA_Permanently_Shadowed_Regions_Southpole_240m.vrt"), Description = [[This data product is a map of the permanently shadowed regions (PSRs) in the lunar South Pole. The map resolution is 240m/pix by 240m/pix, true at the pole in polar stereographic (spherical) projection. The calculations are based on the LOLA elevation map LDEM_75S_240M and are described in. The values are binary, indicating whether a pixel is in permanent shadow (1) or not (0, NoDATA).]] } + asset.onInitialize(function() openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_Apollo15_MetricCam_Mosaic_Global_4096ppd) openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_Apollo17_MetricCam_Mosaic_Global_3033ppd) @@ -210,9 +232,9 @@ asset.export("LRO_LOLA_Illumination_NPole65N_240m_EQ", treks_LRO_LOLA_Illuminati asset.export("LRO_LOLA_Illumination_SPole65S_240m_EQ", treks_LRO_LOLA_Illumination_SPole65S_240m_EQ) + asset.meta = { - Name = [[NASA Treks Layers for Moon Global], - Version = "1.0", + Name = [[NASA Treks Layers for Moon Global]], Author = "NASA/Treks", URL = "https://trek.nasa.gov/moon", License = "NASA/Treks", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/Kaguya_LGM2011_Freeair_Gravity.asset b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/Kaguya_LGM2011_Freeair_Gravity.asset index 2042128903..a888bd697f 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/Kaguya_LGM2011_Freeair_Gravity.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/Kaguya_LGM2011_Freeair_Gravity.asset @@ -6,20 +6,25 @@ local globeIdentifier = asset.require("scene/solarsystem//planets/earth/moon/moon").Moon.Identifier + + local treks_Kaguya_LGM2011_FreeairGravity_Colorized_Global_mgal3m_20ppd = { Identifier = "Kaguya_LGM2011_FreeairGravity_Colorized_Global_mgal3m_20ppd", Name = [[Kaguya LGM2011 Freeair Gravity, Colorized]], - FilePath = asset.localResource("Kaguya_LGM2011_Freeair_Gravity/Colorized.vrt"), + ZIndex = 50, + FilePath = asset.resource("Kaguya_LGM2011_Freeair_Gravity/Colorized.vrt"), Description = [[]] } local treks_Kaguya_LGM2011_FreeairGravity_Gray_Global_mgal3m_20ppd = { Identifier = "Kaguya_LGM2011_FreeairGravity_Gray_Global_mgal3m_20ppd", Name = [[Kaguya LGM2011 Freeair Gravity, Greyscale]], - FilePath = asset.localResource("Kaguya_LGM2011_Freeair_Gravity/Greyscale.vrt"), + ZIndex = 50, + FilePath = asset.resource("Kaguya_LGM2011_Freeair_Gravity/Greyscale.vrt"), Description = [[]] } + asset.onInitialize(function() openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_Kaguya_LGM2011_FreeairGravity_Colorized_Global_mgal3m_20ppd) openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_Kaguya_LGM2011_FreeairGravity_Gray_Global_mgal3m_20ppd) @@ -34,9 +39,9 @@ asset.export("Kaguya_LGM2011_FreeairGravity_Colorized_Global_mgal3m_20ppd", trek asset.export("Kaguya_LGM2011_FreeairGravity_Gray_Global_mgal3m_20ppd", treks_Kaguya_LGM2011_FreeairGravity_Gray_Global_mgal3m_20ppd) + asset.meta = { - Name = [[NASA Treks Layers for Moon Kaguya_LGM2011_Freeair_Gravity], - Version = "1.0", + Name = [[NASA Treks Layers for Moon Kaguya_LGM2011_Freeair_Gravity]], Author = "NASA/Treks", URL = "https://trek.nasa.gov/moon", License = "NASA/Treks", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/Kaguya_LGM2011_Surface_Gravity.asset b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/Kaguya_LGM2011_Surface_Gravity.asset index 0fa16b1f6c..8cfd6f674e 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/Kaguya_LGM2011_Surface_Gravity.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/Kaguya_LGM2011_Surface_Gravity.asset @@ -6,20 +6,25 @@ local globeIdentifier = asset.require("scene/solarsystem//planets/earth/moon/moon").Moon.Identifier + + local treks_Kaguya_LGM2011_SurfaceGravity_Colorized_Global_mgal3m_20ppd = { Identifier = "Kaguya_LGM2011_SurfaceGravity_Colorized_Global_mgal3m_20ppd", Name = [[Kaguya LGM2011 Surface Gravity, Colorized]], - FilePath = asset.localResource("Kaguya_LGM2011_Surface_Gravity/Colorized.vrt"), + ZIndex = 50, + FilePath = asset.resource("Kaguya_LGM2011_Surface_Gravity/Colorized.vrt"), Description = [[]] } local treks_Kaguya_LGM2011_SurfaceGravity_Gray_Global_mgal3m_20ppd = { Identifier = "Kaguya_LGM2011_SurfaceGravity_Gray_Global_mgal3m_20ppd", Name = [[Kaguya LGM2011 Surface Gravity, Greyscale]], - FilePath = asset.localResource("Kaguya_LGM2011_Surface_Gravity/Greyscale.vrt"), + ZIndex = 50, + FilePath = asset.resource("Kaguya_LGM2011_Surface_Gravity/Greyscale.vrt"), Description = [[]] } + asset.onInitialize(function() openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_Kaguya_LGM2011_SurfaceGravity_Colorized_Global_mgal3m_20ppd) openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_Kaguya_LGM2011_SurfaceGravity_Gray_Global_mgal3m_20ppd) @@ -34,9 +39,9 @@ asset.export("Kaguya_LGM2011_SurfaceGravity_Colorized_Global_mgal3m_20ppd", trek asset.export("Kaguya_LGM2011_SurfaceGravity_Gray_Global_mgal3m_20ppd", treks_Kaguya_LGM2011_SurfaceGravity_Gray_Global_mgal3m_20ppd) + asset.meta = { - Name = [[NASA Treks Layers for Moon Kaguya_LGM2011_Surface_Gravity], - Version = "1.0", + Name = [[NASA Treks Layers for Moon Kaguya_LGM2011_Surface_Gravity]], Author = "NASA/Treks", URL = "https://trek.nasa.gov/moon", License = "NASA/Treks", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LOLA_Roughness_16ppd.asset b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LOLA_Roughness_16ppd.asset index e78e82d395..af32c41ece 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LOLA_Roughness_16ppd.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LOLA_Roughness_16ppd.asset @@ -6,13 +6,17 @@ local globeIdentifier = asset.require("scene/solarsystem//planets/earth/moon/moon").Moon.Identifier + + local treks_LRO_LOLA_ClrRoughness_Global_16ppd = { Identifier = "LRO_LOLA_ClrRoughness_Global_16ppd", Name = [[LOLA Roughness 16ppd, Colorized]], - FilePath = asset.localResource("LOLA_Roughness_16ppd/Colorized.vrt"), + ZIndex = 50, + FilePath = asset.resource("LOLA_Roughness_16ppd/Colorized.vrt"), Description = [[]] } + asset.onInitialize(function() openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_LRO_LOLA_ClrRoughness_Global_16ppd) end) @@ -24,9 +28,9 @@ end) asset.export("LRO_LOLA_ClrRoughness_Global_16ppd", treks_LRO_LOLA_ClrRoughness_Global_16ppd) + asset.meta = { - Name = [[NASA Treks Layers for Moon LOLA_Roughness_16ppd], - Version = "1.0", + Name = [[NASA Treks Layers for Moon LOLA_Roughness_16ppd]], Author = "NASA/Treks", URL = "https://trek.nasa.gov/moon", License = "NASA/Treks", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LOLA_Slope_16ppd.asset b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LOLA_Slope_16ppd.asset index 341af32a88..4098fe058a 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LOLA_Slope_16ppd.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LOLA_Slope_16ppd.asset @@ -6,13 +6,17 @@ local globeIdentifier = asset.require("scene/solarsystem//planets/earth/moon/moon").Moon.Identifier + + local treks_LRO_LOLA_ClrSlope_Global_16ppd = { Identifier = "LRO_LOLA_ClrSlope_Global_16ppd", Name = [[LOLA Slope 16ppd, Colorized]], - FilePath = asset.localResource("LOLA_Slope_16ppd/Colorized.vrt"), + ZIndex = 50, + FilePath = asset.resource("LOLA_Slope_16ppd/Colorized.vrt"), Description = [[]] } + asset.onInitialize(function() openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_LRO_LOLA_ClrSlope_Global_16ppd) end) @@ -24,9 +28,9 @@ end) asset.export("LRO_LOLA_ClrSlope_Global_16ppd", treks_LRO_LOLA_ClrSlope_Global_16ppd) + asset.meta = { - Name = [[NASA Treks Layers for Moon LOLA_Slope_16ppd], - Version = "1.0", + Name = [[NASA Treks Layers for Moon LOLA_Slope_16ppd]], Author = "NASA/Treks", URL = "https://trek.nasa.gov/moon", License = "NASA/Treks", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LOLA_Slope_Northpole_120m.asset b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LOLA_Slope_Northpole_120m.asset index 5404d41424..e773fca8c6 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LOLA_Slope_Northpole_120m.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LOLA_Slope_Northpole_120m.asset @@ -6,13 +6,17 @@ local globeIdentifier = asset.require("scene/solarsystem//planets/earth/moon/moon").Moon.Identifier + + local treks_LRO_LOLA_ClrSlope_NPole75N_120m_EQ = { Identifier = "LRO_LOLA_ClrSlope_NPole75N_120m_EQ", Name = [[LOLA Slope Northpole 120m, Colorized]], - FilePath = asset.localResource("LOLA_Slope_Northpole_120m/Colorized.vrt"), + ZIndex = 50, + FilePath = asset.resource("LOLA_Slope_Northpole_120m/Colorized.vrt"), Description = [[This is a colorized map of the original north polar surface slope of the Moon at a resolution of 16 m/pix by 16 m/pix, based on altimetry data acquired by the LOLA instrument. The LOLA Laser 1 and 2 data through mission phase LRO_SM_17 are the source for this data set. The bi-directional slope was calculated from a plane fit to three successive laser shots requiring n=5 to 15 profile returns. Depending on orbital velocity, probability of detection, and spacecraft altitude, the slope baseline may vary from 30 to 120 meters.]] } + asset.onInitialize(function() openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_LRO_LOLA_ClrSlope_NPole75N_120m_EQ) end) @@ -24,9 +28,9 @@ end) asset.export("LRO_LOLA_ClrSlope_NPole75N_120m_EQ", treks_LRO_LOLA_ClrSlope_NPole75N_120m_EQ) + asset.meta = { - Name = [[NASA Treks Layers for Moon LOLA_Slope_Northpole_120m], - Version = "1.0", + Name = [[NASA Treks Layers for Moon LOLA_Slope_Northpole_120m]], Author = "NASA/Treks", URL = "https://trek.nasa.gov/moon", License = "NASA/Treks", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LOLA_Slope_Southpole_120m.asset b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LOLA_Slope_Southpole_120m.asset index 1087cf1b52..61d77fc204 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LOLA_Slope_Southpole_120m.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LOLA_Slope_Southpole_120m.asset @@ -6,13 +6,17 @@ local globeIdentifier = asset.require("scene/solarsystem//planets/earth/moon/moon").Moon.Identifier + + local treks_LRO_LOLA_ClrSlope_SPole75S_120m_EQ = { Identifier = "LRO_LOLA_ClrSlope_SPole75S_120m_EQ", Name = [[LOLA Slope Southpole 120m, Colorized]], - FilePath = asset.localResource("LOLA_Slope_Southpole_120m/Colorized.vrt"), + ZIndex = 50, + FilePath = asset.resource("LOLA_Slope_Southpole_120m/Colorized.vrt"), Description = [[This is a colorized map of the original south polar surface slope of the Moon at a resolution of 16 m/pix by 16 m/pix, based on altimetry data acquired by the LOLA instrument. The LOLA Laser 1 and 2 data through mission phase LRO_SM_17 are the source for this data set. The bi-directional slope was calculated from a plane fit to three successive laser shots requiring n=5 to 15 profile returns. Depending on orbital velocity, probability of detection, and spacecraft altitude, the slope baseline may vary from 30 to 120 meters.]] } + asset.onInitialize(function() openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_LRO_LOLA_ClrSlope_SPole75S_120m_EQ) end) @@ -24,9 +28,9 @@ end) asset.export("LRO_LOLA_ClrSlope_SPole75S_120m_EQ", treks_LRO_LOLA_ClrSlope_SPole75S_120m_EQ) + asset.meta = { - Name = [[NASA Treks Layers for Moon LOLA_Slope_Southpole_120m], - Version = "1.0", + Name = [[NASA Treks Layers for Moon LOLA_Slope_Southpole_120m]], Author = "NASA/Treks", URL = "https://trek.nasa.gov/moon", License = "NASA/Treks", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LOLA_and_TC_Stereo_DEM_Merge_512ppd.asset b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LOLA_and_TC_Stereo_DEM_Merge_512ppd.asset index fea4021887..087b865b46 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LOLA_and_TC_Stereo_DEM_Merge_512ppd.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LOLA_and_TC_Stereo_DEM_Merge_512ppd.asset @@ -6,13 +6,17 @@ local globeIdentifier = asset.require("scene/solarsystem//planets/earth/moon/moon").Moon.Identifier + + local treks_LRO_LrocKaguya_Shade_60N60S_512ppd = { Identifier = "LRO_LrocKaguya_Shade_60N60S_512ppd", Name = [[LOLA and TC Stereo DEM Merge 512ppd, Shade]], - FilePath = asset.localResource("LOLA_and_TC_Stereo_DEM_Merge_512ppd/Shade.vrt"), + ZIndex = 50, + FilePath = asset.resource("LOLA_and_TC_Stereo_DEM_Merge_512ppd/Shade.vrt"), Description = [[]] } + asset.onInitialize(function() openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_LRO_LrocKaguya_Shade_60N60S_512ppd) end) @@ -24,9 +28,9 @@ end) asset.export("LRO_LrocKaguya_Shade_60N60S_512ppd", treks_LRO_LrocKaguya_Shade_60N60S_512ppd) + asset.meta = { - Name = [[NASA Treks Layers for Moon LOLA_and_TC_Stereo_DEM_Merge_512ppd], - Version = "1.0", + Name = [[NASA Treks Layers for Moon LOLA_and_TC_Stereo_DEM_Merge_512ppd]], Author = "NASA/Treks", URL = "https://trek.nasa.gov/moon", License = "NASA/Treks", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LROC_NAC_Uncontrolled_Mosaic_of_Region_Inside_Schrodinger_Crater.asset b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LROC_NAC_Uncontrolled_Mosaic_of_Region_Inside_Schrodinger_Crater.asset index 9d6a545c91..0f5a316a3d 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LROC_NAC_Uncontrolled_Mosaic_of_Region_Inside_Schrodinger_Crater.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LROC_NAC_Uncontrolled_Mosaic_of_Region_Inside_Schrodinger_Crater.asset @@ -6,13 +6,17 @@ local globeIdentifier = asset.require("scene/solarsystem//planets/earth/moon/moon").Moon.Identifier + + local treks_SchrodingerMareNortheq = { Identifier = "SchrodingerMareNortheq", Name = [[LROC NAC Uncontrolled Mosaic of Region Inside Schrodinger Crater, 50cm/px]], - FilePath = asset.localResource("LROC_NAC_Uncontrolled_Mosaic_of_Region_Inside_Schrodinger_Crater/50cmpx.vrt"), + ZIndex = 50, + FilePath = asset.resource("LROC_NAC_Uncontrolled_Mosaic_of_Region_Inside_Schrodinger_Crater/50cmpx.vrt"), Description = [[This is a 50cm/px uncontrolled visible image mosaic generated using Lunar Reconnaissance Orbiter Camera (LROC) Narrow Angle Camera (NAC) images from the Lunar Reconnaissance Orbiter mission. Each NAC image was registered horizontally to the LRO's Lunar Orbiter Laser Altimeter (LOLA) global DEM, and then mosaicked together and color balanced.]] } + asset.onInitialize(function() openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_SchrodingerMareNortheq) end) @@ -24,9 +28,9 @@ end) asset.export("SchrodingerMareNortheq", treks_SchrodingerMareNortheq) + asset.meta = { - Name = [[NASA Treks Layers for Moon LROC_NAC_Uncontrolled_Mosaic_of_Region_Inside_Schrodinger_Crater], - Version = "1.0", + Name = [[NASA Treks Layers for Moon LROC_NAC_Uncontrolled_Mosaic_of_Region_Inside_Schrodinger_Crater]], Author = "NASA/Treks", URL = "https://trek.nasa.gov/moon", License = "NASA/Treks", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LROC_NAC_Uncontrolled_Mosaic_of_Schrodinger_Crater.asset b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LROC_NAC_Uncontrolled_Mosaic_of_Schrodinger_Crater.asset index 8dff440d2c..79c92db21d 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LROC_NAC_Uncontrolled_Mosaic_of_Schrodinger_Crater.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LROC_NAC_Uncontrolled_Mosaic_of_Schrodinger_Crater.asset @@ -6,13 +6,17 @@ local globeIdentifier = asset.require("scene/solarsystem//planets/earth/moon/moon").Moon.Identifier + + local treks_allSchrodinger_10mV10eq = { Identifier = "allSchrodinger_10mV10eq", Name = [[LROC NAC Uncontrolled Mosaic of Schrodinger Crater, 10m/px]], - FilePath = asset.localResource("LROC_NAC_Uncontrolled_Mosaic_of_Schrodinger_Crater/10mpx.vrt"), + ZIndex = 50, + FilePath = asset.resource("LROC_NAC_Uncontrolled_Mosaic_of_Schrodinger_Crater/10mpx.vrt"), Description = [[This is a 10m/px uncontrolled visible image mosaic generated using Lunar Reconnaissance Orbiter Camera (LROC) Narrow Angle Camera (NAC) images from the Lunar Reconnaissance Orbiter mission. Each NAC image was registered horizontally to the LRO's Lunar Orbiter Laser Altimeter (LOLA) global DEM, and then mosaicked together and color balanced.]] } + asset.onInitialize(function() openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_allSchrodinger_10mV10eq) end) @@ -24,9 +28,9 @@ end) asset.export("allSchrodinger_10mV10eq", treks_allSchrodinger_10mV10eq) + asset.meta = { - Name = [[NASA Treks Layers for Moon LROC_NAC_Uncontrolled_Mosaic_of_Schrodinger_Crater], - Version = "1.0", + Name = [[NASA Treks Layers for Moon LROC_NAC_Uncontrolled_Mosaic_of_Schrodinger_Crater]], Author = "NASA/Treks", URL = "https://trek.nasa.gov/moon", License = "NASA/Treks", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_Diviner_CF_Mosaic.asset b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_Diviner_CF_Mosaic.asset index 0a622dadbd..0ca5945888 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_Diviner_CF_Mosaic.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_Diviner_CF_Mosaic.asset @@ -6,13 +6,17 @@ local globeIdentifier = asset.require("scene/solarsystem//planets/earth/moon/moon").Moon.Identifier + + local treks_LRO_Diviner_CF_Filled_Global_8ppd = { Identifier = "LRO_Diviner_CF_Filled_Global_8ppd", Name = [[LRO Diviner CF Mosaic, Filled]], - FilePath = asset.localResource("LRO_Diviner_CF_Mosaic/Filled.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_Diviner_CF_Mosaic/Filled.vrt"), Description = [[]] } + asset.onInitialize(function() openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_LRO_Diviner_CF_Filled_Global_8ppd) end) @@ -24,9 +28,9 @@ end) asset.export("LRO_Diviner_CF_Filled_Global_8ppd", treks_LRO_Diviner_CF_Filled_Global_8ppd) + asset.meta = { - Name = [[NASA Treks Layers for Moon LRO_Diviner_CF_Mosaic], - Version = "1.0", + Name = [[NASA Treks Layers for Moon LRO_Diviner_CF_Mosaic]], Author = "NASA/Treks", URL = "https://trek.nasa.gov/moon", License = "NASA/Treks", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_Diviner_CF_Mosaic_128ppd.asset b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_Diviner_CF_Mosaic_128ppd.asset index 303f210ab2..5efd441828 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_Diviner_CF_Mosaic_128ppd.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_Diviner_CF_Mosaic_128ppd.asset @@ -6,13 +6,17 @@ local globeIdentifier = asset.require("scene/solarsystem//planets/earth/moon/moon").Moon.Identifier + + local treks_LRO_DIVINER_ClrCF_Global_128ppd = { Identifier = "LRO_DIVINER_ClrCF_Global_128ppd", Name = [[LRO Diviner CF Mosaic 128ppd, Colorized]], - FilePath = asset.localResource("LRO_Diviner_CF_Mosaic_128ppd/Colorized.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_Diviner_CF_Mosaic_128ppd/Colorized.vrt"), Description = [[]] } + asset.onInitialize(function() openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_LRO_DIVINER_ClrCF_Global_128ppd) end) @@ -24,9 +28,9 @@ end) asset.export("LRO_DIVINER_ClrCF_Global_128ppd", treks_LRO_DIVINER_ClrCF_Global_128ppd) + asset.meta = { - Name = [[NASA Treks Layers for Moon LRO_Diviner_CF_Mosaic_128ppd], - Version = "1.0", + Name = [[NASA Treks Layers for Moon LRO_Diviner_CF_Mosaic_128ppd]], Author = "NASA/Treks", URL = "https://trek.nasa.gov/moon", License = "NASA/Treks", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_Diviner_Surface_Temp_Avg.asset b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_Diviner_Surface_Temp_Avg.asset index 9d9c1c917d..e28d43ba39 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_Diviner_Surface_Temp_Avg.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_Diviner_Surface_Temp_Avg.asset @@ -6,13 +6,17 @@ local globeIdentifier = asset.require("scene/solarsystem//planets/earth/moon/moon").Moon.Identifier + + local treks_LRO_Diviner_ST_Avg_Clr_Global_32ppd = { Identifier = "LRO_Diviner_ST_Avg_Clr_Global_32ppd", Name = [[LRO Diviner Surface Temp Avg, Color]], - FilePath = asset.localResource("LRO_Diviner_Surface_Temp_Avg/Color.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_Diviner_Surface_Temp_Avg/Color.vrt"), Description = [[]] } + asset.onInitialize(function() openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_LRO_Diviner_ST_Avg_Clr_Global_32ppd) end) @@ -24,9 +28,9 @@ end) asset.export("LRO_Diviner_ST_Avg_Clr_Global_32ppd", treks_LRO_Diviner_ST_Avg_Clr_Global_32ppd) + asset.meta = { - Name = [[NASA Treks Layers for Moon LRO_Diviner_Surface_Temp_Avg], - Version = "1.0", + Name = [[NASA Treks Layers for Moon LRO_Diviner_Surface_Temp_Avg]], Author = "NASA/Treks", URL = "https://trek.nasa.gov/moon", License = "NASA/Treks", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_Diviner_Surface_Temp_Normal_Avg.asset b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_Diviner_Surface_Temp_Normal_Avg.asset index 65a8a1fc58..61ef22e1d4 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_Diviner_Surface_Temp_Normal_Avg.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_Diviner_Surface_Temp_Normal_Avg.asset @@ -6,13 +6,17 @@ local globeIdentifier = asset.require("scene/solarsystem//planets/earth/moon/moon").Moon.Identifier + + local treks_LRO_Diviner_STN_Avg_Clr_Global_32ppd = { Identifier = "LRO_Diviner_STN_Avg_Clr_Global_32ppd", Name = [[LRO Diviner Surface Temp Normal Avg, Color]], - FilePath = asset.localResource("LRO_Diviner_Surface_Temp_Normal_Avg/Color.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_Diviner_Surface_Temp_Normal_Avg/Color.vrt"), Description = [[]] } + asset.onInitialize(function() openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_LRO_Diviner_STN_Avg_Clr_Global_32ppd) end) @@ -24,9 +28,9 @@ end) asset.export("LRO_Diviner_STN_Avg_Clr_Global_32ppd", treks_LRO_Diviner_STN_Avg_Clr_Global_32ppd) + asset.meta = { - Name = [[NASA Treks Layers for Moon LRO_Diviner_Surface_Temp_Normal_Avg], - Version = "1.0", + Name = [[NASA Treks Layers for Moon LRO_Diviner_Surface_Temp_Normal_Avg]], Author = "NASA/Treks", URL = "https://trek.nasa.gov/moon", License = "NASA/Treks", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_Diviner_Surface_Temperature_Mosaic_128ppd.asset b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_Diviner_Surface_Temperature_Mosaic_128ppd.asset index fe69bd1bb0..52315d6b92 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_Diviner_Surface_Temperature_Mosaic_128ppd.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_Diviner_Surface_Temperature_Mosaic_128ppd.asset @@ -6,13 +6,17 @@ local globeIdentifier = asset.require("scene/solarsystem//planets/earth/moon/moon").Moon.Identifier + + local treks_LRO_DIVINER_ClrRockFreeSurfaceTemp_Global_128ppd = { Identifier = "LRO_DIVINER_ClrRockFreeSurfaceTemp_Global_128ppd", Name = [[LRO Diviner Surface Temperature Mosaic 128ppd, Colorized]], - FilePath = asset.localResource("LRO_Diviner_Surface_Temperature_Mosaic_128ppd/Colorized.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_Diviner_Surface_Temperature_Mosaic_128ppd/Colorized.vrt"), Description = [[]] } + asset.onInitialize(function() openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_LRO_DIVINER_ClrRockFreeSurfaceTemp_Global_128ppd) end) @@ -24,9 +28,9 @@ end) asset.export("LRO_DIVINER_ClrRockFreeSurfaceTemp_Global_128ppd", treks_LRO_DIVINER_ClrRockFreeSurfaceTemp_Global_128ppd) + asset.meta = { - Name = [[NASA Treks Layers for Moon LRO_Diviner_Surface_Temperature_Mosaic_128ppd], - Version = "1.0", + Name = [[NASA Treks Layers for Moon LRO_Diviner_Surface_Temperature_Mosaic_128ppd]], Author = "NASA/Treks", URL = "https://trek.nasa.gov/moon", License = "NASA/Treks", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_LOLA_DEM.asset b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_LOLA_DEM.asset index b55b87c24c..11a67102de 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_LOLA_DEM.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_LOLA_DEM.asset @@ -6,55 +6,65 @@ local globeIdentifier = asset.require("scene/solarsystem//planets/earth/moon/moon").Moon.Identifier + + local treks_LRO_LOLA_ClrShade_Global_128ppd_v04 = { Identifier = "LRO_LOLA_ClrShade_Global_128ppd_v04", Name = [[LRO LOLA DEM, ColorHillshade]], - FilePath = asset.localResource("LRO_LOLA_DEM/ColorHillshade.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LOLA_DEM/ColorHillshade.vrt"), Description = [[]] } local treks_LRO_LOLA_ClrShade_Global_256ppd_v06 = { Identifier = "LRO_LOLA_ClrShade_Global_256ppd_v06", Name = [[LRO LOLA DEM, ColorHillshade v6]], - FilePath = asset.localResource("LRO_LOLA_DEM/ColorHillshade_v6.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LOLA_DEM/ColorHillshade_v6.vrt"), Description = [[]] } local treks_LRO_LOLA_Coverage_Global_128ppd_v04 = { Identifier = "LRO_LOLA_Coverage_Global_128ppd_v04", Name = [[LRO LOLA DEM, Coverage]], - FilePath = asset.localResource("LRO_LOLA_DEM/Coverage.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LOLA_DEM/Coverage.vrt"), Description = [[]] } local treks_LRO_LOLA_Shade_Global_256ppd_v06 = { Identifier = "LRO_LOLA_Shade_Global_256ppd_v06", Name = [[LRO LOLA DEM, Hillshade]], - FilePath = asset.localResource("LRO_LOLA_DEM/Hillshade.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LOLA_DEM/Hillshade.vrt"), Description = [[]] } local treks_LRO_LOLA_NoDataMask_Global_128ppd_v04 = { Identifier = "LRO_LOLA_NoDataMask_Global_128ppd_v04", Name = [[LRO LOLA DEM, No Data Mask]], - FilePath = asset.localResource("LRO_LOLA_DEM/No_Data_Mask.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LOLA_DEM/No_Data_Mask.vrt"), Description = [[]] } local treks_LRO_LOLA_ClrShade_NPole875_5mp_v04_EQ = { Identifier = "LRO_LOLA_ClrShade_NPole875_5mp_v04_EQ", Name = [[LRO LOLA DEM, N Pole, 87.5 deg, ColorHillshade]], - FilePath = asset.localResource("LRO_LOLA_DEM/N_Pole.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LOLA_DEM/N_Pole.vrt"), Description = [[This is version 4 of the LRO LOLA North Pole 87.5 deg DEM, ColorHillshade. This is a colorized shaded-relief of a original polar LOLA Digital Elevation Model (DEM). The DEM is a shape map (radius) of the Moon at a resolution 100 meters per pixel, based on altimetry data acquired through Spetember 2011 by the LOLA instrument. The ground tracks were interpolated using the Generic Mapping Tools programs "surface" and "grdblend". Map values are referred to a radius of 1737400 m.]] } local treks_LRO_LOLA_ClrShade_SPole875_5mp_v04_EQ = { Identifier = "LRO_LOLA_ClrShade_SPole875_5mp_v04_EQ", Name = [[LRO LOLA DEM, S Pole, 87.5 deg, ColorHillshade]], - FilePath = asset.localResource("LRO_LOLA_DEM/S_Pole.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LOLA_DEM/S_Pole.vrt"), Description = [[This is version 4 of the LRO LOLA South Pole 87.5 deg DEM, ColorHillshade. This is a colorized shaded-relief of a original polar LOLA Digital Elevation Model (DEM). The DEM is a shape map (radius) of the Moon at a resolution 100 meters per pixel, based on altimetry data acquired through Spetember 2011 by the LOLA instrument. The ground tracks were interpolated using the Generic Mapping Tools programs "surface" and "grdblend". Map values are referred to a radius of 1737400 m.]] } + asset.onInitialize(function() openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_LRO_LOLA_ClrShade_Global_128ppd_v04) openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_LRO_LOLA_ClrShade_Global_256ppd_v06) @@ -84,9 +94,9 @@ asset.export("LRO_LOLA_ClrShade_NPole875_5mp_v04_EQ", treks_LRO_LOLA_ClrShade_NP asset.export("LRO_LOLA_ClrShade_SPole875_5mp_v04_EQ", treks_LRO_LOLA_ClrShade_SPole875_5mp_v04_EQ) + asset.meta = { - Name = [[NASA Treks Layers for Moon LRO_LOLA_DEM], - Version = "1.0", + Name = [[NASA Treks Layers for Moon LRO_LOLA_DEM]], Author = "NASA/Treks", URL = "https://trek.nasa.gov/moon", License = "NASA/Treks", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_LROC_Crater_Abundance.asset b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_LROC_Crater_Abundance.asset index 162ed62c7f..4761e4c52e 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_LROC_Crater_Abundance.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_LROC_Crater_Abundance.asset @@ -6,167 +6,193 @@ local globeIdentifier = asset.require("scene/solarsystem//planets/earth/moon/moon").Moon.Identifier + + local treks_LRO_NAC_CratAbnd_17S173E_150cmp = { Identifier = "LRO_NAC_CratAbnd_17S173E_150cmp", Name = [[LRO LROC Crater Abundance, Aitken Crater]], - FilePath = asset.localResource("LRO_LROC_Crater_Abundance/Aitken_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Abundance/Aitken_Crater.vrt"), Description = [[]] } local treks_LRO_NAC_CratAbnd_13S358E_2mp = { Identifier = "LRO_NAC_CratAbnd_13S358E_2mp", Name = [[LRO LROC Crater Abundance, Alphonsus Crater]], - FilePath = asset.localResource("LRO_LROC_Crater_Abundance/Alphonsus_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Abundance/Alphonsus_Crater.vrt"), Description = [[]] } local treks_LRO_NAC_CratAbnd_73N350E_150cmp = { Identifier = "LRO_NAC_CratAbnd_73N350E_150cmp", Name = [[LRO LROC Crater Abundance, Anaxagoras Crater]], - FilePath = asset.localResource("LRO_LROC_Crater_Abundance/Anaxagoras_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Abundance/Anaxagoras_Crater.vrt"), Description = [[]] } local treks_LRO_NAC_CratAbnd_26N004E_150cmp = { Identifier = "LRO_NAC_CratAbnd_26N004E_150cmp", Name = [[LRO LROC Crater Abundance, Apollo 15]], - FilePath = asset.localResource("LRO_LROC_Crater_Abundance/Apollo_15.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Abundance/Apollo_15.vrt"), Description = [[]] } local treks_LRO_NAC_CratAbnd_09S015E_150cmp = { Identifier = "LRO_NAC_CratAbnd_09S015E_150cmp", Name = [[LRO LROC Crater Abundance, Apollo 16]], - FilePath = asset.localResource("LRO_LROC_Crater_Abundance/Apollo_16.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Abundance/Apollo_16.vrt"), Description = [[]] } local treks_LRO_NAC_CratAbnd_37S206E_150cmp = { Identifier = "LRO_NAC_CratAbnd_37S206E_150cmp", Name = [[LRO LROC Crater Abundance, Apollo Basin]], - FilePath = asset.localResource("LRO_LROC_Crater_Abundance/Apollo_Basin.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Abundance/Apollo_Basin.vrt"), Description = [[]] } local treks_LRO_NAC_CratAbnd_25N311E_2mp = { Identifier = "LRO_NAC_CratAbnd_25N311E_2mp", Name = [[LRO LROC Crater Abundance, Aristarchus 1]], - FilePath = asset.localResource("LRO_LROC_Crater_Abundance/Aristarchus_1.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Abundance/Aristarchus_1.vrt"), Description = [[]] } local treks_LRO_NAC_CratAbnd_28N307E_150cmp = { Identifier = "LRO_NAC_CratAbnd_28N307E_150cmp", Name = [[LRO LROC Crater Abundance, Aristarchus 2]], - FilePath = asset.localResource("LRO_LROC_Crater_Abundance/Aristarchus_2.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Abundance/Aristarchus_2.vrt"), Description = [[]] } local treks_LRO_NAC_CratAbnd_19S070E_150cmp = { Identifier = "LRO_NAC_CratAbnd_19S070E_150cmp", Name = [[LRO LROC Crater Abundance, Balmer Basin]], - FilePath = asset.localResource("LRO_LROC_Crater_Abundance/Balmer_Basin.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Abundance/Balmer_Basin.vrt"), Description = [[]] } local treks_LRO_NAC_CratAbnd_20S337E_400cmp = { Identifier = "LRO_NAC_CratAbnd_20S337E_400cmp", Name = [[LRO LROC Crater Abundance, Bullialdus Crater]], - FilePath = asset.localResource("LRO_LROC_Crater_Abundance/Bullialdus_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Abundance/Bullialdus_Crater.vrt"), Description = [[]] } local treks_LRO_NAC_CratAbnd_36N320E_2mp = { Identifier = "LRO_NAC_CratAbnd_36N320E_2mp", Name = [[LRO LROC Crater Abundance, Gruithuisen Domes]], - FilePath = asset.localResource("LRO_LROC_Crater_Abundance/Gruithuisen_Domes.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Abundance/Gruithuisen_Domes.vrt"), Description = [[]] } local treks_LRO_NAC_CratAbnd_00N234E_150cmp = { Identifier = "LRO_NAC_CratAbnd_00N234E_150cmp", Name = [[LRO LROC Crater Abundance, Hertzsprung]], - FilePath = asset.localResource("LRO_LROC_Crater_Abundance/Hertzsprung.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Abundance/Hertzsprung.vrt"), Description = [[]] } local treks_LRO_NAC_CratAbnd_08N332E_2mp = { Identifier = "LRO_NAC_CratAbnd_08N332E_2mp", Name = [[LRO LROC Crater Abundance, Hortensius Domes]], - FilePath = asset.localResource("LRO_LROC_Crater_Abundance/Hortensius_Domes.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Abundance/Hortensius_Domes.vrt"), Description = [[]] } local treks_LRO_NAC_CratAbnd_06N120E_200cmp = { Identifier = "LRO_NAC_CratAbnd_06N120E_200cmp", Name = [[LRO LROC Crater Abundance, King Crater]], - FilePath = asset.localResource("LRO_LROC_Crater_Abundance/King_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Abundance/King_Crater.vrt"), Description = [[]] } local treks_LRO_NAC_CratAbnd_32N292E_2mp = { Identifier = "LRO_NAC_CratAbnd_32N292E_2mp", Name = [[LRO LROC Crater Abundance, Lichtenberg Crater]], - FilePath = asset.localResource("LRO_LROC_Crater_Abundance/Lichtenberg_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Abundance/Lichtenberg_Crater.vrt"), Description = [[]] } local treks_LRO_NAC_CratAbnd_10N058E_150cmp = { Identifier = "LRO_NAC_CratAbnd_10N058E_150cmp", Name = [[LRO LROC Crater Abundance, Mare Crisium]], - FilePath = asset.localResource("LRO_LROC_Crater_Abundance/Mare_Crisium.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Abundance/Mare_Crisium.vrt"), Description = [[]] } local treks_LRO_NAC_CratAbnd_16S041E_150cmp = { Identifier = "LRO_NAC_CratAbnd_16S041E_150cmp", Name = [[LRO LROC Crater Abundance, Montes Pyrenaeus]], - FilePath = asset.localResource("LRO_LROC_Crater_Abundance/Montes_Pyrenaeus.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Abundance/Montes_Pyrenaeus.vrt"), Description = [[]] } local treks_LRO_NAC_CratAbnd_26S265E_200cmp = { Identifier = "LRO_NAC_CratAbnd_26S265E_200cmp", Name = [[LRO LROC Crater Abundance, Orientale 1]], - FilePath = asset.localResource("LRO_LROC_Crater_Abundance/Orientale_1.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Abundance/Orientale_1.vrt"), Description = [[]] } local treks_LRO_NAC_CratAbnd_53N354E_150cmp = { Identifier = "LRO_NAC_CratAbnd_53N354E_150cmp", Name = [[LRO LROC Crater Abundance, Plato Ejecta]], - FilePath = asset.localResource("LRO_LROC_Crater_Abundance/Plato_Ejecta.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Abundance/Plato_Ejecta.vrt"), Description = [[]] } local treks_LRO_NAC_CratAbnd_60S200E_150cmp = { Identifier = "LRO_NAC_CratAbnd_60S200E_150cmp", Name = [[LRO LROC Crater Abundance, South Pole-Aitken Basin Interior]], - FilePath = asset.localResource("LRO_LROC_Crater_Abundance/South_Pole-Aitken_Basin_Interior.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Abundance/South_Pole-Aitken_Basin_Interior.vrt"), Description = [[]] } local treks_LRO_NAC_CratAbnd_02S167E_150cmp = { Identifier = "LRO_NAC_CratAbnd_02S167E_150cmp", Name = [[LRO LROC Crater Abundance, Stratton (Dewar) High Fe Anomaly]], - FilePath = asset.localResource("LRO_LROC_Crater_Abundance/Stratton_Dewar_High_Fe_Anomaly.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Abundance/Stratton_Dewar_High_Fe_Anomaly.vrt"), Description = [[]] } local treks_LRO_NAC_CratAbnd_20N010E_2mp = { Identifier = "LRO_NAC_CratAbnd_20N010E_2mp", Name = [[LRO LROC Crater Abundance, Sulpicius Gallus]], - FilePath = asset.localResource("LRO_LROC_Crater_Abundance/Sulpicius_Gallus.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Abundance/Sulpicius_Gallus.vrt"), Description = [[]] } local treks_LRO_NAC_CratAbnd_43S349E_150cmp = { Identifier = "LRO_NAC_CratAbnd_43S349E_150cmp", Name = [[LRO LROC Crater Abundance, Tycho Crater]], - FilePath = asset.localResource("LRO_LROC_Crater_Abundance/Tycho_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Abundance/Tycho_Crater.vrt"), Description = [[]] } + asset.onInitialize(function() openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_LRO_NAC_CratAbnd_17S173E_150cmp) openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_LRO_NAC_CratAbnd_13S358E_2mp) @@ -244,9 +270,9 @@ asset.export("LRO_NAC_CratAbnd_20N010E_2mp", treks_LRO_NAC_CratAbnd_20N010E_2mp) asset.export("LRO_NAC_CratAbnd_43S349E_150cmp", treks_LRO_NAC_CratAbnd_43S349E_150cmp) + asset.meta = { - Name = [[NASA Treks Layers for Moon LRO_LROC_Crater_Abundance], - Version = "1.0", + Name = [[NASA Treks Layers for Moon LRO_LROC_Crater_Abundance]], Author = "NASA/Treks", URL = "https://trek.nasa.gov/moon", License = "NASA/Treks", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_LROC_Crater_Abundance_Hazard.asset b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_LROC_Crater_Abundance_Hazard.asset index 5e7ada8659..aa6b876da6 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_LROC_Crater_Abundance_Hazard.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_LROC_Crater_Abundance_Hazard.asset @@ -6,167 +6,193 @@ local globeIdentifier = asset.require("scene/solarsystem//planets/earth/moon/moon").Moon.Identifier + + local treks_LRO_NAC_CratAbndHaz_17S173E_150cmp = { Identifier = "LRO_NAC_CratAbndHaz_17S173E_150cmp", Name = [[LRO LROC Crater Abundance Hazard, Aitken Crater]], - FilePath = asset.localResource("LRO_LROC_Crater_Abundance_Hazard/Aitken_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Abundance_Hazard/Aitken_Crater.vrt"), Description = [[]] } local treks_LRO_NAC_CratAbndHaz_13S358E_2mp = { Identifier = "LRO_NAC_CratAbndHaz_13S358E_2mp", Name = [[LRO LROC Crater Abundance Hazard, Alphonsus Crater]], - FilePath = asset.localResource("LRO_LROC_Crater_Abundance_Hazard/Alphonsus_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Abundance_Hazard/Alphonsus_Crater.vrt"), Description = [[]] } local treks_LRO_NAC_CratAbndHaz_73N350E_150cmp = { Identifier = "LRO_NAC_CratAbndHaz_73N350E_150cmp", Name = [[LRO LROC Crater Abundance Hazard, Anaxagoras Crater]], - FilePath = asset.localResource("LRO_LROC_Crater_Abundance_Hazard/Anaxagoras_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Abundance_Hazard/Anaxagoras_Crater.vrt"), Description = [[]] } local treks_LRO_NAC_CratAbndHaz_26N004E_150cmp = { Identifier = "LRO_NAC_CratAbndHaz_26N004E_150cmp", Name = [[LRO LROC Crater Abundance Hazard, Apollo 15]], - FilePath = asset.localResource("LRO_LROC_Crater_Abundance_Hazard/Apollo_15.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Abundance_Hazard/Apollo_15.vrt"), Description = [[]] } local treks_LRO_NAC_CratAbndHaz_09S015E_150cmp = { Identifier = "LRO_NAC_CratAbndHaz_09S015E_150cmp", Name = [[LRO LROC Crater Abundance Hazard, Apollo 16]], - FilePath = asset.localResource("LRO_LROC_Crater_Abundance_Hazard/Apollo_16.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Abundance_Hazard/Apollo_16.vrt"), Description = [[]] } local treks_LRO_NAC_CratAbndHaz_37S206E_150cmp = { Identifier = "LRO_NAC_CratAbndHaz_37S206E_150cmp", Name = [[LRO LROC Crater Abundance Hazard, Apollo Basin]], - FilePath = asset.localResource("LRO_LROC_Crater_Abundance_Hazard/Apollo_Basin.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Abundance_Hazard/Apollo_Basin.vrt"), Description = [[]] } local treks_LRO_NAC_CratAbndHaz_25N311E_2mp = { Identifier = "LRO_NAC_CratAbndHaz_25N311E_2mp", Name = [[LRO LROC Crater Abundance Hazard, Aristarchus 1]], - FilePath = asset.localResource("LRO_LROC_Crater_Abundance_Hazard/Aristarchus_1.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Abundance_Hazard/Aristarchus_1.vrt"), Description = [[]] } local treks_LRO_NAC_CratAbndHaz_28N307E_150cmp = { Identifier = "LRO_NAC_CratAbndHaz_28N307E_150cmp", Name = [[LRO LROC Crater Abundance Hazard, Aristarchus 2]], - FilePath = asset.localResource("LRO_LROC_Crater_Abundance_Hazard/Aristarchus_2.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Abundance_Hazard/Aristarchus_2.vrt"), Description = [[]] } local treks_LRO_NAC_CratAbndHaz_19S070E_150cmp = { Identifier = "LRO_NAC_CratAbndHaz_19S070E_150cmp", Name = [[LRO LROC Crater Abundance Hazard, Balmer Basin]], - FilePath = asset.localResource("LRO_LROC_Crater_Abundance_Hazard/Balmer_Basin.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Abundance_Hazard/Balmer_Basin.vrt"), Description = [[]] } local treks_LRO_NAC_CratAbndHaz_20S337E_400cmp = { Identifier = "LRO_NAC_CratAbndHaz_20S337E_400cmp", Name = [[LRO LROC Crater Abundance Hazard, Bullialdus Crater]], - FilePath = asset.localResource("LRO_LROC_Crater_Abundance_Hazard/Bullialdus_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Abundance_Hazard/Bullialdus_Crater.vrt"), Description = [[]] } local treks_LRO_NAC_CratAbndHaz_36N320E_2mp = { Identifier = "LRO_NAC_CratAbndHaz_36N320E_2mp", Name = [[LRO LROC Crater Abundance Hazard, Gruithuisen Domes]], - FilePath = asset.localResource("LRO_LROC_Crater_Abundance_Hazard/Gruithuisen_Domes.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Abundance_Hazard/Gruithuisen_Domes.vrt"), Description = [[]] } local treks_LRO_NAC_CratAbndHaz_00N234E_150cmp = { Identifier = "LRO_NAC_CratAbndHaz_00N234E_150cmp", Name = [[LRO LROC Crater Abundance Hazard, Hertzsprung]], - FilePath = asset.localResource("LRO_LROC_Crater_Abundance_Hazard/Hertzsprung.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Abundance_Hazard/Hertzsprung.vrt"), Description = [[]] } local treks_LRO_NAC_CratAbndHaz_08N332E_2mp = { Identifier = "LRO_NAC_CratAbndHaz_08N332E_2mp", Name = [[LRO LROC Crater Abundance Hazard, Hortensius Domes]], - FilePath = asset.localResource("LRO_LROC_Crater_Abundance_Hazard/Hortensius_Domes.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Abundance_Hazard/Hortensius_Domes.vrt"), Description = [[]] } local treks_LRO_NAC_CratAbndHaz_06N120E_200cmp = { Identifier = "LRO_NAC_CratAbndHaz_06N120E_200cmp", Name = [[LRO LROC Crater Abundance Hazard, King Crater]], - FilePath = asset.localResource("LRO_LROC_Crater_Abundance_Hazard/King_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Abundance_Hazard/King_Crater.vrt"), Description = [[]] } local treks_LRO_NAC_CratAbndHaz_32N292E_2mp = { Identifier = "LRO_NAC_CratAbndHaz_32N292E_2mp", Name = [[LRO LROC Crater Abundance Hazard, Lichtenberg Crater]], - FilePath = asset.localResource("LRO_LROC_Crater_Abundance_Hazard/Lichtenberg_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Abundance_Hazard/Lichtenberg_Crater.vrt"), Description = [[]] } local treks_LRO_NAC_CratAbndHaz_10N058E_150cmp = { Identifier = "LRO_NAC_CratAbndHaz_10N058E_150cmp", Name = [[LRO LROC Crater Abundance Hazard, Mare Crisium]], - FilePath = asset.localResource("LRO_LROC_Crater_Abundance_Hazard/Mare_Crisium.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Abundance_Hazard/Mare_Crisium.vrt"), Description = [[]] } local treks_LRO_NAC_CratAbndHaz_16S041E_150cmp = { Identifier = "LRO_NAC_CratAbndHaz_16S041E_150cmp", Name = [[LRO LROC Crater Abundance Hazard, Montes Pyrenaeus]], - FilePath = asset.localResource("LRO_LROC_Crater_Abundance_Hazard/Montes_Pyrenaeus.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Abundance_Hazard/Montes_Pyrenaeus.vrt"), Description = [[]] } local treks_LRO_NAC_CratAbndHaz_26S265E_200cmp = { Identifier = "LRO_NAC_CratAbndHaz_26S265E_200cmp", Name = [[LRO LROC Crater Abundance Hazard, Orientale 1]], - FilePath = asset.localResource("LRO_LROC_Crater_Abundance_Hazard/Orientale_1.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Abundance_Hazard/Orientale_1.vrt"), Description = [[]] } local treks_LRO_NAC_CratAbndHaz_53N354E_150cmp = { Identifier = "LRO_NAC_CratAbndHaz_53N354E_150cmp", Name = [[LRO LROC Crater Abundance Hazard, Plato Ejecta]], - FilePath = asset.localResource("LRO_LROC_Crater_Abundance_Hazard/Plato_Ejecta.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Abundance_Hazard/Plato_Ejecta.vrt"), Description = [[]] } local treks_LRO_NAC_CratAbndHaz_60S200E_150cmp = { Identifier = "LRO_NAC_CratAbndHaz_60S200E_150cmp", Name = [[LRO LROC Crater Abundance Hazard, South Pole-Aitken Basin Interior]], - FilePath = asset.localResource("LRO_LROC_Crater_Abundance_Hazard/South_Pole-Aitken_Basin_Interior.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Abundance_Hazard/South_Pole-Aitken_Basin_Interior.vrt"), Description = [[]] } local treks_LRO_NAC_CratAbndHaz_02S167E_150cmp = { Identifier = "LRO_NAC_CratAbndHaz_02S167E_150cmp", Name = [[LRO LROC Crater Abundance Hazard, Stratton (Dewar) High Fe Anomaly]], - FilePath = asset.localResource("LRO_LROC_Crater_Abundance_Hazard/Stratton_Dewar_High_Fe_Anomaly.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Abundance_Hazard/Stratton_Dewar_High_Fe_Anomaly.vrt"), Description = [[]] } local treks_LRO_NAC_CratAbndHaz_20N010E_2mp = { Identifier = "LRO_NAC_CratAbndHaz_20N010E_2mp", Name = [[LRO LROC Crater Abundance Hazard, Sulpicius Gallus]], - FilePath = asset.localResource("LRO_LROC_Crater_Abundance_Hazard/Sulpicius_Gallus.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Abundance_Hazard/Sulpicius_Gallus.vrt"), Description = [[]] } local treks_LRO_NAC_CratAbndHaz_43S349E_150cmp = { Identifier = "LRO_NAC_CratAbndHaz_43S349E_150cmp", Name = [[LRO LROC Crater Abundance Hazard, Tycho Crater]], - FilePath = asset.localResource("LRO_LROC_Crater_Abundance_Hazard/Tycho_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Abundance_Hazard/Tycho_Crater.vrt"), Description = [[]] } + asset.onInitialize(function() openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_LRO_NAC_CratAbndHaz_17S173E_150cmp) openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_LRO_NAC_CratAbndHaz_13S358E_2mp) @@ -244,9 +270,9 @@ asset.export("LRO_NAC_CratAbndHaz_20N010E_2mp", treks_LRO_NAC_CratAbndHaz_20N010 asset.export("LRO_NAC_CratAbndHaz_43S349E_150cmp", treks_LRO_NAC_CratAbndHaz_43S349E_150cmp) + asset.meta = { - Name = [[NASA Treks Layers for Moon LRO_LROC_Crater_Abundance_Hazard], - Version = "1.0", + Name = [[NASA Treks Layers for Moon LRO_LROC_Crater_Abundance_Hazard]], Author = "NASA/Treks", URL = "https://trek.nasa.gov/moon", License = "NASA/Treks", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_LROC_Crater_Density.asset b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_LROC_Crater_Density.asset index db4800754b..3eb1d16a1f 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_LROC_Crater_Density.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_LROC_Crater_Density.asset @@ -6,167 +6,193 @@ local globeIdentifier = asset.require("scene/solarsystem//planets/earth/moon/moon").Moon.Identifier + + local treks_LRO_NAC_CratDen_17S173E_150cmp = { Identifier = "LRO_NAC_CratDen_17S173E_150cmp", Name = [[LRO LROC Crater Density, Aitken Crater]], - FilePath = asset.localResource("LRO_LROC_Crater_Density/Aitken_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Density/Aitken_Crater.vrt"), Description = [[]] } local treks_LRO_NAC_CratDen_13S358E_2mp = { Identifier = "LRO_NAC_CratDen_13S358E_2mp", Name = [[LRO LROC Crater Density, Alphonsus Crater]], - FilePath = asset.localResource("LRO_LROC_Crater_Density/Alphonsus_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Density/Alphonsus_Crater.vrt"), Description = [[]] } local treks_LRO_NAC_CratDen_73N350E_150cmp = { Identifier = "LRO_NAC_CratDen_73N350E_150cmp", Name = [[LRO LROC Crater Density, Anaxagoras Crater]], - FilePath = asset.localResource("LRO_LROC_Crater_Density/Anaxagoras_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Density/Anaxagoras_Crater.vrt"), Description = [[]] } local treks_LRO_NAC_CratDen_26N004E_150cmp = { Identifier = "LRO_NAC_CratDen_26N004E_150cmp", Name = [[LRO LROC Crater Density, Apollo 15]], - FilePath = asset.localResource("LRO_LROC_Crater_Density/Apollo_15.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Density/Apollo_15.vrt"), Description = [[]] } local treks_LRO_NAC_CratDen_09S015E_150cmp = { Identifier = "LRO_NAC_CratDen_09S015E_150cmp", Name = [[LRO LROC Crater Density, Apollo 16]], - FilePath = asset.localResource("LRO_LROC_Crater_Density/Apollo_16.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Density/Apollo_16.vrt"), Description = [[]] } local treks_LRO_NAC_CratDen_37S206E_150cmp = { Identifier = "LRO_NAC_CratDen_37S206E_150cmp", Name = [[LRO LROC Crater Density, Apollo Basin]], - FilePath = asset.localResource("LRO_LROC_Crater_Density/Apollo_Basin.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Density/Apollo_Basin.vrt"), Description = [[]] } local treks_LRO_NAC_CratDen_25N311E_2mp = { Identifier = "LRO_NAC_CratDen_25N311E_2mp", Name = [[LRO LROC Crater Density, Aristarchus 1]], - FilePath = asset.localResource("LRO_LROC_Crater_Density/Aristarchus_1.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Density/Aristarchus_1.vrt"), Description = [[]] } local treks_LRO_NAC_CratDen_28N307E_150cmp = { Identifier = "LRO_NAC_CratDen_28N307E_150cmp", Name = [[LRO LROC Crater Density, Aristarchus 2]], - FilePath = asset.localResource("LRO_LROC_Crater_Density/Aristarchus_2.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Density/Aristarchus_2.vrt"), Description = [[]] } local treks_LRO_NAC_CratDen_19S070E_150cmp = { Identifier = "LRO_NAC_CratDen_19S070E_150cmp", Name = [[LRO LROC Crater Density, Balmer Basin]], - FilePath = asset.localResource("LRO_LROC_Crater_Density/Balmer_Basin.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Density/Balmer_Basin.vrt"), Description = [[]] } local treks_LRO_NAC_CratDen_20S337E_400cmp = { Identifier = "LRO_NAC_CratDen_20S337E_400cmp", Name = [[LRO LROC Crater Density, Bullialdus Crater]], - FilePath = asset.localResource("LRO_LROC_Crater_Density/Bullialdus_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Density/Bullialdus_Crater.vrt"), Description = [[]] } local treks_LRO_NAC_CratDen_36N320E_2mp = { Identifier = "LRO_NAC_CratDen_36N320E_2mp", Name = [[LRO LROC Crater Density, Gruithuisen Domes]], - FilePath = asset.localResource("LRO_LROC_Crater_Density/Gruithuisen_Domes.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Density/Gruithuisen_Domes.vrt"), Description = [[]] } local treks_LRO_NAC_CratDen_00N234E_150cmp = { Identifier = "LRO_NAC_CratDen_00N234E_150cmp", Name = [[LRO LROC Crater Density, Hertzsprung]], - FilePath = asset.localResource("LRO_LROC_Crater_Density/Hertzsprung.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Density/Hertzsprung.vrt"), Description = [[]] } local treks_LRO_NAC_CratDen_08N332E_2mp = { Identifier = "LRO_NAC_CratDen_08N332E_2mp", Name = [[LRO LROC Crater Density, Hortensius Domes]], - FilePath = asset.localResource("LRO_LROC_Crater_Density/Hortensius_Domes.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Density/Hortensius_Domes.vrt"), Description = [[]] } local treks_LRO_NAC_CratDen_06N120E_200cmp = { Identifier = "LRO_NAC_CratDen_06N120E_200cmp", Name = [[LRO LROC Crater Density, King Crater]], - FilePath = asset.localResource("LRO_LROC_Crater_Density/King_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Density/King_Crater.vrt"), Description = [[]] } local treks_LRO_NAC_CratDen_32N292E_2mp = { Identifier = "LRO_NAC_CratDen_32N292E_2mp", Name = [[LRO LROC Crater Density, Lichtenberg Crater]], - FilePath = asset.localResource("LRO_LROC_Crater_Density/Lichtenberg_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Density/Lichtenberg_Crater.vrt"), Description = [[]] } local treks_LRO_NAC_CratDen_10N058E_150cmp = { Identifier = "LRO_NAC_CratDen_10N058E_150cmp", Name = [[LRO LROC Crater Density, Mare Crisium]], - FilePath = asset.localResource("LRO_LROC_Crater_Density/Mare_Crisium.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Density/Mare_Crisium.vrt"), Description = [[]] } local treks_LRO_NAC_CratDen_16S041E_150cmp = { Identifier = "LRO_NAC_CratDen_16S041E_150cmp", Name = [[LRO LROC Crater Density, Montes Pyrenaeus]], - FilePath = asset.localResource("LRO_LROC_Crater_Density/Montes_Pyrenaeus.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Density/Montes_Pyrenaeus.vrt"), Description = [[]] } local treks_LRO_NAC_CratDen_26S265E_200cmp = { Identifier = "LRO_NAC_CratDen_26S265E_200cmp", Name = [[LRO LROC Crater Density, Orientale 1]], - FilePath = asset.localResource("LRO_LROC_Crater_Density/Orientale_1.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Density/Orientale_1.vrt"), Description = [[]] } local treks_LRO_NAC_CratDen_53N354E_150cmp = { Identifier = "LRO_NAC_CratDen_53N354E_150cmp", Name = [[LRO LROC Crater Density, Plato Ejecta]], - FilePath = asset.localResource("LRO_LROC_Crater_Density/Plato_Ejecta.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Density/Plato_Ejecta.vrt"), Description = [[]] } local treks_LRO_NAC_CratDen_60S200E_150cmp = { Identifier = "LRO_NAC_CratDen_60S200E_150cmp", Name = [[LRO LROC Crater Density, South Pole-Aitken Basin Interior]], - FilePath = asset.localResource("LRO_LROC_Crater_Density/South_Pole-Aitken_Basin_Interior.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Density/South_Pole-Aitken_Basin_Interior.vrt"), Description = [[]] } local treks_LRO_NAC_CratDen_02S167E_150cmp = { Identifier = "LRO_NAC_CratDen_02S167E_150cmp", Name = [[LRO LROC Crater Density, Stratton (Dewar) High Fe Anomaly]], - FilePath = asset.localResource("LRO_LROC_Crater_Density/Stratton_Dewar_High_Fe_Anomaly.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Density/Stratton_Dewar_High_Fe_Anomaly.vrt"), Description = [[]] } local treks_LRO_NAC_CratDen_20N010E_2mp = { Identifier = "LRO_NAC_CratDen_20N010E_2mp", Name = [[LRO LROC Crater Density, Sulpicius Gallus]], - FilePath = asset.localResource("LRO_LROC_Crater_Density/Sulpicius_Gallus.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Density/Sulpicius_Gallus.vrt"), Description = [[]] } local treks_LRO_NAC_CratDen_43S349E_150cmp = { Identifier = "LRO_NAC_CratDen_43S349E_150cmp", Name = [[LRO LROC Crater Density, Tycho Crater]], - FilePath = asset.localResource("LRO_LROC_Crater_Density/Tycho_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Density/Tycho_Crater.vrt"), Description = [[]] } + asset.onInitialize(function() openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_LRO_NAC_CratDen_17S173E_150cmp) openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_LRO_NAC_CratDen_13S358E_2mp) @@ -244,9 +270,9 @@ asset.export("LRO_NAC_CratDen_20N010E_2mp", treks_LRO_NAC_CratDen_20N010E_2mp) asset.export("LRO_NAC_CratDen_43S349E_150cmp", treks_LRO_NAC_CratDen_43S349E_150cmp) + asset.meta = { - Name = [[NASA Treks Layers for Moon LRO_LROC_Crater_Density], - Version = "1.0", + Name = [[NASA Treks Layers for Moon LRO_LROC_Crater_Density]], Author = "NASA/Treks", URL = "https://trek.nasa.gov/moon", License = "NASA/Treks", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_LROC_Crater_Density_Hazard.asset b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_LROC_Crater_Density_Hazard.asset index 544eef27c0..572af75530 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_LROC_Crater_Density_Hazard.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_LROC_Crater_Density_Hazard.asset @@ -6,167 +6,193 @@ local globeIdentifier = asset.require("scene/solarsystem//planets/earth/moon/moon").Moon.Identifier + + local treks_LRO_NAC_CratDenHaz_17S173E_150cmp = { Identifier = "LRO_NAC_CratDenHaz_17S173E_150cmp", Name = [[LRO LROC Crater Density Hazard, Aitken Crater]], - FilePath = asset.localResource("LRO_LROC_Crater_Density_Hazard/Aitken_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Density_Hazard/Aitken_Crater.vrt"), Description = [[]] } local treks_LRO_NAC_CratDenHaz_13S358E_2mp = { Identifier = "LRO_NAC_CratDenHaz_13S358E_2mp", Name = [[LRO LROC Crater Density Hazard, Alphonsus Crater]], - FilePath = asset.localResource("LRO_LROC_Crater_Density_Hazard/Alphonsus_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Density_Hazard/Alphonsus_Crater.vrt"), Description = [[]] } local treks_LRO_NAC_CratDenHaz_73N350E_150cmp = { Identifier = "LRO_NAC_CratDenHaz_73N350E_150cmp", Name = [[LRO LROC Crater Density Hazard, Anaxagoras Crater]], - FilePath = asset.localResource("LRO_LROC_Crater_Density_Hazard/Anaxagoras_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Density_Hazard/Anaxagoras_Crater.vrt"), Description = [[]] } local treks_LRO_NAC_CratDenHaz_26N004E_150cmp = { Identifier = "LRO_NAC_CratDenHaz_26N004E_150cmp", Name = [[LRO LROC Crater Density Hazard, Apollo 15]], - FilePath = asset.localResource("LRO_LROC_Crater_Density_Hazard/Apollo_15.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Density_Hazard/Apollo_15.vrt"), Description = [[]] } local treks_LRO_NAC_CratDenHaz_09S015E_150cmp = { Identifier = "LRO_NAC_CratDenHaz_09S015E_150cmp", Name = [[LRO LROC Crater Density Hazard, Apollo 16]], - FilePath = asset.localResource("LRO_LROC_Crater_Density_Hazard/Apollo_16.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Density_Hazard/Apollo_16.vrt"), Description = [[]] } local treks_LRO_NAC_CratDenHaz_37S206E_150cmp = { Identifier = "LRO_NAC_CratDenHaz_37S206E_150cmp", Name = [[LRO LROC Crater Density Hazard, Apollo Basin]], - FilePath = asset.localResource("LRO_LROC_Crater_Density_Hazard/Apollo_Basin.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Density_Hazard/Apollo_Basin.vrt"), Description = [[]] } local treks_LRO_NAC_CratDenHaz_25N311E_2mp = { Identifier = "LRO_NAC_CratDenHaz_25N311E_2mp", Name = [[LRO LROC Crater Density Hazard, Aristarchus 1]], - FilePath = asset.localResource("LRO_LROC_Crater_Density_Hazard/Aristarchus_1.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Density_Hazard/Aristarchus_1.vrt"), Description = [[]] } local treks_LRO_NAC_CratDenHaz_28N307E_150cmp = { Identifier = "LRO_NAC_CratDenHaz_28N307E_150cmp", Name = [[LRO LROC Crater Density Hazard, Aristarchus 2]], - FilePath = asset.localResource("LRO_LROC_Crater_Density_Hazard/Aristarchus_2.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Density_Hazard/Aristarchus_2.vrt"), Description = [[]] } local treks_LRO_NAC_CratDenHaz_19S070E_150cmp = { Identifier = "LRO_NAC_CratDenHaz_19S070E_150cmp", Name = [[LRO LROC Crater Density Hazard, Balmer Basin]], - FilePath = asset.localResource("LRO_LROC_Crater_Density_Hazard/Balmer_Basin.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Density_Hazard/Balmer_Basin.vrt"), Description = [[]] } local treks_LRO_NAC_CratDenHaz_20S337E_400cmp = { Identifier = "LRO_NAC_CratDenHaz_20S337E_400cmp", Name = [[LRO LROC Crater Density Hazard, Bullialdus Crater]], - FilePath = asset.localResource("LRO_LROC_Crater_Density_Hazard/Bullialdus_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Density_Hazard/Bullialdus_Crater.vrt"), Description = [[]] } local treks_LRO_NAC_CratDenHaz_36N320E_2mp = { Identifier = "LRO_NAC_CratDenHaz_36N320E_2mp", Name = [[LRO LROC Crater Density Hazard, Gruithuisen Domes]], - FilePath = asset.localResource("LRO_LROC_Crater_Density_Hazard/Gruithuisen_Domes.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Density_Hazard/Gruithuisen_Domes.vrt"), Description = [[]] } local treks_LRO_NAC_CratDenHaz_00N234E_150cmp = { Identifier = "LRO_NAC_CratDenHaz_00N234E_150cmp", Name = [[LRO LROC Crater Density Hazard, Hertzsprung]], - FilePath = asset.localResource("LRO_LROC_Crater_Density_Hazard/Hertzsprung.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Density_Hazard/Hertzsprung.vrt"), Description = [[]] } local treks_LRO_NAC_CratDenHaz_08N332E_2mp = { Identifier = "LRO_NAC_CratDenHaz_08N332E_2mp", Name = [[LRO LROC Crater Density Hazard, Hortensius Domes]], - FilePath = asset.localResource("LRO_LROC_Crater_Density_Hazard/Hortensius_Domes.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Density_Hazard/Hortensius_Domes.vrt"), Description = [[]] } local treks_LRO_NAC_CratDenHaz_06N120E_200cmp = { Identifier = "LRO_NAC_CratDenHaz_06N120E_200cmp", Name = [[LRO LROC Crater Density Hazard, King Crater]], - FilePath = asset.localResource("LRO_LROC_Crater_Density_Hazard/King_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Density_Hazard/King_Crater.vrt"), Description = [[]] } local treks_LRO_NAC_CratDenHaz_32N292E_2mp = { Identifier = "LRO_NAC_CratDenHaz_32N292E_2mp", Name = [[LRO LROC Crater Density Hazard, Lichtenberg Crater]], - FilePath = asset.localResource("LRO_LROC_Crater_Density_Hazard/Lichtenberg_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Density_Hazard/Lichtenberg_Crater.vrt"), Description = [[]] } local treks_LRO_NAC_CratDenHaz_10N058E_150cmp = { Identifier = "LRO_NAC_CratDenHaz_10N058E_150cmp", Name = [[LRO LROC Crater Density Hazard, Mare Crisium]], - FilePath = asset.localResource("LRO_LROC_Crater_Density_Hazard/Mare_Crisium.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Density_Hazard/Mare_Crisium.vrt"), Description = [[]] } local treks_LRO_NAC_CratDenHaz_16S041E_150cmp = { Identifier = "LRO_NAC_CratDenHaz_16S041E_150cmp", Name = [[LRO LROC Crater Density Hazard, Montes Pyrenaeus]], - FilePath = asset.localResource("LRO_LROC_Crater_Density_Hazard/Montes_Pyrenaeus.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Density_Hazard/Montes_Pyrenaeus.vrt"), Description = [[]] } local treks_LRO_NAC_CratDenHaz_26S265E_200cmp = { Identifier = "LRO_NAC_CratDenHaz_26S265E_200cmp", Name = [[LRO LROC Crater Density Hazard, Orientale 1]], - FilePath = asset.localResource("LRO_LROC_Crater_Density_Hazard/Orientale_1.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Density_Hazard/Orientale_1.vrt"), Description = [[]] } local treks_LRO_NAC_CratDenHaz_53N354E_150cmp = { Identifier = "LRO_NAC_CratDenHaz_53N354E_150cmp", Name = [[LRO LROC Crater Density Hazard, Plato Ejecta]], - FilePath = asset.localResource("LRO_LROC_Crater_Density_Hazard/Plato_Ejecta.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Density_Hazard/Plato_Ejecta.vrt"), Description = [[]] } local treks_LRO_NAC_CratDenHaz_60S200E_150cmp = { Identifier = "LRO_NAC_CratDenHaz_60S200E_150cmp", Name = [[LRO LROC Crater Density Hazard, South Pole-Aitken Basin Interior]], - FilePath = asset.localResource("LRO_LROC_Crater_Density_Hazard/South_Pole-Aitken_Basin_Interior.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Density_Hazard/South_Pole-Aitken_Basin_Interior.vrt"), Description = [[]] } local treks_LRO_NAC_CratDenHaz_02S167E_150cmp = { Identifier = "LRO_NAC_CratDenHaz_02S167E_150cmp", Name = [[LRO LROC Crater Density Hazard, Stratton (Dewar) High Fe Anomaly]], - FilePath = asset.localResource("LRO_LROC_Crater_Density_Hazard/Stratton_Dewar_High_Fe_Anomaly.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Density_Hazard/Stratton_Dewar_High_Fe_Anomaly.vrt"), Description = [[]] } local treks_LRO_NAC_CratDenHaz_20N010E_2mp = { Identifier = "LRO_NAC_CratDenHaz_20N010E_2mp", Name = [[LRO LROC Crater Density Hazard, Sulpicius Gallus]], - FilePath = asset.localResource("LRO_LROC_Crater_Density_Hazard/Sulpicius_Gallus.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Density_Hazard/Sulpicius_Gallus.vrt"), Description = [[]] } local treks_LRO_NAC_CratDenHaz_43S349E_150cmp = { Identifier = "LRO_NAC_CratDenHaz_43S349E_150cmp", Name = [[LRO LROC Crater Density Hazard, Tycho Crater]], - FilePath = asset.localResource("LRO_LROC_Crater_Density_Hazard/Tycho_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Crater_Density_Hazard/Tycho_Crater.vrt"), Description = [[]] } + asset.onInitialize(function() openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_LRO_NAC_CratDenHaz_17S173E_150cmp) openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_LRO_NAC_CratDenHaz_13S358E_2mp) @@ -244,9 +270,9 @@ asset.export("LRO_NAC_CratDenHaz_20N010E_2mp", treks_LRO_NAC_CratDenHaz_20N010E_ asset.export("LRO_NAC_CratDenHaz_43S349E_150cmp", treks_LRO_NAC_CratDenHaz_43S349E_150cmp) + asset.meta = { - Name = [[NASA Treks Layers for Moon LRO_LROC_Crater_Density_Hazard], - Version = "1.0", + Name = [[NASA Treks Layers for Moon LRO_LROC_Crater_Density_Hazard]], Author = "NASA/Treks", URL = "https://trek.nasa.gov/moon", License = "NASA/Treks", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_LROC_DEM.asset b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_LROC_DEM.asset index fcdef25339..6f036e2175 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_LROC_DEM.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_LROC_DEM.asset @@ -6,307 +6,353 @@ local globeIdentifier = asset.require("scene/solarsystem//planets/earth/moon/moon").Moon.Identifier + + local treks_LRO_NAC_ClrRoughness_15m_17S173E_150cmp = { Identifier = "LRO_NAC_ClrRoughness_15m_17S173E_150cmp", Name = [[LRO LROC DEM, Aitken Crater, 15m Color Roughness]], - FilePath = asset.localResource("LRO_LROC_DEM/Aitken_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_DEM/Aitken_Crater.vrt"), Description = [[]] } local treks_LRO_NAC_ClrRoughness_15m_13S358E_2mp = { Identifier = "LRO_NAC_ClrRoughness_15m_13S358E_2mp", Name = [[LRO LROC DEM, Alphonsus Crater, 15m Color Roughness]], - FilePath = asset.localResource("LRO_LROC_DEM/Alphonsus_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_DEM/Alphonsus_Crater.vrt"), Description = [[]] } local treks_LRO_NAC_ClrShade_13S358E_200cmp = { Identifier = "LRO_NAC_ClrShade_13S358E_200cmp", Name = [[LRO LROC DEM, Alphonsus, ColorHillshade]], - FilePath = asset.localResource("LRO_LROC_DEM/Alphonsus.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_DEM/Alphonsus.vrt"), Description = [[]] } local treks_LRO_NAC_ClrRoughness_15m_73N350E_150cmp = { Identifier = "LRO_NAC_ClrRoughness_15m_73N350E_150cmp", Name = [[LRO LROC DEM, Anaxagoras Crater, 15m Color Roughness]], - FilePath = asset.localResource("LRO_LROC_DEM/Anaxagoras_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_DEM/Anaxagoras_Crater.vrt"), Description = [[]] } local treks_LRO_NAC_ClrRoughness_15m_26N004E_150cmp = { Identifier = "LRO_NAC_ClrRoughness_15m_26N004E_150cmp", Name = [[LRO LROC DEM, Apollo 15, 15m Color Roughness]], - FilePath = asset.localResource("LRO_LROC_DEM/Apollo_15.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_DEM/Apollo_15.vrt"), Description = [[]] } local treks_LRO_NAC_ClrRoughness_15m_09S015E_150cmp = { Identifier = "LRO_NAC_ClrRoughness_15m_09S015E_150cmp", Name = [[LRO LROC DEM, Apollo 16, 15m Color Roughness]], - FilePath = asset.localResource("LRO_LROC_DEM/Apollo_16.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_DEM/Apollo_16.vrt"), Description = [[]] } local treks_LRO_NAC_ClrRoughness_15m_37S206E_150cmp = { Identifier = "LRO_NAC_ClrRoughness_15m_37S206E_150cmp", Name = [[LRO LROC DEM, Apollo Basin, 15m Color Roughness]], - FilePath = asset.localResource("LRO_LROC_DEM/Apollo_Basin.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_DEM/Apollo_Basin.vrt"), Description = [[]] } local treks_LRO_NAC_ClrRoughness_15m_25N311E_2mp = { Identifier = "LRO_NAC_ClrRoughness_15m_25N311E_2mp", Name = [[LRO LROC DEM, Aristarchus 1, 15m Color Roughness]], - FilePath = asset.localResource("LRO_LROC_DEM/Aristarchus_1.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_DEM/Aristarchus_1.vrt"), Description = [[]] } local treks_LRO_NAC_ClrRoughness_15m_28N307E_150cmp = { Identifier = "LRO_NAC_ClrRoughness_15m_28N307E_150cmp", Name = [[LRO LROC DEM, Aristarchus 2, 15m Color Roughness]], - FilePath = asset.localResource("LRO_LROC_DEM/Aristarchus_2.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_DEM/Aristarchus_2.vrt"), Description = [[]] } local treks_LRO_NAC_ClrRoughness_15m_19S070E_150cmp = { Identifier = "LRO_NAC_ClrRoughness_15m_19S070E_150cmp", Name = [[LRO LROC DEM, Balmer Basin, 15m Color Roughness]], - FilePath = asset.localResource("LRO_LROC_DEM/Balmer_Basin.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_DEM/Balmer_Basin.vrt"), Description = [[]] } local treks_LRO_NAC_ClrRoughness_15m_20S337E_400cmp = { Identifier = "LRO_NAC_ClrRoughness_15m_20S337E_400cmp", Name = [[LRO LROC DEM, Bullialdus Crater, 15m Color Roughness]], - FilePath = asset.localResource("LRO_LROC_DEM/Bullialdus_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_DEM/Bullialdus_Crater.vrt"), Description = [[]] } local treks_LRO_NAC_ClrShade_61N099E_150cmp = { Identifier = "LRO_NAC_ClrShade_61N099E_150cmp", Name = [[LRO LROC DEM, Compton Belkovich Th Anomaly, ColorHillshade]], - FilePath = asset.localResource("LRO_LROC_DEM/Compton_Belkovich_Th_Anomaly.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_DEM/Compton_Belkovich_Th_Anomaly.vrt"), Description = [[]] } local treks_LRO_NAC_ClrRoughness_15m_26N178E_150cmp = { Identifier = "LRO_NAC_ClrRoughness_15m_26N178E_150cmp", Name = [[LRO LROC DEM, Dante Crater, 15m Color Roughness]], - FilePath = asset.localResource("LRO_LROC_DEM/Dante_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_DEM/Dante_Crater.vrt"), Description = [[]] } local treks_LRO_NAC_ClrShade_02S317E_150cmp = { Identifier = "LRO_NAC_ClrShade_02S317E_150cmp", Name = [[LRO LROC DEM, Flamsteed Crater, ColorHillshade]], - FilePath = asset.localResource("LRO_LROC_DEM/Flamsteed_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_DEM/Flamsteed_Crater.vrt"), Description = [[]] } local treks_LRO_NAC_ClrShade_03N280E_2m = { Identifier = "LRO_NAC_ClrShade_03N280E_2m", Name = [[LRO LROC DEM, Fresh Crater East of Lents, ColorHillshade]], - FilePath = asset.localResource("LRO_LROC_DEM/Fresh_Crater_East_of_Lents.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_DEM/Fresh_Crater_East_of_Lents.vrt"), Description = [[]] } local treks_LRO_NAC_ClrRoughness_15m_36N320E_2mp = { Identifier = "LRO_NAC_ClrRoughness_15m_36N320E_2mp", Name = [[LRO LROC DEM, Gruithuisen Domes, 15m Color Roughness]], - FilePath = asset.localResource("LRO_LROC_DEM/Gruithuisen_Domes.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_DEM/Gruithuisen_Domes.vrt"), Description = [[]] } local treks_LRO_NAC_ClrRoughness_15m_00N234E_150cmp = { Identifier = "LRO_NAC_ClrRoughness_15m_00N234E_150cmp", Name = [[LRO LROC DEM, Hertzsprung, 15m Color Roughness]], - FilePath = asset.localResource("LRO_LROC_DEM/Hertzsprung.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_DEM/Hertzsprung.vrt"), Description = [[]] } local treks_LRO_NAC_ClrRoughness_15m_08N332E_2mp = { Identifier = "LRO_NAC_ClrRoughness_15m_08N332E_2mp", Name = [[LRO LROC DEM, Hortensius Domes, 15m Color Roughness]], - FilePath = asset.localResource("LRO_LROC_DEM/Hortensius_Domes.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_DEM/Hortensius_Domes.vrt"), Description = [[]] } local treks_LRO_NAC_ClrShade_55N077E_200cmp = { Identifier = "LRO_NAC_ClrShade_55N077E_200cmp", Name = [[LRO LROC DEM, Humboldtianum Basin, ColorHillshade]], - FilePath = asset.localResource("LRO_LROC_DEM/Humboldtianum_Basin.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_DEM/Humboldtianum_Basin.vrt"), Description = [[]] } local treks_LRO_NAC_ClrShade_19N005E_2mp = { Identifier = "LRO_NAC_ClrShade_19N005E_2mp", Name = [[LRO LROC DEM, Ina (D-Caldera), ColorHillshade]], - FilePath = asset.localResource("LRO_LROC_DEM/Ina_D-Caldera.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_DEM/Ina_D-Caldera.vrt"), Description = [[]] } local treks_LRO_NAC_ClrRoughness_15m_06N120E_200cmp = { Identifier = "LRO_NAC_ClrRoughness_15m_06N120E_200cmp", Name = [[LRO LROC DEM, King Crater, 15m Color Roughness]], - FilePath = asset.localResource("LRO_LROC_DEM/King_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_DEM/King_Crater.vrt"), Description = [[]] } local treks_LRO_NAC_ClrRoughness_15m_32N292E_2mp = { Identifier = "LRO_NAC_ClrRoughness_15m_32N292E_2mp", Name = [[LRO LROC DEM, Lichtenberg Crater, 15m Color Roughness]], - FilePath = asset.localResource("LRO_LROC_DEM/Lichtenberg_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_DEM/Lichtenberg_Crater.vrt"), Description = [[]] } local treks_LRO_NAC_ClrRoughness_15m_10N58E_150cmp = { Identifier = "LRO_NAC_ClrRoughness_15m_10N58E_150cmp", Name = [[LRO LROC DEM, Mare Crisium, 15m Color Roughness]], - FilePath = asset.localResource("LRO_LROC_DEM/Mare_Crisium.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_DEM/Mare_Crisium.vrt"), Description = [[]] } local treks_LRO_NAC_ClrShade_36S164E_2mp = { Identifier = "LRO_NAC_ClrShade_36S164E_2mp", Name = [[LRO LROC DEM, Mare Ingenii, ColorHillshade]], - FilePath = asset.localResource("LRO_LROC_DEM/Mare_Ingenii.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_DEM/Mare_Ingenii.vrt"), Description = [[]] } local treks_LRO_NAC_ClrShade_26N150E_200cmp = { Identifier = "LRO_NAC_ClrShade_26N150E_200cmp", Name = [[LRO LROC DEM, Mare Moscoviense, ColorHillshade]], - FilePath = asset.localResource("LRO_LROC_DEM/Mare_Moscoviense.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_DEM/Mare_Moscoviense.vrt"), Description = [[]] } local treks_LRO_NAC_ClrShade_02N085E_150cmp = { Identifier = "LRO_NAC_ClrShade_02N085E_150cmp", Name = [[LRO LROC DEM, Mare Smythii, ColorHillshade]], - FilePath = asset.localResource("LRO_LROC_DEM/Mare_Smythii.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_DEM/Mare_Smythii.vrt"), Description = [[]] } local treks_LRO_NAC_ClrShade_07N022E_150cmp = { Identifier = "LRO_NAC_ClrShade_07N022E_150cmp", Name = [[LRO LROC DEM, Mare Tranquillitatis, ColorHillshade]], - FilePath = asset.localResource("LRO_LROC_DEM/Mare_Tranquillitatis.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_DEM/Mare_Tranquillitatis.vrt"), Description = [[]] } local treks_LRO_NAC_ClrShade_14N304E_2mp = { Identifier = "LRO_NAC_ClrShade_14N304E_2mp", Name = [[LRO LROC DEM, Marius Hills, ColorHillshade]], - FilePath = asset.localResource("LRO_LROC_DEM/Marius_Hills.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_DEM/Marius_Hills.vrt"), Description = [[]] } local treks_LRO_NAC_ClrRoughness_15m_16S041E_150cmp = { Identifier = "LRO_NAC_ClrRoughness_15m_16S041E_150cmp", Name = [[LRO LROC DEM, Montes Pyrenaeus, 15m Color Roughness]], - FilePath = asset.localResource("LRO_LROC_DEM/Montes_Pyrenaeus.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_DEM/Montes_Pyrenaeus.vrt"), Description = [[]] } local treks_LRO_NAC_ClrShade_05N000E_150cmp = { Identifier = "LRO_NAC_ClrShade_05N000E_150cmp", Name = [[LRO LROC DEM, Murchison Crater, ColorHillshade]], - FilePath = asset.localResource("LRO_LROC_DEM/Murchison_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_DEM/Murchison_Crater.vrt"), Description = [[]] } local treks_LRO_NAC_ClrRoughness_15m_26S265E_200cmp = { Identifier = "LRO_NAC_ClrRoughness_15m_26S265E_200cmp", Name = [[LRO LROC DEM, Orientale 1, 15m Color Roughness]], - FilePath = asset.localResource("LRO_LROC_DEM/Orientale_1.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_DEM/Orientale_1.vrt"), Description = [[]] } local treks_LRO_NAC_ClrRoughness_15m_53N354E_150cmp = { Identifier = "LRO_NAC_ClrRoughness_15m_53N354E_150cmp", Name = [[LRO LROC DEM, Plato Ejecta, 15m Color Roughness]], - FilePath = asset.localResource("LRO_LROC_DEM/Plato_Ejecta.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_DEM/Plato_Ejecta.vrt"), Description = [[]] } local treks_LRO_NAC_ClrShade_07N301E_2mp = { Identifier = "LRO_NAC_ClrShade_07N301E_2mp", Name = [[LRO LROC DEM, Reiner Gamma, ColorHillshade]], - FilePath = asset.localResource("LRO_LROC_DEM/Reiner_Gamma.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_DEM/Reiner_Gamma.vrt"), Description = [[]] } local treks_LRO_NAC_ClrShade_03S286E_150cmp = { Identifier = "LRO_NAC_ClrShade_03S286E_150cmp", Name = [[LRO LROC DEM, Riccioli Crater, ColorHillshade]], - FilePath = asset.localResource("LRO_LROC_DEM/Riccioli_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_DEM/Riccioli_Crater.vrt"), Description = [[]] } local treks_LRO_NAC_ClrShade_13N356E_150cmp = { Identifier = "LRO_NAC_ClrShade_13N356E_150cmp", Name = [[LRO LROC DEM, Rima Bode, ColorHillshade]], - FilePath = asset.localResource("LRO_LROC_DEM/Rima_Bode.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_DEM/Rima_Bode.vrt"), Description = [[]] } local treks_LRO_NAC_ClrShade_27N318E_150cmp = { Identifier = "LRO_NAC_ClrShade_27N318E_150cmp", Name = [[LRO LROC DEM, Rimae Prinz, ColorHillshade]], - FilePath = asset.localResource("LRO_LROC_DEM/Rimae_Prinz.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_DEM/Rimae_Prinz.vrt"), Description = [[]] } local treks_LRO_NAC_ClrRoughness_15m_60S200E_150cmp = { Identifier = "LRO_NAC_ClrRoughness_15m_60S200E_150cmp", Name = [[LRO LROC DEM, South Pole-Aitken Basin Interior, 15m Color Roughness]], - FilePath = asset.localResource("LRO_LROC_DEM/South_Pole-Aitken_Basin_Interior.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_DEM/South_Pole-Aitken_Basin_Interior.vrt"), Description = [[]] } local treks_LRO_NAC_ClrShade_51S171E_2mp = { Identifier = "LRO_NAC_ClrShade_51S171E_2mp", Name = [[LRO LROC DEM, South Pole-Aitken Rim, ColorHillshade]], - FilePath = asset.localResource("LRO_LROC_DEM/South_Pole-Aitken_Rim.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_DEM/South_Pole-Aitken_Rim.vrt"), Description = [[]] } local treks_LRO_NAC_ClrRoughness_15m_02S167E_150cmp = { Identifier = "LRO_NAC_ClrRoughness_15m_02S167E_150cmp", Name = [[LRO LROC DEM, Stratton (Dewar) High Fe Anomaly, 15m Color Roughness]], - FilePath = asset.localResource("LRO_LROC_DEM/Stratton_Dewar_High_Fe_Anomaly.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_DEM/Stratton_Dewar_High_Fe_Anomaly.vrt"), Description = [[]] } local treks_LRO_NAC_ClrShade_02S167E_150cmp = { Identifier = "LRO_NAC_ClrShade_02S167E_150cmp", Name = [[LRO LROC DEM, Stratton (Dewar), ColorHillshade]], - FilePath = asset.localResource("LRO_LROC_DEM/Stratton_Dewar.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_DEM/Stratton_Dewar.vrt"), Description = [[]] } local treks_LRO_NAC_ClrRoughness_15m_20N010E_2mp = { Identifier = "LRO_NAC_ClrRoughness_15m_20N010E_2mp", Name = [[LRO LROC DEM, Sulpicius Gallus, 15m Color Roughness]], - FilePath = asset.localResource("LRO_LROC_DEM/Sulpicius_Gallus.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_DEM/Sulpicius_Gallus.vrt"), Description = [[]] } local treks_LRO_NAC_ClrRoughness_15m_19S129E_150cmp = { Identifier = "LRO_NAC_ClrRoughness_15m_19S129E_150cmp", Name = [[LRO LROC DEM, Tsiolkovskiy Crater, 15m Color Roughness]], - FilePath = asset.localResource("LRO_LROC_DEM/Tsiolkovskiy_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_DEM/Tsiolkovskiy_Crater.vrt"), Description = [[]] } local treks_LRO_NAC_ClrRoughness_15m_43S349E_150cmp = { Identifier = "LRO_NAC_ClrRoughness_15m_43S349E_150cmp", Name = [[LRO LROC DEM, Tycho Crater, 15m Color Roughness]], - FilePath = asset.localResource("LRO_LROC_DEM/Tycho_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_DEM/Tycho_Crater.vrt"), Description = [[]] } + asset.onInitialize(function() openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_LRO_NAC_ClrRoughness_15m_17S173E_150cmp) openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_LRO_NAC_ClrRoughness_15m_13S358E_2mp) @@ -444,9 +490,9 @@ asset.export("LRO_NAC_ClrRoughness_15m_19S129E_150cmp", treks_LRO_NAC_ClrRoughne asset.export("LRO_NAC_ClrRoughness_15m_43S349E_150cmp", treks_LRO_NAC_ClrRoughness_15m_43S349E_150cmp) + asset.meta = { - Name = [[NASA Treks Layers for Moon LRO_LROC_DEM], - Version = "1.0", + Name = [[NASA Treks Layers for Moon LRO_LROC_DEM]], Author = "NASA/Treks", URL = "https://trek.nasa.gov/moon", License = "NASA/Treks", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_LROC_Image_Mosaic.asset b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_LROC_Image_Mosaic.asset index bc910b1954..15a593e4b1 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_LROC_Image_Mosaic.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_LROC_Image_Mosaic.asset @@ -6,244 +6,281 @@ local globeIdentifier = asset.require("scene/solarsystem//planets/earth/moon/moon").Moon.Identifier + + local treks_LRO_NAC_Mosaic_17S173E_50cmp = { Identifier = "LRO_NAC_Mosaic_17S173E_50cmp", Name = [[LRO LROC Image Mosaic, Aitken Crater]], - FilePath = asset.localResource("LRO_LROC_Image_Mosaic/Aitken_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Image_Mosaic/Aitken_Crater.vrt"), Description = [[]] } local treks_LRO_NAC_Mosaic_13S358E_50cmp = { Identifier = "LRO_NAC_Mosaic_13S358E_50cmp", Name = [[LRO LROC Image Mosaic, Alphonsus]], - FilePath = asset.localResource("LRO_LROC_Image_Mosaic/Alphonsus.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Image_Mosaic/Alphonsus.vrt"), Description = [[]] } local treks_LRO_NAC_Mosaic_26N004E_50cmp = { Identifier = "LRO_NAC_Mosaic_26N004E_50cmp", Name = [[LRO LROC Image Mosaic, Apollo 15]], - FilePath = asset.localResource("LRO_LROC_Image_Mosaic/Apollo_15.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Image_Mosaic/Apollo_15.vrt"), Description = [[]] } local treks_LRO_NAC_Mosaic_09S015E_50cmp = { Identifier = "LRO_NAC_Mosaic_09S015E_50cmp", Name = [[LRO LROC Image Mosaic, Apollo 16]], - FilePath = asset.localResource("LRO_LROC_Image_Mosaic/Apollo_16.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Image_Mosaic/Apollo_16.vrt"), Description = [[]] } local treks_LRO_NAC_Mosaic_25N311E_50cmp = { Identifier = "LRO_NAC_Mosaic_25N311E_50cmp", Name = [[LRO LROC Image Mosaic, Aristarchus 1]], - FilePath = asset.localResource("LRO_LROC_Image_Mosaic/Aristarchus_1.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Image_Mosaic/Aristarchus_1.vrt"), Description = [[]] } local treks_LRO_NAC_Mosaic_28N307E_50cmp = { Identifier = "LRO_NAC_Mosaic_28N307E_50cmp", Name = [[LRO LROC Image Mosaic, Aristarchus 2]], - FilePath = asset.localResource("LRO_LROC_Image_Mosaic/Aristarchus_2.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Image_Mosaic/Aristarchus_2.vrt"), Description = [[]] } local treks_LRO_NAC_Mosaic_19S070E_50cmp = { Identifier = "LRO_NAC_Mosaic_19S070E_50cmp", Name = [[LRO LROC Image Mosaic, Balmer Basin]], - FilePath = asset.localResource("LRO_LROC_Image_Mosaic/Balmer_Basin.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Image_Mosaic/Balmer_Basin.vrt"), Description = [[]] } local treks_LRO_NAC_Mosaic_61N099E_50cmp = { Identifier = "LRO_NAC_Mosaic_61N099E_50cmp", Name = [[LRO LROC Image Mosaic, Compton Belkovich Th Anomaly]], - FilePath = asset.localResource("LRO_LROC_Image_Mosaic/Compton_Belkovich_Th_Anomaly.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Image_Mosaic/Compton_Belkovich_Th_Anomaly.vrt"), Description = [[]] } local treks_LRO_NAC_Mosaic_02S317E_50cmp = { Identifier = "LRO_NAC_Mosaic_02S317E_50cmp", Name = [[LRO LROC Image Mosaic, Flamsteed Crater]], - FilePath = asset.localResource("LRO_LROC_Image_Mosaic/Flamsteed_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Image_Mosaic/Flamsteed_Crater.vrt"), Description = [[]] } local treks_LRO_NAC_Mosaic_36N320E_50cmp = { Identifier = "LRO_NAC_Mosaic_36N320E_50cmp", Name = [[LRO LROC Image Mosaic, Gruithuisen Domes]], - FilePath = asset.localResource("LRO_LROC_Image_Mosaic/Gruithuisen_Domes.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Image_Mosaic/Gruithuisen_Domes.vrt"), Description = [[]] } local treks_LRO_NAC_Mosaic_00N234E_50cmp = { Identifier = "LRO_NAC_Mosaic_00N234E_50cmp", Name = [[LRO LROC Image Mosaic, Hertzsprung]], - FilePath = asset.localResource("LRO_LROC_Image_Mosaic/Hertzsprung.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Image_Mosaic/Hertzsprung.vrt"), Description = [[]] } local treks_LRO_NAC_Mosaic_08N332E_50cmp = { Identifier = "LRO_NAC_Mosaic_08N332E_50cmp", Name = [[LRO LROC Image Mosaic, Hortensius Domes]], - FilePath = asset.localResource("LRO_LROC_Image_Mosaic/Hortensius_Domes.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Image_Mosaic/Hortensius_Domes.vrt"), Description = [[]] } local treks_LRO_NAC_Mosaic_55N077E_50cmp = { Identifier = "LRO_NAC_Mosaic_55N077E_50cmp", Name = [[LRO LROC Image Mosaic, Humboldtianum Basin]], - FilePath = asset.localResource("LRO_LROC_Image_Mosaic/Humboldtianum_Basin.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Image_Mosaic/Humboldtianum_Basin.vrt"), Description = [[]] } local treks_LRO_NAC_Mosaic_19N005E_50cmp = { Identifier = "LRO_NAC_Mosaic_19N005E_50cmp", Name = [[LRO LROC Image Mosaic, Ina D-Caldera]], - FilePath = asset.localResource("LRO_LROC_Image_Mosaic/Ina_D-Caldera.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Image_Mosaic/Ina_D-Caldera.vrt"), Description = [[]] } local treks_LRO_NAC_Mosaic_06N120E_50cmp = { Identifier = "LRO_NAC_Mosaic_06N120E_50cmp", Name = [[LRO LROC Image Mosaic, King Crater]], - FilePath = asset.localResource("LRO_LROC_Image_Mosaic/King_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Image_Mosaic/King_Crater.vrt"), Description = [[]] } local treks_LRO_NAC_Mosaic_32N292E_50cmp = { Identifier = "LRO_NAC_Mosaic_32N292E_50cmp", Name = [[LRO LROC Image Mosaic, Lichtenberg Crater]], - FilePath = asset.localResource("LRO_LROC_Image_Mosaic/Lichtenberg_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Image_Mosaic/Lichtenberg_Crater.vrt"), Description = [[]] } local treks_LRO_NAC_Mosaic_36S164E_70cmp = { Identifier = "LRO_NAC_Mosaic_36S164E_70cmp", Name = [[LRO LROC Image Mosaic, Mare Ingenii]], - FilePath = asset.localResource("LRO_LROC_Image_Mosaic/Mare_Ingenii.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Image_Mosaic/Mare_Ingenii.vrt"), Description = [[]] } local treks_LRO_NAC_Mosaic_26N150E_50cmp = { Identifier = "LRO_NAC_Mosaic_26N150E_50cmp", Name = [[LRO LROC Image Mosaic, Mare Moscoviense]], - FilePath = asset.localResource("LRO_LROC_Image_Mosaic/Mare_Moscoviense.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Image_Mosaic/Mare_Moscoviense.vrt"), Description = [[]] } local treks_LRO_NAC_Mosaic_02N085E_50cmp = { Identifier = "LRO_NAC_Mosaic_02N085E_50cmp", Name = [[LRO LROC Image Mosaic, Mare Smythii]], - FilePath = asset.localResource("LRO_LROC_Image_Mosaic/Mare_Smythii.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Image_Mosaic/Mare_Smythii.vrt"), Description = [[]] } local treks_LRO_NAC_Mosaic_07N022E_50cmp = { Identifier = "LRO_NAC_Mosaic_07N022E_50cmp", Name = [[LRO LROC Image Mosaic, Mare Tranquillitatis]], - FilePath = asset.localResource("LRO_LROC_Image_Mosaic/Mare_Tranquillitatis.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Image_Mosaic/Mare_Tranquillitatis.vrt"), Description = [[]] } local treks_LRO_NAC_Mosaic_14N304E_50cmp = { Identifier = "LRO_NAC_Mosaic_14N304E_50cmp", Name = [[LRO LROC Image Mosaic, Marius Hills]], - FilePath = asset.localResource("LRO_LROC_Image_Mosaic/Marius_Hills.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Image_Mosaic/Marius_Hills.vrt"), Description = [[]] } local treks_LRO_NAC_Mosaic_16S041E_50cmp = { Identifier = "LRO_NAC_Mosaic_16S041E_50cmp", Name = [[LRO LROC Image Mosaic, Montes Pyrenaeus]], - FilePath = asset.localResource("LRO_LROC_Image_Mosaic/Montes_Pyrenaeus.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Image_Mosaic/Montes_Pyrenaeus.vrt"), Description = [[]] } local treks_LRO_NAC_Mosaic_05N000E_50cmp = { Identifier = "LRO_NAC_Mosaic_05N000E_50cmp", Name = [[LRO LROC Image Mosaic, Murchison Crater]], - FilePath = asset.localResource("LRO_LROC_Image_Mosaic/Murchison_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Image_Mosaic/Murchison_Crater.vrt"), Description = [[]] } local treks_LRO_NAC_Mosaic_26S265E_50cmp = { Identifier = "LRO_NAC_Mosaic_26S265E_50cmp", Name = [[LRO LROC Image Mosaic, Orientale 1]], - FilePath = asset.localResource("LRO_LROC_Image_Mosaic/Orientale_1.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Image_Mosaic/Orientale_1.vrt"), Description = [[]] } local treks_LRO_NAC_Mosaic_07N301E_50cmp = { Identifier = "LRO_NAC_Mosaic_07N301E_50cmp", Name = [[LRO LROC Image Mosaic, Reiner Gamma]], - FilePath = asset.localResource("LRO_LROC_Image_Mosaic/Reiner_Gamma.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Image_Mosaic/Reiner_Gamma.vrt"), Description = [[]] } local treks_LRO_NAC_Mosaic_03S286E_50cmp = { Identifier = "LRO_NAC_Mosaic_03S286E_50cmp", Name = [[LRO LROC Image Mosaic, Riccioli Crater]], - FilePath = asset.localResource("LRO_LROC_Image_Mosaic/Riccioli_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Image_Mosaic/Riccioli_Crater.vrt"), Description = [[]] } local treks_LRO_NAC_Mosaic_13N356E_50cmp = { Identifier = "LRO_NAC_Mosaic_13N356E_50cmp", Name = [[LRO LROC Image Mosaic, Rima Bode]], - FilePath = asset.localResource("LRO_LROC_Image_Mosaic/Rima_Bode.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Image_Mosaic/Rima_Bode.vrt"), Description = [[]] } local treks_LRO_NAC_Mosaic_27N318E_50cmp = { Identifier = "LRO_NAC_Mosaic_27N318E_50cmp", Name = [[LRO LROC Image Mosaic, Rimae Prinz]], - FilePath = asset.localResource("LRO_LROC_Image_Mosaic/Rimae_Prinz.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Image_Mosaic/Rimae_Prinz.vrt"), Description = [[]] } local treks_LRO_NAC_Mosaic_60S200E_50cmp = { Identifier = "LRO_NAC_Mosaic_60S200E_50cmp", Name = [[LRO LROC Image Mosaic, South Pole-Aitken Basin Interior]], - FilePath = asset.localResource("LRO_LROC_Image_Mosaic/South_Pole-Aitken_Basin_Interior.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Image_Mosaic/South_Pole-Aitken_Basin_Interior.vrt"), Description = [[]] } local treks_LRO_NAC_Mosaic_51S171E_60cmp = { Identifier = "LRO_NAC_Mosaic_51S171E_60cmp", Name = [[LRO LROC Image Mosaic, South Pole-Aitken Rim]], - FilePath = asset.localResource("LRO_LROC_Image_Mosaic/South_Pole-Aitken_Rim.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Image_Mosaic/South_Pole-Aitken_Rim.vrt"), Description = [[]] } local treks_LRO_NAC_Mosaic_02S167E_50cmp = { Identifier = "LRO_NAC_Mosaic_02S167E_50cmp", Name = [[LRO LROC Image Mosaic, Stratton (Dewar)]], - FilePath = asset.localResource("LRO_LROC_Image_Mosaic/Stratton_Dewar.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Image_Mosaic/Stratton_Dewar.vrt"), Description = [[]] } local treks_LRO_NAC_Mosaic_20N010E_60cmp = { Identifier = "LRO_NAC_Mosaic_20N010E_60cmp", Name = [[LRO LROC Image Mosaic, Sulpicius Gallus]], - FilePath = asset.localResource("LRO_LROC_Image_Mosaic/Sulpicius_Gallus.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Image_Mosaic/Sulpicius_Gallus.vrt"), Description = [[]] } local treks_LRO_NAC_Mosaic_19S129E_50cmp = { Identifier = "LRO_NAC_Mosaic_19S129E_50cmp", Name = [[LRO LROC Image Mosaic, Tsiolkovskiy Crater]], - FilePath = asset.localResource("LRO_LROC_Image_Mosaic/Tsiolkovskiy_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Image_Mosaic/Tsiolkovskiy_Crater.vrt"), Description = [[]] } local treks_LRO_NAC_Mosaic_43S349E_50cmp = { Identifier = "LRO_NAC_Mosaic_43S349E_50cmp", Name = [[LRO LROC Image Mosaic, Tycho Crater]], - FilePath = asset.localResource("LRO_LROC_Image_Mosaic/Tycho_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Image_Mosaic/Tycho_Crater.vrt"), Description = [[]] } + asset.onInitialize(function() openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_LRO_NAC_Mosaic_17S173E_50cmp) openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_LRO_NAC_Mosaic_13S358E_50cmp) @@ -354,9 +391,9 @@ asset.export("LRO_NAC_Mosaic_19S129E_50cmp", treks_LRO_NAC_Mosaic_19S129E_50cmp) asset.export("LRO_NAC_Mosaic_43S349E_50cmp", treks_LRO_NAC_Mosaic_43S349E_50cmp) + asset.meta = { - Name = [[NASA Treks Layers for Moon LRO_LROC_Image_Mosaic], - Version = "1.0", + Name = [[NASA Treks Layers for Moon LRO_LROC_Image_Mosaic]], Author = "NASA/Treks", URL = "https://trek.nasa.gov/moon", License = "NASA/Treks", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_LROC_Image_Mosaic_26cm.asset b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_LROC_Image_Mosaic_26cm.asset index 30c20963ce..a6658993a5 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_LROC_Image_Mosaic_26cm.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_LROC_Image_Mosaic_26cm.asset @@ -6,13 +6,17 @@ local globeIdentifier = asset.require("scene/solarsystem//planets/earth/moon/moon").Moon.Identifier + + local treks_apollo11_26cm_mosaic_byte_geo_1_2_highContrast = { Identifier = "apollo11_26cm_mosaic_byte_geo_1_2_highContrast", Name = [[LRO LROC Image Mosaic 26cm, Apollo 11]], - FilePath = asset.localResource("LRO_LROC_Image_Mosaic_26cm/Apollo_11.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Image_Mosaic_26cm/Apollo_11.vrt"), Description = [[]] } + asset.onInitialize(function() openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_apollo11_26cm_mosaic_byte_geo_1_2_highContrast) end) @@ -24,9 +28,9 @@ end) asset.export("apollo11_26cm_mosaic_byte_geo_1_2_highContrast", treks_apollo11_26cm_mosaic_byte_geo_1_2_highContrast) + asset.meta = { - Name = [[NASA Treks Layers for Moon LRO_LROC_Image_Mosaic_26cm], - Version = "1.0", + Name = [[NASA Treks Layers for Moon LRO_LROC_Image_Mosaic_26cm]], Author = "NASA/Treks", URL = "https://trek.nasa.gov/moon", License = "NASA/Treks", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_LROC_Image_Mosaic_28cm.asset b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_LROC_Image_Mosaic_28cm.asset index f86537c2f3..86b7affc5d 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_LROC_Image_Mosaic_28cm.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_LROC_Image_Mosaic_28cm.asset @@ -6,13 +6,17 @@ local globeIdentifier = asset.require("scene/solarsystem//planets/earth/moon/moon").Moon.Identifier + + local treks_apollo14_28cm_mosaic_byte_geo_1_2_highContrast = { Identifier = "apollo14_28cm_mosaic_byte_geo_1_2_highContrast", Name = [[LRO LROC Image Mosaic 28cm, Apollo 14]], - FilePath = asset.localResource("LRO_LROC_Image_Mosaic_28cm/Apollo_14.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Image_Mosaic_28cm/Apollo_14.vrt"), Description = [[]] } + asset.onInitialize(function() openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_apollo14_28cm_mosaic_byte_geo_1_2_highContrast) end) @@ -24,9 +28,9 @@ end) asset.export("apollo14_28cm_mosaic_byte_geo_1_2_highContrast", treks_apollo14_28cm_mosaic_byte_geo_1_2_highContrast) + asset.meta = { - Name = [[NASA Treks Layers for Moon LRO_LROC_Image_Mosaic_28cm], - Version = "1.0", + Name = [[NASA Treks Layers for Moon LRO_LROC_Image_Mosaic_28cm]], Author = "NASA/Treks", URL = "https://trek.nasa.gov/moon", License = "NASA/Treks", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_LROC_Mosaic.asset b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_LROC_Mosaic.asset index b5e8d0ec54..3df8953539 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_LROC_Mosaic.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_LROC_Mosaic.asset @@ -6,13 +6,17 @@ local globeIdentifier = asset.require("scene/solarsystem//planets/earth/moon/moon").Moon.Identifier + + local treks_LRO_NAC_Mosaic_03N280E_70cm = { Identifier = "LRO_NAC_Mosaic_03N280E_70cm", Name = [[LRO LROC Mosaic, Fresh Crater East of Lents]], - FilePath = asset.localResource("LRO_LROC_Mosaic/Fresh_Crater_East_of_Lents.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Mosaic/Fresh_Crater_East_of_Lents.vrt"), Description = [[]] } + asset.onInitialize(function() openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_LRO_NAC_Mosaic_03N280E_70cm) end) @@ -24,9 +28,9 @@ end) asset.export("LRO_NAC_Mosaic_03N280E_70cm", treks_LRO_NAC_Mosaic_03N280E_70cm) + asset.meta = { - Name = [[NASA Treks Layers for Moon LRO_LROC_Mosaic], - Version = "1.0", + Name = [[NASA Treks Layers for Moon LRO_LROC_Mosaic]], Author = "NASA/Treks", URL = "https://trek.nasa.gov/moon", License = "NASA/Treks", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_LROC_NAC_Image_Mosaic.asset b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_LROC_NAC_Image_Mosaic.asset index 1e92e14ced..1448d2bfbc 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_LROC_NAC_Image_Mosaic.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_LROC_NAC_Image_Mosaic.asset @@ -6,20 +6,25 @@ local globeIdentifier = asset.require("scene/solarsystem//planets/earth/moon/moon").Moon.Identifier + + local treks_LRO_NAC_AvgMosaic_NPole855_1mp_EQ = { Identifier = "LRO_NAC_AvgMosaic_NPole855_1mp_EQ", Name = [[LRO LROC NAC Image Mosaic, N Pole, Avg Merge]], - FilePath = asset.localResource("LRO_LROC_NAC_Image_Mosaic/N_Pole.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_NAC_Image_Mosaic/N_Pole.vrt"), Description = [[This is a visible image mosaic generated using Lunar Reconnaissance Orbiter Camera (LROC) Narrow Angle Camera (NAC) images from the Lunar Reconnaissance Orbiter mission. The images were orthorectified using LRO's Lunar Orbiter Laser Altimeter (LOLA) polar 5 meter/pixel DEM. The mosaic is generated at half the resolution at which the individual LROC NAC images were gathered, which is approximately 0.5 meters/pixel. The mosaic was registered horizontally to the LOLA global DEM.]] } local treks_LRO_NAC_AvgMosaic_SPole855_1mp_EQ = { Identifier = "LRO_NAC_AvgMosaic_SPole855_1mp_EQ", Name = [[LRO LROC NAC Image Mosaic, S Pole, Avg Merge]], - FilePath = asset.localResource("LRO_LROC_NAC_Image_Mosaic/S_Pole.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_NAC_Image_Mosaic/S_Pole.vrt"), Description = [[This is a visible image mosaic generated using Lunar Reconnaissance Orbiter Camera (LROC) Narrow Angle Camera (NAC) images from the Lunar Reconnaissance Orbiter mission. The images were orthorectified using LRO's Lunar Orbiter Laser Altimeter (LOLA) polar 5 meter/pixel DEM. The mosaic is generated at half the resolution at which the individual LROC NAC images were gathered, which is approximately 0.5 meters/pixel. The mosaic was registered horizontally to the LOLA global DEM.]] } + asset.onInitialize(function() openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_LRO_NAC_AvgMosaic_NPole855_1mp_EQ) openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_LRO_NAC_AvgMosaic_SPole855_1mp_EQ) @@ -34,9 +39,9 @@ asset.export("LRO_NAC_AvgMosaic_NPole855_1mp_EQ", treks_LRO_NAC_AvgMosaic_NPole8 asset.export("LRO_NAC_AvgMosaic_SPole855_1mp_EQ", treks_LRO_NAC_AvgMosaic_SPole855_1mp_EQ) + asset.meta = { - Name = [[NASA Treks Layers for Moon LRO_LROC_NAC_Image_Mosaic], - Version = "1.0", + Name = [[NASA Treks Layers for Moon LRO_LROC_NAC_Image_Mosaic]], Author = "NASA/Treks", URL = "https://trek.nasa.gov/moon", License = "NASA/Treks", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_LROC_Rock_Abundance.asset b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_LROC_Rock_Abundance.asset index d0a7610fad..60b5b50712 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_LROC_Rock_Abundance.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_LROC_Rock_Abundance.asset @@ -6,167 +6,193 @@ local globeIdentifier = asset.require("scene/solarsystem//planets/earth/moon/moon").Moon.Identifier + + local treks_LRO_NAC_RockAbnd_17S173E_150cmp = { Identifier = "LRO_NAC_RockAbnd_17S173E_150cmp", Name = [[LRO LROC Rock Abundance, Aitken Crater]], - FilePath = asset.localResource("LRO_LROC_Rock_Abundance/Aitken_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Abundance/Aitken_Crater.vrt"), Description = [[]] } local treks_LRO_NAC_RockAbnd_13S358E_2mp = { Identifier = "LRO_NAC_RockAbnd_13S358E_2mp", Name = [[LRO LROC Rock Abundance, Alphonsus Crater]], - FilePath = asset.localResource("LRO_LROC_Rock_Abundance/Alphonsus_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Abundance/Alphonsus_Crater.vrt"), Description = [[]] } local treks_LRO_NAC_RockAbnd_73N350E_150cmp = { Identifier = "LRO_NAC_RockAbnd_73N350E_150cmp", Name = [[LRO LROC Rock Abundance, Anaxagoras Crater]], - FilePath = asset.localResource("LRO_LROC_Rock_Abundance/Anaxagoras_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Abundance/Anaxagoras_Crater.vrt"), Description = [[]] } local treks_LRO_NAC_RockAbnd_26N004E_150cmp = { Identifier = "LRO_NAC_RockAbnd_26N004E_150cmp", Name = [[LRO LROC Rock Abundance, Apollo 15]], - FilePath = asset.localResource("LRO_LROC_Rock_Abundance/Apollo_15.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Abundance/Apollo_15.vrt"), Description = [[]] } local treks_LRO_NAC_RockAbnd_09S015E_150cmp = { Identifier = "LRO_NAC_RockAbnd_09S015E_150cmp", Name = [[LRO LROC Rock Abundance, Apollo 16]], - FilePath = asset.localResource("LRO_LROC_Rock_Abundance/Apollo_16.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Abundance/Apollo_16.vrt"), Description = [[]] } local treks_LRO_NAC_RockAbnd_37S206E_150cmp = { Identifier = "LRO_NAC_RockAbnd_37S206E_150cmp", Name = [[LRO LROC Rock Abundance, Apollo Basin]], - FilePath = asset.localResource("LRO_LROC_Rock_Abundance/Apollo_Basin.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Abundance/Apollo_Basin.vrt"), Description = [[]] } local treks_LRO_NAC_RockAbnd_25N311E_2mp = { Identifier = "LRO_NAC_RockAbnd_25N311E_2mp", Name = [[LRO LROC Rock Abundance, Aristarchus 1]], - FilePath = asset.localResource("LRO_LROC_Rock_Abundance/Aristarchus_1.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Abundance/Aristarchus_1.vrt"), Description = [[]] } local treks_LRO_NAC_RockAbnd_28N307E_150cmp = { Identifier = "LRO_NAC_RockAbnd_28N307E_150cmp", Name = [[LRO LROC Rock Abundance, Aristarchus 2]], - FilePath = asset.localResource("LRO_LROC_Rock_Abundance/Aristarchus_2.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Abundance/Aristarchus_2.vrt"), Description = [[]] } local treks_LRO_NAC_RockAbnd_19S070E_150cmp = { Identifier = "LRO_NAC_RockAbnd_19S070E_150cmp", Name = [[LRO LROC Rock Abundance, Balmer Basin]], - FilePath = asset.localResource("LRO_LROC_Rock_Abundance/Balmer_Basin.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Abundance/Balmer_Basin.vrt"), Description = [[]] } local treks_LRO_NAC_RockAbnd_20S337E_400cmp = { Identifier = "LRO_NAC_RockAbnd_20S337E_400cmp", Name = [[LRO LROC Rock Abundance, Bullialdus Crater]], - FilePath = asset.localResource("LRO_LROC_Rock_Abundance/Bullialdus_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Abundance/Bullialdus_Crater.vrt"), Description = [[]] } local treks_LRO_NAC_RockAbnd_36N320E_2mp = { Identifier = "LRO_NAC_RockAbnd_36N320E_2mp", Name = [[LRO LROC Rock Abundance, Gruithuisen Domes]], - FilePath = asset.localResource("LRO_LROC_Rock_Abundance/Gruithuisen_Domes.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Abundance/Gruithuisen_Domes.vrt"), Description = [[]] } local treks_LRO_NAC_RockAbnd_00N234E_150cmp = { Identifier = "LRO_NAC_RockAbnd_00N234E_150cmp", Name = [[LRO LROC Rock Abundance, Hertzsprung]], - FilePath = asset.localResource("LRO_LROC_Rock_Abundance/Hertzsprung.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Abundance/Hertzsprung.vrt"), Description = [[]] } local treks_LRO_NAC_RockAbnd_08N332E_2mp = { Identifier = "LRO_NAC_RockAbnd_08N332E_2mp", Name = [[LRO LROC Rock Abundance, Hortensius Domes]], - FilePath = asset.localResource("LRO_LROC_Rock_Abundance/Hortensius_Domes.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Abundance/Hortensius_Domes.vrt"), Description = [[]] } local treks_LRO_NAC_RockAbnd_06N120E_200cmp = { Identifier = "LRO_NAC_RockAbnd_06N120E_200cmp", Name = [[LRO LROC Rock Abundance, King Crater]], - FilePath = asset.localResource("LRO_LROC_Rock_Abundance/King_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Abundance/King_Crater.vrt"), Description = [[]] } local treks_LRO_NAC_RockAbnd_32N292E_2mp = { Identifier = "LRO_NAC_RockAbnd_32N292E_2mp", Name = [[LRO LROC Rock Abundance, Lichtenberg Crater]], - FilePath = asset.localResource("LRO_LROC_Rock_Abundance/Lichtenberg_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Abundance/Lichtenberg_Crater.vrt"), Description = [[]] } local treks_LRO_NAC_RockAbnd_10N058E_150cmp = { Identifier = "LRO_NAC_RockAbnd_10N058E_150cmp", Name = [[LRO LROC Rock Abundance, Mare Crisium]], - FilePath = asset.localResource("LRO_LROC_Rock_Abundance/Mare_Crisium.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Abundance/Mare_Crisium.vrt"), Description = [[]] } local treks_LRO_NAC_RockAbnd_16S041E_150cmp = { Identifier = "LRO_NAC_RockAbnd_16S041E_150cmp", Name = [[LRO LROC Rock Abundance, Montes Pyrenaeus]], - FilePath = asset.localResource("LRO_LROC_Rock_Abundance/Montes_Pyrenaeus.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Abundance/Montes_Pyrenaeus.vrt"), Description = [[]] } local treks_LRO_NAC_RockAbnd_26S265E_200cmp = { Identifier = "LRO_NAC_RockAbnd_26S265E_200cmp", Name = [[LRO LROC Rock Abundance, Orientale 1]], - FilePath = asset.localResource("LRO_LROC_Rock_Abundance/Orientale_1.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Abundance/Orientale_1.vrt"), Description = [[]] } local treks_LRO_NAC_RockAbnd_53N354E_150cmp = { Identifier = "LRO_NAC_RockAbnd_53N354E_150cmp", Name = [[LRO LROC Rock Abundance, Plato Ejecta]], - FilePath = asset.localResource("LRO_LROC_Rock_Abundance/Plato_Ejecta.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Abundance/Plato_Ejecta.vrt"), Description = [[]] } local treks_LRO_NAC_RockAbnd_60S200E_150cmp = { Identifier = "LRO_NAC_RockAbnd_60S200E_150cmp", Name = [[LRO LROC Rock Abundance, South Pole-Aitken Basin Interior]], - FilePath = asset.localResource("LRO_LROC_Rock_Abundance/South_Pole-Aitken_Basin_Interior.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Abundance/South_Pole-Aitken_Basin_Interior.vrt"), Description = [[]] } local treks_LRO_NAC_RockAbnd_02S167E_150cmp = { Identifier = "LRO_NAC_RockAbnd_02S167E_150cmp", Name = [[LRO LROC Rock Abundance, Stratton (Dewar) High Fe Anomaly]], - FilePath = asset.localResource("LRO_LROC_Rock_Abundance/Stratton_Dewar_High_Fe_Anomaly.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Abundance/Stratton_Dewar_High_Fe_Anomaly.vrt"), Description = [[]] } local treks_LRO_NAC_RockAbnd_20N010E_2mp = { Identifier = "LRO_NAC_RockAbnd_20N010E_2mp", Name = [[LRO LROC Rock Abundance, Sulpicius Gallus]], - FilePath = asset.localResource("LRO_LROC_Rock_Abundance/Sulpicius_Gallus.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Abundance/Sulpicius_Gallus.vrt"), Description = [[]] } local treks_LRO_NAC_RockAbnd_43S349E_150cmp = { Identifier = "LRO_NAC_RockAbnd_43S349E_150cmp", Name = [[LRO LROC Rock Abundance, Tycho Crater]], - FilePath = asset.localResource("LRO_LROC_Rock_Abundance/Tycho_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Abundance/Tycho_Crater.vrt"), Description = [[]] } + asset.onInitialize(function() openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_LRO_NAC_RockAbnd_17S173E_150cmp) openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_LRO_NAC_RockAbnd_13S358E_2mp) @@ -244,9 +270,9 @@ asset.export("LRO_NAC_RockAbnd_20N010E_2mp", treks_LRO_NAC_RockAbnd_20N010E_2mp) asset.export("LRO_NAC_RockAbnd_43S349E_150cmp", treks_LRO_NAC_RockAbnd_43S349E_150cmp) + asset.meta = { - Name = [[NASA Treks Layers for Moon LRO_LROC_Rock_Abundance], - Version = "1.0", + Name = [[NASA Treks Layers for Moon LRO_LROC_Rock_Abundance]], Author = "NASA/Treks", URL = "https://trek.nasa.gov/moon", License = "NASA/Treks", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_LROC_Rock_Abundance_Hazard.asset b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_LROC_Rock_Abundance_Hazard.asset index 164674befb..1adcbafd4d 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_LROC_Rock_Abundance_Hazard.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_LROC_Rock_Abundance_Hazard.asset @@ -6,167 +6,193 @@ local globeIdentifier = asset.require("scene/solarsystem//planets/earth/moon/moon").Moon.Identifier + + local treks_LRO_NAC_RockAbndHaz_17S173E_150cmp = { Identifier = "LRO_NAC_RockAbndHaz_17S173E_150cmp", Name = [[LRO LROC Rock Abundance Hazard, Aitken Crater]], - FilePath = asset.localResource("LRO_LROC_Rock_Abundance_Hazard/Aitken_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Abundance_Hazard/Aitken_Crater.vrt"), Description = [[]] } local treks_LRO_NAC_RockAbndHaz_13S358E_2mp = { Identifier = "LRO_NAC_RockAbndHaz_13S358E_2mp", Name = [[LRO LROC Rock Abundance Hazard, Alphonsus Crater]], - FilePath = asset.localResource("LRO_LROC_Rock_Abundance_Hazard/Alphonsus_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Abundance_Hazard/Alphonsus_Crater.vrt"), Description = [[]] } local treks_LRO_NAC_RockAbndHaz_73N350E_150cmp = { Identifier = "LRO_NAC_RockAbndHaz_73N350E_150cmp", Name = [[LRO LROC Rock Abundance Hazard, Anaxagoras Crater]], - FilePath = asset.localResource("LRO_LROC_Rock_Abundance_Hazard/Anaxagoras_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Abundance_Hazard/Anaxagoras_Crater.vrt"), Description = [[]] } local treks_LRO_NAC_RockAbndHaz_26N004E_150cmp = { Identifier = "LRO_NAC_RockAbndHaz_26N004E_150cmp", Name = [[LRO LROC Rock Abundance Hazard, Apollo 15]], - FilePath = asset.localResource("LRO_LROC_Rock_Abundance_Hazard/Apollo_15.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Abundance_Hazard/Apollo_15.vrt"), Description = [[]] } local treks_LRO_NAC_RockAbndHaz_09S015E_150cmp = { Identifier = "LRO_NAC_RockAbndHaz_09S015E_150cmp", Name = [[LRO LROC Rock Abundance Hazard, Apollo 16]], - FilePath = asset.localResource("LRO_LROC_Rock_Abundance_Hazard/Apollo_16.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Abundance_Hazard/Apollo_16.vrt"), Description = [[]] } local treks_LRO_NAC_RockAbndHaz_37S206E_150cmp = { Identifier = "LRO_NAC_RockAbndHaz_37S206E_150cmp", Name = [[LRO LROC Rock Abundance Hazard, Apollo Basin]], - FilePath = asset.localResource("LRO_LROC_Rock_Abundance_Hazard/Apollo_Basin.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Abundance_Hazard/Apollo_Basin.vrt"), Description = [[]] } local treks_LRO_NAC_RockAbndHaz_25N311E_2mp = { Identifier = "LRO_NAC_RockAbndHaz_25N311E_2mp", Name = [[LRO LROC Rock Abundance Hazard, Aristarchus 1]], - FilePath = asset.localResource("LRO_LROC_Rock_Abundance_Hazard/Aristarchus_1.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Abundance_Hazard/Aristarchus_1.vrt"), Description = [[]] } local treks_LRO_NAC_RockAbndHaz_28N307E_150cmp = { Identifier = "LRO_NAC_RockAbndHaz_28N307E_150cmp", Name = [[LRO LROC Rock Abundance Hazard, Aristarchus 2]], - FilePath = asset.localResource("LRO_LROC_Rock_Abundance_Hazard/Aristarchus_2.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Abundance_Hazard/Aristarchus_2.vrt"), Description = [[]] } local treks_LRO_NAC_RockAbndHaz_19S070E_150cmp = { Identifier = "LRO_NAC_RockAbndHaz_19S070E_150cmp", Name = [[LRO LROC Rock Abundance Hazard, Balmer Basin]], - FilePath = asset.localResource("LRO_LROC_Rock_Abundance_Hazard/Balmer_Basin.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Abundance_Hazard/Balmer_Basin.vrt"), Description = [[]] } local treks_LRO_NAC_RockAbndHaz_20S337E_400cmp = { Identifier = "LRO_NAC_RockAbndHaz_20S337E_400cmp", Name = [[LRO LROC Rock Abundance Hazard, Bullialdus Crater]], - FilePath = asset.localResource("LRO_LROC_Rock_Abundance_Hazard/Bullialdus_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Abundance_Hazard/Bullialdus_Crater.vrt"), Description = [[]] } local treks_LRO_NAC_RockAbndHaz_36N320E_2mp = { Identifier = "LRO_NAC_RockAbndHaz_36N320E_2mp", Name = [[LRO LROC Rock Abundance Hazard, Gruithuisen Domes]], - FilePath = asset.localResource("LRO_LROC_Rock_Abundance_Hazard/Gruithuisen_Domes.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Abundance_Hazard/Gruithuisen_Domes.vrt"), Description = [[]] } local treks_LRO_NAC_RockAbndHaz_00N234E_150cmp = { Identifier = "LRO_NAC_RockAbndHaz_00N234E_150cmp", Name = [[LRO LROC Rock Abundance Hazard, Hertzsprung]], - FilePath = asset.localResource("LRO_LROC_Rock_Abundance_Hazard/Hertzsprung.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Abundance_Hazard/Hertzsprung.vrt"), Description = [[]] } local treks_LRO_NAC_RockAbndHaz_08N332E_2mp = { Identifier = "LRO_NAC_RockAbndHaz_08N332E_2mp", Name = [[LRO LROC Rock Abundance Hazard, Hortensius Domes]], - FilePath = asset.localResource("LRO_LROC_Rock_Abundance_Hazard/Hortensius_Domes.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Abundance_Hazard/Hortensius_Domes.vrt"), Description = [[]] } local treks_LRO_NAC_RockAbndHaz_06N120E_200cmp = { Identifier = "LRO_NAC_RockAbndHaz_06N120E_200cmp", Name = [[LRO LROC Rock Abundance Hazard, King Crater]], - FilePath = asset.localResource("LRO_LROC_Rock_Abundance_Hazard/King_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Abundance_Hazard/King_Crater.vrt"), Description = [[]] } local treks_LRO_NAC_RockAbndHaz_32N292E_2mp = { Identifier = "LRO_NAC_RockAbndHaz_32N292E_2mp", Name = [[LRO LROC Rock Abundance Hazard, Lichtenberg Crater]], - FilePath = asset.localResource("LRO_LROC_Rock_Abundance_Hazard/Lichtenberg_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Abundance_Hazard/Lichtenberg_Crater.vrt"), Description = [[]] } local treks_LRO_NAC_RockAbndHaz_10N058E_150cmp = { Identifier = "LRO_NAC_RockAbndHaz_10N058E_150cmp", Name = [[LRO LROC Rock Abundance Hazard, Mare Crisium]], - FilePath = asset.localResource("LRO_LROC_Rock_Abundance_Hazard/Mare_Crisium.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Abundance_Hazard/Mare_Crisium.vrt"), Description = [[]] } local treks_LRO_NAC_RockAbndHaz_16S041E_150cmp = { Identifier = "LRO_NAC_RockAbndHaz_16S041E_150cmp", Name = [[LRO LROC Rock Abundance Hazard, Montes Pyrenaeus]], - FilePath = asset.localResource("LRO_LROC_Rock_Abundance_Hazard/Montes_Pyrenaeus.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Abundance_Hazard/Montes_Pyrenaeus.vrt"), Description = [[]] } local treks_LRO_NAC_RockAbndHaz_26S265E_200cmp = { Identifier = "LRO_NAC_RockAbndHaz_26S265E_200cmp", Name = [[LRO LROC Rock Abundance Hazard, Orientale 1]], - FilePath = asset.localResource("LRO_LROC_Rock_Abundance_Hazard/Orientale_1.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Abundance_Hazard/Orientale_1.vrt"), Description = [[]] } local treks_LRO_NAC_RockAbndHaz_53N354E_150cmp = { Identifier = "LRO_NAC_RockAbndHaz_53N354E_150cmp", Name = [[LRO LROC Rock Abundance Hazard, Plato Ejecta]], - FilePath = asset.localResource("LRO_LROC_Rock_Abundance_Hazard/Plato_Ejecta.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Abundance_Hazard/Plato_Ejecta.vrt"), Description = [[]] } local treks_LRO_NAC_RockAbndHaz_60S200E_150cmp = { Identifier = "LRO_NAC_RockAbndHaz_60S200E_150cmp", Name = [[LRO LROC Rock Abundance Hazard, South Pole-Aitken Basin Interior]], - FilePath = asset.localResource("LRO_LROC_Rock_Abundance_Hazard/South_Pole-Aitken_Basin_Interior.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Abundance_Hazard/South_Pole-Aitken_Basin_Interior.vrt"), Description = [[]] } local treks_LRO_NAC_RockAbndHaz_02S167E_150cmp = { Identifier = "LRO_NAC_RockAbndHaz_02S167E_150cmp", Name = [[LRO LROC Rock Abundance Hazard, Stratton (Dewar) High Fe Anomaly]], - FilePath = asset.localResource("LRO_LROC_Rock_Abundance_Hazard/Stratton_Dewar_High_Fe_Anomaly.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Abundance_Hazard/Stratton_Dewar_High_Fe_Anomaly.vrt"), Description = [[]] } local treks_LRO_NAC_RockAbndHaz_20N010E_2mp = { Identifier = "LRO_NAC_RockAbndHaz_20N010E_2mp", Name = [[LRO LROC Rock Abundance Hazard, Sulpicius Gallus]], - FilePath = asset.localResource("LRO_LROC_Rock_Abundance_Hazard/Sulpicius_Gallus.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Abundance_Hazard/Sulpicius_Gallus.vrt"), Description = [[]] } local treks_LRO_NAC_RockAbndHaz_43S349E_150cmp = { Identifier = "LRO_NAC_RockAbndHaz_43S349E_150cmp", Name = [[LRO LROC Rock Abundance Hazard, Tycho Crater]], - FilePath = asset.localResource("LRO_LROC_Rock_Abundance_Hazard/Tycho_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Abundance_Hazard/Tycho_Crater.vrt"), Description = [[]] } + asset.onInitialize(function() openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_LRO_NAC_RockAbndHaz_17S173E_150cmp) openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_LRO_NAC_RockAbndHaz_13S358E_2mp) @@ -244,9 +270,9 @@ asset.export("LRO_NAC_RockAbndHaz_20N010E_2mp", treks_LRO_NAC_RockAbndHaz_20N010 asset.export("LRO_NAC_RockAbndHaz_43S349E_150cmp", treks_LRO_NAC_RockAbndHaz_43S349E_150cmp) + asset.meta = { - Name = [[NASA Treks Layers for Moon LRO_LROC_Rock_Abundance_Hazard], - Version = "1.0", + Name = [[NASA Treks Layers for Moon LRO_LROC_Rock_Abundance_Hazard]], Author = "NASA/Treks", URL = "https://trek.nasa.gov/moon", License = "NASA/Treks", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_LROC_Rock_Density.asset b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_LROC_Rock_Density.asset index f24a52ba9f..4f0a61c05c 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_LROC_Rock_Density.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_LROC_Rock_Density.asset @@ -6,174 +6,201 @@ local globeIdentifier = asset.require("scene/solarsystem//planets/earth/moon/moon").Moon.Identifier + + local treks_LRO_NAC_RockDen_17S173E_150cmp = { Identifier = "LRO_NAC_RockDen_17S173E_150cmp", Name = [[LRO LROC Rock Density, Aitken Crater]], - FilePath = asset.localResource("LRO_LROC_Rock_Density/Aitken_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Density/Aitken_Crater.vrt"), Description = [[]] } local treks_LRO_NAC_RockDen_13S358E_2mp = { Identifier = "LRO_NAC_RockDen_13S358E_2mp", Name = [[LRO LROC Rock Density, Alphonsus Crater]], - FilePath = asset.localResource("LRO_LROC_Rock_Density/Alphonsus_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Density/Alphonsus_Crater.vrt"), Description = [[]] } local treks_LRO_NAC_RockDen_73N350E_150cmp = { Identifier = "LRO_NAC_RockDen_73N350E_150cmp", Name = [[LRO LROC Rock Density, Anaxagoras Crater]], - FilePath = asset.localResource("LRO_LROC_Rock_Density/Anaxagoras_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Density/Anaxagoras_Crater.vrt"), Description = [[]] } local treks_LRO_NAC_RockDen_26N004E_150cmp = { Identifier = "LRO_NAC_RockDen_26N004E_150cmp", Name = [[LRO LROC Rock Density, Apollo 15]], - FilePath = asset.localResource("LRO_LROC_Rock_Density/Apollo_15.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Density/Apollo_15.vrt"), Description = [[]] } local treks_LRO_NAC_RockDen_09S015E_150cmp = { Identifier = "LRO_NAC_RockDen_09S015E_150cmp", Name = [[LRO LROC Rock Density, Apollo 16]], - FilePath = asset.localResource("LRO_LROC_Rock_Density/Apollo_16.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Density/Apollo_16.vrt"), Description = [[]] } local treks_LRO_NAC_RockDen_37S206E_150cmp = { Identifier = "LRO_NAC_RockDen_37S206E_150cmp", Name = [[LRO LROC Rock Density, Apollo Basin]], - FilePath = asset.localResource("LRO_LROC_Rock_Density/Apollo_Basin.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Density/Apollo_Basin.vrt"), Description = [[]] } local treks_LRO_NAC_RockDen_25N311E_2mp = { Identifier = "LRO_NAC_RockDen_25N311E_2mp", Name = [[LRO LROC Rock Density, Aristarchus 1]], - FilePath = asset.localResource("LRO_LROC_Rock_Density/Aristarchus_1.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Density/Aristarchus_1.vrt"), Description = [[]] } local treks_LRO_NAC_RockDen_28N307E_150cmp = { Identifier = "LRO_NAC_RockDen_28N307E_150cmp", Name = [[LRO LROC Rock Density, Aristarchus 2]], - FilePath = asset.localResource("LRO_LROC_Rock_Density/Aristarchus_2.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Density/Aristarchus_2.vrt"), Description = [[]] } local treks_LRO_NAC_RockDen_19S070E_150cmp = { Identifier = "LRO_NAC_RockDen_19S070E_150cmp", Name = [[LRO LROC Rock Density, Balmer Basin]], - FilePath = asset.localResource("LRO_LROC_Rock_Density/Balmer_Basin.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Density/Balmer_Basin.vrt"), Description = [[]] } local treks_LRO_NAC_RockDen_20S337E_400cmp = { Identifier = "LRO_NAC_RockDen_20S337E_400cmp", Name = [[LRO LROC Rock Density, Bullialdus Crater]], - FilePath = asset.localResource("LRO_LROC_Rock_Density/Bullialdus_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Density/Bullialdus_Crater.vrt"), Description = [[]] } local treks_LRO_NAC_RockDen_36N320E_2mp = { Identifier = "LRO_NAC_RockDen_36N320E_2mp", Name = [[LRO LROC Rock Density, Gruithuisen Domes]], - FilePath = asset.localResource("LRO_LROC_Rock_Density/Gruithuisen_Domes.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Density/Gruithuisen_Domes.vrt"), Description = [[]] } local treks_LRO_NAC_RockDenHaz_17S173E_150cmp = { Identifier = "LRO_NAC_RockDenHaz_17S173E_150cmp", Name = [[LRO LROC Rock Density, Hazard Aitken Crater]], - FilePath = asset.localResource("LRO_LROC_Rock_Density/Hazard_Aitken_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Density/Hazard_Aitken_Crater.vrt"), Description = [[]] } local treks_LRO_NAC_RockDen_00N234E_150cmp = { Identifier = "LRO_NAC_RockDen_00N234E_150cmp", Name = [[LRO LROC Rock Density, Hertzsprung]], - FilePath = asset.localResource("LRO_LROC_Rock_Density/Hertzsprung.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Density/Hertzsprung.vrt"), Description = [[]] } local treks_LRO_NAC_RockDen_08N332E_2mp = { Identifier = "LRO_NAC_RockDen_08N332E_2mp", Name = [[LRO LROC Rock Density, Hortensius Domes]], - FilePath = asset.localResource("LRO_LROC_Rock_Density/Hortensius_Domes.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Density/Hortensius_Domes.vrt"), Description = [[]] } local treks_LRO_NAC_RockDen_06N120E_200cmp = { Identifier = "LRO_NAC_RockDen_06N120E_200cmp", Name = [[LRO LROC Rock Density, King Crater]], - FilePath = asset.localResource("LRO_LROC_Rock_Density/King_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Density/King_Crater.vrt"), Description = [[]] } local treks_LRO_NAC_RockDen_32N292E_2mp = { Identifier = "LRO_NAC_RockDen_32N292E_2mp", Name = [[LRO LROC Rock Density, Lichtenberg Crater]], - FilePath = asset.localResource("LRO_LROC_Rock_Density/Lichtenberg_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Density/Lichtenberg_Crater.vrt"), Description = [[]] } local treks_LRO_NAC_RockDen_10N058E_150cmp = { Identifier = "LRO_NAC_RockDen_10N058E_150cmp", Name = [[LRO LROC Rock Density, Mare Crisium]], - FilePath = asset.localResource("LRO_LROC_Rock_Density/Mare_Crisium.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Density/Mare_Crisium.vrt"), Description = [[]] } local treks_LRO_NAC_RockDen_16S041E_150cmp = { Identifier = "LRO_NAC_RockDen_16S041E_150cmp", Name = [[LRO LROC Rock Density, Montes Pyrenaeus]], - FilePath = asset.localResource("LRO_LROC_Rock_Density/Montes_Pyrenaeus.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Density/Montes_Pyrenaeus.vrt"), Description = [[]] } local treks_LRO_NAC_RockDen_26S265E_200cmp = { Identifier = "LRO_NAC_RockDen_26S265E_200cmp", Name = [[LRO LROC Rock Density, Orientale 1]], - FilePath = asset.localResource("LRO_LROC_Rock_Density/Orientale_1.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Density/Orientale_1.vrt"), Description = [[]] } local treks_LRO_NAC_RockDen_53N354E_150cmp = { Identifier = "LRO_NAC_RockDen_53N354E_150cmp", Name = [[LRO LROC Rock Density, Plato Ejecta]], - FilePath = asset.localResource("LRO_LROC_Rock_Density/Plato_Ejecta.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Density/Plato_Ejecta.vrt"), Description = [[]] } local treks_LRO_NAC_RockDen_60S200E_150cmp = { Identifier = "LRO_NAC_RockDen_60S200E_150cmp", Name = [[LRO LROC Rock Density, South Pole-Aitken Basin Interior]], - FilePath = asset.localResource("LRO_LROC_Rock_Density/South_Pole-Aitken_Basin_Interior.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Density/South_Pole-Aitken_Basin_Interior.vrt"), Description = [[]] } local treks_LRO_NAC_RockDen_02S167E_150cmp = { Identifier = "LRO_NAC_RockDen_02S167E_150cmp", Name = [[LRO LROC Rock Density, Stratton (Dewar) High Fe Anomaly]], - FilePath = asset.localResource("LRO_LROC_Rock_Density/Stratton_Dewar_High_Fe_Anomaly.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Density/Stratton_Dewar_High_Fe_Anomaly.vrt"), Description = [[]] } local treks_LRO_NAC_RockDen_20N010E_2mp = { Identifier = "LRO_NAC_RockDen_20N010E_2mp", Name = [[LRO LROC Rock Density, Sulpicius Gallus]], - FilePath = asset.localResource("LRO_LROC_Rock_Density/Sulpicius_Gallus.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Density/Sulpicius_Gallus.vrt"), Description = [[]] } local treks_LRO_NAC_RockDen_43S349E_150cmp = { Identifier = "LRO_NAC_RockDen_43S349E_150cmp", Name = [[LRO LROC Rock Density, Tycho Crater]], - FilePath = asset.localResource("LRO_LROC_Rock_Density/Tycho_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Density/Tycho_Crater.vrt"), Description = [[]] } + asset.onInitialize(function() openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_LRO_NAC_RockDen_17S173E_150cmp) openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_LRO_NAC_RockDen_13S358E_2mp) @@ -254,9 +281,9 @@ asset.export("LRO_NAC_RockDen_20N010E_2mp", treks_LRO_NAC_RockDen_20N010E_2mp) asset.export("LRO_NAC_RockDen_43S349E_150cmp", treks_LRO_NAC_RockDen_43S349E_150cmp) + asset.meta = { - Name = [[NASA Treks Layers for Moon LRO_LROC_Rock_Density], - Version = "1.0", + Name = [[NASA Treks Layers for Moon LRO_LROC_Rock_Density]], Author = "NASA/Treks", URL = "https://trek.nasa.gov/moon", License = "NASA/Treks", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_LROC_Rock_Density_Hazard.asset b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_LROC_Rock_Density_Hazard.asset index fdc01e0b65..5e004a06de 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_LROC_Rock_Density_Hazard.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_LROC_Rock_Density_Hazard.asset @@ -6,160 +6,185 @@ local globeIdentifier = asset.require("scene/solarsystem//planets/earth/moon/moon").Moon.Identifier + + local treks_LRO_NAC_RockDenHaz_13S358E_2mp = { Identifier = "LRO_NAC_RockDenHaz_13S358E_2mp", Name = [[LRO LROC Rock Density Hazard, Alphonsus Crater]], - FilePath = asset.localResource("LRO_LROC_Rock_Density_Hazard/Alphonsus_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Density_Hazard/Alphonsus_Crater.vrt"), Description = [[]] } local treks_LRO_NAC_RockDenHaz_73N350E_150cmp = { Identifier = "LRO_NAC_RockDenHaz_73N350E_150cmp", Name = [[LRO LROC Rock Density Hazard, Anaxagoras Crater]], - FilePath = asset.localResource("LRO_LROC_Rock_Density_Hazard/Anaxagoras_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Density_Hazard/Anaxagoras_Crater.vrt"), Description = [[]] } local treks_LRO_NAC_RockDenHaz_26N004E_150cmp = { Identifier = "LRO_NAC_RockDenHaz_26N004E_150cmp", Name = [[LRO LROC Rock Density Hazard, Apollo 15]], - FilePath = asset.localResource("LRO_LROC_Rock_Density_Hazard/Apollo_15.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Density_Hazard/Apollo_15.vrt"), Description = [[]] } local treks_LRO_NAC_RockDenHaz_09S015E_150cmp = { Identifier = "LRO_NAC_RockDenHaz_09S015E_150cmp", Name = [[LRO LROC Rock Density Hazard, Apollo 16]], - FilePath = asset.localResource("LRO_LROC_Rock_Density_Hazard/Apollo_16.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Density_Hazard/Apollo_16.vrt"), Description = [[]] } local treks_LRO_NAC_RockDenHaz_37S206E_150cmp = { Identifier = "LRO_NAC_RockDenHaz_37S206E_150cmp", Name = [[LRO LROC Rock Density Hazard, Apollo Basin]], - FilePath = asset.localResource("LRO_LROC_Rock_Density_Hazard/Apollo_Basin.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Density_Hazard/Apollo_Basin.vrt"), Description = [[]] } local treks_LRO_NAC_RockDenHaz_25N311E_2mp = { Identifier = "LRO_NAC_RockDenHaz_25N311E_2mp", Name = [[LRO LROC Rock Density Hazard, Aristarchus 1]], - FilePath = asset.localResource("LRO_LROC_Rock_Density_Hazard/Aristarchus_1.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Density_Hazard/Aristarchus_1.vrt"), Description = [[]] } local treks_LRO_NAC_RockDenHaz_28N307E_150cmp = { Identifier = "LRO_NAC_RockDenHaz_28N307E_150cmp", Name = [[LRO LROC Rock Density Hazard, Aristarchus 2]], - FilePath = asset.localResource("LRO_LROC_Rock_Density_Hazard/Aristarchus_2.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Density_Hazard/Aristarchus_2.vrt"), Description = [[]] } local treks_LRO_NAC_RockDenHaz_19S070E_150cmp = { Identifier = "LRO_NAC_RockDenHaz_19S070E_150cmp", Name = [[LRO LROC Rock Density Hazard, Balmer Basin]], - FilePath = asset.localResource("LRO_LROC_Rock_Density_Hazard/Balmer_Basin.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Density_Hazard/Balmer_Basin.vrt"), Description = [[]] } local treks_LRO_NAC_RockDenHaz_20S337E_400cmp = { Identifier = "LRO_NAC_RockDenHaz_20S337E_400cmp", Name = [[LRO LROC Rock Density Hazard, Bullialdus Crater]], - FilePath = asset.localResource("LRO_LROC_Rock_Density_Hazard/Bullialdus_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Density_Hazard/Bullialdus_Crater.vrt"), Description = [[]] } local treks_LRO_NAC_RockDenHaz_36N320E_2mp = { Identifier = "LRO_NAC_RockDenHaz_36N320E_2mp", Name = [[LRO LROC Rock Density Hazard, Gruithuisen Domes]], - FilePath = asset.localResource("LRO_LROC_Rock_Density_Hazard/Gruithuisen_Domes.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Density_Hazard/Gruithuisen_Domes.vrt"), Description = [[]] } local treks_LRO_NAC_RockDenHaz_00N234E_150cmp = { Identifier = "LRO_NAC_RockDenHaz_00N234E_150cmp", Name = [[LRO LROC Rock Density Hazard, Hertzsprung]], - FilePath = asset.localResource("LRO_LROC_Rock_Density_Hazard/Hertzsprung.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Density_Hazard/Hertzsprung.vrt"), Description = [[]] } local treks_LRO_NAC_RockDenHaz_08N332E_2mp = { Identifier = "LRO_NAC_RockDenHaz_08N332E_2mp", Name = [[LRO LROC Rock Density Hazard, Hortensius Domes]], - FilePath = asset.localResource("LRO_LROC_Rock_Density_Hazard/Hortensius_Domes.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Density_Hazard/Hortensius_Domes.vrt"), Description = [[]] } local treks_LRO_NAC_RockDenHaz_06N120E_200cmp = { Identifier = "LRO_NAC_RockDenHaz_06N120E_200cmp", Name = [[LRO LROC Rock Density Hazard, King Crater]], - FilePath = asset.localResource("LRO_LROC_Rock_Density_Hazard/King_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Density_Hazard/King_Crater.vrt"), Description = [[]] } local treks_LRO_NAC_RockDenHaz_32N292E_2mp = { Identifier = "LRO_NAC_RockDenHaz_32N292E_2mp", Name = [[LRO LROC Rock Density Hazard, Lichtenberg Crater]], - FilePath = asset.localResource("LRO_LROC_Rock_Density_Hazard/Lichtenberg_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Density_Hazard/Lichtenberg_Crater.vrt"), Description = [[]] } local treks_LRO_NAC_RockDenHaz_10N058E_150cmp = { Identifier = "LRO_NAC_RockDenHaz_10N058E_150cmp", Name = [[LRO LROC Rock Density Hazard, Mare Crisium]], - FilePath = asset.localResource("LRO_LROC_Rock_Density_Hazard/Mare_Crisium.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Density_Hazard/Mare_Crisium.vrt"), Description = [[]] } local treks_LRO_NAC_RockDenHaz_16S041E_150cmp = { Identifier = "LRO_NAC_RockDenHaz_16S041E_150cmp", Name = [[LRO LROC Rock Density Hazard, Montes Pyrenaeus]], - FilePath = asset.localResource("LRO_LROC_Rock_Density_Hazard/Montes_Pyrenaeus.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Density_Hazard/Montes_Pyrenaeus.vrt"), Description = [[]] } local treks_LRO_NAC_RockDenHaz_26S265E_200cmp = { Identifier = "LRO_NAC_RockDenHaz_26S265E_200cmp", Name = [[LRO LROC Rock Density Hazard, Orientale 1]], - FilePath = asset.localResource("LRO_LROC_Rock_Density_Hazard/Orientale_1.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Density_Hazard/Orientale_1.vrt"), Description = [[]] } local treks_LRO_NAC_RockDenHaz_53N354E_150cmp = { Identifier = "LRO_NAC_RockDenHaz_53N354E_150cmp", Name = [[LRO LROC Rock Density Hazard, Plato Ejecta]], - FilePath = asset.localResource("LRO_LROC_Rock_Density_Hazard/Plato_Ejecta.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Density_Hazard/Plato_Ejecta.vrt"), Description = [[]] } local treks_LRO_NAC_RockDenHaz_60S200E_150cmp = { Identifier = "LRO_NAC_RockDenHaz_60S200E_150cmp", Name = [[LRO LROC Rock Density Hazard, South Pole-Aitken Basin Interior]], - FilePath = asset.localResource("LRO_LROC_Rock_Density_Hazard/South_Pole-Aitken_Basin_Interior.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Density_Hazard/South_Pole-Aitken_Basin_Interior.vrt"), Description = [[]] } local treks_LRO_NAC_RockDenHaz_02S167E_150cmp = { Identifier = "LRO_NAC_RockDenHaz_02S167E_150cmp", Name = [[LRO LROC Rock Density Hazard, Stratton (Dewar) High Fe Anomaly]], - FilePath = asset.localResource("LRO_LROC_Rock_Density_Hazard/Stratton_Dewar_High_Fe_Anomaly.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Density_Hazard/Stratton_Dewar_High_Fe_Anomaly.vrt"), Description = [[]] } local treks_LRO_NAC_RockDenHaz_20N010E_2mp = { Identifier = "LRO_NAC_RockDenHaz_20N010E_2mp", Name = [[LRO LROC Rock Density Hazard, Sulpicius Gallus]], - FilePath = asset.localResource("LRO_LROC_Rock_Density_Hazard/Sulpicius_Gallus.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Density_Hazard/Sulpicius_Gallus.vrt"), Description = [[]] } local treks_LRO_NAC_RockDenHaz_43S349E_150cmp = { Identifier = "LRO_NAC_RockDenHaz_43S349E_150cmp", Name = [[LRO LROC Rock Density Hazard, Tycho Crater]], - FilePath = asset.localResource("LRO_LROC_Rock_Density_Hazard/Tycho_Crater.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_LROC_Rock_Density_Hazard/Tycho_Crater.vrt"), Description = [[]] } + asset.onInitialize(function() openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_LRO_NAC_RockDenHaz_13S358E_2mp) openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_LRO_NAC_RockDenHaz_73N350E_150cmp) @@ -234,9 +259,9 @@ asset.export("LRO_NAC_RockDenHaz_20N010E_2mp", treks_LRO_NAC_RockDenHaz_20N010E_ asset.export("LRO_NAC_RockDenHaz_43S349E_150cmp", treks_LRO_NAC_RockDenHaz_43S349E_150cmp) + asset.meta = { - Name = [[NASA Treks Layers for Moon LRO_LROC_Rock_Density_Hazard], - Version = "1.0", + Name = [[NASA Treks Layers for Moon LRO_LROC_Rock_Density_Hazard]], Author = "NASA/Treks", URL = "https://trek.nasa.gov/moon", License = "NASA/Treks", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_Laser_Altimeter.asset b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_Laser_Altimeter.asset index 189254ff5d..d126e5599f 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_Laser_Altimeter.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_Laser_Altimeter.asset @@ -6,13 +6,17 @@ local globeIdentifier = asset.require("scene/solarsystem//planets/earth/moon/moon").Moon.Identifier + + local treks_ldam_10 = { Identifier = "ldam_10", Name = [[LRO Laser Altimeter, Albedo Global]], - FilePath = asset.localResource("LRO_Laser_Altimeter/Albedo_Global.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_Laser_Altimeter/Albedo_Global.vrt"), Description = [[The Lunar Orbiter Laser Altimeter (LOLA) experiment on Lunar Reconnaissance Orbiter (LRO) is a laser altimeter that also measures the strength of the return pulse from the lunar surface. These data have been used to estimate the reflectance (albedo) of the lunar surface, including regions lacking direct solar illumination. A new calibration of these data was used to generate a 2016 albedo map that features lower uncertainties overall and more consistent results in the polar regions than the previous 2014 version. (Improved calibration of reflectance data from the LRO Lunar Orbiter Laser Altimeter (LOLA) and implications for space weathering; M. Lemelin, P.G. Lucey, G.A. Neumann, E.M. Mazarico, M.K. Barker, A. Kakazu, D. Trang, D.E. Smith, M.T. Zuber; Icarus, Volume 273, 15 July 2016, Pages 315-328)]] } + asset.onInitialize(function() openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_ldam_10) end) @@ -24,9 +28,9 @@ end) asset.export("ldam_10", treks_ldam_10) + asset.meta = { - Name = [[NASA Treks Layers for Moon LRO_Laser_Altimeter], - Version = "1.0", + Name = [[NASA Treks Layers for Moon LRO_Laser_Altimeter]], Author = "NASA/Treks", URL = "https://trek.nasa.gov/moon", License = "NASA/Treks", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_Mini-RF_Circular_Polarization_Ratio.asset b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_Mini-RF_Circular_Polarization_Ratio.asset index e9225827bf..4441b6e064 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_Mini-RF_Circular_Polarization_Ratio.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_Mini-RF_Circular_Polarization_Ratio.asset @@ -6,13 +6,17 @@ local globeIdentifier = asset.require("scene/solarsystem//planets/earth/moon/moon").Moon.Identifier + + local treks_LRO_MiniRF_CPR_Gray_Global_128ppd = { Identifier = "LRO_MiniRF_CPR_Gray_Global_128ppd", Name = [[LRO Mini-RF Circular Polarization Ratio, Grayscale]], - FilePath = asset.localResource("LRO_Mini-RF_Circular_Polarization_Ratio/Grayscale.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_Mini-RF_Circular_Polarization_Ratio/Grayscale.vrt"), Description = [[]] } + asset.onInitialize(function() openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_LRO_MiniRF_CPR_Gray_Global_128ppd) end) @@ -24,9 +28,9 @@ end) asset.export("LRO_MiniRF_CPR_Gray_Global_128ppd", treks_LRO_MiniRF_CPR_Gray_Global_128ppd) + asset.meta = { - Name = [[NASA Treks Layers for Moon LRO_Mini-RF_Circular_Polarization_Ratio], - Version = "1.0", + Name = [[NASA Treks Layers for Moon LRO_Mini-RF_Circular_Polarization_Ratio]], Author = "NASA/Treks", URL = "https://trek.nasa.gov/moon", License = "NASA/Treks", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_NAC_ColorHillshade.asset b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_NAC_ColorHillshade.asset index fd7ce6346f..a50a7f8fd3 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_NAC_ColorHillshade.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_NAC_ColorHillshade.asset @@ -6,13 +6,17 @@ local globeIdentifier = asset.require("scene/solarsystem//planets/earth/moon/moon").Moon.Identifier + + local treks_20191118demmoseqccolorhillshade = { Identifier = "20191118demmoseqccolorhillshade", Name = [[LRO NAC ColorHillshade, Lacus Mortis]], - FilePath = asset.localResource("LRO_NAC_ColorHillshade/Lacus_Mortis.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_NAC_ColorHillshade/Lacus_Mortis.vrt"), Description = [[TBD]] } + asset.onInitialize(function() openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_20191118demmoseqccolorhillshade) end) @@ -24,9 +28,9 @@ end) asset.export("20191118demmoseqccolorhillshade", treks_20191118demmoseqccolorhillshade) + asset.meta = { - Name = [[NASA Treks Layers for Moon LRO_NAC_ColorHillshade], - Version = "1.0", + Name = [[NASA Treks Layers for Moon LRO_NAC_ColorHillshade]], Author = "NASA/Treks", URL = "https://trek.nasa.gov/moon", License = "NASA/Treks", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_NAC_Mosaic.asset b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_NAC_Mosaic.asset index a9eb29d17d..acd7264e32 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_NAC_Mosaic.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_NAC_Mosaic.asset @@ -6,13 +6,17 @@ local globeIdentifier = asset.require("scene/solarsystem//planets/earth/moon/moon").Moon.Identifier + + local treks_20200415_lacusmortis_orthomos_filled_8bit_lzw = { Identifier = "20200415_lacusmortis_orthomos_filled_8bit_lzw", Name = [[LRO NAC Mosaic, Lacus Mortis, Extended Version]], - FilePath = asset.localResource("LRO_NAC_Mosaic/Lacus_Mortis.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_NAC_Mosaic/Lacus_Mortis.vrt"), Description = [[This is an orthoimage mosaic produced by combining LROC NAC images, for the southwestern area of Lacus Mortis, including Rimae Bürg and the Lacus Mortis Pit. The images are projected onto a DEM mosaic produced by stereo reconstructions in which each of the images is paired with another LROC NAC.]] } + asset.onInitialize(function() openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_20200415_lacusmortis_orthomos_filled_8bit_lzw) end) @@ -24,9 +28,9 @@ end) asset.export("20200415_lacusmortis_orthomos_filled_8bit_lzw", treks_20200415_lacusmortis_orthomos_filled_8bit_lzw) + asset.meta = { - Name = [[NASA Treks Layers for Moon LRO_NAC_Mosaic], - Version = "1.0", + Name = [[NASA Treks Layers for Moon LRO_NAC_Mosaic]], Author = "NASA/Treks", URL = "https://trek.nasa.gov/moon", License = "NASA/Treks", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_NAC_Mosaic_0.5mpp.asset b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_NAC_Mosaic_0.5mpp.asset index a60559a59f..e5871ce7ea 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_NAC_Mosaic_0.5mpp.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_NAC_Mosaic_0.5mpp.asset @@ -6,13 +6,17 @@ local globeIdentifier = asset.require("scene/solarsystem//planets/earth/moon/moon").Moon.Identifier + + local treks_LRO_NAC_Mosaic_50cmpp_VonKarman_v2 = { Identifier = "LRO_NAC_Mosaic_50cmpp_VonKarman_v2", Name = [[LRO NAC Mosaic 0.5mpp, Von Karman]], - FilePath = asset.localResource("LRO_NAC_Mosaic_0.5mpp/Von_Karman.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_NAC_Mosaic_0.5mpp/Von_Karman.vrt"), Description = [[This is an orthorectified NAC mosaic of the Von Karman Crater region for the south pole of the Moon. This mosaic includes a total of 370 orthorectified NAC images: 252 sampled at 0.5 m/px and 118 sampled at 1 m/px. NAC orthoimages have been constructed from EDRs downloaded from the Planetary Data System (PDS) and subsequent USGS-ISIS processing. This mosaic has been coaligned to Chang'e-2 20 m/px DEM which has been coaligned to the USGS 59 m/px LOLA-SELENE DEM using ENVI (v5.6.2) patented auto-coreg. Most of the area used stereo-photogrammetrically processing of LROC-NAC stereo-pairs with the UCL CASPGO 3D mapping system, CASP-GO is described in Tao, Y., Muller, J.-P. et al. (2018) Massive Stereo-based DTM Production for Mars on Cloud Computers. Planetary Space Science 154, 30-58 (2018). doi: 10.1016/j.pss.2018.02.012 and CASP-GO is now integrated into ASP (https://stereopipeline.readthedocs.io/en/latest/experimental.html?highlight=casp-go#the-casp-go-stereo-processing-system) as part of the NASA PDART program. Individual NAC orthoimages mosaicked together using ArcGIS Pro (v2.9.2). A color balancing algorithm has been applied to roughly correct for color differences at the seams of NAC images. This data has been made available by and should be credited to: Yu Tao and Jan-Peter Muller, Imaging Group, Mullard Space Science Laboratory, University College London.]] } + asset.onInitialize(function() openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_LRO_NAC_Mosaic_50cmpp_VonKarman_v2) end) @@ -24,9 +28,9 @@ end) asset.export("LRO_NAC_Mosaic_50cmpp_VonKarman_v2", treks_LRO_NAC_Mosaic_50cmpp_VonKarman_v2) + asset.meta = { - Name = [[NASA Treks Layers for Moon LRO_NAC_Mosaic_0.5mpp], - Version = "1.0", + Name = [[NASA Treks Layers for Moon LRO_NAC_Mosaic_0.5mpp]], Author = "NASA/Treks", URL = "https://trek.nasa.gov/moon", License = "NASA/Treks", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_NAC_Mosaic_1mpp.asset b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_NAC_Mosaic_1mpp.asset index b42b2bf72b..5b6d6f2fb3 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_NAC_Mosaic_1mpp.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_NAC_Mosaic_1mpp.asset @@ -6,13 +6,17 @@ local globeIdentifier = asset.require("scene/solarsystem//planets/earth/moon/moon").Moon.Identifier + + local treks_LRO_NAC_Mosaic_1mpp = { Identifier = "LRO_NAC_Mosaic_1mpp", Name = [[LRO NAC Mosaic 1mpp, Von Karman]], - FilePath = asset.localResource("LRO_NAC_Mosaic_1mpp/Von_Karman.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_NAC_Mosaic_1mpp/Von_Karman.vrt"), Description = [[This is an orthorectified NAC mosaic of the Von Karman Crater region for the south pole of the Moon. This mosaic includes 118 individual orthorectified NAC images sampled at 1 m/px. NAC orthoimages have been constructed from EDRs downloaded from the Planetary Data System (PDS) and subsequent USGS-ISIS processing. This mosaic has been coaligned to Chang’e 2 20 m/px DEM which has been coaligned to the USGS 59 m/px LOLA-SELENE DEM using ENVI (v5.6.2) patented auto-coreg. Individual NAC orthoimages have been mosaicked together using ArcGIS Pro (v2.9.0). A color balancing algorithm has been applied to roughly correct for color differences at the seams of NAC images. This data has been made available by and should be credited to: Yu Tao and Jan-Peter Muller, Imaging Group, Mullard Space Science Laboratory, University College London.]] } + asset.onInitialize(function() openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_LRO_NAC_Mosaic_1mpp) end) @@ -24,9 +28,9 @@ end) asset.export("LRO_NAC_Mosaic_1mpp", treks_LRO_NAC_Mosaic_1mpp) + asset.meta = { - Name = [[NASA Treks Layers for Moon LRO_NAC_Mosaic_1mpp], - Version = "1.0", + Name = [[NASA Treks Layers for Moon LRO_NAC_Mosaic_1mpp]], Author = "NASA/Treks", URL = "https://trek.nasa.gov/moon", License = "NASA/Treks", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_NAC_PSR_Mosaic_20mpp.asset b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_NAC_PSR_Mosaic_20mpp.asset index d0ca877f5b..4d4ca5da2a 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_NAC_PSR_Mosaic_20mpp.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_NAC_PSR_Mosaic_20mpp.asset @@ -6,20 +6,25 @@ local globeIdentifier = asset.require("scene/solarsystem//planets/earth/moon/moon").Moon.Identifier + + local treks_NAC_POLE_PSR_NORTH_STRETCH_EQ = { Identifier = "NAC_POLE_PSR_NORTH_STRETCH_EQ", Name = [[LRO NAC PSR Mosaic 20mpp, N Pole]], - FilePath = asset.localResource("LRO_NAC_PSR_Mosaic_20mpp/N_Pole.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_NAC_PSR_Mosaic_20mpp/N_Pole.vrt"), Description = [[This is an uncontrolled mosaic generated from images taken by the Narrow Angle Camera (NAC) onboard the Lunar Reconnaissance Orbiter (LRO) for the North Pole region of the Moon. The NAC mosaics have been trimmed to the Permanently Shadowed Region (PSR) shapefile, providing visible NAC image coverage of the PSRs only. Acquisition of NAC PSR observations were optimized over several campaigns to maximize signal-to-noise ratio (SNR), resulting in a comprehensive dataset that is systematically reviewed and analyzed. Observations are acquired at a variety of pixel scales (2 to 20 m/px). The final PSR mosaics are assembled from re-sampled images to 20 m/px, and ordering of images is based on image quality and areal coverage of individual PSRs. A total of 550 NAC images were used to create a North Pole PSR mosaic at 20 m/px, 90° to 80° latitude, and -180° to 180° longitude. This mosaic has been merged with the existing LROC NAC North Pole RDR product to replace over-saturated illuminated polar areas.]] } local treks_NAC_POLE_PSR_SOUTH_STRETCH_EQ = { Identifier = "NAC_POLE_PSR_SOUTH_STRETCH_EQ", Name = [[LRO NAC PSR Mosaic 20mpp, S Pole]], - FilePath = asset.localResource("LRO_NAC_PSR_Mosaic_20mpp/S_Pole.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_NAC_PSR_Mosaic_20mpp/S_Pole.vrt"), Description = [[This is an uncontrolled mosaic generated from images taken by the Narrow Angle Camera (NAC) onboard the Lunar Reconnaissance Orbiter (LRO) for the South Pole region of the Moon. The NAC mosaics have been trimmed to the Permanently Shadowed Region (PSR) shapefile, providing visible NAC image coverage of the PSRs only. Acquisition of NAC PSR observations were optimized over several campaigns to maximize signal-to-noise ratio (SNR), resulting in a comprehensive dataset that is systematically reviewed and analyzed. Observations are acquired at a variety of pixel scales (2 to 20 m/px). The final PSR mosaics are assembled from re-sampled images to 20 m/px, and ordering of images is based on image quality and areal coverage of individual PSRs. A total of 550 NAC images were used to create a South Pole PSR mosaic at 20 m/px, 90° to 80° latitude, and -180° to 180° longitude. This mosaic has been merged with the existing LROC NAC South Pole RDR product to replace over-saturated illuminated polar areas.]] } + asset.onInitialize(function() openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_NAC_POLE_PSR_NORTH_STRETCH_EQ) openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_NAC_POLE_PSR_SOUTH_STRETCH_EQ) @@ -34,9 +39,9 @@ asset.export("NAC_POLE_PSR_NORTH_STRETCH_EQ", treks_NAC_POLE_PSR_NORTH_STRETCH_E asset.export("NAC_POLE_PSR_SOUTH_STRETCH_EQ", treks_NAC_POLE_PSR_SOUTH_STRETCH_EQ) + asset.meta = { - Name = [[NASA Treks Layers for Moon LRO_NAC_PSR_Mosaic_20mpp], - Version = "1.0", + Name = [[NASA Treks Layers for Moon LRO_NAC_PSR_Mosaic_20mpp]], Author = "NASA/Treks", URL = "https://trek.nasa.gov/moon", License = "NASA/Treks", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_NAC_and_CE-2_CCD_Mosaic_1mpp.asset b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_NAC_and_CE-2_CCD_Mosaic_1mpp.asset index a815a0aa32..072db19e9b 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_NAC_and_CE-2_CCD_Mosaic_1mpp.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_NAC_and_CE-2_CCD_Mosaic_1mpp.asset @@ -6,13 +6,17 @@ local globeIdentifier = asset.require("scene/solarsystem//planets/earth/moon/moon").Moon.Identifier + + local treks_LRO_NAC_CE2_Mosaic_1mpp = { Identifier = "LRO_NAC_CE2_Mosaic_1mpp", Name = [[LRO NAC and CE-2 CCD Mosaic 1mpp, Von Karman]], - FilePath = asset.localResource("LRO_NAC_and_CE-2_CCD_Mosaic_1mpp/Von_Karman.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_NAC_and_CE-2_CCD_Mosaic_1mpp/Von_Karman.vrt"), Description = [[This is an orthorectified NAC and Chang’e-2 mosaic of the Von Karman Crater region for the south pole of the Moon. This mosaic includes 118 individual orthorectified NAC images sampled at 1 m/px and has been mosaicked on top of the respective Chang’e 7 m/px orthomosaic. NAC orthoimages have been constructed from EDRs downloaded from the Planetary Data System (PDS) and subsequent USGS-ISIS processing. This mosaic has been coaligned to Chang’e-2 20 m/px DEM which has been coaligned to the USGS 59 m/px LOLA-SELENE DEM using ENVI (v5.6.2) patented auto-coreg. Individual NAC orthoimages and the underlying Chang’e ortho product have been mosaicked together using ArcGIS Pro (v2.9.0). A color balancing algorithm has been applied to roughly correct for color differences at the seams of NAC images. This data has been made available by and should be credited to: Yu Tao and Jan-Peter Muller, Imaging Group, Mullard Space Science Laboratory, University College London.]] } + asset.onInitialize(function() openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_LRO_NAC_CE2_Mosaic_1mpp) end) @@ -24,9 +28,9 @@ end) asset.export("LRO_NAC_CE2_Mosaic_1mpp", treks_LRO_NAC_CE2_Mosaic_1mpp) + asset.meta = { - Name = [[NASA Treks Layers for Moon LRO_NAC_and_CE-2_CCD_Mosaic_1mpp], - Version = "1.0", + Name = [[NASA Treks Layers for Moon LRO_NAC_and_CE-2_CCD_Mosaic_1mpp]], Author = "NASA/Treks", URL = "https://trek.nasa.gov/moon", License = "NASA/Treks", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_Narrow_Angle_Camera.asset b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_Narrow_Angle_Camera.asset index 6cce87ea53..4ca1d55652 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_Narrow_Angle_Camera.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_Narrow_Angle_Camera.asset @@ -6,10 +6,13 @@ local globeIdentifier = asset.require("scene/solarsystem//planets/earth/moon/moon").Moon.Identifier + + local treks_LRO_NAC_Apollo11_Mosaic_p = { Identifier = "LRO_NAC_Apollo11_Mosaic_p", Name = [[LRO Narrow Angle Camera, Apollo 11 Landing Site]], - FilePath = asset.localResource("LRO_Narrow_Angle_Camera/Apollo_11_Landing_Site.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_Narrow_Angle_Camera/Apollo_11_Landing_Site.vrt"), Description = [[This is the site where American astronauts Neil Armstrong and Edwin “Buzz” Aldrin made the first human landing on the Moon on July 20, 1969. Armstrong and Aldrin landed here aboard the lunar module Eagle, while Michael Collins remained in orbit around the Moon in the command module Columbia. Armstrong and Aldrin conducted one EVA on the lunar surface lasting 2 hours, 31 minutes 40 seconds, remaining within 60 meters of the lunar module. They collected 21.55 kg of lunar sample material for return to the Earth. In this LRO NAC view of the landing site, the descent stage of the Eagle is the largest man-made object visible. The dark tracks of the astronauts' footprints extend out from it clustered primarily in 3 directions. To the northwest, the tracks extend to the location where the astronauts set up a TV camera. To the south, tracks extend to where a Lunar Ranging Retroreflector and the Passive Seismic Experiment Package were deployed. To the east, the tracks extend to the rim of Little West Crater. @@ -21,7 +24,8 @@ The landing site, located at 0.67416 N, 23.47314 E, is in the southwest part of local treks_LRO_NAC_Apollo12_Mosaic_p = { Identifier = "LRO_NAC_Apollo12_Mosaic_p", Name = [[LRO Narrow Angle Camera, Apollo 12 Landing Site]], - FilePath = asset.localResource("LRO_Narrow_Angle_Camera/Apollo_12_Landing_Site.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_Narrow_Angle_Camera/Apollo_12_Landing_Site.vrt"), Description = [[This is the site where American astronauts Charles “Pete” Conrad and Alan Bean made the second human landing on the Moon on November 19, 1969. Conrad and Bean landed here aboard the lunar module Intrepid, while Richard Gordon remained in orbit around the Moon in the command module Yankee Clipper. Apollo 12 demonstrated the key capability of a precision landing, with Intrepid touching down less than 200 meters from the site where the Surveyor 3 probe had landed on April 20, 1967. Conrad and Bean conducted 2 EVAs on the lunar surface. The first, lasting 3 hours, 56 minutes, extended to the northwest for deployment of the ALSEP instrument package, and the continued to the rim of a 350-meter diameter crater dubbed Middle Crescent. The second EVA, lasting 3 hours, 49 minutes, was a loop trip of 1.5 km around several craters to the south, including retrieval of a camera from Surveyor 3. They collected 34.35 kilograms of lunar sample material for return to the Earth. In this LRO NAC view of the landing site, the descent stage of the Intrepid is the largest man-made object visible. The dark tracks of the astronauts' footprints extend out from it. To the northwest, the tracks extend about 130 meters to were components of the ALSEP can be seen. About 160 meters to the southeast of Intrepid, Surveyor 3 is visible with a dense cluster of footprints around it. @@ -33,7 +37,8 @@ The landing site, located at 3.0138 S N, 23.4219 W, is in the southern part of O local treks_LRO_NAC_Apollo14_Mosaic_p = { Identifier = "LRO_NAC_Apollo14_Mosaic_p", Name = [[LRO Narrow Angle Camera, Apollo 14 Landing Site]], - FilePath = asset.localResource("LRO_Narrow_Angle_Camera/Apollo_14_Landing_Site.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_Narrow_Angle_Camera/Apollo_14_Landing_Site.vrt"), Description = [[This is the site where American astronauts Alan Shepard and Edgar Mitchell made the third human landing on the Moon on February 5, 1971. Shepard and Mitchell landed here aboard the lunar module Antares, while Stuart Roosa remained in orbit around the Moon in the command module Kitty Hawk. Shephard and Mitchell conducted 2 EVAs on the lunar surface. The first, lasting 4 hours, 47 minutes, 50 seconds, extended to the west for deployment of the ALSEP instrument package, included collection of a contingency sample, and covered a total distance of about 550 meters. The second EVA, lasting 4 hours, 34 minutes, 41 seconds, was intended to visit Cone Crater, 370 meters in diameter and located approximately 1.2 kilometers to the northeast. To help transport the load of equipment and retrieved samples on this EVA, the astronauts were equipped with a hand-pulled cart, the Modular Equipment Transporter (MET). The rough, hummocky terrain made navigation difficult during the second EVA, and the astronauts were not able to identify the rim of Cone Crater, though later imagery showed that they reached a point about 20 meters south of the crater rim. Shepard and Mitchell collected 42.80 kilograms of lunar sample material for return to the Earth. In this LRO NAC view of the landing site, the descent stage of the Antares is the largest man-made object visible. The dark tracks of the astronauts' footprints from the first EVA extend to the west, where components of the ALSEP are visible. Extending to the northeast of Antares' landing site, the track of the astronauts' footprints and the tracks of the MET's wheels can be traced toward Cone Crater. @@ -44,7 +49,8 @@ The landing site, located at 3.64589 S, 17.47194 W, was selected largely with th local treks_LRO_NAC_Apollo15_Mosaic_p = { Identifier = "LRO_NAC_Apollo15_Mosaic_p", Name = [[LRO Narrow Angle Camera, Apollo 15 Landing Site]], - FilePath = asset.localResource("LRO_Narrow_Angle_Camera/Apollo_15_Landing_Site.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_Narrow_Angle_Camera/Apollo_15_Landing_Site.vrt"), Description = [[This is the site where American astronauts David Scott and James Irwin made the fourth human landing on the Moon on July 30, 1971. Scott and Irwin landed here aboard the lunar module Falcon, while Alfred Worden remained in orbit around the Moon in the command module Endeavour. This was the first of the Apollo J missions. These featured a greater emphasis on conducting science on the Moon along with longer stays on the lunar surface. The J missions also included a lunar rover which allowed the astronauts to drive across the lunar surface, covering far greater areas, and carrying back more sample material. Scott first conducted a 33-minute stand-up EVA, surveying and imaging the local terrain through the upper hatch of the lunar module. Scott and Irwin then conducted 3 surface EVAs. The first, lasting 6 hours, 32 minutes, 42 seconds, involved deploying the Lunar Rover, and driving in it on a 10.3-km geological traverse. They drove southwest to the edge of Hadley Rille and then continued south along the edge of the rille. At the end of the first surface EVA, they deployed the Apollo Lunar Surface Experiments Package (ALSEP) approximately 110 meters north-northwest of the lunar module. The second surface EVA, lasting 7 hours, 12 minutes, 14 seconds, featured a 12.5-kilometer lunar rover traverse southeast across the mare and along the base of the Apennine Mountains. The third surface EVA, lasting 4 hours, 49 minutes, 50 seconds, had the astronauts making a 5.1-kilometer traverse west to Hadley Rille northwest along the edge of the rille, and east across the mare back to the lunar module. Scott and Irwin collected 77 kilograms of lunar sample material for return to the Earth. In this LRO NAC view of the landing site, the descent stage of the Falcon is the largest man-made object visible. The dark markings of the astronauts' footprints and rover tire tracks are visible around the landing site, especially extending to the north-northwest, where components of the ALSEP are visible. @@ -56,7 +62,8 @@ The landing site, located at 26.13239 N, 3.63330 E, was selected to provide acce local treks_LRO_NAC_Apollo16_Mosaic_p = { Identifier = "LRO_NAC_Apollo16_Mosaic_p", Name = [[LRO Narrow Angle Camera, Apollo 16 Landing Site]], - FilePath = asset.localResource("LRO_Narrow_Angle_Camera/Apollo_16_Landing_Site.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_Narrow_Angle_Camera/Apollo_16_Landing_Site.vrt"), Description = [[This is the site where American astronauts John Young and Charles Duke made the fifth human landing on the Moon on April 21, 1972. Young and Duke landed here aboard the lunar module Orion, while Ken Mattingly remained in orbit around the Moon in the command module Casper. Young and Duke conducted 3 surface EVAs. The first, lasting 7 hours, 11 minutes, 2 seconds, included deploying the Apollo Lunar Surface Experiments Package (ALSEP) approximately 95 meters southwest of the lunar module, and conducting a geologic traverse using the lunar rover to a couple of small craters within about 1,400 meters to the west of the landing site. The second surface EVA, lasting 7 hours, 23 minutes, 9 seconds, featured an 11.1-kilometer lunar rover drive south to the Cinco Crater area of Stone Mountain, making stops at 6 stations along the way. across the mare and along the base of the Apennine Mountains. The third surface EVA, lasting 5 hours, 40 minutes, 3 seconds, had the astronauts making a 11.4-kilometer traverse north to North Ray Crater. Young and Duke collected 95.71 kilograms of lunar sample material for return to the Earth. In this LRO NAC view of the landing site, the descent stage of the Orion is the largest man-made object visible, within a dark halo on the western rim of a ~30-meter crater. The dark markings of the astronauts' footprints and rover tire tracks are visible around the landing site, especially extending to the southwest, where components of the ALSEP are visible. @@ -68,63 +75,72 @@ With the previous Apollo landings having focused on the low, flat, basaltic terr local treks_NAC_DTM_APOLLO17_CLRSHADE = { Identifier = "NAC_DTM_APOLLO17_CLRSHADE", Name = [[LRO Narrow Angle Camera, ColorHillShade Apollo 17]], - FilePath = asset.localResource("LRO_Narrow_Angle_Camera/ColorHillShade_Apollo_17.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_Narrow_Angle_Camera/ColorHillShade_Apollo_17.vrt"), Description = [[Color-coded topography draped over the shaded relief from a 5m Digital Terrain Model (DTM) of the Apollo 17 landing site created with Narrow Angle Camera (NAC) stereo image pairs from the Lunar Reconnaissance Orbiter Camera (LROC) aboard the Lunar Reconnaissance Orbiter (LRO). The shaded relief image was generated with the sun azimuth of 315 degrees (northwest) and sun altitude of 45 degrees. ]] } local treks_NAC_DTM_APOLLO17_SHADE = { Identifier = "NAC_DTM_APOLLO17_SHADE", Name = [[LRO Narrow Angle Camera, HillShade Apollo 17]], - FilePath = asset.localResource("LRO_Narrow_Angle_Camera/HillShade_Apollo_17.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_Narrow_Angle_Camera/HillShade_Apollo_17.vrt"), Description = [[This is a shaded-relief derived from a 5m Digital Terrain Model (DTM) of the Apollo 17 landing site created with Narrow Angle Camera (NAC) stereo image pairs from the Lunar Reconnaissance Orbiter Camera (LROC) aboard the Lunar Reconnaissance Orbiter (LRO). The shaded relief image was generated with the sun azimuth of 315 degrees (northwest) and sun altitude of 45 degrees. Image is a TIFF image, 8 bits/sample, 1 samples/pixel in single image plane configuration.]] } local treks_A11_60x60kmeq = { Identifier = "A11_60x60kmeq", Name = [[LRO Narrow Angle Camera, Mosaic Apollo 11]], - FilePath = asset.localResource("LRO_Narrow_Angle_Camera/Mosaic_Apollo_11.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_Narrow_Angle_Camera/Mosaic_Apollo_11.vrt"), Description = [[This is a Lunar Reconnaisance Orbiter (LRO) Narrow Angle Camera (NAC) mosaic centered at the Apollo 11 landing site with an extent of 60x60km. Each NAC image was processed in ISIS3 at a resolution of 50cm pixel, color balanced, and synthesized into a single output.]] } local treks_A12_60x60km0_3eq = { Identifier = "A12_60x60km0_3eq", Name = [[LRO Narrow Angle Camera, Mosaic Apollo 12]], - FilePath = asset.localResource("LRO_Narrow_Angle_Camera/Mosaic_Apollo_12.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_Narrow_Angle_Camera/Mosaic_Apollo_12.vrt"), Description = [[This is a Lunar Reconnaissance Orbiter (LRO) Narrow Angle Camera (NAC) mosaic centered at the Apollo 12 landing site with an extent of 60x60km. Each NAC image was processed in ISIS3 at a resolution of 50cm pixel, color balanced, and synthesized into a single output. Apollo 12 was second crewed mission to land on the surface of the Moon. The mission launched on November 14th 1969, and landed five days later at the Ocean of Storms within walking distance of the Surveyor 3 spacecraft.]] } local treks_A14_60x60km0_3eq = { Identifier = "A14_60x60km0_3eq", Name = [[LRO Narrow Angle Camera, Mosaic Apollo 14]], - FilePath = asset.localResource("LRO_Narrow_Angle_Camera/Mosaic_Apollo_14.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_Narrow_Angle_Camera/Mosaic_Apollo_14.vrt"), Description = [[This is a Lunar Reconnaissance Orbiter (LRO) Narrow Angle Camera (NAC) mosaic centered at the Apollo 14 landing site with an extent of 60x60km. Each NAC image was processed in ISIS3 at a resolution of 50cm pixel, color balanced, and synthesized into a single output. Apollo 14 landed on the Moon February 15th 1971.]] } local treks_A15_60x60km0_2eq = { Identifier = "A15_60x60km0_2eq", Name = [[LRO Narrow Angle Camera, Mosaic Apollo 15]], - FilePath = asset.localResource("LRO_Narrow_Angle_Camera/Mosaic_Apollo_15.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_Narrow_Angle_Camera/Mosaic_Apollo_15.vrt"), Description = [[This is a Lunar Reconnaisance Orbiter (LRO) Narrow Angle Camera (NAC) mosaic centered at the Apollo 15 landing site with an extent of 60x60km. Each NAC image was processed in ISIS3 at a resolution of 50cm pixel, color balanced, and synthesized into a single output.]] } local treks_A16_60x60kmeq = { Identifier = "A16_60x60kmeq", Name = [[LRO Narrow Angle Camera, Mosaic Apollo 16]], - FilePath = asset.localResource("LRO_Narrow_Angle_Camera/Mosaic_Apollo_16.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_Narrow_Angle_Camera/Mosaic_Apollo_16.vrt"), Description = [[This is a Lunar Reconnaisance Orbiter (LRO) Narrow Angle Camera (NAC) mosaic centered at the Apollo 16 landing site with an extent of 60x60km. Each NAC image was processed in ISIS3 at a resolution of 50cm pixel, color balanced, and synthesized into a single output.]] } local treks_A17_60x60kmeq = { Identifier = "A17_60x60kmeq", Name = [[LRO Narrow Angle Camera, Mosaic Apollo 17]], - FilePath = asset.localResource("LRO_Narrow_Angle_Camera/Mosaic_Apollo_17.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_Narrow_Angle_Camera/Mosaic_Apollo_17.vrt"), Description = [[This is a Lunar Reconnaisance Orbiter (LRO) Narrow Angle Camera (NAC) mosaic centered at the Apollo 17 landing site with an extent of 60x60km. Each NAC image was processed in ISIS3 at a resolution of 50cm pixel, color balanced, and synthesized into a single output.]] } local treks_M129086118ndgcs = { Identifier = "M129086118ndgcs", Name = [[LRO Narrow Angle Camera, Mosaic Apollo 17 Landing Site]], - FilePath = asset.localResource("LRO_Narrow_Angle_Camera/Mosaic_Apollo_17_Landing_Site.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_Narrow_Angle_Camera/Mosaic_Apollo_17_Landing_Site.vrt"), Description = [[This is the site where American astronauts Eugene Cernan and Harrison Schmitt made the sixth and final human landing on the Moon of the Apollo program on December 11, 1972. Cernan and Schmitt landed here aboard the lunar module Challenger, while Ronald Evans remained in orbit around the Moon in the command module America. With a PhD in geology, Schmitt was the first and only professional scientist to have visited the Moon. Cernan and Schmitt conducted 3 surface EVAs. The first, lasting 7 hours, 11 minutes, 53 seconds, included deploying the Apollo Lunar Surface Experiments Package (ALSEP) approximately 185 meters west-northwest of the lunar module, and conducting a 3.5-kilometer geologic traverse using the lunar rover to the rim of Steno, a small impact crater south of the landing site. The second surface EVA, lasting 7 hours, 36 minutes, 56 seconds, featured a 20.4-kilometer geologic traverse south and west. Stops included a location at the base of South Massif where a landslide had brought ancient highland rocks from high on the mountain into reach, and at Shorty Crater, which was found to be impact rather than volcanic in origin, but which excavated an older volcanic deposit which yielded the famous , beads of volcanic glass erupted in a lunar fire fountain. The third surface EVA, lasting 7 hours, 15 minutes, 8 seconds, had the astronauts making a 20.4-kilometer geologic traverse north and east to North Massif. Stops on this traverse included taking samples of early lunar crust material from large boulders near the base of the massif that had rolled down from high up on the mountain. Cernan and Schmitt collected 110.52 kilograms of lunar sample material for return to the Earth. In this LRO NAC view of the landing site, the descent stage of the Challenger is the largest man-made object visible. The dark markings of the astronauts' footprints and rover tire tracks are visible around the landing site, especially extending to the west-northwest, where components of the ALSEP are visible. @@ -135,80 +151,92 @@ The landing site, located at 20.1911 N, 30.7723 E, is in a narrow valley in the local treks_ingenii_skylight = { Identifier = "ingenii_skylight", Name = [[LRO Narrow Angle Camera, Mosaic Ingenii]], - FilePath = asset.localResource("LRO_Narrow_Angle_Camera/Mosaic_Ingenii.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_Narrow_Angle_Camera/Mosaic_Ingenii.vrt"), Description = [[Mare Ingenii is notable for being one of the few examples of a mare on the far side of the Moon, and the site for notable lunar swirls, enigmatic bright albedo features. This was enough to qualify the area as a Constellation Region of Interest. However, the area became even more interesting with the discovery of a lunar pit in imagery obtained using the Kaguya Terrain Camera. It measures about 130 m in diameter, and researchers speculate that the pit could be a skylight resulting from the collapse of the roof of a lava tube. Whether this is actually the case, and if so, the accessibility and extent of the lava tube have yet to be determined. However, such lava tubes are of great interest as potential locations for lunar bases, offering protection from extreme swings in temperature, galactic and solar radiation, and meteoroid impacts. This data layer was obtained using the Narrow Angle Camera aboard the Lunar Reconnaissance Orbiter and is a is a mosaic of 2 NAC strips centered on the Mare Ingenii pit.]] } local treks_marius_skylight = { Identifier = "marius_skylight", Name = [[LRO Narrow Angle Camera, Mosaic Marius]], - FilePath = asset.localResource("LRO_Narrow_Angle_Camera/Mosaic_Marius.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_Narrow_Angle_Camera/Mosaic_Marius.vrt"), Description = [[The Marius Hills represents one of the most prominent collection of volcanic domes on the Moon. The area was a candidate landing site for the Apollo program and was also designated as a Constellation Region of Interest. It remains a site under consideration for possible future missions. In addition to volcanic domes, the area features basaltic flows, sinuous rilles, and one prominent lunar pit. The Marius Hills pit measures 58 x 49 m in diameter and 40 m deep. It was first noticed in an image taken with the Kaguya Terrain Camera on May 20, 2008, by a team led by Junichi Haruyama . The fact that the Marius Hills pit is located on the floor of a sinuous rille has encouraged speculation the pit could be a skylight resulting from the collapse of the roof of a lava tube. Whether this is actually the case, and if so, the accessibility and extent of the lava tube have yet to be determined. However, such lava tubes are of great interest as potential locations for lunar bases, offering protection from extreme swings in temperature, galactic and solar radiation, and meteoroid impacts. This data layer was obtained using the Narrow Angle Camera aboard the Lunar Reconnaissance Orbiter and is a is a mosaic of 2 NAC strips centered on the Marius Hills pit.]] } local treks_LRO_NAC_Schrodinger = { Identifier = "LRO_NAC_Schrodinger", Name = [[LRO Narrow Angle Camera, Mosaic Schrodinger]], - FilePath = asset.localResource("LRO_Narrow_Angle_Camera/Mosaic_Schrodinger.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_Narrow_Angle_Camera/Mosaic_Schrodinger.vrt"), Description = [[This is a visible image mosaic generated using Lunar Reconnaissance Orbiter Camera (LROC) Narrow Angle Camera (NAC) images from the Lunar Reconnaissance Orbiter mission. The images were orthorectified using a digital elevation model (DEM) created from LROC NAC stereo images, when available, or LRO's Lunar Orbiter Laser Altimeter (LOLA) global DEM. The mosaic is generated at the same resolution at which the individual LROC NAC images were gathered, which is approximately 0.5 meters/pixel. The mosaic was registered horizontally to the LOLA global DEM.]] } local treks_schrodingerextraswathseq = { Identifier = "schrodingerextraswathseq", Name = [[LRO Narrow Angle Camera, Mosaic Schrodinger Extra]], - FilePath = asset.localResource("LRO_Narrow_Angle_Camera/Mosaic_Schrodinger_Extra.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_Narrow_Angle_Camera/Mosaic_Schrodinger_Extra.vrt"), Description = [[TBD]] } local treks_LRO_NAC_SchrodingerLandingSite2 = { Identifier = "LRO_NAC_SchrodingerLandingSite2", Name = [[LRO Narrow Angle Camera, Mosaic Schrodinger Landing Site]], - FilePath = asset.localResource("LRO_Narrow_Angle_Camera/Mosaic_Schrodinger_Landing_Site.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_Narrow_Angle_Camera/Mosaic_Schrodinger_Landing_Site.vrt"), Description = [[This is a visible image mosaic generated using Lunar Reconnaissance Orbiter Camera (LROC) Narrow Angle Camera (NAC) images from the Lunar Reconnaissance Orbiter mission. The images were orthorectified using a digital elevation model (DEM) created from LROC NAC stereo images, when available, or LRO's Lunar Orbiter Laser Altimeter (LOLA) global DEM. The mosaic is generated at the same resolution at which the individual LROC NAC images were gathered, which is approximately 0.5 meters/pixel. The mosaic was registered horizontally to the LOLA global DEM.]] } local treks_schrodingerneequirect = { Identifier = "schrodingerneequirect", Name = [[LRO Narrow Angle Camera, Mosaic Schrodinger NorthEast]], - FilePath = asset.localResource("LRO_Narrow_Angle_Camera/Mosaic_Schrodinger_NorthEast.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_Narrow_Angle_Camera/Mosaic_Schrodinger_NorthEast.vrt"), Description = [[This is a visible image mosaic generated using Lunar Reconnaissance Orbiter Camera (LROC) Narrow Angle Camera (NAC) images from the Lunar Reconnaissance Orbiter mission. Each NAC image was registered horizontally to the LRO's Lunar Orbiter Laser Altimeter (LOLA) global DEM, and then mosaicked together and color balanced. The mosaic is generated at the same resolution at which the individual LROC NAC images were gathered, which is approximately 1 meters/pixel.]] } local treks_schrodingerscequirect = { Identifier = "schrodingerscequirect", Name = [[LRO Narrow Angle Camera, Mosaic Schrodinger SouthCenter]], - FilePath = asset.localResource("LRO_Narrow_Angle_Camera/Mosaic_Schrodinger_SouthCenter.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_Narrow_Angle_Camera/Mosaic_Schrodinger_SouthCenter.vrt"), Description = [[This is a visible image mosaic generated using Lunar Reconnaissance Orbiter Camera (LROC) Narrow Angle Camera (NAC) images from the Lunar Reconnaissance Orbiter mission. Each NAC image was registered horizontally to the LRO's Lunar Orbiter Laser Altimeter (LOLA) global DEM, and then mosaicked together and color balanced. The mosaic is generated at the same resolution at which the individual LROC NAC images were gathered, which is approximately 1 meters/pixel.]] } local treks_schrodingerseequirect = { Identifier = "schrodingerseequirect", Name = [[LRO Narrow Angle Camera, Mosaic Schrodinger SouthEast]], - FilePath = asset.localResource("LRO_Narrow_Angle_Camera/Mosaic_Schrodinger_SouthEast.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_Narrow_Angle_Camera/Mosaic_Schrodinger_SouthEast.vrt"), Description = [[This is a visible image mosaic generated using Lunar Reconnaissance Orbiter Camera (LROC) Narrow Angle Camera (NAC) images from the Lunar Reconnaissance Orbiter mission. Each NAC image was registered horizontally to the LRO's Lunar Orbiter Laser Altimeter (LOLA) global DEM, and then mosaicked together and color balanced. The mosaic is generated at the same resolution at which the individual LROC NAC images were gathered, which is approximately 1 meters/pixel.]] } local treks_small_tranq_skylight_1 = { Identifier = "small_tranq_skylight_1", Name = [[LRO Narrow Angle Camera, Mosaic Small Tranquilltatis 1]], - FilePath = asset.localResource("LRO_Narrow_Angle_Camera/Mosaic_Small_Tranquilltatis_1.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_Narrow_Angle_Camera/Mosaic_Small_Tranquilltatis_1.vrt"), Description = [[The discovery of three lunar pits using imagery from imagery obtained using the Kaguya Terrain Camera led researchers to wonder how common such features might be. A very successful campaign was mounted to search Lunar Reconnaissance Orbiter Narrow Angle Camera (NAC) images to see if the higher resolution of NAC might reveal more lunar pits smaller than were detectable with the Kaguya Terrain Camera (R. V. Wagner and M. S. Robinson, 2015, UPDATE: THE SEARCH FOR LUNAR PITS, 2nd International Planetary Caves Conference). Researchers speculate that these lunar pits could be skylights resulting from roof collapse in lava tubes. Whether this is actually the case, and if so, the accessibility and extent of the lava tubes have yet to be determined. However, such lava tubes are of great interest as potential locations for lunar bases, offering protection from extreme swings in temperature, galactic and solar radiation, and meteoroid impacts. This data layer was obtained using the Narrow Angle Camera aboard the Lunar Reconnaissance Orbiter and is a is a mosaic of 2 NAC strips centered on a small pit in Mare Tranquillitatis.]] } local treks_small_tranq_skylight_2 = { Identifier = "small_tranq_skylight_2", Name = [[LRO Narrow Angle Camera, Mosaic Small Tranquilltatis 2]], - FilePath = asset.localResource("LRO_Narrow_Angle_Camera/Mosaic_Small_Tranquilltatis_2.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_Narrow_Angle_Camera/Mosaic_Small_Tranquilltatis_2.vrt"), Description = [[The discovery of three lunar pits using imagery from imagery obtained using the Kaguya Terrain Camera led researchers to wonder how common such features might be. A very successful campaign was mounted to search Lunar Reconnaissance Orbiter Narrow Angle Camera (NAC) images to see if the higher resolution of NAC might reveal more lunar pits smaller than were detectable with the Kaguya Terrain Camera (R. V. Wagner and M. S. Robinson, 2015, UPDATE: THE SEARCH FOR LUNAR PITS, 2nd International Planetary Caves Conference). Researchers speculate that these lunar pits could be skylights resulting from roof collapse in lava tubes. Whether this is actually the case, and if so, the accessibility and extent of the lava tubes have yet to be determined. However, such lava tubes are of great interest as potential locations for lunar bases, offering protection from extreme swings in temperature, galactic and solar radiation, and meteoroid impacts. This data layer was obtained using the Narrow Angle Camera aboard the Lunar Reconnaissance Orbiter and is a is a mosaic of 2 NAC strips centered on a small pit in Mare Tranquillitatis.]] } local treks_NAC_DTM_APOLLO17_SLOPE = { Identifier = "NAC_DTM_APOLLO17_SLOPE", Name = [[LRO Narrow Angle Camera, Slope Apollo 17]], - FilePath = asset.localResource("LRO_Narrow_Angle_Camera/Slope_Apollo_17.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_Narrow_Angle_Camera/Slope_Apollo_17.vrt"), Description = [[This is a color slope map derived from a 5m Digital Terrain Model (DTM) of the Apollo 17 landing site created with Narrow Angle Camera (NAC) stereo image pairs from the Lunar Reconnaissance Orbiter Camera (LROC) aboard the Lunar Reconnaissance Orbiter (LRO). Image is 3-channel RGB TIFF, 8 bits/sample, 3 samples/pixel in single image plane configuration]] } + asset.onInitialize(function() openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_LRO_NAC_Apollo11_Mosaic_p) openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_LRO_NAC_Apollo12_Mosaic_p) @@ -292,9 +320,9 @@ asset.export("small_tranq_skylight_2", treks_small_tranq_skylight_2) asset.export("NAC_DTM_APOLLO17_SLOPE", treks_NAC_DTM_APOLLO17_SLOPE) + asset.meta = { - Name = [[NASA Treks Layers for Moon LRO_Narrow_Angle_Camera], - Version = "1.0", + Name = [[NASA Treks Layers for Moon LRO_Narrow_Angle_Camera]], Author = "NASA/Treks", URL = "https://trek.nasa.gov/moon", License = "NASA/Treks", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_WAC-GLD100_DEM.asset b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_WAC-GLD100_DEM.asset index b79cfafafa..78c5c10943 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_WAC-GLD100_DEM.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_WAC-GLD100_DEM.asset @@ -6,13 +6,17 @@ local globeIdentifier = asset.require("scene/solarsystem//planets/earth/moon/moon").Moon.Identifier + + local treks_LRO_WACGLD100_Gray_79S79N_256ppd = { Identifier = "LRO_WACGLD100_Gray_79S79N_256ppd", Name = [[LRO WAC-GLD100 DEM, Grayscale]], - FilePath = asset.localResource("LRO_WAC-GLD100_DEM/Grayscale.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_WAC-GLD100_DEM/Grayscale.vrt"), Description = [[]] } + asset.onInitialize(function() openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_LRO_WACGLD100_Gray_79S79N_256ppd) end) @@ -24,9 +28,9 @@ end) asset.export("LRO_WACGLD100_Gray_79S79N_256ppd", treks_LRO_WACGLD100_Gray_79S79N_256ppd) + asset.meta = { - Name = [[NASA Treks Layers for Moon LRO_WAC-GLD100_DEM], - Version = "1.0", + Name = [[NASA Treks Layers for Moon LRO_WAC-GLD100_DEM]], Author = "NASA/Treks", URL = "https://trek.nasa.gov/moon", License = "NASA/Treks", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_WAC_GLD100_DEM.asset b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_WAC_GLD100_DEM.asset index b1e8e6ab82..2ae126aa57 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_WAC_GLD100_DEM.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_WAC_GLD100_DEM.asset @@ -6,20 +6,25 @@ local globeIdentifier = asset.require("scene/solarsystem//planets/earth/moon/moon").Moon.Identifier + + local treks_LRO_WACGLD100_ClrShade_79S79N_256ppd = { Identifier = "LRO_WACGLD100_ClrShade_79S79N_256ppd", Name = [[LRO WAC GLD100 DEM, ColorHillShade]], - FilePath = asset.localResource("LRO_WAC_GLD100_DEM/ColorHillShade.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_WAC_GLD100_DEM/ColorHillShade.vrt"), Description = [[]] } local treks_LRO_WACGLD100_Shade_79S79N_256ppd = { Identifier = "LRO_WACGLD100_Shade_79S79N_256ppd", Name = [[LRO WAC GLD100 DEM, Hillshade]], - FilePath = asset.localResource("LRO_WAC_GLD100_DEM/Hillshade.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_WAC_GLD100_DEM/Hillshade.vrt"), Description = [[]] } + asset.onInitialize(function() openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_LRO_WACGLD100_ClrShade_79S79N_256ppd) openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_LRO_WACGLD100_Shade_79S79N_256ppd) @@ -34,9 +39,9 @@ asset.export("LRO_WACGLD100_ClrShade_79S79N_256ppd", treks_LRO_WACGLD100_ClrShad asset.export("LRO_WACGLD100_Shade_79S79N_256ppd", treks_LRO_WACGLD100_Shade_79S79N_256ppd) + asset.meta = { - Name = [[NASA Treks Layers for Moon LRO_WAC_GLD100_DEM], - Version = "1.0", + Name = [[NASA Treks Layers for Moon LRO_WAC_GLD100_DEM]], Author = "NASA/Treks", URL = "https://trek.nasa.gov/moon", License = "NASA/Treks", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_and_Kaguya_Multi_Instruments_1895.21mpp.asset b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_and_Kaguya_Multi_Instruments_1895.21mpp.asset index b712baf75b..1e1d93ef26 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_and_Kaguya_Multi_Instruments_1895.21mpp.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/nasa-treks/LRO_and_Kaguya_Multi_Instruments_1895.21mpp.asset @@ -6,41 +6,49 @@ local globeIdentifier = asset.require("scene/solarsystem//planets/earth/moon/moon").Moon.Identifier + + local treks_3He_Dig_Here_Layer = { Identifier = "3He_Dig_Here_Layer", Name = [[LRO and Kaguya Multi Instruments 1895.21mpp, 3He Dig Here]], - FilePath = asset.localResource("LRO_and_Kaguya_Multi_Instruments_1895.21mpp/3He_Dig_Here.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_and_Kaguya_Multi_Instruments_1895.21mpp/3He_Dig_Here.vrt"), Description = [[This data represents potential Helium-3 deposits and other solar wind implanted volatiles on the Moon. This data layer has been generated by querying specific criteria from the following datasets: Titanium Oxide (TiO2) abundance from Lunar Reconnaissance Orbiter’s (LRO) Wide-Angle Camera (WAC), Optical Maturity Index (OMAT) from Kaguya Lunar Multiband Imager (MI), slope from LRO’s Lunar Orbital Laser Altimeter (LOLA), and Rock Abundance from LRO’s Lunar Radiometer Experiment (DIVINER). For this “Dig Here” layer, the following criteria has been applied: TiO2 > 9.0%, OMAT < 0.15, Slope < 4°, and rock abundance < 0.02%. The research on Helium-3 as a potential use for fuel for a fusion cell and the data presented as a result of this research culminated as an outcome of a group project at the Colorado School of Mines. The research for this data should be credited to: Stewart Ray, Colleen Olson, Lisa Robibero, Steven Coutts, and Maxwell Sissman of the Planetary and Terrestrial Mining Sciences Symposium and Space Resources Roundtable, Colorado School of Mines.]] } local treks_3He_Likely_Layer = { Identifier = "3He_Likely_Layer", Name = [[LRO and Kaguya Multi Instruments 1895.21mpp, 3He Likely]], - FilePath = asset.localResource("LRO_and_Kaguya_Multi_Instruments_1895.21mpp/3He_Likely.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_and_Kaguya_Multi_Instruments_1895.21mpp/3He_Likely.vrt"), Description = [[This data represents potential Helium-3 deposits and other solar wind implanted volatiles on the Moon. This data layer has been generated by querying specific criteria from the following datasets: Titanium Oxide (TiO2) abundance from Lunar Reconnaissance Orbiter’s (LRO) Wide-Angle Camera (WAC), Optical Maturity Index (OMAT) from Kaguya Lunar Multiband Imager (MI), slope from LRO’s Lunar Orbital Laser Altimeter (LOLA), and Rock Abundance from LRO’s Lunar Radiometer Experiment (DIVINER). For this “Likely” layer, the following criteria has been applied: TiO2 > 3.0%, OMAT < 0.25, Slope < 20°, and rock abundance < 0.10%. The research on Helium-3 as a potential use for fuel for a fusion cell and the data presented as a result of this research culminated as an outcome of a group project at the Colorado School of Mines. The research for this data should be credited to: Stewart Ray, Colleen Olson, Lisa Robibero, Steven Coutts, and Maxwell Sissman of the Planetary and Terrestrial Mining Sciences Symposium and Space Resources Roundtable, Colorado School of Mines.]] } local treks_3He_More_Likely_Layer = { Identifier = "3He_More_Likely_Layer", Name = [[LRO and Kaguya Multi Instruments 1895.21mpp, 3He More Likely]], - FilePath = asset.localResource("LRO_and_Kaguya_Multi_Instruments_1895.21mpp/3He_More_Likely.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_and_Kaguya_Multi_Instruments_1895.21mpp/3He_More_Likely.vrt"), Description = [[This data represents potential Helium-3 deposits and other solar wind implanted volatiles on the Moon. This data layer has been generated by querying specific criteria from the following datasets: Titanium Oxide (TiO2) abundance from Lunar Reconnaissance Orbiter’s (LRO) Wide-Angle Camera (WAC), Optical Maturity Index (OMAT) from Kaguya Lunar Multiband Imager (MI), slope from LRO’s Lunar Orbital Laser Altimeter (LOLA), and Rock Abundance from LRO’s Lunar Radiometer Experiment (DIVINER). For this “More Likely” layer, the following criteria has been applied: TiO2 > 4.5%, OMAT < 0.225, Slope < 16°, and rock abundance < 0.08%. The research on Helium-3 as a potential use for fuel for a fusion cell and the data presented as a result of this research culminated as an outcome of a group project at the Colorado School of Mines. The research for this data should be credited to: Stewart Ray, Colleen Olson, Lisa Robibero, Steven Coutts, and Maxwell Sissman of the Planetary and Terrestrial Mining Sciences Symposium and Space Resources Roundtable, Colorado School of Mines.]] } local treks_3He_Most_Likely_Layer = { Identifier = "3He_Most_Likely_Layer", Name = [[LRO and Kaguya Multi Instruments 1895.21mpp, 3He Most Likely]], - FilePath = asset.localResource("LRO_and_Kaguya_Multi_Instruments_1895.21mpp/3He_Most_Likely.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_and_Kaguya_Multi_Instruments_1895.21mpp/3He_Most_Likely.vrt"), Description = [[This data represents potential Helium-3 deposits and other solar wind implanted volatiles on the Moon. This data layer has been generated by querying specific criteria from the following datasets: Titanium Oxide (TiO2) abundance from Lunar Reconnaissance Orbiter’s (LRO) Wide-Angle Camera (WAC), Optical Maturity Index (OMAT) from Kaguya Lunar Multiband Imager (MI), slope from LRO’s Lunar Orbital Laser Altimeter (LOLA), and Rock Abundance from LRO’s Lunar Radiometer Experiment (DIVINER). For this “Most Likely” layer, the following criteria has been applied: TiO2 > 7.5%, OMAT < 0.175, Slope < 8°, and rock abundance < 0.04%. The research on Helium-3 as a potential use for fuel for a fusion cell and the data presented as a result of this research culminated as an outcome of a group project at the Colorado School of Mines. The research for this data should be credited to: Stewart Ray, Colleen Olson, Lisa Robibero, Steven Coutts, and Maxwell Sissman of the Planetary and Terrestrial Mining Sciences Symposium and Space Resources Roundtable, Colorado School of Mines.]] } local treks_3He_Very_Likely_Layer = { Identifier = "3He_Very_Likely_Layer", Name = [[LRO and Kaguya Multi Instruments 1895.21mpp, 3He Very Likely]], - FilePath = asset.localResource("LRO_and_Kaguya_Multi_Instruments_1895.21mpp/3He_Very_Likely.vrt"), + ZIndex = 50, + FilePath = asset.resource("LRO_and_Kaguya_Multi_Instruments_1895.21mpp/3He_Very_Likely.vrt"), Description = [[This data represents potential Helium-3 deposits and other solar wind implanted volatiles on the Moon. This data layer has been generated by querying specific criteria from the following datasets: Titanium Oxide (TiO2) abundance from Lunar Reconnaissance Orbiter’s (LRO) Wide-Angle Camera (WAC), Optical Maturity Index (OMAT) from Kaguya Lunar Multiband Imager (MI), slope from LRO’s Lunar Orbital Laser Altimeter (LOLA), and Rock Abundance from LRO’s Lunar Radiometer Experiment (DIVINER). For this “Very Likely” layer, the following criteria has been applied: TiO2 > 6.0%, OMAT < 0.20, Slope < 12°, and rock abundance < 0.06%. The research on Helium-3 as a potential use for fuel for a fusion cell and the data presented as a result of this research culminated as an outcome of a group project at the Colorado School of Mines. The research for this data should be credited to: Stewart Ray, Colleen Olson, Lisa Robibero, Steven Coutts, and Maxwell Sissman of the Planetary and Terrestrial Mining Sciences Symposium and Space Resources Roundtable, Colorado School of Mines.]] } + asset.onInitialize(function() openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_3He_Dig_Here_Layer) openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_3He_Likely_Layer) @@ -64,9 +72,9 @@ asset.export("3He_Most_Likely_Layer", treks_3He_Most_Likely_Layer) asset.export("3He_Very_Likely_Layer", treks_3He_Very_Likely_Layer) + asset.meta = { - Name = [[NASA Treks Layers for Moon LRO_and_Kaguya_Multi_Instruments_1895.21mpp], - Version = "1.0", + Name = [[NASA Treks Layers for Moon LRO_and_Kaguya_Multi_Instruments_1895.21mpp]], Author = "NASA/Treks", URL = "https://trek.nasa.gov/moon", License = "NASA/Treks", diff --git a/data/assets/scene/solarsystem/planets/earth/moon/trail.asset b/data/assets/scene/solarsystem/planets/earth/moon/trail.asset index ae4011265d..a167a23b96 100644 --- a/data/assets/scene/solarsystem/planets/earth/moon/trail.asset +++ b/data/assets/scene/solarsystem/planets/earth/moon/trail.asset @@ -1,5 +1,5 @@ -asset.require("spice/base") local transforms = asset.require("../transforms") +local coreKernels = asset.require("spice/core") @@ -10,8 +10,8 @@ local MoonTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "MOON", - Observer = "EARTH BARYCENTER" + Target = coreKernels.ID.Moon, + Observer = coreKernels.ID.EarthBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 27, @@ -39,9 +39,7 @@ asset.export(MoonTrail) asset.meta = { Name = "Moon Trail", - Version = "1.1", - Description = [[Moon Trail - This asset contains the trail of the Moon. Data from NASA - Spice (see base spice asset)]], + Description = "Moon Trail - This asset contains the trail of the Moon", Author = "OpenSpace Team", URL = "http://openspaceproject.com", License = "MIT license" diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/2000_carbon_monoxide.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/2000_carbon_monoxide.asset index e75087f08e..a7f735aa97 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/2000_carbon_monoxide.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/2000_carbon_monoxide.asset @@ -16,7 +16,7 @@ volcanoes and brush burning. Between the anthropogenic and natural sources, scie estimate that the annual production of carbon monoxide is 2-5 gigatons]] local URL = "https://sos.noaa.gov/catalog/datasets/carbon-monoxide-2000/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -29,7 +29,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "1024", Description = Description } @@ -62,7 +63,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/2004_ir_hurricane.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/2004_ir_hurricane.asset index 9fc8d2bd1d..3ce2b97b23 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/2004_ir_hurricane.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/2004_ir_hurricane.asset @@ -16,7 +16,7 @@ hurricane season]] local URL = "https://sos.noaa.gov/catalog/datasets/hurricane-season-2004/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -29,7 +29,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "TemporalTileLayer", + ZIndex = 100, + Type = "TemporalTileProvider", Mode = "Folder", Folder = { Folder = syncedDirectory .. "2048", @@ -55,7 +56,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/2005_hurricane-grayir.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/2005_hurricane-grayir.asset index 8a9924cb22..baec89c927 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/2005_hurricane-grayir.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/2005_hurricane-grayir.asset @@ -12,7 +12,7 @@ commerce for oceans and atmosphere and NOAA administrator]] local URL = "https://sos.noaa.gov/catalog/datasets/hurricane-season-2005/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -26,7 +26,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "TemporalTileLayer", + ZIndex = 100, + Type = "TemporalTileProvider", Mode = "Folder", Folder = { Folder = syncedDirectory .. "images", @@ -52,7 +53,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/2005_hurricane-wvsst.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/2005_hurricane-wvsst.asset index bad7dcadac..b7ae4ec356 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/2005_hurricane-wvsst.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/2005_hurricane-wvsst.asset @@ -12,7 +12,7 @@ commerce for oceans and atmosphere and NOAA administrator]] local URL = "https://sos.noaa.gov/catalog/datasets/hurricane-season-water-vapor-and-sst-2005/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -25,7 +25,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "TemporalTileLayer", + ZIndex = 100, + Type = "TemporalTileProvider", Mode = "Folder", Folder = { Folder = syncedDirectory .. "2048", @@ -51,7 +52,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/2012_hurricane.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/2012_hurricane.asset index e7c2bfcfe1..8cb44e1495 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/2012_hurricane.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/2012_hurricane.asset @@ -18,7 +18,7 @@ recorded by geostationary satellites]] local URL = "https://sos.noaa.gov/catalog/datasets/hurricane-season-2012/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -33,7 +33,8 @@ local satDestination = syncedDirectory .. "sat" local LayerNames = { Identifier = Identifier .. "-names", Name = Name .. " (Names)", - Type = "ImageSequenceTileLayer", + Type = "ImageSequenceTileProvider", + ZIndex = 110, FolderPath = namesDestination, Description = Description } @@ -41,7 +42,8 @@ local LayerNames = { local LayerSat = { Identifier = Identifier .. "-sat", Name = Name .. " (Satellites)", - Type = "TemporalTileLayer", + Type = "TemporalTileProvider", + ZIndex = 100, Mode = "Folder", Folder = { Folder = satDestination, @@ -83,7 +85,6 @@ asset.export(LayerSat) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/aerosol_blackcarbon.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/aerosol_blackcarbon.asset index 091cc58877..e16f188072 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/aerosol_blackcarbon.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/aerosol_blackcarbon.asset @@ -20,7 +20,7 @@ Pinatubo]] local URL = "https://sos.noaa.gov/catalog/datasets/aerosols-black-carbon/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -33,7 +33,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "2048_png", Description = Description } @@ -66,7 +67,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/aerosol_blackcarbon_and_sulfate.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/aerosol_blackcarbon_and_sulfate.asset index 73802bd770..662a4d62d4 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/aerosol_blackcarbon_and_sulfate.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/aerosol_blackcarbon_and_sulfate.asset @@ -20,7 +20,7 @@ Pinatubo]] local URL = "https://sos.noaa.gov/catalog/datasets/aerosols-black-carbon-and-sulfate/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -33,7 +33,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "2048_png", Description = Description } @@ -66,7 +67,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/aerosol_sulfate.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/aerosol_sulfate.asset index 80348b6bd3..9d168b1a33 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/aerosol_sulfate.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/aerosol_sulfate.asset @@ -20,7 +20,7 @@ Pinatubo]] local URL = "https://sos.noaa.gov/catalog/datasets/aerosols-sulfate/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -33,7 +33,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "2048_png", Description = Description } @@ -66,7 +67,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/airtraffic.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/airtraffic.asset index cca34ed3ed..18d75dfdfb 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/airtraffic.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/airtraffic.asset @@ -15,7 +15,7 @@ takeoffs and landings." - From the National Air Traffic Controllers Association local URL = "https://sos.noaa.gov/catalog/datasets/air-traffic/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -29,7 +29,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "images", Description = Description } @@ -49,7 +50,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/all_sats.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/all_sats.asset index e2b6d6eebb..ad5c1582c6 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/all_sats.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/all_sats.asset @@ -20,7 +20,7 @@ than one day]] local URL = "https://sos.noaa.gov/catalog/datasets/satellites-paths-and-positions/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -33,7 +33,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "2048", Description = Description } @@ -53,7 +54,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/aqua_swath.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/aqua_swath.asset index bdcca74f10..95fc0bea56 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/aqua_swath.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/aqua_swath.asset @@ -19,7 +19,7 @@ about the same local time everyday. Aqua crosses the equator from south to north local URL = "https://sos.noaa.gov/catalog/datasets/polar-orbiting-aqua-satellite-and-modis-swath/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -33,7 +33,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "images", Description = Description } @@ -53,7 +54,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/carbonflux.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/carbonflux.asset index 6e8b16bab4..02d5d311f7 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/carbonflux.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/carbonflux.asset @@ -18,7 +18,7 @@ for CO2 and related trace gases. The data set shows daily average fluxes constru local URL = "https://sos.noaa.gov/catalog/datasets/polar-orbiting-aqua-satellite-and-modis-swath/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -31,7 +31,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "2160", Description = Description } @@ -51,7 +52,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/carbontracker_2000_2100-fixed_scale.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/carbontracker_2000_2100-fixed_scale.asset index 4d118bcc3f..455189c6a5 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/carbontracker_2000_2100-fixed_scale.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/carbontracker_2000_2100-fixed_scale.asset @@ -18,7 +18,7 @@ performed by the NOAA Global Monitoring Division and international partners]] local URL = "https://sos.noaa.gov/catalog/datasets/carbon-tracker-fixed-scale/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -34,7 +34,8 @@ local colorbarDestination = syncedDirectory .. "colorbar" local LayerField = { Identifier = Identifier .. "-field", Name = Name .. " (Field)", - Type = "TemporalTileLayer", + Type = "TemporalTileProvider", + ZIndex = 100, Mode = "Folder", Folder = { Folder = fieldDestination, @@ -48,7 +49,8 @@ local LayerField = { local LayerObs = { Identifier = Identifier .. "-obs", Name = Name .. " (Observed)", - Type = "TemporalTileLayer", + Type = "TemporalTileProvider", + ZIndex = 100, Mode = "Folder", Folder = { Folder = obsDestination, @@ -108,7 +110,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/carbontracker_2000_2100-sliding_scale.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/carbontracker_2000_2100-sliding_scale.asset index 3f2c8eea71..85f03e5f55 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/carbontracker_2000_2100-sliding_scale.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/carbontracker_2000_2100-sliding_scale.asset @@ -18,7 +18,7 @@ performed by the NOAA Global Monitoring Division and international partners]] local URL = "https://sos.noaa.gov/catalog/datasets/carbon-tracker-sliding-scale/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -33,7 +33,8 @@ local colorbarDestination = syncedDirectory .. "colorbar" local LayerField = { Identifier = Identifier .. "-field", Name = Name .. " (Field)", - Type = "TemporalTileLayer", + Type = "TemporalTileProvider", + ZIndex = 100, Mode = "Folder", Folder = { Folder = fieldDestination, @@ -47,7 +48,8 @@ local LayerField = { local LayerObs = { Identifier = Identifier .. "-obs", Name = Name .. " (Observed)", - Type = "TemporalTileLayer", + Type = "TemporalTileProvider", + ZIndex = 100, Mode = "Folder", Folder = { Folder = obsDestination, @@ -109,7 +111,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/climate_niche.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/climate_niche.asset index d66a48f2e3..104c840b16 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/climate_niche.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/climate_niche.asset @@ -21,7 +21,7 @@ projected to cover 19% of the global land and impact an estimated 3.5 billion pe local URL = "https://sos.noaa.gov/catalog/datasets/human-climate-niche-2020-and-2070/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -32,6 +32,7 @@ local syncedDirectory = asset.syncedResource({ local LayerPrecip2020 = { Identifier = Identifier .. "-2020", Name = Name .. " (2020)", + ZIndex = 100, FilePath = syncedDirectory .. "temp-precip-2020-current-4096.png", Description = Description } @@ -39,6 +40,7 @@ local LayerPrecip2020 = { local LayerPrecip2070 = { Identifier = Identifier .. "-2070", Name = Name .. " (2070)", + ZIndex = 100, FilePath = syncedDirectory .. "temp-precip-2070-rcp85-4096.png", Description = Description } @@ -46,6 +48,7 @@ local LayerPrecip2070 = { local LayerMat2020 = { Identifier = Identifier .. "-mat2020", Name = Name .. " (MAT 2020)", + ZIndex = 100, FilePath = syncedDirectory .. "MAT-29-2020-4096.png", Description = Description } @@ -53,6 +56,7 @@ local LayerMat2020 = { local LayerMat2070 = { Identifier = Identifier .. "-mat2070", Name = Name .. " (MAT 2070)", + ZIndex = 100, FilePath = syncedDirectory .. "MAT-29-2070-4096.png", Description = Description } @@ -61,6 +65,7 @@ local Colorbar = { Identifier = Identifier, Name = Name, Type = "ScreenSpaceImageLocal", + ZIndex = 100, TexturePath = syncedDirectory .. "niche-scale.png", FaceCamera = false, CartesianPosition = { 0.0, -0.5, -2.0 } @@ -93,7 +98,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/co_gmd.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/co_gmd.asset index b8e4372857..903a536209 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/co_gmd.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/co_gmd.asset @@ -19,7 +19,7 @@ emissions from heavy traffic can produce CO concentrations of 200 - 5000 ppb]] local URL = "https://sos.noaa.gov/catalog/datasets/carbon-monoxide-2008-2011/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -33,7 +33,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "TemporalTileLayer", + ZIndex = 100, + Type = "TemporalTileProvider", Mode = "Folder", Folder = { Folder = syncedDirectory .. "images", @@ -73,7 +74,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/fim_chem.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/fim_chem.asset index 6549bbb405..509b5b905f 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/fim_chem.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/fim_chem.asset @@ -15,7 +15,7 @@ for better Earth system modeling for climate prediction]] local URL = "https://sos.noaa.gov/catalog/datasets/aerosols-fim-chem-model/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -28,7 +28,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "composite", Description = Description } @@ -61,7 +62,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/fossil_fuel.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/fossil_fuel.asset index 5d47783d20..e1ef720845 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/fossil_fuel.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/fossil_fuel.asset @@ -22,7 +22,7 @@ human management of global resources]] local URL = "https://sos.noaa.gov/catalog/datasets/fossil-fuel-co2-release-2011-2012/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -35,7 +35,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "TemporalTileLayer", + ZIndex = 100, + Type = "TemporalTileProvider", Mode = "Folder", Folder = { Folder = syncedDirectory .. "3100", @@ -74,7 +75,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/fukushima.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/fukushima.asset index 1f50cb2727..f8e89874d3 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/fukushima.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/fukushima.asset @@ -14,7 +14,7 @@ passively follow the wind]] local URL = "https://sos.noaa.gov/catalog/datasets/fukushima-radioactive-aerosol-dispersion-model/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -27,7 +27,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "2054", Description = Description } @@ -60,7 +61,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/geo_sat.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/geo_sat.asset index 13b6159c0f..42d9e14823 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/geo_sat.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/geo_sat.asset @@ -18,7 +18,7 @@ local Description = [[Geostationary satellites are a key tool for scientists to local URL = "https://sos.noaa.gov/catalog/datasets/geostationary-satellites/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -31,7 +31,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "2048", Description = Description } @@ -51,7 +52,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/geo_scan.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/geo_scan.asset index a8208b645a..3f3ae5f6be 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/geo_scan.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/geo_scan.asset @@ -18,7 +18,7 @@ worldwide]] local URL = "https://sos.noaa.gov/catalog/datasets/geostationary-satellites-scanning-pattern/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -31,7 +31,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "2048", Description = Description } @@ -51,7 +52,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/giss_temp_anom.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/giss_temp_anom.asset index 4952fdefae..e15363cc13 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/giss_temp_anom.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/giss_temp_anom.asset @@ -10,7 +10,7 @@ not absolute temperature]] local URL = "https://sos.noaa.gov/catalog/datasets/temperature-anomaly-nasa-1884-2012/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -23,7 +23,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "2012", Description = Description } @@ -56,7 +57,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/globe-insolation.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/globe-insolation.asset index 30b837be1b..101203a0ae 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/globe-insolation.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/globe-insolation.asset @@ -14,7 +14,7 @@ places]] local URL = "https://sos.noaa.gov/catalog/datasets/solar-insolation-monthly-nasa/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -27,7 +27,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "TemporalTileLayer", + ZIndex = 100, + Type = "TemporalTileProvider", Mode = "Folder", Folder = { Folder = syncedDirectory .. "1440", @@ -67,7 +68,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/globe-rainfall.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/globe-rainfall.asset index 2c7ee2c672..f517bcee4f 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/globe-rainfall.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/globe-rainfall.asset @@ -14,7 +14,7 @@ atmosphere. This heating is a major part of Earth's energy budget and climate]] local URL = "https://sos.noaa.gov/catalog/datasets/rainfall-monthly-nasa/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -27,7 +27,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "TemporalTileLayer", + ZIndex = 100, + Type = "TemporalTileProvider", Mode = "Folder", Folder = { Folder = syncedDirectory .. "1440", @@ -67,7 +68,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/harvey-clouds_precip.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/harvey-clouds_precip.asset index ccbb01db89..615f331c16 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/harvey-clouds_precip.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/harvey-clouds_precip.asset @@ -14,7 +14,7 @@ local Description = [[Hurricane Harvey was an extremely destructive Atlantic hur local URL = "https://sos.noaa.gov/catalog/datasets/hurricane-harvey-clouds-with-precipitation-2017/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -27,7 +27,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "TemporalTileLayer", + ZIndex = 100, + Type = "TemporalTileProvider", Mode = "Folder", Folder = { Folder = syncedDirectory .. "4096", @@ -78,7 +79,6 @@ asset.export(ColorbarSnow) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/hurricane_season_2017.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/hurricane_season_2017.asset index 5249aa670f..5556823ce2 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/hurricane_season_2017.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/hurricane_season_2017.asset @@ -17,7 +17,7 @@ and calling on volunteers for help]] local URL = "https://sos.noaa.gov/catalog/datasets/hurricane-season-2017/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -31,7 +31,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "TemporalTileLayer", + ZIndex = 100, + Type = "TemporalTileProvider", Mode = "Folder", Folder = { Folder = syncedDirectory .. "images", @@ -57,7 +58,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/hurricane_season_2017_wvsst.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/hurricane_season_2017_wvsst.asset index 111508eead..a923020f71 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/hurricane_season_2017_wvsst.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/hurricane_season_2017_wvsst.asset @@ -17,7 +17,7 @@ local Description = [[After a long lull in major hurricanes striking the U.S. local URL = "https://sos.noaa.gov/catalog/datasets/hurricane-season-water-vapor-and-sst-2017/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -30,7 +30,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "TemporalTileLayer", + ZIndex = 100, + Type = "TemporalTileProvider", Mode = "Folder", Folder = { Folder = syncedDirectory .. "2048", @@ -56,7 +57,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/hurricane_tracks-cumulative.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/hurricane_tracks-cumulative.asset index 0fd6929d3e..37849c1de3 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/hurricane_tracks-cumulative.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/hurricane_tracks-cumulative.asset @@ -12,7 +12,7 @@ been created to predict hurricane paths include the historical data in their mod local URL = "https://sos.noaa.gov/catalog/datasets/hurricane-tracks-cumulative-1950-2005/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -24,6 +24,7 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, + ZIndex = 100, FilePath = syncedDirectory .. "4096.png", Description = Description } @@ -43,7 +44,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/isaac.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/isaac.asset index 455d2b7101..4aa5a8d697 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/isaac.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/isaac.asset @@ -15,7 +15,7 @@ brought significant amounts of rain to the southeastern United States]] local URL = "https://sos.noaa.gov/catalog/datasets/hurricane-isaac-2012/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -30,7 +30,8 @@ local satDestination = syncedDirectory .. "sat" local LayerRadar = { Identifier = Identifier .. "-radar", Name = Name .. " (Radar)", - Type = "TemporalTileLayer", + Type = "TemporalTileProvider", + ZIndex = 100, Mode = "Folder", Folder = { Folder = radarDestination, @@ -44,7 +45,8 @@ local LayerRadar = { local LayerSat = { Identifier = Identifier .. "-sat", Name = Name .. " (Sat)", - Type = "TemporalTileLayer", + Type = "TemporalTileProvider", + ZIndex = 100, Mode = "Folder", Folder = { Folder = satDestination, @@ -73,7 +75,6 @@ asset.export(LayerSat) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/iss_track.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/iss_track.asset index 7d7ed3c86c..ded8dd2d20 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/iss_track.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/iss_track.asset @@ -18,7 +18,7 @@ local Description = [[The first piece of the International Space Station was sen local URL = "https://sos.noaa.gov/catalog/datasets/international-space-station-track/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -30,6 +30,7 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, + ZIndex = 100, FilePath = syncedDirectory .. "4096.jpg", Description = Description } @@ -49,7 +50,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/land_temp.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/land_temp.asset index 65d92b1c53..608ff0d014 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/land_temp.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/land_temp.asset @@ -14,7 +14,7 @@ the University of Delaware]] local URL = "https://sos.noaa.gov/catalog/datasets/international-space-station-track/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -27,7 +27,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "TemporalTileLayer", + Type = "TemporalTileProvider", + ZIndex = 100, Mode = "Folder", Folder = { Folder = syncedDirectory .. "4096", @@ -53,7 +54,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/lightning.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/lightning.asset index 6528b0afb8..80660dc656 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/lightning.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/lightning.asset @@ -15,7 +15,7 @@ number of lightning flashes per square kilometer]] local URL = "https://sos.noaa.gov/catalog/datasets/lightning-flash-rate/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -27,6 +27,7 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, + ZIndex = 100, FilePath = syncedDirectory .. "2048.jpg", Description = Description } @@ -60,7 +61,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/ltg_vaisala.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/ltg_vaisala.asset index 15644f0bca..e5763a1339 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/ltg_vaisala.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/ltg_vaisala.asset @@ -19,7 +19,7 @@ number of events. This dataset runs from June 2011 through August 2012]] local URL = "c" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -32,7 +32,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "TemporalTileLayer", + Type = "TemporalTileProvider", + ZIndex = 100, Mode = "Folder", Folder = { Folder = syncedDirectory .. "2160", @@ -72,7 +73,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/nasa_sats.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/nasa_sats.asset index b8b001f2d0..6d4b5331c3 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/nasa_sats.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/nasa_sats.asset @@ -17,7 +17,7 @@ of the satellites are currently in orbit, and the sixth satellite is scheduled t launched in 2008]] local URL = "https://sos.noaa.gov/catalog/datasets/polar-orbiting-nasa-a-train-satellites/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -30,7 +30,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "2048", Description = Description } @@ -50,7 +51,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/nccs_models-carbon.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/nccs_models-carbon.asset index 8855568da7..8bd2220b8b 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/nccs_models-carbon.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/nccs_models-carbon.asset @@ -14,7 +14,7 @@ atmosphere]] local URL = "https://sos.noaa.gov/catalog/datasets/carbon-dioxide-concentration-geos-5-model/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -27,7 +27,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "2048", Description = Description } @@ -61,7 +62,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/nccs_models-chem.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/nccs_models-chem.asset index ed13bc7eec..70b0b34a7a 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/nccs_models-chem.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/nccs_models-chem.asset @@ -14,7 +14,7 @@ and climate]] local URL = "https://sos.noaa.gov/catalog/datasets/atmospheric-chemistry-geos-5-model/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -28,7 +28,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "TemporalTileLayer", + ZIndex = 100, + Type = "TemporalTileProvider", Mode = "Folder", Folder = { Folder = syncedDirectory .. "images", @@ -67,7 +68,6 @@ asset.export(Legend) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/nccs_models-winds.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/nccs_models-winds.asset index 047c59a294..b722ddd75a 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/nccs_models-winds.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/nccs_models-winds.asset @@ -14,7 +14,7 @@ around the globe. Red, orange and yellow are used for the fastest moving air]] local URL = "https://sos.noaa.gov/catalog/datasets/winds-geos-5-model/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -28,7 +28,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "TemporalTileLayer", + ZIndex = 100, + Type = "TemporalTileProvider", Mode = "Folder", Folder = { Folder = syncedDirectory .. "images", @@ -54,7 +55,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/no2_omsi.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/no2_omsi.asset index 74950f8713..77f17acd41 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/no2_omsi.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/no2_omsi.asset @@ -15,7 +15,7 @@ local Description = [[Nitrogen dioxide (NO2) is a key component of urban air pol local URL = "https://sos.noaa.gov/catalog/datasets/nitrogen-dioxide/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -28,7 +28,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "TemporalTileLayer", + ZIndex = 100, + Type = "TemporalTileProvider", Mode = "Folder", Folder = { Folder = syncedDirectory .. "2880", @@ -68,7 +69,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/noaa_sat-tracks.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/noaa_sat-tracks.asset index d5f3f9e2c9..3cd5236a65 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/noaa_sat-tracks.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/noaa_sat-tracks.asset @@ -19,7 +19,7 @@ other applications]] local URL = "https://sos.noaa.gov/catalog/datasets/polar-orbiting-noaa-satellite-tracks/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -31,6 +31,7 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, + ZIndex = 100, FilePath = syncedDirectory .. "4096.jpg", Description = Description } @@ -50,7 +51,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/pclim.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/pclim.asset index d80064cdda..fb7c1c9e85 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/pclim.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/pclim.asset @@ -12,7 +12,7 @@ normal]] local URL = "https://sos.noaa.gov/catalog/datasets/temperature-anomaly-yearly-500-2006-paleoclimate-evidence/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -25,7 +25,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "raw", Description = Description } @@ -58,7 +59,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/poes_sat.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/poes_sat.asset index 3a1beb5dd7..2fc59e7bb1 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/poes_sat.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/poes_sat.asset @@ -15,7 +15,7 @@ orbit the Earth 14.1 times per day]] local URL = "https://sos.noaa.gov/catalog/datasets/polar-orbiting-noaa-17-satellite-coverage/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -28,7 +28,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "TemporalTileLayer", + ZIndex = 100, + Type = "TemporalTileProvider", Mode = "Folder", Folder = { Folder = syncedDirectory .. "2048", @@ -54,7 +55,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/reanalysis-antarctic.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/reanalysis-antarctic.asset index 0682f6b83a..d22fc6ff87 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/reanalysis-antarctic.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/reanalysis-antarctic.asset @@ -26,7 +26,7 @@ temporal resolution and 2 degree longitude by 2 degree latitude resolution]] local URL = "https://sos.noaa.gov/catalog/datasets/precipitable-water-antarctic-expedition-1902-1903/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -39,7 +39,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "2048", Description = Description } @@ -73,7 +74,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/reanalysis-elnino.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/reanalysis-elnino.asset index 8f9b8a3acf..6fee278c43 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/reanalysis-elnino.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/reanalysis-elnino.asset @@ -26,7 +26,7 @@ temporal resolution and 2 degree longitude by 2 degree latitude resolution]] local URL = "https://sos.noaa.gov/catalog/datasets/precipitable-water-el-nino-1917-1919/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -39,7 +39,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "2048", Description = Description } @@ -73,7 +74,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/reanalysis-hurricane.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/reanalysis-hurricane.asset index c3b0e5ce21..c0991de888 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/reanalysis-hurricane.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/reanalysis-hurricane.asset @@ -26,7 +26,7 @@ local Description = [[Until 2010, the longest globally-complete estimate of the local URL = "https://sos.noaa.gov/catalog/datasets/precipitable-water-galveston-hurricane-1900/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -39,7 +39,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "2048_png", Description = Description } @@ -73,7 +74,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/sandy.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/sandy.asset index 191563f601..e7671d1ad8 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/sandy.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/sandy.asset @@ -10,7 +10,7 @@ local Description = [[Hurricane Sandy was a memorable and disastrous storm that local URL = "https://sos.noaa.gov/catalog/datasets/precipitable-water-galveston-hurricane-1900/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -23,7 +23,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "TemporalTileLayer", + ZIndex = 100, + Type = "TemporalTileProvider", Mode = "Folder", Folder = { Folder = syncedDirectory .. "4096", @@ -49,7 +50,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/sunsync_sat.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/sunsync_sat.asset index 2c45958d75..97f9bce154 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/sunsync_sat.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/sunsync_sat.asset @@ -15,7 +15,7 @@ orbit the Earth 14.1 times per day]] local URL = "https://sos.noaa.gov/catalog/datasets/polar-orbiting-noaa-17-and-noaa-18/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -28,7 +28,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "TemporalTileLayer", + ZIndex = 100, + Type = "TemporalTileProvider", Mode = "Folder", Folder = { Folder = syncedDirectory .. "2048", @@ -54,7 +55,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/temp_anom.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/temp_anom.asset index e7455f18da..2413f8248f 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/temp_anom.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/temp_anom.asset @@ -18,7 +18,7 @@ warmest]] local URL = "https://sos.noaa.gov/catalog/datasets/temperature-anomaly-yearly-noaa-1880-present/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -31,7 +31,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "TemporalTileLayer", + ZIndex = 100, + Type = "TemporalTileProvider", Mode = "Folder", Folder = { Folder = syncedDirectory .. "4096_new", @@ -71,7 +72,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/tropical_widening.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/tropical_widening.asset index dc9a991756..0a38fc6860 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/tropical_widening.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/tropical_widening.asset @@ -9,7 +9,7 @@ shows the changes in the tropical zone boundaries over the last three decades]] local URL = "https://sos.noaa.gov/catalog/datasets/tropical-widening/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -21,6 +21,7 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, + ZIndex = 100, FilePath = syncedDirectory .. "2048.png", Description = Description } @@ -54,7 +55,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/typhoon_haiyan-wvsst.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/typhoon_haiyan-wvsst.asset index fbbbd6af65..ae1ca4e39d 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/typhoon_haiyan-wvsst.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/typhoon_haiyan-wvsst.asset @@ -12,7 +12,7 @@ Real-time: SST from October 30th to November 12th, 2013]] local URL = "https://sos.noaa.gov/catalog/datasets/typhoon-haiyan-water-vapor-and-sst-oct-nov-2013/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -25,7 +25,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "2048", Description = Description } @@ -56,7 +57,6 @@ asset.export(Track) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/typhoon_haiyan.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/typhoon_haiyan.asset index 1cdff01fa8..ada1edfc98 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/typhoon_haiyan.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/typhoon_haiyan.asset @@ -12,7 +12,7 @@ to 195 mph. If confirmed, it would beat the previous record holder, Hurricane Ca local URL = "https://sos.noaa.gov/catalog/datasets/typhoon-haiyan-oct-nov-2013/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -25,7 +25,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "TemporalTileLayer", + ZIndex = 100, + Type = "TemporalTileProvider", Mode = "Folder", Folder = { Folder = syncedDirectory .. "2048", @@ -62,7 +63,6 @@ asset.export(Track) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/volcano_ash.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/volcano_ash.asset index 7529963294..13bb8d1589 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/volcano_ash.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/atmosphere/volcano_ash.asset @@ -18,7 +18,7 @@ engine failures]] local URL = "https://sos.noaa.gov/catalog/datasets/volcanic-ash-eruption-iceland/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -31,7 +31,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "2992", Description = Description } @@ -51,7 +52,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/agriculture-cropland.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/agriculture-cropland.asset index 3babd0b6d7..c8e2c1794a 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/agriculture-cropland.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/agriculture-cropland.asset @@ -14,7 +14,7 @@ the area of Africa]] local URL = "https://sos.noaa.gov/catalog/datasets/agriculture-cropland-intensity/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -26,6 +26,7 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, + ZIndex = 100, FilePath = syncedDirectory .. "4096.png", Description = Description } @@ -34,6 +35,7 @@ local LayerCountries = { Identifier = Identifier .. "-countries", Name = Name .. " (w/ countries)", Enabled = asset.enabled, + ZIndex = 100, FilePath = syncedDirectory .. "4096_countries.png", Description = Description } @@ -69,7 +71,6 @@ asset.export(Legend) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/agriculture-pastureland.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/agriculture-pastureland.asset index 5e0ddef36e..478c1c95f4 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/agriculture-pastureland.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/agriculture-pastureland.asset @@ -14,7 +14,7 @@ the area of Africa]] local URL = "https://sos.noaa.gov/catalog/datasets/agriculture-pastureland-intensity/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -26,6 +26,7 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, + ZIndex = 100, FilePath = syncedDirectory .. "4096.png", Description = Description } @@ -34,6 +35,7 @@ local LayerCountries = { Identifier = Identifier .. "-countries", Name = Name .. " (w/ countries)", Enabled = asset.enabled, + ZIndex = 100, FilePath = syncedDirectory .. "4096_countries.png", Description = Description } @@ -69,7 +71,6 @@ asset.export(Legend) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/birds.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/birds.asset index 8b42aa16b3..aaa306cd46 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/birds.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/birds.asset @@ -13,7 +13,7 @@ and National Audubon Society, that allows birdwatchers to enter their observatio local URL = "https://sos.noaa.gov/catalog/datasets/bird-migration-patterns-western-hemisphere/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -26,7 +26,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "birds", Description = Description } @@ -35,6 +36,7 @@ local Colorbar = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, + ZIndex = 100, Type = "ScreenSpaceImageLocal", TexturePath = syncedDirectory .. "colorbar.png", FaceCamera = false, @@ -59,7 +61,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/blue_marble-blue_marble.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/blue_marble-blue_marble.asset index f991d2c041..e7a4b7c439 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/blue_marble-blue_marble.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/blue_marble-blue_marble.asset @@ -17,7 +17,7 @@ poles using thermal infrared imagery.]] local URL = "https://sos.noaa.gov/catalog/datasets/blue-marble/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -29,8 +29,10 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, + ZIndex = 100, FilePath = syncedDirectory .. "4096.jpg", - Description = Description + Description = Description, + CacheSettings = { Enabled = false } } @@ -48,7 +50,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/blue_marble-blue_marble_topo.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/blue_marble-blue_marble_topo.asset index e6c3b197bf..b9067dc5c0 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/blue_marble-blue_marble_topo.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/blue_marble-blue_marble_topo.asset @@ -13,7 +13,7 @@ local Description = [[The Blue Marble is an incredibly detailed, true-color depi local URL = "https://sos.noaa.gov/catalog/datasets/blue-marble-with-topography-seasonal/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -26,7 +26,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "TemporalTileLayer", + ZIndex = 100, + Type = "TemporalTileProvider", Mode = "Folder", Folder = { Folder = syncedDirectory .. "5400", @@ -52,7 +53,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/blue_marble-blue_marble_topo_bathy.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/blue_marble-blue_marble_topo_bathy.asset index 966f8ca018..f7840349d4 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/blue_marble-blue_marble_topo_bathy.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/blue_marble-blue_marble_topo_bathy.asset @@ -13,7 +13,7 @@ local Description = [[The Blue Marble is an incredibly detailed, true-color depi local URL = "https://sos.noaa.gov/catalog/datasets/blue-marble-with-topography-seasonal/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -26,7 +26,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "TemporalTileLayer", + ZIndex = 100, + Type = "TemporalTileProvider", Mode = "Folder", Folder = { Folder = syncedDirectory .. "5400", @@ -52,7 +53,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/blue_marble-nightlights.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/blue_marble-nightlights.asset index 2756a119e3..b4a3388847 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/blue_marble-nightlights.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/blue_marble-nightlights.asset @@ -19,7 +19,7 @@ needed to get a view of the clouds over the poles using thermal infrared imagery local URL = "https://sos.noaa.gov/catalog/datasets/blue-marble-and-nighttime-lights/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -33,7 +33,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "images", Description = Description } @@ -53,7 +54,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/blue_marble-seasonal_blue_marble.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/blue_marble-seasonal_blue_marble.asset index fcfa08d84a..aaf2257ef8 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/blue_marble-seasonal_blue_marble.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/blue_marble-seasonal_blue_marble.asset @@ -14,7 +14,7 @@ on any given day clouds are blocking a significant portion of the surface]] local URL = "https://sos.noaa.gov/catalog/datasets/blue-marble-seasonal/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -27,7 +27,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "TemporalTileLayer", + ZIndex = 100, + Type = "TemporalTileProvider", Mode = "Folder", Folder = { Folder = syncedDirectory .. "4096", @@ -53,7 +54,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/dams-global.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/dams-global.asset index ab5686d954..78c0e51a01 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/dams-global.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/dams-global.asset @@ -12,7 +12,7 @@ the world's hydrological cycle]] local URL = "https://sos.noaa.gov/catalog/datasets/dams-and-reservoirs-1800-2010/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -24,7 +24,8 @@ local syncedDirectory = asset.syncedResource({ local Layer = { Identifier = Identifier, Name = Name, - Type = "ImageSequenceTileLayer", + Type = "ImageSequenceTileProvider", + ZIndex = 100, FolderPath = syncedDirectory .. "4096", Description = Description } @@ -44,7 +45,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/dams-mississippi.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/dams-mississippi.asset index 8e0a677ce0..94efe2ee18 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/dams-mississippi.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/dams-mississippi.asset @@ -12,7 +12,7 @@ where data were available]] local URL = "https://sos.noaa.gov/catalog/datasets/dams-and-reservoirs-mississippi-river-1800-2010/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -25,7 +25,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "4096", Description = Description } @@ -45,7 +46,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/dams-yangtze.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/dams-yangtze.asset index 1a272bc7ef..c9e9e7cba3 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/dams-yangtze.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/dams-yangtze.asset @@ -12,7 +12,7 @@ the world's hydrological cycle]] local URL = "https://sos.noaa.gov/catalog/datasets/dams-and-reservoirs-yangtze-1800-2010/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -25,7 +25,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "4096", Description = Description } @@ -45,7 +46,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/day_night-06z_only.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/day_night-06z_only.asset index 62832a4efa..b2166992e7 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/day_night-06z_only.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/day_night-06z_only.asset @@ -14,7 +14,7 @@ greater area than the land covered by darkness]] local URL = "https://sos.noaa.gov/catalog/datasets/daynight-terminator-daily/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -27,7 +27,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "TemporalTileLayer", + ZIndex = 100, + Type = "TemporalTileProvider", Mode = "Folder", Folder = { Folder = syncedDirectory .. "2048", @@ -53,7 +54,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/day_night-full_year.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/day_night-full_year.asset index c52b4ebcb8..a0f654223e 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/day_night-full_year.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/day_night-full_year.asset @@ -14,7 +14,7 @@ greater area than the land covered by darkness]] local URL = "https://sos.noaa.gov/catalog/datasets/daynight-terminator-hourly/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -28,7 +28,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "TemporalTileLayer", + ZIndex = 100, + Type = "TemporalTileProvider", Mode = "Folder", Folder = { Folder = syncedDirectory .. "images", @@ -54,7 +55,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/day_night-oneday.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/day_night-oneday.asset index 00e7952031..e7834bd81d 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/day_night-oneday.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/day_night-oneday.asset @@ -14,7 +14,7 @@ greater area than the land covered by darkness]] local URL = "https://sos.noaa.gov/catalog/datasets/daynight-terminator-single-day/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -26,7 +26,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "2048", Description = Description } @@ -46,7 +47,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/earth_night-1992_2002.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/earth_night-1992_2002.asset index bbbedd7abd..6364ac3b06 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/earth_night-1992_2002.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/earth_night-1992_2002.asset @@ -13,7 +13,7 @@ local Description = [[The data was recorded by the Defense Meteorological Satell local URL = "https://sos.noaa.gov/catalog/datasets/nighttime-lights-comparison-1992-and-2002/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -24,6 +24,7 @@ local syncedDirectory = asset.syncedResource({ local Layer1992 = { Identifier = Identifier .. "-1992", Name = Name .. " (1992)", + ZIndex = 100, FilePath = syncedDirectory .. "Nightlights_1992.jpg", Description = Description } @@ -31,6 +32,7 @@ local Layer1992 = { local Layer2002 = { Identifier = Identifier .. "-2002", Name = Name .. " (2002)", + ZIndex = 100, FilePath = syncedDirectory .. "Nightlights_2002.jpg", Description = Description } @@ -53,7 +55,6 @@ asset.export(Layer2002) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/earth_night-1992_2008.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/earth_night-1992_2008.asset index a3685b893b..6146c0f910 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/earth_night-1992_2008.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/earth_night-1992_2008.asset @@ -13,7 +13,7 @@ infrared radiance at night]] local URL = "https://sos.noaa.gov/catalog/datasets/nighttime-lights-comparison-1992-2000-and-2008/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -25,6 +25,7 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, + ZIndex = 100, FilePath = syncedDirectory .. "8000.png", Description = Description } @@ -44,7 +45,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/earth_night-1992_2009.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/earth_night-1992_2009.asset index 79847962d9..cd99a077ee 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/earth_night-1992_2009.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/earth_night-1992_2009.asset @@ -13,7 +13,7 @@ radiance at night]] local URL = "https://sos.noaa.gov/catalog/datasets/nighttime-lights-comparison-1992-and-2009/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -25,6 +25,7 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, + ZIndex = 100, FilePath = syncedDirectory .. "5000.png", Description = Description } @@ -57,7 +58,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/earth_night-2012.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/earth_night-2012.asset index f272717e0e..90aec3f4fe 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/earth_night-2012.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/earth_night-2012.asset @@ -11,7 +11,7 @@ the Department of Defense]] local URL = "https://sos.noaa.gov/catalog/datasets/nighttime-lights-2012/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -23,6 +23,7 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, + ZIndex = 100, FilePath = syncedDirectory .. "3600.jpg", Description = Description } @@ -42,7 +43,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/earth_night-color_nightlights.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/earth_night-color_nightlights.asset index e246a6f54c..130d2139b8 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/earth_night-color_nightlights.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/earth_night-color_nightlights.asset @@ -16,7 +16,7 @@ Meteorological Satellite Program (DMSP) data spanning October 1994 - March 1995] local URL = "https://sos.noaa.gov/catalog/datasets/nighttime-lights-colorized/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -28,6 +28,7 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, + ZIndex = 100, FilePath = syncedDirectory .. "4096.png", Description = Description } @@ -47,7 +48,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/earth_night-nightlights.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/earth_night-nightlights.asset index 7b3dfcd372..0179b0b6e8 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/earth_night-nightlights.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/earth_night-nightlights.asset @@ -16,7 +16,7 @@ Meteorological Satellite Program (DMSP) data spanning October 1994 - March 1995] local URL = "https://sos.noaa.gov/catalog/datasets/nighttime-lights/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -28,6 +28,7 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, + ZIndex = 100, FilePath = syncedDirectory .. "4800.jpg", Description = Description } @@ -47,7 +48,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/earthquake-1980_1995_quakes.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/earthquake-1980_1995_quakes.asset index b84996ad10..dcae6cbc02 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/earthquake-1980_1995_quakes.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/earthquake-1980_1995_quakes.asset @@ -21,7 +21,7 @@ some shaking of indoor items and significant damage unlikely]] local URL = "https://sos.noaa.gov/catalog/datasets/earthquakes-cumulative-1980-1995/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -34,7 +34,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "1024", Description = Description } @@ -95,7 +96,6 @@ asset.export(QuakebarCombined) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/earthquake-2001_2015.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/earthquake-2001_2015.asset index 01df0c1d2c..fe2e4c9daf 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/earthquake-2001_2015.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/earthquake-2001_2015.asset @@ -18,7 +18,7 @@ when they are shallow within the earth (less than 100 km or 60 mi. deep)]] local URL = "https://sos.noaa.gov/catalog/datasets/earthquakes-2001-2015/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -29,6 +29,7 @@ local syncedDirectory = asset.syncedResource({ local LayerAllquakes = { Identifier = Identifier .. "-allquakes", Name = Name .. " (All Quakes)", + ZIndex = 100, FilePath = syncedDirectory .. "All_Quakes_2001-2015_4k.jpg", Description = Description } @@ -36,6 +37,7 @@ local LayerAllquakes = { local LayerQuakeBasemap = { Identifier = Identifier .. "-quake-basemap", Name = Name .. " (Quake Basemap)", + ZIndex = 100, FilePath = syncedDirectory .. "quake_basemap_4k.jpg", Description = Description } @@ -43,6 +45,7 @@ local LayerQuakeBasemap = { local LayerTsunamiBasemap = { Identifier = Identifier .. "-tsunami-basemap", Name = Name .. " (Tsunami Basemap)", + ZIndex = 100, FilePath = syncedDirectory .. "Tsunami_basemap_4k.jpg", Description = Description } @@ -50,6 +53,7 @@ local LayerTsunamiBasemap = { local LayerQuakesGte6p5 = { Identifier = Identifier .. "-gte6_5", Name = Name .. " (GTE 6.5)", + ZIndex = 100, FilePath = syncedDirectory .. "Quakes_gte6.5_2001-2015_4k.jpg", Description = Description } @@ -57,6 +61,7 @@ local LayerQuakesGte6p5 = { local LayerQuakesGte8 = { Identifier = Identifier .. "-gte8", Name = Name .. " (GTE 8.0)", + ZIndex = 100, FilePath = syncedDirectory .. "Quakes_gte8_2001-2015_4k.jpg", Description = Description } @@ -99,7 +104,6 @@ asset.export(LayerQuakesGte8) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/earthquakes_1901_2000.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/earthquakes_1901_2000.asset index ae3ec7f342..9cfa6db25a 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/earthquakes_1901_2000.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/earthquakes_1901_2000.asset @@ -19,7 +19,7 @@ the plate boundary faults responsible for the majority of all of these earthquak local URL = "https://sos.noaa.gov/catalog/datasets/earthquakes-of-the-20th-century/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -30,6 +30,7 @@ local syncedDirectory = asset.syncedResource({ local LayerAllquakes = { Identifier = Identifier .. "-allquakes", Name = Name .. " (All Quakes)", + ZIndex = 100, FilePath = syncedDirectory .. "All_Quakes_1901-2000_4k.jpg", Description = Description } @@ -37,6 +38,7 @@ local LayerAllquakes = { local LayerQuakeBasemap = { Identifier = Identifier .. "-quake-basemap", Name = Name .. " (Quake Basemap)", + ZIndex = 100, FilePath = syncedDirectory .. "quake_basemap_4k.jpg", Description = Description } @@ -44,6 +46,7 @@ local LayerQuakeBasemap = { local LayerPlateBoundaries = { Identifier = Identifier .. "-plate_boundaries", Name = Name .. " (Plate Boundaries)", + ZIndex = 100, FilePath = syncedDirectory .. "Plate_Boundaries_4k.jpg", Description = Description } @@ -51,6 +54,7 @@ local LayerPlateBoundaries = { local LayerQuakesGte6p5 = { Identifier = Identifier .. "-gte6_5", Name = Name .. " (GTE 6.5)", + ZIndex = 100, FilePath = syncedDirectory .. "Quakes_gte6.5_1901-2000_4k.jpg", Description = Description } @@ -58,6 +62,7 @@ local LayerQuakesGte6p5 = { local LayerQuakesGte8 = { Identifier = Identifier .. "-gte8", Name = Name .. " (GTE 8.0)", + ZIndex = 100, FilePath = syncedDirectory .. "Quakes_gte8_1901-2000_4k.jpg", Description = Description } @@ -100,7 +105,6 @@ asset.export(LayerQuakesGte8) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/earthquakes_and_eruptions.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/earthquakes_and_eruptions.asset index 365c23f778..efbc1183dc 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/earthquakes_and_eruptions.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/earthquakes_and_eruptions.asset @@ -14,7 +14,7 @@ dots]] local URL = "https://sos.noaa.gov/catalog/datasets/earthquakes-and-eruptions-1960-2010/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -27,7 +27,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "4096", Description = Description } @@ -60,7 +61,6 @@ asset.export(Legend) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/earths_magnetism_magnetic_lines.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/earths_magnetism_magnetic_lines.asset index b29f26799c..05a33d5b59 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/earths_magnetism_magnetic_lines.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/earths_magnetism_magnetic_lines.asset @@ -19,7 +19,7 @@ Earth, between the red and blue lines, is the magnetic equator shaded yellow]] local URL = "https://sos.noaa.gov/catalog/datasets/earths-magnetic-lines/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -32,7 +32,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "TemporalTileLayer", + ZIndex = 100, + Type = "TemporalTileProvider", Mode = "Folder", Folder = { Folder = syncedDirectory .. "4096", @@ -58,7 +59,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/earths_magnetism_magnets.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/earths_magnetism_magnets.asset index 8846b8617d..692791d73e 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/earths_magnetism_magnets.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/earths_magnetism_magnets.asset @@ -19,7 +19,7 @@ Earth, between the red and blue lines, is the magnetic equator shaded yellow]] local URL = "https://sos.noaa.gov/catalog/datasets/earths-magnetic-field-compass-needles/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -32,7 +32,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "TemporalTileLayer", + ZIndex = 100, + Type = "TemporalTileProvider", Mode = "Folder", Folder = { Folder = syncedDirectory .. "4096", @@ -58,7 +59,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/etopo1.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/etopo1.asset index e8368c6c65..b3c32213b6 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/etopo1.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/etopo1.asset @@ -16,7 +16,7 @@ modeling and Earth visualization]] local URL = "https://sos.noaa.gov/catalog/datasets/etopo1-topography-and-bathymetry/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -28,6 +28,7 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, + ZIndex = 100, FilePath = syncedDirectory .. "4096.jpg", Description = Description } @@ -61,7 +62,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/etopo2-earth_bright.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/etopo2-earth_bright.asset index cb63930d27..81d437a6bd 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/etopo2-earth_bright.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/etopo2-earth_bright.asset @@ -14,7 +14,7 @@ uses green, yellow, orange, red and white to denote increasing elevation of the local URL = "https://sos.noaa.gov/catalog/datasets/etopo2-topography-and-bathymetry-bright-colors/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -26,6 +26,7 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, + ZIndex = 100, FilePath = syncedDirectory .. "10800.jpg", Description = Description } @@ -45,7 +46,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/etopo2-earth_color.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/etopo2-earth_color.asset index a225878d88..186aedc161 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/etopo2-earth_color.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/etopo2-earth_color.asset @@ -14,7 +14,7 @@ green, yellow, orange, red and white to denote increasing elevation of the land] local URL = "https://sos.noaa.gov/catalog/datasets/etopo2-topography-and-bathymetry-color-enhanced/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -26,6 +26,7 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, + ZIndex = 100, FilePath = syncedDirectory .. "7200.jpg", Description = Description } @@ -45,7 +46,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/etopo2-earth_shaded.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/etopo2-earth_shaded.asset index 70decb20cd..aebe1350a6 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/etopo2-earth_shaded.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/etopo2-earth_shaded.asset @@ -14,7 +14,7 @@ model]] local URL = "https://sos.noaa.gov/catalog/datasets/etopo2-topography-and-bathymetry-shaded-colors/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -26,6 +26,7 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, + ZIndex = 100, FilePath = syncedDirectory .. "5400.jpg", Description = Description } @@ -45,7 +46,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/etopo2-earth_topo.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/etopo2-earth_topo.asset index cc6f7a54ed..bf6d9d067a 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/etopo2-earth_topo.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/etopo2-earth_topo.asset @@ -17,7 +17,7 @@ use green, yellow, orange, red and white to denote increasing elevation of the l local URL = "https://sos.noaa.gov/catalog/datasets/etopo2-topography-and-bathymetry-natural-colors/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -29,6 +29,7 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, + ZIndex = 100, FilePath = syncedDirectory .. "4096.jpg", Description = Description } @@ -48,7 +49,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/etopo2-landsat.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/etopo2-landsat.asset index 4b461e3cbf..41098aa6c5 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/etopo2-landsat.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/etopo2-landsat.asset @@ -13,7 +13,7 @@ from the GLOBE project which has a global digital elevation model]] local URL = "https://sos.noaa.gov/catalog/datasets/etopo2-bathymetry/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -25,6 +25,7 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, + ZIndex = 100, FilePath = syncedDirectory .. "4096.jpg", Description = Description } @@ -44,7 +45,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/fire.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/fire.asset index 6f0fb0148c..9d52f83bc0 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/fire.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/fire.asset @@ -17,7 +17,7 @@ and their short- and long-term effects on ecosystems]] local URL = "https://sos.noaa.gov/catalog/datasets/fires-2009/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -30,7 +30,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "TemporalTileLayer", + ZIndex = 100, + Type = "TemporalTileProvider", Mode = "Folder", Folder = { Folder = syncedDirectory .. "4096", @@ -56,7 +57,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/fire_veg.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/fire_veg.asset index 1e08cc27fa..ade8425057 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/fire_veg.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/fire_veg.asset @@ -16,7 +16,7 @@ local Description = [[This dataset leads viewers on a narrated global tour of fi local URL = "https://sos.noaa.gov/catalog/datasets/fire-observations-and-vegetation-2002-2011/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -29,7 +29,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "2048", Description = Description } @@ -75,7 +76,6 @@ asset.export(ColorbarVeg) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/flooding-displaced_250.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/flooding-displaced_250.asset index fc38b5ac1e..221d3cde96 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/flooding-displaced_250.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/flooding-displaced_250.asset @@ -17,7 +17,7 @@ vulnerable to the effects of flooding]] local URL = "https://sos.noaa.gov/catalog/datasets/flood-events-displaced-250-or-more-people-2000-2009/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -29,6 +29,7 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, + ZIndex = 100, FilePath = syncedDirectory .. "3600.png", Description = Description } @@ -37,6 +38,7 @@ local LayerNight = { Identifier = Identifier .. "-night", Name = Name .. " (Night)", Enabled = asset.enabled, + ZIndex = 100, FilePath = syncedDirectory .. "4096_night.jpg", Description = Description } @@ -59,7 +61,6 @@ asset.export(LayerNight) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/flooding-fatal.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/flooding-fatal.asset index 8b053ac833..769680546a 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/flooding-fatal.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/flooding-fatal.asset @@ -17,7 +17,7 @@ vulnerable to the effects of flooding]] local URL = "https://sos.noaa.gov/catalog/datasets/flood-events-50-or-more-fatalities-2000-2009/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -29,6 +29,7 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, + ZIndex = 100, FilePath = syncedDirectory .. "3600.png", Description = Description } @@ -37,6 +38,7 @@ local LayerNight = { Identifier = Identifier .. "-night", Name = Name .. " (Night)", Enabled = asset.enabled, + ZIndex = 100, FilePath = syncedDirectory .. "4096_night.jpg", Description = Description } @@ -59,7 +61,6 @@ asset.export(LayerNight) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/flooding-heavy_rain.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/flooding-heavy_rain.asset index ccda40b529..e8a57f5e01 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/flooding-heavy_rain.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/flooding-heavy_rain.asset @@ -17,7 +17,7 @@ vulnerable to the effects of flooding]] local URL = "https://sos.noaa.gov/catalog/datasets/flood-events-due-to-heavy-rain-2000-2009/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -29,6 +29,7 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, + ZIndex = 100, FilePath = syncedDirectory .. "3600.png", Description = Description } @@ -37,6 +38,7 @@ local LayerNight = { Identifier = Identifier .. "-night", Name = Name .. " (Night)", Enabled = asset.enabled, + ZIndex = 100, FilePath = syncedDirectory .. "4096_night.jpg", Description = Description } @@ -59,7 +61,6 @@ asset.export(LayerNight) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/flooding-major_floods.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/flooding-major_floods.asset index 414a7a44e5..8f0d835221 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/flooding-major_floods.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/flooding-major_floods.asset @@ -17,7 +17,7 @@ vulnerable to the effects of flooding]] local URL = "https://sos.noaa.gov/catalog/datasets/flood-events-2000-2009/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -29,6 +29,7 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, + ZIndex = 100, FilePath = syncedDirectory .. "4096.jpg", Description = Description } @@ -37,6 +38,7 @@ local LayerFloods = { Identifier = Identifier .. "-floods", Name = Name .. " (Floods)", Enabled = asset.enabled, + ZIndex = 100, FilePath = syncedDirectory .. "flood_3600.png", Description = Description } @@ -59,7 +61,6 @@ asset.export(LayerFloods) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/food_v_feed.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/food_v_feed.asset index 8ce2ecc1e9..34e55cb888 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/food_v_feed.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/food_v_feed.asset @@ -12,7 +12,7 @@ where most of the crops are used as animal feed (in red)]] local URL = "https://sos.noaa.gov/catalog/datasets/agriculture-food-vs-feed/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -24,6 +24,7 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, + ZIndex = 100, FilePath = syncedDirectory .. "4096.png", Description = Description } @@ -32,6 +33,7 @@ local LayerCountries = { Identifier = Identifier .. "-countries", Name = Name .. " (w/ countries)", Enabled = asset.enabled, + ZIndex = 100, FilePath = syncedDirectory .. "4096_countries.png", Description = Description } @@ -67,7 +69,6 @@ asset.export(Label) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/forests.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/forests.asset index 6eec50dfa2..e1961f649a 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/forests.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/forests.asset @@ -13,7 +13,7 @@ replanting after loss has occurred]] local URL = "https://sos.noaa.gov/catalog/datasets/forest-change-extent-gain-and-loss-2000-2014/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -24,6 +24,7 @@ local syncedDirectory = asset.syncedResource({ local LayerCombined = { Identifier = Identifier, Name = Name, + ZIndex = 100, FilePath = syncedDirectory .. "combined.png", Description = Description } @@ -31,6 +32,7 @@ local LayerCombined = { local LayerExtent = { Identifier = Identifier .. "-extent", Name = Name .. " (Extent)", + ZIndex = 100, FilePath = syncedDirectory .. "extent.png", Description = Description } @@ -38,6 +40,7 @@ local LayerExtent = { local LayerGain = { Identifier = Identifier .. "-gain", Name = Name .. " (Gain)", + ZIndex = 100, FilePath = syncedDirectory .. "gain.png", Description = Description } @@ -45,6 +48,7 @@ local LayerGain = { local LayerLoss = { Identifier = Identifier .. "-loss", Name = Name .. " (Loss)", + ZIndex = 100, FilePath = syncedDirectory .. "loss.png", Description = Description } @@ -52,6 +56,7 @@ local LayerLoss = { local LayerMap = { Identifier = Identifier .. "-map", Name = Name .. " (Map)", + ZIndex = 100, FilePath = syncedDirectory .. "map.png", Description = Description } @@ -110,7 +115,6 @@ asset.export(Label1) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/geomag_tracklines.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/geomag_tracklines.asset index 631bbd5ead..baf9fad4b8 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/geomag_tracklines.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/geomag_tracklines.asset @@ -13,7 +13,7 @@ created in the liquid iron-nickel core]] local URL = "https://sos.noaa.gov/catalog/datasets/geomagnetic-tracklines/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -25,6 +25,7 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, + ZIndex = 100, FilePath = syncedDirectory .. "4096.png", Description = Description } @@ -58,7 +59,6 @@ asset.export(Legend) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/global_vegetation.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/global_vegetation.asset index cff0605334..47a96ca740 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/global_vegetation.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/global_vegetation.asset @@ -13,7 +13,7 @@ data from the satellite, developed by scientists at NOAA]] local URL = "https://sos.noaa.gov/catalog/datasets/vegetation-seasonal-changes-apr-2012-apr-2013/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -29,6 +29,7 @@ local Background1Layer = { Identifier = Identifier .. "-background-14a", Name = Name .. " (Background Week 14a)", Enabled = asset.enabled, + ZIndex = 100, FilePath = syncedDirectory .. "2012_week14a.png", Description = Description } @@ -37,6 +38,7 @@ local Background2Layer = { Identifier = Identifier .. "-background-14", Name = Name .. " (Background Week 14)", Enabled = asset.enabled, + ZIndex = 100, FilePath = syncedDirectory .. "2012week14.png", Description = Description } @@ -45,7 +47,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "TemporalTileLayer", + ZIndex = 100, + Type = "TemporalTileProvider", Mode = "Folder", Folder = { Folder = imagesDestination, @@ -91,7 +94,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/gray_earth.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/gray_earth.asset index 0197017490..0e9f2eeef1 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/gray_earth.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/gray_earth.asset @@ -24,7 +24,7 @@ equalized hypsography that forms the foundation of the Gray Earth imagery]] local URL = "https://sos.noaa.gov/catalog/datasets/gray-earth/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -36,6 +36,7 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, + ZIndex = 100, FilePath = syncedDirectory .. "4096.png", Description = Description } @@ -55,7 +56,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/hot_topo.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/hot_topo.asset index 73f3409ba2..1f9685a594 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/hot_topo.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/hot_topo.asset @@ -20,7 +20,7 @@ Everest, the tallest point on earth at a height of 29,035 feet, almost 5.5 miles local URL = "https://sos.noaa.gov/catalog/datasets/topography-and-bathymetry-with-nighttime-lights/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -34,7 +34,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "images", Description = Description } @@ -54,7 +55,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/irsat_nightlights.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/irsat_nightlights.asset index a54dfe3f8d..fab72dab51 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/irsat_nightlights.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/irsat_nightlights.asset @@ -14,7 +14,7 @@ greater area than the land covered by darkness]] local URL = "https://sos.noaa.gov/catalog/datasets/daynight-terminator-with-clouds/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -27,7 +27,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "2048", Description = Description } @@ -47,7 +48,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/japan_quake.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/japan_quake.asset index 728ef25be7..24f4c6eada 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/japan_quake.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/japan_quake.asset @@ -14,7 +14,7 @@ waves]] local URL = "https://sos.noaa.gov/catalog/datasets/japan-earthquake-march-2011/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -27,7 +27,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "2048", Description = Description } @@ -60,7 +61,6 @@ asset.export(Legend) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/koppen_climate-koppen_1901_2100.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/koppen_climate-koppen_1901_2100.asset index c902c48aa9..137503a07d 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/koppen_climate-koppen_1901_2100.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/koppen_climate-koppen_1901_2100.asset @@ -14,7 +14,7 @@ climatologist Rudolf Geiger]] local URL = "https://sos.noaa.gov/catalog/datasets/koppen-geiger-climate-changes-1901-2100/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -27,7 +27,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "4096", Description = Description } @@ -74,7 +75,6 @@ asset.export(Legend1) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/koppen_climate-koppen_2007.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/koppen_climate-koppen_2007.asset index b9c6112dd2..e153e36a98 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/koppen_climate-koppen_2007.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/koppen_climate-koppen_2007.asset @@ -14,7 +14,7 @@ climatologist Rudolf Geiger.This particular revision is from 2007]] local URL = "https://sos.noaa.gov/catalog/datasets/koppen-geiger-climate-classification-2007/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -26,6 +26,7 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, + ZIndex = 100, FilePath = syncedDirectory .. "4096.jpg", Description = Description } @@ -72,7 +73,6 @@ asset.export(Legend1) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/land_cover-animation.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/land_cover-animation.asset index 1274a7f916..95e806ef55 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/land_cover-animation.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/land_cover-animation.asset @@ -19,7 +19,7 @@ Earth]] local URL = "https://sos.noaa.gov/catalog/datasets/land-cover-animation/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -32,7 +32,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "3600", Description = Description } @@ -66,7 +67,6 @@ asset.export(Label) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/land_cover-ribbon.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/land_cover-ribbon.asset index 15514b56fd..8f398f416d 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/land_cover-ribbon.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/land_cover-ribbon.asset @@ -19,7 +19,7 @@ Earth]] local URL = "https://sos.noaa.gov/catalog/datasets/land-cover-map-with-ribbon-of-labels/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -31,6 +31,7 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, + ZIndex = 100, FilePath = syncedDirectory .. "2048.jpg", Description = Description } @@ -64,7 +65,6 @@ asset.export(Label) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/land_cover-slideshow.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/land_cover-slideshow.asset index 21ba1b8650..d2d87723c1 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/land_cover-slideshow.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/land_cover-slideshow.asset @@ -19,7 +19,7 @@ Earth]] local URL = "https://sos.noaa.gov/catalog/datasets/land-cover-map-with-slideshow-of-labels/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -34,6 +34,7 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, + ZIndex = 100, FilePath = syncedDirectory .. "2048.jpg", Description = Description } @@ -94,7 +95,6 @@ end asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/land_production-cropland_current.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/land_production-cropland_current.asset index 9062e2ef0c..900da7410b 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/land_production-cropland_current.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/land_production-cropland_current.asset @@ -14,7 +14,7 @@ indicate higher yields]] local URL = "https://sos.noaa.gov/catalog/datasets/agriculture-cropland-yield-current/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -26,6 +26,7 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, + ZIndex = 100, FilePath = syncedDirectory .. "4096.png", Description = Description } @@ -34,6 +35,7 @@ local LayerCountries = { Identifier = Identifier .. "-countries", Name = Name .. " (w/ countries)", Enabled = asset.enabled, + ZIndex = 100, FilePath = syncedDirectory .. "4096_countries.png", Description = Description } @@ -69,7 +71,6 @@ asset.export(Legend) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/land_production-cropland_potential.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/land_production-cropland_potential.asset index fa2184dbbd..fcce8b086b 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/land_production-cropland_potential.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/land_production-cropland_potential.asset @@ -13,7 +13,7 @@ yields, while bright pink areas indicate higher yields]] local URL = "https://sos.noaa.gov/catalog/datasets/agriculture-cropland-yield-potential/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -25,6 +25,7 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, + ZIndex = 100, FilePath = syncedDirectory .. "4096.png", Description = Description } @@ -33,6 +34,7 @@ local LayerCountries = { Identifier = Identifier .. "-countries", Name = Name .. " (w/ countries)", Enabled = asset.enabled, + ZIndex = 100, FilePath = syncedDirectory .. "4096_countries.png", Description = Description } @@ -68,7 +70,6 @@ asset.export(Legend) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/land_production-production_gap.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/land_production-production_gap.asset index 2362a1ac18..e4e1c5fbaa 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/land_production-production_gap.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/land_production-production_gap.asset @@ -13,7 +13,7 @@ local Description = [[A major component of the 2 Billion More Coming to Dinner f local URL = "https://sos.noaa.gov/catalog/datasets/agriculture-cropland-yield-potential/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -25,6 +25,7 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, + ZIndex = 100, FilePath = syncedDirectory .. "4096.png", Description = Description } @@ -33,6 +34,7 @@ local LayerCountries = { Identifier = Identifier .. "-countries", Name = Name .. " (w/ countries)", Enabled = asset.enabled, + ZIndex = 100, FilePath = syncedDirectory .. "4096_countries.png", Description = Description } @@ -68,7 +70,6 @@ asset.export(Legend) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/land_ratio.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/land_ratio.asset index 32a40ad221..3c7760e311 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/land_ratio.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/land_ratio.asset @@ -9,7 +9,7 @@ that shows the ratio of land and sea at different latitudes]] local URL = "https://sos.noaa.gov/catalog/datasets/land-to-sea-ratio/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -22,7 +22,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "4096", Description = Description } @@ -42,7 +43,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/latitude_longitude.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/latitude_longitude.asset index bb3c44399a..d342194268 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/latitude_longitude.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/latitude_longitude.asset @@ -10,7 +10,7 @@ introduction of map reading and exploration]] local URL = "https://sos.noaa.gov/catalog/datasets/latitude-longitude-layers/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -21,6 +21,7 @@ local syncedDirectory = asset.syncedResource({ local LayerBase = { Identifier = Identifier, Name = Name, + ZIndex = 100, FilePath = syncedDirectory .. "2048-base.png", Description = Description } @@ -28,6 +29,7 @@ local LayerBase = { local LayerCombined = { Identifier = Identifier .. "-combined", Name = Name .. " (Combined)", + ZIndex = 100, FilePath = syncedDirectory .. "2048-flat-combined.png", Description = Description } @@ -35,6 +37,7 @@ local LayerCombined = { local LayerLatitude = { Identifier = Identifier .. "-latitude", Name = Name .. " (Latitude)", + ZIndex = 100, FilePath = syncedDirectory .. "2048-layer-latitude.png", Description = Description } @@ -42,6 +45,7 @@ local LayerLatitude = { local LayerLongitude = { Identifier = Identifier .. "-longitude", Name = Name .. " (Longitude)", + ZIndex = 100, FilePath = syncedDirectory .. "2048-layer-longitude.png", Description = Description } @@ -70,7 +74,6 @@ asset.export(LayerLongitude) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/magnetic_declination.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/magnetic_declination.asset index ae8d56a7d7..71c91aa74d 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/magnetic_declination.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/magnetic_declination.asset @@ -13,7 +13,7 @@ created in the liquid iron-nickel core]] local URL = "https://sos.noaa.gov/catalog/datasets/earths-magnetic-declination/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -26,7 +26,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "TemporalTileLayer", + ZIndex = 100, + Type = "TemporalTileProvider", Mode = "Folder", Folder = { Folder = syncedDirectory .. "4096", @@ -60,7 +61,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/nightsky.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/nightsky.asset index e79777a478..c48eb6529d 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/nightsky.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/nightsky.asset @@ -10,7 +10,7 @@ constellations in the night sky]] local URL = "https://sos.noaa.gov/catalog/datasets/light-pollution-artificial-sky-brightness/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -22,6 +22,7 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, + ZIndex = 100, FilePath = syncedDirectory .. "4096.jpg", Description = Description } @@ -54,7 +55,6 @@ asset.export(Legend) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/nuclear_earthquake.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/nuclear_earthquake.asset index 41e56bf74f..60930020eb 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/nuclear_earthquake.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/nuclear_earthquake.asset @@ -19,7 +19,7 @@ prediction continues to be inaccurate and imprecise]] local URL = "https://sos.noaa.gov/catalog/datasets/earthquakes-and-nuclear-power-plants/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -32,6 +32,7 @@ local imagesDestination = syncedDirectory .. "images" local LayerBase = { Identifier = Identifier .. "-base", Name = Name .. " (Base)", + ZIndex = 100, FilePath = syncedDirectory .. "2048.jpg", Description = Description } @@ -39,6 +40,7 @@ local LayerBase = { local LayerAll = { Identifier = Identifier .. "-all", Name = Name .. " (All)", + ZIndex = 100, FilePath = syncedDirectory .. "all_earthquakes.png", Description = Description } @@ -46,6 +48,7 @@ local LayerAll = { local LayerNew = { Identifier = Identifier .. "-new", Name = Name .. " (New)", + ZIndex = 100, FilePath = syncedDirectory .. "new.jpg", Description = Description } @@ -53,6 +56,7 @@ local LayerNew = { local LayerNuclear = { Identifier = Identifier .. "-nuclear", Name = Name .. " (Nuclear)", + ZIndex = 100, FilePath = syncedDirectory .. "nuclear_plants.png", Description = Description } @@ -60,7 +64,8 @@ local LayerNuclear = { local LayerImages = { Identifier = Identifier .. "-images", Name = Name .. " (Images)", - Type = "ImageSequenceTileLayer", + Type = "ImageSequenceTileProvider", + ZIndex = 100, FolderPath = imagesDestination, Description = Description } @@ -102,7 +107,6 @@ asset.export(Legend) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/paleo_map.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/paleo_map.asset index c510b97081..24074a5ab5 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/paleo_map.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/paleo_map.asset @@ -18,7 +18,7 @@ local Description = [[The PALEOMAP PaleoAtlas for GPlates consists of 91 paleoge local URL = "https://sos.noaa.gov/catalog/datasets/paleomap-paleoatlas-0-750-million-years-ago/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -128,6 +128,7 @@ for i,v in ipairs(layers_names) do Identifier = Identifier .. "-" .. v, Name = Name .. " " .. v, Enabled = asset.enabled, + ZIndex = 100, FilePath = imagesDestination .. "/" .. v .. ".jpg", Description = Description } @@ -171,7 +172,6 @@ end asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/paleo_overlays.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/paleo_overlays.asset index 3cbffba2f3..a689b7057d 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/paleo_overlays.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/paleo_overlays.asset @@ -18,7 +18,7 @@ mineral-rich water from the roof of the cave]] local URL = "https://sos.noaa.gov/catalog/datasets/paleoclimate-proxies/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -29,6 +29,7 @@ local syncedDirectory = asset.syncedResource({ local LayerBase = { Identifier = Identifier, Name = Name, + ZIndex = 100, FilePath = syncedDirectory .. "4096.png", Description = Description } @@ -36,6 +37,7 @@ local LayerBase = { local LayerCorals = { Identifier = Identifier .. "-corals", Name = Name .. " (Corals)", + ZIndex = 100, FilePath = syncedDirectory .. "corals.png", Description = Description } @@ -43,6 +45,7 @@ local LayerCorals = { local LayerIcerings = { Identifier = Identifier .. "-icerings", Name = Name .. " (Icerings)", + ZIndex = 100, FilePath = syncedDirectory .. "icerings.png", Description = Description } @@ -50,6 +53,7 @@ local LayerIcerings = { local LayerOcean = { Identifier = Identifier .. "-ocean", Name = Name .. " (Ocean)", + ZIndex = 100, FilePath = syncedDirectory .. "ocean.png", Description = Description } @@ -57,6 +61,7 @@ local LayerOcean = { local LayerSpeleothem = { Identifier = Identifier .. "-speleothem", Name = Name .. " (Speleothem)", + ZIndex = 100, FilePath = syncedDirectory .. "speleothem.png", Description = Description } @@ -64,6 +69,7 @@ local LayerSpeleothem = { local LayerTreeRings = { Identifier = Identifier .. "-tree_rings", Name = Name .. " (Tree Rings)", + ZIndex = 100, FilePath = syncedDirectory .. "tree_rings.png", Description = Description } @@ -111,7 +117,6 @@ asset.export(Legend) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/pantropical_biomass.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/pantropical_biomass.asset index 1f950ba22e..d5c82ca4d2 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/pantropical_biomass.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/pantropical_biomass.asset @@ -12,7 +12,7 @@ accurate baseline for evaluating and monitoring future changes]] local URL = "https://sos.noaa.gov/catalog/datasets/land-cover-woody-biomass-in-pan-tropics/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -24,6 +24,7 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, + ZIndex = 100, FilePath = syncedDirectory .. "4096.jpg", Description = Description } @@ -56,7 +57,6 @@ asset.export(Legend) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/plate_movement.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/plate_movement.asset index 44d933793b..7ceb9e57fc 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/plate_movement.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/plate_movement.asset @@ -21,7 +21,7 @@ motion of the oceanic plates]] local URL = "https://sos.noaa.gov/catalog/datasets/plate-movement-200-million-years-ago-to-today/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -34,7 +34,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "4096", Description = Description } @@ -68,7 +69,6 @@ asset.export(AgeScale) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/river_discharge_2010.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/river_discharge_2010.asset index 7cbfd7b115..c60482ea0b 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/river_discharge_2010.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/river_discharge_2010.asset @@ -12,7 +12,7 @@ cells]] local URL = "https://sos.noaa.gov/catalog/datasets/rivers-daily-discharge-2010/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -25,7 +25,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "4096", Description = Description } @@ -58,7 +59,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/sea_floor_age-iso_lines_yellow.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/sea_floor_age-iso_lines_yellow.asset index 226a21c2fa..9ddb359b25 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/sea_floor_age-iso_lines_yellow.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/sea_floor_age-iso_lines_yellow.asset @@ -18,7 +18,7 @@ not uniform causing linear features perpendicular to the divergent boundaries]] local URL = "https://sos.noaa.gov/catalog/datasets/age-of-the-seafloor-contour-lines/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -30,6 +30,7 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, + ZIndex = 100, FilePath = syncedDirectory .. "4096.png", Description = Description } @@ -63,7 +64,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/sea_floor_age-shaded_veg.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/sea_floor_age-shaded_veg.asset index 3fad571144..12fe0a166e 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/sea_floor_age-shaded_veg.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/sea_floor_age-shaded_veg.asset @@ -18,7 +18,7 @@ not uniform causing linear features perpendicular to the divergent boundaries]] local URL = "https://sos.noaa.gov/catalog/datasets/age-of-the-seafloor-vegetation/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -29,6 +29,7 @@ local syncedDirectory = asset.syncedResource({ local LayerBase = { Identifier = Identifier, Name = Name, + ZIndex = 100, FilePath = syncedDirectory .. "4096.png", Description = Description } @@ -36,6 +37,7 @@ local LayerBase = { local LayerAol = { Identifier = Identifier .. "-aol", Name = Name .. " (AOL)", + ZIndex = 100, FilePath = syncedDirectory .. "4096_aol.png", Description = Description } @@ -43,6 +45,7 @@ local LayerAol = { local LayerNoLabels = { Identifier = Identifier .. "-no_labels", Name = Name .. " (No Labels)", + ZIndex = 100, FilePath = syncedDirectory .. "4096_nolabels.jpg", Description = Description } @@ -50,6 +53,7 @@ local LayerNoLabels = { local LayerTrans = { Identifier = Identifier .. "-trans", Name = Name .. " (Trans)", + ZIndex = 100, FilePath = syncedDirectory .. "4096_trans.png", Description = Description } @@ -91,7 +95,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/sea_floor_age-topo.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/sea_floor_age-topo.asset index c02691c137..895de97d27 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/sea_floor_age-topo.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/sea_floor_age-topo.asset @@ -18,7 +18,7 @@ not uniform causing linear features perpendicular to the divergent boundaries]] local URL = "https://sos.noaa.gov/catalog/datasets/age-of-the-seafloor-topography/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -29,6 +29,7 @@ local syncedDirectory = asset.syncedResource({ local LayerBase = { Identifier = Identifier, Name = Name, + ZIndex = 100, FilePath = syncedDirectory .. "4096.png", Description = Description } @@ -36,6 +37,7 @@ local LayerBase = { local LayerAol = { Identifier = Identifier .. "-aol", Name = Name .. " (AOL)", + ZIndex = 100, FilePath = syncedDirectory .. "4096_aol.png", Description = Description } @@ -43,6 +45,7 @@ local LayerAol = { local LayerOrig = { Identifier = Identifier .. "-orig", Name = Name .. " (Original)", + ZIndex = 100, FilePath = syncedDirectory .. "4096_orig.png", Description = Description } @@ -81,7 +84,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/seismic_waves-1994northridge.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/seismic_waves-1994northridge.asset index 56e91232cc..e261cfbcd2 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/seismic_waves-1994northridge.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/seismic_waves-1994northridge.asset @@ -15,7 +15,7 @@ displaced from their homes by the effects of the quake]] local URL = "https://sos.noaa.gov/catalog/datasets/seismic-waves-northridge-earthquake-1994/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -30,6 +30,7 @@ local pipsDestination = syncedDirectory .. "pips" local LayerBase = { Identifier = Identifier, Name = Name, + ZIndex = 100, FilePath = syncedDirectory .. "background.jpg", Description = Description } @@ -37,6 +38,7 @@ local LayerBase = { local LayerStations = { Identifier = Identifier .. "-stations", Name = Name .. " (Stations)", + ZIndex = 100, FilePath = syncedDirectory .. "station_names.png", Description = Description } @@ -44,7 +46,8 @@ local LayerStations = { local LayerImages = { Identifier = Identifier .. "-images", Name = Name .. " (Images)", - Type = "ImageSequenceTileLayer", + Type = "ImageSequenceTileProvider", + ZIndex = 100, FolderPath = imagesDestination, Description = Description } @@ -84,7 +87,6 @@ asset.export(Pips) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/species_richness-amphibians.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/species_richness-amphibians.asset index 74da04e0be..6d4584dd6b 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/species_richness-amphibians.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/species_richness-amphibians.asset @@ -15,7 +15,7 @@ ensure that the places with the most vulnerable species are being protected]] local URL = "https://sos.noaa.gov/catalog/datasets/species-richness-amphibians/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -26,6 +26,7 @@ local syncedDirectory = asset.syncedResource({ local Layer8192 = { Identifier = Identifier , Name = Name, + ZIndex = 100, FilePath = syncedDirectory .. "8192.png", Description = Description } @@ -33,6 +34,7 @@ local Layer8192 = { local LayerWithBackground = { Identifier = Identifier .. "-background", Name = Name .. " (Background)", + ZIndex = 100, FilePath = syncedDirectory .. "4096-background.png", Description = Description } @@ -67,7 +69,6 @@ asset.export(Labels) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/species_richness-amphibians_threatened.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/species_richness-amphibians_threatened.asset index 01e9e088c4..ec2a284f7f 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/species_richness-amphibians_threatened.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/species_richness-amphibians_threatened.asset @@ -15,7 +15,7 @@ ensure that the places with the most vulnerable species are being protected]] local URL = "https://sos.noaa.gov/catalog/datasets/species-richness-amphibians-threatened/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -26,6 +26,7 @@ local syncedDirectory = asset.syncedResource({ local Layer4096 = { Identifier = Identifier, Name = Name, + ZIndex = 100, FilePath = syncedDirectory .. "4096.png", Description = Description } @@ -33,6 +34,7 @@ local Layer4096 = { local LayerWithBackground = { Identifier = Identifier .. "-background", Name = Name, + ZIndex = 100, FilePath = syncedDirectory .. "4096-background.png", Description = Description } @@ -67,7 +69,6 @@ asset.export(Labels) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/species_richness-birds.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/species_richness-birds.asset index b9a31f6778..2bb1e8e382 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/species_richness-birds.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/species_richness-birds.asset @@ -15,7 +15,7 @@ ensure that the places with the most vulnerable species are being protected]] local URL = "https://sos.noaa.gov/catalog/datasets/species-richness-birds/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -26,6 +26,7 @@ local syncedDirectory = asset.syncedResource({ local Layer8192 = { Identifier = Identifier, Name = Name, + ZIndex = 100, FilePath = syncedDirectory .. "8192.png", Description = Description } @@ -33,6 +34,7 @@ local Layer8192 = { local LayerWithBackground = { Identifier = Identifier .. "-background", Name = Name .. " (w/ Background)", + ZIndex = 100, FilePath = syncedDirectory .. "4096-background.png", Description = Description } @@ -67,7 +69,6 @@ asset.export(Labels) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/species_richness-birds_threatened.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/species_richness-birds_threatened.asset index cfd93d573f..4e72175a83 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/species_richness-birds_threatened.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/species_richness-birds_threatened.asset @@ -15,7 +15,7 @@ ensure that the places with the most vulnerable species are being protected]] local URL = "https://sos.noaa.gov/catalog/datasets/species-richness-birds-threatened/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -26,6 +26,7 @@ local syncedDirectory = asset.syncedResource({ local Layer4096 = { Identifier = Identifier, Name = Name, + ZIndex = 100, FilePath = syncedDirectory .. "4096.png", Description = Description } @@ -33,6 +34,7 @@ local Layer4096 = { local LayerWithBackground = { Identifier = Identifier .. "-background", Name = Name .. " (w/ Background)", + ZIndex = 100, FilePath = syncedDirectory .. "4096-background.png", Description = Description } @@ -67,7 +69,6 @@ asset.export(Labels) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/species_richness-mammals.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/species_richness-mammals.asset index 0bd4cd9d68..bf05374ef3 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/species_richness-mammals.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/species_richness-mammals.asset @@ -15,7 +15,7 @@ ensure that the places with the most vulnerable species are being protected]] local URL = "https://sos.noaa.gov/catalog/datasets/species-richness-mammals/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -26,6 +26,7 @@ local syncedDirectory = asset.syncedResource({ local Layer8192 = { Identifier = Identifier, Name = Name, + ZIndex = 100, FilePath = syncedDirectory .. "8192.png", Description = Description } @@ -33,6 +34,7 @@ local Layer8192 = { local LayerWithBackground = { Identifier = Identifier .. "-background", Name = Name .. " (w/ Background)", + ZIndex = 100, FilePath = syncedDirectory .. "4096-background.png", Description = Description } @@ -67,7 +69,6 @@ asset.export(Labels) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/species_richness-mammals_threatened.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/species_richness-mammals_threatened.asset index 2b76fb9369..1569b5dd83 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/species_richness-mammals_threatened.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/species_richness-mammals_threatened.asset @@ -15,7 +15,7 @@ ensure that the places with the most vulnerable species are being protected]] local URL = "https://sos.noaa.gov/catalog/datasets/species-richness-mammals-threatened/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -26,6 +26,7 @@ local syncedDirectory = asset.syncedResource({ local Layer4096 = { Identifier = Identifier, Name = Name, + ZIndex = 100, FilePath = syncedDirectory .. "4096.png", Description = Description } @@ -33,6 +34,7 @@ local Layer4096 = { local LayerWithBackground = { Identifier = Identifier .. "-background", Name = Name .. " (w/ Background)", + ZIndex = 100, FilePath = syncedDirectory .. "4096-background.png", Description = Description } @@ -67,7 +69,6 @@ asset.export(Labels) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/surface_temperature.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/surface_temperature.asset index f474ee11d5..803654fdf2 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/surface_temperature.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/surface_temperature.asset @@ -15,7 +15,7 @@ area in the northern hemisphere, is also evident]] local URL = "https://sos.noaa.gov/catalog/datasets/surface-temperature/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -28,7 +28,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "4096", Description = Description } @@ -75,7 +76,6 @@ asset.export(Colorbar2) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/top_quakes.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/top_quakes.asset index 0f2fdc7dfb..ab9421958a 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/top_quakes.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/top_quakes.asset @@ -21,7 +21,7 @@ motion]] local URL = "https://sos.noaa.gov/catalog/datasets/earthquakes-historical-top-10-through-2011/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -33,6 +33,7 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, + ZIndex = 100, FilePath = syncedDirectory .. "sos_saras_big_quakes_20110316.png", Description = Description } @@ -52,7 +53,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/volcanoes-eruptions.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/volcanoes-eruptions.asset index 70619dbd43..1227f37c14 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/volcanoes-eruptions.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/volcanoes-eruptions.asset @@ -19,7 +19,7 @@ rising to the surface. The volcanoes on Hawaii are the result of hotspots]] local URL = "https://sos.noaa.gov/catalog/datasets/volcano-eruptions-through-2010/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -31,6 +31,7 @@ local LayerBase = { Identifier = Identifier .. "-base", Name = Name .. " (Base)", Enabled = asset.enabled, + ZIndex = 100, FilePath = syncedDirectory .. "land.jpg", Description = Description } @@ -61,7 +62,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/volcanoes-global_volcanoes.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/volcanoes-global_volcanoes.asset index 7a5c88dabf..77685f5ce7 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/volcanoes-global_volcanoes.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/volcanoes-global_volcanoes.asset @@ -19,7 +19,7 @@ rising to the surface. The volcanoes on Hawaii are the result of hotspots]] local URL = "https://sos.noaa.gov/catalog/datasets/volcano-locations/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -31,6 +31,7 @@ local LayerBase = { Identifier = Identifier .. "-base", Name = Name .. " (Base)", Enabled = asset.enabled, + ZIndex = 100, FilePath = syncedDirectory .. "land.jpg", Description = Description } @@ -39,6 +40,7 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, + ZIndex = 110, FilePath = syncedDirectory .. "4096.png", Description = Description } @@ -61,7 +63,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/volcanoes-tsunami.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/volcanoes-tsunami.asset index d253562d82..92b5f7dcbb 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/volcanoes-tsunami.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/land/volcanoes-tsunami.asset @@ -19,7 +19,7 @@ rising to the surface. The volcanoes on Hawaii are the result of hotspots]] local URL = "https://sos.noaa.gov/catalog/datasets/volcano-eruptions-causing-tsunamis-through-2010/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -31,6 +31,7 @@ local LayerBase = { Identifier = Identifier .. "-base", Name = Name .. " (Base)", Enabled = asset.enabled, + ZIndex = 100, FilePath = syncedDirectory .. "land.jpg", Description = Description } @@ -39,6 +40,7 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, + ZIndex = 110, FilePath = syncedDirectory .. "4096.png", Description = Description } @@ -61,7 +63,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/models/bm10000.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/models/bm10000.asset index c6f090b852..ae7f351eb6 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/models/bm10000.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/models/bm10000.asset @@ -37,7 +37,7 @@ coasts]] local URL = "https://sos.noaa.gov/catalog/datasets/blue-marble-sea-level-ice-and-vegetation-changes-19000bc-10000ad/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -50,7 +50,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "4096", Description = Description } @@ -69,7 +70,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/models/gfdl_seaice.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/models/gfdl_seaice.asset index 8f91d3ab72..94f329b6c6 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/models/gfdl_seaice.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/models/gfdl_seaice.asset @@ -20,7 +20,7 @@ temperatures]] local URL = "https://sos.noaa.gov/catalog/datasets/climate-model-sea-ice-change-gfdl-a1b-1861-2100/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -34,7 +34,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "images", Description = Description } @@ -67,7 +68,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/models/ipcc_temp-ccsm-a1b.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/models/ipcc_temp-ccsm-a1b.asset index f089002eab..a1a08c1eee 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/models/ipcc_temp-ccsm-a1b.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/models/ipcc_temp-ccsm-a1b.asset @@ -17,7 +17,7 @@ formatted for Science On a Sphere]] local URL = "https://sos.noaa.gov/catalog/datasets/climate-model-temperature-change-ccsm-a1b-1870-2100/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -30,7 +30,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "4095", Description = Description } @@ -65,7 +66,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/models/ipcc_temp-ccsm-b1.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/models/ipcc_temp-ccsm-b1.asset index 6f08d18a47..9188d61390 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/models/ipcc_temp-ccsm-b1.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/models/ipcc_temp-ccsm-b1.asset @@ -17,7 +17,7 @@ formatted for Science On a Sphere]] local URL = "https://sos.noaa.gov/catalog/datasets/climate-model-temperature-change-ccsm-b1-1870-2100/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -30,7 +30,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "4095", Description = Description } @@ -65,7 +66,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/models/ipcc_temp-compare.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/models/ipcc_temp-compare.asset index de2207e70f..4f298a6ad6 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/models/ipcc_temp-compare.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/models/ipcc_temp-compare.asset @@ -17,7 +17,7 @@ formatted for Science On a Sphere]] local URL = "https://sos.noaa.gov/catalog/datasets/climate-model-temperature-change-comparison-gfdl-a1b-and-b1/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -41,8 +41,9 @@ for i,v in ipairs(layersNames) do local layer = { Identifier = Identifier .. v, Name = Name, - Enabled = asset.enabled, - FilePath = syncedDirectory .. v .. ".png", + Enabled = asset.enabled, + ZIndex = 100, + FilePath = syncedDirectory .. v .. ".png", Description = Description } @@ -85,7 +86,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/models/ipcc_temp-gfdl-a1b.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/models/ipcc_temp-gfdl-a1b.asset index 7bc8cf03eb..050c1ae37c 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/models/ipcc_temp-gfdl-a1b.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/models/ipcc_temp-gfdl-a1b.asset @@ -17,7 +17,7 @@ formatted for Science On a Sphere]] local URL = "https://sos.noaa.gov/catalog/datasets/climate-model-temperature-change-gfdl-a1b-1870-2100/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -30,7 +30,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "4095", Description = Description } @@ -65,7 +66,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/models/ipcc_temp-gfdl-b1.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/models/ipcc_temp-gfdl-b1.asset index 7d57b7e60a..96ac76878c 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/models/ipcc_temp-gfdl-b1.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/models/ipcc_temp-gfdl-b1.asset @@ -17,7 +17,7 @@ formatted for Science On a Sphere]] local URL = "https://sos.noaa.gov/catalog/datasets/climate-model-temperature-change-gfdl-b1-1870-2100/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -30,7 +30,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "4095", Description = Description } @@ -65,7 +66,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/models/ipcc_temp-had-a1b.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/models/ipcc_temp-had-a1b.asset index 63f6155941..2e507b05ec 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/models/ipcc_temp-had-a1b.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/models/ipcc_temp-had-a1b.asset @@ -17,7 +17,7 @@ formatted for Science On a Sphere]] local URL = "https://sos.noaa.gov/catalog/datasets/climate-model-temperature-change-hadley-a1b-1870-2100/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -30,7 +30,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "4095", Description = Description } @@ -65,7 +66,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/models/ipcc_temp-had-b1.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/models/ipcc_temp-had-b1.asset index 9a0c2fc0db..2aeabf4af2 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/models/ipcc_temp-had-b1.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/models/ipcc_temp-had-b1.asset @@ -17,7 +17,7 @@ formatted for Science On a Sphere]] local URL = "https://sos.noaa.gov/catalog/datasets/climate-model-temperature-change-hadley-b1-1870-2100/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -30,7 +30,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "4095", Description = Description } @@ -65,7 +66,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/models/rcp-ga26.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/models/rcp-ga26.asset index 9f50f66f96..82fac47aba 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/models/rcp-ga26.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/models/rcp-ga26.asset @@ -9,7 +9,7 @@ of dynamics of the weather and climate system to projections of future climate]] local URL = "https://sos.noaa.gov/catalog/datasets/climate-model-temperature-change-rcp-26-2006-2100/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -22,7 +22,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "TemporalTileLayer", + ZIndex = 100, + Type = "TemporalTileProvider", Mode = "Folder", Folder = { Folder = syncedDirectory .. "4096", @@ -62,7 +63,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/models/rcp-ga45.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/models/rcp-ga45.asset index f8c306561e..9fa05cd688 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/models/rcp-ga45.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/models/rcp-ga45.asset @@ -9,7 +9,7 @@ of dynamics of the weather and climate system to projections of future climate]] local URL = "https://sos.noaa.gov/catalog/datasets/climate-model-temperature-change-rcp-45-2006-2100/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -22,7 +22,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "TemporalTileLayer", + ZIndex = 100, + Type = "TemporalTileProvider", Mode = "Folder", Folder = { Folder = syncedDirectory .. "4096", @@ -62,7 +63,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/models/rcp-ga60.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/models/rcp-ga60.asset index 40b5bc8ea5..479883ee48 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/models/rcp-ga60.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/models/rcp-ga60.asset @@ -9,7 +9,7 @@ of dynamics of the weather and climate system to projections of future climate]] local URL = "https://sos.noaa.gov/catalog/datasets/climate-model-temperature-change-rcp-60-2006-2100/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -22,7 +22,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "TemporalTileLayer", + ZIndex = 100, + Type = "TemporalTileProvider", Mode = "Folder", Folder = { Folder = syncedDirectory .. "4096", @@ -62,7 +63,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/models/rcp-ga85.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/models/rcp-ga85.asset index d08173408c..92d10a17be 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/models/rcp-ga85.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/models/rcp-ga85.asset @@ -9,7 +9,7 @@ of dynamics of the weather and climate system to projections of future climate]] local URL = "https://sos.noaa.gov/catalog/datasets/climate-model-temperature-change-rcp-85-2006-2100/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -22,7 +22,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "TemporalTileLayer", + ZIndex = 100, + Type = "TemporalTileProvider", Mode = "Folder", Folder = { Folder = syncedDirectory .. "4096", @@ -62,7 +63,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/models/ukmet-a1b.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/models/ukmet-a1b.asset index e89ebe3083..4ba8001155 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/models/ukmet-a1b.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/models/ukmet-a1b.asset @@ -19,7 +19,7 @@ local Description = [[Scientists use computer climate models as a way to underst local URL = "https://sos.noaa.gov/catalog/datasets/climate-model-temperature-change-hadley-a1b-1860-2099/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -32,7 +32,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "TemporalTileLayer", + ZIndex = 100, + Type = "TemporalTileProvider", Mode = "Folder", Folder = { Folder = syncedDirectory .. "2100", @@ -71,7 +72,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/models/ukmet-e1.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/models/ukmet-e1.asset index aa01f2247a..6eb54e5f03 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/models/ukmet-e1.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/models/ukmet-e1.asset @@ -18,7 +18,7 @@ and then drops to 421ppm by 2099, with a global mean temperature increase of 2.1 local URL = "https://sos.noaa.gov/catalog/datasets/climate-model-temperature-change-hadley-e1-1860-2099/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -31,7 +31,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "TemporalTileLayer", + ZIndex = 100, + Type = "TemporalTileProvider", Mode = "Folder", Folder = { Folder = syncedDirectory .. "2100", @@ -70,7 +71,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/2009_ice_animation.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/2009_ice_animation.asset index 2cb6719612..945f38a306 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/2009_ice_animation.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/2009_ice_animation.asset @@ -18,7 +18,7 @@ Microwave/Imager. The resolution is 2 km]] local URL = "https://sos.noaa.gov/catalog/datasets/sea-ice-animation-2009/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -31,7 +31,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "4096", Description = Description } @@ -90,7 +91,6 @@ asset.export(Colorbar2009IceConcentration) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/6m_sea_level_rise-black.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/6m_sea_level_rise-black.asset index c3515c1222..93731c3792 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/6m_sea_level_rise-black.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/6m_sea_level_rise-black.asset @@ -21,7 +21,7 @@ inches for low emission scenarios and 10 - 23 inches for high emission scenarios local URL = "https://sos.noaa.gov/catalog/datasets/sea-level-rise-impact-of-6-meter-black/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -32,6 +32,7 @@ local syncedDirectory = asset.syncedResource({ local Layer0m = { Identifier = Identifier .. "-0m", Name = Name .. " (0m)", + ZIndex = 100, FilePath = syncedDirectory .. "0m-new.png", Description = Description } @@ -39,6 +40,7 @@ local Layer0m = { local Layer1m = { Identifier = Identifier .. "-1m", Name = Name .. " (1m)", + ZIndex = 100, FilePath = syncedDirectory .. "1m-new.png", Description = Description } @@ -46,6 +48,7 @@ local Layer1m = { local Layer2m = { Identifier = Identifier .. "-2m", Name = Name .. " (2m)", + ZIndex = 100, FilePath = syncedDirectory .. "2m-new.png", Description = Description } @@ -53,6 +56,7 @@ local Layer2m = { local Layer3m = { Identifier = Identifier .. "-3m", Name = Name .. " (3m)", + ZIndex = 100, FilePath = syncedDirectory .. "3m-new.png", Description = Description } @@ -60,6 +64,7 @@ local Layer3m = { local Layer4m = { Identifier = Identifier .. "-4m", Name = Name .. " (4m)", + ZIndex = 100, FilePath = syncedDirectory .. "4m-new.png", Description = Description } @@ -67,6 +72,7 @@ local Layer4m = { local Layer5m = { Identifier = Identifier .. "-5m", Name = Name .. " (5m)", + ZIndex = 100, FilePath = syncedDirectory .. "5m-new.png", Description = Description } @@ -74,6 +80,7 @@ local Layer5m = { local Layer6m = { Identifier = Identifier .. "-6m", Name = Name .. " (6m)", + ZIndex = 100, FilePath = syncedDirectory .. "6m-new.png", Description = Description } @@ -111,7 +118,6 @@ asset.export(Layer6m) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/6m_sea_level_rise-red.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/6m_sea_level_rise-red.asset index 26dc7c7ab6..5ba6beb8f1 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/6m_sea_level_rise-red.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/6m_sea_level_rise-red.asset @@ -21,7 +21,7 @@ Report predicts that total global-average sea level rise from 1990 - 2100 will b local URL = "https://sos.noaa.gov/catalog/datasets/sea-level-rise-impact-of-6-meter-red/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -32,6 +32,7 @@ local syncedDirectory = asset.syncedResource({ local Layer0m = { Identifier = Identifier .. "-0m", Name = Name .. " (0m)", + ZIndex = 100, FilePath = syncedDirectory .. "0m-new.png", Description = Description } @@ -39,6 +40,7 @@ local Layer0m = { local Layer1m = { Identifier = Identifier .. "-1m", Name = Name .. " (1m)", + ZIndex = 100, FilePath = syncedDirectory .. "1m-new.png", Description = Description } @@ -46,6 +48,7 @@ local Layer1m = { local Layer2m = { Identifier = Identifier .. "-2m", Name = Name .. " (2m)", + ZIndex = 100, FilePath = syncedDirectory .. "2m-new.png", Description = Description } @@ -53,6 +56,7 @@ local Layer2m = { local Layer3m = { Identifier = Identifier .. "-3m", Name = Name .. " (3m)", + ZIndex = 100, FilePath = syncedDirectory .. "3m-new.png", Description = Description } @@ -60,6 +64,7 @@ local Layer3m = { local Layer4m = { Identifier = Identifier .. "-4m", Name = Name .. " (4m)", + ZIndex = 100, FilePath = syncedDirectory .. "4m-new.png", Description = Description } @@ -67,6 +72,7 @@ local Layer4m = { local Layer5m = { Identifier = Identifier .. "-5m", Name = Name .. " (5m)", + ZIndex = 100, FilePath = syncedDirectory .. "5m-new.png", Description = Description } @@ -74,6 +80,7 @@ local Layer5m = { local Layer6m = { Identifier = Identifier .. "-6m", Name = Name .. " (6m)", + ZIndex = 100, FilePath = syncedDirectory .. "6m-new.png", Description = Description } @@ -111,7 +118,6 @@ asset.export(Layer6m) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/animal_tracking.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/animal_tracking.asset index 1ae81f532a..f3b485e285 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/animal_tracking.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/animal_tracking.asset @@ -15,7 +15,7 @@ local Description = [["TOPP, Tagging of the Pacific Predators, began in 2000 as local URL = "https://sos.noaa.gov/catalog/datasets/seal-and-seabird-tracks-pacific-ocean/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -28,7 +28,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "TemporalTileLayer", + ZIndex = 100, + Type = "TemporalTileProvider", Mode = "Folder", Folder = { Folder = syncedDirectory .. "4096", @@ -67,7 +68,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/argo_buoy_tracks.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/argo_buoy_tracks.asset index 6e16a28e71..19d720c621 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/argo_buoy_tracks.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/argo_buoy_tracks.asset @@ -17,7 +17,7 @@ climate]] local URL = "https://sos.noaa.gov/catalog/datasets/float-tracks-argo-buoy-surface-animation/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -30,7 +30,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "4096", Description = Description } @@ -63,7 +64,6 @@ asset.export(Buoy) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/argo_buoy_waterfall.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/argo_buoy_waterfall.asset index 66568c8570..de1ae9af94 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/argo_buoy_waterfall.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/argo_buoy_waterfall.asset @@ -17,7 +17,7 @@ climate]] local URL = "https://sos.noaa.gov/catalog/datasets/float-tracks-argo-buoy-depths-animation/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -30,7 +30,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "4096", Description = Description } @@ -50,7 +51,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/atl_turtle.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/atl_turtle.asset index 2deeedd2f5..ed3e4dd0e2 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/atl_turtle.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/atl_turtle.asset @@ -17,7 +17,7 @@ was outfitted with a satellite tag by Kate Mansfield, then a Ph.D. student at th local URL = "https://sos.noaa.gov/catalog/datasets/sea-turtle-track-atlantic-ocean/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -30,7 +30,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "TemporalTileLayer", + ZIndex = 100, + Type = "TemporalTileProvider", Mode = "Folder", Folder = { Folder = syncedDirectory .. "2048", @@ -56,7 +57,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/buoy_locations.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/buoy_locations.asset index c171f02641..d1214ef112 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/buoy_locations.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/buoy_locations.asset @@ -14,7 +14,7 @@ can be seen on this visualization]] local URL = "https://sos.noaa.gov/catalog/datasets/buoy-and-float-locations/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -26,6 +26,7 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, + ZIndex = 100, FilePath = syncedDirectory .. "4096.jpg", Description = Description } @@ -58,7 +59,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/catch_model.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/catch_model.asset index d7e49d2d31..7fd9dbc737 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/catch_model.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/catch_model.asset @@ -18,7 +18,7 @@ catch in these areas]] local URL = "https://sos.noaa.gov/catalog/datasets/fisheries-catch-model-2005-vs-2050/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -30,6 +30,7 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, + ZIndex = 100, FilePath = syncedDirectory .. "4096.png", Description = Description } @@ -62,7 +63,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/chlorophyll_model.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/chlorophyll_model.asset index 8f9c7bf587..c238c1e187 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/chlorophyll_model.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/chlorophyll_model.asset @@ -17,7 +17,7 @@ understand the possible effects on life in the ocean and the global carbon cycle local URL = "https://sos.noaa.gov/catalog/datasets/biosphere-marine-chlorophyll-concentration-model/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -30,7 +30,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "3232", Description = Description } @@ -65,7 +66,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/currents.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/currents.asset index 52a5a4c998..a85b18b6fc 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/currents.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/currents.asset @@ -21,7 +21,7 @@ to move through the whole conveyor belt]] local URL = "https://sos.noaa.gov/catalog/datasets/ocean-circulation-labeled-currents/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -33,6 +33,7 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, + ZIndex = 100, FilePath = syncedDirectory .. "4096.jpg", Description = Description } @@ -65,7 +66,6 @@ asset.export(Legend) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/dart_buoy.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/dart_buoy.asset index c69391da60..b246e3bffd 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/dart_buoy.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/dart_buoy.asset @@ -16,7 +16,7 @@ DART Project will consist of 32 DART buoys]] local URL = "https://sos.noaa.gov/catalog/datasets/buoy-locations-dart-only/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -28,6 +28,7 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, + ZIndex = 100, FilePath = syncedDirectory .. "2000.jpg", Description = Description } @@ -47,7 +48,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/ecco2_sst-gray_land.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/ecco2_sst-gray_land.asset index 37ad56e6f0..21997b7a06 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/ecco2_sst-gray_land.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/ecco2_sst-gray_land.asset @@ -19,7 +19,7 @@ surface temperatures. The sea surface temperature data is also from the ECCO2 mo local URL = "https://sos.noaa.gov/catalog/datasets/sea-surface-currents-and-temperature-gray-land/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -33,7 +33,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "images", Description = Description } @@ -66,7 +67,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/ecco2_sst-veg_land.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/ecco2_sst-veg_land.asset index e8eec99c36..8eae383ca6 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/ecco2_sst-veg_land.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/ecco2_sst-veg_land.asset @@ -19,7 +19,7 @@ surface temperatures. The sea surface temperature data is also from the ECCO2 mo local URL = "https://sos.noaa.gov/catalog/datasets/sea-surface-currents-and-temperature-vegetation-on-land/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -33,7 +33,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "images", Description = Description } @@ -66,7 +67,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/elnino.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/elnino.asset index b8afbc6621..6af66beb95 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/elnino.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/elnino.asset @@ -16,7 +16,7 @@ lasts for about 18 months]] local URL = "https://sos.noaa.gov/catalog/datasets/el-nino-and-la-nina-seasonal-impacts/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -27,6 +27,7 @@ local syncedDirectory = asset.syncedResource({ local LayerElninoSummer = { Identifier = Identifier .. "-elnino_summer", Name = Name .. " (El Nino, summer)", + ZIndex = 100, FilePath = syncedDirectory .. "elnino-summer-no-map-transparent-shapes.png", Description = Description } @@ -34,6 +35,7 @@ local LayerElninoSummer = { local LayerElninoWinter = { Identifier = Identifier .. "-elnino_winter", Name = Name .. " (El Nino, winter)", + ZIndex = 100, FilePath = syncedDirectory .. "elnino-winter-no-map-transparent-shapes.png", Description = Description } @@ -41,6 +43,7 @@ local LayerElninoWinter = { local LayerLaninaSummer = { Identifier = Identifier .. "-lanina_summer", Name = Name .. " (La Nina, summer)", + ZIndex = 100, FilePath = syncedDirectory .. "lanina-summer-no-map-transparent-shapes.png", Description = Description } @@ -48,6 +51,7 @@ local LayerLaninaSummer = { local LayerLaninaWinter = { Identifier = Identifier .. "-lanina_winter", Name = Name .. " (La Nina, winter)", + ZIndex = 100, FilePath = syncedDirectory .. "lanina-winter-no-map-transparent-shapes.png", Description = Description } @@ -76,7 +80,6 @@ asset.export(LayerLaninaWinter) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/gfdl_sst-black_background.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/gfdl_sst-black_background.asset index a8b4cac5bc..aa096e2ce0 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/gfdl_sst-black_background.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/gfdl_sst-black_background.asset @@ -13,7 +13,7 @@ Dynamics Laboratory (GFDL)]] local URL = "https://sos.noaa.gov/catalog/datasets/sea-surface-temperature-noaa-model-black-land/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -27,7 +27,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "TemporalTileLayer", + ZIndex = 100, + Type = "TemporalTileProvider", Mode = "Folder", Folder = { Folder = syncedDirectory .. "images", @@ -67,7 +68,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/gfdl_sst-land_background.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/gfdl_sst-land_background.asset index 49bc327946..c15a4c2652 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/gfdl_sst-land_background.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/gfdl_sst-land_background.asset @@ -13,7 +13,7 @@ Dynamics Laboratory (GFDL)]] local URL = "https://sos.noaa.gov/catalog/datasets/sea-surface-temperature-noaa-model-with-vegetation/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -27,7 +27,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "TemporalTileLayer", + ZIndex = 100, + Type = "TemporalTileProvider", Mode = "Folder", Folder = { Folder = syncedDirectory .. "images", @@ -67,7 +68,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/greenland_melt.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/greenland_melt.asset index 13e9b5733a..dc3a3003f1 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/greenland_melt.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/greenland_melt.asset @@ -17,7 +17,7 @@ average over the past 18 years that have been studied]] local URL = "https://sos.noaa.gov/catalog/datasets/greenland-melting-trends/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -30,7 +30,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "TemporalTileLayer", + ZIndex = 100, + Type = "TemporalTileProvider", Mode = "Folder", Folder = { Folder = syncedDirectory .. "2048", @@ -56,7 +57,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/japan_tsunami.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/japan_tsunami.asset index 36a78b06a8..0b4e99bf21 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/japan_tsunami.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/japan_tsunami.asset @@ -14,7 +14,7 @@ waves]] local URL = "https://sos.noaa.gov/catalog/datasets/japan-tsunami-wave-heights-march-11-2011/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -26,6 +26,7 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, + ZIndex = 100, FilePath = syncedDirectory .. "4096.png", Description = Description } @@ -45,7 +46,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/japan_tsunami_waves.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/japan_tsunami_waves.asset index 111503e0b4..b6024b7b58 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/japan_tsunami_waves.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/japan_tsunami_waves.asset @@ -20,7 +20,7 @@ the DART buoys]] local URL = "https://sos.noaa.gov/catalog/datasets/japan-tsunami-wave-propagation-march-11-2011/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -33,7 +33,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "4096", Description = Description } @@ -53,7 +54,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/loggerheadseaturtletracks.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/loggerheadseaturtletracks.asset index ff43991c66..0bbf8a474a 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/loggerheadseaturtletracks.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/loggerheadseaturtletracks.asset @@ -17,7 +17,7 @@ proportional to the turtle length]] local URL = "https://sos.noaa.gov/catalog/datasets/loggerhead-sea-turtle-tracks/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -30,7 +30,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "4096", Description = Description } @@ -50,7 +51,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/marine_impacts.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/marine_impacts.asset index 25fd80c9a3..d2e527bcdc 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/marine_impacts.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/marine_impacts.asset @@ -17,7 +17,7 @@ acidification]] local URL = "https://sos.noaa.gov/catalog/datasets/human-influences-on-marine-ecosystems/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -29,6 +29,7 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, + ZIndex = 100, FilePath = syncedDirectory .. "5000.png", Description = Description } @@ -74,7 +75,6 @@ asset.export(ColorbarHumanImpact) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/marine_life_tracking.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/marine_life_tracking.asset index 7c3943e563..d5f0c7320f 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/marine_life_tracking.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/marine_life_tracking.asset @@ -14,7 +14,7 @@ animal tracking dataset. For a more extensive dataset using data from TOPP, go h local URL = "https://sos.noaa.gov/catalog/datasets/marine-life-tracks-pacific-ocean/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -26,6 +26,7 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, + ZIndex = 100, FilePath = syncedDirectory .. "2048.png", Description = Description } @@ -58,7 +59,6 @@ asset.export(Legend) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/mexico_turtles_947293.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/mexico_turtles_947293.asset index 20eb8a2b80..c5449eb11b 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/mexico_turtles_947293.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/mexico_turtles_947293.asset @@ -16,7 +16,7 @@ capture site]] local URL = "https://sos.noaa.gov/catalog/datasets/sea-turtle-track-gulf-of-mexico-94-7293/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -29,7 +29,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "TemporalTileLayer", + ZIndex = 100, + Type = "TemporalTileProvider", Mode = "Folder", Folder = { Folder = syncedDirectory .. "2048", @@ -55,7 +56,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/mexico_turtles_958002.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/mexico_turtles_958002.asset index 57df62b3b4..e0c4bfd902 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/mexico_turtles_958002.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/mexico_turtles_958002.asset @@ -16,7 +16,7 @@ released within 2 days at the capture site]] local URL = "https://sos.noaa.gov/catalog/datasets/sea-turtle-track-gulf-of-mexico-94-8002/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -29,7 +29,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "TemporalTileLayer", + ZIndex = 100, + Type = "TemporalTileProvider", Mode = "Folder", Folder = { Folder = syncedDirectory .. "2048", @@ -55,7 +56,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/modis_sst.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/modis_sst.asset index 44f12a17db..e4b6c46758 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/modis_sst.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/modis_sst.asset @@ -15,7 +15,7 @@ months]] local URL = "https://sos.noaa.gov/catalog/datasets/sea-surface-temperature-observations-2002-2006/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -28,7 +28,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "2048", Description = Description } @@ -48,7 +49,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/nasa_speed.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/nasa_speed.asset index 5ec4f01cf3..b15af33475 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/nasa_speed.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/nasa_speed.asset @@ -15,7 +15,7 @@ green areas are moving faster than the blue areas]] local URL = "https://sos.noaa.gov/catalog/datasets/sea-surface-currents/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -28,7 +28,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "4000", Description = Description } @@ -48,7 +49,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/nasa_sst.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/nasa_sst.asset index f3c37b0358..47604c08cd 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/nasa_sst.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/nasa_sst.asset @@ -13,7 +13,7 @@ Space Flight Center]] local URL = "https://sos.noaa.gov/catalog/datasets/sea-surface-temperature-model/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -26,7 +26,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "4000", Description = Description } @@ -46,7 +47,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/ocean_acid-co2_flux.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/ocean_acid-co2_flux.asset index 8a996a24a2..e91c932a63 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/ocean_acid-co2_flux.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/ocean_acid-co2_flux.asset @@ -12,7 +12,7 @@ water than in atmosphere above, CO2 is released to the atmosphere]] local URL = "https://sos.noaa.gov/catalog/datasets/ocean-atmosphere-co2-exchange/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -25,7 +25,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "TemporalTileLayer", + ZIndex = 100, + Type = "TemporalTileProvider", Mode = "Folder", Folder = { Folder = syncedDirectory .. "images", @@ -64,7 +65,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/ocean_acid-ph.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/ocean_acid-ph.asset index 0f910888ef..a51bf0fbc2 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/ocean_acid-ph.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/ocean_acid-ph.asset @@ -15,7 +15,7 @@ dataset starts in 1861 and runs through 2100]] local URL = "https://sos.noaa.gov/catalog/datasets/ocean-acidification-surface-ph/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -28,7 +28,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "TemporalTileLayer", + ZIndex = 100, + Type = "TemporalTileProvider", Mode = "Folder", Folder = { Folder = syncedDirectory .. "images", @@ -67,7 +68,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/ocean_acid-saturation.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/ocean_acid-saturation.asset index e99b96ee99..13a305e2d1 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/ocean_acid-saturation.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/ocean_acid-saturation.asset @@ -20,7 +20,7 @@ acidification]] local URL = "https://sos.noaa.gov/catalog/datasets/ocean-acidification-saturation-state/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -33,7 +33,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "TemporalTileLayer", + ZIndex = 100, + Type = "TemporalTileProvider", Mode = "Folder", Folder = { Folder = syncedDirectory .. "images", @@ -83,7 +84,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/ocean_depths_temp.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/ocean_depths_temp.asset index 46b62e8f2a..be2cbaf546 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/ocean_depths_temp.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/ocean_depths_temp.asset @@ -15,7 +15,7 @@ in some of the deeper imagery]] local URL = "https://sos.noaa.gov/catalog/datasets/ocean-temperature-at-depth-seasonal/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -31,7 +31,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = imagesDestination, Description = Description } @@ -40,7 +41,8 @@ local LayerByDepth = { Identifier = Identifier .. "-bydepth", Name = Name .. " (by Depth)", Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = imagesByDepthDestination, Description = Description } @@ -76,7 +78,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/ocean_drain-gray.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/ocean_drain-gray.asset index 22d0d9fc8f..3c516966fa 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/ocean_drain-gray.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/ocean_drain-gray.asset @@ -13,7 +13,7 @@ anomalies in the sea surface detected by satellites]] local URL = "https://sos.noaa.gov/catalog/datasets/ocean-drain-with-gray-bathymetry/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -26,7 +26,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "4096", Description = Description } @@ -46,7 +47,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/pac_turtle.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/pac_turtle.asset index 75041aaea1..ea88c6e26d 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/pac_turtle.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/pac_turtle.asset @@ -15,7 +15,7 @@ tag transmitted a signal that allowed Adelita's track to be monitored post-relea local URL = "https://sos.noaa.gov/catalog/datasets/sea-turtle-track-pacific-ocean/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -28,7 +28,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "TemporalTileLayer", + ZIndex = 100, + Type = "TemporalTileProvider", Mode = "Folder", Folder = { Folder = syncedDirectory .. "2048", @@ -53,7 +54,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/phytoplankton.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/phytoplankton.asset index 77f36009ea..5a91e64ad1 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/phytoplankton.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/phytoplankton.asset @@ -19,7 +19,7 @@ biomass]] local URL = "https://sos.noaa.gov/catalog/datasets/phytoplankton-model/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -33,7 +33,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "images", Description = Description } @@ -66,7 +67,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/pr_tsunami.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/pr_tsunami.asset index e4e99ebfe8..5f97237cee 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/pr_tsunami.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/pr_tsunami.asset @@ -16,7 +16,7 @@ Trench, the deepest location in the Atlantic Ocean]] local URL = "https://sos.noaa.gov/catalog/datasets/puerto-rico-hypothetical-tsunami/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -29,7 +29,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "2048", Description = Description } @@ -49,7 +50,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/reefs_risk.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/reefs_risk.asset index f6a6533d60..a3d0d78689 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/reefs_risk.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/reefs_risk.asset @@ -24,7 +24,7 @@ is leading to wide-spread coral bleaching]] local URL = "https://sos.noaa.gov/catalog/datasets/coral-reef-risk-outlook/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -35,6 +35,7 @@ local syncedDirectory = asset.syncedResource({ local Layer2012 = { Identifier = Identifier .. "-2012", Name = Name .. " (2012)", + ZIndex = 100, FilePath = syncedDirectory .. "2012_2048.jpg", Description = Description } @@ -42,6 +43,7 @@ local Layer2012 = { local Layer2030 = { Identifier = Identifier .. "-2030", Name = Name .. " (2030)", + ZIndex = 100, FilePath = syncedDirectory .. "2030_2048.jpg", Description = Description } @@ -49,6 +51,7 @@ local Layer2030 = { local Layer2050 = { Identifier = Identifier .. "-2050", Name = Name .. " (2050)", + ZIndex = 100, FilePath = syncedDirectory .. "2050_2048.jpg", Description = Description } @@ -87,7 +90,6 @@ asset.export(Legend) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/sea_level.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/sea_level.asset index 3275d9f5d9..b1ab3bef08 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/sea_level.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/sea_level.asset @@ -21,7 +21,7 @@ inches for low emission scenarios and 10 - 23 inches for high emission scenarios local URL = "https://sos.noaa.gov/catalog/datasets/sea-level-rise-10m-increments/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -34,7 +34,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "4000", Description = Description } @@ -54,7 +55,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/sea_level_trends.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/sea_level_trends.asset index 871633731f..187bb039c5 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/sea_level_trends.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/sea_level_trends.asset @@ -22,7 +22,7 @@ high emission scenarios]] local URL = "https://sos.noaa.gov/catalog/datasets/sea-level-trends-1993-2012/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -34,6 +34,7 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, + ZIndex = 100, FilePath = syncedDirectory .. "4096.png", Description = Description } @@ -67,7 +68,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/sea_surface_height_anomaly.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/sea_surface_height_anomaly.asset index aac8596353..4822fd8bdc 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/sea_surface_height_anomaly.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/sea_surface_height_anomaly.asset @@ -16,7 +16,7 @@ collecting sea surface height data over the global ocean for almost two decades] local URL = "https://sos.noaa.gov/catalog/datasets/sea-surface-height-anomaly/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -30,7 +30,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "images", Description = Description } @@ -64,7 +65,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/seaice_monthly.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/seaice_monthly.asset index 71776524d7..3d7c79674b 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/seaice_monthly.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/seaice_monthly.asset @@ -15,7 +15,7 @@ planet]] local URL = "https://sos.noaa.gov/catalog/datasets/sea-ice-extent-arctic-only-1850-present/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -28,7 +28,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "TemporalTileLayer", + ZIndex = 100, + Type = "TemporalTileProvider", Mode = "Folder", Folder = { Folder = syncedDirectory .. "4096", @@ -54,7 +55,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/seaice_radiation.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/seaice_radiation.asset index dd42635ed6..2f0d961e3f 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/seaice_radiation.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/seaice_radiation.asset @@ -13,7 +13,7 @@ which is more pronounced than anywhere else on the planet]] local URL = "https://sos.noaa.gov/catalog/datasets/sea-ice-fraction-and-solar-radiation-absorption/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -24,6 +24,7 @@ local syncedDirectory = asset.syncedResource({ local LayerFraction = { Identifier = Identifier, Name = Name, + ZIndex = 100, FilePath = syncedDirectory .. "sea_ice_fraction.png", Description = Description } @@ -31,6 +32,7 @@ local LayerFraction = { local LayerSolar = { Identifier = Identifier .. "-solar", Name = Name .. " (Solar)", + ZIndex = 100, FilePath = syncedDirectory .. "solar.png", Description = Description } @@ -53,7 +55,6 @@ asset.export(LayerSolar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/seawifs-land_background.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/seawifs-land_background.asset index dda7d3718f..a74314bd58 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/seawifs-land_background.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/seawifs-land_background.asset @@ -10,7 +10,7 @@ quantity of marine plant-life as it changes throughout the seasons of the year]] local URL = "https://sos.noaa.gov/catalog/datasets/biosphere-marine-chlorophyll-concentration/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -23,7 +23,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "4096", Description = Description } @@ -56,7 +57,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/seawifs-no_holes.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/seawifs-no_holes.asset index bbb48f8618..62aa8f48e7 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/seawifs-no_holes.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/seawifs-no_holes.asset @@ -11,7 +11,7 @@ year]] local URL = "https://sos.noaa.gov/catalog/datasets/biosphere-marine-chlorophyll-concentration-and-land-vegetation-with-co2-labels/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -24,7 +24,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "2048", Description = Description } @@ -57,7 +58,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/seawifs-polar_holes.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/seawifs-polar_holes.asset index bcd447cacb..3332d03a20 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/seawifs-polar_holes.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/seawifs-polar_holes.asset @@ -11,7 +11,7 @@ year]] local URL = "https://sos.noaa.gov/catalog/datasets/biosphere-marine-chlorophyll-concentration-and-land-vegetation/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -24,7 +24,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "4320_png", Description = Description } @@ -57,7 +58,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/shark.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/shark.asset index 9ca297201e..07b23f4751 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/shark.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/shark.asset @@ -16,7 +16,7 @@ the coast of California also were tracked traveling great distances from Califor local URL = "https://sos.noaa.gov/catalog/datasets/great-white-shark-track/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -29,7 +29,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "TemporalTileLayer", + ZIndex = 100, + Type = "TemporalTileProvider", Mode = "Folder", Folder = { Folder = syncedDirectory .. "2048", @@ -55,7 +56,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/ship_tracks-mosaic.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/ship_tracks-mosaic.asset index 7a414b9034..f66f972402 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/ship_tracks-mosaic.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/ship_tracks-mosaic.asset @@ -22,7 +22,7 @@ ocean]] local URL = "https://sos.noaa.gov/catalog/datasets/ship-multibeam-bathymetric-surveys-mosaic/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -34,6 +34,7 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, + ZIndex = 100, FilePath = syncedDirectory .. "4096.png", Description = Description } @@ -66,7 +67,6 @@ asset.export(Legend) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/ship_tracks-tracks.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/ship_tracks-tracks.asset index 3a22679f6c..baa2b80627 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/ship_tracks-tracks.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/ship_tracks-tracks.asset @@ -22,7 +22,7 @@ ocean]] local URL = "https://sos.noaa.gov/catalog/datasets/ship-tracklines-of-multibeam-bathymetric-surveys/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -34,6 +34,7 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, + ZIndex = 100, FilePath = syncedDirectory .. "4096.png", Description = Description } @@ -66,7 +67,6 @@ asset.export(Legend) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/shipping.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/shipping.asset index 197b037d66..cb60ece7c5 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/shipping.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/shipping.asset @@ -17,7 +17,7 @@ Global Map of Human Impacts to Marine Ecosystems]] local URL = "https://sos.noaa.gov/catalog/datasets/shipping-routes-with-labels-one-year/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -29,6 +29,7 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, + ZIndex = 100, FilePath = syncedDirectory .. "4096.jpg", Description = Description } @@ -48,7 +49,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/species_richness.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/species_richness.asset index 4534a808c3..8c825281c3 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/species_richness.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/species_richness.asset @@ -20,7 +20,7 @@ fisheries]] local URL = "https://sos.noaa.gov/catalog/datasets/fisheries-species-richness/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -32,6 +32,7 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, + ZIndex = 100, FilePath = syncedDirectory .. "4096.png", Description = Description } @@ -65,7 +66,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/sss.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/sss.asset index 8420f0cd6b..724611e7f4 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/sss.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/sss.asset @@ -14,7 +14,7 @@ Earth's water cycle and ocean circulation]] local URL = "https://sos.noaa.gov/catalog/datasets/sea-surface-salinity/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -27,7 +27,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "4096", Description = Description } @@ -60,7 +61,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/sst_1980_1999.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/sst_1980_1999.asset index 29654f0f29..a158334237 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/sst_1980_1999.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/sst_1980_1999.asset @@ -16,7 +16,7 @@ shading is a cooling of the ocean by 5-10°F]] local URL = "https://sos.noaa.gov/catalog/datasets/sea-surface-temperature-anomalies-1980-1999/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -29,7 +29,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "TemporalTileLayer", + ZIndex = 100, + Type = "TemporalTileProvider", Mode = "Folder", Folder = { Folder = syncedDirectory .. "4096", @@ -55,7 +56,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/tsunami_historical_series-alaska.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/tsunami_historical_series-alaska.asset index 673fe90b00..a7f2ed63d4 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/tsunami_historical_series-alaska.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/tsunami_historical_series-alaska.asset @@ -26,7 +26,7 @@ high also struck Mexico, Chile, and even New Zealand]] local URL = "https://sos.noaa.gov/catalog/datasets/tsunami-historical-series-alaska-1964/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -37,6 +37,7 @@ local syncedDirectory = asset.syncedResource({ local LayerCoastal = { Identifier = Identifier .. "-coastal", Name = Name .. " (Coastal)", + ZIndex = 100, FilePath = syncedDirectory .. "Tsunami_Coastal_Map_Alaska_1964_4k.jpg", Description = Description } @@ -44,6 +45,7 @@ local LayerCoastal = { local LayerEnergyCoastal = { Identifier = Identifier .. "-energy_coastal", Name = Name .. " (Energy Coastal)", + ZIndex = 100, FilePath = syncedDirectory .. "Tsunami_Energy+Coastal_Map_Alaska_1964_4k.jpg", Description = Description } @@ -51,6 +53,7 @@ local LayerEnergyCoastal = { local LayerEnergy = { Identifier = Identifier .. "-energy", Name = Name .. " (Energy)", + ZIndex = 100, FilePath = syncedDirectory .. "Tsunami_Energy_Map_Alaska_1964_4k.jpg", Description = Description } @@ -58,6 +61,7 @@ local LayerEnergy = { local LayerNull = { Identifier = Identifier .. "-null", Name = Name .. " (Null)", + ZIndex = 100, FilePath = syncedDirectory .. "Tsunami_Null_Coastal_Map_Alaska_1964_4k.jpg", Description = Description } @@ -86,7 +90,6 @@ asset.export(LayerNull) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/tsunami_historical_series-aleutians.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/tsunami_historical_series-aleutians.asset index 9a84b76b13..9e2b8271e3 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/tsunami_historical_series-aleutians.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/tsunami_historical_series-aleutians.asset @@ -23,7 +23,7 @@ in Peru]] local URL = "https://sos.noaa.gov/catalog/datasets/tsunami-historical-series-aleutian-islands-1946/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -34,6 +34,7 @@ local syncedDirectory = asset.syncedResource({ local LayerCoastal = { Identifier = Identifier .. "-coastal", Name = Name .. " (Coastal)", + ZIndex = 100, FilePath = syncedDirectory .. "Tsunami_Coastal_Map_Aleutians_1946_2k.jpg", Description = Description } @@ -41,6 +42,7 @@ local LayerCoastal = { local LayerEnergyCoastal = { Identifier = Identifier .. "-energy_coastal", Name = Name .. " (Energy Coastal)", + ZIndex = 100, FilePath = syncedDirectory .. "Tsunami_Energy+Coastal_Map_Aleutians_1946_4k.jpg", Description = Description } @@ -48,6 +50,7 @@ local LayerEnergyCoastal = { local LayerEnergy = { Identifier = Identifier .. "-energy", Name = Name .. " (Energy)", + ZIndex = 100, FilePath = syncedDirectory .. "Tsunami_Energy_Map_Aleutians_1946_4k.jpg", Description = Description } @@ -55,6 +58,7 @@ local LayerEnergy = { local LayerNull = { Identifier = Identifier .. "-null", Name = Name .. " (Null)", + ZIndex = 100, FilePath = syncedDirectory .. "Tsunami_Null_Coastal_Map_Aleutians_1946_4k.jpg", Description = Description } @@ -84,7 +88,6 @@ asset.export(LayerNull) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/tsunami_historical_series-aleutians_1957.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/tsunami_historical_series-aleutians_1957.asset index 456505a344..819617d411 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/tsunami_historical_series-aleutians_1957.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/tsunami_historical_series-aleutians_1957.asset @@ -24,7 +24,7 @@ These efforts, established in 1948, would later become the Pacific Tsunami Warni local URL = "https://sos.noaa.gov/catalog/datasets/tsunami-historical-series-aleutian-islands-1957/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -36,6 +36,7 @@ local syncedDirectory = asset.syncedResource({ local LayerCoastal = { Identifier = Identifier .. "-coastal", Name = Name .. " (Coastal)", + ZIndex = 100, FilePath = syncedDirectory .. "Tsunami_Coastal_Map_Aleutians_1957_2k.jpg", Description = Description } @@ -43,6 +44,7 @@ local LayerCoastal = { local LayerEnergyCoastal = { Identifier = Identifier .. "-energy_coastal", Name = Name .. " (Energy Coastal)", + ZIndex = 100, FilePath = syncedDirectory .. "Tsunami_Energy+Coastal_Map_Aleutians_1957_2k.jpg", Description = Description } @@ -50,6 +52,7 @@ local LayerEnergyCoastal = { local LayerEnergy = { Identifier = Identifier .. "-energy", Name = Name .. " (Energy)", + ZIndex = 100, FilePath = syncedDirectory .. "Tsunami_Energy_Map_Aleutians_1957_2k.jpg", Description = Description } @@ -57,6 +60,7 @@ local LayerEnergy = { local LayerNull = { Identifier = Identifier .. "-null", Name = Name .. " (Null)", + ZIndex = 100, FilePath = syncedDirectory .. "Tsunami_Null_Coastal_Map_Aleutians_1957_2k.jpg", Description = Description } @@ -85,7 +89,6 @@ asset.export(LayerNull) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/tsunami_historical_series-cascadia.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/tsunami_historical_series-cascadia.asset index 3c688d3a66..29e51475bb 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/tsunami_historical_series-cascadia.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/tsunami_historical_series-cascadia.asset @@ -26,7 +26,7 @@ occurred around 9:00 at night in Cascadia on January 26, 1700 (05:00 January 27 local URL = "https://sos.noaa.gov/catalog/datasets/tsunami-historical-series-cascadia-1700/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -37,6 +37,7 @@ local syncedDirectory = asset.syncedResource({ local LayerCoastal = { Identifier = Identifier .. "-coastal", Name = Name .. " (Coastal)", + ZIndex = 100, FilePath = syncedDirectory .. "Tsunami_Coastal_Map_Cascadia_1700_4k.jpg", Description = Description } @@ -44,6 +45,7 @@ local LayerCoastal = { local LayerEnergyCoastal = { Identifier = Identifier .. "-energy_coastal", Name = Name .. " (Energy Coastal)", + ZIndex = 100, FilePath = syncedDirectory .. "Tsunami_Energy+Coastal_Map_Cascadia_1700_4k.jpg", Description = Description } @@ -51,6 +53,7 @@ local LayerEnergyCoastal = { local LayerEnergy = { Identifier = Identifier .. "-energy", Name = Name .. " (Energy)", + ZIndex = 100, FilePath = syncedDirectory .. "Tsunami_Energy_Map_Cascadia_1700_4k.jpg", Description = Description } @@ -58,6 +61,7 @@ local LayerEnergy = { local LayerNull = { Identifier = Identifier .. "-null", Name = Name .. " (Null)", + ZIndex = 100, FilePath = syncedDirectory .. "Tsunami_Null_Coastal_Map_Cascadia_1700_4k.jpg", Description = Description } @@ -86,7 +90,6 @@ asset.export(LayerNull) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/tsunami_historical_series-chile.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/tsunami_historical_series-chile.asset index b8334de5e8..66cc8c5734 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/tsunami_historical_series-chile.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/tsunami_historical_series-chile.asset @@ -28,7 +28,7 @@ and caused minor damage in San Diego, California and in Japan]] local URL = "https://sos.noaa.gov/catalog/datasets/tsunami-historical-series-chile-2010/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -39,6 +39,7 @@ local syncedDirectory = asset.syncedResource({ local LayerCoastal = { Identifier = Identifier .. "-coastal", Name = Name .. " (Coastal)", + ZIndex = 100, FilePath = syncedDirectory .. "Tsunami_Coastal_Map_Chile_2010_2k.jpg", Description = Description } @@ -46,6 +47,7 @@ local LayerCoastal = { local LayerEnergyCoastal = { Identifier = Identifier .. "-energy_coastal", Name = Name .. " (Energy Coastal)", + ZIndex = 100, FilePath = syncedDirectory .. "Tsunami_Energy+Coastal_Map_Chile_2010_4k.jpg", Description = Description } @@ -53,6 +55,7 @@ local LayerEnergyCoastal = { local LayerEnergy = { Identifier = Identifier .. "-energy", Name = Name .. " (Energy)", + ZIndex = 100, FilePath = syncedDirectory .. "Tsunami_Energy_Map_Chile_2010_4k.jpg", Description = Description } @@ -60,6 +63,7 @@ local LayerEnergy = { local LayerNull = { Identifier = Identifier .. "-null", Name = Name .. " (Null)", + ZIndex = 100, FilePath = syncedDirectory .. "Tsunami_Null_Coastal_Map_Chile_2010_4k.jpg", Description = Description } @@ -88,7 +92,6 @@ asset.export(LayerNull) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/tsunami_historical_series-japan.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/tsunami_historical_series-japan.asset index 1e3c4a08c6..871a9f439e 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/tsunami_historical_series-japan.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/tsunami_historical_series-japan.asset @@ -33,7 +33,7 @@ California]] local URL = "https://sos.noaa.gov/catalog/datasets/tsunami-historical-series-japan-2011/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -44,6 +44,7 @@ local syncedDirectory = asset.syncedResource({ local LayerCoastal = { Identifier = Identifier .. "-coastal", Name = Name .. " (Coastal)", + ZIndex = 100, FilePath = syncedDirectory .. "Tsunami_Coastal_Map_Japan_2011_4k.jpg", Description = Description } @@ -51,6 +52,7 @@ local LayerCoastal = { local LayerEnergyCoastal = { Identifier = Identifier .. "-energy_coastal", Name = Name .. " (Energy Coastal)", + ZIndex = 100, FilePath = syncedDirectory .. "Tsunami_Energy+Coastal_Map_Japan_2011_4k.jpg", Description = Description } @@ -58,6 +60,7 @@ local LayerEnergyCoastal = { local LayerEnergy = { Identifier = Identifier .. "-energy", Name = Name .. " (Energy)", + ZIndex = 100, FilePath = syncedDirectory .. "Tsunami_Energy_Map_Japan_2011_4k.jpg", Description = Description } @@ -65,6 +68,7 @@ local LayerEnergy = { local LayerNull = { Identifier = Identifier .. "-null", Name = Name .. " (Null)", + ZIndex = 100, FilePath = syncedDirectory .. "Tsunami_Null_Coastal_Map_Japan_2011_4k.jpg", Description = Description } @@ -93,7 +97,6 @@ asset.export(LayerNull) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/tsunami_historical_series-lisbon.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/tsunami_historical_series-lisbon.asset index 5dfb64a7cd..837f3be6e2 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/tsunami_historical_series-lisbon.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/tsunami_historical_series-lisbon.asset @@ -16,7 +16,7 @@ completing the earthquake's destruction]] local URL = "https://sos.noaa.gov/catalog/datasets/tsunami-historical-series-lisbon-1755/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -27,6 +27,7 @@ local syncedDirectory = asset.syncedResource({ local LayerCoastal = { Identifier = Identifier .. "-coastal", Name = Name .. " (Coastal)", + ZIndex = 100, FilePath = syncedDirectory .. "Tsunami_Coastal_Map_Lisbon_1755_4k.jpg", Description = Description } @@ -34,6 +35,7 @@ local LayerCoastal = { local LayerEnergyCoastal = { Identifier = Identifier .. "-energy_coastal", Name = Name .. " (Energy Coastal)", + ZIndex = 100, FilePath = syncedDirectory .. "Tsunami_Energy+Coastal_Map_Lisbon_1755_4k.jpg", Description = Description } @@ -41,6 +43,7 @@ local LayerEnergyCoastal = { local LayerEnergy = { Identifier = Identifier .. "-energy", Name = Name .. " (Energy)", + ZIndex = 100, FilePath = syncedDirectory .. "Tsunami_Energy_Map_Lisbon_1755_4k.jpg", Description = Description } @@ -48,6 +51,7 @@ local LayerEnergy = { local LayerNull = { Identifier = Identifier .. "-null", Name = Name .. " (Null)", + ZIndex = 100, FilePath = syncedDirectory .. "Tsunami_Null_Coastal_Map_Lisbon_1755_4k.jpg", Description = Description } @@ -76,7 +80,6 @@ asset.export(LayerNull) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/tsunami_historical_series-samoa.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/tsunami_historical_series-samoa.asset index 11b3d8b34c..a1bdf01063 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/tsunami_historical_series-samoa.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/tsunami_historical_series-samoa.asset @@ -18,7 +18,7 @@ evacuation. PTWC canceled all tsunami alerts about four hours after the earthqua local URL = "https://sos.noaa.gov/catalog/datasets/tsunami-historical-series-samoa-2009/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -29,6 +29,7 @@ local syncedDirectory = asset.syncedResource({ local LayerCoastal = { Identifier = Identifier .. "-coastal", Name = Name .. " (Coastal)", + ZIndex = 100, FilePath = syncedDirectory .. "Tsunami_Coastal_Map_Samoa_2009_4k.jpg", Description = Description } @@ -36,6 +37,7 @@ local LayerCoastal = { local LayerEnergyCoastal = { Identifier = Identifier .. "-energy_coastal", Name = Name .. " (Energy Coastal)", + ZIndex = 100, FilePath = syncedDirectory .. "Tsunami_Energy+Coastal_Map_Samoa_2009_4k.jpg", Description = Description } @@ -43,6 +45,7 @@ local LayerEnergyCoastal = { local LayerEnergy = { Identifier = Identifier .. "-energy", Name = Name .. " (Energy)", + ZIndex = 100, FilePath = syncedDirectory .. "Tsunami_Energy_Map_Samoa_2009_4k.jpg", Description = Description } @@ -50,6 +53,7 @@ local LayerEnergy = { local LayerNull = { Identifier = Identifier .. "-null", Name = Name .. " (Null)", + ZIndex = 100, FilePath = syncedDirectory .. "Tsunami_Null_Coastal_Map_Samoa_2009_4k.jpg", Description = Description } @@ -78,7 +82,6 @@ asset.export(LayerNull) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/tsunami_historical_series-sumatra.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/tsunami_historical_series-sumatra.asset index bbe0fbb68a..9141bdf89f 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/tsunami_historical_series-sumatra.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/tsunami_historical_series-sumatra.asset @@ -12,7 +12,7 @@ Province, Sumatra, where the tsunami rose as high as 30 m (100 ft.) and traveled local URL = "https://sos.noaa.gov/catalog/datasets/tsunami-historical-series-sumatra-2004//" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -23,6 +23,7 @@ local syncedDirectory = asset.syncedResource({ local LayerCoastal = { Identifier = Identifier .. "-coastal", Name = Name .. " (Coastal)", + ZIndex = 100, FilePath = syncedDirectory .. "Tsunami_Coastal_Map_Sumatra_2004_2k.jpg", Description = Description } @@ -30,6 +31,7 @@ local LayerCoastal = { local LayerEnergyCoastal = { Identifier = Identifier .. "-energy_coastal", Name = Name .. " (Energy Coastal)", + ZIndex = 100, FilePath = syncedDirectory .. "Tsunami_Energy+Coastal_Map_Sumatra_2004_2k.jpg", Description = Description } @@ -37,6 +39,7 @@ local LayerEnergyCoastal = { local LayerEnergy = { Identifier = Identifier .. "-energy", Name = Name .. " (Energy)", + ZIndex = 100, FilePath = syncedDirectory .. "Tsunami_Energy_Map_Sumatra_2004_2k.jpg", Description = Description } @@ -44,6 +47,7 @@ local LayerEnergy = { local LayerNull = { Identifier = Identifier .. "-null", Name = Name .. " (Null)", + ZIndex = 100, FilePath = syncedDirectory .. "Tsunami_Null_Coastal_Map_Sumatra_2004_2k.jpg", Description = Description } @@ -72,7 +76,6 @@ asset.export(LayerNull) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/tsunami_locations.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/tsunami_locations.asset index 162f691b35..e4e184bebf 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/tsunami_locations.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/tsunami_locations.asset @@ -22,7 +22,7 @@ pronounced ocean features, such as volcanic islands, rift zones, and plate bound local URL = "https://sos.noaa.gov/catalog/datasets/tsunami-locations-2000-bce-2014/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -33,6 +33,7 @@ local syncedDirectory = asset.syncedResource({ local LayerBase = { Identifier = Identifier, Name = Name, + ZIndex = 100, FilePath = syncedDirectory .. "4096.jpg", Description = Description } @@ -40,6 +41,7 @@ local LayerBase = { local LayerGray = { Identifier = Identifier .. "-gray", Name = Name .. " (Gray)", + ZIndex = 100, FilePath = syncedDirectory .. "gray_earth_with_countries_4096.png", Description = Description } @@ -47,6 +49,7 @@ local LayerGray = { local LayerNeutral = { Identifier = Identifier .. "-neutral", Name = Name .. " (Neutral)", + ZIndex = 100, FilePath = syncedDirectory .. "natural_earth_with_countries_4096.png", Description = Description } @@ -54,6 +57,7 @@ local LayerNeutral = { local LayerEvents = { Identifier = Identifier .. "-events", Name = Name .. " (Events)", + ZIndex = 100, FilePath = syncedDirectory .. "tsunami_events.png", Description = Description } @@ -94,7 +98,6 @@ asset.export(Legend) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/vector_winds.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/vector_winds.asset index 121737a56c..dae65390b2 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/vector_winds.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/vector_winds.asset @@ -16,7 +16,7 @@ from a given area on the ocean surface]] local URL = "https://sos.noaa.gov/catalog/datasets/ocean-surface-winds/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -30,7 +30,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "images", Description = Description } @@ -63,7 +64,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/vent_discoveries_animation.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/vent_discoveries_animation.asset index 11285fea5b..568cf4edda 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/vent_discoveries_animation.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/vent_discoveries_animation.asset @@ -13,7 +13,7 @@ with human-occupied, remotely-operated, and autonomous vehicles]] local URL = "https://sos.noaa.gov/catalog/datasets/deep-sea-vent-discoveries/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -26,7 +26,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "TemporalTileLayer", + ZIndex = 100, + Type = "TemporalTileProvider", Mode = "Folder", Folder = { Folder = syncedDirectory .. "new", @@ -52,7 +53,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/vent_locations.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/vent_locations.asset index 521acfc12a..6cca645244 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/vent_locations.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/vent_locations.asset @@ -13,7 +13,7 @@ otherwise cold, dark, deep sea]] local URL = "https://sos.noaa.gov/catalog/datasets/deep-sea-vent-locations/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -25,6 +25,7 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, + ZIndex = 100, FilePath = syncedDirectory .. "vents_2016.png", Description = Description } @@ -44,7 +45,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/vorticity.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/vorticity.asset index d258f60bd7..e3ef6f2386 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/vorticity.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/vorticity.asset @@ -14,7 +14,7 @@ chemical constituents (such as carbon dioxide) throughout the globe]] local URL = "https://sos.noaa.gov/catalog/datasets/ocean-surface-vorticity/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -27,7 +27,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "frames", Description = Description } @@ -60,7 +61,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/waves-wave_height_2012.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/waves-wave_height_2012.asset index 7aca8b703e..22cf608702 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/waves-wave_height_2012.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/waves-wave_height_2012.asset @@ -11,7 +11,7 @@ numerical models to make these predictions]] local URL = "https://sos.noaa.gov/catalog/datasets/wave-heights-2012/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -24,7 +24,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "4096", Description = Description } @@ -57,7 +58,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/waves-wave_height_katrina.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/waves-wave_height_katrina.asset index ff5f904c85..2357c4b14a 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/waves-wave_height_katrina.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/waves-wave_height_katrina.asset @@ -13,7 +13,7 @@ though the Gulf of Mexico. Finally it hit the southeast Louisiana coast on Monda local URL = "https://sos.noaa.gov/catalog/datasets/wave-heights-hurricane-katrina-2005/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -26,7 +26,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "4096", Description = Description } @@ -59,7 +60,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/waves-wave_height_sandy.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/waves-wave_height_sandy.asset index bbb7b24e8c..9e5de18b72 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/waves-wave_height_sandy.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/waves-wave_height_sandy.asset @@ -13,7 +13,7 @@ a wave model called 'WAVEWATCH III'. The movie shows 3 hourly model output over local URL = "https://sos.noaa.gov/catalog/datasets/wave-heights-hurricane-sandy-2012/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -26,7 +26,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "4096", Description = Description } @@ -59,7 +60,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/waves-wave_power_2012.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/waves-wave_power_2012.asset index bd07070dc0..9a47e930d8 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/waves-wave_power_2012.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/waves-wave_power_2012.asset @@ -11,7 +11,7 @@ numerical models to make these predictions]] local URL = "https://sos.noaa.gov/catalog/datasets/wave-power-2012/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -24,7 +24,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "ImageSequenceTileLayer", + ZIndex = 100, + Type = "ImageSequenceTileProvider", FolderPath = syncedDirectory .. "4096", Description = Description } @@ -57,7 +58,6 @@ asset.export(Colorbar) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/weeklyseaice-10day_seaice.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/weeklyseaice-10day_seaice.asset index 9ffd591f30..a524d9c7f3 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/weeklyseaice-10day_seaice.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/weeklyseaice-10day_seaice.asset @@ -17,7 +17,7 @@ cell size grid covering both Arctic and Antarctic polar regions]] local URL = "https://sos.noaa.gov/catalog/datasets/sea-ice-extent-1978-present/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -30,7 +30,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "TemporalTileLayer", + ZIndex = 100, + Type = "TemporalTileProvider", Mode = "Folder", Folder = { Folder = syncedDirectory .. "4096_png", @@ -56,7 +57,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/weeklyseaice-sept_seaice.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/weeklyseaice-sept_seaice.asset index b4e006454e..0420ea6440 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/weeklyseaice-sept_seaice.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/oceans/weeklyseaice-sept_seaice.asset @@ -25,7 +25,7 @@ Arctic is shrinking, while the Antarctic sea ice is not trending downward]] local URL = "https://sos.noaa.gov/catalog/datasets/sea-ice-extent-september-only/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -38,7 +38,8 @@ local Layer = { Identifier = Identifier, Name = Name, Enabled = asset.enabled, - Type = "TemporalTileLayer", + ZIndex = 100, + Type = "TemporalTileProvider", Mode = "Folder", Folder = { Folder = syncedDirectory .. "4096", @@ -64,7 +65,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/cables.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/cables.asset index 33f6b2be4c..798322dff8 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/cables.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/cables.asset @@ -11,7 +11,7 @@ at Wikipedia]] local URL = "https://sos.noaa.gov/catalog/datasets/undersea-communication-cables/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -42,7 +42,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/capitals.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/capitals.asset index 8b8024c36d..8774e12708 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/capitals.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/capitals.asset @@ -10,7 +10,7 @@ country capitals onto any dataset that you are viewing]] local URL = "https://sos.noaa.gov/catalog/datasets/capital-city-names/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -41,7 +41,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/city_names.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/city_names.asset index 53ba464dfc..d3aae95337 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/city_names.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/city_names.asset @@ -11,7 +11,7 @@ are viewing]] local URL = "https://sos.noaa.gov/catalog/datasets/city-names/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -42,7 +42,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/continent_borders-black.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/continent_borders-black.asset index 03280e3dd0..25ef67ec5b 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/continent_borders-black.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/continent_borders-black.asset @@ -10,7 +10,7 @@ continent borders in black onto any dataset that you are viewing]] local URL = "https://sos.noaa.gov/catalog/datasets/continent-borders-black/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -41,7 +41,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/continent_borders-white.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/continent_borders-white.asset index ef85f6be2c..9a28a38de2 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/continent_borders-white.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/continent_borders-white.asset @@ -10,7 +10,7 @@ continent borders in white onto any dataset that you are viewing]] local URL = "https://sos.noaa.gov/catalog/datasets/continent-borders-white/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -41,7 +41,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/continent_names.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/continent_names.asset index 5b9e415137..c11184fe0d 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/continent_names.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/continent_names.asset @@ -10,7 +10,7 @@ continent continent names onto any dataset that you are viewing]] local URL = "https://sos.noaa.gov/catalog/datasets/continent-names/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -41,7 +41,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/country_borders-black.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/country_borders-black.asset index 2e9bdcf181..9a52cfc9ef 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/country_borders-black.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/country_borders-black.asset @@ -10,7 +10,7 @@ country borders onto any dataset that you are viewing]] local URL = "https://sos.noaa.gov/catalog/datasets/country-borders-black/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -41,7 +41,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/country_borders-white.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/country_borders-white.asset index 66e2d411e0..c0c96d5b1c 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/country_borders-white.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/country_borders-white.asset @@ -10,7 +10,7 @@ country borders onto any dataset that you are viewing]] local URL = "https://sos.noaa.gov/catalog/datasets/country-borders-white/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -41,7 +41,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/country_pop_names.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/country_pop_names.asset index 5475e86771..04ee8c83ef 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/country_pop_names.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/country_pop_names.asset @@ -11,7 +11,7 @@ viewing]] local URL = "https://sos.noaa.gov/catalog/datasets/country-names/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -42,7 +42,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/currents.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/currents.asset index b786993321..e176a625af 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/currents.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/currents.asset @@ -10,7 +10,7 @@ of ocean currents, taken from the Ocean Circulation dataset]] local URL = "https://sos.noaa.gov/catalog/datasets/ocean-currents/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -60,7 +60,6 @@ asset.export(LayerLabels) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/general_circulation.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/general_circulation.asset index 1189f61cf8..c404c0c43b 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/general_circulation.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/general_circulation.asset @@ -12,7 +12,7 @@ rain shadow effect as well as cloud movement or when describing the coriolis eff local URL = "https://sos.noaa.gov/catalog/datasets/atmospheric-general-circulation/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -43,7 +43,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/land_mask-black.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/land_mask-black.asset index 3bbb7af600..b997764ee2 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/land_mask-black.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/land_mask-black.asset @@ -10,7 +10,7 @@ black mask over all the land on any dataset that you are viewing]] local URL = "https://sos.noaa.gov/catalog/datasets/land-mask-black/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -41,7 +41,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/land_mask-veg.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/land_mask-veg.asset index 7b9f28a9d6..a6680adec2 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/land_mask-veg.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/land_mask-veg.asset @@ -11,7 +11,7 @@ viewing]] local URL = "https://sos.noaa.gov/catalog/datasets/land-mask-vegetation/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -42,7 +42,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/latlon_grid-black.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/latlon_grid-black.asset index 1488b37544..01ac62e6ae 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/latlon_grid-black.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/latlon_grid-black.asset @@ -10,7 +10,7 @@ latitude and longitude grid in black onto any dataset that you are viewing]] local URL = "https://sos.noaa.gov/catalog/datasets/latlong-grid-black/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -41,7 +41,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/latlon_grid-white.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/latlon_grid-white.asset index 8e4b62c7c9..aef7d9121c 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/latlon_grid-white.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/latlon_grid-white.asset @@ -10,7 +10,7 @@ latitude and longitude grid in white onto any dataset that you are viewing]] local URL = "https://sos.noaa.gov/catalog/datasets/latlong-grid-white/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -41,7 +41,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/ocean_names.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/ocean_names.asset index 6173829747..87dce97eee 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/ocean_names.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/ocean_names.asset @@ -10,7 +10,7 @@ names onto any dataset that you are viewing]] local URL = "https://sos.noaa.gov/catalog/datasets/ocean-names/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -41,7 +41,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/plate_boundary-color.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/plate_boundary-color.asset index 90bad9ed82..fed2944b9a 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/plate_boundary-color.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/plate_boundary-color.asset @@ -11,7 +11,7 @@ dataset that you are viewing]] local URL = "https://sos.noaa.gov/catalog/datasets/plate-boundaries-colorized/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -42,7 +42,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/plate_boundary-white.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/plate_boundary-white.asset index e0567faf4d..438316dd9e 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/plate_boundary-white.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/plate_boundary-white.asset @@ -10,7 +10,7 @@ tectonic plate boundaries in white onto any dataset that you are viewing]] local URL = "https://sos.noaa.gov/catalog/datasets/plate-boundaries-white/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -41,7 +41,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/plate_names.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/plate_names.asset index f8bd0a3842..9c0213bc1e 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/plate_names.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/plate_names.asset @@ -10,7 +10,7 @@ tectonic plate names onto any dataset that you are viewing]] local URL = "https://sos.noaa.gov/catalog/datasets/plate-names/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -41,7 +41,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/railroad.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/railroad.asset index 8efbb458c6..a1e4569773 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/railroad.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/railroad.asset @@ -11,7 +11,7 @@ Data]] local URL = "https://sos.noaa.gov/catalog/datasets/railroads/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -42,7 +42,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/rivers.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/rivers.asset index 76bb1a1eb6..c5df3ce42e 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/rivers.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/rivers.asset @@ -11,7 +11,7 @@ indicated by the size of the lines. The data was found at Natural Earth Data]] local URL = "https://sos.noaa.gov/catalog/datasets/rivers/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -42,7 +42,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/roads-black.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/roads-black.asset index 02272f9cf5..9b1d3a200a 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/roads-black.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/roads-black.asset @@ -11,7 +11,7 @@ Data]] local URL = "https://sos.noaa.gov/catalog/datasets/roads-black/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -42,7 +42,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/roads-white.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/roads-white.asset index 1c2755289f..8c23993226 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/roads-white.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/roads-white.asset @@ -11,7 +11,7 @@ Data]] local URL = "https://sos.noaa.gov/catalog/datasets/roads-white/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -42,7 +42,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/state_borders-black.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/state_borders-black.asset index fe201024ab..2e561680d8 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/state_borders-black.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/state_borders-black.asset @@ -10,7 +10,7 @@ country and North American state borders onto any dataset that you are viewing]] local URL = "https://sos.noaa.gov/catalog/datasets/country-borders-with-north-american-states-black/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -41,7 +41,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/state_borders-white.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/state_borders-white.asset index 23163d7e99..b53b928133 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/state_borders-white.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/state_borders-white.asset @@ -10,7 +10,7 @@ country and North American state borders onto any dataset that you are viewing]] local URL = "https://sos.noaa.gov/catalog/datasets/country-borders-with-north-american-states-white/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -41,7 +41,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/timezones.asset b/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/timezones.asset index a771fb0f5e..e88af01c16 100644 --- a/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/timezones.asset +++ b/data/assets/scene/solarsystem/planets/earth/noaa-sos/overlays/timezones.asset @@ -10,7 +10,7 @@ timezones onto any dataset that you are viewing]] local URL = "https://sos.noaa.gov/catalog/datasets/time-zones/" -local syncedDirectory = asset.syncedResource({ +local syncedDirectory = asset.resource({ Name = Name, Type = "HttpSynchronization", Identifier = Identifier, @@ -41,7 +41,6 @@ asset.export(Layer) asset.meta = { Name = Name, - Version = "1.0", Description = Description .. "Data provided by the National Oceanic and Atmospheric Administration", Author = "National Oceanic and Atmospheric Administration", URL = URL, diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/communications/amateur.asset b/data/assets/scene/solarsystem/planets/earth/satellites/communications/amateur.asset index 8c53e2fa68..ed48d2e0a3 100644 --- a/data/assets/scene/solarsystem/planets/earth/satellites/communications/amateur.asset +++ b/data/assets/scene/solarsystem/planets/earth/satellites/communications/amateur.asset @@ -2,13 +2,13 @@ local transforms = asset.require("scene/solarsystem/planets/earth/transforms") -local omm = asset.syncedResource({ +local omm = asset.resource({ Name = "Satellite OMM Data (Amateur Radio)", Type = "UrlSynchronization", Identifier = "satellite_omm_data_amateur_radio", Url = "https://www.celestrak.com/NORAD/elements/gp.php?GROUP=amateur&FORMAT=kvn", Filename = "amateur.txt", - Override = true + SecondsUntilResync = openspace.time.secondsPerDay() }) @@ -21,7 +21,8 @@ local AmateurSatellites = { Format = "OMM", SegmentQuality = 3, Color = { 0.75, 0.75, 0.35 }, - Fade = 1.5, + TrailFade = 15.0, + PointSizeExponent = 5.0, RenderBinMode = "PostDeferredTransparent" }, Tag = { "earth_satellites" }, @@ -46,7 +47,6 @@ asset.export(AmateurSatellites) asset.meta = { Name = "Satellites Communications - Amateur Radio", - Version = "1.0", Description = [[Satellites asset for Communications - Amateur Radio. Data from Celestrak]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/communications/experimental.asset b/data/assets/scene/solarsystem/planets/earth/satellites/communications/experimental.asset index 5307b4938b..fc9655828f 100644 --- a/data/assets/scene/solarsystem/planets/earth/satellites/communications/experimental.asset +++ b/data/assets/scene/solarsystem/planets/earth/satellites/communications/experimental.asset @@ -2,13 +2,13 @@ local transforms = asset.require("scene/solarsystem/planets/earth/transforms") -local omm = asset.syncedResource({ +local omm = asset.resource({ Name = "Satellite OMM Data (Experimental)", Type = "UrlSynchronization", Identifier = "satellite_omm_data_x-comm", Url = "https://www.celestrak.com/NORAD/elements/gp.php?GROUP=x-comm&FORMAT=kvn", Filename = "x-comm.txt", - Override = true + SecondsUntilResync = openspace.time.secondsPerDay() }) @@ -21,7 +21,8 @@ local ExperimentalSatellites = { Format = "OMM", SegmentQuality = 3, Color = { 0.75, 0.75, 0.35 }, - Fade = 1.5, + TrailFade = 15, + PointSizeExponent = 5.0, RenderBinMode = "PostDeferredTransparent" }, Tag = { "earth_satellites" }, @@ -46,7 +47,6 @@ asset.export(ExperimentalSatellites) asset.meta = { Name = "Satellites Communications - Experimental", - Version = "1.0", Description = "Satellites asset for Communications - Experimental. Data from Celestrak", Author = "OpenSpace Team", URL = "https://celestrak.com/NORAD/elements/", diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/communications/geostationary.asset b/data/assets/scene/solarsystem/planets/earth/satellites/communications/geostationary.asset index c0e562027e..c8ff854b88 100644 --- a/data/assets/scene/solarsystem/planets/earth/satellites/communications/geostationary.asset +++ b/data/assets/scene/solarsystem/planets/earth/satellites/communications/geostationary.asset @@ -2,13 +2,13 @@ local transforms = asset.require("scene/solarsystem/planets/earth/transforms") -local omm = asset.syncedResource({ +local omm = asset.resource({ Name = "Satellite OMM Data (Geostationary)", Type = "UrlSynchronization", Identifier = "satellite_omm_data_geo", Url = "https://www.celestrak.com/NORAD/elements/gp.php?GROUP=geo&FORMAT=kvn", Filename = "geo.txt", - Override = true + SecondsUntilResync = openspace.time.secondsPerDay() }) @@ -21,7 +21,8 @@ local GeoStationarySatellites = { Format = "OMM", SegmentQuality = 3, Color = { 0.9, 0.9, 0.0 }, - Fade = 1.5, + TrailFade = 5, + PointSizeExponent = 5.2, RenderBinMode = "PostDeferredTransparent" }, Tag = { "earth_satellites" }, @@ -48,7 +49,6 @@ asset.export(GeoStationarySatellites) asset.meta = { Name = "Satellites Communications - Geostationary", - Version = "1.0", Description = [[Satellites asset for Communications - Geostationary. Data from Celestrak]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/communications/globalstar.asset b/data/assets/scene/solarsystem/planets/earth/satellites/communications/globalstar.asset index f4304a159a..a76d042f90 100644 --- a/data/assets/scene/solarsystem/planets/earth/satellites/communications/globalstar.asset +++ b/data/assets/scene/solarsystem/planets/earth/satellites/communications/globalstar.asset @@ -2,13 +2,13 @@ local transforms = asset.require("scene/solarsystem/planets/earth/transforms") -local omm = asset.syncedResource({ +local omm = asset.resource({ Name = "Satellite OMM Data (GlobalStar)", Type = "UrlSynchronization", Identifier = "satellite_omm_data_globalstar", Url = "https://www.celestrak.com/NORAD/elements/gp.php?GROUP=globalstar&FORMAT=kvn", Filename = "globalstar.txt", - Override = true + SecondsUntilResync = openspace.time.secondsPerDay() }) @@ -21,7 +21,8 @@ local GlobalStarSatellites = { Format = "OMM", SegmentQuality = 3, Color = { 0.75, 0.75, 0.35 }, - Fade = 1.5, + TrailFade = 15, + PointSizeExponent = 5.0, RenderBinMode = "PostDeferredTransparent" }, Tag = { "earth_satellites" }, @@ -46,7 +47,6 @@ asset.export(GlobalStarSatellites) asset.meta = { Name = "Satellites Communications - GlobalStar", - Version = "1.0", Description = "Satellites asset for Communications - GlobalStar. Data from Celestrak", Author = "OpenSpace Team", URL = "https://celestrak.com/NORAD/elements/", diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/communications/gorizont.asset b/data/assets/scene/solarsystem/planets/earth/satellites/communications/gorizont.asset index 8e81b4c2cb..bb74c08ce4 100644 --- a/data/assets/scene/solarsystem/planets/earth/satellites/communications/gorizont.asset +++ b/data/assets/scene/solarsystem/planets/earth/satellites/communications/gorizont.asset @@ -2,13 +2,13 @@ local transforms = asset.require("scene/solarsystem/planets/earth/transforms") -local omm = asset.syncedResource({ +local omm = asset.resource({ Name = "Satellite OMM Data (Gorizont)", Type = "UrlSynchronization", Identifier = "satellite_omm_data_gorizont", Url = "https://www.celestrak.com/NORAD/elements/gp.php?GROUP=gorizont&FORMAT=kvn", Filename = "gorizont.txt", - Override = true + SecondsUntilResync = openspace.time.secondsPerDay() }) @@ -21,7 +21,8 @@ local GorizontSatellites = { Format = "OMM", SegmentQuality = 3, Color = { 0.75, 0.75, 0.35 }, - Fade = 1.5, + TrailFade = 5, + PointSizeExponent = 5.0, RenderBinMode = "PostDeferredTransparent" }, Tag = { "earth_satellites" }, @@ -46,7 +47,6 @@ asset.export(GorizontSatellites) asset.meta = { Name = "Satellites Communications - Gorizont", - Version = "1.0", Description = "Satellites asset for Communications - Gorizont. Data from Celestrak", Author = "OpenSpace Team", URL = "https://celestrak.com/NORAD/elements/", diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/communications/intelsat.asset b/data/assets/scene/solarsystem/planets/earth/satellites/communications/intelsat.asset index 1a7f0d21b5..4601e65efe 100644 --- a/data/assets/scene/solarsystem/planets/earth/satellites/communications/intelsat.asset +++ b/data/assets/scene/solarsystem/planets/earth/satellites/communications/intelsat.asset @@ -2,13 +2,13 @@ local transforms = asset.require("scene/solarsystem/planets/earth/transforms") -local omm = asset.syncedResource({ +local omm = asset.resource({ Name = "Satellite OMM Data (Intelsat)", Type = "UrlSynchronization", Identifier = "satellite_omm_data_intelsat", Url = "https://www.celestrak.com/NORAD/elements/gp.php?GROUP=intelsat&FORMAT=kvn", Filename = "intelsat.txt", - Override = true + SecondsUntilResync = openspace.time.secondsPerDay() }) @@ -21,7 +21,8 @@ local IntelsatSatellites = { Format = "OMM", SegmentQuality = 3, Color = { 0.75, 0.75, 0.35 }, - Fade = 1.5, + TrailFade = 5, + PointSizeExponent = 5.0, RenderBinMode = "PostDeferredTransparent" }, Tag = { "earth_satellites" }, @@ -46,7 +47,6 @@ asset.export(IntelsatSatellites) asset.meta = { Name = "Satellites Communications - Intelsat", - Version = "1.0", Description = "Satellites asset for Communications - Intelsat. Data from Celestrak", Author = "OpenSpace Team", URL = "https://celestrak.com/NORAD/elements/", diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/communications/iridium.asset b/data/assets/scene/solarsystem/planets/earth/satellites/communications/iridium.asset index b5181a5086..12c4a6e28e 100644 --- a/data/assets/scene/solarsystem/planets/earth/satellites/communications/iridium.asset +++ b/data/assets/scene/solarsystem/planets/earth/satellites/communications/iridium.asset @@ -2,13 +2,13 @@ local transforms = asset.require("scene/solarsystem/planets/earth/transforms") -local omm = asset.syncedResource({ +local omm = asset.resource({ Name = "Satellite OMM Data (Iridium)", Type = "UrlSynchronization", Identifier = "satellite_omm_data_iridium", Url = "https://www.celestrak.com/NORAD/elements/gp.php?GROUP=iridium&FORMAT=kvn", Filename = "iridium.txt", - Override = true + SecondsUntilResync = openspace.time.secondsPerDay() }) @@ -21,7 +21,8 @@ local IridiumSatellites = { Format = "OMM", SegmentQuality = 3, Color = { 0.75, 0.75, 0.35 }, - Fade = 1.5, + TrailFade = 15, + PointSizeExponent = 5.0, RenderBinMode = "PostDeferredTransparent" }, Tag = { "earth_satellites" }, @@ -46,7 +47,6 @@ asset.export(IridiumSatellites) asset.meta = { Name = "Satellites Communications - Iridium", - Version = "1.0", Description = "Satellites asset for Communications - Iridium. Data from Celestrak", Author = "OpenSpace Team", URL = "https://celestrak.com/NORAD/elements/", diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/communications/iridium_next.asset b/data/assets/scene/solarsystem/planets/earth/satellites/communications/iridium_next.asset index 69856e3174..759e31cafd 100644 --- a/data/assets/scene/solarsystem/planets/earth/satellites/communications/iridium_next.asset +++ b/data/assets/scene/solarsystem/planets/earth/satellites/communications/iridium_next.asset @@ -2,13 +2,13 @@ local transforms = asset.require("scene/solarsystem/planets/earth/transforms") -local omm = asset.syncedResource({ +local omm = asset.resource({ Name = "Satellite OMM Data (Iridium NEXT)", Type = "UrlSynchronization", Identifier = "satellite_omm_data_iridium-NEXT", Url = "https://www.celestrak.com/NORAD/elements/gp.php?GROUP=iridium-NEXT&FORMAT=kvn", Filename = "iridium-NEXT.txt", - Override = true + SecondsUntilResync = openspace.time.secondsPerDay() }) @@ -21,7 +21,8 @@ local IridiumNextSatellites = { Format = "OMM", SegmentQuality = 3, Color = { 0.75, 0.75, 0.35 }, - Fade = 1.5, + TrailFade = 15, + PointSizeExponent = 5.0, RenderBinMode = "PostDeferredTransparent" }, Tag = { "earth_satellites" }, @@ -46,7 +47,6 @@ asset.export(IridiumNextSatellites) asset.meta = { Name = "Satellites Communications - Iridium NEXT", - Version = "1.0", Description = "Satellites asset for Communications - Iridium NEXT. Data from Celestrak", Author = "OpenSpace Team", URL = "https://celestrak.com/NORAD/elements/", diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/communications/molniya.asset b/data/assets/scene/solarsystem/planets/earth/satellites/communications/molniya.asset index 5937017024..58586625e0 100644 --- a/data/assets/scene/solarsystem/planets/earth/satellites/communications/molniya.asset +++ b/data/assets/scene/solarsystem/planets/earth/satellites/communications/molniya.asset @@ -2,13 +2,13 @@ local transforms = asset.require("scene/solarsystem/planets/earth/transforms") -local omm = asset.syncedResource({ +local omm = asset.resource({ Name = "Satellite OMM Data (Molniya)", Type = "UrlSynchronization", Identifier = "satellite_omm_data_molniya", Url = "https://www.celestrak.com/NORAD/elements/gp.php?GROUP=molniya&FORMAT=kvn", Filename = "molniya.txt", - Override = true + SecondsUntilResync = openspace.time.secondsPerDay() }) @@ -21,7 +21,8 @@ local MolniyaSatellites = { Format = "OMM", SegmentQuality = 3, Color = { 0.75, 0.75, 0.35 }, - Fade = 1.5, + TrailFade = 15, + PointSizeExponent = 5.0, RenderBinMode = "PostDeferredTransparent" }, Tag = { "earth_satellites" }, @@ -46,7 +47,6 @@ asset.export(MolniyaSatellites) asset.meta = { Name = "Satellites Communications - Molniya", - Version = "1.0", Description = "Satellites asset for Communications - Molniya. Data from Celestrak", Author = "OpenSpace Team", URL = "https://celestrak.com/NORAD/elements/", diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/communications/orbcomm.asset b/data/assets/scene/solarsystem/planets/earth/satellites/communications/orbcomm.asset index 06a4b3ddc4..107171335d 100644 --- a/data/assets/scene/solarsystem/planets/earth/satellites/communications/orbcomm.asset +++ b/data/assets/scene/solarsystem/planets/earth/satellites/communications/orbcomm.asset @@ -2,13 +2,13 @@ local transforms = asset.require("scene/solarsystem/planets/earth/transforms") -local omm = asset.syncedResource({ +local omm = asset.resource({ Name = "Satellite OMM Data (Orbcomm)", Type = "UrlSynchronization", Identifier = "satellite_omm_data_orbcomm", Url = "https://www.celestrak.com/NORAD/elements/gp.php?GROUP=orbcomm&FORMAT=kvn", Filename = "orbcomm.txt", - Override = true + SecondsUntilResync = openspace.time.secondsPerDay() }) @@ -21,7 +21,8 @@ local OrbcommSatellites = { Format = "OMM", SegmentQuality = 3, Color = { 0.75, 0.75, 0.35 }, - Fade = 1.5, + TrailFade = 15, + PointSizeExponent = 5.0, RenderBinMode = "PostDeferredTransparent" }, Tag = { "earth_satellites" }, @@ -46,7 +47,6 @@ asset.export(OrbcommSatellites) asset.meta = { Name = "Satellites Communications - Orbcomm", - Version = "1.0", Description = "Satellites asset for Communications - Orbcomm. Data from Celestrak", Author = "OpenSpace Team", URL = "https://celestrak.com/NORAD/elements/", diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/communications/other_comm.asset b/data/assets/scene/solarsystem/planets/earth/satellites/communications/other_comm.asset index 613a9a1933..ab09abef8a 100644 --- a/data/assets/scene/solarsystem/planets/earth/satellites/communications/other_comm.asset +++ b/data/assets/scene/solarsystem/planets/earth/satellites/communications/other_comm.asset @@ -2,13 +2,13 @@ local transforms = asset.require("scene/solarsystem/planets/earth/transforms") -local omm = asset.syncedResource({ +local omm = asset.resource({ Name = "Satellite OMM Data (Other comm)", Type = "UrlSynchronization", Identifier = "satellite_omm_data_other-comm", Url = "https://www.celestrak.com/NORAD/elements/gp.php?GROUP=other-comm&FORMAT=kvn", Filename = "other-comm.txt", - Override = true + SecondsUntilResync = openspace.time.secondsPerDay() }) @@ -21,7 +21,8 @@ local OtherCommunicationSatellites = { Format = "OMM", SegmentQuality = 3, Color = { 0.75, 0.75, 0.35 }, - Fade = 1.5, + TrailFade = 15, + PointSizeExponent = 5.0, RenderBinMode = "PostDeferredTransparent" }, Tag = { "earth_satellites" }, @@ -31,6 +32,7 @@ local OtherCommunicationSatellites = { } } + asset.onInitialize(function() openspace.addSceneGraphNode(OtherCommunicationSatellites) end) @@ -45,7 +47,6 @@ asset.export(OtherCommunicationSatellites) asset.meta = { Name = "Satellites Communications - Other comm", - Version = "1.0", Description = "Satellites asset for Communications - Other comm. Data from Celestrak", Author = "OpenSpace Team", URL = "https://celestrak.com/NORAD/elements/", diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/communications/raduga.asset b/data/assets/scene/solarsystem/planets/earth/satellites/communications/raduga.asset index f212a9f1a0..ba24bec98c 100644 --- a/data/assets/scene/solarsystem/planets/earth/satellites/communications/raduga.asset +++ b/data/assets/scene/solarsystem/planets/earth/satellites/communications/raduga.asset @@ -2,13 +2,13 @@ local transforms = asset.require("scene/solarsystem/planets/earth/transforms") -local omm = asset.syncedResource({ +local omm = asset.resource({ Name = "Satellite OMM Data (Raduga)", Type = "UrlSynchronization", Identifier = "satellite_omm_data_raduga", Url = "https://www.celestrak.com/NORAD/elements/gp.php?GROUP=raduga&FORMAT=kvn", Filename = "raduga.txt", - Override = true + SecondsUntilResync = openspace.time.secondsPerDay() }) @@ -21,7 +21,8 @@ local RadugaSatellites = { Format = "OMM", SegmentQuality = 3, Color = { 0.75, 0.75, 0.35 }, - Fade = 1.5, + TrailFade = 5, + PointSizeExponent = 5.0, RenderBinMode = "PostDeferredTransparent" }, Tag = { "earth_satellites" }, @@ -46,7 +47,6 @@ asset.export(RadugaSatellites) asset.meta = { Name = "Satellites Communications - Raduga", - Version = "1.0", Description = "Satellites asset for Communications - Raduga. Data from Celestrak", Author = "OpenSpace Team", URL = "https://celestrak.com/NORAD/elements/", diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/communications/ses.asset b/data/assets/scene/solarsystem/planets/earth/satellites/communications/ses.asset index 9da29c13c7..8a2ae6cfe1 100644 --- a/data/assets/scene/solarsystem/planets/earth/satellites/communications/ses.asset +++ b/data/assets/scene/solarsystem/planets/earth/satellites/communications/ses.asset @@ -2,13 +2,13 @@ local transforms = asset.require("scene/solarsystem/planets/earth/transforms") -local omm = asset.syncedResource({ +local omm = asset.resource({ Name = "Satellite OMM Data (SES)", Type = "UrlSynchronization", Identifier = "satellite_omm_data_ses", Url = "https://www.celestrak.com/NORAD/elements/gp.php?GROUP=ses&FORMAT=kvn", Filename = "ses.txt", - Override = true + SecondsUntilResync = openspace.time.secondsPerDay() }) @@ -21,7 +21,8 @@ local SesSatellites = { Format = "OMM", SegmentQuality = 3, Color = { 0.75, 0.75, 0.35 }, - Fade = 1.5, + TrailFade = 10, + PointSizeExponent = 5.0, RenderBinMode = "PostDeferredTransparent" }, Tag = { "earth_satellites" }, @@ -46,7 +47,6 @@ asset.export(SesSatellites) asset.meta = { Name = "Satellites Communications - SES", - Version = "1.0", Description = "Satellites asset for Communications - SES. Data from Celestrak", Author = "OpenSpace Team", URL = "https://celestrak.com/NORAD/elements/", diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/communications/starlink.asset b/data/assets/scene/solarsystem/planets/earth/satellites/communications/starlink.asset index 3e6538001f..323cdd446b 100644 --- a/data/assets/scene/solarsystem/planets/earth/satellites/communications/starlink.asset +++ b/data/assets/scene/solarsystem/planets/earth/satellites/communications/starlink.asset @@ -2,13 +2,13 @@ local transforms = asset.require("scene/solarsystem/planets/earth/transforms") -local omm = asset.syncedResource({ +local omm = asset.resource({ Name = "Satellite OMM Data (Starlink)", Type = "UrlSynchronization", Identifier = "satellite_omm_data_starlink", Url = "https://www.celestrak.com/NORAD/elements/gp.php?GROUP=starlink&FORMAT=kvn", Filename = "starlink.txt", - Override = true + SecondsUntilResync = openspace.time.secondsPerDay() }) @@ -21,7 +21,8 @@ local StarlinkSatellites = { Format = "OMM", SegmentQuality = 3, Color = { 0.65, 0.55, 0.55 }, - Fade = 1.5, + TrailFade = 5, + PointSizeExponent = 5.0, RenderBinMode = "PostDeferredTransparent" }, Tag = { "earth_satellites" }, @@ -48,7 +49,6 @@ asset.export(StarlinkSatellites) asset.meta = { Name = "Satellites Communications - Starlink", - Version = "1.0", Description = "Satellites asset for Communications - Starlink. Data from Celestrak", Author = "OpenSpace Team", URL = "https://celestrak.com/NORAD/elements/", diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/debris/debris_asat.asset b/data/assets/scene/solarsystem/planets/earth/satellites/debris/debris_asat.asset index 524ea1b36e..320860f245 100644 --- a/data/assets/scene/solarsystem/planets/earth/satellites/debris/debris_asat.asset +++ b/data/assets/scene/solarsystem/planets/earth/satellites/debris/debris_asat.asset @@ -2,13 +2,13 @@ local transforms = asset.require("scene/solarsystem/planets/earth/transforms") -local omm = asset.syncedResource({ +local omm = asset.resource({ Name = "Satellite OMM Data (Indian ASAT test Debris)", Type = "UrlSynchronization", Identifier = "satellite_omm_data_2019-006", Url = "https://www.celestrak.com/NORAD/elements/gp.php?INTDES=2019-006&FORMAT=kvn", Filename = "2019-006.txt", - Override = true + SecondsUntilResync = openspace.time.secondsPerDay() }) @@ -21,7 +21,8 @@ local DebrisAsat = { Format = "OMM", SegmentQuality = 3, Color = { 0.25, 0.35, 0.45 }, - Fade = 1.5, + TrailFade = 15, + PointSizeExponent = 5.0, RenderBinMode = "PostDeferredTransparent" }, Tag = { "earth_satellites" }, @@ -46,7 +47,6 @@ asset.export(DebrisAsat) asset.meta = { Name = "Satellites Debris - Indian ASAT test Debris", - Version = "1.0", Description = [[Satellites asset for Debris - Indian ASAT test Debris. Data from Celestrak]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/debris/debris_breezem.asset b/data/assets/scene/solarsystem/planets/earth/satellites/debris/debris_breezem.asset index 48990cb89b..085e280b89 100644 --- a/data/assets/scene/solarsystem/planets/earth/satellites/debris/debris_breezem.asset +++ b/data/assets/scene/solarsystem/planets/earth/satellites/debris/debris_breezem.asset @@ -2,13 +2,13 @@ local transforms = asset.require("scene/solarsystem/planets/earth/transforms") -local omm = asset.syncedResource({ +local omm = asset.resource({ Name = "Satellite OMM Data (Breeze-M Breakup)", Type = "UrlSynchronization", Identifier = "satellite_omm_data_2012-044", Url = "https://www.celestrak.com/NORAD/elements/gp.php?INTDES=2012-044&FORMAT=kvn", Filename = "2012-044.txt", - Override = true + SecondsUntilResync = openspace.time.secondsPerDay() }) @@ -21,7 +21,8 @@ local DebrisBreezem = { Format = "OMM", SegmentQuality = 3, Color = { 0.25, 0.35, 0.45 }, - Fade = 1.5, + TrailFade = 15, + PointSizeExponent = 5.0, RenderBinMode = "PostDeferredTransparent" }, Tag = { "earth_satellites" }, @@ -46,7 +47,6 @@ asset.export(DebrisBreezem) asset.meta = { Name = "Satellites Debris - Breeze-M Breakup", - Version = "1.0", Description = "Satellites asset for Debris - Breeze-M Breakup. Data from Celestrak", Author = "OpenSpace Team", URL = "https://celestrak.com/events/38746-Breakup/", diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/debris/debris_fengyun.asset b/data/assets/scene/solarsystem/planets/earth/satellites/debris/debris_fengyun.asset index f7164e36fa..a52a8393ff 100644 --- a/data/assets/scene/solarsystem/planets/earth/satellites/debris/debris_fengyun.asset +++ b/data/assets/scene/solarsystem/planets/earth/satellites/debris/debris_fengyun.asset @@ -2,13 +2,13 @@ local transforms = asset.require("scene/solarsystem/planets/earth/transforms") -local omm = asset.syncedResource({ +local omm = asset.resource({ Name = "Satellite OMM Data (Fengyun Debris)", Type = "UrlSynchronization", Identifier = "satellite_omm_data_1999-025", Url = "https://www.celestrak.com/NORAD/elements/gp.php?INTDES=1999-025&FORMAT=kvn", Filename = "1999-025.txt", - Override = true + SecondsUntilResync = openspace.time.secondsPerDay() }) @@ -21,7 +21,8 @@ local DebrisFengyun = { Format = "OMM", SegmentQuality = 3, Color = { 0.784, 1.0, 0.737 }, - Fade = 1.5, + TrailFade = 1.5, + PointSizeExponent = 5.0, RenderBinMode = "PostDeferredTransparent" }, Tag = { "earth_satellites" }, @@ -46,7 +47,6 @@ asset.export(DebrisFengyun) asset.meta = { Name = "Satellites Debris - Fengyun Debris", - Version = "1.0", Description = "Satellites asset for Debris - Fengyun Debris. Data from Celestrak", Author = "OpenSpace Team", URL = "https://celestrak.com/NORAD/elements/", diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/debris/debris_iridium33.asset b/data/assets/scene/solarsystem/planets/earth/satellites/debris/debris_iridium33.asset index d31e5d3cc6..bc251261fe 100644 --- a/data/assets/scene/solarsystem/planets/earth/satellites/debris/debris_iridium33.asset +++ b/data/assets/scene/solarsystem/planets/earth/satellites/debris/debris_iridium33.asset @@ -2,13 +2,13 @@ local transforms = asset.require("scene/solarsystem/planets/earth/transforms") -local omm = asset.syncedResource({ +local omm = asset.resource({ Name = "Satellite OMM Data (Iridium 33 Debris)", Type = "UrlSynchronization", Identifier = "satellite_omm_data_iridium-33-debris", Url = "https://www.celestrak.com/NORAD/elements/gp.php?GROUP=iridium-33-debris&FORMAT=kvn", Filename = "iridium-33-debris.txt", - Override = true + SecondsUntilResync = openspace.time.secondsPerDay() }) @@ -21,7 +21,8 @@ local DebrisIridium = { Format = "OMM", SegmentQuality = 3, Color = { 0.8, 0.0, 0.3 }, - Fade = 1.5, + TrailFade = 5, + PointSizeExponent = 5.0, RenderBinMode = "PostDeferredTransparent" }, Tag = { "earth_satellites" }, @@ -46,7 +47,6 @@ asset.export(DebrisIridium) asset.meta = { Name = "Satellites Debris - Iridium 33 Debris", - Version = "1.0", Description = "Satellites asset for Debris - Iridium 33 Debris. Data from Celestrak", Author = "OpenSpace Team", URL = "https://celestrak.com/NORAD/elements/", diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/debris/debris_kosmos2251.asset b/data/assets/scene/solarsystem/planets/earth/satellites/debris/debris_kosmos2251.asset index ae4e4c7658..bcad916d9f 100644 --- a/data/assets/scene/solarsystem/planets/earth/satellites/debris/debris_kosmos2251.asset +++ b/data/assets/scene/solarsystem/planets/earth/satellites/debris/debris_kosmos2251.asset @@ -2,13 +2,13 @@ local transforms = asset.require("scene/solarsystem/planets/earth/transforms") -local omm = asset.syncedResource({ +local omm = asset.resource({ Name = "Satellite OMM Data (Kosmos 2251 Debris)", Type = "UrlSynchronization", Identifier = "satellite_omm_data_cosmos-2251-debris", Url = "https://www.celestrak.com/NORAD/elements/gp.php?GROUP=cosmos-2251-debris&FORMAT=kvn", Filename = "cosmos-2251-debris.txt", - Override = true + SecondsUntilResync = openspace.time.secondsPerDay() }) @@ -21,7 +21,7 @@ local DebrisCosmos = { Format = "OMM", SegmentQuality = 3, Color = { 0.66, 0.8, 0.5 }, - Fade = 1.5, + TrailFade = 1.5, RenderBinMode = "PostDeferredTransparent" }, Tag = { "earth_satellites" }, @@ -46,7 +46,6 @@ asset.export(DebrisCosmos) asset.meta = { Name = "Satellites Debris - Kosmos 2251 Debris", - Version = "1.0", Description = "Satellites asset for Debris - Kosmos 2251 Debris. Data from Celestrak", Author = "OpenSpace Team", URL = "https://celestrak.com/NORAD/elements/", diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/debris/volume/cartesian_volume.asset b/data/assets/scene/solarsystem/planets/earth/satellites/debris/volume/cartesian_volume.asset index 165c09f43e..a3cbf648f6 100644 --- a/data/assets/scene/solarsystem/planets/earth/satellites/debris/volume/cartesian_volume.asset +++ b/data/assets/scene/solarsystem/planets/earth/satellites/debris/volume/cartesian_volume.asset @@ -18,14 +18,14 @@ local DebrisVolumeCartesian = { }, Renderable = { Type = "RenderableTimeVaryingVolume", - SourceDirectory = asset.localResource("generatedCartesian"), - TransferFunction = asset.localResource("transferfunction.txt"), + SourceDirectory = asset.resource("generatedCartesian"), + TransferFunction = asset.resource("transferfunction.txt"), StepSize = 0.01, MinValue = 0, MaxValue = 1, GridType = "Cartesian", - SecondsBefore = 50 * 365 * 24 * 60 * 60, - SecondsAfter = 50 * 365 * 24 * 60 * 60 + SecondsBefore = 50 * openspace.time.secondsPerYear(), + SecondsAfter = 50 * openspace.time.secondsPerYear() }, GUI = { Name = "Debris Volume - Cartesian", @@ -48,7 +48,6 @@ asset.export(DebrisVolumeCartesian) asset.meta = { Name = "Satellites Debris - Volume Cartesian", - Version = "1.0", Description = "Satellites asset for Debris - Volume Cartesian. Example asset", Author = "OpenSpace Team", URL = "", diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/debris/volume/spherical_volume.asset b/data/assets/scene/solarsystem/planets/earth/satellites/debris/volume/spherical_volume.asset index fa9884a66b..64b6ddfb18 100644 --- a/data/assets/scene/solarsystem/planets/earth/satellites/debris/volume/spherical_volume.asset +++ b/data/assets/scene/solarsystem/planets/earth/satellites/debris/volume/spherical_volume.asset @@ -18,14 +18,14 @@ local DebrisVolumeSpherical = { }, Renderable = { Type = "RenderableTimeVaryingVolume", - SourceDirectory = asset.localResource("generated"), - TransferFunction = asset.localResource("transferfunction.txt"), + SourceDirectory = asset.resource("generated"), + TransferFunction = asset.resource("transferfunction.txt"), StepSize = 0.01, MinValue = 0, MaxValue = 1, GridType = "Spherical", - SecondsBefore = 50 * 365 * 24 * 60 * 60, - SecondsAfter = 50 * 365 * 24 * 60 * 60 + SecondsBefore = 50 * openspace.time.secondsPerYear(), + SecondsAfter = 50 * openspace.time.secondsPerYear() }, GUI = { Name = "DebrisVolume - Spherical", @@ -48,7 +48,6 @@ asset.export(DebrisVolumeSpherical) asset.meta = { Name = "Satellites Debris - Volume Spherical", - Version = "1.0", Description = "Satellites asset for Debris - Volume Spherical. Example asset", Author = "OpenSpace Team", URL = "", diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/misc/active.asset b/data/assets/scene/solarsystem/planets/earth/satellites/misc/active.asset index eef6c9b559..e13d13d328 100644 --- a/data/assets/scene/solarsystem/planets/earth/satellites/misc/active.asset +++ b/data/assets/scene/solarsystem/planets/earth/satellites/misc/active.asset @@ -2,13 +2,13 @@ local transforms = asset.require("scene/solarsystem/planets/earth/transforms") -local omm = asset.syncedResource({ +local omm = asset.resource({ Name = "Satellite OMM Data (Active)", Type = "UrlSynchronization", Identifier = "satellite_omm_data_active", Url = "https://www.celestrak.com/NORAD/elements/gp.php?GROUP=active&FORMAT=kvn", Filename = "active.txt", - Override = true + SecondsUntilResync = openspace.time.secondsPerDay() }) @@ -21,7 +21,8 @@ local ActiveSatellites = { Format = "OMM", SegmentQuality = 3, Color = { 0.45, 0.25, 0.45 }, - Fade = 1.5, + TrailFade = 5, + PointSizeExponent = 5.0, RenderBinMode = "PostDeferredTransparent" }, Tag = { "earth_satellites" }, @@ -47,7 +48,6 @@ asset.export(ActiveSatellites) asset.meta = { Name = "Satellites Active", - Version = "1.0", Description = "Satellites that employ active communication. Data from Celestrak", Author = "OpenSpace Team", URL = "https://celestrak.com/NORAD/elements/", diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/misc/brightest.asset b/data/assets/scene/solarsystem/planets/earth/satellites/misc/brightest.asset index 79bb4e7dab..c02b1d4735 100644 --- a/data/assets/scene/solarsystem/planets/earth/satellites/misc/brightest.asset +++ b/data/assets/scene/solarsystem/planets/earth/satellites/misc/brightest.asset @@ -2,13 +2,13 @@ local transforms = asset.require("scene/solarsystem/planets/earth/transforms") -local omm = asset.syncedResource({ +local omm = asset.resource({ Name = "Satellite OMM Data (100 Brightest)", Type = "UrlSynchronization", Identifier = "satellite_omm_data_visual", Url = "https://www.celestrak.com/NORAD/elements/gp.php?GROUP=visual&FORMAT=kvn", Filename = "visual.txt", - Override = true + SecondsUntilResync = openspace.time.secondsPerDay() }) @@ -21,7 +21,8 @@ local BrightestSatellites = { Format = "OMM", SegmentQuality = 3, Color = { 0.55, 0.25, 0.65 }, - Fade = 1.5, + TrailFade = 15, + PointSizeExponent = 5.0, RenderBinMode = "PostDeferredTransparent" }, Tag = { "earth_satellites" }, @@ -48,7 +49,6 @@ asset.export(BrightestSatellites) asset.meta = { Name = "Satellites 100 Brightest", - Version = "1.0", Description = "Satellites asset for 100 Brightest. Data from Celestrak", Author = "OpenSpace Team", URL = "https://celestrak.com/NORAD/elements/", diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/misc/cubesats.asset b/data/assets/scene/solarsystem/planets/earth/satellites/misc/cubesats.asset index c1a86fe27f..7188ae6c79 100644 --- a/data/assets/scene/solarsystem/planets/earth/satellites/misc/cubesats.asset +++ b/data/assets/scene/solarsystem/planets/earth/satellites/misc/cubesats.asset @@ -2,13 +2,13 @@ local transforms = asset.require("scene/solarsystem/planets/earth/transforms") -local omm = asset.syncedResource({ +local omm = asset.resource({ Name = "Satellite OMM Data (CubeSat)", Type = "UrlSynchronization", Identifier = "satellite_omm_data_cubesat", Url = "https://www.celestrak.com/NORAD/elements/gp.php?GROUP=cubesat&FORMAT=kvn", Filename = "cubesat.txt", - Override = true + SecondsUntilResync = openspace.time.secondsPerDay() }) @@ -21,7 +21,8 @@ local Cubesats = { Format = "OMM", SegmentQuality = 3, Color = { 0.75, 0.75, 0.35 }, - Fade = 1.5, + TrailFade = 15, + PointSizeExponent = 5.0, RenderBinMode = "PostDeferredTransparent" }, Tag = { "earth_satellites" }, @@ -46,7 +47,6 @@ asset.export(Cubesats) asset.meta = { Name = "Satellites CubeSat", - Version = "1.0", Description = "Satellites asset for CubeSat. Data from Celestrak", Author = "OpenSpace Team", URL = "https://celestrak.com/NORAD/elements/", diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/misc/hubble_trail.asset b/data/assets/scene/solarsystem/planets/earth/satellites/misc/hubble_trail.asset index 881f564cd7..b29818479d 100644 --- a/data/assets/scene/solarsystem/planets/earth/satellites/misc/hubble_trail.asset +++ b/data/assets/scene/solarsystem/planets/earth/satellites/misc/hubble_trail.asset @@ -1,14 +1,15 @@ local transforms = asset.require("scene/solarsystem/planets/earth/transforms") +local coreKernels = asset.require("spice/core") -local omm = asset.syncedResource({ +local omm = asset.resource({ Name = "Satellite OMM Data (Hubble)", Type = "UrlSynchronization", Identifier = "satellite_omm_data_hst", Url = "https://www.celestrak.com/NORAD/elements/gp.php?CATNR=20580&FORMAT=kvn", Filename = "hst.txt", - Override = true + SecondsUntilResync = openspace.time.secondsPerDay() }) @@ -24,8 +25,8 @@ local HubblePosition = { }, Rotation = { Type = "SpiceRotation", - SourceFrame = "GALACTIC", - DestinationFrame = "J2000", + SourceFrame = coreKernels.Frame.Galactic, + DestinationFrame = coreKernels.Frame.J2000 } }, Tag = { "earth_satellite", "hubble" }, @@ -80,7 +81,6 @@ asset.export(HubbleTrail) asset.meta = { Name = "Hubble Space Telescope Trail", - Version = "1.0", Description = "Position and Trail for Hubble Space Telescope, trail from Celestrak", Author = "Dan Tell", URL = "www.calacademy.org", diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/misc/iss.asset b/data/assets/scene/solarsystem/planets/earth/satellites/misc/iss.asset index a775c89188..36efd6a593 100644 --- a/data/assets/scene/solarsystem/planets/earth/satellites/misc/iss.asset +++ b/data/assets/scene/solarsystem/planets/earth/satellites/misc/iss.asset @@ -1,22 +1,39 @@ local transforms = asset.require("scene/solarsystem/planets/earth/transforms") -local sun = asset.require("scene/solarsystem/sun/sun") +local sun = asset.require("scene/solarsystem/sun/transforms") +local coreKernels = asset.require("spice/core") -local models = asset.syncedResource({ +local models = asset.resource({ Name = "ISS Models", Type = "HttpSynchronization", Identifier = "iss_model", Version = 3 }) -local omm = asset.syncedResource({ +local kernels = asset.resource({ + Name = "ISS Kernels", + Type = "HttpSynchronization", + Identifier = "iss_kernels", + Version = 1 +}) + +local omm = asset.resource({ Name = "Satellite OMM Data (ISS)", Type = "UrlSynchronization", Identifier = "satellite_omm_data_iss", Url = "https://www.celestrak.com/NORAD/elements/gp.php?CATNR=25544&FORMAT=kvn", Filename = "ISS.txt", - Override = true + SecondsUntilResync = openspace.time.secondsPerDay() +}) + +local tle = asset.resource({ + Name = "Satellite TLE Data (ISS)", + Type = "UrlSynchronization", + Identifier = "satellite_tle_data_iss", + Url = "https://www.celestrak.com/NORAD/elements/gp.php?CATNR=25544&FORMAT=tle", + Filename = "ISS.txt", + SecondsUntilResync = openspace.time.secondsPerDay() }) @@ -30,11 +47,6 @@ local IssPosition = { Observer = transforms.EarthInertial.Identifier, File = omm .. "ISS.txt", Format = "OMM" - }, - Rotation = { - Type = "SpiceRotation", - SourceFrame = "GALACTIC", - DestinationFrame = "J2000", } }, Tag = { "earth_satellite", "ISS" }, @@ -50,11 +62,9 @@ local IssModel = { Parent = IssPosition.Identifier, Transform = { Rotation = { - Type = "FixedRotation", - Attached = "ISS", - XAxis = { 0.01, -1.0, 0.56 }, - XAxisOrthogonal = true, - YAxis = transforms.EarthInertial.Identifier + Type = "SpiceRotation", + SourceFrame = "ISS", + DestinationFrame = coreKernels.Frame.J2000 } }, Renderable = { @@ -101,8 +111,8 @@ local IssLabel = { Identifier = "IssLabel", Parent = IssPosition.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "ISS", FontSize = 70.0, Size = 3.4, @@ -130,23 +140,38 @@ local FocusIss = { ]], Documentation = "Refocuses the camera on the ISS", GuiPath = "/Solar System/Earth", - isLocal = false + IsLocal = false } +local kernelFile asset.onInitialize(function() + -- In order to get the orientation of the ISS correctly, we need to have its position + -- available as a SPICE object. We don't want to just convert the TLE file once as we + -- want it to update with every startup. + -- For this reason we convert the TLE file into a type 10 SPICE kernel and since we are + -- already doing that, we can also get a more accurate position for free, too + local translation, kernel = openspace.space.tleToSpiceTranslation(tle .. "ISS.txt") + kernelFile = kernel -- Store the path for the deinitialize function + openspace.spice.loadKernel(kernelFile) + + openspace.spice.loadKernel(kernels .. "iss.tf") + local i = openspace.space.readKeplerFile(omm .. "ISS.txt", "OMM") IssTrail.Renderable.Period = i[1].Period / (60 * 60 * 24) + openspace.addSceneGraphNode(IssPosition) openspace.addSceneGraphNode(IssModel) openspace.addSceneGraphNode(IssTrail) - openspace.setPropertyValueSingle("Scene.ISS.Rotation.yAxisInvertObject", true) openspace.action.registerAction(FocusIss) end) asset.onDeinitialize(function() + openspace.spice.unloadKernel(kernels .. "iss.tf") + openspace.spice.unloadKernel(kernelFile) + openspace.action.removeAction(FocusIss) openspace.removeSceneGraphNode(IssTrail) @@ -162,7 +187,6 @@ asset.export(IssPosition) asset.meta = { Name = "ISS", - Version = "2.0", Description = [[Model and Trail for ISS. Model from NASA 3D models, trail from Celestrak.]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/misc/military.asset b/data/assets/scene/solarsystem/planets/earth/satellites/misc/military.asset index 72a6ad19d4..1098be5793 100644 --- a/data/assets/scene/solarsystem/planets/earth/satellites/misc/military.asset +++ b/data/assets/scene/solarsystem/planets/earth/satellites/misc/military.asset @@ -2,13 +2,13 @@ local transforms = asset.require("scene/solarsystem/planets/earth/transforms") -local omm = asset.syncedResource({ +local omm = asset.resource({ Name = "Satellite OMM Data (Military)", Type = "UrlSynchronization", Identifier = "satellite_omm_data_military", Url = "https://www.celestrak.com/NORAD/elements/gp.php?GROUP=military&FORMAT=kvn", Filename = "military.txt", - Override = true + SecondsUntilResync = openspace.time.secondsPerDay() }) @@ -21,7 +21,8 @@ local MilitarySatellites = { Format = "OMM", SegmentQuality = 3, Color = { 0.75, 0.75, 0.35 }, - Fade = 1.5, + TrailFade = 20, + PointSizeExponent = 5.0, RenderBinMode = "PostDeferredTransparent" }, Tag = { "earth_satellites" }, @@ -46,7 +47,6 @@ asset.export(MilitarySatellites) asset.meta = { Name = "Satellites Military", - Version = "1.0", Description = "Satellites asset for Military. Data from Celestrak", Author = "OpenSpace Team", URL = "https://celestrak.com/NORAD/elements/", diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/misc/other.asset b/data/assets/scene/solarsystem/planets/earth/satellites/misc/other.asset index 4ed0818184..64ea9f90d9 100644 --- a/data/assets/scene/solarsystem/planets/earth/satellites/misc/other.asset +++ b/data/assets/scene/solarsystem/planets/earth/satellites/misc/other.asset @@ -2,13 +2,13 @@ local transforms = asset.require("scene/solarsystem/planets/earth/transforms") -local omm = asset.syncedResource({ +local omm = asset.resource({ Name = "Satellite OMM Data (Other)", Type = "UrlSynchronization", Identifier = "satellite_omm_data_other", Url = "https://www.celestrak.com/NORAD/elements/gp.php?GROUP=other&FORMAT=kvn", Filename = "other.txt", - Override = true + SecondsUntilResync = openspace.time.secondsPerDay() }) @@ -21,7 +21,8 @@ local OtherSatellites = { Format = "OMM", SegmentQuality = 3, Color = { 0.75, 0.75, 0.35 }, - Fade = 1.5, + TrailFade = 15, + PointSizeExponent = 5.0, RenderBinMode = "PostDeferredTransparent" }, Tag = { "earth_satellites" }, @@ -46,7 +47,6 @@ asset.export(OtherSatellites) asset.meta = { Name = "Satellites Other", - Version = "1.0", Description = "Satellites asset for Other. Data from Celestrak", Author = "OpenSpace Team", URL = "https://celestrak.com/NORAD/elements/", diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/misc/radar.asset b/data/assets/scene/solarsystem/planets/earth/satellites/misc/radar.asset index 8dc45113ad..75d2402b85 100644 --- a/data/assets/scene/solarsystem/planets/earth/satellites/misc/radar.asset +++ b/data/assets/scene/solarsystem/planets/earth/satellites/misc/radar.asset @@ -2,13 +2,13 @@ local transforms = asset.require("scene/solarsystem/planets/earth/transforms") -local omm = asset.syncedResource({ +local omm = asset.resource({ Name = "Satellite OMM Data (Radar Calibration)", Type = "UrlSynchronization", Identifier = "satellite_omm_data_radar", Url = "https://www.celestrak.com/NORAD/elements/gp.php?GROUP=radar&FORMAT=kvn", Filename = "radar.txt", - Override = true + SecondsUntilResync = openspace.time.secondsPerDay() }) @@ -21,7 +21,8 @@ local RadarSatellites = { Format = "OMM", SegmentQuality = 3, Color = { 0.75, 0.75, 0.35 }, - Fade = 1.5, + TrailFade = 15, + PointSizeExponent = 5.0, RenderBinMode = "PostDeferredTransparent" }, Tag = { "earth_satellites" }, @@ -46,7 +47,6 @@ asset.export(RadarSatellites) asset.meta = { Name = "Satellites Radar Calibration", - Version = "1.0", Description = "Satellites asset for Radar Calibration. Data from Celestrak", Author = "OpenSpace Team", URL = "https://celestrak.com/NORAD/elements/", diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/misc/spacestations.asset b/data/assets/scene/solarsystem/planets/earth/satellites/misc/spacestations.asset index dbc992f377..ad7ef07723 100644 --- a/data/assets/scene/solarsystem/planets/earth/satellites/misc/spacestations.asset +++ b/data/assets/scene/solarsystem/planets/earth/satellites/misc/spacestations.asset @@ -2,13 +2,13 @@ local transforms = asset.require("scene/solarsystem/planets/earth/transforms") -local omm = asset.syncedResource({ +local omm = asset.resource({ Name = "Satellite OMM Data (SpaceStations)", Type = "UrlSynchronization", Identifier = "satellite_omm_data_stations", Url = "https://www.celestrak.com/NORAD/elements/gp.php?GROUP=stations&FORMAT=kvn", Filename = "stations.txt", - Override = true + SecondsUntilResync = openspace.time.secondsPerDay() }) @@ -21,7 +21,8 @@ local SpaceStations = { Format = "OMM", SegmentQuality = 3, Color = { 0.9, 0.1, 0.0 }, - Fade = 1.5, + TrailFade = 20, + PointSizeExponent = 5.0, RenderBinMode = "PostDeferredTransparent" }, Tag = { "earth_satellites" }, @@ -49,7 +50,6 @@ asset.export(SpaceStations) asset.meta = { Name = "Satellites SpaceStations", - Version = "1.0", Description = "Satellites asset for SpaceStations. Data from Celestrak", Author = "OpenSpace Team", URL = "https://celestrak.com/NORAD/elements/", diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/misc/tiangong.asset b/data/assets/scene/solarsystem/planets/earth/satellites/misc/tiangong.asset new file mode 100644 index 0000000000..5f421a2df9 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/satellites/misc/tiangong.asset @@ -0,0 +1,152 @@ +local transforms = asset.require("scene/solarsystem/planets/earth/transforms") +local sun = asset.require("scene/solarsystem/sun/transforms") +local coreKernels = asset.require("spice/core") + + +local models = asset.resource({ + Name = "Tiangong Models", + Type = "HttpSynchronization", + Identifier = "tiangong_model", + Version = 1 +}) + +local omm = asset.resource({ + Name = "Satellite OMM Data (Tiangong)", + Type = "UrlSynchronization", + Identifier = "satellite_omm_data_tiangong", + Url = "https://www.celestrak.com/NORAD/elements/gp.php?CATNR=48274&FORMAT=kvn", + Filename = "Tiangong.txt", + SecondsUntilResync = openspace.time.secondsPerDay() +}) + + +local TiangongPosition = { + Identifier = "TiangongPosition", + Parent = transforms.EarthInertial.Identifier, + BoundingSphere = 27.8, -- half the width + Transform = { + Translation = { + Type = "GPTranslation", + Observer = transforms.EarthInertial.Identifier, + File = omm .. "Tiangong.txt", + Format = "OMM" + }, + Rotation = { + Type = "SpiceRotation", + SourceFrame = coreKernels.Frame.Galactic, + DestinationFrame = coreKernels.Frame.J2000 + } + }, + Tag = { "earth_satellite" }, + GUI = { + Name = "Tiangong Position", + Path = "/Solar System/Planets/Earth/Satellites/Tiangong", + Hidden = true + } +} + +local TiangongModel = { + Identifier = "Tiangong", + Parent = TiangongPosition.Identifier, + Transform = { + Rotation = { + Type = "FixedRotation", + Attached = "Tiangong", + XAxis = { 0.01, -0.09, 1.0 }, + XAxisOrthogonal = true, + YAxis = transforms.EarthInertial.Identifier + } + }, + Renderable = { + Type = "RenderableModel", + GeometryFile = asset.resource(models .. "tiangong.glb"), + LightSources = { + sun.LightSource + }, + PerformShading = true + }, + Tag = { "earth_satellite" }, + GUI = { + Name = "Tiangong", + Path = "/Solar System/Planets/Earth/Satellites/Tiangong" + } +} + +local TiangongTrail = { + Identifier = "Tiangong_trail", + Parent = transforms.EarthInertial.Identifier, + Renderable = { + Type = "RenderableTrailOrbit", + Translation = { + Type = "GPTranslation", + Observer = transforms.EarthInertial.Identifier, + File = omm .. "Tiangong.txt", + Format = "OMM" + }, + RenderBinMode = "PostDeferredTransparent", + Color = { 0.9, 0.28, 0.33 }, + Fade = 1.5, + Resolution = 320 + }, + Tag = { "earth_satellite" }, + GUI = { + Name = "Tiangong Trail", + Path = "/Solar System/Planets/Earth/Satellites/Tiangong" + } +} + +-- @TODO (emmbr, 2021-05-27) add to scene when label rendering issues have been fixed +local TiangongLabel = { + Identifier = "TiangongLabel", + Parent = TiangongPosition.Identifier, + Renderable = { + Type = "RenderableLabel", + Enabled = false, + Text = "Tiangong", + FontSize = 70.0, + Size = 3.4, + MinMaxSize = { 1, 100 }, + OrientationOption = "Camera View Direction", + BlendMode = "Additive", + EnableFading = true, + FadeDistances = { 0.15, 15.0 }, + FadeWidths = { 1.0, 25.0 } + }, + Tag = { "solarsystem_labels" }, + GUI = { + Name = "Tiangong Label", + Path = "/Solar System/Planets/Earth/Satellites" + } +} + + +asset.onInitialize(function() + local i = openspace.space.readKeplerFile(omm .. "Tiangong.txt", "OMM") + TiangongTrail.Renderable.Period = i[1].Period / (60 * 60 * 24) + + openspace.addSceneGraphNode(TiangongPosition) + openspace.addSceneGraphNode(TiangongModel) + openspace.addSceneGraphNode(TiangongTrail) + + openspace.setPropertyValueSingle("Scene.Tiangong.Rotation.yAxisInvertObject", true) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(TiangongTrail) + openspace.removeSceneGraphNode(TiangongModel) + openspace.removeSceneGraphNode(TiangongPosition) +end) + +asset.export(TiangongTrail) +asset.export(TiangongModel) +asset.export(TiangongPosition) + + + +asset.meta = { + Name = "Tiangong", + Description = [[Model and Trail for Tiangong. Model from Turbosquid, trail from + Celestrak.]], + Author = "OpenSpace Team", + URL = "https://celestrak.com/" +} diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/misc/tle-new.asset b/data/assets/scene/solarsystem/planets/earth/satellites/misc/tle-new.asset index 98b734ffa1..cd7537f716 100644 --- a/data/assets/scene/solarsystem/planets/earth/satellites/misc/tle-new.asset +++ b/data/assets/scene/solarsystem/planets/earth/satellites/misc/tle-new.asset @@ -2,13 +2,13 @@ local transforms = asset.require("scene/solarsystem/planets/earth/transforms") -local omm = asset.syncedResource({ +local omm = asset.resource({ Name = "Satellite OMM Data (Last 30 Days)", Type = "UrlSynchronization", Identifier = "satellite_omm_data_tle-new", Url = "https://www.celestrak.com/NORAD/elements/gp.php?GROUP=last-30-days&FORMAT=kvn", Filename = "tle-new.txt", - Override = true + SecondsUntilResync = openspace.time.secondsPerDay() }) @@ -21,7 +21,8 @@ local Last30DaysSatellites = { Format = "OMM", SegmentQuality = 3, Color = { 0.65, 0.25, 0.45 }, - Fade = 1.5, + TrailFade = 15, + PointSizeExponent = 5.0, RenderBinMode = "PostDeferredTransparent" }, Tag = { "earth_satellites" }, @@ -47,7 +48,6 @@ asset.export(Last30DaysSatellites) asset.meta = { Name = "Satellites Last 30 Days", - Version = "1.0", Description = "Satellites asset for Last 30 Days. Data from Celestrak", Author = "OpenSpace Team", URL = "https://celestrak.com/NORAD/elements/", diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/navigation/beidou.asset b/data/assets/scene/solarsystem/planets/earth/satellites/navigation/beidou.asset index a49d2358e7..dfd9306d03 100644 --- a/data/assets/scene/solarsystem/planets/earth/satellites/navigation/beidou.asset +++ b/data/assets/scene/solarsystem/planets/earth/satellites/navigation/beidou.asset @@ -2,13 +2,13 @@ local transforms = asset.require("scene/solarsystem/planets/earth/transforms") -local omm = asset.syncedResource({ +local omm = asset.resource({ Name = "Satellite OMM Data (Beidou)", Type = "UrlSynchronization", Identifier = "satellite_omm_data_beidou", Url = "https://www.celestrak.com/NORAD/elements/gp.php?GROUP=beidou&FORMAT=kvn", Filename = "beidou.txt", - Override = true + SecondsUntilResync = openspace.time.secondsPerDay() }) @@ -21,7 +21,8 @@ local BeidouSatellites = { Format = "OMM", SegmentQuality = 3, Color = { 0.75, 0.75, 0.35 }, - Fade = 1.5, + TrailFade = 15, + PointSizeExponent = 5.0, RenderBinMode = "PostDeferredTransparent" }, Tag = { "earth_satellites" }, @@ -46,7 +47,6 @@ asset.export(BeidouSatellites) asset.meta = { Name = "Satellites Navigation Beidou", - Version = "1.0", Description = "Satellites asset for Navigation Beidou. Data from Celestrak", Author = "OpenSpace Team", URL = "https://celestrak.com/NORAD/elements/", diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/navigation/galileo.asset b/data/assets/scene/solarsystem/planets/earth/satellites/navigation/galileo.asset index baecdb65a8..4a905b2cdd 100644 --- a/data/assets/scene/solarsystem/planets/earth/satellites/navigation/galileo.asset +++ b/data/assets/scene/solarsystem/planets/earth/satellites/navigation/galileo.asset @@ -2,13 +2,13 @@ local transforms = asset.require("scene/solarsystem/planets/earth/transforms") -local omm = asset.syncedResource({ +local omm = asset.resource({ Name = "Satellite OMM Data (Galileo)", Type = "UrlSynchronization", Identifier = "satellite_omm_data_galileo", Url = "https://www.celestrak.com/NORAD/elements/gp.php?GROUP=galileo&FORMAT=kvn", Filename = "galileo.txt", - Override = true + SecondsUntilResync = openspace.time.secondsPerDay() }) @@ -21,7 +21,8 @@ local GalileoSatellites = { Format = "OMM", SegmentQuality = 3, Color = { 0.75, 0.75, 0.35 }, - Fade = 1.5, + TrailFade = 15, + PointSizeExponent = 5.0, RenderBinMode = "PostDeferredTransparent" }, Tag = { "earth_satellites" }, @@ -46,7 +47,6 @@ asset.export(GalileoSatellites) asset.meta = { Name = "Satellites Navigation Galileo", - Version = "1.0", Description = "Satellites asset for Navigation Galileo. Data from Celestrak", Author = "OpenSpace Team", URL = "https://celestrak.com/NORAD/elements/", diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/navigation/glosnass.asset b/data/assets/scene/solarsystem/planets/earth/satellites/navigation/glosnass.asset index f086cf4c6b..84b6de8b2f 100644 --- a/data/assets/scene/solarsystem/planets/earth/satellites/navigation/glosnass.asset +++ b/data/assets/scene/solarsystem/planets/earth/satellites/navigation/glosnass.asset @@ -2,13 +2,13 @@ local transforms = asset.require("scene/solarsystem/planets/earth/transforms") -local omm = asset.syncedResource({ +local omm = asset.resource({ Name = "Satellite OMM Data (Glosnass)", Type = "UrlSynchronization", Identifier = "satellite_omm_data_glo-ops", Url = "https://www.celestrak.com/NORAD/elements/gp.php?GROUP=glo-ops&FORMAT=kvn", Filename = "glo-ops.txt", - Override = true + SecondsUntilResync = openspace.time.secondsPerDay() }) @@ -21,7 +21,8 @@ local GlosnassSatellites = { Format = "OMM", SegmentQuality = 3, Color = { 0.75, 0.75, 0.35 }, - Fade = 1.5, + TrailFade = 15, + PointSizeExponent = 5.0, RenderBinMode = "PostDeferredTransparent" }, Tag = { "earth_satellites" }, @@ -46,7 +47,6 @@ asset.export(GlosnassSatellites) asset.meta = { Name = "Satellites Navigation Glosnass", - Version = "1.0", Description = "Satellites asset for Navigation Glosnass. Data from Celestrak", Author = "OpenSpace Team", URL = "https://celestrak.com/NORAD/elements/", diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/navigation/gps.asset b/data/assets/scene/solarsystem/planets/earth/satellites/navigation/gps.asset index 4a605cae9e..31b8578fb6 100644 --- a/data/assets/scene/solarsystem/planets/earth/satellites/navigation/gps.asset +++ b/data/assets/scene/solarsystem/planets/earth/satellites/navigation/gps.asset @@ -2,13 +2,13 @@ local transforms = asset.require("scene/solarsystem/planets/earth/transforms") -local omm = asset.syncedResource({ +local omm = asset.resource({ Name = "Satellite OMM Data (GPS)", Type = "UrlSynchronization", Identifier = "satellite_omm_data_gps-ops", Url = "https://www.celestrak.com/NORAD/elements/gp.php?GROUP=gps-ops&FORMAT=kvn", Filename = "gps-ops.txt", - Override = true + SecondsUntilResync = openspace.time.secondsPerDay() }) @@ -21,7 +21,8 @@ local GpsSatellites = { Format = "OMM", SegmentQuality = 3, Color = { 0.9, 0.5, 0.0 }, - Fade = 1.5, + TrailFade = 15, + PointSizeExponent = 5.5, RenderBinMode = "PostDeferredTransparent" }, Tag = { "earth_satellites" }, @@ -47,7 +48,6 @@ asset.export(GpsSatellites) asset.meta = { Name = "Satellites Navigation GPS", - Version = "1.0", Description = "Satellites asset for Navigation GPS. Data from Celestrak", Author = "OpenSpace Team", URL = "https://celestrak.com/NORAD/elements/", diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/navigation/musson.asset b/data/assets/scene/solarsystem/planets/earth/satellites/navigation/musson.asset index 5bf78083f5..6b688a3585 100644 --- a/data/assets/scene/solarsystem/planets/earth/satellites/navigation/musson.asset +++ b/data/assets/scene/solarsystem/planets/earth/satellites/navigation/musson.asset @@ -2,13 +2,13 @@ local transforms = asset.require("scene/solarsystem/planets/earth/transforms") -local omm = asset.syncedResource({ +local omm = asset.resource({ Name = "Satellite OMM Data (Russian LEO Navigation)", Type = "UrlSynchronization", Identifier = "satellite_omm_data_musson", Url = "https://www.celestrak.com/NORAD/elements/gp.php?GROUP=musson&FORMAT=kvn", Filename = "musson.txt", - Override = true + SecondsUntilResync = openspace.time.secondsPerDay() }) @@ -21,7 +21,8 @@ local MussonSatellites = { Format = "OMM", SegmentQuality = 3, Color = { 0.75, 0.75, 0.35 }, - Fade = 1.5, + TrailFade = 15, + PointSizeExponent = 5.0, RenderBinMode = "PostDeferredTransparent" }, Tag = { "earth_satellites" }, @@ -46,7 +47,6 @@ asset.export(MussonSatellites) asset.meta = { Name = "Satellites Navigation Russian LEO Navigation", - Version = "1.0", Description = [[Satellites asset for Navigation Russian LEO Navigation. Data from Celestrak]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/navigation/nnss.asset b/data/assets/scene/solarsystem/planets/earth/satellites/navigation/nnss.asset index a6755ef248..0457dafb50 100644 --- a/data/assets/scene/solarsystem/planets/earth/satellites/navigation/nnss.asset +++ b/data/assets/scene/solarsystem/planets/earth/satellites/navigation/nnss.asset @@ -2,13 +2,13 @@ local transforms = asset.require("scene/solarsystem/planets/earth/transforms") -local omm = asset.syncedResource({ +local omm = asset.resource({ Name = "Satellite OMM Data (Navy Navigation Satellite System)", Type = "UrlSynchronization", Identifier = "satellite_omm_data_nnss", Url = "https://www.celestrak.com/NORAD/elements/gp.php?GROUP=nnss&FORMAT=kvn", Filename = "nnss.txt", - Override = true + SecondsUntilResync = openspace.time.secondsPerDay() }) @@ -21,7 +21,8 @@ local NavyNavigationSatellites = { Format = "OMM", SegmentQuality = 3, Color = { 0.75, 0.75, 0.35 }, - Fade = 1.5, + TrailFade = 17, + PointSizeExponent = 5.0, RenderBinMode = "PostDeferredTransparent" }, Tag = { "earth_satellites" }, @@ -47,7 +48,6 @@ asset.export(NavyNavigationSatellites) asset.meta = { Name = "Satellites Navigation Navy Navigation Satellite System", - Version = "1.0", Description = [[Satellites asset for Navigation Navy Navigation Satellite System. Data from Celestrak]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/navigation/sbas.asset b/data/assets/scene/solarsystem/planets/earth/satellites/navigation/sbas.asset index 9f46740e3b..a092adf1d6 100644 --- a/data/assets/scene/solarsystem/planets/earth/satellites/navigation/sbas.asset +++ b/data/assets/scene/solarsystem/planets/earth/satellites/navigation/sbas.asset @@ -2,13 +2,13 @@ local transforms = asset.require("scene/solarsystem/planets/earth/transforms") -local omm = asset.syncedResource({ +local omm = asset.resource({ Name = "Satellite OMM Data (Satellite Based Augmentation System)", Type = "UrlSynchronization", Identifier = "satellite_omm_data_sbas", Url = "https://www.celestrak.com/NORAD/elements/gp.php?GROUP=sbas&FORMAT=kvn", Filename = "sbas.txt", - Override = true + SecondsUntilResync = openspace.time.secondsPerDay() }) @@ -21,7 +21,8 @@ local SatelliteBasedAugmentationSatellites = { Format = "OMM", SegmentQuality = 3, Color = { 0.75, 0.75, 0.35 }, - Fade = 1.5, + TrailFade = 15, + PointSizeExponent = 5.0, RenderBinMode = "PostDeferredTransparent" }, Tag = { "earth_satellites" }, @@ -46,7 +47,6 @@ asset.export(SatelliteBasedAugmentationSatellites) asset.meta = { Name = "Satellites Navigation Satellite Based Augmentation System", - Version = "1.0", Description = [[Satellites asset for Navigation Satellite Based Augmentation System. Data from Celestrak]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/satellites.asset b/data/assets/scene/solarsystem/planets/earth/satellites/satellites.asset index 80936a7dc3..dfe6da513e 100644 --- a/data/assets/scene/solarsystem/planets/earth/satellites/satellites.asset +++ b/data/assets/scene/solarsystem/planets/earth/satellites/satellites.asset @@ -4,7 +4,6 @@ asset.require("./satellites_interesting") asset.meta = { Name = "Satellites", - Version = "1.0", Description = "Default Earth Satellites. This file is loads satellites_interesting", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/satellites_all.asset b/data/assets/scene/solarsystem/planets/earth/satellites/satellites_all.asset index 14f95c7e07..e74b84d826 100644 --- a/data/assets/scene/solarsystem/planets/earth/satellites/satellites_all.asset +++ b/data/assets/scene/solarsystem/planets/earth/satellites/satellites_all.asset @@ -11,7 +11,6 @@ asset.require("./satellites_weather") asset.meta = { Name = "Satellites All", - Version = "1.0", Description = "Meta asset for all satellites of Earth. Containing other meta assets", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/satellites_communications.asset b/data/assets/scene/solarsystem/planets/earth/satellites/satellites_communications.asset index 29b0bbb422..fdb4badd02 100644 --- a/data/assets/scene/solarsystem/planets/earth/satellites/satellites_communications.asset +++ b/data/assets/scene/solarsystem/planets/earth/satellites/satellites_communications.asset @@ -17,7 +17,6 @@ asset.require("./communications/starlink") asset.meta = { Name = "Satellites Communications", - Version = "1.0", Description = [[Meta asset for communications satellites of Earth. Containing groups: geostationary, intelsat, ses, iridium, iridium_next, orbcomm, globalstar, amateur, experimental, other_comm, gorizont, raduga and molniya]], diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/satellites_debris.asset b/data/assets/scene/solarsystem/planets/earth/satellites/satellites_debris.asset index cda85b9fb8..99881182f7 100644 --- a/data/assets/scene/solarsystem/planets/earth/satellites/satellites_debris.asset +++ b/data/assets/scene/solarsystem/planets/earth/satellites/satellites_debris.asset @@ -8,7 +8,6 @@ asset.require("./debris/debris_kosmos2251") asset.meta = { Name = "Satellites Debris", - Version = "1.0", Description = [[Meta asset for space debris of Earth. Containing groups: debris_asat, debris_breezem, debris_fengyun, debris_iridium33, and debris_kosmos2251]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/satellites_interesting.asset b/data/assets/scene/solarsystem/planets/earth/satellites/satellites_interesting.asset index 2659720bba..acf9a0133d 100644 --- a/data/assets/scene/solarsystem/planets/earth/satellites/satellites_interesting.asset +++ b/data/assets/scene/solarsystem/planets/earth/satellites/satellites_interesting.asset @@ -3,13 +3,13 @@ asset.require("./communications/geostationary") asset.require("./navigation/gps") asset.require("./misc/spacestations") asset.require("./misc/iss") +asset.require("./misc/tiangong") asset.require("./misc/tle-new") asset.meta = { Name = "Satellites Interesting", - Version = "1.0", Description = [[Meta asset for interesting satellites of Earth. Containing groups: brightest, geostationary, gps, spacestations, iss, and tle-new]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/satellites_misc.asset b/data/assets/scene/solarsystem/planets/earth/satellites/satellites_misc.asset index 6c5c67dc35..23a868b0c6 100644 --- a/data/assets/scene/solarsystem/planets/earth/satellites/satellites_misc.asset +++ b/data/assets/scene/solarsystem/planets/earth/satellites/satellites_misc.asset @@ -8,7 +8,6 @@ asset.require("./misc/active") asset.meta = { Name = "Satellites Misc", - Version = "1.0", Description = [[Meta asset for misc satellites of Earth. Containing groups: military, radar, cubesats, and other]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/satellites_navigation.asset b/data/assets/scene/solarsystem/planets/earth/satellites/satellites_navigation.asset index 10fd2645d8..303b19693f 100644 --- a/data/assets/scene/solarsystem/planets/earth/satellites/satellites_navigation.asset +++ b/data/assets/scene/solarsystem/planets/earth/satellites/satellites_navigation.asset @@ -10,7 +10,6 @@ asset.require("./navigation/sbas") asset.meta = { Name = "Satellites Navigation", - Version = "1.0", Description = [[Meta asset for navigation satellites of Earth. Containing groups: beidou, galileo, glosnass, gps, musson, nnss, and sbas]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/satellites_science.asset b/data/assets/scene/solarsystem/planets/earth/satellites/satellites_science.asset index f23b15e9e5..ff0979e95c 100644 --- a/data/assets/scene/solarsystem/planets/earth/satellites/satellites_science.asset +++ b/data/assets/scene/solarsystem/planets/earth/satellites/satellites_science.asset @@ -7,7 +7,6 @@ asset.require("./science/education") asset.meta = { Name = "Satellites Science", - Version = "1.0", Description = [[Meta asset for science satellites of Earth. Containing groups: spaceearth, geodetic, engineering, and education]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/satellites_weather.asset b/data/assets/scene/solarsystem/planets/earth/satellites/satellites_weather.asset index c659024bc2..c4c6f1a1b0 100644 --- a/data/assets/scene/solarsystem/planets/earth/satellites/satellites_weather.asset +++ b/data/assets/scene/solarsystem/planets/earth/satellites/satellites_weather.asset @@ -13,7 +13,6 @@ asset.require("./weather/weather") asset.meta = { Name = "Satellites Weather", - Version = "1.0", Description = [[Meta asset for weather satellites of Earth. Containing groups: argos, dmc, earth_resources, geos, noaa, planet, sarsat, spire, tdrss, and weather]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/science/education.asset b/data/assets/scene/solarsystem/planets/earth/satellites/science/education.asset index a58e5a28de..d7567078de 100644 --- a/data/assets/scene/solarsystem/planets/earth/satellites/science/education.asset +++ b/data/assets/scene/solarsystem/planets/earth/satellites/science/education.asset @@ -2,13 +2,13 @@ local transforms = asset.require("scene/solarsystem/planets/earth/transforms") -local omm = asset.syncedResource({ +local omm = asset.resource({ Name = "Satellite OMM Data (Education)", Type = "UrlSynchronization", Identifier = "satellite_omm_data_education", Url = "https://www.celestrak.com/NORAD/elements/gp.php?GROUP=education&FORMAT=kvn", Filename = "education.txt", - Override = true + SecondsUntilResync = openspace.time.secondsPerDay() }) @@ -21,7 +21,8 @@ local EducationSatellites = { Format = "OMM", SegmentQuality = 3, Color = { 0.75, 0.75, 0.35 }, - Fade = 1.5, + TrailFade = 20, + PointSizeExponent = 5.0, RenderBinMode = "PostDeferredTransparent" }, Tag = { "earth_satellites" }, @@ -46,7 +47,6 @@ asset.export(EducationSatellites) asset.meta = { Name = "Satellites Science Education", - Version = "1.0", Description = "Satellites asset for Science Education. Data from Celestrak", Author = "OpenSpace Team", URL = "https://celestrak.com/NORAD/elements/", diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/science/engineering.asset b/data/assets/scene/solarsystem/planets/earth/satellites/science/engineering.asset index 332735fc3a..5ee3c70cf3 100644 --- a/data/assets/scene/solarsystem/planets/earth/satellites/science/engineering.asset +++ b/data/assets/scene/solarsystem/planets/earth/satellites/science/engineering.asset @@ -2,13 +2,13 @@ local transforms = asset.require("scene/solarsystem/planets/earth/transforms") -local omm = asset.syncedResource({ +local omm = asset.resource({ Name = "Satellite OMM Data (Engineering)", Type = "UrlSynchronization", Identifier = "satellite_omm_data_engineering", Url = "https://www.celestrak.com/NORAD/elements/gp.php?GROUP=engineering&FORMAT=kvn", Filename = "engineering.txt", - Override = true + SecondsUntilResync = openspace.time.secondsPerDay() }) @@ -21,7 +21,8 @@ local EngineeringSatellites = { Format = "OMM", SegmentQuality = 3, Color = { 0.75, 0.75, 0.35 }, - Fade = 1.5, + TrailFade = 17, + PointSizeExponent = 5.0, RenderBinMode = "PostDeferredTransparent" }, Tag = { "earth_satellites" }, @@ -46,7 +47,6 @@ asset.export(EngineeringSatellites) asset.meta = { Name = "Satellites Science Engineering", - Version = "1.0", Description = "Satellites asset for Science Engineering. Data from Celestrak", Author = "OpenSpace Team", URL = "https://celestrak.com/NORAD/elements/", diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/science/geodetic.asset b/data/assets/scene/solarsystem/planets/earth/satellites/science/geodetic.asset index 809fe9f451..656c7d6330 100644 --- a/data/assets/scene/solarsystem/planets/earth/satellites/science/geodetic.asset +++ b/data/assets/scene/solarsystem/planets/earth/satellites/science/geodetic.asset @@ -2,13 +2,13 @@ local transforms = asset.require("scene/solarsystem/planets/earth/transforms") -local omm = asset.syncedResource({ +local omm = asset.resource({ Name = "Satellite OMM Data (Geodetic)", Type = "UrlSynchronization", Identifier = "satellite_omm_data_geodetic", Url = "https://www.celestrak.com/NORAD/elements/gp.php?GROUP=geodetic&FORMAT=kvn", Filename = "geodetic.txt", - Override = true + SecondsUntilResync = openspace.time.secondsPerDay() }) @@ -21,7 +21,8 @@ local GeodeticSatellites = { Format = "OMM", SegmentQuality = 3, Color = { 0.75, 0.75, 0.35 }, - Fade = 1.5, + TrailFade = 20, + PointSizeExponent = 5.0, RenderBinMode = "PostDeferredTransparent" }, Tag = { "earth_satellites" }, @@ -46,7 +47,6 @@ asset.export(GeodeticSatellites) asset.meta = { Name = "Satellites Science Geodect", - Version = "1.0", Description = "Satellites asset for Science Geodect. Data from Celestrak", Author = "OpenSpace Team", URL = "https://celestrak.com/NORAD/elements/", diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/science/spaceearth.asset b/data/assets/scene/solarsystem/planets/earth/satellites/science/spaceearth.asset index 2bdda691a2..8daedff803 100644 --- a/data/assets/scene/solarsystem/planets/earth/satellites/science/spaceearth.asset +++ b/data/assets/scene/solarsystem/planets/earth/satellites/science/spaceearth.asset @@ -2,13 +2,13 @@ local transforms = asset.require("scene/solarsystem/planets/earth/transforms") -local omm = asset.syncedResource({ +local omm = asset.resource({ Name = "Satellite OMM Data (Space & Earth Science)", Type = "UrlSynchronization", Identifier = "satellite_omm_data_science", Url = "https://www.celestrak.com/NORAD/elements/gp.php?GROUP=science&FORMAT=kvn", Filename = "science.txt", - Override = true + SecondsUntilResync = openspace.time.secondsPerDay() }) @@ -21,7 +21,8 @@ local ScienceSatellites = { Format = "OMM", SegmentQuality = 3, Color = { 0.75, 0.75, 0.35 }, - Fade = 1.5, + TrailFade = 17, + PointSizeExponent = 5.0, RenderBinMode = "PostDeferredTransparent" }, Tag = { "earth_satellites" }, @@ -46,7 +47,6 @@ asset.export(ScienceSatellites) asset.meta = { Name = "Satellites Science Space & Earth Science", - Version = "1.0", Description = "Satellites asset for Science Space & Earth Science. Data from Celestrak", Author = "OpenSpace Team", URL = "https://celestrak.com/NORAD/elements/", diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/weather/aqua.asset b/data/assets/scene/solarsystem/planets/earth/satellites/weather/aqua.asset index f82ed45578..d8a9f8e2f3 100644 --- a/data/assets/scene/solarsystem/planets/earth/satellites/weather/aqua.asset +++ b/data/assets/scene/solarsystem/planets/earth/satellites/weather/aqua.asset @@ -1,14 +1,15 @@ local transforms = asset.require("scene/solarsystem/planets/earth/transforms") +local coreKernels = asset.require("spice/core") -local omm = asset.syncedResource({ +local omm = asset.resource({ Name = "Satellite OMM Data (Aqua)", Type = "UrlSynchronization", Identifier = "satellite_omm_data_aqua", Url = "https://www.celestrak.com/NORAD/elements/gp.php?CATNR=27424&FORMAT=kvn", Filename = "Aqua.txt", - Override = true + SecondsUntilResync = openspace.time.secondsPerDay() }) @@ -25,8 +26,8 @@ local Aqua = { }, Rotation = { Type = "SpiceRotation", - SourceFrame = "GALACTIC", - DestinationFrame = "J2000", + SourceFrame = coreKernels.Frame.Galactic, + DestinationFrame = coreKernels.Frame.J2000 } }, Tag = { "earth_satellite", "Aqua" }, @@ -65,8 +66,8 @@ local AquaLabel = { Identifier = "AquaLabel", Parent = Aqua.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Aqua", FontSize = 70.0, Size = 4.0, @@ -109,7 +110,6 @@ asset.export(AquaLabel) asset.meta = { Name = "Aqua", - Version = "1.0", Description = [[Trail for Aqua. trail from Celestrak. Can be used in conjuntion with Aqua Modis (Temporal) layer for Earth]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/weather/argos.asset b/data/assets/scene/solarsystem/planets/earth/satellites/weather/argos.asset index a6586c21a8..fd2a4bab75 100644 --- a/data/assets/scene/solarsystem/planets/earth/satellites/weather/argos.asset +++ b/data/assets/scene/solarsystem/planets/earth/satellites/weather/argos.asset @@ -2,13 +2,13 @@ local transforms = asset.require("scene/solarsystem/planets/earth/transforms") -local omm = asset.syncedResource({ +local omm = asset.resource({ Name = "Satellite OMM Data (ARGOS)", Type = "UrlSynchronization", Identifier = "satellite_omm_data_argos", Url = "https://www.celestrak.com/NORAD/elements/gp.php?GROUP=argos&FORMAT=kvn", Filename = "argos.txt", - Override = true + SecondsUntilResync = openspace.time.secondsPerDay() }) @@ -21,7 +21,8 @@ local Argos = { Format = "OMM", SegmentQuality = 3, Color = { 0.75, 0.75, 0.35 }, - Fade = 1.5, + TrailFade = 17, + PointSizeExponent = 5.0, RenderBinMode = "PostDeferredTransparent" }, Tag = { "earth_satellites" }, @@ -46,7 +47,6 @@ asset.export(Argos) asset.meta = { Name = "Satellites Weather - ARGOS", - Version = "1.0", Description = "Satellites asset for Weather - ARGOS. Data from Celestrak", Author = "OpenSpace Team", URL = "https://celestrak.com/NORAD/elements/", diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/weather/dmc.asset b/data/assets/scene/solarsystem/planets/earth/satellites/weather/dmc.asset index 88a3f46446..051a79b8c1 100644 --- a/data/assets/scene/solarsystem/planets/earth/satellites/weather/dmc.asset +++ b/data/assets/scene/solarsystem/planets/earth/satellites/weather/dmc.asset @@ -2,13 +2,13 @@ local transforms = asset.require("scene/solarsystem/planets/earth/transforms") -local omm = asset.syncedResource({ +local omm = asset.resource({ Name = "Satellite OMM Data (Disaster Monitoring)", Type = "UrlSynchronization", Identifier = "satellite_omm_data_dmc", Url = "https://www.celestrak.com/NORAD/elements/gp.php?GROUP=dmc&FORMAT=kvn", Filename = "dmc.txt", - Override = true + SecondsUntilResync = openspace.time.secondsPerDay() }) @@ -21,7 +21,8 @@ local DisasterMonitoringConstellation = { Format = "OMM", SegmentQuality = 3, Color = { 0.75, 0.75, 0.35 }, - Fade = 1.5, + TrailFade = 17, + PointSizeExponent = 5.0, RenderBinMode = "PostDeferredTransparent" }, Tag = { "earth_satellites" }, @@ -46,7 +47,6 @@ asset.export(DisasterMonitoringConstellation) asset.meta = { Name = "Satellites Weather - Disaster Monitoring", - Version = "1.0", Description = "Satellites asset for Weather - Disaster Monitoring. Data from Celestrak", Author = "OpenSpace Team", URL = "https://celestrak.com/NORAD/elements/", diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/weather/earth_resources.asset b/data/assets/scene/solarsystem/planets/earth/satellites/weather/earth_resources.asset index ca16489efd..5d23acbdb8 100644 --- a/data/assets/scene/solarsystem/planets/earth/satellites/weather/earth_resources.asset +++ b/data/assets/scene/solarsystem/planets/earth/satellites/weather/earth_resources.asset @@ -2,13 +2,13 @@ local transforms = asset.require("scene/solarsystem/planets/earth/transforms") -local omm = asset.syncedResource({ +local omm = asset.resource({ Name = "Satellite OMM Data (Earth Resources)", Type = "UrlSynchronization", Identifier = "satellite_omm_data_resource", Url = "https://www.celestrak.com/NORAD/elements/gp.php?GROUP=resource&FORMAT=kvn", Filename = "resource.txt", - Override = true + SecondsUntilResync = openspace.time.secondsPerDay() }) @@ -21,7 +21,8 @@ local ResourceSatellites = { Format = "OMM", SegmentQuality = 3, Color = { 0.75, 0.75, 0.35 }, - Fade = 1.5, + TrailFade = 15, + PointSizeExponent = 5.0, RenderBinMode = "PostDeferredTransparent" }, Tag = { "earth_satellites" }, @@ -46,7 +47,6 @@ asset.export(ResourceSatellites) asset.meta = { Name = "Satellites Weather - Earth Resources", - Version = "1.0", Description = "Satellites asset for Weather - Earth Resources. Data from Celestrak", Author = "OpenSpace Team", URL = "https://celestrak.com/NORAD/elements/", diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/weather/goes.asset b/data/assets/scene/solarsystem/planets/earth/satellites/weather/goes.asset index 6e1e91de04..68d2a9dd4e 100644 --- a/data/assets/scene/solarsystem/planets/earth/satellites/weather/goes.asset +++ b/data/assets/scene/solarsystem/planets/earth/satellites/weather/goes.asset @@ -2,13 +2,13 @@ local transforms = asset.require("scene/solarsystem/planets/earth/transforms") -local omm = asset.syncedResource({ +local omm = asset.resource({ Name = "Satellite OMM Data (GOES)", Type = "UrlSynchronization", Identifier = "satellite_omm_data_goes", Url = "https://www.celestrak.com/NORAD/elements/gp.php?GROUP=goes&FORMAT=kvn", Filename = "goes.txt", - Override = true + SecondsUntilResync = openspace.time.secondsPerDay() }) @@ -21,7 +21,8 @@ local GoesSatellites = { Format = "OMM", SegmentQuality = 3, Color = { 0.75, 0.75, 0.35 }, - Fade = 1.5, + TrailFade = 15, + PointSizeExponent = 5.0, RenderBinMode = "PostDeferredTransparent" }, Tag = { "earth_satellites" }, @@ -46,7 +47,6 @@ asset.export(GoesSatellites) asset.meta = { Name = "Satellites Weather - GOES", - Version = "1.0", Description = "Satellites asset for Weather - GOES. Data from Celestrak", Author = "OpenSpace Team", URL = "https://celestrak.com/NORAD/elements/", diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/weather/noaa.asset b/data/assets/scene/solarsystem/planets/earth/satellites/weather/noaa.asset index 30d7b3b906..d3e360be01 100644 --- a/data/assets/scene/solarsystem/planets/earth/satellites/weather/noaa.asset +++ b/data/assets/scene/solarsystem/planets/earth/satellites/weather/noaa.asset @@ -2,13 +2,13 @@ local transforms = asset.require("scene/solarsystem/planets/earth/transforms") -local omm = asset.syncedResource({ +local omm = asset.resource({ Name = "Satellite OMM Data (NOAA)", Type = "UrlSynchronization", Identifier = "satellite_omm_data_noaa", Url = "https://www.celestrak.com/NORAD/elements/gp.php?GROUP=noaa&FORMAT=kvn", Filename = "noaa.txt", - Override = true + SecondsUntilResync = openspace.time.secondsPerDay() }) @@ -21,7 +21,8 @@ local NoaaSatellites = { Format = "OMM", SegmentQuality = 3, Color = { 0.75, 0.75, 0.35 }, - Fade = 1.5, + TrailFade = 17, + PointSizeExponent = 5.0, RenderBinMode = "PostDeferredTransparent" }, Tag = { "earth_satellites" }, @@ -46,7 +47,6 @@ asset.export(NoaaSatellites) asset.meta = { Name = "Satellites Weather - NOAA", - Version = "1.0", Description = "Satellites asset for Weather - NOAA. Data from Celestrak", Author = "OpenSpace Team", URL = "https://celestrak.com/NORAD/elements/", diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/weather/planet.asset b/data/assets/scene/solarsystem/planets/earth/satellites/weather/planet.asset index 857be0486b..c9148ea6a7 100644 --- a/data/assets/scene/solarsystem/planets/earth/satellites/weather/planet.asset +++ b/data/assets/scene/solarsystem/planets/earth/satellites/weather/planet.asset @@ -2,13 +2,13 @@ local transforms = asset.require("scene/solarsystem/planets/earth/transforms") -local omm = asset.syncedResource({ +local omm = asset.resource({ Name = "Satellite OMM Data (Planet)", Type = "UrlSynchronization", Identifier = "satellite_omm_data_planet", Url = "https://www.celestrak.com/NORAD/elements/gp.php?GROUP=planet&FORMAT=kvn", Filename = "planet.txt", - Override = true + SecondsUntilResync = openspace.time.secondsPerDay() }) @@ -21,7 +21,8 @@ local PlanetSatellites = { Format = "OMM", SegmentQuality = 3, Color = { 0.75, 0.75, 0.35 }, - Fade = 1.5, + TrailFade = 15, + PointSizeExponent = 5.0, RenderBinMode = "PostDeferredTransparent" }, Tag = { "earth_satellites" }, @@ -31,6 +32,7 @@ local PlanetSatellites = { } } + asset.onInitialize(function() openspace.addSceneGraphNode(PlanetSatellites) end) @@ -45,7 +47,6 @@ asset.export(PlanetSatellites) asset.meta = { Name = "Satellites Weather - Planet", - Version = "1.0", Description = "Satellites asset for Weather - Planet. Data from Celestrak", Author = "OpenSpace Team", URL = "https://celestrak.com/NORAD/elements/", diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/weather/sarsat.asset b/data/assets/scene/solarsystem/planets/earth/satellites/weather/sarsat.asset index 5f2eab355a..a786fa426c 100644 --- a/data/assets/scene/solarsystem/planets/earth/satellites/weather/sarsat.asset +++ b/data/assets/scene/solarsystem/planets/earth/satellites/weather/sarsat.asset @@ -2,13 +2,13 @@ local transforms = asset.require("scene/solarsystem/planets/earth/transforms") -local omm = asset.syncedResource({ +local omm = asset.resource({ Name = "Satellite OMM Data (Search & Rescue (SARSAT))", Type = "UrlSynchronization", Identifier = "satellite_omm_data_sarsat", Url = "https://www.celestrak.com/NORAD/elements/gp.php?GROUP=sarsat&FORMAT=kvn", Filename = "sarsat.txt", - Override = true + SecondsUntilResync = openspace.time.secondsPerDay() }) @@ -21,7 +21,8 @@ local SarSatellites = { Format = "OMM", SegmentQuality = 3, Color = { 0.75, 0.75, 0.35 }, - Fade = 1.5, + TrailFade = 10, + PointSizeExponent = 5.0, RenderBinMode = "PostDeferredTransparent" }, Tag = { "earth_satellites" }, @@ -46,7 +47,6 @@ asset.export(SarSatellites) asset.meta = { Name = "Satellites Weather - Search & Rescue (SARSAT)", - Version = "1.0", Description = [[Satellites asset for Weather - Search & Rescue (SARSAT). Data from Celestrak]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/weather/snpp.asset b/data/assets/scene/solarsystem/planets/earth/satellites/weather/snpp.asset index 8bcb7aa50c..3094da65ec 100644 --- a/data/assets/scene/solarsystem/planets/earth/satellites/weather/snpp.asset +++ b/data/assets/scene/solarsystem/planets/earth/satellites/weather/snpp.asset @@ -1,14 +1,15 @@ local transforms = asset.require("scene/solarsystem/planets/earth/transforms") +local coreKernels = asset.require("spice/core") -local omm = asset.syncedResource({ +local omm = asset.resource({ Name = "Satellite OMM Data (SNPP)", Type = "UrlSynchronization", Identifier = "satellite_omm_data_snpp", Url = "https://www.celestrak.com/NORAD/elements/gp.php?CATNR=37849&FORMAT=kvn", Filename = "SNPP.txt", - Override = true + SecondsUntilResync = openspace.time.secondsPerDay() }) @@ -25,8 +26,8 @@ local SNPP = { }, Rotation = { Type = "SpiceRotation", - SourceFrame = "GALACTIC", - DestinationFrame = "J2000", + SourceFrame = coreKernels.Frame.Galactic, + DestinationFrame = coreKernels.Frame.J2000 } }, Tag = { "earth_satellite", "SNPP" }, @@ -63,8 +64,8 @@ local SNPPLabel = { Identifier = "SNPPLabel", Parent = SNPP.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "SNPP", FontSize = 70.0, Size = 4.0, @@ -107,7 +108,6 @@ asset.export(SNPPLabel) asset.meta = { Name = "SNPP", - Version = "1.0", Description = [[Trail for SNPP. trail from Celestrak. Can be used in conjunction with VIIRS SNPP (Temporal) layer for Earth]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/weather/spire.asset b/data/assets/scene/solarsystem/planets/earth/satellites/weather/spire.asset index 56e8f279e5..972274778a 100644 --- a/data/assets/scene/solarsystem/planets/earth/satellites/weather/spire.asset +++ b/data/assets/scene/solarsystem/planets/earth/satellites/weather/spire.asset @@ -2,13 +2,13 @@ local transforms = asset.require("scene/solarsystem/planets/earth/transforms") -local omm = asset.syncedResource({ +local omm = asset.resource({ Name = "Satellite OMM Data (Spire)", Type = "UrlSynchronization", Identifier = "satellite_omm_data_spire", Url = "https://www.celestrak.com/NORAD/elements/gp.php?GROUP=spire&FORMAT=kvn", Filename = "spire.txt", - Override = true + SecondsUntilResync = openspace.time.secondsPerDay() }) @@ -21,7 +21,8 @@ local SpireSatellites = { Format = "OMM", SegmentQuality = 3, Color = { 0.75, 0.75, 0.35 }, - Fade = 1.5, + TrailFade = 15, + PointSizeExponent = 5.0, RenderBinMode = "PostDeferredTransparent" }, Tag = { "earth_satellites" }, @@ -46,7 +47,6 @@ asset.export(SpireSatellites) asset.meta = { Name = "Satellites Weather - Spire", - Version = "1.0", Description = [[Satellites asset for the Spire constellation. Data from Celestrak]], Author = "OpenSpace Team", URL = "https://celestrak.com/NORAD/elements/", diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/weather/tdrss.asset b/data/assets/scene/solarsystem/planets/earth/satellites/weather/tdrss.asset index b77f8f5104..e44459833c 100644 --- a/data/assets/scene/solarsystem/planets/earth/satellites/weather/tdrss.asset +++ b/data/assets/scene/solarsystem/planets/earth/satellites/weather/tdrss.asset @@ -2,13 +2,13 @@ local transforms = asset.require("scene/solarsystem/planets/earth/transforms") -local omm = asset.syncedResource({ +local omm = asset.resource({ Name = "Satellite OMM Data (Tracking and Data Relay Satellite System (TDRSS))", Type = "UrlSynchronization", Identifier = "satellite_omm_data_tdrss", Url = "https://www.celestrak.com/NORAD/elements/gp.php?GROUP=tdrss&FORMAT=kvn", Filename = "tdrss.txt", - Override = true + SecondsUntilResync = openspace.time.secondsPerDay() }) @@ -21,7 +21,8 @@ local TrackingDataRelaySatellites = { Format = "OMM", SegmentQuality = 3, Color = { 0.75, 0.75, 0.35 }, - Fade = 1.5, + TrailFade = 17, + PointSizeExponent = 5.0, RenderBinMode = "PostDeferredTransparent" }, Tag = { "earth_satellites" }, @@ -46,7 +47,6 @@ asset.export(TrackingDataRelaySatellites) asset.meta = { Name = "Satellites Weather - Tracking and Data Relay Satellite System (TDRSS)", - Version = "1.0", Description = [[Satellites asset for Weather - Tracking and Data Relay Satellite System (TDRSS). Data from Celestrak]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/weather/terra.asset b/data/assets/scene/solarsystem/planets/earth/satellites/weather/terra.asset index aefe0d0ae2..ba5fbdb877 100644 --- a/data/assets/scene/solarsystem/planets/earth/satellites/weather/terra.asset +++ b/data/assets/scene/solarsystem/planets/earth/satellites/weather/terra.asset @@ -1,14 +1,15 @@ local transforms = asset.require("scene/solarsystem/planets/earth/transforms") +local coreKernels = asset.require("spice/core") -local omm = asset.syncedResource({ +local omm = asset.resource({ Name = "Satellite OMM Data (Terra)", Type = "UrlSynchronization", Identifier = "satellite_omm_data_terra", Url = "https://www.celestrak.com/NORAD/elements/gp.php?CATNR=25994&FORMAT=kvn", Filename = "Terra.txt", - Override = true + SecondsUntilResync = openspace.time.secondsPerDay() }) @@ -25,8 +26,8 @@ local Terra = { }, Rotation = { Type = "SpiceRotation", - SourceFrame = "GALACTIC", - DestinationFrame = "J2000", + SourceFrame = coreKernels.Frame.Galactic, + DestinationFrame = coreKernels.Frame.J2000 } }, Tag = { "earth_satellite", "Terra" }, @@ -65,8 +66,8 @@ local TerraLabel = { Identifier = "TerraLabel", Parent = Terra.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Terra", FontSize = 70.0, Size = 4.0, @@ -109,7 +110,6 @@ asset.export(TerraLabel) asset.meta = { Name = "Terra", - Version = "1.0", Description = [[Trail for Terra. trail from Celestrak. Can be used in conjuntion with Terra Modis (Temporal) layer for Earth]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/weather/weather.asset b/data/assets/scene/solarsystem/planets/earth/satellites/weather/weather.asset index b9e48e5cc9..c4a0c29460 100644 --- a/data/assets/scene/solarsystem/planets/earth/satellites/weather/weather.asset +++ b/data/assets/scene/solarsystem/planets/earth/satellites/weather/weather.asset @@ -2,13 +2,13 @@ local transforms = asset.require("scene/solarsystem/planets/earth/transforms") -local omm = asset.syncedResource({ +local omm = asset.resource({ Name = "Satellite OMM Data (Weather)", Type = "UrlSynchronization", Identifier = "satellite_omm_data_weather", Url = "https://www.celestrak.com/NORAD/elements/gp.php?GROUP=weather&FORMAT=kvn", Filename = "weather.txt", - Override = true + SecondsUntilResync = openspace.time.secondsPerDay() }) @@ -21,7 +21,8 @@ local WeatherSatellites = { Format = "OMM", SegmentQuality = 3, Color = { 0.75, 0.75, 0.35 }, - Fade = 1.5, + TrailFade = 15, + PointSizeExponent = 5.0, RenderBinMode = "PostDeferredTransparent" }, Tag = { "earth_satellites" }, @@ -46,7 +47,6 @@ asset.export(WeatherSatellites) asset.meta = { Name = "Satellites Weather - Weather", - Version = "1.0", Description = "Satellites asset for Weather - Weather. Data from Celestrak", Author = "OpenSpace Team", URL = "https://celestrak.com/NORAD/elements/", diff --git a/data/assets/scene/solarsystem/planets/earth/trail.asset b/data/assets/scene/solarsystem/planets/earth/trail.asset index df0a24beca..a127de8615 100644 --- a/data/assets/scene/solarsystem/planets/earth/trail.asset +++ b/data/assets/scene/solarsystem/planets/earth/trail.asset @@ -1,5 +1,5 @@ -asset.require("spice/base") local transforms = asset.require("scene/solarsystem/sun/transforms") +local coreKernels = asset.require("spice/core") @@ -10,12 +10,12 @@ local EarthTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "EARTH", - Observer = "SSB" + Target = coreKernels.ID.Earth, + Observer = coreKernels.ID.SolarSystemBarycenter }, Color = { 0.5, 0.8, 1.0 }, Period = 365.242, - Resolution = 1000, + Resolution = 1000 }, Tag = { "planetTrail_solarSystem", "planetTrail_terrestrial" }, GUI = { @@ -39,9 +39,7 @@ asset.export(EarthTrail) asset.meta = { Name = "Earth Trail", - Version = "1.1", - Description = [[Trail of Earth as observed by the Sun. Data from NASA Spice (see base - spice asset)]], + Description = "Trail of Earth as observed by the Sun", Author = "OpenSpace Team", URL = "http://openspaceproject.com", License = "MIT license" diff --git a/data/assets/scene/solarsystem/planets/earth/trail_barycenter.asset b/data/assets/scene/solarsystem/planets/earth/trail_barycenter.asset index 7721f8fc50..5687a9ff23 100644 --- a/data/assets/scene/solarsystem/planets/earth/trail_barycenter.asset +++ b/data/assets/scene/solarsystem/planets/earth/trail_barycenter.asset @@ -1,5 +1,5 @@ -asset.require("spice/base") local transforms = asset.require("scene/solarsystem/sun/transforms") +local coreKernels = asset.require("spice/core") @@ -8,15 +8,15 @@ local EarthBarycenterTrail = { Parent = transforms.SolarSystemBarycenter.Identifier, Renderable = { Type = "RenderableTrailOrbit", + Enabled = false, Translation = { Type = "SpiceTranslation", - Target = "EARTH BARYCENTER", - Observer = "SSB" + Target = coreKernels.ID.EarthBarycenter, + Observer = coreKernels.ID.SolarSystemBarycenter }, Color = { 0.5, 0.8, 1.0 }, Period = 365.242, - Resolution = 1000, - Enabled = false + Resolution = 1000 }, Tag = { "planetTrail_solarSystem", "planetTrail_terrestrial" }, GUI = { @@ -40,9 +40,7 @@ asset.export(EarthBarycenterTrail) asset.meta = { Name = "Earth Trail", - Version = "1.1", - Description = [[Trail of Earth's Barycenter as observed by the Sun. Data from NASA Spice - (see base spice asset)]], + Description = "Trail of Earth's Barycenter as observed by the Sun", Author = "OpenSpace Team", URL = "http://openspaceproject.com", License = "MIT license" diff --git a/data/assets/scene/solarsystem/planets/earth/transforms.asset b/data/assets/scene/solarsystem/planets/earth/transforms.asset index 67a91464ab..d3bbfae3da 100644 --- a/data/assets/scene/solarsystem/planets/earth/transforms.asset +++ b/data/assets/scene/solarsystem/planets/earth/transforms.asset @@ -1,5 +1,5 @@ -asset.require("spice/base") local transforms = asset.require("scene/solarsystem/sun/transforms") +local coreKernels = asset.require("spice/core") @@ -9,8 +9,8 @@ local EarthBarycenter = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "EARTH BARYCENTER", - Observer = "SSB" + Target = coreKernels.ID.EarthBarycenter, + Observer = coreKernels.ID.SolarSystemBarycenter } }, GUI = { @@ -26,8 +26,8 @@ local EarthCenter = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "EARTH", - Observer = "EARTH BARYCENTER" + Target = coreKernels.ID.Earth, + Observer = coreKernels.ID.EarthBarycenter } }, GUI = { @@ -44,8 +44,8 @@ local EarthInertial = { Transform = { Rotation = { Type = "SpiceRotation", - SourceFrame = "J2000", - DestinationFrame = "GALACTIC", + SourceFrame = coreKernels.Frame.J2000, + DestinationFrame = coreKernels.Frame.Galactic } }, GUI = { @@ -61,8 +61,8 @@ local EarthIAU = { Transform = { Rotation = { Type = "SpiceRotation", - SourceFrame = "IAU_EARTH", - DestinationFrame = "GALACTIC", + SourceFrame = coreKernels.Frame.Earth, + DestinationFrame = coreKernels.Frame.Galactic } }, GUI = { @@ -96,7 +96,6 @@ asset.export(EarthIAU) asset.meta = { Name = "Earth Transforms", - Version = "1.1", Description = [[Earth transforms: Earth Barycenter, Earth Center, Earth Inertial, Earth IAU. A scene graph node is created for each transform]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/planets/earth/transforms_gse.asset b/data/assets/scene/solarsystem/planets/earth/transforms_gse.asset new file mode 100644 index 0000000000..84e5d71b57 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/transforms_gse.asset @@ -0,0 +1,65 @@ +local transforms = asset.require("scene/solarsystem/planets/earth/transforms") +local coreKernels = asset.require("spice/core") + + + +local earthcentricKernels = asset.resource({ + Name = "Earthcenteric Frame Kernels", + Type = "HttpSynchronization", + Identifier = "earthcentric_frame_kernels", + Version = 1 +}) + +local Frame = { + GSE = "GSE" +} + +local GeocentricSolarEcliptic = { + Identifier = "GeocentricSolarEcliptic", + Parent = transforms.EarthCenter.Identifier, + Transform = { + Rotation = { + Type = "SpiceRotation", + SourceFrame = Frame.GSE, + DestinationFrame = coreKernels.Frame.Galactic + } + }, + GUI = { + Name = "Geocentric Solar Ecliptic", + Path = "/Solar System/Planets/Earth", + Description = [[The X-Y plane is defined by the Earth Mean Ecliptic plane of date: + the +Z axis, primary vector, is the normal vector to this plane, + always pointing toward the North side of the invariant plane. + +X axis is the component of the Earth-Sun vector that is orthogonal + to the +Z axis. + +Y axis completes the right-handed system.]], + Hidden = true + } +} + + +asset.onInitialize(function() + openspace.spice.loadKernel(earthcentricKernels .."ECLIPDATE.tf") + openspace.spice.loadKernel(earthcentricKernels .."GSE.tf") + openspace.addSceneGraphNode(GeocentricSolarEcliptic) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(GeocentricSolarEcliptic) + openspace.spice.unloadKernel(earthcentricKernels .."GSE.tf") + openspace.spice.unloadKernel(earthcentricKernels .."ECLIPDATE.tf") +end) + +asset.export("Frame", Frame) +asset.export(GeocentricSolarEcliptic) + + + +asset.meta = { + Name = "Geocentric Solar Ecliptic (GSE) frame Transform", + Version = "1.0", + Description = "Earth transform GSE Reference Frame", + Author = "CCMC", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/earth/transforms_gsm_sm.asset b/data/assets/scene/solarsystem/planets/earth/transforms_gsm_sm.asset new file mode 100644 index 0000000000..6b3bf4d13b --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/transforms_gsm_sm.asset @@ -0,0 +1,92 @@ +local transforms = asset.require("scene/solarsystem/planets/earth/transforms") +local coreKernels = asset.require("spice/core") + + + +local earthcentricKernels = asset.resource({ + Name = "Earthcenteric Frame Kernels", + Type = "HttpSynchronization", + Identifier = "earthcentric_frame_kernels", + Version = 1 +}) + +local Frame = { + GSM = "EARTH_GSM_IGRF2000", -- Geocentric Solar Magnetospheric + SM = "EARTH_SM_IGRF2000", +} + +local GeocentricSolarMagnetospheric = { + Identifier = "GeocentricSolarMagnetospheric", + Parent = transforms.EarthCenter.Identifier, + Transform = { + Rotation = { + Type = "SpiceRotation", + SourceFrame = Frame.GSM, + DestinationFrame = coreKernels.Frame.Galactic + } + }, + GUI = { + Name = "Geocentric Solar Magnetospheric", + Path = "/Solar System/Planets/Earth", + Description = [[ +X is parallel to the geometric earth-sun position vector. + +Z axis is normalized component of north centered geomagnetic dipole + vector orthogonal to GSM +X axis. + +Y completes the right-handed frame. + - the origin of this frame is the center of mass of the Earth.]], + Hidden = true + } +} + +local SolarMagnetic = { + Identifier = "SolarMagnetic", + Parent = transforms.EarthCenter.Identifier, + Transform = { + Rotation = { + Type = "SpiceRotation", + SourceFrame = Frame.SM, + DestinationFrame = coreKernels.Frame.Galactic + } + }, + GUI = { + Name = "Solar Magnetic", + Path = "/Solar System/Planets/Earth", + Description = [[+Z axis is the direction of Earth's magnetic dipole axis + (positive North); it's the primary vector. + +X axis is the projection of the geometric position of the + Sun relative to the Earth onto the plane perpendicular to the + Z axis. + +Y axis completes the right-handed system. + - the origin of this frame is the center of mass of the Earth.]], + Hidden = true + } +} + + +asset.onInitialize(function() + openspace.spice.loadKernel(earthcentricKernels .. "GSM.tf") + openspace.spice.loadKernel(earthcentricKernels .. "SM.tf") + openspace.addSceneGraphNode(GeocentricSolarMagnetospheric) + openspace.addSceneGraphNode(SolarMagnetic) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(SolarMagnetic) + openspace.removeSceneGraphNode(GeocentricSolarMagnetospheric) + openspace.spice.unloadKernel(earthcentricKernels .. "SM.tf") + openspace.spice.unloadKernel(earthcentricKernels .. "GSM.tf") +end) + +asset.export("Frame", Frame) +asset.export(GeocentricSolarMagnetospheric) +asset.export(SolarMagnetic) + + + +asset.meta = { + Name = "Earth GSM and SM transforms", + Version = "1.0", + Description = "Earth transform GSM Reference Frame. Geocentric Solar Magnetospheric, SM Reference Frame, Solar Magnetic", + Author = "CCMC", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/earth/transforms_gsm_sm_timedependent.asset b/data/assets/scene/solarsystem/planets/earth/transforms_gsm_sm_timedependent.asset new file mode 100644 index 0000000000..eaf1122589 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/transforms_gsm_sm_timedependent.asset @@ -0,0 +1,126 @@ +local transforms = asset.require("scene/solarsystem/planets/earth/transforms") +local coreKernels = asset.require("spice/core") + + + +local earthcentricKernels = asset.resource({ + Name = "Earthcenteric Frame Kernels", + Type = "HttpSynchronization", + Identifier = "earthcentric_frame_kernels", + Version = 1 +}) + +local ITRF93Kernels = asset.resource({ + Name = "ITRF93 Kernels", + Type = "HttpSynchronization", + Identifier = "itrf93_kernels", + Version = 1 +}) + +local NorthPoleKernels = asset.resource({ + Name = "North Pole Kernels", + Type = "HttpSynchronization", + Identifier = "northpole_kernels", + Version = 1 +}) + +local Frame = { + GSM_time = "EARTH_GSM_IGRF", + SM_time = "EARTH_SM_IGRF" +} + +local GeocentricSolarMagnetosphericTimeDependent = { + Identifier = "GeocentricSolarMagnetosphericTimeDependent", + Parent = transforms.EarthCenter.Identifier, + Transform = { + Rotation = { + Type = "SpiceRotation", + SourceFrame = Frame.GSM_time, + DestinationFrame = coreKernels.Frame.Galactic + } + }, + GUI = { + Name = "Geocentric Solar Magnetospheric (Timedependent)", + Path = "/Solar System/Planets/Earth", + Description = [[The Earth's magnetic dipole axis direction is time- + variable and is defined by the EARTH_NORTH_POLE/399901 object location + as seen from the Earth center provided in the SPK file + earthnpole_19500101_20251231_v01.bsp (or newer). + +X is parallel to the geometric earth-sun position vector. + +Z axis is normalized component of north centered geomagnetic dipole + vector orthogonal to GSM +X axis. + +Y completes the right-handed frame. + - the origin of this frame is the center of mass of the Earth.]], + Hidden = true + } +} + +--like the other SM reference frame but with a time variant magnetic north pole. Update every 5years : +-- 20251231, 20301231 etc... +local SolarMagneticTimeDependent = { + Identifier = "SolarMagneticTimeDependent", + Parent = transforms.EarthCenter.Identifier, + Transform = { + Rotation ={ + Type = "SpiceRotation", + SourceFrame = Frame.SM_time, + DestinationFrame = coreKernels.Frame.Galactic + } + }, + GUI = { + Name = "Solar Magnetic (Timedependent)", + Path = "/Solar System/Planets/Earth", + Description = [[ The Earth's magnetic dipole axis direction is time- + variable and is defined by the EARTH_NORTH_POLE/399901 object location + as seen from the Earth center provided in the SPK file + earthnpole_19500101_20251231_v01.bsp (or newer). + +Z axis is the direction of Earth's magnetic dipole axis + (positive North); it's the primary vector. + +X axis is the projection of the geometric position of the + Sun relative to the Earth onto the plane perpendicular to the + Z axis. + +Y axis completes the right-handed system. + - the origin of this frame is the center of mass of the Earth.]], + Hidden = true + } +} + + +asset.onInitialize(function() + openspace.spice.loadKernel(NorthPoleKernels .. "earthnpole_19500101_20251231_v01.bsp") + openspace.spice.loadKernel(NorthPoleKernels .. "earthnpole_runout.bsp") + openspace.spice.loadKernel(ITRF93Kernels .. "earth_200101_990825_predict.bpc") + openspace.spice.loadKernel(ITRF93Kernels .. "earth_620120_240827.bpc") + openspace.spice.loadKernel(ITRF93Kernels .. "earth_latest_high_prec.bpc") + openspace.spice.loadKernel(earthcentricKernels .. "GSM_time.tf") + openspace.spice.loadKernel(earthcentricKernels .. "SM_time.tf") + openspace.addSceneGraphNode(GeocentricSolarMagnetosphericTimeDependent) + openspace.addSceneGraphNode(SolarMagneticTimeDependent) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(SolarMagneticTimeDependent) + openspace.removeSceneGraphNode(GeocentricSolarMagnetosphericTimeDependent) + openspace.spice.unloadKernel(earthcentricKernels .. "SM_time.tf") + openspace.spice.unloadKernel(earthcentricKernels .. "GSM_time.tf") + openspace.spice.unloadKernel(ITRF93Kernels .. "earth_latest_high_prec.bpc") + openspace.spice.unloadKernel(ITRF93Kernels .. "earth_620120_240827.bpc") + openspace.spice.unloadKernel(ITRF93Kernels .. "earth_200101_990825_predict.bpc") + openspace.spice.unloadKernel(NorthPoleKernels.. "earthnpole_runout.bsp") + openspace.spice.unloadKernel(NorthPoleKernels.. "earthnpole_19500101_20251231_v01.bsp") +end) + +asset.export("Frame", Frame) +asset.export(GeocentricSolarMagnetosphericTimeDependent) +asset.export(SolarMagneticTimeDependent) + + + +asset.meta = { + Name = "Earth's time dependent magnetic northpole GSM and SM transforms", + Version = "1.0", + Description = "Earth transforms: Earth's time dependent magnetic northpole GSM, Geocentric Solar Magnetospheric and SM, Solar Magnetic transforms", + Author = "CCMC", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/earth/transforms_gsm_static.asset b/data/assets/scene/solarsystem/planets/earth/transforms_gsm_static.asset new file mode 100644 index 0000000000..19048f6252 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/transforms_gsm_static.asset @@ -0,0 +1,65 @@ +local transforms = asset.require("scene/solarsystem/planets/earth/transforms") +local coreKernels = asset.require("spice/core") + + + +local earthcentricKernels = asset.resource({ + Name = "Earthcenteric Frame Kernels", + Type = "HttpSynchronization", + Identifier = "earthcentric_frame_kernels", + Version = 1 +}) + +local Frame = { + GSM_static = "GSM_STATIC" -- Geocentric Solar Magnetospheric +} + +local GeocentricSolarMagnetosphericStatic = { + Identifier = "GeocentricSolarMagnetosphericStatic", + Parent = transforms.EarthCenter.Identifier, + Transform = { + Rotation = { + Type = "SpiceRotation", + SourceFrame = Frame.GSM_static, + DestinationFrame = coreKernels.Frame.Galactic + } + }, + GUI = { + Name = "Geocentric Solar Magnetospheric Static", + Path = "/Solar System/Planets/Earth", + Description =[[The Kernel for this is the same as + GSM (Geocentric Solar Magnetospheric), except it is using + ECLIPJ2000 instead of IAU_EARTH for the secondary axis. GSM is defind as: + +X is parallel to the geometric earth-sun position vector. + +Z axis is normalized component of north centered geomagnetic dipole + vector orthogonal to GSM +X axis. + +Y completes the right-handed frame. + - the origin of this frame is the center of mass of the Earth.]], + Hidden = true + } +} + + +asset.onInitialize(function() + openspace.spice.loadKernel(earthcentricKernels .. "GSM_static.tf") + openspace.addSceneGraphNode(GeocentricSolarMagnetosphericStatic ) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(GeocentricSolarMagnetosphericStatic ) + openspace.spice.unloadKernel(earthcentricKernels .. "GSM_static.tf") +end) + +asset.export("Frame", Frame) +asset.export(GeocentricSolarMagnetosphericStatic ) + + + +asset.meta = { + Name = "Earth static GSM transforms", + Version = "1.0", + Description = "A static version of Earth transform GSM Reference Frame. Geocentric Solar Magnetospheric", + Author = "CCMC", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/jupiter/callisto/callisto.asset b/data/assets/scene/solarsystem/planets/jupiter/callisto/callisto.asset index 9c3860b697..0fa2242dfe 100644 --- a/data/assets/scene/solarsystem/planets/jupiter/callisto/callisto.asset +++ b/data/assets/scene/solarsystem/planets/jupiter/callisto/callisto.asset @@ -1,11 +1,11 @@ -asset.require("spice/base") asset.require("./trail") local transforms = asset.require("../transforms") -local kernel = asset.require("../kernels") +local kernels = asset.require("../kernels") +local coreKernels = asset.require("spice/core") -local labelsPath = asset.syncedResource({ +local labelsPath = asset.resource({ Name = "Jupiter Labels", Type = "HttpSynchronization", Identifier = "jupiter_labels", @@ -17,22 +17,20 @@ local Callisto = { Identifier = "Callisto", Parent = transforms.JupiterBarycenter.Identifier, Transform = { - Rotation = { - Type = "SpiceRotation", - SourceFrame = "IAU_CALLISTO", - DestinationFrame = "GALACTIC" - }, Translation = { Type = "SpiceTranslation", - Target = "CALLISTO", - Observer = "JUPITER BARYCENTER" + Target = kernels.ID.Callisto, + Observer = coreKernels.ID.JupiterBarycenter + }, + Rotation = { + Type = "SpiceRotation", + SourceFrame = coreKernels.Frame.Callisto, + DestinationFrame = coreKernels.Frame.Galactic } }, Renderable = { Type = "RenderableGlobe", Radii = 2410000, - SegmentsPerPatch = 64, - Layers = {}, Labels = { Enabled = false, FileName = labelsPath .. "callisto.labels", @@ -57,8 +55,8 @@ local CallistoLabel = { Identifier = "CallistoLabel", Parent = Callisto.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Callisto", FontSize = 70.0, Size = 6.0, @@ -80,8 +78,6 @@ local CallistoLabel = { asset.onInitialize(function() - openspace.spice.loadKernel(kernel.jup365) - openspace.addSceneGraphNode(Callisto) openspace.addSceneGraphNode(CallistoLabel) end) @@ -89,8 +85,6 @@ end) asset.onDeinitialize(function() openspace.removeSceneGraphNode(CallistoLabel) openspace.removeSceneGraphNode(Callisto) - - openspace.spice.unloadKernel(kernel.jup365) end) asset.export(Callisto) @@ -100,7 +94,6 @@ asset.export(CallistoLabel) asset.meta = { Name = "Callisto", - Version = "1.1", Description = "Callisto globe with labels", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/jupiter/callisto/default_layers.asset b/data/assets/scene/solarsystem/planets/jupiter/callisto/default_layers.asset index 22ff575a12..6206a88aad 100644 --- a/data/assets/scene/solarsystem/planets/jupiter/callisto/default_layers.asset +++ b/data/assets/scene/solarsystem/planets/jupiter/callisto/default_layers.asset @@ -4,7 +4,6 @@ asset.require("./layers/colorlayers/callisto_texture", true) asset.meta = { Name = "Default Callisto Layers", - Version = "1.0", Description = "Default Callisto layers are: Callisto Texture", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/jupiter/callisto/layers/colorlayers/callisto_texture.asset b/data/assets/scene/solarsystem/planets/jupiter/callisto/layers/colorlayers/callisto_texture.asset index e3997574c9..1ba88c257d 100644 --- a/data/assets/scene/solarsystem/planets/jupiter/callisto/layers/colorlayers/callisto_texture.asset +++ b/data/assets/scene/solarsystem/planets/jupiter/callisto/layers/colorlayers/callisto_texture.asset @@ -2,7 +2,7 @@ local globe = asset.require("../../callisto") -local texturesPath = asset.syncedResource({ +local texturesPath = asset.resource({ Name = "Callisto Textures", Type = "HttpSynchronization", Identifier = "callisto_textures", @@ -13,7 +13,8 @@ local texturesPath = asset.syncedResource({ local Layer = { Identifier = "Texture", FilePath = texturesPath .. "callisto_os.tif", - Enabled = asset.enabled + Enabled = asset.enabled, + ZIndex = 5 } @@ -31,7 +32,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Callisto Texutre", - Version = "2.0", Description = "Default texture for Callisto", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/jupiter/callisto/trail.asset b/data/assets/scene/solarsystem/planets/jupiter/callisto/trail.asset index 472933bf3f..a7a46d6c9a 100644 --- a/data/assets/scene/solarsystem/planets/jupiter/callisto/trail.asset +++ b/data/assets/scene/solarsystem/planets/jupiter/callisto/trail.asset @@ -1,6 +1,6 @@ -asset.require("spice/base") local transforms = asset.require("../transforms") -local kernel = asset.require("../kernels") +local kernels = asset.require("../kernels") +local coreKernels = asset.require("spice/core") @@ -11,8 +11,8 @@ local CallistoTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "CALLISTO", - Observer = "JUPITER BARYCENTER" + Target = kernels.ID.Callisto, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 17.0, @@ -27,15 +27,11 @@ local CallistoTrail = { asset.onInitialize(function() - openspace.spice.loadKernel(kernel.jup365) - openspace.addSceneGraphNode(CallistoTrail) end) asset.onDeinitialize(function() openspace.removeSceneGraphNode(CallistoTrail) - - openspace.spice.unloadKernel(kernel.jup365) end) asset.export(CallistoTrail) @@ -44,9 +40,7 @@ asset.export(CallistoTrail) asset.meta = { Name = "Callisto Trail", - Version = "1.1", - Description = [[Trail of Callisto as observed by the Jupiter. Data from NASA Spice - (see base spice asset)]], + Description = "Trail of Callisto as observed by the Jupiter", Author = "OpenSpace Team", URL = "http://openspaceproject.com", License = "MIT license" diff --git a/data/assets/scene/solarsystem/planets/jupiter/default_layers.asset b/data/assets/scene/solarsystem/planets/jupiter/default_layers.asset index e22ad9dd6e..6ba6b9bf7c 100644 --- a/data/assets/scene/solarsystem/planets/jupiter/default_layers.asset +++ b/data/assets/scene/solarsystem/planets/jupiter/default_layers.asset @@ -1,9 +1,9 @@ asset.require("./layers/colorlayers/jupiter_texture", true) + asset.meta = { Name = "Default Jupiter Layers", - Version = "1.0", Description = "Default Jupiter layers are: Jupiter Texture", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/jupiter/europa/default_layers.asset b/data/assets/scene/solarsystem/planets/jupiter/europa/default_layers.asset index 281f4178c7..b3f4f701d7 100644 --- a/data/assets/scene/solarsystem/planets/jupiter/europa/default_layers.asset +++ b/data/assets/scene/solarsystem/planets/jupiter/europa/default_layers.asset @@ -1,14 +1,16 @@ -asset.require("./layers/colorlayers/europa_texture", false) -asset.require("./layers/colorlayers/voyager_global_mosaic_local", false) -asset.require("./layers/colorlayers/voyager_global_mosaic_sweden", false) -asset.require("./layers/colorlayers/voyager_global_mosaic_newyork", true) +asset.require("./layers/base_layers", false) +asset.require("./layers/local_layers", true) +asset.require("./layers/sweden_layers", false) +asset.require("./layers/newyork_layers", false) asset.meta = { Name = "Default Europa Layers", - Version = "1.0", - Description = "Default Europa layers are: Europa Texture", + Description = [[Default Europa layers are: Europa Texture & Voyager Global Mosaic. + + Layers loaded from all available servers + ]], Author = "OpenSpace Team", URL = "http://openspaceproject.com", License = "MIT license" diff --git a/data/assets/scene/solarsystem/planets/jupiter/europa/europa.asset b/data/assets/scene/solarsystem/planets/jupiter/europa/europa.asset index ca760934d4..18460b39e2 100644 --- a/data/assets/scene/solarsystem/planets/jupiter/europa/europa.asset +++ b/data/assets/scene/solarsystem/planets/jupiter/europa/europa.asset @@ -1,11 +1,11 @@ -asset.require("spice/base") asset.require("./trail") local transforms = asset.require("../transforms") -local kernel = asset.require("../kernels") +local kernels = asset.require("../kernels") +local coreKernels = asset.require("spice/core") -local labelsPath = asset.syncedResource({ +local labelsPath = asset.resource({ Name = "Jupiter Labels", Type = "HttpSynchronization", Identifier = "jupiter_labels", @@ -17,22 +17,20 @@ local Europa = { Identifier = "Europa", Parent = transforms.JupiterBarycenter.Identifier, Transform = { - Rotation = { - Type = "SpiceRotation", - SourceFrame = "IAU_EUROPA", - DestinationFrame = "GALACTIC" - }, Translation = { Type = "SpiceTranslation", - Target = "EUROPA", - Observer = "JUPITER BARYCENTER" + Target = kernels.ID.Europa, + Observer = coreKernels.ID.JupiterBarycenter + }, + Rotation = { + Type = "SpiceRotation", + SourceFrame = kernels.Frame.Europa, + DestinationFrame = coreKernels.Frame.Galactic } }, Renderable = { Type = "RenderableGlobe", Radii = 1560800, - SegmentsPerPatch = 64, - Layers = {}, Labels = { Enabled = false, FileName = labelsPath .. "europa.labels", @@ -56,8 +54,8 @@ local EuropaLabel = { Identifier = "EuropaLabel", Parent = Europa.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Europa", FontSize = 70.0, Size = 6.0, @@ -79,8 +77,6 @@ local EuropaLabel = { asset.onInitialize(function() - openspace.spice.loadKernel(kernel.jup365) - openspace.addSceneGraphNode(Europa) openspace.addSceneGraphNode(EuropaLabel) end) @@ -88,8 +84,6 @@ end) asset.onDeinitialize(function() openspace.removeSceneGraphNode(EuropaLabel) openspace.removeSceneGraphNode(Europa) - - openspace.spice.unloadKernel(kernel.jup365) end) asset.export(Europa) @@ -99,7 +93,6 @@ asset.export(EuropaLabel) asset.meta = { Name = "Europa", - Version = "1.1", Description = "Europa globe with labels", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/jupiter/europa/layers/base_layers.asset b/data/assets/scene/solarsystem/planets/jupiter/europa/layers/base_layers.asset new file mode 100644 index 0000000000..474706e26e --- /dev/null +++ b/data/assets/scene/solarsystem/planets/jupiter/europa/layers/base_layers.asset @@ -0,0 +1,11 @@ +asset.require("./colorlayers/europa_texture", false) + + + +asset.meta = { + Name = "Base Europa Layers", + Description = "Base Europa layers are: Europa Texture", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/jupiter/europa/layers/colorlayers/europa_texture.asset b/data/assets/scene/solarsystem/planets/jupiter/europa/layers/colorlayers/europa_texture.asset index ab3034ed9b..b2cd16f4c8 100644 --- a/data/assets/scene/solarsystem/planets/jupiter/europa/layers/colorlayers/europa_texture.asset +++ b/data/assets/scene/solarsystem/planets/jupiter/europa/layers/colorlayers/europa_texture.asset @@ -2,7 +2,7 @@ local globe = asset.require("../../europa") -local texturesPath = asset.syncedResource({ +local texturesPath = asset.resource({ Name = "Europa Textures", Type = "HttpSynchronization", Identifier = "europa_textures", @@ -13,7 +13,8 @@ local texturesPath = asset.syncedResource({ local Layer = { Identifier = "Texture", FilePath = texturesPath .. "europa_os.tif", - Enabled = asset.enabled + Enabled = asset.enabled, + ZIndex = 5 } @@ -31,7 +32,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Europa Texutre", - Version = "2.0", Description = "Default texture for Europa", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/jupiter/europa/layers/colorlayers/voyager_global_mosaic_local.asset b/data/assets/scene/solarsystem/planets/jupiter/europa/layers/colorlayers/voyager_global_mosaic_local.asset index 0fba860a00..97781587b5 100644 --- a/data/assets/scene/solarsystem/planets/jupiter/europa/layers/colorlayers/voyager_global_mosaic_local.asset +++ b/data/assets/scene/solarsystem/planets/jupiter/europa/layers/colorlayers/voyager_global_mosaic_local.asset @@ -2,7 +2,7 @@ local globe = asset.require("../../europa") -local texturesPath = asset.syncedResource({ +local texturesPath = asset.resource({ Name = "Europa Textures", Type = "HttpSynchronization", Identifier = "europa_textures", @@ -14,10 +14,12 @@ local Layer = { Identifier = "Voyager_Global_Mosaic_Local", Name = "Voyager Global Mosaic [Local]", Enabled = asset.enabled, + ZIndex = 10, FilePath = texturesPath .. "evgos.vrt", BlendMode = "Color" } + asset.onInitialize(function() openspace.globebrowsing.addLayer(globe.Europa.Identifier, "ColorLayers", Layer) end) @@ -32,7 +34,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Voyager Global Mosaic", - Version = "1.1", Description = [[Europa Voyager - Galileo SSI Global Mosaic 500m v2. This global map base of Europa utilizes the best image quality and moderate resolution coverage supplied by the Galileo SSI (Solid-State Imaging) instrument and Voyager 1 and 2. diff --git a/data/assets/scene/solarsystem/planets/jupiter/europa/layers/colorlayers/voyager_global_mosaic_newyork.asset b/data/assets/scene/solarsystem/planets/jupiter/europa/layers/colorlayers/voyager_global_mosaic_newyork.asset index fea34cd307..e836a404d6 100644 --- a/data/assets/scene/solarsystem/planets/jupiter/europa/layers/colorlayers/voyager_global_mosaic_newyork.asset +++ b/data/assets/scene/solarsystem/planets/jupiter/europa/layers/colorlayers/voyager_global_mosaic_newyork.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "Voyager_Global_Mosaic_NewYork", Name = "Voyager Global Mosaic [New York]", Enabled = asset.enabled, - FilePath = asset.localResource("voyager_global_mosaic_newyork.wms"), + ZIndex = 10, + FilePath = asset.resource("voyager_global_mosaic_newyork.wms"), BlendMode = "Color" } @@ -25,7 +26,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Voyager Global Mosaic [New York]", - Version = "1.1", Description = [[Europa Voyager - Galileo SSI Global Mosaic 500m v2. This global map base of Europa utilizes the best image quality and moderate resolution coverage supplied by the Galileo SSI (Solid-State Imaging) instrument and Voyager 1 and 2. diff --git a/data/assets/scene/solarsystem/planets/jupiter/europa/layers/colorlayers/voyager_global_mosaic_sweden.asset b/data/assets/scene/solarsystem/planets/jupiter/europa/layers/colorlayers/voyager_global_mosaic_sweden.asset index bc210bef54..5022037a75 100644 --- a/data/assets/scene/solarsystem/planets/jupiter/europa/layers/colorlayers/voyager_global_mosaic_sweden.asset +++ b/data/assets/scene/solarsystem/planets/jupiter/europa/layers/colorlayers/voyager_global_mosaic_sweden.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "Voyager_Global_Mosaic_sweden", Name = "Voyager Global Mosaic [Sweden]", Enabled = asset.enabled, - FilePath = asset.localResource("voyager_global_mosaic_sweden.wms"), + ZIndex = 10, + FilePath = asset.resource("voyager_global_mosaic_sweden.wms"), BlendMode = "Color" } @@ -25,7 +26,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Voyager Global Mosaic [Sweden]", - Version = "1.1", Description = [[Europa Voyager - Galileo SSI Global Mosaic 500m v2. This global map base of Europa utilizes the best image quality and moderate resolution coverage supplied by the Galileo SSI (Solid-State Imaging) instrument and Voyager 1 and 2. diff --git a/data/assets/scene/solarsystem/planets/jupiter/europa/layers/local_layers.asset b/data/assets/scene/solarsystem/planets/jupiter/europa/layers/local_layers.asset new file mode 100644 index 0000000000..c043b14dd3 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/jupiter/europa/layers/local_layers.asset @@ -0,0 +1,15 @@ +asset.require("./base_layers", false) +asset.require("./colorlayers/voyager_global_mosaic_local", asset.enabled) + + + +asset.meta = { + Name = "Default Europa Layers (Local)", + Description = [[Default Europa layers are: Europa Texture & Voyager Global Mosaic. + + Layers only loaded locally + ]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/jupiter/europa/layers/newyork_layers.asset b/data/assets/scene/solarsystem/planets/jupiter/europa/layers/newyork_layers.asset new file mode 100644 index 0000000000..13bef07189 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/jupiter/europa/layers/newyork_layers.asset @@ -0,0 +1,15 @@ +asset.require("./base_layers", false) +asset.require("./colorlayers/voyager_global_mosaic_newyork", asset.enabled) + + + +asset.meta = { + Name = "Default Europa Layers (New York)", + Description = [[Default Europa layers are: Europa Texture & Voyager Global Mosaic. + + Layers only loaded from the New York server + ]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/jupiter/europa/layers/sweden_layers.asset b/data/assets/scene/solarsystem/planets/jupiter/europa/layers/sweden_layers.asset new file mode 100644 index 0000000000..d1daae51d5 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/jupiter/europa/layers/sweden_layers.asset @@ -0,0 +1,15 @@ +asset.require("./base_layers", false) +asset.require("./colorlayers/voyager_global_mosaic_sweden", asset.enabled) + + + +asset.meta = { + Name = "Default Europa Layers (Sweden)", + Description = [[Default Europa layers are: Europa Texture & Voyager Global Mosaic. + + Layers only loaded from the Sweden server + ]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/jupiter/europa/trail.asset b/data/assets/scene/solarsystem/planets/jupiter/europa/trail.asset index e2288b8bf6..d0f6334f54 100644 --- a/data/assets/scene/solarsystem/planets/jupiter/europa/trail.asset +++ b/data/assets/scene/solarsystem/planets/jupiter/europa/trail.asset @@ -1,6 +1,6 @@ -asset.require("spice/base") local transforms = asset.require("../transforms") -local kernel = asset.require("../kernels") +local kernels = asset.require("../kernels") +local coreKernels = asset.require("spice/core") @@ -11,8 +11,8 @@ local EuropaTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "EUROPA", - Observer = "JUPITER BARYCENTER" + Target = kernels.ID.Europa, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 85.0 / 24.0, @@ -27,15 +27,11 @@ local EuropaTrail = { asset.onInitialize(function() - openspace.spice.loadKernel(kernel.jup365) - openspace.addSceneGraphNode(EuropaTrail) end) asset.onDeinitialize(function() openspace.removeSceneGraphNode(EuropaTrail) - - openspace.spice.unloadKernel(kernel.jup365) end) asset.export(EuropaTrail) @@ -44,9 +40,7 @@ asset.export(EuropaTrail) asset.meta = { Name = "Europa Trail", - Version = "1.1", - Description = [[Trail of Europa as observed by the Jupiter. Data from NASA Spice (see - base spice asset)]], + Description = "Trail of Europa as observed by the Jupiter", Author = "OpenSpace Team", URL = "http://openspaceproject.com", License = "MIT license" diff --git a/data/assets/scene/solarsystem/planets/jupiter/ganymede/default_layers.asset b/data/assets/scene/solarsystem/planets/jupiter/ganymede/default_layers.asset index 4ca63cd78b..75142f4fcb 100644 --- a/data/assets/scene/solarsystem/planets/jupiter/ganymede/default_layers.asset +++ b/data/assets/scene/solarsystem/planets/jupiter/ganymede/default_layers.asset @@ -4,7 +4,6 @@ asset.require("./layers/colorlayers/ganymede_texture", true) asset.meta = { Name = "Default Ganymede Layers", - Version = "1.0", Description = "Default Ganymede layers are: Ganymede Texture", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/jupiter/ganymede/ganymede.asset b/data/assets/scene/solarsystem/planets/jupiter/ganymede/ganymede.asset index 5a0340b7e8..b3466d7e05 100644 --- a/data/assets/scene/solarsystem/planets/jupiter/ganymede/ganymede.asset +++ b/data/assets/scene/solarsystem/planets/jupiter/ganymede/ganymede.asset @@ -1,11 +1,11 @@ -asset.require("spice/base") asset.require("./trail") local transforms = asset.require("../transforms") -local kernel = asset.require("../kernels") +local kernels = asset.require("../kernels") +local coreKernels = asset.require("spice/core") -local labelsPath = asset.syncedResource({ +local labelsPath = asset.resource({ Name = "Jupiter Labels", Type = "HttpSynchronization", Identifier = "jupiter_labels", @@ -17,22 +17,20 @@ local Ganymede = { Identifier = "Ganymede", Parent = transforms.JupiterBarycenter.Identifier, Transform = { - Rotation = { - Type = "SpiceRotation", - SourceFrame = "IAU_GANYMEDE", - DestinationFrame = "GALACTIC" - }, Translation = { Type = "SpiceTranslation", - Target = "GANYMEDE", - Observer = "JUPITER BARYCENTER" + Target = kernels.ID.Ganymede, + Observer = coreKernels.ID.JupiterBarycenter + }, + Rotation = { + Type = "SpiceRotation", + SourceFrame = kernels.Frame.Ganymede, + DestinationFrame = coreKernels.Frame.Galactic } }, Renderable = { Type = "RenderableGlobe", Radii = 2631000, - SegmentsPerPatch = 64, - Layers = {}, Labels = { Enabled = false, FileName = labelsPath .. "ganymede.labels", @@ -56,8 +54,8 @@ local GanymedeLabel = { Identifier = "GanymedeLabel", Parent = Ganymede.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Ganymede", FontSize = 70.0, Size = 6.0, @@ -79,8 +77,6 @@ local GanymedeLabel = { asset.onInitialize(function() - openspace.spice.loadKernel(kernel.jup365) - openspace.addSceneGraphNode(Ganymede) openspace.addSceneGraphNode(GanymedeLabel) end) @@ -88,8 +84,6 @@ end) asset.onDeinitialize(function() openspace.removeSceneGraphNode(GanymedeLabel) openspace.removeSceneGraphNode(Ganymede) - - openspace.spice.unloadKernel(kernel.jup365) end) asset.export(Ganymede) @@ -99,7 +93,6 @@ asset.export(GanymedeLabel) asset.meta = { Name = "Ganymede", - Version = "1.1", Description = "Ganymede globe with labels", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/jupiter/ganymede/layers/colorlayers/ganymede_texture.asset b/data/assets/scene/solarsystem/planets/jupiter/ganymede/layers/colorlayers/ganymede_texture.asset index 48c3aeda3c..13708b7291 100644 --- a/data/assets/scene/solarsystem/planets/jupiter/ganymede/layers/colorlayers/ganymede_texture.asset +++ b/data/assets/scene/solarsystem/planets/jupiter/ganymede/layers/colorlayers/ganymede_texture.asset @@ -2,7 +2,7 @@ local globe = asset.require("../../ganymede") -local texturesPath = asset.syncedResource({ +local texturesPath = asset.resource({ Name = "Ganymede Textures", Type = "HttpSynchronization", Identifier = "ganymede_textures", @@ -13,7 +13,9 @@ local texturesPath = asset.syncedResource({ local Layer = { Identifier = "Texture", FilePath = texturesPath .. "ganymede.jpg", - Enabled = asset.enabled + Enabled = asset.enabled, + ZIndex = 5, + CacheSettings = { Enabled = false } } @@ -31,7 +33,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Ganymede Texutre", - Version = "1.0", Description = "Default jpg texture for Ganymede", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/jupiter/ganymede/trail.asset b/data/assets/scene/solarsystem/planets/jupiter/ganymede/trail.asset index 24f9d1e486..7d9a810209 100644 --- a/data/assets/scene/solarsystem/planets/jupiter/ganymede/trail.asset +++ b/data/assets/scene/solarsystem/planets/jupiter/ganymede/trail.asset @@ -1,6 +1,6 @@ -asset.require("spice/base") local transforms = asset.require("../transforms") -local kernel = asset.require("../kernels") +local kernels = asset.require("../kernels") +local coreKernels = asset.require("spice/core") @@ -11,8 +11,8 @@ local GanymedeTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "GANYMEDE", - Observer = "JUPITER BARYCENTER" + Target = kernels.ID.Ganymede, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.3 }, Period = 172.0 / 24.0, @@ -27,15 +27,11 @@ local GanymedeTrail = { asset.onInitialize(function() - openspace.spice.loadKernel(kernel.jup365) - openspace.addSceneGraphNode(GanymedeTrail) end) asset.onDeinitialize(function() openspace.removeSceneGraphNode(GanymedeTrail) - - openspace.spice.unloadKernel(kernel.jup365) end) asset.export(GanymedeTrail) @@ -44,9 +40,7 @@ asset.export(GanymedeTrail) asset.meta = { Name = "Ganymede Trail", - Version = "1.1", - Description = [[Trail of Ganymede as observed by the Jupiter. Data from NASA Spice - (see base spice asset)]], + Description = "Trail of Ganymede as observed by the Jupiter", Author = "OpenSpace Team", URL = "http://openspaceproject.com", License = "MIT license" diff --git a/data/assets/scene/solarsystem/planets/jupiter/io/default_layers.asset b/data/assets/scene/solarsystem/planets/jupiter/io/default_layers.asset index a13b793992..f293aaf828 100644 --- a/data/assets/scene/solarsystem/planets/jupiter/io/default_layers.asset +++ b/data/assets/scene/solarsystem/planets/jupiter/io/default_layers.asset @@ -4,7 +4,6 @@ asset.require("./layers/colorlayers/io_texture", true) asset.meta = { Name = "Default Io Layers", - Version = "1.0", Description = "Default Io layers are: Io Texture", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/jupiter/io/io.asset b/data/assets/scene/solarsystem/planets/jupiter/io/io.asset index b25fe4e33e..9fac665977 100644 --- a/data/assets/scene/solarsystem/planets/jupiter/io/io.asset +++ b/data/assets/scene/solarsystem/planets/jupiter/io/io.asset @@ -1,11 +1,11 @@ -asset.require("spice/base") asset.require("./trail") local transforms = asset.require("../transforms") -local kernel = asset.require("../kernels") +local kernels = asset.require("../kernels") +local coreKernels = asset.require("spice/core") -local labelsPath = asset.syncedResource({ +local labelsPath = asset.resource({ Name = "Jupiter Labels", Type = "HttpSynchronization", Identifier = "jupiter_labels", @@ -19,20 +19,18 @@ local Io = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "IO", - Observer = "JUPITER BARYCENTER" + Target = kernels.ID.Io, + Observer = coreKernels.ID.JupiterBarycenter }, Rotation = { Type = "SpiceRotation", - SourceFrame = "IAU_IO", - DestinationFrame = "GALACTIC" + SourceFrame = kernels.Frame.Io, + DestinationFrame = coreKernels.Frame.Galactic } }, Renderable = { Type = "RenderableGlobe", Radii = 1821600, - SegmentsPerPatch = 64, - Layers = {}, Labels = { Enabled = false, FileName = labelsPath .. "io.labels", @@ -56,8 +54,8 @@ local IoLabel = { Identifier = "IoLabel", Parent = Io.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Io", FontSize = 70.0, Size = 6.0, @@ -79,8 +77,6 @@ local IoLabel = { asset.onInitialize(function() - openspace.spice.loadKernel(kernel.jup365) - openspace.addSceneGraphNode(Io) openspace.addSceneGraphNode(IoLabel) end) @@ -88,8 +84,6 @@ end) asset.onDeinitialize(function() openspace.removeSceneGraphNode(IoLabel) openspace.removeSceneGraphNode(Io) - - openspace.spice.unloadKernel(kernel.jup365) end) asset.export(Io) @@ -99,7 +93,6 @@ asset.export(IoLabel) asset.meta = { Name = "Io", - Version = "1.1", Description = "Io globe with labels", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/jupiter/io/layers/colorlayers/io_texture.asset b/data/assets/scene/solarsystem/planets/jupiter/io/layers/colorlayers/io_texture.asset index 69015dcc80..91fcc1f4c3 100644 --- a/data/assets/scene/solarsystem/planets/jupiter/io/layers/colorlayers/io_texture.asset +++ b/data/assets/scene/solarsystem/planets/jupiter/io/layers/colorlayers/io_texture.asset @@ -2,7 +2,7 @@ local globe = asset.require("../../io") -local texturesPath = asset.syncedResource({ +local texturesPath = asset.resource({ Name = "Io Textures", Type = "HttpSynchronization", Identifier = "io_textures", @@ -13,7 +13,9 @@ local texturesPath = asset.syncedResource({ local Layer = { Identifier = "Texture", FilePath = texturesPath .. "io.jpg", - Enabled = asset.enabled + Enabled = asset.enabled, + ZIndex = 5, + CacheSettings = { Enabled = false } } @@ -31,7 +33,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Io Texutre", - Version = "1.0", Description = "Default jpg texture for Io", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/jupiter/io/trail.asset b/data/assets/scene/solarsystem/planets/jupiter/io/trail.asset index 37ce9a5c30..cc58f52492 100644 --- a/data/assets/scene/solarsystem/planets/jupiter/io/trail.asset +++ b/data/assets/scene/solarsystem/planets/jupiter/io/trail.asset @@ -1,6 +1,6 @@ -asset.require("spice/base") local transforms = asset.require("../transforms") -local kernel = asset.require("../kernels") +local kernels = asset.require("../kernels") +local coreKernels = asset.require("spice/core") @@ -11,8 +11,8 @@ local IoTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "IO", - Observer = "JUPITER BARYCENTER" + Target = kernels.ID.Io, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.4, 0.2 }, Period = 42.0 / 24.0, @@ -27,15 +27,11 @@ local IoTrail = { asset.onInitialize(function() - openspace.spice.loadKernel(kernel.jup365) - openspace.addSceneGraphNode(IoTrail) end) asset.onDeinitialize(function() openspace.removeSceneGraphNode(IoTrail) - - openspace.spice.unloadKernel(kernel.jup365) end) asset.export(IoTrail) @@ -44,9 +40,7 @@ asset.export(IoTrail) asset.meta = { Name = "Io Trail", - Version = "1.1", - Description = [[Trail of Io as observed by the Jupiter. Data from NASA Spice (see - base spice asset)]], + Description = "Trail of Io as observed by the Jupiter", Author = "OpenSpace Team", URL = "http://openspaceproject.com", License = "MIT license" diff --git a/data/assets/scene/solarsystem/planets/jupiter/jupiter.asset b/data/assets/scene/solarsystem/planets/jupiter/jupiter.asset index be3dfee2bc..5231ed1d1c 100644 --- a/data/assets/scene/solarsystem/planets/jupiter/jupiter.asset +++ b/data/assets/scene/solarsystem/planets/jupiter/jupiter.asset @@ -1,6 +1,6 @@ -asset.require("spice/base") asset.require("./trail") local transforms = asset.require("./transforms") +local coreKernels = asset.require("spice/core") @@ -10,20 +10,18 @@ local Jupiter = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "JUPITER", - Observer = "JUPITER BARYCENTER" + Target = coreKernels.ID.Jupiter, + Observer = coreKernels.ID.JupiterBarycenter }, Rotation = { Type = "SpiceRotation", - SourceFrame = "IAU_JUPITER", - DestinationFrame = "GALACTIC" + SourceFrame = coreKernels.Frame.Jupiter, + DestinationFrame = coreKernels.Frame.Galactic } }, Renderable = { Type = "RenderableGlobe", Radii = { 71492000.0, 71492000.0, 66854000.0 }, - SegmentsPerPatch = 64, - Layers = {}, ShadowGroup = { Sources = { { Name = "Sun", Radius = 696300000 }, @@ -46,8 +44,8 @@ local JupiterLabel = { Identifier = "JupiterLabel", Parent = Jupiter.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Jupiter", FontSize = 70.0, Size = 8.75, @@ -84,7 +82,6 @@ asset.export(JupiterLabel) asset.meta = { Name = "Jupiter", - Version = "1.1", Description = "Jupiter globe, and main planet label", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/jupiter/kernels.asset b/data/assets/scene/solarsystem/planets/jupiter/kernels.asset index d336e1b908..da4665c9ba 100644 --- a/data/assets/scene/solarsystem/planets/jupiter/kernels.asset +++ b/data/assets/scene/solarsystem/planets/jupiter/kernels.asset @@ -1,20 +1,44 @@ -local kernels = asset.syncedResource({ +local coreKernels = asset.require("spice/core") + + + +local kernels = asset.resource({ Name = "Jupiter Spice Kernels", Type = "HttpSynchronization", Identifier = "jupiter_kernels", Version = 2 }) +local ID = { + Callisto = "CALLISTO", + Europa = "EUROPA", + Ganymede = "GANYMEDE", + Io = "IO" +} -asset.export("jup344", kernels .. "jup344.bsp") -asset.export("jup346", kernels .. "jup346.bsp") -asset.export("jup365", kernels .. "jup365.bsp") +local Frame = { + Callisto = coreKernels.Frame.Callisto, + Europa = coreKernels.Frame.Europa, + Ganymede = coreKernels.Frame.Ganymede, + Io = coreKernels.Frame.Io +} + + +asset.onInitialize(function() + openspace.spice.loadKernel(kernels .. "jup365.bsp") +end) + +asset.onDeinitialize(function() + openspace.spice.unloadKernel(kernels .. "jup365.bsp") +end) + +asset.export("ID", ID) +asset.export("Frame", Frame) asset.meta = { Name = "Jupiter Spice Kernels", - Version = "1.0", Description = "Generic SPICE kernels for Jupiter", Author = "OpenSpace Team", URL = "https://naif.jpl.nasa.gov/pub/naif/pds/wgc/kernels/spk/", diff --git a/data/assets/scene/solarsystem/planets/jupiter/kernels344.asset b/data/assets/scene/solarsystem/planets/jupiter/kernels344.asset new file mode 100644 index 0000000000..ffa8caf68a --- /dev/null +++ b/data/assets/scene/solarsystem/planets/jupiter/kernels344.asset @@ -0,0 +1,136 @@ +local coreKernels = asset.require("spice/core") + + + +local kernels = asset.resource({ + Name = "Jupiter Spice Kernels", + Type = "HttpSynchronization", + Identifier = "jupiter_kernels", + Version = 2 +}) + +local ID = { + Adrastea = "ADRASTEA", + Aitne = "AITNE", + Amalthea = "AMALTHEA", + Ananke = "ANANKE", + Aoede = "AOEDE", + Arche = "ARCHE", + Autonoe = "AUTONOE", + Callirrhoe = "CALLIRRHOE", + Carme = "CARME", + Carpo = "CARPO", + Chaldene = "CHALDENE", + Cyllene = "CYLLENE", + Dia = "DIA", + Elara = "ELARA", + Erinome = "ERINOME", + Ersa = 571, + Euanthe = "EUANTHE", + Eukelade = "EUKELADE", + Eupheme = 560, + Euporie = "EUPORIE", + Eurydome = "EURYDOME", + Harpalyke = "HARPALYKE", + Hegemone = "HEGEMONE", + Helike = "HELIKE", + Hermippe = "HERMIPPE", + Herse = "HERSE", + Himalia = "HIMALIA", + Iocaste = "IOCASTE", + Isonoe = "ISONOE", + Kale = "KALE", + Kallichore = "KALLICHORE", + Kalyke = "KALYKE", + Kore = "KORE", + Leda = "LEDA", + Lysithea = "LYSITHEA", + Megaclite = "MEGACLITE", + Metis = "METIS", + Mneme = "MNEME", + Orthosie = "ORTHOSIE", + Pandia = 565, + Pasiphae = "PASIPHAE", + Pasithee = "PASITHEE", + Praxidike = "PRAXIDIKE", + S2003J2 = 55501, + S2003J4 = 55502, + S2003J5 = 557, + S2003J9 = 55503, + S2003J10 = 55504, + S2003J12 = 55505, + S2003J15 = 558, + S2003J16 = 55506, + S2003J18 = 555, + S2003J19 = 561, + S2003J23 = 55507, + S2010J1 = 551, + S2010J2 = 552, + S2011J1 = 572, + S2011J2 = 556, + S2016J1 = 554, + S2017J1 = 559, + S2017J2 = 563, + S2017J3 = 564, + S2017J5 = 566, + S2017J6 = 567, + S2017J7 = 568, + S2017J8 = 569, + S2017J9 = 570, + Sinope = "SINOPE", + Sponde = "SPONDE", + Taygete = "TAYGETE", + Thebe = "THEBE", + Thelxinoe = "THELXINOE", + Themisto = "THEMISTO", + Thyone = "THYONE", + Valetudo = 562 +} + +local Frame = { + Adrastea = coreKernels.Frame.Adrastea, + Amalthea = coreKernels.Frame.Amalthea, + Ananke = coreKernels.Frame.Ananke, + Callirrhoe = coreKernels.Frame.Callirrhoe, + Carme = coreKernels.Frame.Carme, + Chaldene = coreKernels.Frame.Chaldene, + Elara = coreKernels.Frame.Elara, + Erinome = coreKernels.Frame.Erinome, + Harpalyke = coreKernels.Frame.Harpalyke, + Himalia = coreKernels.Frame.Himalia, + Iocaste = coreKernels.Frame.Iocaste, + Isonoe = coreKernels.Frame.Isonoe, + Kalyke = coreKernels.Frame.Kalyke, + Leda = coreKernels.Frame.Leda, + Lysithea = coreKernels.Frame.Lysithea, + Megaclite = coreKernels.Frame.Magaclite, + Metis = coreKernels.Frame.Metis, + Pasiphae = coreKernels.Frame.Pasiphae, + Praxidike = coreKernels.Frame.Praxidike, + Sinope = coreKernels.Frame.Sinope, + Taygete = coreKernels.Frame.Taygete, + Thebe = coreKernels.Frame.Thebe, + Themisto = coreKernels.Frame.Themisto +} + + +asset.onInitialize(function() + openspace.spice.loadKernel(kernels .. "jup344.bsp") +end) + +asset.onDeinitialize(function() + openspace.spice.unloadKernel(kernels .. "jup344.bsp") +end) + +asset.export("ID", ID) +asset.export("Frame", Frame) + + + +asset.meta = { + Name = "Jupiter Spice Kernels", + Description = "Generic SPICE kernels for Jupiter", + Author = "OpenSpace Team", + URL = "https://naif.jpl.nasa.gov/pub/naif/pds/wgc/kernels/spk/", + License = "NASA" +} diff --git a/data/assets/scene/solarsystem/planets/jupiter/kernels346.asset b/data/assets/scene/solarsystem/planets/jupiter/kernels346.asset new file mode 100644 index 0000000000..cb67010bdc --- /dev/null +++ b/data/assets/scene/solarsystem/planets/jupiter/kernels346.asset @@ -0,0 +1,46 @@ +local kernels = asset.resource({ + Name = "Jupiter Spice Kernels", + Type = "HttpSynchronization", + Identifier = "jupiter_kernels", + Version = 2 +}) + + +local ID = { + S2011J3 = 55509, + S2018J2 = 55510, + S2018J3 = 55511, + S2021J1 = 55512, + S2021J2 = 55513, + S2021J3 = 55514, + S2021J4 = 55515, + S2021J5 = 55516, + S2021J6 = 55517, + S2016J3 = 55518, + S2016J4 = 55519, + S2018J4 = 55520, + S2022J1 = 55521, + S2022J2 = 55522, + S2022J3 = 55523 +} + + +asset.onInitialize(function() + openspace.spice.loadKernel(kernels .. "jup346.bsp") +end) + +asset.onDeinitialize(function() + openspace.spice.unloadKernel(kernels .. "jup346.bsp") +end) + +asset.export("ID", ID) + + + +asset.meta = { + Name = "Jupiter Spice Kernels", + Description = "Generic SPICE kernels for Jupiter", + Author = "OpenSpace Team", + URL = "https://naif.jpl.nasa.gov/pub/naif/pds/wgc/kernels/spk/", + License = "NASA" +} diff --git a/data/assets/scene/solarsystem/planets/jupiter/layers/colorlayers/jupiter_texture.asset b/data/assets/scene/solarsystem/planets/jupiter/layers/colorlayers/jupiter_texture.asset index 7fc4927002..c58c859891 100644 --- a/data/assets/scene/solarsystem/planets/jupiter/layers/colorlayers/jupiter_texture.asset +++ b/data/assets/scene/solarsystem/planets/jupiter/layers/colorlayers/jupiter_texture.asset @@ -2,7 +2,7 @@ local globe = asset.require("../../jupiter") -local texturesPath = asset.syncedResource({ +local texturesPath = asset.resource({ Name = "Jupiter Textures", Type = "HttpSynchronization", Identifier = "jupiter_textures", @@ -13,7 +13,9 @@ local texturesPath = asset.syncedResource({ local Layer = { Identifier = "Texture", FilePath = texturesPath .. "jupiter_os.tif", - Enabled = asset.enabled + Enabled = asset.enabled, + ZIndex = 5, + CacheSettings = { Enabled = false } } @@ -31,7 +33,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Jupiter Texutre", - Version = "2.0", Description = "Default texture for Jupiter", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/jupiter/layers/colorlayers/jupiter_video.asset b/data/assets/scene/solarsystem/planets/jupiter/layers/colorlayers/jupiter_video.asset index 2f71fadc12..3eca6da85e 100644 --- a/data/assets/scene/solarsystem/planets/jupiter/layers/colorlayers/jupiter_video.asset +++ b/data/assets/scene/solarsystem/planets/jupiter/layers/colorlayers/jupiter_video.asset @@ -2,7 +2,7 @@ local globe = asset.require("../../jupiter") -local data = asset.syncedResource({ +local data = asset.resource({ Name = "Jupiter Video Layer", Type = "HttpSynchronization", Identifier = "jupiter_videos", @@ -11,11 +11,12 @@ local data = asset.syncedResource({ local Layer = { + Type = "VideoTileProvider", Identifier = "JupiterVideo", - Video = data .. "/jupiter_movie_3600.mp4", Name = "Jupiter Video", Enabled = true, - Type = "VideoTileLayer" + ZIndex = 10, + Video = data .. "/jupiter_movie_3600.mp4" } @@ -33,7 +34,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Jupiter Video", - Version = "1.0", Description = "An video showing Jupiter.", Author = "NOAA", URL = "https://sos.noaa.gov/copyright/", diff --git a/data/assets/scene/solarsystem/planets/jupiter/major_moons.asset b/data/assets/scene/solarsystem/planets/jupiter/major_moons.asset index 6a42b2842c..f11db28e35 100644 --- a/data/assets/scene/solarsystem/planets/jupiter/major_moons.asset +++ b/data/assets/scene/solarsystem/planets/jupiter/major_moons.asset @@ -9,11 +9,11 @@ local JupiterMajorMoonsOn = { Identifier = "os.solarsystem.JupiterMajorMoonsOn", Name = "Turn ON major moons and trails", Command = [[ - local trails = openspace.getProperty("{moonTrail_major_jupiter}.Renderable.Enabled") - local trails_fade = openspace.getProperty("{moonTrail_major_jupiter}.Renderable.Fade") + local trails = openspace.property("{moonTrail_major_jupiter}.Renderable.Enabled") + local trails_fade = openspace.property("{moonTrail_major_jupiter}.Renderable.Fade") - local moons = openspace.getProperty("{moon_major_jupiter}.Renderable.Enabled") - local moons_fade = openspace.getProperty("{moon_major_jupiter}.Renderable.Fade") + local moons = openspace.property("{moon_major_jupiter}.Renderable.Enabled") + local moons_fade = openspace.property("{moon_major_jupiter}.Renderable.Fade") for i, v in pairs(trails_fade) do openspace.setPropertyValueSingle(trails[i], true) @@ -27,18 +27,18 @@ local JupiterMajorMoonsOn = { ]], Documentation = "Turn ON Jupiter's major moons and their trails", GuiPath = "/Solar System/Jupiter", - IsLocal = true + IsLocal = false } local JupiterMajorMoonsOff = { Identifier = "os.solarsystem.JupiterMajorMoonsOff", Name = "Turn OFF majors moon and trails", Command = [[ - local trails = openspace.getProperty("{moonTrail_major_jupiter}.Renderable.Enabled") - local trails_fade = openspace.getProperty("{moonTrail_major_jupiter}.Renderable.Fade") + local trails = openspace.property("{moonTrail_major_jupiter}.Renderable.Enabled") + local trails_fade = openspace.property("{moonTrail_major_jupiter}.Renderable.Fade") - local moons = openspace.getProperty("{moon_major_jupiter}.Renderable.Enabled") - local moons_fade = openspace.getProperty("{moon_major_jupiter}.Renderable.Fade") + local moons = openspace.property("{moon_major_jupiter}.Renderable.Enabled") + local moons_fade = openspace.property("{moon_major_jupiter}.Renderable.Fade") for i, v in pairs(trails_fade) do openspace.setPropertyValueSingle( @@ -62,7 +62,7 @@ local JupiterMajorMoonsOff = { ]], Documentation = "Turn OFF Jupiter's major moons and their trails", GuiPath = "/Solar System/Jupiter", - IsLocal = true + IsLocal = false } @@ -83,7 +83,6 @@ asset.export("JupiterMajorMoonsOff", JupiterMajorMoonsOff.Identifier) asset.meta = { Name = "Jupiter Major Moons", - Version = "1.1", Description = [[Meta asset containing Jupiters major moons: Callisto, Europa, Ganymede, and Io]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/planets/jupiter/minor/ananke_group.asset b/data/assets/scene/solarsystem/planets/jupiter/minor/ananke_group.asset index 99a6b75c5b..7c6e31f410 100644 --- a/data/assets/scene/solarsystem/planets/jupiter/minor/ananke_group.asset +++ b/data/assets/scene/solarsystem/planets/jupiter/minor/ananke_group.asset @@ -1,5 +1,7 @@ local transforms = asset.require("../transforms") -local kernel = asset.require("../kernels") +local kernels344 = asset.require("../kernels344") +local kernels346 = asset.require("../kernels346") +local coreKernels = asset.require("spice/core") @@ -9,15 +11,13 @@ local S2010J2 = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "552", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.S2010J2, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 1000, 1000, 1000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 1000, 1000, 1000 } }, Tag = { "moon_solarSystem", @@ -40,8 +40,8 @@ local S2010J2Trail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "552", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.S2010J2, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 588.36, @@ -51,6 +51,7 @@ local S2010J2Trail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_ananke", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -64,8 +65,8 @@ local S2010J2Label = { Identifier = "S2010J2Label", Parent = S2010J2.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "S/2010 J 2", FontSize = 70.0, Size = 7.1, @@ -77,7 +78,13 @@ local S2010J2Label = { FadeDistances = { 1.5, 90.0 }, FadeWidths = { 0.5, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_ananke" + }, GUI = { Name = "S/2010 J 2 Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Ananke Group/S2010J2", @@ -91,15 +98,13 @@ local Thelxinoe = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "THELXINOE", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Thelxinoe, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 2000, 2000, 2000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 2000, 2000, 2000 } }, Tag = { "moon_solarSystem", @@ -122,8 +127,8 @@ local ThelxinoeTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "THELXINOE", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Thelxinoe, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 597.61, @@ -133,6 +138,7 @@ local ThelxinoeTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_ananke", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -146,8 +152,8 @@ local ThelxinoeLabel = { Identifier = "ThelxinoeLabel", Parent = Thelxinoe.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Thelxinoe", FontSize = 70.0, Size = 7.1, @@ -159,7 +165,13 @@ local ThelxinoeLabel = { FadeDistances = { 1.5, 90.0 }, FadeWidths = { 0.5, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_ananke" + }, GUI = { Name = "Thelxinoe Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Ananke Group/Thelxinoe", @@ -173,15 +185,13 @@ local Euanthe = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "EUANTHE", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Euanthe, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 3000, 3000, 3000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 3000, 3000, 3000 } }, Tag = { "moon_solarSystem", @@ -204,8 +214,8 @@ local EuantheTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "EUANTHE", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Euanthe, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 598.09, @@ -215,6 +225,7 @@ local EuantheTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_ananke", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -228,8 +239,8 @@ local EuantheLabel = { Identifier = "EuantheLabel", Parent = Euanthe.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Euanthe", FontSize = 70.0, Size = 7.1, @@ -241,7 +252,13 @@ local EuantheLabel = { FadeDistances = { 1.5, 90.0 }, FadeWidths = { 0.5, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_ananke" + }, GUI = { Name = "Euanthe Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Ananke Group/Euanthe", @@ -255,15 +272,13 @@ local Iocaste = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "IOCASTE", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Iocaste, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 5000, 5000, 5000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 5000, 5000, 5000 } }, Tag = { "moon_solarSystem", @@ -286,8 +301,8 @@ local IocasteTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "IOCASTE", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Iocaste, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 609.43, @@ -297,6 +312,7 @@ local IocasteTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_ananke", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -310,8 +326,8 @@ local IocasteLabel = { Identifier = "IocasteLabel", Parent = Iocaste.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Iocaste", FontSize = 70.0, Size = 7.1, @@ -323,7 +339,13 @@ local IocasteLabel = { FadeDistances = { 1.5, 90.0 }, FadeWidths = { 0.5, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_ananke" + }, GUI = { Name = "Iocaste Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Ananke Group/Iocaste", @@ -337,15 +359,13 @@ local S2003J16 = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "55506", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.S2003J16, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 2000, 2000, 2000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 2000, 2000, 2000 } }, Tag = { "moon_solarSystem", @@ -368,8 +388,8 @@ local S2003J16Trail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "55506", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.S2003J16, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 610.36, @@ -379,6 +399,7 @@ local S2003J16Trail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_ananke", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -392,8 +413,8 @@ local S2003J16Label = { Identifier = "S2003J16Label", Parent = S2003J16.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "S/2003 J 16", FontSize = 70.0, Size = 7.1, @@ -405,7 +426,13 @@ local S2003J16Label = { FadeDistances = { 1.5, 90.0 }, FadeWidths = { 0.5, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_ananke" + }, GUI = { Name = "S/2003 J 16 Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Ananke Group/S2003J16", @@ -419,15 +446,13 @@ local Praxidike = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "PRAXIDIKE", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Praxidike, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 7000, 7000, 7000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 7000, 7000, 7000 } }, Tag = { "moon_solarSystem", @@ -450,8 +475,8 @@ local PraxidikeTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "PRAXIDIKE", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Praxidike, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 613.90, @@ -461,6 +486,7 @@ local PraxidikeTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_ananke", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -474,8 +500,8 @@ local PraxidikeLabel = { Identifier = "PraxidikeLabel", Parent = Praxidike.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Praxidike", FontSize = 70.0, Size = 7.1, @@ -487,7 +513,13 @@ local PraxidikeLabel = { FadeDistances = { 1.5, 90.0 }, FadeWidths = { 0.5, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_ananke" + }, GUI = { Name = "Praxidike Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Ananke Group/Praxidike", @@ -501,15 +533,13 @@ local Harpalyke = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "HARPALYKE", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Harpalyke, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 4000, 4000, 4000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 4000, 4000, 4000 } }, Tag = { "moon_solarSystem", @@ -532,8 +562,8 @@ local HarpalykeTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "HARPALYKE", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Harpalyke, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 624.54, @@ -543,6 +573,7 @@ local HarpalykeTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_ananke", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -556,8 +587,8 @@ local HarpalykeLabel = { Identifier = "HarpalykeLabel", Parent = Harpalyke.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Harpalyke", FontSize = 70.0, Size = 7.1, @@ -569,7 +600,13 @@ local HarpalykeLabel = { FadeDistances = { 1.5, 90.0 }, FadeWidths = { 0.5, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_ananke" + }, GUI = { Name = "Harpalyke Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Ananke Group/Harpalyke", @@ -583,15 +620,13 @@ local Mneme = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "MNEME", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Mneme, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 2000, 2000, 2000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 2000, 2000, 2000 } }, Tag = { "moon_solarSystem", @@ -614,8 +649,8 @@ local MnemeTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "MNEME", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Mneme, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 627.48, @@ -625,6 +660,7 @@ local MnemeTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_ananke", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -638,8 +674,8 @@ local MnemeLabel = { Identifier = "MnemeLabel", Parent = Mneme.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Mneme", FontSize = 70.0, Size = 7.1, @@ -651,7 +687,13 @@ local MnemeLabel = { FadeDistances = { 1.5, 90.0 }, FadeWidths = { 0.5, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_ananke" + }, GUI = { Name = "Mneme Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Ananke Group/Mneme", @@ -665,15 +707,13 @@ local Hermippe = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "HERMIPPE", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Hermippe, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 4000, 4000, 4000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 4000, 4000, 4000 } }, Tag = { "moon_solarSystem", @@ -696,8 +736,8 @@ local HermippeTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "HERMIPPE", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Hermippe, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 629.81, @@ -707,6 +747,7 @@ local HermippeTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_ananke", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -720,8 +761,8 @@ local HermippeLabel = { Identifier = "HermippeLabel", Parent = Hermippe.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Hermippe", FontSize = 70.0, Size = 7.1, @@ -733,7 +774,13 @@ local HermippeLabel = { FadeDistances = { 1.5, 90.0 }, FadeWidths = { 0.5, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_ananke" + }, GUI = { Name = "Hermippe Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Ananke Group/Hermippe", @@ -747,15 +794,13 @@ local Thyone = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "THYONE", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Thyone, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 4000, 4000, 4000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 4000, 4000, 4000 } }, Tag = { "moon_solarSystem", @@ -778,8 +823,8 @@ local ThyoneTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "THYONE", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Thyone, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 639.80, @@ -789,6 +834,7 @@ local ThyoneTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_ananke", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -802,8 +848,8 @@ local ThyoneLabel = { Identifier = "ThyoneLabel", Parent = Thyone.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Thyone", FontSize = 70.0, Size = 7.1, @@ -815,7 +861,13 @@ local ThyoneLabel = { FadeDistances = { 1.5, 90.0 }, FadeWidths = { 0.5, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_ananke" + }, GUI = { Name = "Thyone Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Ananke Group/Thyone", @@ -829,15 +881,13 @@ local Ananke = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "ANANKE", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Ananke, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 28000, 28000, 28000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 28000, 28000, 28000 } }, Tag = { "moon_solarSystem", @@ -860,8 +910,8 @@ local AnankeTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "ANANKE", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Ananke, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 640.38, @@ -871,6 +921,7 @@ local AnankeTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_ananke", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -884,8 +935,8 @@ local AnankeLabel = { Identifier = "AnankeLabel", Parent = Ananke.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Ananke", FontSize = 70.0, Size = 7.1, @@ -897,7 +948,13 @@ local AnankeLabel = { FadeDistances = { 1.5, 90.0 }, FadeWidths = { 0.5, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_ananke" + }, GUI = { Name = "Ananke Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Ananke Group/Ananke", @@ -911,15 +968,13 @@ local S2021J1 = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "55512", - Observer = "JUPITER BARYCENTER" + Target = kernels346.ID.S2021J1, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 1000, 1000, 1000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 1000, 1000, 1000 } }, Tag = { "moon_solarSystem", @@ -942,8 +997,8 @@ local S2021J1Trail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "55512", - Observer = "JUPITER BARYCENTER" + Target = kernels346.ID.S2021J1, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 606.99, @@ -953,6 +1008,7 @@ local S2021J1Trail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_ananke", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -966,8 +1022,8 @@ local S2021J1Label = { Identifier = "S2021J1Label", Parent = S2021J1.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "S/2021 J 1", FontSize = 70.0, Size = 7.1, @@ -979,7 +1035,13 @@ local S2021J1Label = { FadeDistances = { 1.5, 90.0 }, FadeWidths = { 0.5, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_ananke" + }, GUI = { Name = "S/2021 J 1 Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Ananke Group/S2021J1", @@ -993,15 +1055,13 @@ local S2021J2 = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "55513", - Observer = "JUPITER BARYCENTER" + Target = kernels346.ID.S2021J2, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 1000, 1000, 1000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 1000, 1000, 1000 } }, Tag = { "moon_solarSystem", @@ -1024,8 +1084,8 @@ local S2021J2Trail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "55513", - Observer = "JUPITER BARYCENTER" + Target = kernels346.ID.S2021J2, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 627.96, @@ -1035,6 +1095,7 @@ local S2021J2Trail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_ananke", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -1048,8 +1109,8 @@ local S2021J2Label = { Identifier = "S2021J2Label", Parent = S2021J2.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "S/2021 J 2", FontSize = 70.0, Size = 7.1, @@ -1061,7 +1122,13 @@ local S2021J2Label = { FadeDistances = { 1.5, 90.0 }, FadeWidths = { 0.5, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_ananke" + }, GUI = { Name = "S/2021 J 2 Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Ananke Group/S2021J2", @@ -1075,15 +1142,13 @@ local S2021J3 = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "55514", - Observer = "JUPITER BARYCENTER" + Target = kernels346.ID.S2021J3, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 2000, 2000, 2000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 2000, 2000, 2000 } }, Tag = { "moon_solarSystem", @@ -1106,8 +1171,8 @@ local S2021J3Trail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "55514", - Observer = "JUPITER BARYCENTER" + Target = kernels346.ID.S2021J3, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 643.85, @@ -1117,6 +1182,7 @@ local S2021J3Trail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_ananke", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -1130,8 +1196,8 @@ local S2021J3Label = { Identifier = "S2021J3Label", Parent = S2021J3.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "S/2021 J 3", FontSize = 70.0, Size = 7.1, @@ -1143,7 +1209,13 @@ local S2021J3Label = { FadeDistances = { 1.5, 90.0 }, FadeWidths = { 0.5, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_ananke" + }, GUI = { Name = "S/2021 J 3 Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Ananke Group/S2021J3", @@ -1157,15 +1229,13 @@ local S2022J3 = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "55523", - Observer = "JUPITER BARYCENTER" + Target = kernels346.ID.S2022J3, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 1000, 1000, 1000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 1000, 1000, 1000 } }, Tag = { "moon_solarSystem", @@ -1188,8 +1258,8 @@ local S2022J3Trail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "55523", - Observer = "JUPITER BARYCENTER" + Target = kernels346.ID.S2022J3, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 617.82, @@ -1199,6 +1269,7 @@ local S2022J3Trail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_ananke", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -1212,8 +1283,8 @@ local S2022J3Label = { Identifier = "S2022J3Label", Parent = S2022J3.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "S/2022 J 3", FontSize = 70.0, Size = 7.1, @@ -1225,7 +1296,13 @@ local S2022J3Label = { FadeDistances = { 1.5, 90.0 }, FadeWidths = { 0.5, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_ananke" + }, GUI = { Name = "S/2022 J 3 Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Ananke Group/S2022J3", @@ -1239,15 +1316,13 @@ local S2017J3 = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "564", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.S2017J3, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 2000, 2000, 2000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 2000, 2000, 2000 } }, Tag = { "moon_solarSystem", @@ -1270,8 +1345,8 @@ local S2017J3Trail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "564", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.S2017J3, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 606.3, @@ -1281,6 +1356,7 @@ local S2017J3Trail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_ananke", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -1294,8 +1370,8 @@ local S2017J3Label = { Identifier = "S2017J3Label", Parent = S2017J3.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "S/2017 J 3", FontSize = 70.0, Size = 7.1, @@ -1307,7 +1383,13 @@ local S2017J3Label = { FadeDistances = { 1.5, 90.0 }, FadeWidths = { 0.5, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_ananke" + }, GUI = { Name = "S/2017 J 3 Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Ananke Group/S2017J3", @@ -1321,15 +1403,13 @@ local S2017J7 = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "568", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.S2017J7, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 2000, 2000, 2000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 2000, 2000, 2000 } }, Tag = { "moon_solarSystem", @@ -1352,8 +1432,8 @@ local S2017J7Trail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "568", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.S2017J7, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 602.6, @@ -1363,6 +1443,7 @@ local S2017J7Trail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_ananke", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -1376,8 +1457,8 @@ local S2017J7Label = { Identifier = "S2017J7Label", Parent = S2017J7.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "S/2017 J 7", FontSize = 70.0, Size = 7.1, @@ -1389,7 +1470,13 @@ local S2017J7Label = { FadeDistances = { 1.5, 90.0 }, FadeWidths = { 0.5, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_ananke" + }, GUI = { Name = "S/2017 J 7 Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Ananke Group/S2017J7", @@ -1403,15 +1490,13 @@ local S2017J9 = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "570", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.S2017J9, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 3000, 3000, 3000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 3000, 3000, 3000 } }, Tag = { "moon_solarSystem", @@ -1434,8 +1519,8 @@ local S2017J9Trail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "570", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.S2017J9, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 639.2, @@ -1445,6 +1530,7 @@ local S2017J9Trail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_ananke", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -1458,8 +1544,8 @@ local S2017J9Label = { Identifier = "S2017J9Label", Parent = S2017J9.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "S/2017 J 9", FontSize = 70.0, Size = 7.1, @@ -1471,7 +1557,13 @@ local S2017J9Label = { FadeDistances = { 1.5, 90.0 }, FadeWidths = { 0.5, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_ananke" + }, GUI = { Name = "S/2017 J 9 Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Ananke Group/S2017J9", @@ -1485,15 +1577,13 @@ local S2003J2 = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "55501", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.S2003J2, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 2000, 2000, 2000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 2000, 2000, 2000 } }, Tag = { "moon_solarSystem", @@ -1516,8 +1606,8 @@ local S2003J2Trail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "55501", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.S2003J2, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 602.02, @@ -1527,6 +1617,7 @@ local S2003J2Trail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_ananke", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -1540,8 +1631,8 @@ local S2003J2Label = { Identifier = "S2003J2Label", Parent = S2003J2.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "S/2003 J 2", FontSize = 70.0, Size = 7.1, @@ -1553,7 +1644,13 @@ local S2003J2Label = { FadeDistances = { 1.5, 90.0 }, FadeWidths = { 0.5, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_ananke" + }, GUI = { Name = "S/2003 J 2 Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Ananke Group/S2003J2", @@ -1567,15 +1664,13 @@ local S2003J12 = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "55505", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.S2003J12, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 1000, 1000, 1000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 1000, 1000, 1000 } }, Tag = { "moon_solarSystem", @@ -1598,8 +1693,8 @@ local S2003J12Trail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "55505", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.S2003J12, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 646.64, @@ -1609,6 +1704,7 @@ local S2003J12Trail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_ananke", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -1622,8 +1718,8 @@ local S2003J12Label = { Identifier = "S2003J12Label", Parent = S2003J12.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "S/2003 J 12", FontSize = 70.0, Size = 7.1, @@ -1635,7 +1731,13 @@ local S2003J12Label = { FadeDistances = { 1.5, 90.0 }, FadeWidths = { 0.5, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_ananke" + }, GUI = { Name = "S/2003 J 12 Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Ananke Group/S2003J12", @@ -1643,11 +1745,8 @@ local S2003J12Label = { } } + asset.onInitialize(function() - openspace.spice.loadKernel(kernel.jup344) - openspace.spice.loadKernel(kernel.jup346) - - openspace.addSceneGraphNode(S2010J2) openspace.addSceneGraphNode(S2010J2Trail) openspace.addSceneGraphNode(S2010J2Label) @@ -1809,10 +1908,6 @@ asset.onDeinitialize(function() openspace.removeSceneGraphNode(S2010J2Label) openspace.removeSceneGraphNode(S2010J2Trail) openspace.removeSceneGraphNode(S2010J2) - - - openspace.spice.unloadKernel(kernel.jup346) - openspace.spice.unloadKernel(kernel.jup344) end) asset.export(S2010J2) @@ -1899,7 +1994,6 @@ asset.export(S2003J12Label) asset.meta = { Name = "Jupiter Ananke Group Moons", - Version = "1.0", Description = [[Asset containing Jupiter's Ananke Group moons. Blank globes, SPICE trails, and labels are generated for each moon]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/planets/jupiter/minor/carme_group.asset b/data/assets/scene/solarsystem/planets/jupiter/minor/carme_group.asset index 057110afa5..a4d05d4632 100644 --- a/data/assets/scene/solarsystem/planets/jupiter/minor/carme_group.asset +++ b/data/assets/scene/solarsystem/planets/jupiter/minor/carme_group.asset @@ -1,5 +1,7 @@ local transforms = asset.require("../transforms") -local kernel = asset.require("../kernels") +local kernels344 = asset.require("../kernels344") +local kernels346 = asset.require("../kernels346") +local coreKernels = asset.require("spice/core") @@ -9,15 +11,13 @@ local Herse = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "HERSE", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Herse, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 2000, 2000, 2000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 2000, 2000, 2000 } }, Tag = { "moon_solarSystem", @@ -40,8 +40,8 @@ local HerseTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "HERSE", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Herse, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 672.75, @@ -51,6 +51,7 @@ local HerseTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_carme", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -64,8 +65,8 @@ local HerseLabel = { Identifier = "HerseLabel", Parent = Herse.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Herse", FontSize = 70.0, Size = 7.1, @@ -77,7 +78,13 @@ local HerseLabel = { FadeDistances = { 2.0, 125.0 }, FadeWidths = { 0.5, 50.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_carme" + }, GUI = { Name = "Herse Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Carme Group/Herse", @@ -91,15 +98,13 @@ local Aitne = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "AITNE", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Aitne, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 3000, 3000, 3000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 3000, 3000, 3000 } }, Tag = { "moon_solarSystem", @@ -122,8 +127,8 @@ local AitneTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "AITNE", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Aitne, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 679.64, @@ -133,6 +138,7 @@ local AitneTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_carme", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -146,8 +152,8 @@ local AitneLabel = { Identifier = "AitneLabel", Parent = Aitne.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Aitne", FontSize = 70.0, Size = 7.1, @@ -159,7 +165,13 @@ local AitneLabel = { FadeDistances = { 2.0, 125.0 }, FadeWidths = { 0.5, 50.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_carme" + }, GUI = { Name = "Aitne Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Carme Group/Aitne", @@ -173,15 +185,13 @@ local Kale = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "KALE", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Kale, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 2000, 2000, 2000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 2000, 2000, 2000 } }, Tag = { "moon_solarSystem", @@ -204,8 +214,8 @@ local KaleTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "KALE", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Kale, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 685.32, @@ -215,6 +225,7 @@ local KaleTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_carme", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -228,8 +239,8 @@ local KaleLabel = { Identifier = "KaleLabel", Parent = Kale.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Kale", FontSize = 70.0, Size = 7.1, @@ -241,7 +252,13 @@ local KaleLabel = { FadeDistances = { 2.0, 125.0 }, FadeWidths = { 0.5, 50.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_carme" + }, GUI = { Name = "Kale Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Carme Group/Kale", @@ -255,15 +272,13 @@ local Taygete = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "TAYGETE", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Taygete, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 5000, 5000, 5000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 5000, 5000, 5000 } }, Tag = { "moon_solarSystem", @@ -286,8 +301,8 @@ local TaygeteTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "TAYGETE", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Taygete, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 686.67, @@ -297,6 +312,7 @@ local TaygeteTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_carme", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -310,8 +326,8 @@ local TaygeteLabel = { Identifier = "TaygeteLabel", Parent = Taygete.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Taygete", FontSize = 70.0, Size = 7.1, @@ -323,7 +339,13 @@ local TaygeteLabel = { FadeDistances = { 2.0, 125.0 }, FadeWidths = { 0.5, 50.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_carme" + }, GUI = { Name = "Taygete Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Carme Group/Taygete", @@ -337,15 +359,13 @@ local Chaldene = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "CHALDENE", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Chaldene, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 4000, 4000, 4000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 4000, 4000, 4000 } }, Tag = { "moon_solarSystem", @@ -368,8 +388,8 @@ local ChaldeneTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "CHALDENE", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Chaldene, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 699.33, @@ -379,6 +399,7 @@ local ChaldeneTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_carme", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -392,8 +413,8 @@ local ChaldeneLabel = { Identifier = "ChaldeneLabel", Parent = Chaldene.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Chaldene", FontSize = 70.0, Size = 7.1, @@ -405,7 +426,13 @@ local ChaldeneLabel = { FadeDistances = { 2.0, 125.0 }, FadeWidths = { 0.5, 50.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_carme" + }, GUI = { Name = "Chaldene Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Carme Group/Chaldene", @@ -419,15 +446,13 @@ local Erinome = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "ERINOME", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Erinome, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 3000, 3000, 3000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 3000, 3000, 3000 } }, Tag = { "moon_solarSystem", @@ -450,8 +475,8 @@ local ErinomeTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "ERINOME", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Erinome, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 711.96, @@ -461,6 +486,7 @@ local ErinomeTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_carme", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -474,8 +500,8 @@ local ErinomeLabel = { Identifier = "ErinomeLabel", Parent = Erinome.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Erinome", FontSize = 70.0, Size = 7.1, @@ -487,7 +513,13 @@ local ErinomeLabel = { FadeDistances = { 2.0, 125.0 }, FadeWidths = { 0.5, 50.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_carme" + }, GUI = { Name = "Erinome Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Carme Group/Erinome", @@ -501,15 +533,13 @@ local Kallichore = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "KALLICHORE", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Kallichore, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 2000, 2000, 2000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 2000, 2000, 2000 } }, Tag = { "moon_solarSystem", @@ -532,8 +562,8 @@ local KallichoreTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "KALLICHORE", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Kallichore, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 717.81, @@ -543,6 +573,7 @@ local KallichoreTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_carme", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -556,8 +587,8 @@ local KallichoreLabel = { Identifier = "KallichoreLabel", Parent = Kallichore.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Kallichore", FontSize = 70.0, Size = 7.1, @@ -569,7 +600,13 @@ local KallichoreLabel = { FadeDistances = { 2.0, 125.0 }, FadeWidths = { 0.5, 50.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_carme" + }, GUI = { Name = "Kallichore Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Carme Group/Kallichore", @@ -583,15 +620,13 @@ local Kalyke = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "KALYKE", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Kalyke, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 5000, 5000, 5000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 5000, 5000, 5000 } }, Tag = { "moon_solarSystem", @@ -614,8 +649,8 @@ local KalykeTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "KALYKE", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Kalyke, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 721.02, @@ -625,6 +660,7 @@ local KalykeTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_carme", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -638,8 +674,8 @@ local KalykeLabel = { Identifier = "KalykeLabel", Parent = Kalyke.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Kalyke", FontSize = 70.0, Size = 7.1, @@ -651,7 +687,13 @@ local KalykeLabel = { FadeDistances = { 2.0, 125.0 }, FadeWidths = { 0.5, 50.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_carme" + }, GUI = { Name = "Kalyke Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Carme Group/Kalyke", @@ -665,15 +707,13 @@ local Pasithee = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "PASITHEE", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Pasithee, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 2000, 2000, 2000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 2000, 2000, 2000 } }, Tag = { "moon_solarSystem", @@ -696,8 +736,8 @@ local PasitheeTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "PASITHEE", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Pasithee, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 726.93, @@ -707,6 +747,7 @@ local PasitheeTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_carme", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -720,8 +761,8 @@ local PasitheeLabel = { Identifier = "PasitheeLabel", Parent = Pasithee.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Pasithee", FontSize = 70.0, Size = 7.1, @@ -733,7 +774,13 @@ local PasitheeLabel = { FadeDistances = { 2.0, 125.0 }, FadeWidths = { 0.5, 50.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_carme" + }, GUI = { Name = "Pasithee Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Carme Group/Pasithee", @@ -747,15 +794,13 @@ local S2010J1 = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "551", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.S2010J1, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 2000, 2000, 2000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 2000, 2000, 2000 } }, Tag = { "moon_solarSystem", @@ -778,8 +823,8 @@ local S2010J1Trail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "551", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.S2010J1, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 722.83, @@ -789,6 +834,7 @@ local S2010J1Trail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_carme", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -802,8 +848,8 @@ local S2010J1Label = { Identifier = "S2010J1Label", Parent = S2010J1.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "S/2010 J 1", FontSize = 70.0, Size = 7.1, @@ -815,7 +861,13 @@ local S2010J1Label = { FadeDistances = { 2.0, 125.0 }, FadeWidths = { 0.5, 50.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_carme" + }, GUI = { Name = "S/2010 J 1 Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Carme Group/S2010J1", @@ -829,15 +881,13 @@ local Eukelade = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "EUKELADE", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Eukelade, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 4000, 4000, 4000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 4000, 4000, 4000 } }, Tag = { "moon_solarSystem", @@ -860,8 +910,8 @@ local EukeladeTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "EUKELADE", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Eukelade, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 735.20, @@ -871,6 +921,7 @@ local EukeladeTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_carme", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -884,8 +935,8 @@ local EukeladeLabel = { Identifier = "EukeladeLabel", Parent = Eukelade.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Eukelade", FontSize = 70.0, Size = 7.1, @@ -897,7 +948,13 @@ local EukeladeLabel = { FadeDistances = { 2.0, 125.0 }, FadeWidths = { 0.5, 50.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_carme" + }, GUI = { Name = "Eukelade Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Carme Group/Eukelade", @@ -911,15 +968,13 @@ local Arche = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "ARCHE", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Arche, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 3000, 3000, 3000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 3000, 3000, 3000 } }, Tag = { "moon_solarSystem", @@ -942,8 +997,8 @@ local ArcheTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "ARCHE", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Arche, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 746.19, @@ -953,6 +1008,7 @@ local ArcheTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_carme", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -966,8 +1022,8 @@ local ArcheLabel = { Identifier = "ArcheLabel", Parent = Arche.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Arche", FontSize = 70.0, Size = 7.1, @@ -979,7 +1035,13 @@ local ArcheLabel = { FadeDistances = { 2.0, 125.0 }, FadeWidths = { 0.5, 50.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_carme" + }, GUI = { Name = "Arche Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Carme Group/Arche", @@ -993,15 +1055,13 @@ local Isonoe = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "ISONOE", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Isonoe, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 4000, 4000, 4000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 4000, 4000, 4000 } }, Tag = { "moon_solarSystem", @@ -1024,8 +1084,8 @@ local IsonoeTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "ISONOE", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Isonoe, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 750.13, @@ -1035,6 +1095,7 @@ local IsonoeTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_carme", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -1048,8 +1109,8 @@ local IsonoeLabel = { Identifier = "IsonoeLabel", Parent = Isonoe.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Isonoe", FontSize = 70.0, Size = 7.1, @@ -1061,7 +1122,13 @@ local IsonoeLabel = { FadeDistances = { 2.0, 125.0 }, FadeWidths = { 0.5, 50.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_carme" + }, GUI = { Name = "Isonoe Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Carme Group/Isonoe", @@ -1075,15 +1142,13 @@ local Carme = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "CARME", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Carme, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 46000, 46000, 46000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 46000, 46000, 46000 } }, Tag = { "moon_solarSystem", @@ -1106,8 +1171,8 @@ local CarmeTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "CARME", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Carme, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 763.95, @@ -1117,6 +1182,7 @@ local CarmeTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_carme", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -1130,8 +1196,8 @@ local CarmeLabel = { Identifier = "CarmeLabel", Parent = Carme.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Carme", FontSize = 70.0, Size = 7.1, @@ -1143,7 +1209,13 @@ local CarmeLabel = { FadeDistances = { 2.0, 125.0 }, FadeWidths = { 0.5, 50.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_carme" + }, GUI = { Name = "Carme Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Carme Group/Carme", @@ -1157,15 +1229,13 @@ local S2003J5 = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "557", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.S2003J5, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 4000, 4000, 4000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 4000, 4000, 4000 } }, Tag = { "moon_solarSystem", @@ -1188,8 +1258,8 @@ local S2003J5Trail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "557", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.S2003J5, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 758.34, @@ -1199,6 +1269,7 @@ local S2003J5Trail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_carme", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -1212,8 +1283,8 @@ local S2003J5Label = { Identifier = "S2003J5Label", Parent = S2003J5.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "S/2003 J 5", FontSize = 70.0, Size = 7.1, @@ -1225,7 +1296,13 @@ local S2003J5Label = { FadeDistances = { 2.0, 125.0 }, FadeWidths = { 0.5, 50.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_carme" + }, GUI = { Name = "S/2003 J 5 Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Carme Group/S2003J5", @@ -1239,15 +1316,13 @@ local S2018J3 = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "55511", - Observer = "JUPITER BARYCENTER" + Target = kernels346.ID.S2018J3, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 1000, 1000, 1000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 1000, 1000, 1000 } }, Tag = { "moon_solarSystem", @@ -1270,8 +1345,8 @@ local S2018J3Trail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "55511", - Observer = "JUPITER BARYCENTER" + Target = kernels346.ID.S2018J3, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 704.56, @@ -1281,6 +1356,7 @@ local S2018J3Trail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_carme", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -1294,8 +1370,8 @@ local S2018J3Label = { Identifier = "S2018J3Label", Parent = S2018J3.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "S/2018 J 3", FontSize = 70.0, Size = 7.1, @@ -1307,7 +1383,13 @@ local S2018J3Label = { FadeDistances = { 2.0, 125.0 }, FadeWidths = { 0.5, 50.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_carme" + }, GUI = { Name = "S/2018 J 3 Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Carme Group/S2018J3", @@ -1321,15 +1403,13 @@ local S2021J4 = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "55515", - Observer = "JUPITER BARYCENTER" + Target = kernels346.ID.S2021J4, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 1000, 1000, 1000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 1000, 1000, 1000 } }, Tag = { "moon_solarSystem", @@ -1352,8 +1432,8 @@ local S2021J4Trail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "55515", - Observer = "JUPITER BARYCENTER" + Target = kernels346.ID.S2021J4, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 710.13, @@ -1363,6 +1443,7 @@ local S2021J4Trail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_carme", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -1376,8 +1457,8 @@ local S2021J4Label = { Identifier = "S2021J4Label", Parent = S2021J4.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "S/2021 J 4", FontSize = 70.0, Size = 7.1, @@ -1389,7 +1470,13 @@ local S2021J4Label = { FadeDistances = { 2.0, 125.0 }, FadeWidths = { 0.5, 50.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_carme" + }, GUI = { Name = "S/2021 J 4 Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Carme Group/S2021J4", @@ -1403,15 +1490,13 @@ local S2021J5 = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "55516", - Observer = "JUPITER BARYCENTER" + Target = kernels346.ID.S2021J5, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 2000, 2000, 2000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 2000, 2000, 2000 } }, Tag = { "moon_solarSystem", @@ -1434,8 +1519,8 @@ local S2021J5Trail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "55516", - Observer = "JUPITER BARYCENTER" + Target = kernels346.ID.S2021J5, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 704.80, @@ -1445,6 +1530,7 @@ local S2021J5Trail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_carme", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -1458,8 +1544,8 @@ local S2021J5Label = { Identifier = "S2021J5Label", Parent = S2021J5.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "S/2021 J 5", FontSize = 70.0, Size = 7.1, @@ -1471,7 +1557,13 @@ local S2021J5Label = { FadeDistances = { 2.0, 125.0 }, FadeWidths = { 0.5, 50.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_carme" + }, GUI = { Name = "S/2021 J 5 Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Carme Group/S2021J5", @@ -1485,15 +1577,13 @@ local S2021J6 = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "55517", - Observer = "JUPITER BARYCENTER" + Target = kernels346.ID.S2021J6, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 2000, 2000, 2000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 2000, 2000, 2000 } }, Tag = { "moon_solarSystem", @@ -1516,8 +1606,8 @@ local S2021J6Trail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "55517", - Observer = "JUPITER BARYCENTER" + Target = kernels346.ID.S2021J6, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 732.55, @@ -1527,6 +1617,7 @@ local S2021J6Trail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_carme", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -1540,8 +1631,8 @@ local S2021J6Label = { Identifier = "S2021J6Label", Parent = S2021J6.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "S/2021 J 6", FontSize = 70.0, Size = 7.1, @@ -1553,7 +1644,13 @@ local S2021J6Label = { FadeDistances = { 2.0, 125.0 }, FadeWidths = { 0.5, 50.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_carme" + }, GUI = { Name = "S/2021 J 6 Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Carme Group/S2021J6", @@ -1567,15 +1664,13 @@ local S2016J3 = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "55518", - Observer = "JUPITER BARYCENTER" + Target = kernels346.ID.S2016J3, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 2000, 2000, 2000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 2000, 2000, 2000 } }, Tag = { "moon_solarSystem", @@ -1598,8 +1693,8 @@ local S2016J3Trail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "55518", - Observer = "JUPITER BARYCENTER" + Target = kernels346.ID.S2016J3, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 676.37, @@ -1609,6 +1704,7 @@ local S2016J3Trail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_carme", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -1622,8 +1718,8 @@ local S2016J3Label = { Identifier = "S2016J3Label", Parent = S2016J3.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "S/2016 J 3", FontSize = 70.0, Size = 7.1, @@ -1635,7 +1731,13 @@ local S2016J3Label = { FadeDistances = { 2.0, 125.0 }, FadeWidths = { 0.5, 50.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_carme" + }, GUI = { Name = "S/2016 J 3 Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Carme Group/S2016J3", @@ -1649,15 +1751,13 @@ local S2022J1 = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "55521", - Observer = "JUPITER BARYCENTER" + Target = kernels346.ID.S2022J1, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 2000, 2000, 2000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 2000, 2000, 2000 } }, Tag = { "moon_solarSystem", @@ -1680,8 +1780,8 @@ local S2022J1Trail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "55521", - Observer = "JUPITER BARYCENTER" + Target = kernels346.ID.S2022J1, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 667.34, @@ -1691,6 +1791,7 @@ local S2022J1Trail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_carme", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -1704,8 +1805,8 @@ local S2022J1Label = { Identifier = "S2022J1Label", Parent = S2022J1.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "S/2022 J 1", FontSize = 70.0, Size = 7.1, @@ -1717,7 +1818,13 @@ local S2022J1Label = { FadeDistances = { 2.0, 125.0 }, FadeWidths = { 0.5, 50.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_carme" + }, GUI = { Name = "S/2022 J 1 Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Carme Group/S2022J1", @@ -1731,15 +1838,13 @@ local S2022J2 = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "55522", - Observer = "JUPITER BARYCENTER" + Target = kernels346.ID.S2022J2, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 1000, 1000, 1000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 1000, 1000, 1000 } }, Tag = { "moon_solarSystem", @@ -1762,8 +1867,8 @@ local S2022J2Trail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "55522", - Observer = "JUPITER BARYCENTER" + Target = kernels346.ID.S2022J2, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 685.51, @@ -1773,6 +1878,7 @@ local S2022J2Trail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_carme", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -1786,8 +1892,8 @@ local S2022J2Label = { Identifier = "S2022J2Label", Parent = S2022J2.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "S/2022 J 2", FontSize = 70.0, Size = 7.1, @@ -1799,7 +1905,13 @@ local S2022J2Label = { FadeDistances = { 2.0, 125.0 }, FadeWidths = { 0.5, 50.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_carme" + }, GUI = { Name = "S/2022 J 2 Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Carme Group/S2022J2", @@ -1813,15 +1925,13 @@ local S2017J2 = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "563", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.S2017J2, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 1000, 1000, 1000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 1000, 1000, 1000 } }, Tag = { "moon_solarSystem", @@ -1844,8 +1954,8 @@ local S2017J2Trail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "563", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.S2017J2, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 723.1, @@ -1855,6 +1965,7 @@ local S2017J2Trail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_carme", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -1868,8 +1979,8 @@ local S2017J2Label = { Identifier = "S2017J2Label", Parent = S2017J2.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "S/2017 J 2", FontSize = 70.0, Size = 7.1, @@ -1881,7 +1992,13 @@ local S2017J2Label = { FadeDistances = { 2.0, 125.0 }, FadeWidths = { 0.5, 50.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_carme" + }, GUI = { Name = "S/2017 J 2 Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Carme Group/S2017J2", @@ -1895,15 +2012,13 @@ local S2017J5 = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "566", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.S2017J5, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 2000, 2000, 2000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 2000, 2000, 2000 } }, Tag = { "moon_solarSystem", @@ -1926,8 +2041,8 @@ local S2017J5Trail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "566", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.S2017J5, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 719.5, @@ -1937,6 +2052,7 @@ local S2017J5Trail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_carme", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -1950,8 +2066,8 @@ local S2017J5Label = { Identifier = "S2017J5Label", Parent = S2017J5.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "S/2017 J 5", FontSize = 70.0, Size = 7.1, @@ -1963,7 +2079,13 @@ local S2017J5Label = { FadeDistances = { 2.0, 125.0 }, FadeWidths = { 0.5, 50.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_carme" + }, GUI = { Name = "S/2017 J 5 Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Carme Group/S2017J5", @@ -1977,15 +2099,13 @@ local S2017J8 = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "569", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.S2017J8, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 1000, 1000, 1000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 1000, 1000, 1000 } }, Tag = { "moon_solarSystem", @@ -2008,8 +2128,8 @@ local S2017J8Trail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "569", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.S2017J8, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 719.6, @@ -2019,6 +2139,7 @@ local S2017J8Trail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_carme", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -2032,8 +2153,8 @@ local S2017J8Label = { Identifier = "S2017J8Label", Parent = S2017J8.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "S/2017 J 8", FontSize = 70.0, Size = 7.1, @@ -2045,7 +2166,13 @@ local S2017J8Label = { FadeDistances = { 2.0, 125.0 }, FadeWidths = { 0.5, 50.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_carme" + }, GUI = { Name = "S/2017 J 8 Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Carme Group/S2017J8", @@ -2059,15 +2186,13 @@ local S2011J1 = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "572", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.S2011J1, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 1000, 1000, 1000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 1000, 1000, 1000 } }, Tag = { "moon_solarSystem", @@ -2090,8 +2215,8 @@ local S2011J1Trail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "572", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.S2011J1, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 686.6, @@ -2101,6 +2226,7 @@ local S2011J1Trail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_carme", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -2114,8 +2240,8 @@ local S2011J1Label = { Identifier = "S2011J1Label", Parent = S2011J1.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "S/2011 J 1", FontSize = 70.0, Size = 7.1, @@ -2127,7 +2253,13 @@ local S2011J1Label = { FadeDistances = { 2.0, 125.0 }, FadeWidths = { 0.5, 50.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_carme" + }, GUI = { Name = "S/2011 J 1 Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Carme Group/S2011J1", @@ -2141,15 +2273,13 @@ local S2003J9 = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "55503", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.S2003J9, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 1000, 1000, 1000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 1000, 1000, 1000 } }, Tag = { "moon_solarSystem", @@ -2172,8 +2302,8 @@ local S2003J9Trail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "55503", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.S2003J9, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 767.6, @@ -2183,6 +2313,7 @@ local S2003J9Trail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_carme", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -2196,8 +2327,8 @@ local S2003J9Label = { Identifier = "S2003J9Label", Parent = S2003J9.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "S/2003 J 9", FontSize = 70.0, Size = 7.1, @@ -2209,7 +2340,13 @@ local S2003J9Label = { FadeDistances = { 2.0, 125.0 }, FadeWidths = { 0.5, 50.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_carme" + }, GUI = { Name = "S/2003 J 9 Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Carme Group/S2003J9", @@ -2223,15 +2360,13 @@ local S2003J10 = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "55504", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.S2003J10, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 2000, 2000, 2000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 2000, 2000, 2000 } }, Tag = { "moon_solarSystem", @@ -2254,8 +2389,8 @@ local S2003J10Trail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "55504", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.S2003J10, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 705.96, @@ -2265,6 +2400,7 @@ local S2003J10Trail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_carme", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -2278,8 +2414,8 @@ local S2003J10Label = { Identifier = "S2003J10Label", Parent = S2003J10.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "S/2003 J 10", FontSize = 70.0, Size = 7.1, @@ -2291,7 +2427,13 @@ local S2003J10Label = { FadeDistances = { 2.0, 125.0 }, FadeWidths = { 0.5, 50.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_carme" + }, GUI = { Name = "S/2003 J 10 Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Carme Group/S2003J10", @@ -2301,10 +2443,6 @@ local S2003J10Label = { asset.onInitialize(function() - openspace.spice.loadKernel(kernel.jup344) - openspace.spice.loadKernel(kernel.jup346) - - openspace.addSceneGraphNode(Herse) openspace.addSceneGraphNode(HerseTrail) openspace.addSceneGraphNode(HerseLabel) @@ -2530,10 +2668,6 @@ asset.onDeinitialize(function() openspace.removeSceneGraphNode(HerseLabel) openspace.removeSceneGraphNode(HerseTrail) openspace.removeSceneGraphNode(Herse) - - - openspace.spice.loadKernel(kernel.jup346) - openspace.spice.loadKernel(kernel.jup344) end) asset.export(Herse) @@ -2652,7 +2786,6 @@ asset.export(S2003J10Label) asset.meta = { Name = "Jupiter Carme Group Moons", - Version = "1.0", Description = [[Asset containing Jupiter's Carme Group moons. Blank globes, SPICE trails, and labels are generated for each moon]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/planets/jupiter/minor/carpo_group.asset b/data/assets/scene/solarsystem/planets/jupiter/minor/carpo_group.asset index 1402dada48..78b8c10e45 100644 --- a/data/assets/scene/solarsystem/planets/jupiter/minor/carpo_group.asset +++ b/data/assets/scene/solarsystem/planets/jupiter/minor/carpo_group.asset @@ -1,5 +1,7 @@ local transforms = asset.require("../transforms") -local kernel = asset.require("../kernels") +local kernels344 = asset.require("../kernels344") +local kernels346 = asset.require("../kernels346") +local coreKernels = asset.require("spice/core") @@ -9,15 +11,13 @@ local Carpo = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "CARPO", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Carpo, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 3000, 3000, 3000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 3000, 3000, 3000 } }, Tag = { "moon_solarSystem", @@ -40,8 +40,8 @@ local CarpoTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "CARPO", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Carpo, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 458.62, @@ -51,6 +51,7 @@ local CarpoTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_carpo", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -64,8 +65,8 @@ local CarpoLabel = { Identifier = "CarpoLabel", Parent = Carpo.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Carpo", FontSize = 70.0, Size = 7.1, @@ -77,7 +78,13 @@ local CarpoLabel = { FadeDistances = { 1.0, 100.0 }, FadeWidths = { 0.0, 100.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_carpo" + }, GUI = { Name = "Carpo Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Carpo Group/Carpo", @@ -89,8 +96,8 @@ local CarpoLabelNear = { Identifier = "CarpoLabelNear", Parent = Carpo.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Carpo", FontSize = 70.0, Size = 5.5, @@ -102,7 +109,13 @@ local CarpoLabelNear = { FadeDistances = { 0.2, 1.0 }, FadeWidths = { 0.1, 0.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_carpo" + }, GUI = { Name = "Carpo Label (Near)", Path = "/Solar System/Planets/Jupiter/Minor Moons/Carpo Group/Carpo", @@ -116,15 +129,13 @@ local S2018J4 = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "55520", - Observer = "JUPITER BARYCENTER" + Target = kernels346.ID.S2018J4, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 2000, 2000, 2000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 2000, 2000, 2000 } }, Tag = { "moon_solarSystem", @@ -147,8 +158,8 @@ local S2018J4Trail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "55520", - Observer = "JUPITER BARYCENTER" + Target = kernels346.ID.S2018J4, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 458.62, @@ -158,6 +169,7 @@ local S2018J4Trail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_carpo", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -171,8 +183,8 @@ local S2018J4Label = { Identifier = "S2018J4Label", Parent = S2018J4.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "S/2018 J 4", FontSize = 70.0, Size = 7.1, @@ -184,7 +196,13 @@ local S2018J4Label = { FadeDistances = { 1.5, 90.0 }, FadeWidths = { 0.5, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_carpo" + }, GUI = { Name = "S/2018 J 4 Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Carpo Group/S2018J4", @@ -196,8 +214,8 @@ local S2018J4LabelNear = { Identifier = "S2018J4LabelNear", Parent = S2018J4.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "S2018J4", FontSize = 70.0, Size = 5.5, @@ -209,7 +227,13 @@ local S2018J4LabelNear = { FadeDistances = { 0.2, 1.0 }, FadeWidths = { 0.1, 0.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_carpo" + }, GUI = { Name = "S2018J4 Label (Near)", Path = "/Solar System/Planets/Jupiter/Minor Moons/Carpo Group/S2018J4", @@ -219,9 +243,6 @@ local S2018J4LabelNear = { asset.onInitialize(function() - openspace.spice.loadKernel(kernel.jup344) - - openspace.addSceneGraphNode(Carpo) openspace.addSceneGraphNode(CarpoTrail) openspace.addSceneGraphNode(CarpoLabel) @@ -239,8 +260,6 @@ asset.onDeinitialize(function() openspace.removeSceneGraphNode(CarpoLabel) openspace.removeSceneGraphNode(CarpoTrail) openspace.removeSceneGraphNode(Carpo) - - openspace.spice.unloadKernel(kernel.jup344) end) asset.export(Carpo) @@ -255,7 +274,6 @@ asset.export(S2018J4Label) asset.meta = { Name = "Jupiter Carpo Group Moons", - Version = "1.0", Description = [[Procedural Globe asset containing Jupiter's Carpo Group moons: Carpo. Blank globes and SPICE trails are generated for each moon]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/planets/jupiter/minor/himalia_group.asset b/data/assets/scene/solarsystem/planets/jupiter/minor/himalia_group.asset index 973332f077..cdbb1c3fb9 100644 --- a/data/assets/scene/solarsystem/planets/jupiter/minor/himalia_group.asset +++ b/data/assets/scene/solarsystem/planets/jupiter/minor/himalia_group.asset @@ -1,5 +1,7 @@ local transforms = asset.require("../transforms") -local kernel = asset.require("../kernels") +local kernels344 = asset.require("../kernels344") +local kernels346 = asset.require("../kernels346") +local coreKernels = asset.require("spice/core") @@ -9,15 +11,13 @@ local Leda = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "LEDA", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Leda, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 16000, 16000, 16000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 16000, 16000, 16000 } }, Tag = { "moon_solarSystem", @@ -40,8 +40,8 @@ local LedaTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "LEDA", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Leda, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 240.82, @@ -51,6 +51,7 @@ local LedaTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_himalia", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -64,8 +65,8 @@ local LedaLabel = { Identifier = "LedaLabel", Parent = Leda.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Leda", FontSize = 70.0, Size = 7.1, @@ -77,7 +78,13 @@ local LedaLabel = { FadeDistances = { 1.0, 120.0 }, FadeWidths = { 1.0, 120.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_himalia" + }, GUI = { Name = "Leda Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Himalia Group/Leda", @@ -91,15 +98,13 @@ local Himalia = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "HIMALIA", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Himalia, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 170000, 170000, 170000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 170000, 170000, 170000 } }, Tag = { "moon_solarSystem", @@ -122,8 +127,8 @@ local HimaliaTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "HIMALIA", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Himalia, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 250.23, @@ -133,6 +138,7 @@ local HimaliaTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_himalia", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -146,8 +152,8 @@ local HimaliaLabel = { Identifier = "HimaliaLabel", Parent = Himalia.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Himalia", FontSize = 70.0, Size = 7.1, @@ -159,7 +165,13 @@ local HimaliaLabel = { FadeDistances = { 1.0, 120.0 }, FadeWidths = { 1.0, 120.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_himalia" + }, GUI = { Name = "Himalia Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Himalia Group/Himalia", @@ -173,15 +185,13 @@ local Lysithea = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "LYSITHEA", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Lysithea, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 36000, 36000, 36000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 36000, 36000, 36000 } }, Tag = { "moon_solarSystem", @@ -204,8 +214,8 @@ local LysitheaTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "LYSITHEA", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Lysithea, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 259.89, @@ -215,6 +225,7 @@ local LysitheaTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_himalia", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -228,8 +239,8 @@ local LysitheaLabel = { Identifier = "LysitheaLabel", Parent = Lysithea.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Lysithea", FontSize = 70.0, Size = 7.1, @@ -241,7 +252,13 @@ local LysitheaLabel = { FadeDistances = { 1.0, 120.0 }, FadeWidths = { 1.0, 120.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_himalia" + }, GUI = { Name = "Lysithea Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Himalia Group/Lysithea", @@ -255,15 +272,13 @@ local Elara = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "ELARA", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Elara, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 86000, 86000, 86000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 86000, 86000, 86000 } }, Tag = { "moon_solarSystem", @@ -286,8 +301,8 @@ local ElaraTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "ELARA", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Elara, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 257.62, @@ -297,6 +312,7 @@ local ElaraTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_himalia", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -310,8 +326,8 @@ local ElaraLabel = { Identifier = "ElaraLabel", Parent = Elara.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Elara", FontSize = 70.0, Size = 7.1, @@ -323,7 +339,13 @@ local ElaraLabel = { FadeDistances = { 1.0, 120.0 }, FadeWidths = { 1.0, 120.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_himalia" + }, GUI = { Name = "Elara Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Himalia Group/Elara", @@ -337,15 +359,13 @@ local Dia = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "DIA", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Dia, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 4000, 4000, 4000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 4000, 4000, 4000 } }, Tag = { "moon_solarSystem", @@ -368,8 +388,8 @@ local DiaTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "DIA", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Dia, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 287.93, @@ -379,6 +399,7 @@ local DiaTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_himalia", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -392,8 +413,8 @@ local DiaLabel = { Identifier = "DiaLabel", Parent = Dia.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Dia", FontSize = 70.0, Size = 7.1, @@ -405,7 +426,13 @@ local DiaLabel = { FadeDistances = { 1.0, 120.0 }, FadeWidths = { 1.0, 120.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_himalia" + }, GUI = { Name = "Dia Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Himalia Group/Dia", @@ -419,15 +446,13 @@ local S2011J3 = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "55509", - Observer = "JUPITER BARYCENTER" + Target = kernels346.ID.S2011J3, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 3000, 3000, 3000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 3000, 3000, 3000 } }, Tag = { "moon_solarSystem", @@ -450,8 +475,8 @@ local S2011J3Trail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "55509", - Observer = "JUPITER BARYCENTER" + Target = kernels346.ID.S2011J3, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 261.77, @@ -461,6 +486,7 @@ local S2011J3Trail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_himalia", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -474,8 +500,8 @@ local S2011J3Label = { Identifier = "S2011J3Label", Parent = S2011J3.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "S/2011 J 3", FontSize = 70.0, Size = 7.1, @@ -487,7 +513,13 @@ local S2011J3Label = { FadeDistances = { 1.0, 120.0 }, FadeWidths = { 1.0, 120.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_himalia" + }, GUI = { Name = "S/2011 J 3 Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Himalia Group/S2011J3", @@ -501,15 +533,13 @@ local S2018J2 = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "55510", - Observer = "JUPITER BARYCENTER" + Target = kernels346.ID.S2018J2, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 3000, 3000, 3000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 3000, 3000, 3000 } }, Tag = { "moon_solarSystem", @@ -532,8 +562,8 @@ local S2018J2Trail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "55510", - Observer = "JUPITER BARYCENTER" + Target = kernels346.ID.S2018J2, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 250.88, @@ -543,6 +573,7 @@ local S2018J2Trail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_himalia", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -556,8 +587,8 @@ local S2018J2Label = { Identifier = "S2018J2Label", Parent = S2018J2.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "S/2018 J 2", FontSize = 70.0, Size = 7.1, @@ -569,7 +600,13 @@ local S2018J2Label = { FadeDistances = { 1.0, 120.0 }, FadeWidths = { 1.0, 120.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_himalia" + }, GUI = { Name = "S/2018 J 2 Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Himalia Group/S2018J2", @@ -583,15 +620,13 @@ local Pandia = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "565", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Pandia, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 3000, 3000, 3000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 3000, 3000, 3000 } }, Tag = { "moon_solarSystem", @@ -614,8 +649,8 @@ local PandiaTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "565", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Pandia, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 251.911, @@ -625,6 +660,7 @@ local PandiaTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_himalia", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -638,8 +674,8 @@ local PandiaLabel = { Identifier = "PandiaLabel", Parent = Pandia.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Pandia", FontSize = 70.0, Size = 7.1, @@ -651,7 +687,13 @@ local PandiaLabel = { FadeDistances = { 1.0, 120.0 }, FadeWidths = { 1.0, 120.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_himalia" + }, GUI = { Name = "Pandia Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Himalia Group/Pandia", @@ -665,15 +707,13 @@ local Ersa = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "571", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Ersa, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 3000, 3000, 3000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 3000, 3000, 3000 } }, Tag = { "moon_solarSystem", @@ -696,8 +736,8 @@ local ErsaTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "571", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Ersa, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 249.229, @@ -707,6 +747,7 @@ local ErsaTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_himalia", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -720,8 +761,8 @@ local ErsaLabel = { Identifier = "ErsaLabel", Parent = Ersa.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Ersa", FontSize = 70.0, Size = 7.1, @@ -733,7 +774,13 @@ local ErsaLabel = { FadeDistances = { 1.0, 120.0 }, FadeWidths = { 1.0, 120.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_himalia" + }, GUI = { Name = "Ersa Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Himalia Group/Ersa", @@ -743,10 +790,6 @@ local ErsaLabel = { asset.onInitialize(function() - openspace.spice.loadKernel(kernel.jup344) - openspace.spice.loadKernel(kernel.jup346) - - openspace.addSceneGraphNode(Leda) openspace.addSceneGraphNode(LedaTrail) openspace.addSceneGraphNode(LedaLabel) @@ -820,10 +863,6 @@ asset.onDeinitialize(function() openspace.removeSceneGraphNode(LedaLabel) openspace.removeSceneGraphNode(LedaTrail) openspace.removeSceneGraphNode(Leda) - - - openspace.spice.unloadKernel(kernel.jup346) - openspace.spice.unloadKernel(kernel.jup344) end) asset.export(Leda) @@ -866,7 +905,6 @@ asset.export(ErsaLabel) asset.meta = { Name = "Jupiter Himalia Group Moons", - Version = "1.0", Description = [[Procedural Globe asset containing Jupiter's Himalia Group moons: Leda, Himalia, Lysithea, Elara and Dia. Blank globes and SPICE trails are generated for each moon]], diff --git a/data/assets/scene/solarsystem/planets/jupiter/minor/inner_group.asset b/data/assets/scene/solarsystem/planets/jupiter/minor/inner_group.asset index f7228a5d26..a582070c4f 100644 --- a/data/assets/scene/solarsystem/planets/jupiter/minor/inner_group.asset +++ b/data/assets/scene/solarsystem/planets/jupiter/minor/inner_group.asset @@ -1,5 +1,6 @@ local transforms = asset.require("../transforms") -local kernel = asset.require("../kernels") +local kernels344 = asset.require("../kernels344") +local coreKernels = asset.require("spice/core") @@ -9,15 +10,13 @@ local Metis = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "METIS", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Metis, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 60000, 40000, 34000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 60000, 40000, 34000 } }, Tag = { "moon_solarSystem", @@ -40,8 +39,8 @@ local MetisTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "METIS", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Metis, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 0.117912037, @@ -51,6 +50,7 @@ local MetisTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_inner", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -64,8 +64,8 @@ local MetisLabel = { Identifier = "MetisLabel", Parent = Metis.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Metis", FontSize = 50.0, Size = 5.6, @@ -77,7 +77,13 @@ local MetisLabel = { FadeDistances = { 0.1, 3.0 }, FadeWidths = { 0.1, 3.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_inner" + }, GUI = { Name = "Metis Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Inner Group/Metis", @@ -91,15 +97,13 @@ local Adrastea = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "ADRASTEA", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Adrastea, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 20000, 16000, 14000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 20000, 16000, 14000 } }, Tag = { "moon_solarSystem", @@ -122,8 +126,8 @@ local AdrasteaTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "ADRASTEA", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Adrastea, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 0.2982638889, @@ -133,6 +137,7 @@ local AdrasteaTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_inner", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -146,8 +151,8 @@ local AdrasteaLabel = { Identifier = "AdrasteaLabel", Parent = Adrastea.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Adrastea", FontSize = 50.0, Size = 5.6, @@ -159,7 +164,13 @@ local AdrasteaLabel = { FadeDistances = { 0.1, 3.0 }, FadeWidths = { 0.1, 3.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_inner" + }, GUI = { Name = "Adrastea Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Inner Group/Adrastea", @@ -173,15 +184,13 @@ local Amalthea = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "AMALTHEA", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Amalthea, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 250000, 146000, 128000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 250000, 146000, 128000 } }, Tag = { "moon_solarSystem", @@ -204,8 +213,8 @@ local AmaltheaTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "AMALTHEA", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Amalthea, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 0.4981828704, @@ -215,6 +224,7 @@ local AmaltheaTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_inner", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -228,8 +238,8 @@ local AmaltheaLabel = { Identifier = "AmaltheaLabel", Parent = Amalthea.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Amalthea", FontSize = 50.0, Size = 5.6, @@ -241,7 +251,13 @@ local AmaltheaLabel = { FadeDistances = { 0.1, 3.0 }, FadeWidths = { 0.1, 3.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_inner" + }, GUI = { Name = "Amalthea Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Inner Group/Amalthea", @@ -255,15 +271,13 @@ local Thebe = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "THEBE", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Thebe, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 116000, 98000, 84000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 116000, 98000, 84000 } }, Tag = { "moon_solarSystem", @@ -286,8 +300,8 @@ local ThebeTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "THEBE", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Thebe, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 0.6745023148, @@ -297,6 +311,7 @@ local ThebeTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_inner", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -310,8 +325,8 @@ local ThebeLabel = { Identifier = "ThebeLabel", Parent = Thebe.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Thebe", FontSize = 50.0, Size = 5.6, @@ -323,7 +338,13 @@ local ThebeLabel = { FadeDistances = { 0.1, 3.0 }, FadeWidths = { 0.1, 3.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_inner" + }, GUI = { Name = "Thebe Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Inner Group/Thebe", @@ -333,9 +354,6 @@ local ThebeLabel = { asset.onInitialize(function() - openspace.spice.loadKernel(kernel.jup365) - - openspace.addSceneGraphNode(Metis) openspace.addSceneGraphNode(MetisTrail) openspace.addSceneGraphNode(MetisLabel) @@ -370,9 +388,6 @@ asset.onDeinitialize(function() openspace.removeSceneGraphNode(ThebeLabel) openspace.removeSceneGraphNode(ThebeTrail) openspace.removeSceneGraphNode(Thebe) - - - openspace.spice.unloadKernel(kernel.jup365) end) @@ -396,7 +411,6 @@ asset.export(ThebeLabel) asset.meta = { Name = "Jupiter Inner Group Moons", - Version = "1.0", Description = [[Procedural Globe asset containing Jupiter's Inner Group moons: Metis, Adrastea, Amalthea, and Thebe. Blank globes and SPICE trails are generated for each moon]], diff --git a/data/assets/scene/solarsystem/planets/jupiter/minor/other_groups.asset b/data/assets/scene/solarsystem/planets/jupiter/minor/other_groups.asset index 6e605f5c9a..f2d49dc414 100644 --- a/data/assets/scene/solarsystem/planets/jupiter/minor/other_groups.asset +++ b/data/assets/scene/solarsystem/planets/jupiter/minor/other_groups.asset @@ -1,5 +1,6 @@ local transforms = asset.require("../transforms") -local kernel = asset.require("../kernels") +local kernels344 = asset.require("../kernels344") +local coreKernels = asset.require("spice/core") @@ -9,15 +10,13 @@ local Eupheme = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "560", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Eupheme, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 2000, 2000, 2000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 2000, 2000, 2000 } }, Tag = { "moon_solarSystem", @@ -40,8 +39,8 @@ local EuphemeTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "560", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Eupheme, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 628.06, @@ -51,6 +50,7 @@ local EuphemeTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_other", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -64,8 +64,8 @@ local EuphemeLabel = { Identifier = "EuphemeLabel", Parent = Eupheme.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Eupheme", FontSize = 70.0, Size = 7.1, @@ -77,7 +77,13 @@ local EuphemeLabel = { FadeDistances = { 1.0, 150.0 }, FadeWidths = { 1.0, 50.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_other" + }, GUI = { Name = "Eupheme Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Other Group/Eupheme", @@ -91,15 +97,13 @@ local S2003J19 = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "561", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.S2003J19, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 2000, 2000, 2000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 2000, 2000, 2000 } }, Tag = { "moon_solarSystem", @@ -122,8 +126,8 @@ local S2003J19Trail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "561", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.S2003J19, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 699.12, @@ -133,6 +137,7 @@ local S2003J19Trail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_other", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -146,8 +151,8 @@ local S2003J19Label = { Identifier = "S2003J19Label", Parent = S2003J19.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "S/2003 J 19", FontSize = 70.0, Size = 7.1, @@ -159,7 +164,13 @@ local S2003J19Label = { FadeDistances = { 1.0, 150.0 }, FadeWidths = { 1.0, 50.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_other" + }, GUI = { Name = "S/2003 J 19 Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Ananke Group/S2003J19", @@ -173,15 +184,13 @@ local Valetudo = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "562", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Valetudo, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 1000, 1000, 1000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 1000, 1000, 1000 } }, Tag = { "moon_solarSystem", @@ -204,8 +213,8 @@ local ValetudoTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "562", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Valetudo, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 527.41, @@ -215,6 +224,7 @@ local ValetudoTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_other", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -228,8 +238,8 @@ local ValetudoLabel = { Identifier = "ValetudoLabel", Parent = Valetudo.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Valetudo", FontSize = 70.0, Size = 7.1, @@ -241,7 +251,13 @@ local ValetudoLabel = { FadeDistances = { 1.0, 150.0 }, FadeWidths = { 1.0, 50.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_other" + }, GUI = { Name = "Valetudo Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Ananke Group/Valetudo", @@ -251,9 +267,6 @@ local ValetudoLabel = { asset.onInitialize(function() - openspace.spice.loadKernel(kernel.jup344) - - openspace.addSceneGraphNode(Eupheme) openspace.addSceneGraphNode(EuphemeTrail) openspace.addSceneGraphNode(EuphemeLabel) @@ -279,9 +292,6 @@ asset.onDeinitialize(function() openspace.removeSceneGraphNode(EuphemeLabel) openspace.removeSceneGraphNode(EuphemeTrail) openspace.removeSceneGraphNode(Eupheme) - - - openspace.spice.unloadKernel(kernel.jup344) end) asset.export(Eupheme) @@ -300,7 +310,6 @@ asset.export(ValetudoLabel) asset.meta = { Name = "Jupiter Pasiphae Other Moons", - Version = "1.0", Description = [[Procedural Globe asset containing Jupiter's Other Group moons: S2003J12, S/2003J3, S2011J1, S2003J19, S2003J10, S2003J9, and S2003J2. Blank globes and SPICE trails are generated for each moon]], diff --git a/data/assets/scene/solarsystem/planets/jupiter/minor/pasiphae_group.asset b/data/assets/scene/solarsystem/planets/jupiter/minor/pasiphae_group.asset index 981e3c628b..e31425a8f2 100644 --- a/data/assets/scene/solarsystem/planets/jupiter/minor/pasiphae_group.asset +++ b/data/assets/scene/solarsystem/planets/jupiter/minor/pasiphae_group.asset @@ -1,5 +1,7 @@ local transforms = asset.require("../transforms") -local kernel = asset.require("../kernels") +local kernels344 = asset.require("../kernels344") +local kernels346 = asset.require("../kernels346") +local coreKernels = asset.require("spice/core") @@ -9,15 +11,13 @@ local Euporie = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "EUPORIE", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Euporie, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 2000, 2000, 2000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 2000, 2000, 2000 } }, Tag = { "moon_solarSystem", @@ -40,8 +40,8 @@ local EuporieTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "EUPORIE", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Euporie, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 538.78, @@ -51,6 +51,7 @@ local EuporieTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_pasiphae", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -64,8 +65,8 @@ local EuporieLabel = { Identifier = "EuporieLabel", Parent = Euporie.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Euporie", FontSize = 70.0, Size = 7.1, @@ -77,7 +78,13 @@ local EuporieLabel = { FadeDistances = { 1.5, 140.0 }, FadeWidths = { 0.5, 50.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_pasiphae" + }, GUI = { Name = "Euporie Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Pasiphae Group/Euporie", @@ -91,15 +98,13 @@ local S2003J18 = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "555", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.S2003J18, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 2000, 2000, 2000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 2000, 2000, 2000 } }, Tag = { "moon_solarSystem", @@ -122,8 +127,8 @@ local S2003J18Trail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "555", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.S2003J18, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 587.38, @@ -133,6 +138,7 @@ local S2003J18Trail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_pasiphae", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -146,8 +152,8 @@ local S2003J18Label = { Identifier = "S2003J18Label", Parent = S2003J18.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "S/2003 J 18", FontSize = 70.0, Size = 7.1, @@ -159,7 +165,13 @@ local S2003J18Label = { FadeDistances = { 1.5, 140.0 }, FadeWidths = { 0.5, 50.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_pasiphae" + }, GUI = { Name = "S/2003 J 18 Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Pasiphae Group/S2003J18", @@ -173,15 +185,13 @@ local Helike = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "HELIKE", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Helike, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 4000, 4000, 4000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 4000, 4000, 4000 } }, Tag = { "moon_solarSystem", @@ -204,8 +214,8 @@ local HelikeTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "HELIKE", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Helike, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 601.40, @@ -215,6 +225,7 @@ local HelikeTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_pasiphae", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -228,8 +239,8 @@ local HelikeLabel = { Identifier = "HelikeLabel", Parent = Helike.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Helike", FontSize = 70.0, Size = 7.1, @@ -241,7 +252,13 @@ local HelikeLabel = { FadeDistances = { 1.5, 140.0 }, FadeWidths = { 0.5, 50.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_pasiphae" + }, GUI = { Name = "Helike Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Pasiphae Group/Helike", @@ -255,15 +272,13 @@ local Orthosie = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "ORTHOSIE", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Orthosie, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 2000, 2000, 2000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 2000, 2000, 2000 } }, Tag = { "moon_solarSystem", @@ -286,8 +301,8 @@ local OrthosieTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "ORTHOSIE", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Orthosie, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 602.62, @@ -297,6 +312,7 @@ local OrthosieTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_pasiphae", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -310,8 +326,8 @@ local OrthosieLabel = { Identifier = "OrthosieLabel", Parent = Orthosie.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Orthosie", FontSize = 70.0, Size = 7.1, @@ -323,7 +339,13 @@ local OrthosieLabel = { FadeDistances = { 1.5, 140.0 }, FadeWidths = { 0.5, 50.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_pasiphae" + }, GUI = { Name = "Orthosie Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Pasiphae Group/Orthosie", @@ -337,15 +359,13 @@ local S2016J1 = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "554", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.S2016J1, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 3000, 3000, 3000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 3000, 3000, 3000 } }, Tag = { "moon_solarSystem", @@ -368,8 +388,8 @@ local S2016J1Trail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "554", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.S2016J1, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 603.83, @@ -379,6 +399,7 @@ local S2016J1Trail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_pasiphae", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -392,8 +413,8 @@ local S2016J1Label = { Identifier = "S2016J1Label", Parent = S2016J1.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "S/2016 J 1", FontSize = 70.0, Size = 7.1, @@ -405,7 +426,13 @@ local S2016J1Label = { FadeDistances = { 1.5, 140.0 }, FadeWidths = { 0.5, 50.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_pasiphae" + }, GUI = { Name = "S/2016 J 1 Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Pasiphae Group/S2016J1", @@ -419,15 +446,13 @@ local S2003J15 = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "558", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.S2003J15, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 2000, 2000, 2000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 2000, 2000, 2000 } }, Tag = { "moon_solarSystem", @@ -450,8 +475,8 @@ local S2003J15Trail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "558", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.S2003J15, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 699.68, @@ -461,6 +486,7 @@ local S2003J15Trail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_pasiphae", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -474,8 +500,8 @@ local S2003J15Label = { Identifier = "S2003J15Label", Parent = S2003J15.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "S/2003 J 15", FontSize = 70.0, Size = 7.1, @@ -487,7 +513,13 @@ local S2003J15Label = { FadeDistances = { 1.5, 140.0 }, FadeWidths = { 0.5, 50.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_pasiphae" + }, GUI = { Name = "S/2003 J 15 Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Pasiphae Group/S2003J15", @@ -501,15 +533,13 @@ local Aoede = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "AOEDE", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Aoede, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 4000, 4000, 4000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 4000, 4000, 4000 } }, Tag = { "moon_solarSystem", @@ -532,8 +562,8 @@ local AoedeTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "AOEDE", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Aoede, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 714.66, @@ -543,6 +573,7 @@ local AoedeTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_pasiphae", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -556,8 +587,8 @@ local AoedeLabel = { Identifier = "AoedeLabel", Parent = Aoede.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Aoede", FontSize = 70.0, Size = 7.1, @@ -569,7 +600,13 @@ local AoedeLabel = { FadeDistances = { 1.5, 140.0 }, FadeWidths = { 0.5, 50.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_pasiphae" + }, GUI = { Name = "Aoede Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Pasiphae Group/Aoede", @@ -583,15 +620,13 @@ local Callirrhoe = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "CALLIRRHOE", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Callirrhoe, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 9000, 9000, 9000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 9000, 9000, 9000 } }, Tag = { "moon_solarSystem", @@ -614,8 +649,8 @@ local CallirrhoeTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "CALLIRRHOE", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Callirrhoe, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 727.11, @@ -625,6 +660,7 @@ local CallirrhoeTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_pasiphae", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -638,8 +674,8 @@ local CallirrhoeLabel = { Identifier = "CallirrhoeLabel", Parent = Callirrhoe.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Callirrhoe", FontSize = 70.0, Size = 7.1, @@ -651,7 +687,13 @@ local CallirrhoeLabel = { FadeDistances = { 1.5, 140.0 }, FadeWidths = { 0.5, 50.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_pasiphae" + }, GUI = { Name = "Callirrhoe Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Pasiphae Group/Callirrhoe", @@ -665,15 +707,13 @@ local Eurydome = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "EURYDOME", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Eurydome, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 3000, 3000, 3000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 3000, 3000, 3000 } }, Tag = { "moon_solarSystem", @@ -696,8 +736,8 @@ local EurydomeTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "EURYDOME", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Eurydome, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 723.36, @@ -707,6 +747,7 @@ local EurydomeTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_pasiphae", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -720,8 +761,8 @@ local EurydomeLabel = { Identifier = "EurydomeLabel", Parent = Eurydome.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Eurydome", FontSize = 70.0, Size = 7.1, @@ -733,7 +774,13 @@ local EurydomeLabel = { FadeDistances = { 1.5, 140.0 }, FadeWidths = { 0.5, 50.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_pasiphae" + }, GUI = { Name = "Eurydome Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Pasiphae Group/Eurydome", @@ -747,15 +794,13 @@ local Kore = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "KORE", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Kore, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 2000, 2000, 2000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 2000, 2000, 2000 } }, Tag = { "moon_solarSystem", @@ -778,8 +823,8 @@ local KoreTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "KORE", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Kore, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 776.02, @@ -789,6 +834,7 @@ local KoreTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_pasiphae", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -802,8 +848,8 @@ local KoreLabel = { Identifier = "KoreLabel", Parent = Kore.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Kore", FontSize = 70.0, Size = 7.1, @@ -815,7 +861,13 @@ local KoreLabel = { FadeDistances = { 1.5, 140.0 }, FadeWidths = { 0.5, 50.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_pasiphae" + }, GUI = { Name = "Kore Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Pasiphae Group/Kore", @@ -829,15 +881,13 @@ local Cyllene = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "CYLLENE", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Cyllene, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 2000, 2000, 2000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 2000, 2000, 2000 } }, Tag = { "moon_solarSystem", @@ -860,8 +910,8 @@ local CylleneTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "CYLLENE", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Cyllene, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 731.10, @@ -871,6 +921,7 @@ local CylleneTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_pasiphae", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -884,8 +935,8 @@ local CylleneLabel = { Identifier = "CylleneLabel", Parent = Cyllene.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Cyllene", FontSize = 70.0, Size = 7.1, @@ -897,7 +948,13 @@ local CylleneLabel = { FadeDistances = { 1.5, 140.0 }, FadeWidths = { 0.5, 50.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_pasiphae" + }, GUI = { Name = "Cyllene Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Pasiphae Group/Cyllene", @@ -911,15 +968,13 @@ local S2011J2 = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "556", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.S2011J2, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 1000, 1000, 1000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 1000, 1000, 1000 } }, Tag = { "moon_solarSystem", @@ -942,8 +997,8 @@ local S2011J2Trail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "556", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.S2011J2, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 731.32, @@ -953,6 +1008,7 @@ local S2011J2Trail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_pasiphae", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -966,8 +1022,8 @@ local S2011J2Label = { Identifier = "S2011J2Label", Parent = S2011J2.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "S/2011 J 2", FontSize = 70.0, Size = 7.1, @@ -979,7 +1035,13 @@ local S2011J2Label = { FadeDistances = { 1.5, 140.0 }, FadeWidths = { 0.5, 50.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_pasiphae" + }, GUI = { Name = "S/2011 J 2 Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Pasiphae Group/S2011J2", @@ -993,15 +1055,13 @@ local S2017J1 = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "559", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.S2017J1, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 2000, 2000, 2000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 2000, 2000, 2000 } }, Tag = { "moon_solarSystem", @@ -1024,8 +1084,8 @@ local S2017J1Trail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "559", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.S2017J1, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 734.15, @@ -1035,6 +1095,7 @@ local S2017J1Trail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_pasiphae", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -1048,8 +1109,8 @@ local S2017J1Label = { Identifier = "S2017J1Label", Parent = S2017J1.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "S/2017 J 1", FontSize = 70.0, Size = 7.1, @@ -1061,7 +1122,13 @@ local S2017J1Label = { FadeDistances = { 1.5, 140.0 }, FadeWidths = { 0.5, 50.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_pasiphae" + }, GUI = { Name = "S/2017 J 1 Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Pasiphae Group/S2017J1", @@ -1075,15 +1142,13 @@ local S2003J4 = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "55502", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.S2003J4, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 2000, 2000, 2000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 2000, 2000, 2000 } }, Tag = { "moon_solarSystem", @@ -1106,8 +1171,8 @@ local S2003J4Trail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "55502", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.S2003J4, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 739.29, @@ -1117,6 +1182,7 @@ local S2003J4Trail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_pasiphae", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -1130,8 +1196,8 @@ local S2003J4Label = { Identifier = "S2003J4Label", Parent = S2003J4.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "S/2003 J 4", FontSize = 70.0, Size = 7.1, @@ -1143,7 +1209,13 @@ local S2003J4Label = { FadeDistances = { 1.5, 140.0 }, FadeWidths = { 0.5, 50.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_pasiphae" + }, GUI = { Name = "S/2003 J 4 Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Pasiphae Group/S2003J4", @@ -1157,15 +1229,13 @@ local Pasiphae = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "PASIPHAE", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Pasiphae, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 60000, 60000, 60000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 60000, 60000, 60000 } }, Tag = { "moon_solarSystem", @@ -1188,8 +1258,8 @@ local PasiphaeTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "PASIPHAE", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Pasiphae, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 731.10, @@ -1199,6 +1269,7 @@ local PasiphaeTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_pasiphae", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -1212,8 +1283,8 @@ local PasiphaeLabel = { Identifier = "PasiphaeLabel", Parent = Pasiphae.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Pasiphae", FontSize = 70.0, Size = 7.1, @@ -1225,7 +1296,13 @@ local PasiphaeLabel = { FadeDistances = { 1.5, 140.0 }, FadeWidths = { 0.5, 50.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_pasiphae" + }, GUI = { Name = "Pasiphae Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Pasiphae Group/Pasiphae", @@ -1239,15 +1316,13 @@ local Hegemone = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "HEGEMONE", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Hegemone, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 3000, 3000, 3000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 3000, 3000, 3000 } }, Tag = { "moon_solarSystem", @@ -1270,8 +1345,8 @@ local HegemoneTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "HEGEMONE", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Hegemone, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 745.50, @@ -1281,6 +1356,7 @@ local HegemoneTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_pasiphae", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -1294,8 +1370,8 @@ local HegemoneLabel = { Identifier = "HegemoneLabel", Parent = Hegemone.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Hegemone", FontSize = 70.0, Size = 7.1, @@ -1307,7 +1383,13 @@ local HegemoneLabel = { FadeDistances = { 1.5, 140.0 }, FadeWidths = { 0.5, 50.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_pasiphae" + }, GUI = { Name = "Hegemone Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Pasiphae Group/Hegemone", @@ -1321,15 +1403,13 @@ local Sinope = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "SINOPE", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Sinope, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 38000, 38000, 38000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 38000, 38000, 38000 } }, Tag = { "moon_solarSystem", @@ -1352,8 +1432,8 @@ local SinopeTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "SINOPE", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Sinope, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 739.33, @@ -1363,6 +1443,7 @@ local SinopeTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_pasiphae", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -1376,8 +1457,8 @@ local SinopeLabel = { Identifier = "SinopeLabel", Parent = Sinope.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Sinope", FontSize = 70.0, Size = 7.1, @@ -1389,7 +1470,13 @@ local SinopeLabel = { FadeDistances = { 1.5, 140.0 }, FadeWidths = { 0.5, 50.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_pasiphae" + }, GUI = { Name = "Sinope Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Pasiphae Group/Sinope", @@ -1403,15 +1490,13 @@ local Sponde = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "SPONDE", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Sponde, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 2000, 2000, 2000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 2000, 2000, 2000 } }, Tag = { "moon_solarSystem", @@ -1434,8 +1519,8 @@ local SpondeTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "SPONDE", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Sponde, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 771.60, @@ -1445,6 +1530,7 @@ local SpondeTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_pasiphae", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -1458,8 +1544,8 @@ local SpondeLabel = { Identifier = "SpondeLabel", Parent = Sponde.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Sponde", FontSize = 70.0, Size = 7.1, @@ -1471,7 +1557,13 @@ local SpondeLabel = { FadeDistances = { 1.5, 140.0 }, FadeWidths = { 0.5, 50.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_pasiphae" + }, GUI = { Name = "Sponde Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Pasiphae Group/Sponde", @@ -1485,15 +1577,13 @@ local Autonoe = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "AUTONOE", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Autonoe, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 4000, 4000, 4000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 4000, 4000, 4000 } }, Tag = { "moon_solarSystem", @@ -1516,8 +1606,8 @@ local AutonoeTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "AUTONOE", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Autonoe, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 772.17, @@ -1527,6 +1617,7 @@ local AutonoeTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_pasiphae", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -1540,8 +1631,8 @@ local AutonoeLabel = { Identifier = "AutonoeLabel", Parent = Autonoe.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Autonoe", FontSize = 70.0, Size = 7.1, @@ -1553,7 +1644,13 @@ local AutonoeLabel = { FadeDistances = { 1.5, 140.0 }, FadeWidths = { 0.5, 50.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_pasiphae" + }, GUI = { Name = "Autonoe Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Pasiphae Group/Autonoe", @@ -1567,15 +1664,13 @@ local Megaclite = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "MEGACLITE", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Megaclite, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 5000, 5000, 5000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 5000, 5000, 5000 } }, Tag = { "moon_solarSystem", @@ -1598,8 +1693,8 @@ local MegacliteTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "MEGACLITE", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Megaclite, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 792.44, @@ -1609,6 +1704,7 @@ local MegacliteTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_pasiphae", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -1622,8 +1718,8 @@ local MegacliteLabel = { Identifier = "MegacliteLabel", Parent = Megaclite.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Megaclite", FontSize = 70.0, Size = 7.1, @@ -1635,7 +1731,13 @@ local MegacliteLabel = { FadeDistances = { 1.5, 140.0 }, FadeWidths = { 0.5, 50.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_pasiphae" + }, GUI = { Name = "Megaclite Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Pasiphae Group/Megaclite", @@ -1649,15 +1751,13 @@ local S2016J4 = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "55519", - Observer = "JUPITER BARYCENTER" + Target = kernels346.ID.S2016J4, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 1000, 1000, 1000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 1000, 1000, 1000 } }, Tag = { "moon_solarSystem", @@ -1680,8 +1780,8 @@ local S2016J4Trail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "55519", - Observer = "JUPITER BARYCENTER" + Target = kernels346.ID.S2016J4, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 743.69, @@ -1691,6 +1791,7 @@ local S2016J4Trail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_pasiphae", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -1704,8 +1805,8 @@ local S2016J4Label = { Identifier = "S2016J4Label", Parent = S2016J4.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "S/2016 J 4", FontSize = 70.0, Size = 7.1, @@ -1717,7 +1818,13 @@ local S2016J4Label = { FadeDistances = { 1.5, 140.0 }, FadeWidths = { 0.5, 50.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_pasiphae" + }, GUI = { Name = "S/2016 J 4 Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Pasiphae Group/S2016J4", @@ -1731,15 +1838,13 @@ local S2017J6 = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "567", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.S2017J6, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 2000, 2000, 2000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 2000, 2000, 2000 } }, Tag = { "moon_solarSystem", @@ -1762,8 +1867,8 @@ local S2017J6Trail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "567", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.S2017J6, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 683.0, @@ -1773,6 +1878,7 @@ local S2017J6Trail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_pasiphae", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -1786,8 +1892,8 @@ local S2017J6Label = { Identifier = "S2017J6Label", Parent = S2017J6.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "S/2017 J 6", FontSize = 70.0, Size = 7.1, @@ -1799,7 +1905,13 @@ local S2017J6Label = { FadeDistances = { 1.5, 140.0 }, FadeWidths = { 0.5, 50.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_pasiphae" + }, GUI = { Name = "S/2017 J 6 Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Pasiphae Group/S2017J6", @@ -1813,15 +1925,13 @@ local S2003J23 = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "55507", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.S2003J23, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 2000, 2000, 2000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 2000, 2000, 2000 } }, Tag = { "moon_solarSystem", @@ -1844,8 +1954,8 @@ local S2003J23Trail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "55507", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.S2003J23, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 792.00, @@ -1855,6 +1965,7 @@ local S2003J23Trail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_pasiphae", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -1868,8 +1979,8 @@ local S2003J23Label = { Identifier = "S2003J23Label", Parent = S2003J23.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "S/2003 J 23", FontSize = 70.0, Size = 7.1, @@ -1881,7 +1992,13 @@ local S2003J23Label = { FadeDistances = { 1.5, 140.0 }, FadeWidths = { 0.5, 50.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_pasiphae" + }, GUI = { Name = "S/2003 J 23 Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Pasiphae Group/S2003J23", @@ -1891,10 +2008,6 @@ local S2003J23Label = { asset.onInitialize(function() - openspace.spice.loadKernel(kernel.jup344) - openspace.spice.loadKernel(kernel.jup346) - - openspace.addSceneGraphNode(Euporie) openspace.addSceneGraphNode(EuporieTrail) openspace.addSceneGraphNode(EuporieLabel) @@ -2080,10 +2193,6 @@ asset.onDeinitialize(function() openspace.removeSceneGraphNode(EuporieLabel) openspace.removeSceneGraphNode(EuporieTrail) openspace.removeSceneGraphNode(Euporie) - - - openspace.spice.unloadKernel(kernel.jup346) - openspace.spice.unloadKernel(kernel.jup344) end) asset.export(Euporie) @@ -2179,14 +2288,14 @@ asset.export(S2003J23Trail) asset.export(S2003J23Label) + asset.meta = { - Name = "Jupiter Pasiphae Group Moons", - Version = "1.0", - Description = [[Procedural Globe asset containing Jupiter's Pasiphae Group moons: - Euporie, S2003J18, Helike, Orthosie, S2016J1, S2003J15, Aoede, Callirrhoe, Eurydome, - Kore, Cyllene, S2011J2, S2017J1, S2003J4, Pasiphae, Hegemone, Sinope, Sponde, - Autonoe and Megaclite. Blank globes and SPICE trails are generated for each moon]], - Author = "OpenSpace Team", - URL = "http://openspaceproject.com", - License = "MIT license" + Name = "Jupiter Pasiphae Group Moons", + Description = [[Procedural Globe asset containing Jupiter's Pasiphae Group moons: + Euporie, S2003J18, Helike, Orthosie, S2016J1, S2003J15, Aoede, Callirrhoe, Eurydome, + Kore, Cyllene, S2011J2, S2017J1, S2003J4, Pasiphae, Hegemone, Sinope, Sponde, + Autonoe and Megaclite. Blank globes and SPICE trails are generated for each moon]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" } diff --git a/data/assets/scene/solarsystem/planets/jupiter/minor/themisto_group.asset b/data/assets/scene/solarsystem/planets/jupiter/minor/themisto_group.asset index 3f56ed269f..d353185aee 100644 --- a/data/assets/scene/solarsystem/planets/jupiter/minor/themisto_group.asset +++ b/data/assets/scene/solarsystem/planets/jupiter/minor/themisto_group.asset @@ -1,5 +1,6 @@ local transforms = asset.require("../transforms") -local kernel = asset.require("../kernels") +local kernels344 = asset.require("../kernels344") +local coreKernels = asset.require("spice/core") @@ -9,15 +10,13 @@ local Themisto = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "THEMISTO", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Themisto, + Observer = coreKernels.ID.JupiterBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 8000, 8000, 8000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 8000, 8000, 8000 } }, Tag = { "moon_solarSystem", @@ -40,8 +39,8 @@ local ThemistoTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "THEMISTO", - Observer = "JUPITER BARYCENTER" + Target = kernels344.ID.Themisto, + Observer = coreKernels.ID.JupiterBarycenter }, Color = { 0.4, 0.3, 0.01 }, Period = 129.87, @@ -51,6 +50,7 @@ local ThemistoTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_jupiter", + "moonTrail_themisto", "moonTrail_minor", "moonTrail_minor_jupiter" }, @@ -64,8 +64,8 @@ local ThemistoLabel = { Identifier = "ThemistoLabel", Parent = Themisto.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Themisto", FontSize = 70.0, Size = 7.1, @@ -77,7 +77,13 @@ local ThemistoLabel = { FadeDistances = { 1.5, 120.0 }, FadeWidths = { 0.5, 50.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_jupiter", + "minor_moon_labels_themisto" + }, GUI = { Name = "Themisto Label", Path = "/Solar System/Planets/Jupiter/Minor Moons/Themisto Group/Themisto", @@ -87,9 +93,6 @@ local ThemistoLabel = { asset.onInitialize(function() - openspace.spice.loadKernel(kernel.jup344) - - openspace.addSceneGraphNode(Themisto) openspace.addSceneGraphNode(ThemistoTrail) openspace.addSceneGraphNode(ThemistoLabel) @@ -99,9 +102,6 @@ asset.onDeinitialize(function() openspace.removeSceneGraphNode(ThemistoLabel) openspace.removeSceneGraphNode(ThemistoTrail) openspace.removeSceneGraphNode(Themisto) - - - openspace.spice.unloadKernel(kernel.jup344) end) asset.export(Themisto) @@ -112,7 +112,6 @@ asset.export(ThemistoLabel) asset.meta = { Name = "Jupiter Themisto Group Moons", - Version = "1.0", Description = [[Procedural Globe asset containing Jupiter's Themisto Group moons: Themisto. Blank globes and SPICE trails are generated for each moon]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/planets/jupiter/minor_moons.asset b/data/assets/scene/solarsystem/planets/jupiter/minor_moons.asset index 5d7b4f1d81..83641da904 100644 --- a/data/assets/scene/solarsystem/planets/jupiter/minor_moons.asset +++ b/data/assets/scene/solarsystem/planets/jupiter/minor_moons.asset @@ -13,11 +13,11 @@ local JupiterMinorMoonsOn = { Identifier = "os.solarsystem.JupiterMinorMoonsOn", Name = "Turn ON minor moons and trails", Command = [[ - local trails = openspace.getProperty("{moonTrail_minor_jupiter}.Renderable.Enabled") - local trails_fade = openspace.getProperty("{moonTrail_minor_jupiter}.Renderable.Fade") + local trails = openspace.property("{moonTrail_minor_jupiter}.Renderable.Enabled") + local trails_fade = openspace.property("{moonTrail_minor_jupiter}.Renderable.Fade") - local moons = openspace.getProperty("{moon_minor_jupiter}.Renderable.Enabled") - local moons_fade = openspace.getProperty("{moon_minor_jupiter}.Renderable.Fade") + local moons = openspace.property("{moon_minor_jupiter}.Renderable.Enabled") + local moons_fade = openspace.property("{moon_minor_jupiter}.Renderable.Fade") for i, v in pairs(trails_fade) do openspace.setPropertyValueSingle(trails[i], true) @@ -31,18 +31,18 @@ local JupiterMinorMoonsOn = { ]], Documentation = "Turn ON Jupiter's minor moons and their trails", GuiPath = "/Solar System/Jupiter", - IsLocal = true + IsLocal = false } local JupiterMinorMoonsOff = { Identifier = "os.solarsystem.JupiterMinorMoonsOff", Name = "Turn OFF minors moon and trails", Command = [[ - local trails = openspace.getProperty("{moonTrail_minor_jupiter}.Renderable.Enabled") - local trails_fade = openspace.getProperty("{moonTrail_minor_jupiter}.Renderable.Fade") + local trails = openspace.property("{moonTrail_minor_jupiter}.Renderable.Enabled") + local trails_fade = openspace.property("{moonTrail_minor_jupiter}.Renderable.Fade") - local moons = openspace.getProperty("{moon_minor_jupiter}.Renderable.Enabled") - local moons_fade = openspace.getProperty("{moon_minor_jupiter}.Renderable.Fade") + local moons = openspace.property("{moon_minor_jupiter}.Renderable.Enabled") + local moons_fade = openspace.property("{moon_minor_jupiter}.Renderable.Fade") for i, v in pairs(trails_fade) do openspace.setPropertyValueSingle( @@ -66,7 +66,7 @@ local JupiterMinorMoonsOff = { ]], Documentation = "Turn OFF Jupiter's minor moons and their trails", GuiPath = "/Solar System/Jupiter", - IsLocal = true + IsLocal = false } @@ -87,7 +87,6 @@ asset.export("JupiterMinorMoonsOff", JupiterMinorMoonsOff.Identifier) asset.meta = { Name = "Jupiter Minor Moons", - Version = "1.1", Description = [[Meta asset containing eight moon groups: Ananke, Carme, Carpo, Himalia, Pasiphae, Themisto, Inner, and Other]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/planets/jupiter/trail.asset b/data/assets/scene/solarsystem/planets/jupiter/trail.asset index 79947ce385..45c8633c63 100644 --- a/data/assets/scene/solarsystem/planets/jupiter/trail.asset +++ b/data/assets/scene/solarsystem/planets/jupiter/trail.asset @@ -1,5 +1,5 @@ -asset.require("spice/base") local transforms = asset.require("scene/solarsystem/sun/transforms") +local coreKernels = asset.require("spice/core") @@ -10,8 +10,8 @@ local JupiterTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "JUPITER", - Observer = "SSB" + Target = coreKernels.ID.Jupiter, + Observer = coreKernels.ID.SolarSystemBarycenter }, Color = { 0.8, 0.7, 0.7 }, Period = 4330.595, @@ -39,9 +39,7 @@ asset.export(JupiterTrail) asset.meta = { Name = "Jupiter Trail", - Version = "1.1", - Description = [[Trail of Jupiter as observed by the Sun. Data from NASA Spice (see - base spice asset)]], + Description = "Trail of Jupiter as observed by the Sun", Author = "OpenSpace Team", URL = "http://openspaceproject.com", License = "MIT license" diff --git a/data/assets/scene/solarsystem/planets/jupiter/trail_barycenter.asset b/data/assets/scene/solarsystem/planets/jupiter/trail_barycenter.asset index a5616525b6..c5a96ed6bb 100644 --- a/data/assets/scene/solarsystem/planets/jupiter/trail_barycenter.asset +++ b/data/assets/scene/solarsystem/planets/jupiter/trail_barycenter.asset @@ -1,5 +1,5 @@ -asset.require("spice/base") local transforms = asset.require("scene/solarsystem/sun/transforms") +local coreKernels = asset.require("spice/core") @@ -8,15 +8,15 @@ local JupiterBarycenterTrail = { Parent = transforms.SolarSystemBarycenter.Identifier, Renderable = { Type = "RenderableTrailOrbit", + Enabled = false, Translation = { Type = "SpiceTranslation", - Target = "JUPITER BARYCENTER", - Observer = "SSB" + Target = coreKernels.ID.JupiterBarycenter, + Observer = coreKernels.Frame.SolarSystemBarycenter }, Color = { 0.8, 0.7, 0.7 }, Period = 4330.595, - Resolution = 1000, - Enabled = false + Resolution = 1000 }, Tag = { "planetTrail_solarSystem", "planetTrail_giants" }, GUI = { @@ -40,9 +40,7 @@ asset.export(JupiterBarycenterTrail) asset.meta = { Name = "Jupiter Trail", - Version = "1.1", - Description = [[Trail of Jupiter's Barycenter as observed by the Sun. Data from NASA - Spice (see base spice asset)]], + Description = "Trail of Jupiter's Barycenter as observed by the Sun", Author = "OpenSpace Team", URL = "http://openspaceproject.com", License = "MIT license" diff --git a/data/assets/scene/solarsystem/planets/jupiter/trail_earth.asset b/data/assets/scene/solarsystem/planets/jupiter/trail_earth.asset index 2b86d42e8e..ece03e2ec5 100644 --- a/data/assets/scene/solarsystem/planets/jupiter/trail_earth.asset +++ b/data/assets/scene/solarsystem/planets/jupiter/trail_earth.asset @@ -1,6 +1,6 @@ -asset.require("spice/base") local transforms = asset.require("scene/solarsystem/sun/transforms") local earthTransforms = asset.require("scene/solarsystem/planets/earth/transforms") +local coreKernels = asset.require("spice/core") @@ -9,15 +9,15 @@ local JupiterTrailEarth = { Parent = earthTransforms.EarthBarycenter.Identifier, Renderable = { Type = "RenderableTrailOrbit", + Enabled = false, Translation = { Type = "SpiceTranslation", - Target = "JUPITER", - Observer = "EARTH" + Target = coreKernels.ID.Jupiter, + Observer = coreKernels.ID.Earth }, - Color = { 1.0, 0.5, 0.2 }, - Period = 224.695, - Resolution = 1000, - Enabled = false + Color = { 0.8, 0.7, 0.7 }, + Period = 4375.0, + Resolution = 1000 }, Tag = { "planetTrail_solarSystem_alt", "planetTrail_terrestrial_alt" }, GUI = { @@ -41,9 +41,7 @@ asset.export(JupiterTrailEarth) asset.meta = { Name = "Jupiter Trail from Earth", - Version = "1.1", - Description = [[Trail of Jupiter as observed by the Earth. Data from NASA SPICE (see - base spice asset)]], + Description = "Trail of Jupiter as observed by the Earth", Author = "OpenSpace Team", URL = "http://openspaceproject.com", License = "MIT license" diff --git a/data/assets/scene/solarsystem/planets/jupiter/transforms.asset b/data/assets/scene/solarsystem/planets/jupiter/transforms.asset index b821473516..77636066a9 100644 --- a/data/assets/scene/solarsystem/planets/jupiter/transforms.asset +++ b/data/assets/scene/solarsystem/planets/jupiter/transforms.asset @@ -1,5 +1,5 @@ -asset.require("spice/base") local transforms = asset.require("scene/solarsystem/sun/transforms") +local coreKernels = asset.require("spice/core") @@ -9,8 +9,8 @@ local JupiterBarycenter = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "JUPITER BARYCENTER", - Observer = "SSB" + Target = coreKernels.ID.JupiterBarycenter, + Observer = coreKernels.ID.SolarSystemBarycenter } }, GUI = { @@ -35,7 +35,6 @@ asset.export(JupiterBarycenter) asset.meta = { Name = "Jupiter Transforms", - Version = "1.1", Description = "Jupiter Barycenter transform", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/mars/atmosphere.asset b/data/assets/scene/solarsystem/planets/mars/atmosphere.asset index 90a2ee01b2..d66b766f24 100644 --- a/data/assets/scene/solarsystem/planets/mars/atmosphere.asset +++ b/data/assets/scene/solarsystem/planets/mars/atmosphere.asset @@ -67,7 +67,6 @@ asset.export(Atmosphere) asset.meta = { Name = "Mars Atmosphere", - Version = "1.1", Description = "RenderableAtmosphere for Mars", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/mars/default_layers.asset b/data/assets/scene/solarsystem/planets/mars/default_layers.asset index 564c87875c..48affce173 100644 --- a/data/assets/scene/solarsystem/planets/mars/default_layers.asset +++ b/data/assets/scene/solarsystem/planets/mars/default_layers.asset @@ -1,45 +1,20 @@ -asset.require("./layers/colorlayers/mars_texture", false) -asset.require("./layers/colorlayers/moc_wa_color_utah", true) -asset.require("./layers/colorlayers/moc_wa_color_sweden", false) -asset.require("./layers/colorlayers/moc_wa_color_newyork", false) -asset.require("./layers/colorlayers/viking_mdim_utah", false) -asset.require("./layers/colorlayers/viking_mdim_sweden", false) -asset.require("./layers/colorlayers/viking_mdim_newyork", false) -asset.require("./layers/colorlayers/mola_pseudo_color_utah", false) -asset.require("./layers/colorlayers/mola_pseudo_color_sweden", false) -asset.require("./layers/colorlayers/mola_pseudo_color_newyork", false) -asset.require("./layers/colorlayers/mola_hrsc_utah", false) -asset.require("./layers/colorlayers/mola_hrsc_sweden", false) -asset.require("./layers/colorlayers/mola_hrsc_newyork", false) -asset.require("./layers/colorlayers/themis_ir_day_utah", false) -asset.require("./layers/colorlayers/themis_ir_day_sweden", false) -asset.require("./layers/colorlayers/themis_ir_day_newyork", false) -asset.require("./layers/colorlayers/themis_ir_night_utah", false) -asset.require("./layers/colorlayers/themis_ir_night_sweden", false) -asset.require("./layers/colorlayers/themis_ir_night_newyork", false) -asset.require("./layers/colorlayers/ctx_mosaic_utah", false) -asset.require("./layers/colorlayers/ctx_mosaic_sweden", false) -asset.require("./layers/colorlayers/ctx_mosaic_newyork", false) -asset.require("./layers/colorlayers/ctx_blended", false) -asset.require("./layers/colorlayers/hirise", false) -asset.require("./layers/colorlayers/hirisels", false) - -asset.require("./layers/heightlayers/mola_utah", false) -asset.require("./layers/heightlayers/mola_sweden", false) -asset.require("./layers/heightlayers/mdem200m", true) -asset.require("./layers/heightlayers/hirisels", false) - -asset.require("./layers/overlays/indices", false) -asset.require("./layers/overlays/size_reference", false) +asset.require("./layers/base_layers", true) +asset.require("./layers/utah_layers", true) +asset.require("./layers/sweden_layers", false) +asset.require("./layers/newyork_layers", false) asset.meta = { Name = "Default Mars Layers", - Version = "1.1", - Description = [[Default Mars layers are: MOC WA Color, Viking MDIM, MOLA Pseudo Color, - MOLA HRSC, Themis IR Day, Themis IR Night, CTX Mosaic, CTX Blended beta01, HiRISE, and - HiRISE Local Set]], + Description = [[Default Mars layers are: Mars texture, CTX Blended, HiRISE, + HiRISE Local Set, MOC WA Color, Viking MDIM, MOLA Pseudo Color, MOLA HRSC, + Themis IR Day, Themis IR Night, CTX Mosaic, MDEM200M (3D), HiRISE Local Set DEM (3D), + Mola Elevation (3D), Tile Indicies, and Size Reference. + + + Layers loaded from all servers + ]], Author = "OpenSpace Team", URL = "http://openspaceproject.com", License = "MIT license" diff --git a/data/assets/scene/solarsystem/planets/mars/layers/base_layers.asset b/data/assets/scene/solarsystem/planets/mars/layers/base_layers.asset new file mode 100644 index 0000000000..4eca8539dd --- /dev/null +++ b/data/assets/scene/solarsystem/planets/mars/layers/base_layers.asset @@ -0,0 +1,23 @@ +asset.require("./colorlayers/mars_texture", false) +asset.require("./colorlayers/ctx_blended", false) +asset.require("./colorlayers/hirise", false) +asset.require("./colorlayers/hirisels", false) + +asset.require("./heightlayers/mdem200m", asset.enabled) +asset.require("./heightlayers/hirisels", false) + +asset.require("./overlays/indices", false) +asset.require("./overlays/size_reference", false) + + + +asset.meta = { + Name = "Base Mars Layers", + Description = [[Base Mars layers are: Mars texture, CTX Blended, HiRISE, + HiRISE Local Set, MDEM200M (3D), HiRISE Local Set DEM (3D), Tile Indicies, + and Size Reference. + ]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/ctx_blended.asset b/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/ctx_blended.asset index 99ae7f2feb..81447549d6 100644 --- a/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/ctx_blended.asset +++ b/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/ctx_blended.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "CTX_blended", Name = "CTX Blended", Enabled = asset.enabled, - FilePath = asset.localResource("ctx_blended.vrt"), + ZIndex = 60, + FilePath = asset.resource("ctx_blended.vrt"), BlendMode = "Color", Description = [[The Bruce Murray Laboratory for Planetary Visualization has completed a 5.7 terapixel mosaic of the surface of Mars rendered at 5.0 m/px. Each pixel in the @@ -37,7 +38,6 @@ asset.export("layer", Layer) asset.meta = { Name = "CTX Blended", - Version = "1.0", Description = [[New blended CTX map for Mars from CalTech Murray lab. This map is hosted by ESRI]], Author = "Caltech Murray Lab", diff --git a/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/ctx_blended_beta01.asset b/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/ctx_blended_beta01.asset index 5f0cd47132..ed4ef25a63 100644 --- a/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/ctx_blended_beta01.asset +++ b/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/ctx_blended_beta01.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "CTX_blended_01", Name = "CTX Blended beta01", Enabled = asset.enabled, - FilePath = asset.localResource("ctx_blended_beta01.vrt"), + ZIndex = 60, + FilePath = asset.resource("ctx_blended_beta01.vrt"), BlendMode = "Color", Settings = { Gamma = 2.14, @@ -44,7 +45,6 @@ asset.export("layer", Layer) asset.meta = { Name = "CTX Blended beta01", - Version = "1.1", Description = [[New blended CTX map for Mars from CalTech Murray lab. This map is hosted by ESRI]], Author = "Caltech Murray Lab", diff --git a/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/ctx_mosaic_newyork.asset b/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/ctx_mosaic_newyork.asset index 554bd605fa..f6645e9ff4 100644 --- a/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/ctx_mosaic_newyork.asset +++ b/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/ctx_mosaic_newyork.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "CTX_Mosaic_NewYork", Name = "CTX Mosaic [New York]", Enabled = asset.enabled, - FilePath = asset.localResource("ctx_mosaic_newyork.wms"), + ZIndex = 60, + FilePath = asset.resource("ctx_mosaic_newyork.wms"), BlendMode = "Color" } @@ -25,7 +26,6 @@ asset.export("layer", Layer) asset.meta = { Name = "CTX Mosaic [New York]", - Version = "1.0", Description = [[CTX Mosaic layer for Mars globe. This layer is served from the OpenSpace servers in New York]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/ctx_mosaic_sweden.asset b/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/ctx_mosaic_sweden.asset index b4a64f4359..c36cf2170f 100644 --- a/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/ctx_mosaic_sweden.asset +++ b/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/ctx_mosaic_sweden.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "CTX_Mosaic_Sweden", Name = "CTX Mosaic [Sweden]", Enabled = asset.enabled, - FilePath = asset.localResource("ctx_mosaic_sweden.wms"), + ZIndex = 60, + FilePath = asset.resource("ctx_mosaic_sweden.wms"), BlendMode = "Color" } @@ -25,7 +26,6 @@ asset.export("layer", Layer) asset.meta = { Name = "CTX Mosaic [Sweden]", - Version = "1.0", Description = [[CTX Mosaic layer for Mars globe. This layer is served from the OpenSpace servers in Sweden]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/ctx_mosaic_utah.asset b/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/ctx_mosaic_utah.asset index 9369fc1225..923001580e 100644 --- a/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/ctx_mosaic_utah.asset +++ b/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/ctx_mosaic_utah.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "CTX_Mosaic_Utah", Name = "CTX Mosaic [Utah]", Enabled = asset.enabled, - FilePath = asset.localResource("ctx_mosaic_utah.wms"), + ZIndex = 60, + FilePath = asset.resource("ctx_mosaic_utah.wms"), BlendMode = "Color" } @@ -25,7 +26,6 @@ asset.export("layer", Layer) asset.meta = { Name = "CTX Mosaic [Utah]", - Version = "1.0", Description = [[CTX Mosaic layer for Mars globe. This layer is served from the OpenSpace servers in Utah]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/hirise.asset b/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/hirise.asset index 84a3635ec0..bca2d540f9 100644 --- a/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/hirise.asset +++ b/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/hirise.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "HiRISE-PSP", Name = "HiRISE", Enabled = asset.enabled, - FilePath = asset.localResource("hirise.vrt"), + ZIndex = 70, + FilePath = asset.resource("hirise.vrt"), BlendMode = "Color", Settings = { Gamma = 1.0, @@ -40,7 +41,6 @@ asset.export("layer", Layer) asset.meta = { Name = "HiRISE", - Version = "1.1", Description = [[Updated HiRISE layer for Mars with raw unselected imagery. This map is hosted by ESRI]], Author = "esri_astro", diff --git a/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/hirisels.asset b/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/hirisels.asset index ce3ba7880e..1e75ff7064 100644 --- a/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/hirisels.asset +++ b/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/hirisels.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "HiRISE-LS", Name = "HiRISE Local Set", Enabled = asset.enabled, - FilePath = asset.localResource("hirisels.vrt"), + ZIndex = 70, + FilePath = asset.resource("hirisels.vrt"), BlendMode = "Color", Description = [[HiRISE (High Resolution Imaging Science Experiment) is the most powerful camera ever sent to another planet, one of six instruments onboard the @@ -37,7 +38,6 @@ asset.export("layer", Layer) asset.meta = { Name = "HiRISE Local Set", - Version = "1.1", Description = [[HiRISE layer for images with corresponding DEMs. This map is hosted by ESRI]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/mars_texture.asset b/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/mars_texture.asset index 34d40999ea..70c4d29acf 100644 --- a/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/mars_texture.asset +++ b/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/mars_texture.asset @@ -2,11 +2,11 @@ local globe = asset.require("../../mars") -local texturesPath = asset.syncedResource({ +local texturesPath = asset.resource({ Name = "Mars Textures", Type = "HttpSynchronization", Identifier = "mars_textures", - Version = 1 + Version = 3 }) @@ -14,8 +14,10 @@ local Layer = { Identifier = "Mars_Texture", Name = "Mars Texture", Enabled = asset.enabled, - FilePath = texturesPath .. "mars.jpg", - Description = "Default jpg texture for Mars" + ZIndex = 5, + FilePath = texturesPath .. "mars.png", + Description = "Default jpg texture for Mars", + CacheSettings = { Enabled = false } } @@ -33,7 +35,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Mars Texutre", - Version = "1.0", Description = "Jpg texture for Mars, available for offline use", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/moc_wa_color_newyork.asset b/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/moc_wa_color_newyork.asset index e482dfd72f..b5354c64da 100644 --- a/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/moc_wa_color_newyork.asset +++ b/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/moc_wa_color_newyork.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "MOC_WA_Color_NewYork", Name = "MOC WA Color [New York]", Enabled = asset.enabled, - FilePath = asset.localResource("moc_wa_color_newyork.wms"), + ZIndex = 10, + FilePath = asset.resource("moc_wa_color_newyork.wms"), Settings = { Gamma = 1.6, Multiplier = 1.07 @@ -32,7 +33,6 @@ asset.export("layer", Layer) asset.meta = { Name = "MOC WA Color [New York]", - Version = "1.1", Description = [[Main color map layer for Mars. This map is hosted on the OpenSpace server in New York]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/moc_wa_color_sweden.asset b/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/moc_wa_color_sweden.asset index 9cf95b8188..ec2c0fa09b 100644 --- a/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/moc_wa_color_sweden.asset +++ b/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/moc_wa_color_sweden.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "MOC_WA_Color_LiU", Name = "MOC WA Color [Sweden]", Enabled = asset.enabled, - FilePath = asset.localResource("moc_wa_color_sweden.wms"), + ZIndex = 10, + FilePath = asset.resource("moc_wa_color_sweden.wms"), Settings = { Gamma = 1.6, Multiplier = 1.07 @@ -32,7 +33,6 @@ asset.export("layer", Layer) asset.meta = { Name = "MOC WA Color [Sweden]", - Version = "1.1", Description = [[Main color map layer for Mars. This map is hosted on the OpenSpace server in Sweden]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/moc_wa_color_utah.asset b/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/moc_wa_color_utah.asset index dbb028af29..2e37262615 100644 --- a/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/moc_wa_color_utah.asset +++ b/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/moc_wa_color_utah.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "MOC_WA_Color_Utah", Name = "MOC WA Color [Utah]", Enabled = asset.enabled, - FilePath = asset.localResource("moc_wa_color_utah.wms"), + ZIndex = 10, + FilePath = asset.resource("moc_wa_color_utah.wms"), Settings = { Gamma = 1.6, Multiplier = 1.07 @@ -32,7 +33,6 @@ asset.export("layer", Layer) asset.meta = { Name = "MOC WA Color [Utah]", - Version = "1.1", Description = [[Main color map layer for Mars. This map is hosted on the OpenSpace server in Utah]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/mola_hrsc_newyork.asset b/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/mola_hrsc_newyork.asset index 6cb33b8698..e45581d2e3 100644 --- a/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/mola_hrsc_newyork.asset +++ b/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/mola_hrsc_newyork.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "MOLA_HRSC_NewYork", Name = "MOLA HRSC [New York]", Enabled = asset.enabled, - FilePath = asset.localResource("mola_hrsc_newyork.wms"), + ZIndex = 10, + FilePath = asset.resource("mola_hrsc_newyork.wms"), Description = [[This map layer is colorzied based elevation data from MOLA and HRSC. Compared to MOLA Psuedo Color, this layer has no terrain shading, which is suitable for use when combing with other layers. Data Reference: @@ -28,7 +29,6 @@ asset.export("layer", Layer) asset.meta = { Name = "MOLA HRSC [New York]", - Version = "1.1", Description = [[Colorzied elevation data for Mars. This map is hosted on the OpenSpace server in New York]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/mola_hrsc_sweden.asset b/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/mola_hrsc_sweden.asset index 222504b621..43d4056b6a 100644 --- a/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/mola_hrsc_sweden.asset +++ b/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/mola_hrsc_sweden.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "MOLA_HRSC_Sweden", Name = "MOLA HRSC [Sweden]", Enabled = asset.enabled, - FilePath = asset.localResource("mola_hrsc_sweden.wms"), + ZIndex = 10, + FilePath = asset.resource("mola_hrsc_sweden.wms"), Description = [[This map layer is colorzied based elevation data from MOLA and HRSC. Compared to MOLA Psuedo Color, this layer has no terrain shading, which is suitable for use when combing with other layers. Data Reference: @@ -28,7 +29,6 @@ asset.export("layer", Layer) asset.meta = { Name = "MOLA HRSC [Sweden]", - Version = "1.1", Description = [[Colorzied elevation data for Mars. This map is hosted on the OpenSpace server in Sweden]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/mola_hrsc_utah.asset b/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/mola_hrsc_utah.asset index e4f719418b..e51a2271af 100644 --- a/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/mola_hrsc_utah.asset +++ b/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/mola_hrsc_utah.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "MOLA_HRSC_Utah", Name = "MOLA HRSC [Utah]", Enabled = asset.enabled, - FilePath = asset.localResource("mola_hrsc_utah.wms"), + ZIndex = 10, + FilePath = asset.resource("mola_hrsc_utah.wms"), Description = [[This map layer is colorzied based elevation data from MOLA and HRSC. Compared to MOLA Psuedo Color, this layer has no terrain shading, which is suitable for use when combing with other layers. Data Reference: @@ -28,7 +29,6 @@ asset.export("layer", Layer) asset.meta = { Name = "MOLA HRSC [Utah]", - Version = "1.1", Description = [[Colorzied elevation data for Mars. This map is hosted on the OpenSpace server in Sweden]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/mola_pseudo_color_newyork.asset b/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/mola_pseudo_color_newyork.asset index ec584d0ea4..0d3549f3d9 100644 --- a/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/mola_pseudo_color_newyork.asset +++ b/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/mola_pseudo_color_newyork.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "MOLA_Pseudo_Color_NewYork", Name = "MOLA Pseudo Color [New York]", Enabled = asset.enabled, - FilePath = asset.localResource("mola_pseudo_color_newyork.wms"), + ZIndex = 10, + FilePath = asset.resource("mola_pseudo_color_newyork.wms"), Description = [[This map is based on data from the Mars Orbiter Laser Altimeter (MOLA) (Smith, et al., 2001), an instrument on NASA's Mars Global Surveyor (MGS) spacecraft (Albee, et al., 2001). The image used for the base of this map @@ -38,7 +39,6 @@ asset.export("layer", Layer) asset.meta = { Name = "MOLA Pseudo Color [New York]", - Version = "1.1", Description = [[Colorzied elevation data for Mars (with shading). This map is hosted on the OpenSpace server in New York]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/mola_pseudo_color_sweden.asset b/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/mola_pseudo_color_sweden.asset index ddfcb02653..1c0ecb3318 100644 --- a/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/mola_pseudo_color_sweden.asset +++ b/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/mola_pseudo_color_sweden.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "MOLA_Pseudo_Color_Sweden", Name = "MOLA Pseudo Color [Sweden]", Enabled = asset.enabled, - FilePath = asset.localResource("mola_pseudo_color_sweden.wms"), + ZIndex = 10, + FilePath = asset.resource("mola_pseudo_color_sweden.wms"), Description = [[This map is based on data from the Mars Orbiter Laser Altimeter (MOLA) (Smith, et al., 2001), an instrument on NASA's Mars Global Surveyor (MGS) spacecraft (Albee, et al., 2001). The image used for the base of this map @@ -38,7 +39,6 @@ asset.export("layer", Layer) asset.meta = { Name = "MOLA Pseudo Color [Sweden]", - Version = "1.1", Description = [[Colorzied elevation data for Mars (with shading). This map is hosted on the OpenSpace server in Sweden]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/mola_pseudo_color_utah.asset b/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/mola_pseudo_color_utah.asset index e67262bd3a..e9d4c7ed37 100644 --- a/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/mola_pseudo_color_utah.asset +++ b/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/mola_pseudo_color_utah.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "MOLA_Pseudo_Color_Utah", Name = "MOLA Pseudo Color [Utah]", Enabled = asset.enabled, - FilePath = asset.localResource("mola_pseudo_color_utah.wms"), + ZIndex = 10, + FilePath = asset.resource("mola_pseudo_color_utah.wms"), Description = [[This map is based on data from the Mars Orbiter Laser Altimeter (MOLA) (Smith, et al., 2001), an instrument on NASA's Mars Global Surveyor (MGS) spacecraft (Albee, et al., 2001). The image used for the base of this map @@ -38,7 +39,6 @@ asset.export("layer", Layer) asset.meta = { Name = "MOLA Pseudo Color [Utah]", - Version = "1.1", Description = [[Colorzied elevation data for Mars (with shading). This map is hosted on the OpenSpace server in Utah]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/themis_ir_day_newyork.asset b/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/themis_ir_day_newyork.asset index a5dc285c20..d7ef41b728 100644 --- a/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/themis_ir_day_newyork.asset +++ b/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/themis_ir_day_newyork.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "Themis_IR_Day_NewYork", Name = "Themis IR Day [New York]", Enabled = asset.enabled, - FilePath = asset.localResource("themis_ir_day_newyork.wms"), + ZIndex = 50, + FilePath = asset.resource("themis_ir_day_newyork.wms"), BlendMode = "Color", Description = [[This mosaic represents the Thermal Emission Imaging System (THEMIS) -daytime infrared (IR) 100 meter/pixel mosaic (version 12) released in the summer @@ -35,7 +36,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Themis IR Day [New York]", - Version = "1.1", Description = [[Themis Day layer for Mars. This map is hosted on the OpenSpace server in New York]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/themis_ir_day_sweden.asset b/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/themis_ir_day_sweden.asset index 24886ae828..dfaba489ae 100644 --- a/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/themis_ir_day_sweden.asset +++ b/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/themis_ir_day_sweden.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "Themis_IR_Day_Sweden", Name = "Themis IR Day [Sweden]", Enabled = asset.enabled, - FilePath = asset.localResource("themis_ir_day_sweden.wms"), + ZIndex = 50, + FilePath = asset.resource("themis_ir_day_sweden.wms"), BlendMode = "Color", Description = [[This mosaic represents the Thermal Emission Imaging System (THEMIS) -daytime infrared (IR) 100 meter/pixel mosaic (version 12) released in the summer @@ -35,7 +36,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Themis IR Day [Sweden]", - Version = "1.1", Description = [[Themis Day layer for Mars. This map is hosted on the OpenSpace server in Sweden]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/themis_ir_day_utah.asset b/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/themis_ir_day_utah.asset index dad2f6d283..ef646296fe 100644 --- a/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/themis_ir_day_utah.asset +++ b/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/themis_ir_day_utah.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "Themis_IR_Day_Utah", Name = "Themis IR Day [Utah]", Enabled = asset.enabled, - FilePath = asset.localResource("themis_ir_day_utah.wms"), + ZIndex = 50, + FilePath = asset.resource("themis_ir_day_utah.wms"), BlendMode = "Color", Description = [[This mosaic represents the Thermal Emission Imaging System (THEMIS) -daytime infrared (IR) 100 meter/pixel mosaic (version 12) released in the summer @@ -35,7 +36,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Themis IR Day [Utah]", - Version = "1.1", Description = [[Themis Day layer for Mars. This map is hosted on the OpenSpace server in Utah]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/themis_ir_night_newyork.asset b/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/themis_ir_night_newyork.asset index 4a650074f1..edb867bf70 100644 --- a/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/themis_ir_night_newyork.asset +++ b/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/themis_ir_night_newyork.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "Themis_IR_Night_NewYork", Name = "Themis IR Night [New York]", Enabled = asset.enabled, - FilePath = asset.localResource("themis_ir_night_newyork.vrt"), + ZIndex = 50, + FilePath = asset.resource("themis_ir_night_newyork.vrt"), BlendMode = "Color", Description = [[This mosaic represents the Thermal Emission Imaging System (THEMIS) -nighttime infrared (IR) 100 meter/pixel mosaic (version 12) released in the @@ -36,7 +37,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Themis IR Night [New York]", - Version = "1.1", Description = [[Themis Night layer for Mars. This map is hosted on the OpenSpace server in New York]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/themis_ir_night_sweden.asset b/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/themis_ir_night_sweden.asset index aa288c5ffe..50da4314c8 100644 --- a/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/themis_ir_night_sweden.asset +++ b/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/themis_ir_night_sweden.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "Themis_IR_Night_Sweden", Name = "Themis IR Night [Sweden]", Enabled = asset.enabled, - FilePath = asset.localResource("themis_ir_night_sweden.vrt"), + ZIndex = 50, + FilePath = asset.resource("themis_ir_night_sweden.vrt"), BlendMode = "Color", Description = [[This mosaic represents the Thermal Emission Imaging System (THEMIS) -nighttime infrared (IR) 100 meter/pixel mosaic (version 12) released in the @@ -36,7 +37,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Themis IR Night [Sweden]", - Version = "1.1", Description = [[Themis Night layer for Mars. This map is hosted on the OpenSpace server in Sweden]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/themis_ir_night_utah.asset b/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/themis_ir_night_utah.asset index 441ce32631..f7b151f02d 100644 --- a/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/themis_ir_night_utah.asset +++ b/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/themis_ir_night_utah.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "Themis_IR_Night_Utah", Name = "Themis IR Night [Utah]", Enabled = asset.enabled, - FilePath = asset.localResource("themis_ir_night_utah.vrt"), + ZIndex = 50, + FilePath = asset.resource("themis_ir_night_utah.vrt"), BlendMode = "Color", Description = [[This mosaic represents the Thermal Emission Imaging System (THEMIS) -nighttime infrared (IR) 100 meter/pixel mosaic (version 12) released in the @@ -36,7 +37,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Themis IR Night [Utah]", - Version = "1.1", Description = [[Themis Night layer for Mars. This map is hosted on the OpenSpace server in Utah]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/viking_mdim_newyork.asset b/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/viking_mdim_newyork.asset index 85b475603d..93f17c4e1b 100644 --- a/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/viking_mdim_newyork.asset +++ b/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/viking_mdim_newyork.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "Viking_MDIM_NewYork", Name = "Viking MDIM [New York]", Enabled = asset.enabled, - FilePath = asset.localResource("viking_mdim_newyork.wms"), + ZIndex = 10, + FilePath = asset.resource("viking_mdim_newyork.wms"), Description = [[This global image map of Mars has a resolution of 256 pixels/degree (scale approximately 232 meters per pixel (m) at the equator). The colorized mosaic was completed by NASA AMES which warped the original Viking colorized @@ -43,7 +44,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Viking MDIM [New York]", - Version = "1.1", Description = [[Alternate image layer for Mars. This map is hosted on the OpenSpace server in New York]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/viking_mdim_sweden.asset b/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/viking_mdim_sweden.asset index 5c40e44373..135d9608a3 100644 --- a/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/viking_mdim_sweden.asset +++ b/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/viking_mdim_sweden.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "Viking_MDIM_Sweden", Name = "Viking MDIM [Sweden]", Enabled = asset.enabled, - FilePath = asset.localResource("viking_mdim_sweden.wms"), + ZIndex = 10, + FilePath = asset.resource("viking_mdim_sweden.wms"), Description = [[This global image map of Mars has a resolution of 256 pixels/degree (scale approximately 232 meters per pixel (m) at the equator). The colorized mosaic was completed by NASA AMES which warped the original Viking colorized @@ -43,7 +44,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Viking MDIM [Sweden]", - Version = "1.1", Description = [[Alternate image layer for Mars. This map is hosted on the OpenSpace server in Sweden]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/viking_mdim_utah.asset b/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/viking_mdim_utah.asset index 0b795a883c..c225d84f34 100644 --- a/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/viking_mdim_utah.asset +++ b/data/assets/scene/solarsystem/planets/mars/layers/colorlayers/viking_mdim_utah.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "Viking_MDIM_Utah", Name = "Viking MDIM [Utah]", Enabled = asset.enabled, - FilePath = asset.localResource("viking_mdim_utah.wms"), + ZIndex = 10, + FilePath = asset.resource("viking_mdim_utah.wms"), Description = [[This global image map of Mars has a resolution of 256 pixels/degree (scale approximately 232 meters per pixel (m) at the equator). The colorized mosaic was completed by NASA AMES which warped the original Viking colorized @@ -43,7 +44,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Viking MDIM [Utah]", - Version = "1.1", Description = [[Alternate image layer for Mars. This map is hosted on the OpenSpace server in Utah]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/mars/layers/heightlayers/hirisels.asset b/data/assets/scene/solarsystem/planets/mars/layers/heightlayers/hirisels.asset index 20d4566c0f..03815adfad 100644 --- a/data/assets/scene/solarsystem/planets/mars/layers/heightlayers/hirisels.asset +++ b/data/assets/scene/solarsystem/planets/mars/layers/heightlayers/hirisels.asset @@ -6,8 +6,9 @@ local Layer = { Identifier = "HiRISE-LS-DEM", Name = "HiRISE Local Set DEM", Enabled = asset.enabled, - FilePath = asset.localResource("hirisels.wms"), - TilePixelSize = 512, + ZIndex = 50, + FilePath = asset.resource("hirisels.wms"), + TilePixelSize = 129, Description = [[HiRISE (High Resolution Imaging Science Experiment) is the most powerful camera ever sent to another planet, one of six instruments onboard the Mars Reconnaissance Orbiter. We launched in 2005, arrived at Mars in 2006 and have @@ -36,7 +37,6 @@ asset.export("layer", Layer) asset.meta = { Name = "HiRISE Local Set DEM", - Version = "1.1", Description = [[HiRISE DEM layer for corresponding Local Set imager. This map is hosted by ESRI]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/mars/layers/heightlayers/mdem200m.asset b/data/assets/scene/solarsystem/planets/mars/layers/heightlayers/mdem200m.asset index 2a7a58987d..88476263f0 100644 --- a/data/assets/scene/solarsystem/planets/mars/layers/heightlayers/mdem200m.asset +++ b/data/assets/scene/solarsystem/planets/mars/layers/heightlayers/mdem200m.asset @@ -6,8 +6,9 @@ local Layer = { Identifier = "MDEM200M", Name = "HRSC MOLA Blended DEM Global 200m v2", Enabled = asset.enabled, - FilePath = asset.localResource("mdem200m.wms"), - TilePixelSize = 513, + ZIndex = 20, + FilePath = asset.resource("mdem200m.wms"), + TilePixelSize = 129, Description = [[Blend of data derived from the Mars Orbiter Laser Altimeter (MOLA, an instrument aboard NASA's Mars Global Surveyor spacecraft), and data derived from the High-Resolution Stereo Camera (HRSC, an instrument aboard the European Space @@ -32,7 +33,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Mars HRSC MOLA Blended DEM Global 200m v2", - Version = "1.1", Description = "ESRI Hosted ars HRSC MOLA Blended DEM", Author = "esri_astro", URL = "https://www.arcgis.com/home/item.html?id=225adad86379474ebc3d51a74573c99b", diff --git a/data/assets/scene/solarsystem/planets/mars/layers/heightlayers/mola_amnh.asset b/data/assets/scene/solarsystem/planets/mars/layers/heightlayers/mola_amnh.asset index 37dc40350d..eaff920afb 100644 --- a/data/assets/scene/solarsystem/planets/mars/layers/heightlayers/mola_amnh.asset +++ b/data/assets/scene/solarsystem/planets/mars/layers/heightlayers/mola_amnh.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "Mola_AMNH", Name = "Mola Elevation [New York]", Enabled = asset.enabled, - FilePath = asset.localResource("mola_amnh.wms"), + ZIndex = 10, + FilePath = asset.resource("mola_amnh.wms"), TilePixelSize = 360, Description = [[This digital elevation model (DEM) is based on data from the Mars Orbiter Laser Altimeter (MOLA; Smith et al., 2001), an instrument on NASA's Mars @@ -39,7 +40,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Mola Elevation [New York]", - Version = "1.1", Description = [[Global elevation layer for Mars. This layer is hosted on the OpenSpace server in New York]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/mars/layers/heightlayers/mola_sweden.asset b/data/assets/scene/solarsystem/planets/mars/layers/heightlayers/mola_sweden.asset index 8b6b7c044a..f70995f01b 100644 --- a/data/assets/scene/solarsystem/planets/mars/layers/heightlayers/mola_sweden.asset +++ b/data/assets/scene/solarsystem/planets/mars/layers/heightlayers/mola_sweden.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "Mola_Europe", Name = "Mola Elevation [Sweden]", Enabled = asset.enabled, - FilePath = asset.localResource("mola_sweden.wms"), + ZIndex = 10, + FilePath = asset.resource("mola_sweden.wms"), TilePixelSize = 360, Description = [[This digital elevation model (DEM) is based on data from the Mars Orbiter Laser Altimeter (MOLA; Smith et al., 2001), an instrument on NASA's Mars @@ -39,7 +40,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Mola Elevation [Sweden]", - Version = "1.1", Author = "USGS", Description = [[Global elevation layer for Mars. This layer is hosted on the OpenSpace server in Sweden]], diff --git a/data/assets/scene/solarsystem/planets/mars/layers/heightlayers/mola_utah.asset b/data/assets/scene/solarsystem/planets/mars/layers/heightlayers/mola_utah.asset index 23545537a2..afb72087e7 100644 --- a/data/assets/scene/solarsystem/planets/mars/layers/heightlayers/mola_utah.asset +++ b/data/assets/scene/solarsystem/planets/mars/layers/heightlayers/mola_utah.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "Mola_Utah", Name = "Mola Elevation [Utah]", Enabled = asset.enabled, - FilePath = asset.localResource("mola_utah.wms"), + ZIndex = 10, + FilePath = asset.resource("mola_utah.wms"), TilePixelSize = 360, Description = [[This digital elevation model (DEM) is based on data from the Mars Orbiter Laser Altimeter (MOLA; Smith et al., 2001), an instrument on NASA's Mars @@ -39,7 +40,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Mola Elevation [Utah]", - Version = "1.1", Description = [[Global elevation layer for Mars. This layer is hosted on the OpenSpace server in Utah]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/mars/layers/nasa-treks/MEX_HRSC.asset b/data/assets/scene/solarsystem/planets/mars/layers/nasa-treks/MEX_HRSC.asset index 3223495309..81d17e3e2f 100644 --- a/data/assets/scene/solarsystem/planets/mars/layers/nasa-treks/MEX_HRSC.asset +++ b/data/assets/scene/solarsystem/planets/mars/layers/nasa-treks/MEX_HRSC.asset @@ -6,20 +6,25 @@ local globeIdentifier = asset.require("scene/solarsystem//planets/mars/mars").Mars.Identifier + + local treks_hrsc_dem_martian_east = { Identifier = "hrsc_dem_martian_east", Name = [[MEX HRSC, Martian Path Eastern Section DEM]], - FilePath = asset.localResource("MEX_HRSC/Martian_Path_Eastern_Section_DEM.vrt"), + ZIndex = 50, + FilePath = asset.resource("MEX_HRSC/Martian_Path_Eastern_Section_DEM.vrt"), Description = [[This layer is a greyscale mosaic assembled using data from the High Resolution Stereo Camera aboard the European Space Agency's Mars Express orbiter. HRSC is being used to obtain color and stereo images that will map 100% of Mars' surface at resolution better than 30 m/pixel, and 50% of the surface at better than 15 m/pixel. Each of the nine CCD lines of HRSC, a linescan imager (pushbroom camera), contains 5184 pixels. The channels consist of red, green, blue, near-infrared, three stereo channels (backward, nadir, and forward) and two photometric channels. The digital elevation model used for this layer is a combination of data derived from the HRSC and the Mars Orbiter Laser Altimeter.]] } local treks_MC11E11_HRDTMAR_DA5 = { Identifier = "MC11E11_HRDTMAR_DA5", Name = [[MEX HRSC, Martian Path MC11 Quad DEM]], - FilePath = asset.localResource("MEX_HRSC/Martian_Path_MC11_Quad_DEM.vrt"), + ZIndex = 50, + FilePath = asset.resource("MEX_HRSC/Martian_Path_MC11_Quad_DEM.vrt"), Description = [[This layer is a greyscale mosaic assembled using data from the High Resolution Stereo Camera aboard the European Space Agency's Mars Express orbiter. HRSC is being used to obtain color and stereo images that will map 100% of Mars' surface at resolution better than 30 m/pixel, and 50% of the surface at better than 15 m/pixel. Each of the nine CCD lines of HRSC, a linescan imager (pushbroom camera), contains 5184 pixels. The channels consist of red, green, blue, near-infrared, three stereo channels (backward, nadir, and forward) and two photometric channels. The digital elevation model used for this layer is a combination of data derived from the HRSC and the Mars Orbiter Laser Altimeter.]] } + asset.onInitialize(function() openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_hrsc_dem_martian_east) openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_MC11E11_HRDTMAR_DA5) @@ -34,9 +39,9 @@ asset.export("hrsc_dem_martian_east", treks_hrsc_dem_martian_east) asset.export("MC11E11_HRDTMAR_DA5", treks_MC11E11_HRDTMAR_DA5) + asset.meta = { - Name = [[NASA Treks Layers for Mars MEX_HRSC], - Version = "1.0", + Name = [[NASA Treks Layers for Mars MEX_HRSC]], Author = "NASA/Treks", URL = "https://trek.nasa.gov/mars", License = "NASA/Treks", diff --git a/data/assets/scene/solarsystem/planets/mars/layers/nasa-treks/MGS_MOC_Atlas.asset b/data/assets/scene/solarsystem/planets/mars/layers/nasa-treks/MGS_MOC_Atlas.asset index d15e6a2ed9..d90fc9ab41 100644 --- a/data/assets/scene/solarsystem/planets/mars/layers/nasa-treks/MGS_MOC_Atlas.asset +++ b/data/assets/scene/solarsystem/planets/mars/layers/nasa-treks/MGS_MOC_Atlas.asset @@ -6,15 +6,19 @@ local globeIdentifier = asset.require("scene/solarsystem//planets/mars/mars").Mars.Identifier + + local treks_msss_atlas_simp_clon = { Identifier = "msss_atlas_simp_clon", Name = [[MGS MOC Atlas, Global Color Mosaic]], - FilePath = asset.localResource("MGS_MOC_Atlas/Global_Color_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("MGS_MOC_Atlas/Global_Color_Mosaic.vrt"), Description = [[This data was acquired using the Mars Orbiter Camera instrument aboard NASA's Mars Global Surveyor spacecraft (MGS). MGS was launched on November 7, 1996 and arrived at Mars on September 11, 1997. It maintained a circular polar orbit, completing an orbital revolution every 117.65 minutes at an average altitude of 378 km (235 mi). Until November 2, 2006, MGS characterized and mapped Mars' surface features, properties, topography, composition, and processes, as well as studied Mars' weather and atmospheric structure. The Mars Orbiter Camera (MOC) consisted of 3 instruments. A black-and-white narrow angle camera captured high resolution images (typically 1.5 to 12 m per pixel) and red and blue wide angle cameras for context (240 m per pixel) and daily global imaging (7.5 km per pixel). This mosaic was assembled from Wide Angle red images (primarily those acquired in May-June 1999) from the Mars Orbiter Camera.]] } + asset.onInitialize(function() openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_msss_atlas_simp_clon) end) @@ -26,9 +30,9 @@ end) asset.export("msss_atlas_simp_clon", treks_msss_atlas_simp_clon) + asset.meta = { - Name = [[NASA Treks Layers for Mars MGS_MOC_Atlas], - Version = "1.0", + Name = [[NASA Treks Layers for Mars MGS_MOC_Atlas]], Author = "NASA/Treks", URL = "https://trek.nasa.gov/mars", License = "NASA/Treks", diff --git a/data/assets/scene/solarsystem/planets/mars/layers/nasa-treks/MGS_MOLA.asset b/data/assets/scene/solarsystem/planets/mars/layers/nasa-treks/MGS_MOLA.asset index 1c052b65d4..9f9f3a2682 100644 --- a/data/assets/scene/solarsystem/planets/mars/layers/nasa-treks/MGS_MOLA.asset +++ b/data/assets/scene/solarsystem/planets/mars/layers/nasa-treks/MGS_MOLA.asset @@ -6,10 +6,13 @@ local globeIdentifier = asset.require("scene/solarsystem//planets/mars/mars").Mars.Identifier + + local treks_Mars_MGS_MOLA_ClrShade_merge_global_463m = { Identifier = "Mars_MGS_MOLA_ClrShade_merge_global_463m", Name = [[MGS MOLA, Global Color Hillshade]], - FilePath = asset.localResource("MGS_MOLA/Global_Color_Hillshade.vrt"), + ZIndex = 50, + FilePath = asset.resource("MGS_MOLA/Global_Color_Hillshade.vrt"), Description = [[This data was acquired using the Mars Orbiter Laser Altimeter instrument aboard NASA's Mars Global Surveyor spacecraft (MGS). MGS was launched on November 7, 1996 and arrived at Mars on September 11, 1997. It maintained a circular polar orbit, completing an orbital revolution every 117.65 minutes at an average altitude of 378 km (235 mi). Until November 2, 2006, MGS characterized and mapped Mars' surface features, properties, topography, composition, and processes, as well as studied Mars' weather and atmospheric structure. The Mars Orbiter Laser Altimeter (MOLA) made precise measurements of the heights and depths of surface features on Mars. MOLA fired infrared laser pulses downward 10 times per second, and measured the time it took for the reflected pulses to return from the surface. Converting this data to a colorized hillshade makes it particularly easy to visualize surface topography. The image used for the base of this map represents more than 600 million measurements gathered between 1999 and 2001. The average accuracy of each point is originally ~100 meters in horizontal position and the total elevation uncertainty is at least ±3 m.]] @@ -18,7 +21,8 @@ The Mars Orbiter Laser Altimeter (MOLA) made precise measurements of the heights local treks_mola128_mola64_merge_90Nto90S_SimpleC_clon0 = { Identifier = "mola128_mola64_merge_90Nto90S_SimpleC_clon0", Name = [[MGS MOLA, Global DEM]], - FilePath = asset.localResource("MGS_MOLA/Global_DEM.vrt"), + ZIndex = 50, + FilePath = asset.resource("MGS_MOLA/Global_DEM.vrt"), Description = [[This data was acquired using the Mars Orbiter Laser Altimeter instrument aboard NASA's Mars Global Surveyor spacecraft (MGS). MGS was launched on November 7, 1996 and arrived at Mars on September 11, 1997. It maintained a circular polar orbit, completing an orbital revolution every 117.65 minutes at an average altitude of 378 km (235 mi). Until November 2, 2006, MGS characterized and mapped Mars' surface features, properties, topography, composition, and processes, as well as studied Mars' weather and atmospheric structure. The DEM represents more than 600 million measurements gathered between 1999 and 2001, adjusted for consistency and converted to planetary radii. These have been converted to elevations above the areoid as determined from a Martian gravity field solution GMM-2B, truncated to degree and order 50, and oriented according to current standards. The average accuracy of each point is originally ~100 meters in horizontal position and ~1 meter in radius. However, the total elevation uncertainty is at least ±3 m due to the global error in the areoid (±1.8 meters) and regional uncertainties in its shape. This DEM is a blend of data obtained with a resolution of 128 pixels per degree and 64 pixels per degree. The majority of the surface is covered at the higher resolution 128 pixels per degree. In projection, these pixels are 463 meters in size at the equator. However, these higher resolution data are very sparse near the two poles (above 87° north and below 87° south latitude) because these areas were sampled by only a few off-nadir altimetry tracks. Gaps between tracks of 1-2 km are common, and some gaps of up to 12 km occur near the equator.This data was acquired using the Mars Orbiter Laser Altimeter instrument aboard NASA's Mars Global Surveyor spacecraft (MGS). MGS was launched on November 7, 1996 and arrived at Mars on September 11, 1997. It maintained a circular polar orbit, completing an orbital revolution every 117.65 minutes at an average altitude of 378 km (235 mi). Until November 2, 2006, MGS characterized and mapped Mars' surface features, properties, topography, composition, and processes, as well as studied Mars' weather and atmospheric structure. @@ -29,10 +33,12 @@ The DEM represents more than 600 million measurements gathered between 1999 and local treks_mola_roughness = { Identifier = "mola_roughness", Name = [[MGS MOLA, Global Surface Roughness]], - FilePath = asset.localResource("MGS_MOLA/Global_Surface_Roughness.vrt"), + ZIndex = 50, + FilePath = asset.resource("MGS_MOLA/Global_Surface_Roughness.vrt"), Description = [[The Mars Orbiter Laser Altimeter (MOLA) aboard the Mars Global Surveyor (MGS) spacecraft, made precise altimetry measurements from orbit around Mars from September 1997 to June, 2001. The MOLA instrument transmitted infrared laser pulses towards Mars at a rate of 10 times per second, and measured the time of flight to determine the range (distance) of the MGS spacecraft to the Martian surface. The range measurements resulted in precise topographic maps of Mars. This kilometer-scale global roughness map is presented as an RGB composite image. The Blue, Green and Red channels contain roughness at 0.6 km, 2.4 km, and 9.2 km baselines. Brighter shades denote rougher surface. Thus, general brightness denotes general roughness, and color hue denotes the nature of the scale dependence of roughness. Map resolution/scale: 8 ppd/7.5km. Kreslavsky and Head, 2000, JGR, VOL. 105, NO. Ell, PAGES 26,695-26,711]] } + asset.onInitialize(function() openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_Mars_MGS_MOLA_ClrShade_merge_global_463m) openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_mola128_mola64_merge_90Nto90S_SimpleC_clon0) @@ -50,9 +56,9 @@ asset.export("mola128_mola64_merge_90Nto90S_SimpleC_clon0", treks_mola128_mola64 asset.export("mola_roughness", treks_mola_roughness) + asset.meta = { - Name = [[NASA Treks Layers for Mars MGS_MOLA], - Version = "1.0", + Name = [[NASA Treks Layers for Mars MGS_MOLA]], Author = "NASA/Treks", URL = "https://trek.nasa.gov/mars", License = "NASA/Treks", diff --git a/data/assets/scene/solarsystem/planets/mars/layers/nasa-treks/MGS_MOLA_and_Mars_Express_HRSC.asset b/data/assets/scene/solarsystem/planets/mars/layers/nasa-treks/MGS_MOLA_and_Mars_Express_HRSC.asset index e68e1850b3..ad914beb2e 100644 --- a/data/assets/scene/solarsystem/planets/mars/layers/nasa-treks/MGS_MOLA_and_Mars_Express_HRSC.asset +++ b/data/assets/scene/solarsystem/planets/mars/layers/nasa-treks/MGS_MOLA_and_Mars_Express_HRSC.asset @@ -6,10 +6,13 @@ local globeIdentifier = asset.require("scene/solarsystem//planets/mars/mars").Mars.Identifier + + local treks_Mars_MOLA_blend200ppx_HRSC_ClrShade_clon0dd_200mpp_lzw = { Identifier = "Mars_MOLA_blend200ppx_HRSC_ClrShade_clon0dd_200mpp_lzw", Name = [[MGS MOLA and Mars Express HRSC, Color Hillshade Blend]], - FilePath = asset.localResource("MGS_MOLA_and_Mars_Express_HRSC/Color_Hillshade_Blend.vrt"), + ZIndex = 50, + FilePath = asset.resource("MGS_MOLA_and_Mars_Express_HRSC/Color_Hillshade_Blend.vrt"), Description = [[This data product is a blend of digital terrain model (DTM) data derived from the Mars Orbiter Laser Altimeter (MOLA) instrument aboard NASA's Mars Global Surveyor spacecraft (MGS), and the High-Resolution Stereo Camera (HRSC) aboard the European Space Agency's Mars Express spacecraft. MOLA fired infrared laser pulses downward 10 times per second, and measured the time it took for the reflected pulses to return from the surface. The image used for the MOLA base of this map represents more than 600 million measurements gathered between 1999 and 2001. The average accuracy of each point is originally ~100 meters in horizontal position and the total elevation uncertainty is at least ±3 m. MOLA produced global topographic coverage with a spatial resolution of about 300 x 1000 m at the equator, and better near the poles. @@ -22,7 +25,8 @@ R. Jaumann, et al. (2007), The high-resolution stereo camera (HRSC) experiment o local treks_Mars_MOLA_blend200ppx_HRSC_Shade_clon0dd_200mpp_lzw = { Identifier = "Mars_MOLA_blend200ppx_HRSC_Shade_clon0dd_200mpp_lzw", Name = [[MGS MOLA and Mars Express HRSC, Hillshade Blend]], - FilePath = asset.localResource("MGS_MOLA_and_Mars_Express_HRSC/Hillshade_Blend.vrt"), + ZIndex = 50, + FilePath = asset.resource("MGS_MOLA_and_Mars_Express_HRSC/Hillshade_Blend.vrt"), Description = [[This data product is a blend of digital terrain model (DTM) data derived from the Mars Orbiter Laser Altimeter (MOLA) instrument aboard NASA's Mars Global Surveyor spacecraft (MGS), and the High-Resolution Stereo Camera (HRSC) aboard the European Space Agency's Mars Express spacecraft. MOLA fired infrared laser pulses downward 10 times per second, and measured the time it took for the reflected pulses to return from the surface. The image used for the MOLA base of this map represents more than 600 million measurements gathered between 1999 and 2001. The average accuracy of each point is originally ~100 meters in horizontal position and the total elevation uncertainty is at least ±3 m. MOLA produced global topographic coverage with a spatial resolution of about 300 x 1000 m at the equator, and better near the poles. @@ -32,6 +36,7 @@ HRSC, the only dedicated stereo camera orbiting Mars, is a multi-sensor push bro R. Jaumann, et al. (2007), The high-resolution stereo camera (HRSC) experiment on Mars Express: instrument aspects and experiment conduct from interplanetary cruise through the nominal mission, Planet. Space Sci., 55 (7-8) (2007), pp. 928-952]] } + asset.onInitialize(function() openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_Mars_MOLA_blend200ppx_HRSC_ClrShade_clon0dd_200mpp_lzw) openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_Mars_MOLA_blend200ppx_HRSC_Shade_clon0dd_200mpp_lzw) @@ -46,9 +51,9 @@ asset.export("Mars_MOLA_blend200ppx_HRSC_ClrShade_clon0dd_200mpp_lzw", treks_Mar asset.export("Mars_MOLA_blend200ppx_HRSC_Shade_clon0dd_200mpp_lzw", treks_Mars_MOLA_blend200ppx_HRSC_Shade_clon0dd_200mpp_lzw) + asset.meta = { - Name = [[NASA Treks Layers for Mars MGS_MOLA_and_Mars_Express_HRSC], - Version = "1.0", + Name = [[NASA Treks Layers for Mars MGS_MOLA_and_Mars_Express_HRSC]], Author = "NASA/Treks", URL = "https://trek.nasa.gov/mars", License = "NASA/Treks", diff --git a/data/assets/scene/solarsystem/planets/mars/layers/nasa-treks/MGS_TES.asset b/data/assets/scene/solarsystem/planets/mars/layers/nasa-treks/MGS_TES.asset index 163522a292..4138866f9b 100644 --- a/data/assets/scene/solarsystem/planets/mars/layers/nasa-treks/MGS_TES.asset +++ b/data/assets/scene/solarsystem/planets/mars/layers/nasa-treks/MGS_TES.asset @@ -6,48 +6,54 @@ local globeIdentifier = asset.require("scene/solarsystem//planets/mars/mars").Mars.Identifier + + local treks_TES_Dust = { Identifier = "TES_Dust", Name = [[MGS TES, Global Dust]], - FilePath = asset.localResource("MGS_TES/Global_Dust.vrt"), + ZIndex = 50, + FilePath = asset.resource("MGS_TES/Global_Dust.vrt"), Description = [[The Thermal Emission Spectrometer (TES) is one of the instruments aboard the Mars Global Surveyor spacecraft. TES is designed to measure the thermal infrared energy (heat) emitted from Mars. This technique, called thermal emission spectroscopy, can tell us much about the geology and atmosphere of Mars. Dust is widespread and abundant across the surface of Mars. However, in the wind-blown environment of Mars, dust accumulates tickly in some areas and is blown clear of other areas. Thick accumulations of dust mask the underlying surface, making measurements of surface composition from orbit difficult or even impossible. Preferred landing site candidates will ideally be relatively dust free. An index of the relative abundance of spectrally obscuring dust across the Martian surface was developed using data from TES. While closely correlated with albedo, the TES dust cover index (DCI) is a more direct metric for the presence or absence of dust on a particular surface and is independent of albedo. This becomes important for the types of light-toned layered deposits and surfaces that likely will be among the candidates for future landing sites. Map resolution/scale: 16ppd/3.5km. Ruff and Christensen, 2002, JGR, VOL. 107, NO. E12, 5127]] } local treks_tes_ruffdust = { Identifier = "tes_ruffdust", Name = [[MGS TES, Global Dust Index]], - FilePath = asset.localResource("MGS_TES/Global_Dust_Index.vrt"), + ZIndex = 50, + FilePath = asset.resource("MGS_TES/Global_Dust_Index.vrt"), Description = [[The Thermal Emission Spectrometer (TES) is one of the instruments aboard the Mars Global Surveyor spacecraft. TES is designed to measure the thermal infrared energy (heat) emitted from Mars. This technique, called thermal emission spectroscopy, can tell us much about the geology and atmosphere of Mars. Dust is widespread and abundant across the surface of Mars. However, in the wind-blown environment of Mars, dust accumulates tickly in some areas and is blown clear of other areas. Thick accumulations of dust mask the underlying surface, making measurements of surface composition from orbit difficult or even impossible. Preferred landing site candidates will ideally be relatively dust free. An index of the relative abundance of spectrally obscuring dust across the Martian surface was developed using data from TES. While closely correlated with albedo, the TES dust cover index (DCI) is a more direct metric for the presence or absence of dust on a particular surface and is independent of albedo. This becomes important for the types of light-toned layered deposits and surfaces that likely will be among the candidates for future landing sites. Map resolution/scale: 16ppd/3.5km. Ruff and Christensen, 2002, JGR, VOL. 107, NO. E12, 5127]] } local treks_TES_Clinopyroxene = { Identifier = "TES_Clinopyroxene", Name = [[MGS TES, Global High-Ca Pyroxene Abundance]], - FilePath = asset.localResource("MGS_TES/Global_High-Ca_Pyroxene_Abundance.vrt"), + ZIndex = 50, + FilePath = asset.resource("MGS_TES/Global_High-Ca_Pyroxene_Abundance.vrt"), Description = [[The Thermal Emission Spectrometer (TES) is one of the instruments aboard the Mars Global Surveyor spacecraft. TES is designed to measure the thermal infrared energy (heat) emitted from Mars. This technique, called thermal emission spectroscopy, can tell us much about the geology and atmosphere of Mars. A deconvolution method was used to remove atmospheric components and determine surface mineralogy from TES data at 1 pixel per degree (ppd). Minerals were grouped into categories on the basis of compositional and spectral similarity, and global concentration maps were produced. High-Ca pyroxenes are identified in concentrations of 0.10 - 0.20 in equatorial low albedo regions. The highest concentrations are present in Syrtis Major. High-latitude, low-albedo regions are characterized by concentrations of 0 - 0.10. Light regions have 0 - 0.05 high-Ca pyroxene concentrations. Only equatorial low-albedo regions have pyroxene concentrations above the detection limit. Map resolution/scale: 4 ppd/16km. Joshua L. Bandfield, 2002, JGR, VOL. 107, NO. E6, 5042]] } local treks_TES_Plagioclase = { Identifier = "TES_Plagioclase", Name = [[MGS TES, Global Plagioclase Abundance]], - FilePath = asset.localResource("MGS_TES/Global_Plagioclase_Abundance.vrt"), + FilePath = asset.resource("MGS_TES/Global_Plagioclase_Abundance.vrt"), Description = [[The Thermal Emission Spectrometer (TES) is one of the instruments aboard the Mars Global Surveyor spacecraft. TES is designed to measure the thermal infrared energy (heat) emitted from Mars. This technique, called thermal emission spectroscopy, can tell us much about the geology and atmosphere of Mars. A deconvolution method was used to remove atmospheric components and determine surface mineralogy from TES data at 1 pixel per degree (ppd). Minerals were grouped into categories on the basis of compositional and spectral similarity, and global concentration maps were produced. Plagioclase is present in high concentrations in low-albedo regions. High-latitude, low albedo regions have concentrations of 0.05 - 0.15. Equatorial low-albedo regions display concentrations of 0.10 - 0.20 with the highest concentrations in the Syrtis Major region. High-albedo surfaces have plagioclase concentrations of 0 - 0.05, well below the detectable limit. Where there are significant concentrations, average plagioclase compositions are intermediate to calcic. Map resolution/scale: 4 ppd/16km. Joshua L. Bandfield, 2002, JGR, VOL. 107, NO. E6, 5042]] } local treks_TES_Glass_Clay = { Identifier = "TES_Glass_Clay", Name = [[MGS TES, Global Sheet Silicates/High-Si Glass]], - FilePath = asset.localResource("MGS_TES/Global_Sheet_SilicatesHigh-Si_Glass.vrt"), + FilePath = asset.resource("MGS_TES/Global_Sheet_SilicatesHigh-Si_Glass.vrt"), Description = [[The Thermal Emission Spectrometer (TES) is one of the instruments aboard the Mars Global Surveyor spacecraft. TES is designed to measure the thermal infrared energy (heat) emitted from Mars. This technique, called thermal emission spectroscopy, can tell us much about the geology and atmosphere of Mars. A deconvolution method was used to remove atmospheric components and determine surface mineralogy from TES data at 1 pixel per degree (ppd). Minerals were grouped into categories on the basis of compositional and spectral similarity, and global concentration maps were produced. The sheet silicate and high-Si glass map is slightly noisier than the other mineralogy maps. This is likely due to the spectral similarity between the sheet silicate and high-Si glass end-member group and the atmospheric dust spectral shapes. The highest concentrations are located in northern hemisphere low-albedo regions with concentrations of 0.05 - 0.20. High concentrations are also present in several isolated regions south of Solis Planum, southeast of Hellas Basin, and along the edge of the southern polar cap. High albedo regions contain 0 - 0.10 sheet silicate and high-Si glass concentrations. Equatorial and southern hemisphere low-albedo regions typically have concentrations of 0.05 - 0.15 with the exception of some isolated areas. Map resolution/scale: 4 ppd/16km. Joshua L. Bandfield, 2002, JGR, VOL. 107, NO. E6, 5042]] } local treks_TES_Thermal_Inertia = { Identifier = "TES_Thermal_Inertia", Name = [[MGS TES, Global Thermal Inertia]], - FilePath = asset.localResource("MGS_TES/Global_Thermal_Inertia.vrt"), + FilePath = asset.resource("MGS_TES/Global_Thermal_Inertia.vrt"), Description = [[The Thermal Emission Spectrometer (TES) is one of the instruments aboard the Mars Global Surveyor spacecraft. TES is designed to measure the thermal infrared energy (heat) emitted from Mars. This technique, called thermal emission spectroscopy, can tell us much about the geology and atmosphere of Mars. One of the objectives of the MGS TES instrument is the derivation of thermal inertia of the surface at 3-km spatial resolution. Thermal inertia represents the ability of a material to conduct and store heat, and in the context of planetary science, it is a measure of the subsurface's ability to store heat during the day and reradiate it during the night. While compositional differences (ie, mineralogy) will have some effect, for a terrestrial planetary surface such as that of Mars, thermal inertia will depend predominantly on the physical properties of the near surface materials such as particle size, degree of induration (ie, cementation of grains), rock abundance, and exposure of bedrock (rocks will have a much higher thermal inertia than sand or dust - that is, it takes longer to heat rocks up during the day and to cool them off at night). For example, on a visit to the desert you may notice that sandy areas are much hotter at midday than adjacent rocks, and the sand cools off quickly after sunset whereas the rocks remain warm well into the evening. Map resolution/scale: 20 ppd/3km. Putzig et al, 2005, Icarus 173, 325-341]] } + asset.onInitialize(function() openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_TES_Dust) openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_tes_ruffdust) @@ -74,9 +80,9 @@ asset.export("TES_Glass_Clay", treks_TES_Glass_Clay) asset.export("TES_Thermal_Inertia", treks_TES_Thermal_Inertia) + asset.meta = { - Name = [[NASA Treks Layers for Mars MGS_TES], - Version = "1.0", + Name = [[NASA Treks Layers for Mars MGS_TES]], Author = "NASA/Treks", URL = "https://trek.nasa.gov/mars", License = "NASA/Treks", diff --git a/data/assets/scene/solarsystem/planets/mars/layers/nasa-treks/MO_THEMIS-IR_Day.asset b/data/assets/scene/solarsystem/planets/mars/layers/nasa-treks/MO_THEMIS-IR_Day.asset index d2740f48c7..34b8d36adb 100644 --- a/data/assets/scene/solarsystem/planets/mars/layers/nasa-treks/MO_THEMIS-IR_Day.asset +++ b/data/assets/scene/solarsystem/planets/mars/layers/nasa-treks/MO_THEMIS-IR_Day.asset @@ -6,13 +6,17 @@ local globeIdentifier = asset.require("scene/solarsystem//planets/mars/mars").Mars.Identifier + + local treks_THEMIS_DayIR_ControlledMosaics_100m_v2_oct2018 = { Identifier = "THEMIS_DayIR_ControlledMosaics_100m_v2_oct2018", Name = [[MO THEMIS-IR Day, Global Mosaic]], - FilePath = asset.localResource("MO_THEMIS-IR_Day/Global_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("MO_THEMIS-IR_Day/Global_Mosaic.vrt"), Description = [[This data was acquired using the Thermal Emission Imaging System instrument aboard NASA's Mars Odyssey spacecraft. Odyssey was launched on April 7, 2001 and arrived at Mars on October 24, 2001. It maintains a polar orbit around Mars with an altitude of about 3,800 km or 2,400 miles. Odyssey's mission includes studying the mineralogy of Mars' surface (especially looking at minerals formed in the presence of water), detecting water and shallow buried ice, and studying the radiation environment. The Thermal Emission Imaging System (THEMIS) instrument is a camera system that gathers data in infrared and visible light. The infrared images sample nine different wavelengths allowing spectra to be constructed and compositions of imaged surfaces to be inferred. Daytime infrared Themis images typically emphasize topography, with warmer sunward slopes being brighter than cooler shaded slopes. Nighttime Themis images emphasize differences in thermal inertia between areas being observed, giving insights into the physical characteristics of the surfaces. This map is a THEMIS daytime infrared map. The 2017 release featured preliminary geodetically controlled mosaics tied to a known coordinate system (USGS Viking Orbiter MDIM 2.1), spatially adjusted to align feature boundaries, and orthoprojected at 100 m/pixel scale. Further adjustments have been processed for the 2018 release of this final mosaic.]] } + asset.onInitialize(function() openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_THEMIS_DayIR_ControlledMosaics_100m_v2_oct2018) end) @@ -24,9 +28,9 @@ end) asset.export("THEMIS_DayIR_ControlledMosaics_100m_v2_oct2018", treks_THEMIS_DayIR_ControlledMosaics_100m_v2_oct2018) + asset.meta = { - Name = [[NASA Treks Layers for Mars MO_THEMIS-IR_Day], - Version = "1.0", + Name = [[NASA Treks Layers for Mars MO_THEMIS-IR_Day]], Author = "NASA/Treks", URL = "https://trek.nasa.gov/mars", License = "NASA/Treks", diff --git a/data/assets/scene/solarsystem/planets/mars/layers/nasa-treks/MO_THEMIS-IR_Night.asset b/data/assets/scene/solarsystem/planets/mars/layers/nasa-treks/MO_THEMIS-IR_Night.asset index 8f92f0682d..7cc37f22ef 100644 --- a/data/assets/scene/solarsystem/planets/mars/layers/nasa-treks/MO_THEMIS-IR_Night.asset +++ b/data/assets/scene/solarsystem/planets/mars/layers/nasa-treks/MO_THEMIS-IR_Night.asset @@ -6,13 +6,17 @@ local globeIdentifier = asset.require("scene/solarsystem//planets/mars/mars").Mars.Identifier + + local treks_THEMIS_NightIR_ControlledMosaics_100m_v2_oct2018 = { Identifier = "THEMIS_NightIR_ControlledMosaics_100m_v2_oct2018", Name = [[MO THEMIS-IR Night, Global Mosaic]], - FilePath = asset.localResource("MO_THEMIS-IR_Night/Global_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("MO_THEMIS-IR_Night/Global_Mosaic.vrt"), Description = [[This data was acquired using the Thermal Emission Imaging System instrument aboard NASA's Mars Odyssey spacecraft. Odyssey was launched on April 7, 2001 and arrived at Mars on October 24, 2001. It maintains a polar orbit around Mars with an altitude of about 3,800 km or 2,400 miles. Odyssey's mission includes studying the mineralogy of Mars' surface (especially looking at minerals formed in the presence of water), detecting water and shallow buried ice, and studying the radiation environment. The Thermal Emission Imaging System (THEMIS) instrument is a camera system that gathers data in infrared and visible light. The infrared images sample nine different wavelengths allowing spectra to be constructed and compositions of imaged surfaces to be inferred. Daytime infrared Themis images typically emphasize topography, with warmer sunward slopes being brighter than cooler shaded slopes. Nighttime Themis images emphasize differences in thermal inertia between areas being observed, giving insights into the physical characteristics of the surfaces. This map is a THEMIS nighttime infrared map. The 2017 release featured preliminary geodetically controlled mosaics tied to a known coordinate system (USGS Viking Orbiter MDIM 2.1), spatially adjusted to align feature boundaries, and orthoprojected at 100 m/pixel scale. Further adjustments have been processed for the 2018 release of this final mosaic.]] } + asset.onInitialize(function() openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_THEMIS_NightIR_ControlledMosaics_100m_v2_oct2018) end) @@ -24,9 +28,9 @@ end) asset.export("THEMIS_NightIR_ControlledMosaics_100m_v2_oct2018", treks_THEMIS_NightIR_ControlledMosaics_100m_v2_oct2018) + asset.meta = { - Name = [[NASA Treks Layers for Mars MO_THEMIS-IR_Night], - Version = "1.0", + Name = [[NASA Treks Layers for Mars MO_THEMIS-IR_Night]], Author = "NASA/Treks", URL = "https://trek.nasa.gov/mars", License = "NASA/Treks", diff --git a/data/assets/scene/solarsystem/planets/mars/layers/nasa-treks/MRO_CTX.asset b/data/assets/scene/solarsystem/planets/mars/layers/nasa-treks/MRO_CTX.asset index 66362550a2..4fb6cfd830 100644 --- a/data/assets/scene/solarsystem/planets/mars/layers/nasa-treks/MRO_CTX.asset +++ b/data/assets/scene/solarsystem/planets/mars/layers/nasa-treks/MRO_CTX.asset @@ -6,10 +6,13 @@ local globeIdentifier = asset.require("scene/solarsystem//planets/mars/mars").Mars.Identifier + + local treks_b21_017819_2025_xn_22n048w = { Identifier = "b21_017819_2025_xn_22n048w", Name = [[MRO CTX, 22n048w Mosaic]], - FilePath = asset.localResource("MRO_CTX/22n048w_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_CTX/22n048w_Mosaic.vrt"), Description = [[This data was acquired using the Context Camera aboard NASA's Mars Reconnaissance Orbiter spacecraft (MRO). MRO was launched on August 12, 2005 and arrived at Mars on March 10, 2006. It maintains a nearly circular orbit, completing an orbital revolution about every 112 minutes at an altitude of approximately 250 to 316 km or 155 to 196 miles. MRO carries a sophisticated suite of instruments used to analyze and map the landforms, stratigraphy, minerals, and ice of Mars. The Context Camera (CTX) provides black-and-white images with resolutions up to 6 meters/pixel. It provides broader context maps for the higher resolution but narrower fields of view of the HiRISE camera, as well as for other instruments aboard MRO, and is useful for producing mosaicked images of larger areas on Mars' surface.]] @@ -18,7 +21,8 @@ The Context Camera (CTX) provides black-and-white images with resolutions up to local treks_Acheron_Fossae_CTX_BlockAdj_dd = { Identifier = "Acheron_Fossae_CTX_BlockAdj_dd", Name = [[MRO CTX, Acheron Fossae Mosaic]], - FilePath = asset.localResource("MRO_CTX/Acheron_Fossae_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_CTX/Acheron_Fossae_Mosaic.vrt"), Description = [[This data was acquired using the Context Camera aboard NASA's Mars Reconnaissance Orbiter spacecraft (MRO). MRO was launched on August 12, 2005 and arrived at Mars on March 10, 2006. It maintains a nearly circular orbit, completing an orbital revolution about every 112 minutes at an altitude of approximately 250 to 316 km or 155 to 196 miles. MRO carries a sophisticated suite of instruments used to analyze and map the landforms, stratigraphy, minerals, and ice of Mars. The Context Camera (CTX) provides black-and-white images with resolutions up to 6 meters/pixel. It provides broader context maps for the higher resolution but narrower fields of view of the HiRISE camera, as well as for other instruments aboard MRO, and is useful for producing mosaicked images of larger areas on Mars' surface.]] @@ -27,7 +31,8 @@ The Context Camera (CTX) provides black-and-white images with resolutions up to local treks_Acidalia_Plantia_CTX_BlockAdj_dd = { Identifier = "Acidalia_Plantia_CTX_BlockAdj_dd", Name = [[MRO CTX, Acidalia Plantia Mosaic]], - FilePath = asset.localResource("MRO_CTX/Acidalia_Plantia_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_CTX/Acidalia_Plantia_Mosaic.vrt"), Description = [[This data was acquired using the Context Camera aboard NASA's Mars Reconnaissance Orbiter spacecraft (MRO). MRO was launched on August 12, 2005 and arrived at Mars on March 10, 2006. It maintains a nearly circular orbit, completing an orbital revolution about every 112 minutes at an altitude of approximately 250 to 316 km or 155 to 196 miles. MRO carries a sophisticated suite of instruments used to analyze and map the landforms, stratigraphy, minerals, and ice of Mars. The Context Camera (CTX) provides black-and-white images with resolutions up to 6 meters/pixel. It provides broader context maps for the higher resolution but narrower fields of view of the HiRISE camera, as well as for other instruments aboard MRO, and is useful for producing mosaicked images of larger areas on Mars' surface.]] @@ -36,7 +41,8 @@ The Context Camera (CTX) provides black-and-white images with resolutions up to local treks_Arabia_Terra_CTX_BlockAdj_dd = { Identifier = "Arabia_Terra_CTX_BlockAdj_dd", Name = [[MRO CTX, Arabia Terra Mosaic]], - FilePath = asset.localResource("MRO_CTX/Arabia_Terra_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_CTX/Arabia_Terra_Mosaic.vrt"), Description = [[This data was acquired using the Context Camera aboard NASA's Mars Reconnaissance Orbiter spacecraft (MRO). MRO was launched on August 12, 2005 and arrived at Mars on March 10, 2006. It maintains a nearly circular orbit, completing an orbital revolution about every 112 minutes at an altitude of approximately 250 to 316 km or 155 to 196 miles. MRO carries a sophisticated suite of instruments used to analyze and map the landforms, stratigraphy, minerals, and ice of Mars. The Context Camera (CTX) provides black-and-white images with resolutions up to 6 meters/pixel. It provides broader context maps for the higher resolution but narrower fields of view of the HiRISE camera, as well as for other instruments aboard MRO, and is useful for producing mosaicked images of larger areas on Mars' surface.]] @@ -45,7 +51,8 @@ The Context Camera (CTX) provides black-and-white images with resolutions up to local treks_Aram_Chaos_CTX_BlockAdj_dd = { Identifier = "Aram_Chaos_CTX_BlockAdj_dd", Name = [[MRO CTX, Aram Chaos Mosaic]], - FilePath = asset.localResource("MRO_CTX/Aram_Chaos_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_CTX/Aram_Chaos_Mosaic.vrt"), Description = [[This data was acquired using the Context Camera aboard NASA's Mars Reconnaissance Orbiter spacecraft (MRO). MRO was launched on August 12, 2005 and arrived at Mars on March 10, 2006. It maintains a nearly circular orbit, completing an orbital revolution about every 112 minutes at an altitude of approximately 250 to 316 km or 155 to 196 miles. MRO carries a sophisticated suite of instruments used to analyze and map the landforms, stratigraphy, minerals, and ice of Mars. The Context Camera (CTX) provides black-and-white images with resolutions up to 6 meters/pixel. It provides broader context maps for the higher resolution but narrower fields of view of the HiRISE camera, as well as for other instruments aboard MRO, and is useful for producing mosaicked images of larger areas on Mars' surface.]] @@ -54,7 +61,8 @@ The Context Camera (CTX) provides black-and-white images with resolutions up to local treks_Arcadia_CTX_BlockAdj_dd = { Identifier = "Arcadia_CTX_BlockAdj_dd", Name = [[MRO CTX, Arcadia Mosaic]], - FilePath = asset.localResource("MRO_CTX/Arcadia_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_CTX/Arcadia_Mosaic.vrt"), Description = [[This data was acquired using the Context Camera aboard NASA's Mars Reconnaissance Orbiter spacecraft (MRO). MRO was launched on August 12, 2005 and arrived at Mars on March 10, 2006. It maintains a nearly circular orbit, completing an orbital revolution about every 112 minutes at an altitude of approximately 250 to 316 km or 155 to 196 miles. MRO carries a sophisticated suite of instruments used to analyze and map the landforms, stratigraphy, minerals, and ice of Mars. The Context Camera (CTX) provides black-and-white images with resolutions up to 6 meters/pixel. It provides broader context maps for the higher resolution but narrower fields of view of the HiRISE camera, as well as for other instruments aboard MRO, and is useful for producing mosaicked images of larger areas on Mars' surface.]] @@ -63,7 +71,8 @@ The Context Camera (CTX) provides black-and-white images with resolutions up to local treks_Arcadia_Planitia_CTX_BlockAdj_dd = { Identifier = "Arcadia_Planitia_CTX_BlockAdj_dd", Name = [[MRO CTX, Arcadia Planitia Mosaic]], - FilePath = asset.localResource("MRO_CTX/Arcadia_Planitia_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_CTX/Arcadia_Planitia_Mosaic.vrt"), Description = [[This data was acquired using the Context Camera aboard NASA's Mars Reconnaissance Orbiter spacecraft (MRO). MRO was launched on August 12, 2005 and arrived at Mars on March 10, 2006. It maintains a nearly circular orbit, completing an orbital revolution about every 112 minutes at an altitude of approximately 250 to 316 km or 155 to 196 miles. MRO carries a sophisticated suite of instruments used to analyze and map the landforms, stratigraphy, minerals, and ice of Mars. The Context Camera (CTX) provides black-and-white images with resolutions up to 6 meters/pixel. It provides broader context maps for the higher resolution but narrower fields of view of the HiRISE camera, as well as for other instruments aboard MRO, and is useful for producing mosaicked images of larger areas on Mars' surface.]] @@ -72,7 +81,8 @@ The Context Camera (CTX) provides black-and-white images with resolutions up to local treks_Ausonia_CTX_BlockAdj_dd = { Identifier = "Ausonia_CTX_BlockAdj_dd", Name = [[MRO CTX, Ausonia Mosaic]], - FilePath = asset.localResource("MRO_CTX/Ausonia_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_CTX/Ausonia_Mosaic.vrt"), Description = [[This data was acquired using the Context Camera aboard NASA's Mars Reconnaissance Orbiter spacecraft (MRO). MRO was launched on August 12, 2005 and arrived at Mars on March 10, 2006. It maintains a nearly circular orbit, completing an orbital revolution about every 112 minutes at an altitude of approximately 250 to 316 km or 155 to 196 miles. MRO carries a sophisticated suite of instruments used to analyze and map the landforms, stratigraphy, minerals, and ice of Mars. The Context Camera (CTX) provides black-and-white images with resolutions up to 6 meters/pixel. It provides broader context maps for the higher resolution but narrower fields of view of the HiRISE camera, as well as for other instruments aboard MRO, and is useful for producing mosaicked images of larger areas on Mars' surface.]] @@ -81,7 +91,8 @@ The Context Camera (CTX) provides black-and-white images with resolutions up to local treks_Cerberus_CTX_BlockAdj_dd = { Identifier = "Cerberus_CTX_BlockAdj_dd", Name = [[MRO CTX, Cerberus Mosaic]], - FilePath = asset.localResource("MRO_CTX/Cerberus_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_CTX/Cerberus_Mosaic.vrt"), Description = [[This data was acquired using the Context Camera aboard NASA's Mars Reconnaissance Orbiter spacecraft (MRO). MRO was launched on August 12, 2005 and arrived at Mars on March 10, 2006. It maintains a nearly circular orbit, completing an orbital revolution about every 112 minutes at an altitude of approximately 250 to 316 km or 155 to 196 miles. MRO carries a sophisticated suite of instruments used to analyze and map the landforms, stratigraphy, minerals, and ice of Mars. The Context Camera (CTX) provides black-and-white images with resolutions up to 6 meters/pixel. It provides broader context maps for the higher resolution but narrower fields of view of the HiRISE camera, as well as for other instruments aboard MRO, and is useful for producing mosaicked images of larger areas on Mars' surface.]] @@ -90,7 +101,8 @@ The Context Camera (CTX) provides black-and-white images with resolutions up to local treks_DEM_1m_ColumbiaHills_fixed = { Identifier = "DEM_1m_ColumbiaHills_fixed", Name = [[MRO CTX, Columbia Hills DEM]], - FilePath = asset.localResource("MRO_CTX/Columbia_Hills_DEM.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_CTX/Columbia_Hills_DEM.vrt"), Description = [[This data was acquired using the Context Camera aboard NASA's Mars Reconnaissance Orbiter spacecraft (MRO). MRO was launched on August 12, 2005 and arrived at Mars on March 10, 2006. It maintains a nearly circular orbit, completing an orbital revolution about every 112 minutes at an altitude of approximately 250 to 316 km or 155 to 196 miles. MRO carries a sophisticated suite of instruments used to analyze and map the landforms, stratigraphy, minerals, and ice of Mars. The Context Camera (CTX) provides black-and-white images with resolutions up to 6 meters/pixel. It provides broader context maps for the higher resolution but narrower fields of view of the HiRISE camera, as well as for other instruments aboard MRO, and is useful for producing mosaicked images of larger areas on Mars' surface.]] @@ -99,7 +111,8 @@ The Context Camera (CTX) provides black-and-white images with resolutions up to local treks_Columbus_Crater_CTX_BlockAdj_dd = { Identifier = "Columbus_Crater_CTX_BlockAdj_dd", Name = [[MRO CTX, Columbus Crater Mosaic]], - FilePath = asset.localResource("MRO_CTX/Columbus_Crater_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_CTX/Columbus_Crater_Mosaic.vrt"), Description = [[This data was acquired using the Context Camera aboard NASA's Mars Reconnaissance Orbiter spacecraft (MRO). MRO was launched on August 12, 2005 and arrived at Mars on March 10, 2006. It maintains a nearly circular orbit, completing an orbital revolution about every 112 minutes at an altitude of approximately 250 to 316 km or 155 to 196 miles. MRO carries a sophisticated suite of instruments used to analyze and map the landforms, stratigraphy, minerals, and ice of Mars. The Context Camera (CTX) provides black-and-white images with resolutions up to 6 meters/pixel. It provides broader context maps for the higher resolution but narrower fields of view of the HiRISE camera, as well as for other instruments aboard MRO, and is useful for producing mosaicked images of larger areas on Mars' surface.]] @@ -108,7 +121,8 @@ The Context Camera (CTX) provides black-and-white images with resolutions up to local treks_Copernicus_Crater_CTX_BlockAdj_dd = { Identifier = "Copernicus_Crater_CTX_BlockAdj_dd", Name = [[MRO CTX, Copernicus Crater Mosaic]], - FilePath = asset.localResource("MRO_CTX/Copernicus_Crater_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_CTX/Copernicus_Crater_Mosaic.vrt"), Description = [[This data was acquired using the Context Camera aboard NASA's Mars Reconnaissance Orbiter spacecraft (MRO). MRO was launched on August 12, 2005 and arrived at Mars on March 10, 2006. It maintains a nearly circular orbit, completing an orbital revolution about every 112 minutes at an altitude of approximately 250 to 316 km or 155 to 196 miles. MRO carries a sophisticated suite of instruments used to analyze and map the landforms, stratigraphy, minerals, and ice of Mars. The Context Camera (CTX) provides black-and-white images with resolutions up to 6 meters/pixel. It provides broader context maps for the higher resolution but narrower fields of view of the HiRISE camera, as well as for other instruments aboard MRO, and is useful for producing mosaicked images of larger areas on Mars' surface.]] @@ -117,7 +131,8 @@ The Context Camera (CTX) provides black-and-white images with resolutions up to local treks_Coprates_EMelas_Chasm_CTX_BlockAdj_dd = { Identifier = "Coprates_EMelas_Chasm_CTX_BlockAdj_dd", Name = [[MRO CTX, Coprates EMelas Chasm Mosaic]], - FilePath = asset.localResource("MRO_CTX/Coprates_EMelas_Chasm_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_CTX/Coprates_EMelas_Chasm_Mosaic.vrt"), Description = [[This data was acquired using the Context Camera aboard NASA's Mars Reconnaissance Orbiter spacecraft (MRO). MRO was launched on August 12, 2005 and arrived at Mars on March 10, 2006. It maintains a nearly circular orbit, completing an orbital revolution about every 112 minutes at an altitude of approximately 250 to 316 km or 155 to 196 miles. MRO carries a sophisticated suite of instruments used to analyze and map the landforms, stratigraphy, minerals, and ice of Mars. The Context Camera (CTX) provides black-and-white images with resolutions up to 6 meters/pixel. It provides broader context maps for the higher resolution but narrower fields of view of the HiRISE camera, as well as for other instruments aboard MRO, and is useful for producing mosaicked images of larger areas on Mars' surface.]] @@ -126,7 +141,8 @@ The Context Camera (CTX) provides black-and-white images with resolutions up to local treks_curiosity_ctx_mosaic = { Identifier = "curiosity_ctx_mosaic", Name = [[MRO CTX, Curiosity Roving Site Mosaic]], - FilePath = asset.localResource("MRO_CTX/Curiosity_Roving_Site_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_CTX/Curiosity_Roving_Site_Mosaic.vrt"), Description = [[This data was acquired using the Context Camera aboard NASA's Mars Reconnaissance Orbiter spacecraft (MRO). MRO was launched on August 12, 2005 and arrived at Mars on March 10, 2006. It maintains a nearly circular orbit, completing an orbital revolution about every 112 minutes at an altitude of approximately 250 to 316 km or 155 to 196 miles. MRO carries a sophisticated suite of instruments used to analyze and map the landforms, stratigraphy, minerals, and ice of Mars. The Context Camera (CTX) provides black-and-white images with resolutions up to 6 meters/pixel. It provides broader context maps for the higher resolution but narrower fields of view of the HiRISE camera, as well as for other instruments aboard MRO, and is useful for producing mosaicked images of larger areas on Mars' surface.]] @@ -135,7 +151,8 @@ The Context Camera (CTX) provides black-and-white images with resolutions up to local treks_Deuteronilus1_2_CTX_BlockAdj_dd = { Identifier = "Deuteronilus1_2_CTX_BlockAdj_dd", Name = [[MRO CTX, Deuteronilus Mensae Mosaic]], - FilePath = asset.localResource("MRO_CTX/Deuteronilus_Mensae_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_CTX/Deuteronilus_Mensae_Mosaic.vrt"), Description = [[This data was acquired using the Context Camera aboard NASA's Mars Reconnaissance Orbiter spacecraft (MRO). MRO was launched on August 12, 2005 and arrived at Mars on March 10, 2006. It maintains a nearly circular orbit, completing an orbital revolution about every 112 minutes at an altitude of approximately 250 to 316 km or 155 to 196 miles. MRO carries a sophisticated suite of instruments used to analyze and map the landforms, stratigraphy, minerals, and ice of Mars. The Context Camera (CTX) provides black-and-white images with resolutions up to 6 meters/pixel. It provides broader context maps for the higher resolution but narrower fields of view of the HiRISE camera, as well as for other instruments aboard MRO, and is useful for producing mosaicked images of larger areas on Mars' surface.]] @@ -144,21 +161,24 @@ The Context Camera (CTX) provides black-and-white images with resolutions up to local treks_CTX_DEM_East_Melas = { Identifier = "CTX_DEM_East_Melas", Name = [[MRO CTX, East Melas DEM]], - FilePath = asset.localResource("MRO_CTX/East_Melas_DEM.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_CTX/East_Melas_DEM.vrt"), Description = [[This is a digital elevation model (DEM) for the Eastern Melas Chasma region of Valles Marineris. It is one of the areas identified as a potential Exploration Zone (EZ) for human exploration of Mars. This DEM was generated by combining 9 stereographic pairs of CTX images. Each individual pair was taken of the same area but from different angles. The nine pairs were joined together to cover a broad area of the EZ. This data was acquired using the Context Camera aboard NASA's Mars Reconnaissance Orbiter spacecraft (MRO). MRO was launched on August 12, 2005 and arrived at Mars on March 10, 2006. It maintains a nearly circular orbit, completing an orbital revolution about every 112 minutes at an altitude of approximately 250 to 316 km or 155 to 196 miles. MRO carries a sophisticated suite of instruments used to analyze and map the landforms, stratigraphy, minerals, and ice of Mars. The Context Camera (CTX) provides black-and-white images with resolutions up to 6 meters/pixel. It provides broader context maps for the higher resolution but narrower fields of view of the HiRISE camera, as well as for other instruments aboard MRO, and is useful for producing mosaicked images of larger areas on Mars' surface.]] } local treks_CTX_Shade_East_Melas = { Identifier = "CTX_Shade_East_Melas", Name = [[MRO CTX, East Melas Hillshade]], - FilePath = asset.localResource("MRO_CTX/East_Melas_Hillshade.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_CTX/East_Melas_Hillshade.vrt"), Description = [[This is a hillshade rendition of the digital elevation model (DEM) for the Eastern Melas Chasma region of Valles Marineris. It is one of the areas identified as a potential Exploration Zone (EZ) for human exploration of Mars. The hillshade layer is a shaded relief view of the DEM, making it particularly easy to visualize surface topography. The DEM was generated by combining 9 stereographic pairs of CTX images. Each individual pair was taken of the same area but from different angles. The nine pairs were joined together to cover a broad area of the EZ. This data was acquired using the Context Camera aboard NASA's Mars Reconnaissance Orbiter spacecraft (MRO). MRO was launched on August 12, 2005 and arrived at Mars on March 10, 2006. It maintains a nearly circular orbit, completing an orbital revolution about every 112 minutes at an altitude of approximately 250 to 316 km or 155 to 196 miles. MRO carries a sophisticated suite of instruments used to analyze and map the landforms, stratigraphy, minerals, and ice of Mars. The Context Camera (CTX) provides black-and-white images with resolutions up to 6 meters/pixel. It provides broader context maps for the higher resolution but narrower fields of view of the HiRISE camera, as well as for other instruments aboard MRO, and is useful for producing mosaicked images of larger areas on Mars' surface.]] } local treks_NE_Marineris_Crater_CTX_BlockAdj_dd = { Identifier = "NE_Marineris_Crater_CTX_BlockAdj_dd", Name = [[MRO CTX, Eastern Valles Marineris Mosaic]], - FilePath = asset.localResource("MRO_CTX/Eastern_Valles_Marineris_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_CTX/Eastern_Valles_Marineris_Mosaic.vrt"), Description = [[This data was acquired using the Context Camera aboard NASA's Mars Reconnaissance Orbiter spacecraft (MRO). MRO was launched on August 12, 2005 and arrived at Mars on March 10, 2006. It maintains a nearly circular orbit, completing an orbital revolution about every 112 minutes at an altitude of approximately 250 to 316 km or 155 to 196 miles. MRO carries a sophisticated suite of instruments used to analyze and map the landforms, stratigraphy, minerals, and ice of Mars. The Context Camera (CTX) provides black-and-white images with resolutions up to 6 meters/pixel. It provides broader context maps for the higher resolution but narrower fields of view of the HiRISE camera, as well as for other instruments aboard MRO, and is useful for producing mosaicked images of larger areas on Mars' surface.]] @@ -167,7 +187,8 @@ The Context Camera (CTX) provides black-and-white images with resolutions up to local treks_SE_Marineris_CTX_BlockAdj_dd = { Identifier = "SE_Marineris_CTX_BlockAdj_dd", Name = [[MRO CTX, Equatorial Valles Marineries Mosaic]], - FilePath = asset.localResource("MRO_CTX/Equatorial_Valles_Marineries_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_CTX/Equatorial_Valles_Marineries_Mosaic.vrt"), Description = [[This data was acquired using the Context Camera aboard NASA's Mars Reconnaissance Orbiter spacecraft (MRO). MRO was launched on August 12, 2005 and arrived at Mars on March 10, 2006. It maintains a nearly circular orbit, completing an orbital revolution about every 112 minutes at an altitude of approximately 250 to 316 km or 155 to 196 miles. MRO carries a sophisticated suite of instruments used to analyze and map the landforms, stratigraphy, minerals, and ice of Mars. The Context Camera (CTX) provides black-and-white images with resolutions up to 6 meters/pixel. It provides broader context maps for the higher resolution but narrower fields of view of the HiRISE camera, as well as for other instruments aboard MRO, and is useful for producing mosaicked images of larger areas on Mars' surface.]] @@ -176,7 +197,8 @@ The Context Camera (CTX) provides black-and-white images with resolutions up to local treks_Erebus_Montes_CTX_BlockAdj_dd = { Identifier = "Erebus_Montes_CTX_BlockAdj_dd", Name = [[MRO CTX, Erebus Montes Mosaic]], - FilePath = asset.localResource("MRO_CTX/Erebus_Montes_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_CTX/Erebus_Montes_Mosaic.vrt"), Description = [[This data was acquired using the Context Camera aboard NASA's Mars Reconnaissance Orbiter spacecraft (MRO). MRO was launched on August 12, 2005 and arrived at Mars on March 10, 2006. It maintains a nearly circular orbit, completing an orbital revolution about every 112 minutes at an altitude of approximately 250 to 316 km or 155 to 196 miles. MRO carries a sophisticated suite of instruments used to analyze and map the landforms, stratigraphy, minerals, and ice of Mars. The Context Camera (CTX) provides black-and-white images with resolutions up to 6 meters/pixel. It provides broader context maps for the higher resolution but narrower fields of view of the HiRISE camera, as well as for other instruments aboard MRO, and is useful for producing mosaicked images of larger areas on Mars' surface.]] @@ -185,7 +207,8 @@ The Context Camera (CTX) provides black-and-white images with resolutions up to local treks_Gale_CTX_BlockAdj_dd = { Identifier = "Gale_CTX_BlockAdj_dd", Name = [[MRO CTX, Gale Crater Mosaic]], - FilePath = asset.localResource("MRO_CTX/Gale_Crater_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_CTX/Gale_Crater_Mosaic.vrt"), Description = [[This data was acquired using the Context Camera aboard NASA's Mars Reconnaissance Orbiter spacecraft (MRO). MRO was launched on August 12, 2005 and arrived at Mars on March 10, 2006. It maintains a nearly circular orbit, completing an orbital revolution about every 112 minutes at an altitude of approximately 250 to 316 km or 155 to 196 miles. MRO carries a sophisticated suite of instruments used to analyze and map the landforms, stratigraphy, minerals, and ice of Mars. The Context Camera (CTX) provides black-and-white images with resolutions up to 6 meters/pixel. It provides broader context maps for the higher resolution but narrower fields of view of the HiRISE camera, as well as for other instruments aboard MRO, and is useful for producing mosaicked images of larger areas on Mars' surface.]] @@ -194,7 +217,8 @@ The Context Camera (CTX) provides black-and-white images with resolutions up to local treks_Gusev_CTX_BlockAdj_dd = { Identifier = "Gusev_CTX_BlockAdj_dd", Name = [[MRO CTX, Gusev Crater Mosaic]], - FilePath = asset.localResource("MRO_CTX/Gusev_Crater_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_CTX/Gusev_Crater_Mosaic.vrt"), Description = [[This data was acquired using the Context Camera aboard NASA's Mars Reconnaissance Orbiter spacecraft (MRO). MRO was launched on August 12, 2005 and arrived at Mars on March 10, 2006. It maintains a nearly circular orbit, completing an orbital revolution about every 112 minutes at an altitude of approximately 250 to 316 km or 155 to 196 miles. MRO carries a sophisticated suite of instruments used to analyze and map the landforms, stratigraphy, minerals, and ice of Mars. The Context Camera (CTX) provides black-and-white images with resolutions up to 6 meters/pixel. It provides broader context maps for the higher resolution but narrower fields of view of the HiRISE camera, as well as for other instruments aboard MRO, and is useful for producing mosaicked images of larger areas on Mars' surface.]] @@ -203,7 +227,8 @@ The Context Camera (CTX) provides black-and-white images with resolutions up to local treks_Hadriacus_CTX_BlockAdj_dd = { Identifier = "Hadriacus_CTX_BlockAdj_dd", Name = [[MRO CTX, Hadriacus Mosaic]], - FilePath = asset.localResource("MRO_CTX/Hadriacus_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_CTX/Hadriacus_Mosaic.vrt"), Description = [[This data was acquired using the Context Camera aboard NASA's Mars Reconnaissance Orbiter spacecraft (MRO). MRO was launched on August 12, 2005 and arrived at Mars on March 10, 2006. It maintains a nearly circular orbit, completing an orbital revolution about every 112 minutes at an altitude of approximately 250 to 316 km or 155 to 196 miles. MRO carries a sophisticated suite of instruments used to analyze and map the landforms, stratigraphy, minerals, and ice of Mars. The Context Camera (CTX) provides black-and-white images with resolutions up to 6 meters/pixel. It provides broader context maps for the higher resolution but narrower fields of view of the HiRISE camera, as well as for other instruments aboard MRO, and is useful for producing mosaicked images of larger areas on Mars' surface.]] @@ -212,7 +237,8 @@ The Context Camera (CTX) provides black-and-white images with resolutions up to local treks_Hale_Crater_CTX_BlockAdj_dd = { Identifier = "Hale_Crater_CTX_BlockAdj_dd", Name = [[MRO CTX, Hale Crater Mosaic]], - FilePath = asset.localResource("MRO_CTX/Hale_Crater_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_CTX/Hale_Crater_Mosaic.vrt"), Description = [[This data was acquired using the Context Camera aboard NASA's Mars Reconnaissance Orbiter spacecraft (MRO). MRO was launched on August 12, 2005 and arrived at Mars on March 10, 2006. It maintains a nearly circular orbit, completing an orbital revolution about every 112 minutes at an altitude of approximately 250 to 316 km or 155 to 196 miles. MRO carries a sophisticated suite of instruments used to analyze and map the landforms, stratigraphy, minerals, and ice of Mars. The Context Camera (CTX) provides black-and-white images with resolutions up to 6 meters/pixel. It provides broader context maps for the higher resolution but narrower fields of view of the HiRISE camera, as well as for other instruments aboard MRO, and is useful for producing mosaicked images of larger areas on Mars' surface.]] @@ -221,7 +247,8 @@ The Context Camera (CTX) provides black-and-white images with resolutions up to local treks_Hebrus_CTX_BlockAdj_dd = { Identifier = "Hebrus_CTX_BlockAdj_dd", Name = [[MRO CTX, Hebrus Valles Mosaic]], - FilePath = asset.localResource("MRO_CTX/Hebrus_Valles_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_CTX/Hebrus_Valles_Mosaic.vrt"), Description = [[This data was acquired using the Context Camera aboard NASA's Mars Reconnaissance Orbiter spacecraft (MRO). MRO was launched on August 12, 2005 and arrived at Mars on March 10, 2006. It maintains a nearly circular orbit, completing an orbital revolution about every 112 minutes at an altitude of approximately 250 to 316 km or 155 to 196 miles. MRO carries a sophisticated suite of instruments used to analyze and map the landforms, stratigraphy, minerals, and ice of Mars. The Context Camera (CTX) provides black-and-white images with resolutions up to 6 meters/pixel. It provides broader context maps for the higher resolution but narrower fields of view of the HiRISE camera, as well as for other instruments aboard MRO, and is useful for producing mosaicked images of larger areas on Mars' surface.]] @@ -230,7 +257,8 @@ The Context Camera (CTX) provides black-and-white images with resolutions up to local treks_Hellas_Hellas2_CTX_BlockAdj_dd = { Identifier = "Hellas_Hellas2_CTX_BlockAdj_dd", Name = [[MRO CTX, Hellas Eastern Rim Mosaic]], - FilePath = asset.localResource("MRO_CTX/Hellas_Eastern_Rim_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_CTX/Hellas_Eastern_Rim_Mosaic.vrt"), Description = [[This data was acquired using the Context Camera aboard NASA's Mars Reconnaissance Orbiter spacecraft (MRO). MRO was launched on August 12, 2005 and arrived at Mars on March 10, 2006. It maintains a nearly circular orbit, completing an orbital revolution about every 112 minutes at an altitude of approximately 250 to 316 km or 155 to 196 miles. MRO carries a sophisticated suite of instruments used to analyze and map the landforms, stratigraphy, minerals, and ice of Mars. The Context Camera (CTX) provides black-and-white images with resolutions up to 6 meters/pixel. It provides broader context maps for the higher resolution but narrower fields of view of the HiRISE camera, as well as for other instruments aboard MRO, and is useful for producing mosaicked images of larger areas on Mars' surface.]] @@ -239,7 +267,8 @@ The Context Camera (CTX) provides black-and-white images with resolutions up to local treks_Hellas3_CTX_BlockAdj_dd = { Identifier = "Hellas3_CTX_BlockAdj_dd", Name = [[MRO CTX, Hellas Mesopotamia Mosaic]], - FilePath = asset.localResource("MRO_CTX/Hellas_Mesopotamia_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_CTX/Hellas_Mesopotamia_Mosaic.vrt"), Description = [[This data was acquired using the Context Camera aboard NASA's Mars Reconnaissance Orbiter spacecraft (MRO). MRO was launched on August 12, 2005 and arrived at Mars on March 10, 2006. It maintains a nearly circular orbit, completing an orbital revolution about every 112 minutes at an altitude of approximately 250 to 316 km or 155 to 196 miles. MRO carries a sophisticated suite of instruments used to analyze and map the landforms, stratigraphy, minerals, and ice of Mars. The Context Camera (CTX) provides black-and-white images with resolutions up to 6 meters/pixel. It provides broader context maps for the higher resolution but narrower fields of view of the HiRISE camera, as well as for other instruments aboard MRO, and is useful for producing mosaicked images of larger areas on Mars' surface.]] @@ -248,7 +277,8 @@ The Context Camera (CTX) provides black-and-white images with resolutions up to local treks_Huygens_CTX_BlockAdj_dd = { Identifier = "Huygens_CTX_BlockAdj_dd", Name = [[MRO CTX, Huygens Crater Mosaic]], - FilePath = asset.localResource("MRO_CTX/Huygens_Crater_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_CTX/Huygens_Crater_Mosaic.vrt"), Description = [[This data was acquired using the Context Camera aboard NASA's Mars Reconnaissance Orbiter spacecraft (MRO). MRO was launched on August 12, 2005 and arrived at Mars on March 10, 2006. It maintains a nearly circular orbit, completing an orbital revolution about every 112 minutes at an altitude of approximately 250 to 316 km or 155 to 196 miles. MRO carries a sophisticated suite of instruments used to analyze and map the landforms, stratigraphy, minerals, and ice of Mars. The Context Camera (CTX) provides black-and-white images with resolutions up to 6 meters/pixel. It provides broader context maps for the higher resolution but narrower fields of view of the HiRISE camera, as well as for other instruments aboard MRO, and is useful for producing mosaicked images of larger areas on Mars' surface.]] @@ -257,7 +287,8 @@ The Context Camera (CTX) provides black-and-white images with resolutions up to local treks_Hypanis_Delta_CTX_BlockAdj_dd = { Identifier = "Hypanis_Delta_CTX_BlockAdj_dd", Name = [[MRO CTX, Hypanis Delta Mosaic]], - FilePath = asset.localResource("MRO_CTX/Hypanis_Delta_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_CTX/Hypanis_Delta_Mosaic.vrt"), Description = [[This data was acquired using the Context Camera aboard NASA's Mars Reconnaissance Orbiter spacecraft (MRO). MRO was launched on August 12, 2005 and arrived at Mars on March 10, 2006. It maintains a nearly circular orbit, completing an orbital revolution about every 112 minutes at an altitude of approximately 250 to 316 km or 155 to 196 miles. MRO carries a sophisticated suite of instruments used to analyze and map the landforms, stratigraphy, minerals, and ice of Mars. The Context Camera (CTX) provides black-and-white images with resolutions up to 6 meters/pixel. It provides broader context maps for the higher resolution but narrower fields of view of the HiRISE camera, as well as for other instruments aboard MRO, and is useful for producing mosaicked images of larger areas on Mars' surface.]] @@ -266,7 +297,8 @@ The Context Camera (CTX) provides black-and-white images with resolutions up to local treks_Ismenius_Cavus_CTX_BlockAdj_dd = { Identifier = "Ismenius_Cavus_CTX_BlockAdj_dd", Name = [[MRO CTX, Ismenius Cavus Mosaic]], - FilePath = asset.localResource("MRO_CTX/Ismenius_Cavus_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_CTX/Ismenius_Cavus_Mosaic.vrt"), Description = [[This data was acquired using the Context Camera aboard NASA's Mars Reconnaissance Orbiter spacecraft (MRO). MRO was launched on August 12, 2005 and arrived at Mars on March 10, 2006. It maintains a nearly circular orbit, completing an orbital revolution about every 112 minutes at an altitude of approximately 250 to 316 km or 155 to 196 miles. MRO carries a sophisticated suite of instruments used to analyze and map the landforms, stratigraphy, minerals, and ice of Mars. The Context Camera (CTX) provides black-and-white images with resolutions up to 6 meters/pixel. It provides broader context maps for the higher resolution but narrower fields of view of the HiRISE camera, as well as for other instruments aboard MRO, and is useful for producing mosaicked images of larger areas on Mars' surface.]] @@ -275,7 +307,8 @@ The Context Camera (CTX) provides black-and-white images with resolutions up to local treks_Jezero_CTX_BlockAdj_dd = { Identifier = "Jezero_CTX_BlockAdj_dd", Name = [[MRO CTX, Jezero Mosaic, Preliminary]], - FilePath = asset.localResource("MRO_CTX/Jezero_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_CTX/Jezero_Mosaic.vrt"), Description = [[This data was acquired using the Context Camera aboard NASA's Mars Reconnaissance Orbiter spacecraft (MRO). MRO was launched on August 12, 2005 and arrived at Mars on March 10, 2006. It maintains a nearly circular orbit, completing an orbital revolution about every 112 minutes at an altitude of approximately 250 to 316 km or 155 to 196 miles. MRO carries a sophisticated suite of instruments used to analyze and map the landforms, stratigraphy, minerals, and ice of Mars. The Context Camera (CTX) provides black-and-white images with resolutions up to 6 meters/pixel. It provides broader context maps for the higher resolution but narrower fields of view of the HiRISE camera, as well as for other instruments aboard MRO, and is useful for producing mosaicked images of larger areas on Mars' surface.]] @@ -284,7 +317,8 @@ The Context Camera (CTX) provides black-and-white images with resolutions up to local treks_Kasei_Valles_CTX_BlockAdj_dd = { Identifier = "Kasei_Valles_CTX_BlockAdj_dd", Name = [[MRO CTX, Kasei Valles Mosaic]], - FilePath = asset.localResource("MRO_CTX/Kasei_Valles_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_CTX/Kasei_Valles_Mosaic.vrt"), Description = [[This data was acquired using the Context Camera aboard NASA's Mars Reconnaissance Orbiter spacecraft (MRO). MRO was launched on August 12, 2005 and arrived at Mars on March 10, 2006. It maintains a nearly circular orbit, completing an orbital revolution about every 112 minutes at an altitude of approximately 250 to 316 km or 155 to 196 miles. MRO carries a sophisticated suite of instruments used to analyze and map the landforms, stratigraphy, minerals, and ice of Mars. The Context Camera (CTX) provides black-and-white images with resolutions up to 6 meters/pixel. It provides broader context maps for the higher resolution but narrower fields of view of the HiRISE camera, as well as for other instruments aboard MRO, and is useful for producing mosaicked images of larger areas on Mars' surface.]] @@ -293,7 +327,8 @@ The Context Camera (CTX) provides black-and-white images with resolutions up to local treks_Mawrth_Valles_CTX_BlockAdj_dd = { Identifier = "Mawrth_Valles_CTX_BlockAdj_dd", Name = [[MRO CTX, Mawrth Vallis Mosaic]], - FilePath = asset.localResource("MRO_CTX/Mawrth_Vallis_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_CTX/Mawrth_Vallis_Mosaic.vrt"), Description = [[This data was acquired using the Context Camera aboard NASA's Mars Reconnaissance Orbiter spacecraft (MRO). MRO was launched on August 12, 2005 and arrived at Mars on March 10, 2006. It maintains a nearly circular orbit, completing an orbital revolution about every 112 minutes at an altitude of approximately 250 to 316 km or 155 to 196 miles. MRO carries a sophisticated suite of instruments used to analyze and map the landforms, stratigraphy, minerals, and ice of Mars. The Context Camera (CTX) provides black-and-white images with resolutions up to 6 meters/pixel. It provides broader context maps for the higher resolution but narrower fields of view of the HiRISE camera, as well as for other instruments aboard MRO, and is useful for producing mosaicked images of larger areas on Mars' surface.]] @@ -302,7 +337,8 @@ The Context Camera (CTX) provides black-and-white images with resolutions up to local treks_McLaughlin_Crater_CTX_BlockAdj_dd = { Identifier = "McLaughlin_Crater_CTX_BlockAdj_dd", Name = [[MRO CTX, McLaughlin Crater Mosaic]], - FilePath = asset.localResource("MRO_CTX/McLaughlin_Crater_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_CTX/McLaughlin_Crater_Mosaic.vrt"), Description = [[This data was acquired using the Context Camera aboard NASA's Mars Reconnaissance Orbiter spacecraft (MRO). MRO was launched on August 12, 2005 and arrived at Mars on March 10, 2006. It maintains a nearly circular orbit, completing an orbital revolution about every 112 minutes at an altitude of approximately 250 to 316 km or 155 to 196 miles. MRO carries a sophisticated suite of instruments used to analyze and map the landforms, stratigraphy, minerals, and ice of Mars. The Context Camera (CTX) provides black-and-white images with resolutions up to 6 meters/pixel. It provides broader context maps for the higher resolution but narrower fields of view of the HiRISE camera, as well as for other instruments aboard MRO, and is useful for producing mosaicked images of larger areas on Mars' surface.]] @@ -311,7 +347,8 @@ The Context Camera (CTX) provides black-and-white images with resolutions up to local treks_S_Meridiani_Sinus_Planium_CTX_BlockAdj_dd = { Identifier = "S_Meridiani_Sinus_Planium_CTX_BlockAdj_dd", Name = [[MRO CTX, Meridiani Planum - Sinus Meridiani Mosaic]], - FilePath = asset.localResource("MRO_CTX/Meridiani_Planum_-_Sinus_Meridiani_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_CTX/Meridiani_Planum_-_Sinus_Meridiani_Mosaic.vrt"), Description = [[This data was acquired using the Context Camera aboard NASA's Mars Reconnaissance Orbiter spacecraft (MRO). MRO was launched on August 12, 2005 and arrived at Mars on March 10, 2006. It maintains a nearly circular orbit, completing an orbital revolution about every 112 minutes at an altitude of approximately 250 to 316 km or 155 to 196 miles. MRO carries a sophisticated suite of instruments used to analyze and map the landforms, stratigraphy, minerals, and ice of Mars. The Context Camera (CTX) provides black-and-white images with resolutions up to 6 meters/pixel. It provides broader context maps for the higher resolution but narrower fields of view of the HiRISE camera, as well as for other instruments aboard MRO, and is useful for producing mosaicked images of larger areas on Mars' surface.]] @@ -320,7 +357,8 @@ The Context Camera (CTX) provides black-and-white images with resolutions up to local treks_CTX_beta01_uncontrolled_5m_Caltech = { Identifier = "CTX_beta01_uncontrolled_5m_Caltech", Name = [[MRO CTX, Mosaic Global Uncontrolled (Caltech)]], - FilePath = asset.localResource("MRO_CTX/Mosaic_Global_Uncontrolled_Caltech.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_CTX/Mosaic_Global_Uncontrolled_Caltech.vrt"), Description = [[This is a preliminary uncontrolled Context Camera (CTX) mosaic, called beta01, that the Murray Lab at Caltech has created to (1) generate a list of orbits that will be included in the final mosaic, (2) decipher challenges involved with generating a product of this unprecedented scale, and (3) solicit feedback from the Mars science community for how best to generate the mosaic in a way that helps as diverse a group of scientists as possible. The CTX camera, as managed by Malin Space Science Systems (MSSS), has attained near global coverage of Mars at the scale of ~5 m/pixel. All data used in the construction of this CTX global mosaic have been publicly released and are freely available via the NASA Planetary Data System. The Murray Lab/Caltech grants free use of the beta01 version of the mosaic for all purposes. When used, data credit should be: NASA/JPL/MSSS/The Caltech Murray Lab/Esri. This tiled web service, as hosted by Esri, is made available using lossy Jpeg compression at an 8 bit data range. To access Esri's Tiled Web Service for this mosaic, go to https://usgs.maps.arcgis.com/home/item.html?id=b164957a19544f55a8d6a001c952a590. To download the data, go to http://murray-lab.caltech.edu/CTX/. @@ -332,14 +370,16 @@ Credit: NASA/JPL/MSSS/The Caltech Murray Lab/Esri]] local treks_InSightCTXMosaic_112917 = { Identifier = "InSightCTXMosaic_112917", Name = [[MRO CTX, Mosaic InSight]], - FilePath = asset.localResource("MRO_CTX/Mosaic_InSight.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_CTX/Mosaic_InSight.vrt"), Description = [[This is a 5m/px CTX orthophoto mosaic of the InSight Landing Site. After being transformed using a spline transformation, each image had the exterior 100m of pixels removed and was detrended by fitting a third order polynomial and subtracting it from each image. All of the detrended images were then mosaiced into a single image and color balanced using Distributed Gradient-Domain processing.]] } local treks_olympus_monseq = { Identifier = "olympus_monseq", Name = [[MRO CTX, Mosaic Olympus Mons]], - FilePath = asset.localResource("MRO_CTX/Mosaic_Olympus_Mons.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_CTX/Mosaic_Olympus_Mons.vrt"), Description = [[This is a beta section of a CTX global mosaic produced by Jay Dickson. It was created by map projecting CT X images with ISIS3, and color balancing/stitching the images with Adobe Photoshop. A footprint layer shows the seams of image boundaries. @@ -350,7 +390,8 @@ Dickson et al. 2018 LPSC programs with abstracts https://www.hou.usra.edu/meetin local treks_Newton_Crater_CTX_BlockAdj_dd = { Identifier = "Newton_Crater_CTX_BlockAdj_dd", Name = [[MRO CTX, Newton Crater Mosaic]], - FilePath = asset.localResource("MRO_CTX/Newton_Crater_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_CTX/Newton_Crater_Mosaic.vrt"), Description = [[This data was acquired using the Context Camera aboard NASA's Mars Reconnaissance Orbiter spacecraft (MRO). MRO was launched on August 12, 2005 and arrived at Mars on March 10, 2006. It maintains a nearly circular orbit, completing an orbital revolution about every 112 minutes at an altitude of approximately 250 to 316 km or 155 to 196 miles. MRO carries a sophisticated suite of instruments used to analyze and map the landforms, stratigraphy, minerals, and ice of Mars. The Context Camera (CTX) provides black-and-white images with resolutions up to 6 meters/pixel. It provides broader context maps for the higher resolution but narrower fields of view of the HiRISE camera, as well as for other instruments aboard MRO, and is useful for producing mosaicked images of larger areas on Mars' surface.]] @@ -359,7 +400,8 @@ The Context Camera (CTX) provides black-and-white images with resolutions up to local treks_Noactis_Landing_CTX_BlockAdj_dd = { Identifier = "Noactis_Landing_CTX_BlockAdj_dd", Name = [[MRO CTX, Noctis Landing Mosaic]], - FilePath = asset.localResource("MRO_CTX/Noctis_Landing_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_CTX/Noctis_Landing_Mosaic.vrt"), Description = [[This data was acquired using the Context Camera aboard NASA's Mars Reconnaissance Orbiter spacecraft (MRO). MRO was launched on August 12, 2005 and arrived at Mars on March 10, 2006. It maintains a nearly circular orbit, completing an orbital revolution about every 112 minutes at an altitude of approximately 250 to 316 km or 155 to 196 miles. MRO carries a sophisticated suite of instruments used to analyze and map the landforms, stratigraphy, minerals, and ice of Mars. The Context Camera (CTX) provides black-and-white images with resolutions up to 6 meters/pixel. It provides broader context maps for the higher resolution but narrower fields of view of the HiRISE camera, as well as for other instruments aboard MRO, and is useful for producing mosaicked images of larger areas on Mars' surface.]] @@ -368,7 +410,8 @@ The Context Camera (CTX) provides black-and-white images with resolutions up to local treks_Protonilus_CTX_BlockAdj_dd = { Identifier = "Protonilus_CTX_BlockAdj_dd", Name = [[MRO CTX, Protonilus Mensae Mosaic]], - FilePath = asset.localResource("MRO_CTX/Protonilus_Mensae_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_CTX/Protonilus_Mensae_Mosaic.vrt"), Description = [[This data was acquired using the Context Camera aboard NASA's Mars Reconnaissance Orbiter spacecraft (MRO). MRO was launched on August 12, 2005 and arrived at Mars on March 10, 2006. It maintains a nearly circular orbit, completing an orbital revolution about every 112 minutes at an altitude of approximately 250 to 316 km or 155 to 196 miles. MRO carries a sophisticated suite of instruments used to analyze and map the landforms, stratigraphy, minerals, and ice of Mars. The Context Camera (CTX) provides black-and-white images with resolutions up to 6 meters/pixel. It provides broader context maps for the higher resolution but narrower fields of view of the HiRISE camera, as well as for other instruments aboard MRO, and is useful for producing mosaicked images of larger areas on Mars' surface.]] @@ -377,7 +420,8 @@ The Context Camera (CTX) provides black-and-white images with resolutions up to local treks_S_Nectaris_Fossae_CTX_BlockAdj_dd = { Identifier = "S_Nectaris_Fossae_CTX_BlockAdj_dd", Name = [[MRO CTX, Southern Nectaris Fossae Mosaic]], - FilePath = asset.localResource("MRO_CTX/Southern_Nectaris_Fossae_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_CTX/Southern_Nectaris_Fossae_Mosaic.vrt"), Description = [[This data was acquired using the Context Camera aboard NASA's Mars Reconnaissance Orbiter spacecraft (MRO). MRO was launched on August 12, 2005 and arrived at Mars on March 10, 2006. It maintains a nearly circular orbit, completing an orbital revolution about every 112 minutes at an altitude of approximately 250 to 316 km or 155 to 196 miles. MRO carries a sophisticated suite of instruments used to analyze and map the landforms, stratigraphy, minerals, and ice of Mars. The Context Camera (CTX) provides black-and-white images with resolutions up to 6 meters/pixel. It provides broader context maps for the higher resolution but narrower fields of view of the HiRISE camera, as well as for other instruments aboard MRO, and is useful for producing mosaicked images of larger areas on Mars' surface.]] @@ -386,7 +430,8 @@ The Context Camera (CTX) provides black-and-white images with resolutions up to local treks_DEM_1m_VictoriaCrater = { Identifier = "DEM_1m_VictoriaCrater", Name = [[MRO CTX, Victoria Crater DEM]], - FilePath = asset.localResource("MRO_CTX/Victoria_Crater_DEM.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_CTX/Victoria_Crater_DEM.vrt"), Description = [[This data was acquired using the Context Camera aboard NASA's Mars Reconnaissance Orbiter spacecraft (MRO). MRO was launched on August 12, 2005 and arrived at Mars on March 10, 2006. It maintains a nearly circular orbit, completing an orbital revolution about every 112 minutes at an altitude of approximately 250 to 316 km or 155 to 196 miles. MRO carries a sophisticated suite of instruments used to analyze and map the landforms, stratigraphy, minerals, and ice of Mars. The Context Camera (CTX) provides black-and-white images with resolutions up to 6 meters/pixel. It provides broader context maps for the higher resolution but narrower fields of view of the HiRISE camera, as well as for other instruments aboard MRO, and is useful for producing mosaicked images of larger areas on Mars' surface.]] @@ -395,7 +440,8 @@ The Context Camera (CTX) provides black-and-white images with resolutions up to local treks_Viking_CTX_BlockAdj_dd = { Identifier = "Viking_CTX_BlockAdj_dd", Name = [[MRO CTX, Viking 1 Landing Site Mosaic]], - FilePath = asset.localResource("MRO_CTX/Viking_1_Landing_Site_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_CTX/Viking_1_Landing_Site_Mosaic.vrt"), Description = [[This data was acquired using the Context Camera aboard NASA's Mars Reconnaissance Orbiter spacecraft (MRO). MRO was launched on August 12, 2005 and arrived at Mars on March 10, 2006. It maintains a nearly circular orbit, completing an orbital revolution about every 112 minutes at an altitude of approximately 250 to 316 km or 155 to 196 miles. MRO carries a sophisticated suite of instruments used to analyze and map the landforms, stratigraphy, minerals, and ice of Mars. The Context Camera (CTX) provides black-and-white images with resolutions up to 6 meters/pixel. It provides broader context maps for the higher resolution but narrower fields of view of the HiRISE camera, as well as for other instruments aboard MRO, and is useful for producing mosaicked images of larger areas on Mars' surface.]] @@ -404,7 +450,8 @@ The Context Camera (CTX) provides black-and-white images with resolutions up to local treks_b16_015887_2280_xn_48n225w = { Identifier = "b16_015887_2280_xn_48n225w", Name = [[MRO CTX, Viking 2 Landing Site Mosaic]], - FilePath = asset.localResource("MRO_CTX/Viking_2_Landing_Site_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_CTX/Viking_2_Landing_Site_Mosaic.vrt"), Description = [[This data was acquired using the Context Camera aboard NASA's Mars Reconnaissance Orbiter spacecraft (MRO). MRO was launched on August 12, 2005 and arrived at Mars on March 10, 2006. It maintains a nearly circular orbit, completing an orbital revolution about every 112 minutes at an altitude of approximately 250 to 316 km or 155 to 196 miles. MRO carries a sophisticated suite of instruments used to analyze and map the landforms, stratigraphy, minerals, and ice of Mars. The Context Camera (CTX) provides black-and-white images with resolutions up to 6 meters/pixel. It provides broader context maps for the higher resolution but narrower fields of view of the HiRISE camera, as well as for other instruments aboard MRO, and is useful for producing mosaicked images of larger areas on Mars' surface.]] @@ -413,7 +460,8 @@ The Context Camera (CTX) provides black-and-white images with resolutions up to local treks_West_Candor_Chasma_longlat = { Identifier = "West_Candor_Chasma_longlat", Name = [[MRO CTX, West Candor Chasma Mosaic]], - FilePath = asset.localResource("MRO_CTX/West_Candor_Chasma_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_CTX/West_Candor_Chasma_Mosaic.vrt"), Description = [[This data was acquired using the Context Camera aboard NASA's Mars Reconnaissance Orbiter spacecraft (MRO). MRO was launched on August 12, 2005 and arrived at Mars on March 10, 2006. It maintains a nearly circular orbit, completing an orbital revolution about every 112 minutes at an altitude of approximately 250 to 316 km or 155 to 196 miles. MRO carries a sophisticated suite of instruments used to analyze and map the landforms, stratigraphy, minerals, and ice of Mars. The Context Camera (CTX) provides black-and-white images with resolutions up to 6 meters/pixel. It provides broader context maps for the higher resolution but narrower fields of view of the HiRISE camera, as well as for other instruments aboard MRO, and is useful for producing mosaicked images of larger areas on Mars' surface.]] @@ -422,7 +470,8 @@ The Context Camera (CTX) provides black-and-white images with resolutions up to local treks_West_Candor_Chasma_DEM_longlat = { Identifier = "West_Candor_Chasma_DEM_longlat", Name = [[MRO CTX, West Candor DEM]], - FilePath = asset.localResource("MRO_CTX/West_Candor_DEM.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_CTX/West_Candor_DEM.vrt"), Description = [[This data was acquired using the Context Camera aboard NASA's Mars Reconnaissance Orbiter spacecraft (MRO). MRO was launched on August 12, 2005 and arrived at Mars on March 10, 2006. It maintains a nearly circular orbit, completing an orbital revolution about every 112 minutes at an altitude of approximately 250 to 316 km or 155 to 196 miles. MRO carries a sophisticated suite of instruments used to analyze and map the landforms, stratigraphy, minerals, and ice of Mars. The Context Camera (CTX) provides black-and-white images with resolutions up to 6 meters/pixel. It provides broader context maps for the higher resolution but narrower fields of view of the HiRISE camera, as well as for other instruments aboard MRO, and is useful for producing mosaicked images of larger areas on Mars' surface.]] @@ -431,7 +480,8 @@ The Context Camera (CTX) provides black-and-white images with resolutions up to local treks_Noachis_CTX_BlockAdj_dd = { Identifier = "Noachis_CTX_BlockAdj_dd", Name = [[MRO CTX, Western Noachis Terra Mosaic]], - FilePath = asset.localResource("MRO_CTX/Western_Noachis_Terra_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_CTX/Western_Noachis_Terra_Mosaic.vrt"), Description = [[This data was acquired using the Context Camera aboard NASA's Mars Reconnaissance Orbiter spacecraft (MRO). MRO was launched on August 12, 2005 and arrived at Mars on March 10, 2006. It maintains a nearly circular orbit, completing an orbital revolution about every 112 minutes at an altitude of approximately 250 to 316 km or 155 to 196 miles. MRO carries a sophisticated suite of instruments used to analyze and map the landforms, stratigraphy, minerals, and ice of Mars. The Context Camera (CTX) provides black-and-white images with resolutions up to 6 meters/pixel. It provides broader context maps for the higher resolution but narrower fields of view of the HiRISE camera, as well as for other instruments aboard MRO, and is useful for producing mosaicked images of larger areas on Mars' surface.]] @@ -440,12 +490,14 @@ The Context Camera (CTX) provides black-and-white images with resolutions up to local treks_Zephyria_CTX_BlockAdj_dd = { Identifier = "Zephyria_CTX_BlockAdj_dd", Name = [[MRO CTX, Zephyria Planum Mosaic]], - FilePath = asset.localResource("MRO_CTX/Zephyria_Planum_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_CTX/Zephyria_Planum_Mosaic.vrt"), Description = [[This data was acquired using the Context Camera aboard NASA's Mars Reconnaissance Orbiter spacecraft (MRO). MRO was launched on August 12, 2005 and arrived at Mars on March 10, 2006. It maintains a nearly circular orbit, completing an orbital revolution about every 112 minutes at an altitude of approximately 250 to 316 km or 155 to 196 miles. MRO carries a sophisticated suite of instruments used to analyze and map the landforms, stratigraphy, minerals, and ice of Mars. The Context Camera (CTX) provides black-and-white images with resolutions up to 6 meters/pixel. It provides broader context maps for the higher resolution but narrower fields of view of the HiRISE camera, as well as for other instruments aboard MRO, and is useful for producing mosaicked images of larger areas on Mars' surface.]] } + asset.onInitialize(function() openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_b21_017819_2025_xn_22n048w) openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_Acheron_Fossae_CTX_BlockAdj_dd) @@ -601,9 +653,9 @@ asset.export("Noachis_CTX_BlockAdj_dd", treks_Noachis_CTX_BlockAdj_dd) asset.export("Zephyria_CTX_BlockAdj_dd", treks_Zephyria_CTX_BlockAdj_dd) + asset.meta = { - Name = [[NASA Treks Layers for Mars MRO_CTX], - Version = "1.0", + Name = [[NASA Treks Layers for Mars MRO_CTX]], Author = "NASA/Treks", URL = "https://trek.nasa.gov/mars", License = "NASA/Treks", diff --git a/data/assets/scene/solarsystem/planets/mars/layers/nasa-treks/MRO_HiRISE.asset b/data/assets/scene/solarsystem/planets/mars/layers/nasa-treks/MRO_HiRISE.asset index cbb6529f34..088c533a72 100644 --- a/data/assets/scene/solarsystem/planets/mars/layers/nasa-treks/MRO_HiRISE.asset +++ b/data/assets/scene/solarsystem/planets/mars/layers/nasa-treks/MRO_HiRISE.asset @@ -6,10 +6,13 @@ local globeIdentifier = asset.require("scene/solarsystem//planets/mars/mars").Mars.Identifier + + local treks_DTEEC_001918_1735_001984_1735_U01_longlat = { Identifier = "DTEEC_001918_1735_001984_1735_U01_longlat", Name = [[MRO HiRISE, 001918_1735_001984_1735 DEM]], - FilePath = asset.localResource("MRO_HiRISE/001918_1735_001984_1735_DEM.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_HiRISE/001918_1735_001984_1735_DEM.vrt"), Description = [[This data was acquired using the High Resolution Imaging Science Experiment camera aboard NASA's Mars Reconnaissance Orbiter spacecraft (MRO). MRO was launched on August 12, 2005 and arrived at Mars on March 10, 2006. It maintains a nearly circular orbit, completing an orbital revolution about every 112 minutes at an altitude of approximately 250 to 316 km or 155 to 196 miles. MRO carries a sophisticated suite of instruments used to analyze and map the landforms, stratigraphy, minerals, and ice of Mars. The High Resolution Imaging Science Experiment (HiRISE) camera utilizes a 0.5-meter telescope to obtain very high resolution images of Martian landforms and terrains. From an altitude of 300 km, HiRISE has a resolution of 0.3 meters per pixel. In addition to being used for getting very detailed images of surface features, pairs of slightly offset HiRISE images are combined to produce precise digital elevation models of Martian topography.]] @@ -18,7 +21,8 @@ The High Resolution Imaging Science Experiment (HiRISE) camera utilizes a 0.5-me local treks_DTEED_042014_1760_042647_1760_A01 = { Identifier = "DTEED_042014_1760_042647_1760_A01", Name = [[MRO HiRISE, 042014_1760_042647_1760 DEM]], - FilePath = asset.localResource("MRO_HiRISE/042014_1760_042647_1760_DEM.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_HiRISE/042014_1760_042647_1760_DEM.vrt"), Description = [[This data was acquired using the High Resolution Imaging Science Experiment camera aboard NASA's Mars Reconnaissance Orbiter spacecraft (MRO). MRO was launched on August 12, 2005 and arrived at Mars on March 10, 2006. It maintains a nearly circular orbit, completing an orbital revolution about every 112 minutes at an altitude of approximately 250 to 316 km or 155 to 196 miles. MRO carries a sophisticated suite of instruments used to analyze and map the landforms, stratigraphy, minerals, and ice of Mars. The High Resolution Imaging Science Experiment (HiRISE) camera utilizes a 0.5-meter telescope to obtain very high resolution images of Martian landforms and terrains. From an altitude of 300 km, HiRISE has a resolution of 0.3 meters per pixel. In addition to being used for getting very detailed images of surface features, pairs of slightly offset HiRISE images are combined to produce precise digital elevation models of Martian topography.]] @@ -27,7 +31,8 @@ The High Resolution Imaging Science Experiment (HiRISE) camera utilizes a 0.5-me local treks_DTEED_042753_1930_042252_1930_A01 = { Identifier = "DTEED_042753_1930_042252_1930_A01", Name = [[MRO HiRISE, 042753_1930_042252_1930 DEM]], - FilePath = asset.localResource("MRO_HiRISE/042753_1930_042252_1930_DEM.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_HiRISE/042753_1930_042252_1930_DEM.vrt"), Description = [[This data was acquired using the High Resolution Imaging Science Experiment camera aboard NASA's Mars Reconnaissance Orbiter spacecraft (MRO). MRO was launched on August 12, 2005 and arrived at Mars on March 10, 2006. It maintains a nearly circular orbit, completing an orbital revolution about every 112 minutes at an altitude of approximately 250 to 316 km or 155 to 196 miles. MRO carries a sophisticated suite of instruments used to analyze and map the landforms, stratigraphy, minerals, and ice of Mars. The High Resolution Imaging Science Experiment (HiRISE) camera utilizes a 0.5-meter telescope to obtain very high resolution images of Martian landforms and terrains. From an altitude of 300 km, HiRISE has a resolution of 0.3 meters per pixel. In addition to being used for getting very detailed images of surface features, pairs of slightly offset HiRISE images are combined to produce precise digital elevation models of Martian topography.]] @@ -36,7 +41,8 @@ The High Resolution Imaging Science Experiment (HiRISE) camera utilizes a 0.5-me local treks_h1183_0000_da4 = { Identifier = "h1183_0000_da4", Name = [[MRO HiRISE, 1183_0000 DEM]], - FilePath = asset.localResource("MRO_HiRISE/1183_0000_DEM.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_HiRISE/1183_0000_DEM.vrt"), Description = [[This data was acquired using the High Resolution Imaging Science Experiment camera aboard NASA's Mars Reconnaissance Orbiter spacecraft (MRO). MRO was launched on August 12, 2005 and arrived at Mars on March 10, 2006. It maintains a nearly circular orbit, completing an orbital revolution about every 112 minutes at an altitude of approximately 250 to 316 km or 155 to 196 miles. MRO carries a sophisticated suite of instruments used to analyze and map the landforms, stratigraphy, minerals, and ice of Mars. The High Resolution Imaging Science Experiment (HiRISE) camera utilizes a 0.5-meter telescope to obtain very high resolution images of Martian landforms and terrains. From an altitude of 300 km, HiRISE has a resolution of 0.3 meters per pixel. In addition to being used for getting very detailed images of surface features, pairs of slightly offset HiRISE images are combined to produce precise digital elevation models of Martian topography.]] @@ -45,7 +51,8 @@ The High Resolution Imaging Science Experiment (HiRISE) camera utilizes a 0.5-me local treks_HiRISE_ColumbiaHills = { Identifier = "HiRISE_ColumbiaHills", Name = [[MRO HiRISE, Columbia Hills Mosaic]], - FilePath = asset.localResource("MRO_HiRISE/Columbia_Hills_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_HiRISE/Columbia_Hills_Mosaic.vrt"), Description = [[This data was acquired using the High Resolution Imaging Science Experiment camera aboard NASA's Mars Reconnaissance Orbiter spacecraft (MRO). MRO was launched on August 12, 2005 and arrived at Mars on March 10, 2006. It maintains a nearly circular orbit, completing an orbital revolution about every 112 minutes at an altitude of approximately 250 to 316 km or 155 to 196 miles. MRO carries a sophisticated suite of instruments used to analyze and map the landforms, stratigraphy, minerals, and ice of Mars. The High Resolution Imaging Science Experiment (HiRISE) camera utilizes a 0.5-meter telescope to obtain very high resolution images of Martian landforms and terrains. From an altitude of 300 km, HiRISE has a resolution of 0.3 meters per pixel. In addition to being used for getting very detailed images of surface features, pairs of slightly offset HiRISE images are combined to produce precise digital elevation models of Martian topography.]] @@ -54,7 +61,8 @@ The High Resolution Imaging Science Experiment (HiRISE) camera utilizes a 0.5-me local treks_curiosity_hirise_mosaic = { Identifier = "curiosity_hirise_mosaic", Name = [[MRO HiRISE, Curiosity Roving Site Mosaic]], - FilePath = asset.localResource("MRO_HiRISE/Curiosity_Roving_Site_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_HiRISE/Curiosity_Roving_Site_Mosaic.vrt"), Description = [[This data was acquired using the High Resolution Imaging Science Experiment camera aboard NASA's Mars Reconnaissance Orbiter spacecraft (MRO). MRO was launched on August 12, 2005 and arrived at Mars on March 10, 2006. It maintains a nearly circular orbit, completing an orbital revolution about every 112 minutes at an altitude of approximately 250 to 316 km or 155 to 196 miles. MRO carries a sophisticated suite of instruments used to analyze and map the landforms, stratigraphy, minerals, and ice of Mars. The High Resolution Imaging Science Experiment (HiRISE) camera utilizes a 0.5-meter telescope to obtain very high resolution images of Martian landforms and terrains. From an altitude of 300 km, HiRISE has a resolution of 0.3 meters per pixel. In addition to being used for getting very detailed images of surface features, pairs of slightly offset HiRISE images are combined to produce precise digital elevation models of Martian topography.]] @@ -63,7 +71,8 @@ The High Resolution Imaging Science Experiment (HiRISE) camera utilizes a 0.5-me local treks_Gale_DEM_SMG_1m = { Identifier = "Gale_DEM_SMG_1m", Name = [[MRO HiRISE, Gale Crater DEM]], - FilePath = asset.localResource("MRO_HiRISE/Gale_Crater_DEM.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_HiRISE/Gale_Crater_DEM.vrt"), Description = [[This data was acquired using the High Resolution Imaging Science Experiment camera aboard NASA's Mars Reconnaissance Orbiter spacecraft (MRO). MRO was launched on August 12, 2005 and arrived at Mars on March 10, 2006. It maintains a nearly circular orbit, completing an orbital revolution about every 112 minutes at an altitude of approximately 250 to 316 km or 155 to 196 miles. MRO carries a sophisticated suite of instruments used to analyze and map the landforms, stratigraphy, minerals, and ice of Mars. The High Resolution Imaging Science Experiment (HiRISE) camera utilizes a 0.5-meter telescope to obtain very high resolution images of Martian landforms and terrains. From an altitude of 300 km, HiRISE has a resolution of 0.3 meters per pixel. In addition to being used for getting very detailed images of surface features, pairs of slightly offset HiRISE images are combined to produce precise digital elevation models of Martian topography.]] @@ -72,7 +81,8 @@ The High Resolution Imaging Science Experiment (HiRISE) camera utilizes a 0.5-me local treks_ESP_042252_1930_RED_B_01_ORTHO = { Identifier = "ESP_042252_1930_RED_B_01_ORTHO", Name = [[MRO HiRISE, Marth Crater West Rim Mosaic]], - FilePath = asset.localResource("MRO_HiRISE/Marth_Crater_West_Rim_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_HiRISE/Marth_Crater_West_Rim_Mosaic.vrt"), Description = [[This data was acquired using the High Resolution Imaging Science Experiment camera aboard NASA's Mars Reconnaissance Orbiter spacecraft (MRO). MRO was launched on August 12, 2005 and arrived at Mars on March 10, 2006. It maintains a nearly circular orbit, completing an orbital revolution about every 112 minutes at an altitude of approximately 250 to 316 km or 155 to 196 miles. MRO carries a sophisticated suite of instruments used to analyze and map the landforms, stratigraphy, minerals, and ice of Mars. The High Resolution Imaging Science Experiment (HiRISE) camera utilizes a 0.5-meter telescope to obtain very high resolution images of Martian landforms and terrains. From an altitude of 300 km, HiRISE has a resolution of 0.3 meters per pixel. In addition to being used for getting very detailed images of surface features, pairs of slightly offset HiRISE images are combined to produce precise digital elevation models of Martian topography.]] @@ -81,7 +91,8 @@ The High Resolution Imaging Science Experiment (HiRISE) camera utilizes a 0.5-me local treks_ESP_040776_2115_RED_A_01_ORTHO = { Identifier = "ESP_040776_2115_RED_A_01_ORTHO", Name = [[MRO HiRISE, Martian Ares 3 Landing Site Mosaic]], - FilePath = asset.localResource("MRO_HiRISE/Martian_Ares_3_Landing_Site_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_HiRISE/Martian_Ares_3_Landing_Site_Mosaic.vrt"), Description = [[This data was acquired using the High Resolution Imaging Science Experiment camera aboard NASA's Mars Reconnaissance Orbiter spacecraft (MRO). MRO was launched on August 12, 2005 and arrived at Mars on March 10, 2006. It maintains a nearly circular orbit, completing an orbital revolution about every 112 minutes at an altitude of approximately 250 to 316 km or 155 to 196 miles. MRO carries a sophisticated suite of instruments used to analyze and map the landforms, stratigraphy, minerals, and ice of Mars. The High Resolution Imaging Science Experiment (HiRISE) camera utilizes a 0.5-meter telescope to obtain very high resolution images of Martian landforms and terrains. From an altitude of 300 km, HiRISE has a resolution of 0.3 meters per pixel. In addition to being used for getting very detailed images of surface features, pairs of slightly offset HiRISE images are combined to produce precise digital elevation models of Martian topography.]] @@ -90,7 +101,8 @@ The High Resolution Imaging Science Experiment (HiRISE) camera utilizes a 0.5-me local treks_ESP_042647_1760_RED_B_01_ORTHO = { Identifier = "ESP_042647_1760_RED_B_01_ORTHO", Name = [[MRO HiRISE, Martian Ares 4 Landing Site Mosaic]], - FilePath = asset.localResource("MRO_HiRISE/Martian_Ares_4_Landing_Site_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_HiRISE/Martian_Ares_4_Landing_Site_Mosaic.vrt"), Description = [[This data was acquired using the High Resolution Imaging Science Experiment camera aboard NASA's Mars Reconnaissance Orbiter spacecraft (MRO). MRO was launched on August 12, 2005 and arrived at Mars on March 10, 2006. It maintains a nearly circular orbit, completing an orbital revolution about every 112 minutes at an altitude of approximately 250 to 316 km or 155 to 196 miles. MRO carries a sophisticated suite of instruments used to analyze and map the landforms, stratigraphy, minerals, and ice of Mars. The High Resolution Imaging Science Experiment (HiRISE) camera utilizes a 0.5-meter telescope to obtain very high resolution images of Martian landforms and terrains. From an altitude of 300 km, HiRISE has a resolution of 0.3 meters per pixel. In addition to being used for getting very detailed images of surface features, pairs of slightly offset HiRISE images are combined to produce precise digital elevation models of Martian topography.]] @@ -99,7 +111,8 @@ The High Resolution Imaging Science Experiment (HiRISE) camera utilizes a 0.5-me local treks_CLH_Visible_Mosaic_HiRISE_CTX_HRSC_GCS_MARS_07102018 = { Identifier = "CLH_Visible_Mosaic_HiRISE_CTX_HRSC_GCS_MARS_07102018", Name = [[MRO HiRISE, Mosaic Columbia Hills]], - FilePath = asset.localResource("MRO_HiRISE/Mosaic_Columbia_Hills.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_HiRISE/Mosaic_Columbia_Hills.vrt"), Description = [[Preliminary visible orthoimage mosaic for Columbia Hills candidate landing site for the Mars 2020 rover. HRSC orthoimages and DEMs were downloaded from the Planetary Data System archives. HiRISE and CTX orthoimages and DEMs were created by the USGS Astrogeology and HiRISE teams, and compiled and georeferenced at JPL/Caltech by the Advanced Laboratory for Landing Site Terrain Analysis and Reconnaissance (ALLSTAR) group including Nathan Williams, @@ -121,14 +134,16 @@ When analyzing images, please ensure that the correct projection system is being local treks_ESP_058005_1845_RED_spline_rect = { Identifier = "ESP_058005_1845_RED_spline_rect", Name = [[MRO HiRISE, Mosaic Insight Landing Site]], - FilePath = asset.localResource("MRO_HiRISE/Mosaic_Insight_Landing_Site.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_HiRISE/Mosaic_Insight_Landing_Site.vrt"), Description = [[This image (ESP_058005_1845) was acquired with the Mars HiRISE Camera aboard NASA's Mars Reconnaissance Orbiter. It shows the Mars InSight lander (4.5024°, 135.62345°), heat shield (4.50834°, 135.63481°), and backshell with parachute (4.49415°, 135.62778°). The image was acquired on December 11, 2018 at 14:02 local Mars time. The image is centered at 4.495° lat and 135.623° lon. The spacecraft altitude was 271.5 km. Original image scale range is 27.9 cm/pixel (with 1 x 1 binning) so objects about 84 cm across are resolved. The emission angle was 13.7°, phase angle was 51.0°, and solar incidence angle was 39°, with the Sun about 51° above the horizon. Solar longitude was 304.3°, Northern Winter.]] } local treks_NES_JEZ_MID_Visible_Mosaic_HiRISE_CTX_HRSC_GCS_MARS_07102018 = { Identifier = "NES_JEZ_MID_Visible_Mosaic_HiRISE_CTX_HRSC_GCS_MARS_07102018", Name = [[MRO HiRISE, Mosaic Jezero NE Syrtis Midway]], - FilePath = asset.localResource("MRO_HiRISE/Mosaic_Jezero_NE_Syrtis_Midway.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_HiRISE/Mosaic_Jezero_NE_Syrtis_Midway.vrt"), Description = [[Preliminary visible orthoimage mosaic for Jezero Crater, NE Syrtis, and Midway candidate landing sites for the Mars 2020 rover. HRSC orthoimages and DEMs were downloaded from the Planetary Data System archives. HiRISE and CTX orthoimages and DEMs were created by the USGS Astrogeology and HiRISE teams, and compiled and georeferenced at JPL/Caltech by the Advanced Laboratory for Landing Site Terrain Analysis and Reconnaissance (ALLSTAR) group including Nathan Williams, @@ -150,14 +165,16 @@ When analyzing images, please ensure that the correct projection system is being local treks_HiRISE_Opportunity = { Identifier = "HiRISE_Opportunity", Name = [[MRO HiRISE, Mosaic Opportunity]], - FilePath = asset.localResource("MRO_HiRISE/Mosaic_Opportunity.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_HiRISE/Mosaic_Opportunity.vrt"), Description = [[This data was acquired using the High Resolution Imaging Science Experiment camera aboard NASA's Mars Reconnaissance Orbiter spacecraft (MRO). MRO was launched on August 12, 2005 and arrived at Mars on March 10, 2006. It maintains a nearly circular orbit, completing an orbital revolution about every 112 minutes at an altitude of approximately 250 to 316 km or 155 to 196 miles. MRO carries a sophisticated suite of instruments used to analyze and map the landforms, stratigraphy, minerals, and ice of Mars. The High Resolution Imaging Science Experiment (HiRISE) camera utilizes a 0.5-meter telescope to obtain very high resolution images of Martian landforms and terrains. From an altitude of 300 km, HiRISE has a resolution of 0.3 meters per pixel. In addition to being used for getting very detailed images of surface features, pairs of slightly offset HiRISE images are combined to produce precise digital elevation models of Martian topography.]] } local treks_opportunity_hirise_mosaic = { Identifier = "opportunity_hirise_mosaic", Name = [[MRO HiRISE, Opportunity Roving Site Mosaic]], - FilePath = asset.localResource("MRO_HiRISE/Opportunity_Roving_Site_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_HiRISE/Opportunity_Roving_Site_Mosaic.vrt"), Description = [[This data was acquired using the High Resolution Imaging Science Experiment camera aboard NASA's Mars Reconnaissance Orbiter spacecraft (MRO). MRO was launched on August 12, 2005 and arrived at Mars on March 10, 2006. It maintains a nearly circular orbit, completing an orbital revolution about every 112 minutes at an altitude of approximately 250 to 316 km or 155 to 196 miles. MRO carries a sophisticated suite of instruments used to analyze and map the landforms, stratigraphy, minerals, and ice of Mars. The High Resolution Imaging Science Experiment (HiRISE) camera utilizes a 0.5-meter telescope to obtain very high resolution images of Martian landforms and terrains. From an altitude of 300 km, HiRISE has a resolution of 0.3 meters per pixel. In addition to being used for getting very detailed images of surface features, pairs of slightly offset HiRISE images are combined to produce precise digital elevation models of Martian topography.]] @@ -166,7 +183,8 @@ The High Resolution Imaging Science Experiment (HiRISE) camera utilizes a 0.5-me local treks_phoenix_hirise_mosaic = { Identifier = "phoenix_hirise_mosaic", Name = [[MRO HiRISE, Phoenix Landing Site Mosaic]], - FilePath = asset.localResource("MRO_HiRISE/Phoenix_Landing_Site_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_HiRISE/Phoenix_Landing_Site_Mosaic.vrt"), Description = [[This data was acquired using the High Resolution Imaging Science Experiment camera aboard NASA's Mars Reconnaissance Orbiter spacecraft (MRO). MRO was launched on August 12, 2005 and arrived at Mars on March 10, 2006. It maintains a nearly circular orbit, completing an orbital revolution about every 112 minutes at an altitude of approximately 250 to 316 km or 155 to 196 miles. MRO carries a sophisticated suite of instruments used to analyze and map the landforms, stratigraphy, minerals, and ice of Mars. The High Resolution Imaging Science Experiment (HiRISE) camera utilizes a 0.5-meter telescope to obtain very high resolution images of Martian landforms and terrains. From an altitude of 300 km, HiRISE has a resolution of 0.3 meters per pixel. In addition to being used for getting very detailed images of surface features, pairs of slightly offset HiRISE images are combined to produce precise digital elevation models of Martian topography.]] @@ -175,7 +193,8 @@ The High Resolution Imaging Science Experiment (HiRISE) camera utilizes a 0.5-me local treks_sojourner_hirise_mosaic = { Identifier = "sojourner_hirise_mosaic", Name = [[MRO HiRISE, Sojourner Roving Site Mosaic]], - FilePath = asset.localResource("MRO_HiRISE/Sojourner_Roving_Site_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_HiRISE/Sojourner_Roving_Site_Mosaic.vrt"), Description = [[This data was acquired using the High Resolution Imaging Science Experiment camera aboard NASA's Mars Reconnaissance Orbiter spacecraft (MRO). MRO was launched on August 12, 2005 and arrived at Mars on March 10, 2006. It maintains a nearly circular orbit, completing an orbital revolution about every 112 minutes at an altitude of approximately 250 to 316 km or 155 to 196 miles. MRO carries a sophisticated suite of instruments used to analyze and map the landforms, stratigraphy, minerals, and ice of Mars. The High Resolution Imaging Science Experiment (HiRISE) camera utilizes a 0.5-meter telescope to obtain very high resolution images of Martian landforms and terrains. From an altitude of 300 km, HiRISE has a resolution of 0.3 meters per pixel. In addition to being used for getting very detailed images of surface features, pairs of slightly offset HiRISE images are combined to produce precise digital elevation models of Martian topography.]] @@ -184,14 +203,16 @@ The High Resolution Imaging Science Experiment (HiRISE) camera utilizes a 0.5-me local treks_PSP_001918_1735_RED_A_01_ORTHO_longlat = { Identifier = "PSP_001918_1735_RED_A_01_ORTHO_longlat", Name = [[MRO HiRISE, Southwest Candor Chasma Mosaic]], - FilePath = asset.localResource("MRO_HiRISE/Southwest_Candor_Chasma_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_HiRISE/Southwest_Candor_Chasma_Mosaic.vrt"), Description = [[This data was acquired using the High Resolution Imaging Science Experiment camera aboard NASA's Mars Reconnaissance Orbiter spacecraft (MRO). MRO was launched on August 12, 2005 and arrived at Mars on March 10, 2006. It maintains a nearly circular orbit, completing an orbital revolution about every 112 minutes at an altitude of approximately 250 to 316 km or 155 to 196 miles. MRO carries a sophisticated suite of instruments used to analyze and map the landforms, stratigraphy, minerals, and ice of Mars. The High Resolution Imaging Science Experiment (HiRISE) camera utilizes a 0.5-meter telescope to obtain very high resolution images of Martian landforms and terrains. From an altitude of 300 km, HiRISE has a resolution of 0.3 meters per pixel. In addition to being used for getting very detailed images of surface features, pairs of slightly offset HiRISE images are combined to produce precise digital elevation models of Martian topography.]] } local treks_spirit_hirise_mosaic = { Identifier = "spirit_hirise_mosaic", Name = [[MRO HiRISE, Spirit Roving Site Mosaic]], - FilePath = asset.localResource("MRO_HiRISE/Spirit_Roving_Site_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_HiRISE/Spirit_Roving_Site_Mosaic.vrt"), Description = [[This data was acquired using the High Resolution Imaging Science Experiment camera aboard NASA's Mars Reconnaissance Orbiter spacecraft (MRO). MRO was launched on August 12, 2005 and arrived at Mars on March 10, 2006. It maintains a nearly circular orbit, completing an orbital revolution about every 112 minutes at an altitude of approximately 250 to 316 km or 155 to 196 miles. MRO carries a sophisticated suite of instruments used to analyze and map the landforms, stratigraphy, minerals, and ice of Mars. The High Resolution Imaging Science Experiment (HiRISE) camera utilizes a 0.5-meter telescope to obtain very high resolution images of Martian landforms and terrains. From an altitude of 300 km, HiRISE has a resolution of 0.3 meters per pixel. In addition to being used for getting very detailed images of surface features, pairs of slightly offset HiRISE images are combined to produce precise digital elevation models of Martian topography.]] @@ -200,7 +221,8 @@ The High Resolution Imaging Science Experiment (HiRISE) camera utilizes a 0.5-me local treks_PSP_001521_2025_RED = { Identifier = "PSP_001521_2025_RED", Name = [[MRO HiRISE, Viking 1 Landing Site Mosaic]], - FilePath = asset.localResource("MRO_HiRISE/Viking_1_Landing_Site_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_HiRISE/Viking_1_Landing_Site_Mosaic.vrt"), Description = [[This data was acquired using the High Resolution Imaging Science Experiment camera aboard NASA's Mars Reconnaissance Orbiter spacecraft (MRO). MRO was launched on August 12, 2005 and arrived at Mars on March 10, 2006. It maintains a nearly circular orbit, completing an orbital revolution about every 112 minutes at an altitude of approximately 250 to 316 km or 155 to 196 miles. MRO carries a sophisticated suite of instruments used to analyze and map the landforms, stratigraphy, minerals, and ice of Mars. The High Resolution Imaging Science Experiment (HiRISE) camera utilizes a 0.5-meter telescope to obtain very high resolution images of Martian landforms and terrains. From an altitude of 300 km, HiRISE has a resolution of 0.3 meters per pixel. In addition to being used for getting very detailed images of surface features, pairs of slightly offset HiRISE images are combined to produce precise digital elevation models of Martian topography.]] @@ -209,12 +231,14 @@ The High Resolution Imaging Science Experiment (HiRISE) camera utilizes a 0.5-me local treks_PSP_001501_2280_RED = { Identifier = "PSP_001501_2280_RED", Name = [[MRO HiRISE, Viking 2 Landing Site Mosaic]], - FilePath = asset.localResource("MRO_HiRISE/Viking_2_Landing_Site_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("MRO_HiRISE/Viking_2_Landing_Site_Mosaic.vrt"), Description = [[This data was acquired using the High Resolution Imaging Science Experiment camera aboard NASA's Mars Reconnaissance Orbiter spacecraft (MRO). MRO was launched on August 12, 2005 and arrived at Mars on March 10, 2006. It maintains a nearly circular orbit, completing an orbital revolution about every 112 minutes at an altitude of approximately 250 to 316 km or 155 to 196 miles. MRO carries a sophisticated suite of instruments used to analyze and map the landforms, stratigraphy, minerals, and ice of Mars. The High Resolution Imaging Science Experiment (HiRISE) camera utilizes a 0.5-meter telescope to obtain very high resolution images of Martian landforms and terrains. From an altitude of 300 km, HiRISE has a resolution of 0.3 meters per pixel. In addition to being used for getting very detailed images of surface features, pairs of slightly offset HiRISE images are combined to produce precise digital elevation models of Martian topography.]] } + asset.onInitialize(function() openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_DTEEC_001918_1735_001984_1735_U01_longlat) openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_DTEED_042014_1760_042647_1760_A01) @@ -286,9 +310,9 @@ asset.export("PSP_001521_2025_RED", treks_PSP_001521_2025_RED) asset.export("PSP_001501_2280_RED", treks_PSP_001501_2280_RED) + asset.meta = { - Name = [[NASA Treks Layers for Mars MRO_HiRISE], - Version = "1.0", + Name = [[NASA Treks Layers for Mars MRO_HiRISE]], Author = "NASA/Treks", URL = "https://trek.nasa.gov/mars", License = "NASA/Treks", diff --git a/data/assets/scene/solarsystem/planets/mars/layers/nasa-treks/MSL.asset b/data/assets/scene/solarsystem/planets/mars/layers/nasa-treks/MSL.asset index 4423e5fe35..d1b1931272 100644 --- a/data/assets/scene/solarsystem/planets/mars/layers/nasa-treks/MSL.asset +++ b/data/assets/scene/solarsystem/planets/mars/layers/nasa-treks/MSL.asset @@ -6,13 +6,17 @@ local globeIdentifier = asset.require("scene/solarsystem//planets/mars/mars").Mars.Identifier + + local treks_mars_pahrump_patch_8k_256m = { Identifier = "mars_pahrump_patch_8k_256m", Name = [[MSL, Pahrump Hills]], - FilePath = asset.localResource("MSL/Pahrump_Hills.vrt"), + ZIndex = 50, + FilePath = asset.resource("MSL/Pahrump_Hills.vrt"), Description = [[This layer is a greyscale mosaic assembled using data from the High Resolution Stereo Camera aboard the European Space Agency's Mars Express orbiter. HRSC is being used to obtain color and stereo images that will map 100% of Mars' surface at resolution better than 30 m/pixel, and 50% of the surface at better than 15 m/pixel. Each of the nine CCD lines of HRSC, a linescan imager (pushbroom camera), contains 5184 pixels. The channels consist of red, green, blue, near-infrared, three stereo channels (backward, nadir, and forward) and two photometric channels. The digital elevation model used for this layer is a combination of data derived from the HRSC and the Mars Orbiter Laser Altimeter.]] } + asset.onInitialize(function() openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_mars_pahrump_patch_8k_256m) end) @@ -24,9 +28,9 @@ end) asset.export("mars_pahrump_patch_8k_256m", treks_mars_pahrump_patch_8k_256m) + asset.meta = { - Name = [[NASA Treks Layers for Mars MSL], - Version = "1.0", + Name = [[NASA Treks Layers for Mars MSL]], Author = "NASA/Treks", URL = "https://trek.nasa.gov/mars", License = "NASA/Treks", diff --git a/data/assets/scene/solarsystem/planets/mars/layers/nasa-treks/Mars_Express_HRSC.asset b/data/assets/scene/solarsystem/planets/mars/layers/nasa-treks/Mars_Express_HRSC.asset index 18609103be..26539e06ed 100644 --- a/data/assets/scene/solarsystem/planets/mars/layers/nasa-treks/Mars_Express_HRSC.asset +++ b/data/assets/scene/solarsystem/planets/mars/layers/nasa-treks/Mars_Express_HRSC.asset @@ -6,55 +6,65 @@ local globeIdentifier = asset.require("scene/solarsystem//planets/mars/mars").Mars.Identifier + + local treks_HRSC_Martian_east = { Identifier = "HRSC_Martian_east", Name = [[Mars Express HRSC, Martian Path Eastern Section Color Mosaic]], - FilePath = asset.localResource("Mars_Express_HRSC/Martian_Path_Eastern_Section_Color_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Express_HRSC/Martian_Path_Eastern_Section_Color_Mosaic.vrt"), Description = [[This layer is a greyscale mosaic assembled using data from the High Resolution Stereo Camera aboard the European Space Agency's Mars Express orbiter. HRSC is being used to obtain color and stereo images that will map 100% of Mars' surface at resolution better than 30 m/pixel, and 50% of the surface at better than 15 m/pixel. Each of the nine CCD lines of HRSC, a linescan imager (pushbroom camera), contains 5184 pixels. The channels consist of red, green, blue, near-infrared, three stereo channels (backward, nadir, and forward) and two photometric channels. The digital elevation model used for this layer is a combination of data derived from the HRSC and the Mars Orbiter Laser Altimeter.]] } local treks_MC11E_HRMOSCO_COL = { Identifier = "MC11E_HRMOSCO_COL", Name = [[Mars Express HRSC, Martian Path MC11 Quad Color Mosaic]], - FilePath = asset.localResource("Mars_Express_HRSC/Martian_Path_MC11_Quad_Color_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Express_HRSC/Martian_Path_MC11_Quad_Color_Mosaic.vrt"), Description = [[This layer is a combined color mosaic and 50 meter digital terrain model assembled using data from the High Resolution Stereo Camera (HRSC) aboard the European Space Agency's Mars Express orbiter. It covers the MC-11 quadrangle on Mars. For the purposes of mapping, the United States Geological Survey (USGS) has divided the surface of Mars into 30 quadrangles, labeled MC-1 through MC-30 (MC for Mars Chart). Each of the quadrangles also has a proper name derived from a prominent surface feature within the quadrangle. Much of the story of the Martian takes place within MC-11, also known as Oxia Palus. Fortunately, MC-11 happens to be the first complete quadrangle the European Space Agency produced as an HRSC 50m digital terrain model and image mosaic. HRSC is being used to obtain color and stereo images that will map 100% of Mars' surface at resolution better than 30 m/pixel, and 50% of the surface at better than 15 m/pixel. Each of the nine CCD lines of HRSC, a linescan imager (pushbroom camera), contains 5184 pixels. The channels consist of red, green, blue, near-infrared, three stereo channels (backward, nadir, and forward) and two photometric channels. This mosaic was produced by the Global Topography and Mosaic Generation Task Group of the HRSC-Team by joining nearly 100 contiguous HRSC stereo strips. HRSC data provided by ESA/DLR/FU Berlin and the Mars Express HRSC-Team.]] } local treks_MC11E_HRMOSND_ND5 = { Identifier = "MC11E_HRMOSND_ND5", Name = [[Mars Express HRSC, Martian Path MC11 Quad Mosaic]], - FilePath = asset.localResource("Mars_Express_HRSC/Martian_Path_MC11_Quad_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Express_HRSC/Martian_Path_MC11_Quad_Mosaic.vrt"), Description = [[This layer is a combined greyscale mosaic and 50 meter digital terrain model assembled using data from the High Resolution Stereo Camera (HRSC) aboard the European Space Agency's Mars Express orbiter. It covers the MC-11 quadrangle on Mars. For the purposes of mapping, the United States Geological Survey (USGS) has divided the surface of Mars into 30 quadrangles, labeled MC-1 through MC-30 (MC for Mars Chart). Each of the quadrangles also has a proper name derived from a prominent surface feature within the quadrangle. Much of the story of the Martian takes place within MC-11, also known as Oxia Palus. Fortunately, MC-11 happens to be the first complete quadrangle the European Space Agency produced as an HRSC 50m digital terrain model and image mosaic. HRSC is being used to obtain color and stereo images that will map 100% of Mars' surface at resolution better than 30 m/pixel, and 50% of the surface at better than 15 m/pixel. Each of the nine CCD lines of HRSC, a linescan imager (pushbroom camera), contains 5184 pixels. The channels consist of red, green, blue, near-infrared, three stereo channels (backward, nadir, and forward) and two photometric channels. While this mosaic lacks the color information shown in the color mosaic, it does show finer detail. This mosaic was produced by the Global Topography and Mosaic Generation Task Group of the HRSC-Team by joining nearly 100 contiguous HRSC stereo strips. HRSC data provided by ESA/DLR/FU Berlin and the Mars Express HRSC-Team.]] } local treks_hrsc_mawrth_vallis_color = { Identifier = "hrsc_mawrth_vallis_color", Name = [[Mars Express HRSC, Mawrth Vallis Color Mosaic]], - FilePath = asset.localResource("Mars_Express_HRSC/Mawrth_Vallis_Color_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Express_HRSC/Mawrth_Vallis_Color_Mosaic.vrt"), Description = [[This layer is a greyscale mosaic assembled using data from the High Resolution Stereo Camera aboard the European Space Agency's Mars Express orbiter. HRSC is being used to obtain color and stereo images that will map 100% of Mars' surface at resolution better than 30 m/pixel, and 50% of the surface at better than 15 m/pixel. Each of the nine CCD lines of HRSC, a linescan imager (pushbroom camera), contains 5184 pixels. The channels consist of red, green, blue, near-infrared, three stereo channels (backward, nadir, and forward) and two photometric channels. The digital elevation model used for this layer is a combination of data derived from the HRSC and the Mars Orbiter Laser Altimeter.]] } local treks_hrsc_mawrth_vallis = { Identifier = "hrsc_mawrth_vallis", Name = [[Mars Express HRSC, Mawrth Vallis Mosaic]], - FilePath = asset.localResource("Mars_Express_HRSC/Mawrth_Vallis_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Express_HRSC/Mawrth_Vallis_Mosaic.vrt"), Description = [[This layer is a greyscale mosaic assembled using data from the High Resolution Stereo Camera aboard the European Space Agency's Mars Express orbiter. HRSC is being used to obtain color and stereo images that will map 100% of Mars' surface at resolution better than 30 m/pixel, and 50% of the surface at better than 15 m/pixel. Each of the nine CCD lines of HRSC, a linescan imager (pushbroom camera), contains 5184 pixels. The channels consist of red, green, blue, near-infrared, three stereo channels (backward, nadir, and forward) and two photometric channels. The digital elevation model used for this layer is a combination of data derived from the HRSC and the Mars Orbiter Laser Altimeter.]] } local treks_h2942_0000_nd3 = { Identifier = "h2942_0000_nd3", Name = [[Mars Express HRSC, Viking 1 Landing Site Mosaic]], - FilePath = asset.localResource("Mars_Express_HRSC/Viking_1_Landing_Site_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Express_HRSC/Viking_1_Landing_Site_Mosaic.vrt"), Description = [[This layer is a greyscale mosaic assembled using data from the High Resolution Stereo Camera aboard the European Space Agency's Mars Express orbiter. HRSC is being used to obtain color and stereo images that will map 100% of Mars' surface at resolution better than 30 m/pixel, and 50% of the surface at better than 15 m/pixel. Each of the nine CCD lines of HRSC, a linescan imager (pushbroom camera), contains 5184 pixels. The channels consist of red, green, blue, near-infrared, three stereo channels (backward, nadir, and forward) and two photometric channels. The digital elevation model used for this layer is a combination of data derived from the HRSC and the Mars Orbiter Laser Altimeter.]] } local treks_h1394_0000_nd3 = { Identifier = "h1394_0000_nd3", Name = [[Mars Express HRSC, Viking 2 Landing Site Mosaic]], - FilePath = asset.localResource("Mars_Express_HRSC/Viking_2_Landing_Site_Mosaic.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Express_HRSC/Viking_2_Landing_Site_Mosaic.vrt"), Description = [[This layer is a greyscale mosaic assembled using data from the High Resolution Stereo Camera aboard the European Space Agency's Mars Express orbiter. HRSC is being used to obtain color and stereo images that will map 100% of Mars' surface at resolution better than 30 m/pixel, and 50% of the surface at better than 15 m/pixel. Each of the nine CCD lines of HRSC, a linescan imager (pushbroom camera), contains 5184 pixels. The channels consist of red, green, blue, near-infrared, three stereo channels (backward, nadir, and forward) and two photometric channels. The digital elevation model used for this layer is a combination of data derived from the HRSC and the Mars Orbiter Laser Altimeter.]] } + asset.onInitialize(function() openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_HRSC_Martian_east) openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_MC11E_HRMOSCO_COL) @@ -84,9 +94,9 @@ asset.export("h2942_0000_nd3", treks_h2942_0000_nd3) asset.export("h1394_0000_nd3", treks_h1394_0000_nd3) + asset.meta = { - Name = [[NASA Treks Layers for Mars Mars_Express_HRSC], - Version = "1.0", + Name = [[NASA Treks Layers for Mars Mars_Express_HRSC]], Author = "NASA/Treks", URL = "https://trek.nasa.gov/mars", License = "NASA/Treks", diff --git a/data/assets/scene/solarsystem/planets/mars/layers/nasa-treks/Mars_Reconnaissance_Orbiter_CTX.asset b/data/assets/scene/solarsystem/planets/mars/layers/nasa-treks/Mars_Reconnaissance_Orbiter_CTX.asset index 8a13ebcd68..6c4c1de974 100644 --- a/data/assets/scene/solarsystem/planets/mars/layers/nasa-treks/Mars_Reconnaissance_Orbiter_CTX.asset +++ b/data/assets/scene/solarsystem/planets/mars/layers/nasa-treks/Mars_Reconnaissance_Orbiter_CTX.asset @@ -6,10 +6,13 @@ local globeIdentifier = asset.require("scene/solarsystem//planets/mars/mars").Mars.Identifier + + local treks_CTX_ClrSlope_8bit_12S182E_24mp_P22_009609_1674_B02_010453_1675 = { Identifier = "CTX_ClrSlope_8bit_12S182E_24mp_P22_009609_1674_B02_010453_1675", Name = [[Mars Reconnaissance Orbiter CTX, Color Slope Apollinaris 12S182E]], - FilePath = asset.localResource("Mars_Reconnaissance_Orbiter_CTX/Color_Slope_Apollinaris_12S182E.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Reconnaissance_Orbiter_CTX/Color_Slope_Apollinaris_12S182E.vrt"), Description = [[This is a colorized version of the original 2x2 pixel slope in degrees (also called a 1 baseline slope). This was produced as part of an effort to characterize topography within candidate Human Exploration Zones for Mars. The DEM was constructed from a pair of CTX images using the stereo photogrammetry software AMES Stereo Pipeline (ASP). THe DEM has been tied to MOLA and can be considered resarch- and visualization-ready. Because it has not been manually edited using a full 3D editing environment, ASP DEMs cannot currently be considered true engineering-ready for performing landings. References: @@ -23,7 +26,8 @@ Slopes were derived using the Python script called gdal_baseline_slope.py: https local treks_CTX_ClrSlope_8bit_13S182E_24mp_G15_024127_1673_G16_024483_1673 = { Identifier = "CTX_ClrSlope_8bit_13S182E_24mp_G15_024127_1673_G16_024483_1673", Name = [[Mars Reconnaissance Orbiter CTX, Color Slope Apollinaris 13S182E]], - FilePath = asset.localResource("Mars_Reconnaissance_Orbiter_CTX/Color_Slope_Apollinaris_13S182E.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Reconnaissance_Orbiter_CTX/Color_Slope_Apollinaris_13S182E.vrt"), Description = [[This is a colorized version of the original 2x2 pixel slope in degrees (also called a 1 baseline slope). This was produced as part of an effort to characterize topography within candidate Human Exploration Zones for Mars. The DEM was constructed from a pair of CTX images using the stereo photogrammetry software AMES Stereo Pipeline (ASP). THe DEM has been tied to MOLA and can be considered resarch- and visualization-ready. Because it has not been manually edited using a full 3D editing environment, ASP DEMs cannot currently be considered true engineering-ready for performing landings. References: @@ -37,7 +41,8 @@ Slopes were derived using the Python script called gdal_baseline_slope.py: https local treks_CTX_ClrSlope_8bit_14S184E_24mp_B01_009886_1658_P21_009385_1658 = { Identifier = "CTX_ClrSlope_8bit_14S184E_24mp_B01_009886_1658_P21_009385_1658", Name = [[Mars Reconnaissance Orbiter CTX, Color Slope Apollinaris 14S184E]], - FilePath = asset.localResource("Mars_Reconnaissance_Orbiter_CTX/Color_Slope_Apollinaris_14S184E.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Reconnaissance_Orbiter_CTX/Color_Slope_Apollinaris_14S184E.vrt"), Description = [[This is a colorized version of the original 2x2 pixel slope in degrees (also called a 1 baseline slope). This was produced as part of an effort to characterize topography within candidate Human Exploration Zones for Mars. The DEM was constructed from a pair of CTX images using the stereo photogrammetry software AMES Stereo Pipeline (ASP). THe DEM has been tied to MOLA and can be considered resarch- and visualization-ready. Because it has not been manually edited using a full 3D editing environment, ASP DEMs cannot currently be considered true engineering-ready for performing landings. References: @@ -51,7 +56,8 @@ Slopes were derived using the Python script called gdal_baseline_slope.py: https local treks_CTX_ClrSlope_8bit_10S291E_24mp_P22_009684_1699_B02_010396_1699 = { Identifier = "CTX_ClrSlope_8bit_10S291E_24mp_P22_009684_1699_B02_010396_1699", Name = [[Mars Reconnaissance Orbiter CTX, Color Slope Coprates 10S291E]], - FilePath = asset.localResource("Mars_Reconnaissance_Orbiter_CTX/Color_Slope_Coprates_10S291E.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Reconnaissance_Orbiter_CTX/Color_Slope_Coprates_10S291E.vrt"), Description = [[This is a colorized version of the original 2x2 pixel slope in degrees (also called a 1 baseline slope). This was produced as part of an effort to characterize topography within candidate Human Exploration Zones for Mars. The DEM was constructed from a pair of CTX images using the stereo photogrammetry software AMES Stereo Pipeline (ASP). THe DEM has been tied to MOLA and can be considered resarch- and visualization-ready. Because it has not been manually edited using a full 3D editing environment, ASP DEMs cannot currently be considered true engineering-ready for performing landings. References: @@ -65,7 +71,8 @@ Slopes were derived using the Python script called gdal_baseline_slope.py: https local treks_CTX_ClrSlope_8bit_11S293E_24mp_B09_013231_1696_B11_013732_1690 = { Identifier = "CTX_ClrSlope_8bit_11S293E_24mp_B09_013231_1696_B11_013732_1690", Name = [[Mars Reconnaissance Orbiter CTX, Color Slope Coprates 11S293E]], - FilePath = asset.localResource("Mars_Reconnaissance_Orbiter_CTX/Color_Slope_Coprates_11S293E.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Reconnaissance_Orbiter_CTX/Color_Slope_Coprates_11S293E.vrt"), Description = [[This is a colorized version of the original 2x2 pixel slope in degrees (also called a 1 baseline slope). This was produced as part of an effort to characterize topography within candidate Human Exploration Zones for Mars. The DEM was constructed from a pair of CTX images using the stereo photogrammetry software AMES Stereo Pipeline (ASP). THe DEM has been tied to MOLA and can be considered resarch- and visualization-ready. Because it has not been manually edited using a full 3D editing environment, ASP DEMs cannot currently be considered true engineering-ready for performing landings. References: @@ -79,7 +86,8 @@ Slopes were derived using the Python script called gdal_baseline_slope.py: https local treks_CTX_ClrSlope_8bit_13S293E_24mp_G07_020879_1669_G09_021657_1665 = { Identifier = "CTX_ClrSlope_8bit_13S293E_24mp_G07_020879_1669_G09_021657_1665", Name = [[Mars Reconnaissance Orbiter CTX, Color Slope Coprates 13S293E]], - FilePath = asset.localResource("Mars_Reconnaissance_Orbiter_CTX/Color_Slope_Coprates_13S293E.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Reconnaissance_Orbiter_CTX/Color_Slope_Coprates_13S293E.vrt"), Description = [[This is a colorized version of the original 2x2 pixel slope in degrees (also called a 1 baseline slope). This was produced as part of an effort to characterize topography within candidate Human Exploration Zones for Mars. The DEM was constructed from a pair of CTX images using the stereo photogrammetry software AMES Stereo Pipeline (ASP). THe DEM has been tied to MOLA and can be considered resarch- and visualization-ready. Because it has not been manually edited using a full 3D editing environment, ASP DEMs cannot currently be considered true engineering-ready for performing landings. References: @@ -93,7 +101,8 @@ Slopes were derived using the Python script called gdal_baseline_slope.py: https local treks_CTX_ClrSlope_8bit_37N024E_24mp_G05_020203_2178_G22_026994_2170 = { Identifier = "CTX_ClrSlope_8bit_37N024E_24mp_G05_020203_2178_G22_026994_2170", Name = [[Mars Reconnaissance Orbiter CTX, Color Slope Deuteronius 37N024E]], - FilePath = asset.localResource("Mars_Reconnaissance_Orbiter_CTX/Color_Slope_Deuteronius_37N024E.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Reconnaissance_Orbiter_CTX/Color_Slope_Deuteronius_37N024E.vrt"), Description = [[This is a colorized version of the original 2x2 pixel slope in degrees (also called a 1 baseline slope). This was produced as part of an effort to characterize topography within candidate Human Exploration Zones for Mars. The DEM was constructed from a pair of CTX images using the stereo photogrammetry software AMES Stereo Pipeline (ASP). THe DEM has been tied to MOLA and can be considered resarch- and visualization-ready. Because it has not been manually edited using a full 3D editing environment, ASP DEMs cannot currently be considered true engineering-ready for performing landings. References: @@ -107,7 +116,8 @@ Slopes were derived using the Python script called gdal_baseline_slope.py: https local treks_CTX_ClrSlope_8bit_38N024E_24mp_B17_016168_2181_G16_024594_2181 = { Identifier = "CTX_ClrSlope_8bit_38N024E_24mp_B17_016168_2181_G16_024594_2181", Name = [[Mars Reconnaissance Orbiter CTX, Color Slope Deuteronius 38N024E]], - FilePath = asset.localResource("Mars_Reconnaissance_Orbiter_CTX/Color_Slope_Deuteronius_38N024E.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Reconnaissance_Orbiter_CTX/Color_Slope_Deuteronius_38N024E.vrt"), Description = [[This is a colorized version of the original 2x2 pixel slope in degrees (also called a 1 baseline slope). This was produced as part of an effort to characterize topography within candidate Human Exploration Zones for Mars. The DEM was constructed from a pair of CTX images using the stereo photogrammetry software AMES Stereo Pipeline (ASP). THe DEM has been tied to MOLA and can be considered resarch- and visualization-ready. Because it has not been manually edited using a full 3D editing environment, ASP DEMs cannot currently be considered true engineering-ready for performing landings. References: @@ -121,7 +131,8 @@ Slopes were derived using the Python script called gdal_baseline_slope.py: https local treks_CTX_ClrSlope_8bit_39N024E_24mp_D15_032875_2196_D15_033165_2196 = { Identifier = "CTX_ClrSlope_8bit_39N024E_24mp_D15_032875_2196_D15_033165_2196", Name = [[Mars Reconnaissance Orbiter CTX, Color Slope Deuteronius 39N024E]], - FilePath = asset.localResource("Mars_Reconnaissance_Orbiter_CTX/Color_Slope_Deuteronius_39N024E.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Reconnaissance_Orbiter_CTX/Color_Slope_Deuteronius_39N024E.vrt"), Description = [[This is a colorized version of the original 2x2 pixel slope in degrees (also called a 1 baseline slope). This was produced as part of an effort to characterize topography within candidate Human Exploration Zones for Mars. The DEM was constructed from a pair of CTX images using the stereo photogrammetry software AMES Stereo Pipeline (ASP). THe DEM has been tied to MOLA and can be considered resarch- and visualization-ready. Because it has not been manually edited using a full 3D editing environment, ASP DEMs cannot currently be considered true engineering-ready for performing landings. References: @@ -135,7 +146,8 @@ Slopes were derived using the Python script called gdal_baseline_slope.py: https local treks_CTX_ClrSlope_8bit_40N022E_24mp_B18_016656_2206_B18_016801_2206 = { Identifier = "CTX_ClrSlope_8bit_40N022E_24mp_B18_016656_2206_B18_016801_2206", Name = [[Mars Reconnaissance Orbiter CTX, Color Slope Deuteronius 40N024E]], - FilePath = asset.localResource("Mars_Reconnaissance_Orbiter_CTX/Color_Slope_Deuteronius_40N024E.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Reconnaissance_Orbiter_CTX/Color_Slope_Deuteronius_40N024E.vrt"), Description = [[This is a colorized version of the original 2x2 pixel slope in degrees (also called a 1 baseline slope). This was produced as part of an effort to characterize topography within candidate Human Exploration Zones for Mars. The DEM was constructed from a pair of CTX images using the stereo photogrammetry software AMES Stereo Pipeline (ASP). THe DEM has been tied to MOLA and can be considered resarch- and visualization-ready. Because it has not been manually edited using a full 3D editing environment, ASP DEMs cannot currently be considered true engineering-ready for performing landings. References: @@ -149,7 +161,8 @@ Slopes were derived using the Python script called gdal_baseline_slope.py: https local treks_CTX_ClrSlope_8bit_11S289E_24mp_F23_044971_1685_F21_043995_1685 = { Identifier = "CTX_ClrSlope_8bit_11S289E_24mp_F23_044971_1685_F21_043995_1685", Name = [[Mars Reconnaissance Orbiter CTX, Color Slope East Melas 11S289E]], - FilePath = asset.localResource("Mars_Reconnaissance_Orbiter_CTX/Color_Slope_East_Melas_11S289E.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Reconnaissance_Orbiter_CTX/Color_Slope_East_Melas_11S289E.vrt"), Description = [[This is a colorized version of the original 2x2 pixel slope in degrees (also called a 1 baseline slope). This was produced as part of an effort to characterize topography within candidate Human Exploration Zones for Mars. The DEM was constructed from a pair of CTX images using the stereo photogrammetry software AMES Stereo Pipeline (ASP). THe DEM has been tied to MOLA and can be considered resarch- and visualization-ready. Because it has not been manually edited using a full 3D editing environment, ASP DEMs cannot currently be considered true engineering-ready for performing landings. References: @@ -163,7 +176,8 @@ Slopes were derived using the Python script called gdal_baseline_slope.py: https local treks_CTX_ClrSlope_8bit_11S291E_24mp_B19_017187_1685_B19_016976_1685 = { Identifier = "CTX_ClrSlope_8bit_11S291E_24mp_B19_017187_1685_B19_016976_1685", Name = [[Mars Reconnaissance Orbiter CTX, Color Slope East Melas 11S291E]], - FilePath = asset.localResource("Mars_Reconnaissance_Orbiter_CTX/Color_Slope_East_Melas_11S291E.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Reconnaissance_Orbiter_CTX/Color_Slope_East_Melas_11S291E.vrt"), Description = [[This is a colorized version of the original 2x2 pixel slope in degrees (also called a 1 baseline slope). This was produced as part of an effort to characterize topography within candidate Human Exploration Zones for Mars. The DEM was constructed from a pair of CTX images using the stereo photogrammetry software AMES Stereo Pipeline (ASP). THe DEM has been tied to MOLA and can be considered resarch- and visualization-ready. Because it has not been manually edited using a full 3D editing environment, ASP DEMs cannot currently be considered true engineering-ready for performing landings. References: @@ -177,7 +191,8 @@ Slopes were derived using the Python script called gdal_baseline_slope.py: https local treks_CTX_ClrSlope_8bit_12S289E_24mp_D01_027446_1678_D01_027723_1677 = { Identifier = "CTX_ClrSlope_8bit_12S289E_24mp_D01_027446_1678_D01_027723_1677", Name = [[Mars Reconnaissance Orbiter CTX, Color Slope East Melas 12S289E_D01]], - FilePath = asset.localResource("Mars_Reconnaissance_Orbiter_CTX/Color_Slope_East_Melas_12S289E_D01.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Reconnaissance_Orbiter_CTX/Color_Slope_East_Melas_12S289E_D01.vrt"), Description = [[This is a colorized version of the original 2x2 pixel slope in degrees (also called a 1 baseline slope). This was produced as part of an effort to characterize topography within candidate Human Exploration Zones for Mars. The DEM was constructed from a pair of CTX images using the stereo photogrammetry software AMES Stereo Pipeline (ASP). THe DEM has been tied to MOLA and can be considered resarch- and visualization-ready. Because it has not been manually edited using a full 3D editing environment, ASP DEMs cannot currently be considered true engineering-ready for performing landings. References: @@ -191,7 +206,8 @@ Slopes were derived using the Python script called gdal_baseline_slope.py: https local treks_CTX_ClrSlope_8bit_12S289E_24mp_F18_042927_1681_J02_045749_1694 = { Identifier = "CTX_ClrSlope_8bit_12S289E_24mp_F18_042927_1681_J02_045749_1694", Name = [[Mars Reconnaissance Orbiter CTX, Color Slope East Melas 12S289E_F18]], - FilePath = asset.localResource("Mars_Reconnaissance_Orbiter_CTX/Color_Slope_East_Melas_12S289E_F18.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Reconnaissance_Orbiter_CTX/Color_Slope_East_Melas_12S289E_F18.vrt"), Description = [[This is a colorized version of the original 2x2 pixel slope in degrees (also called a 1 baseline slope). This was produced as part of an effort to characterize topography within candidate Human Exploration Zones for Mars. The DEM was constructed from a pair of CTX images using the stereo photogrammetry software AMES Stereo Pipeline (ASP). THe DEM has been tied to MOLA and can be considered resarch- and visualization-ready. Because it has not been manually edited using a full 3D editing environment, ASP DEMs cannot currently be considered true engineering-ready for performing landings. References: @@ -205,7 +221,8 @@ Slopes were derived using the Python script called gdal_baseline_slope.py: https local treks_CTX_ClrSlope_8bit_12S290E_24mp_D18_034250_1676_D21_035450_1674 = { Identifier = "CTX_ClrSlope_8bit_12S290E_24mp_D18_034250_1676_D21_035450_1674", Name = [[Mars Reconnaissance Orbiter CTX, Color Slope East Melas 12S290E]], - FilePath = asset.localResource("Mars_Reconnaissance_Orbiter_CTX/Color_Slope_East_Melas_12S290E.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Reconnaissance_Orbiter_CTX/Color_Slope_East_Melas_12S290E.vrt"), Description = [[This is a colorized version of the original 2x2 pixel slope in degrees (also called a 1 baseline slope). This was produced as part of an effort to characterize topography within candidate Human Exploration Zones for Mars. The DEM was constructed from a pair of CTX images using the stereo photogrammetry software AMES Stereo Pipeline (ASP). THe DEM has been tied to MOLA and can be considered resarch- and visualization-ready. Because it has not been manually edited using a full 3D editing environment, ASP DEMs cannot currently be considered true engineering-ready for performing landings. References: @@ -219,7 +236,8 @@ Slopes were derived using the Python script called gdal_baseline_slope.py: https local treks_CTX_ClrSlope_8bit_12S291E_24mp_F14_041292_1682_F16_041938_1682 = { Identifier = "CTX_ClrSlope_8bit_12S291E_24mp_F14_041292_1682_F16_041938_1682", Name = [[Mars Reconnaissance Orbiter CTX, Color Slope East Melas 12S291E_F14]], - FilePath = asset.localResource("Mars_Reconnaissance_Orbiter_CTX/Color_Slope_East_Melas_12S291E_F14.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Reconnaissance_Orbiter_CTX/Color_Slope_East_Melas_12S291E_F14.vrt"), Description = [[This is a colorized version of the original 2x2 pixel slope in degrees (also called a 1 baseline slope). This was produced as part of an effort to characterize topography within candidate Human Exploration Zones for Mars. The DEM was constructed from a pair of CTX images using the stereo photogrammetry software AMES Stereo Pipeline (ASP). THe DEM has been tied to MOLA and can be considered resarch- and visualization-ready. Because it has not been manually edited using a full 3D editing environment, ASP DEMs cannot currently be considered true engineering-ready for performing landings. References: @@ -233,7 +251,8 @@ Slopes were derived using the Python script called gdal_baseline_slope.py: https local treks_CTX_ClrSlope_8bit_12S291E_24mp_F21_043850_1684_F21_043916_1685 = { Identifier = "CTX_ClrSlope_8bit_12S291E_24mp_F21_043850_1684_F21_043916_1685", Name = [[Mars Reconnaissance Orbiter CTX, Color Slope East Melas 12S291E_F21]], - FilePath = asset.localResource("Mars_Reconnaissance_Orbiter_CTX/Color_Slope_East_Melas_12S291E_F21.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Reconnaissance_Orbiter_CTX/Color_Slope_East_Melas_12S291E_F21.vrt"), Description = [[This is a colorized version of the original 2x2 pixel slope in degrees (also called a 1 baseline slope). This was produced as part of an effort to characterize topography within candidate Human Exploration Zones for Mars. The DEM was constructed from a pair of CTX images using the stereo photogrammetry software AMES Stereo Pipeline (ASP). THe DEM has been tied to MOLA and can be considered resarch- and visualization-ready. Because it has not been manually edited using a full 3D editing environment, ASP DEMs cannot currently be considered true engineering-ready for performing landings. References: @@ -247,7 +266,8 @@ Slopes were derived using the Python script called gdal_baseline_slope.py: https local treks_CTX_ClrSlope_8bit_12S291E_24mp_J01_045116_1677_J03_046039_1676 = { Identifier = "CTX_ClrSlope_8bit_12S291E_24mp_J01_045116_1677_J03_046039_1676", Name = [[Mars Reconnaissance Orbiter CTX, Color Slope East Melas 12S291E_J01]], - FilePath = asset.localResource("Mars_Reconnaissance_Orbiter_CTX/Color_Slope_East_Melas_12S291E_J01.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Reconnaissance_Orbiter_CTX/Color_Slope_East_Melas_12S291E_J01.vrt"), Description = [[This is a colorized version of the original 2x2 pixel slope in degrees (also called a 1 baseline slope). This was produced as part of an effort to characterize topography within candidate Human Exploration Zones for Mars. The DEM was constructed from a pair of CTX images using the stereo photogrammetry software AMES Stereo Pipeline (ASP). THe DEM has been tied to MOLA and can be considered resarch- and visualization-ready. Because it has not been manually edited using a full 3D editing environment, ASP DEMs cannot currently be considered true engineering-ready for performing landings. References: @@ -261,7 +281,8 @@ Slopes were derived using the Python script called gdal_baseline_slope.py: https local treks_CTX_ClrSlope_8bit_13S289E_24mp_D10_031125_1673_D12_031903_1669 = { Identifier = "CTX_ClrSlope_8bit_13S289E_24mp_D10_031125_1673_D12_031903_1669", Name = [[Mars Reconnaissance Orbiter CTX, Color Slope East Melas 13S289E]], - FilePath = asset.localResource("Mars_Reconnaissance_Orbiter_CTX/Color_Slope_East_Melas_13S289E.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Reconnaissance_Orbiter_CTX/Color_Slope_East_Melas_13S289E.vrt"), Description = [[This is a colorized version of the original 2x2 pixel slope in degrees (also called a 1 baseline slope). This was produced as part of an effort to characterize topography within candidate Human Exploration Zones for Mars. The DEM was constructed from a pair of CTX images using the stereo photogrammetry software AMES Stereo Pipeline (ASP). THe DEM has been tied to MOLA and can be considered resarch- and visualization-ready. Because it has not been manually edited using a full 3D editing environment, ASP DEMs cannot currently be considered true engineering-ready for performing landings. References: @@ -275,7 +296,8 @@ Slopes were derived using the Python script called gdal_baseline_slope.py: https local treks_CTX_ClrSlope_8bit_16S291E_24mp_D22_035951_1644_F01_036307_1644 = { Identifier = "CTX_ClrSlope_8bit_16S291E_24mp_D22_035951_1644_F01_036307_1644", Name = [[Mars Reconnaissance Orbiter CTX, Color Slope East Melas 16S291E_D22]], - FilePath = asset.localResource("Mars_Reconnaissance_Orbiter_CTX/Color_Slope_East_Melas_16S291E_D22.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Reconnaissance_Orbiter_CTX/Color_Slope_East_Melas_16S291E_D22.vrt"), Description = [[This is a colorized version of the original 2x2 pixel slope in degrees (also called a 1 baseline slope). This was produced as part of an effort to characterize topography within candidate Human Exploration Zones for Mars. The DEM was constructed from a pair of CTX images using the stereo photogrammetry software AMES Stereo Pipeline (ASP). THe DEM has been tied to MOLA and can be considered resarch- and visualization-ready. Because it has not been manually edited using a full 3D editing environment, ASP DEMs cannot currently be considered true engineering-ready for performing landings. References: @@ -289,7 +311,8 @@ Slopes were derived using the Python script called gdal_baseline_slope.py: https local treks_CTX_Shade_12S182E_24mp_P22_009609_1674_B02_010453_1675 = { Identifier = "CTX_Shade_12S182E_24mp_P22_009609_1674_B02_010453_1675", Name = [[Mars Reconnaissance Orbiter CTX, HillShade Apollinaris 12S182E]], - FilePath = asset.localResource("Mars_Reconnaissance_Orbiter_CTX/HillShade_Apollinaris_12S182E.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Reconnaissance_Orbiter_CTX/HillShade_Apollinaris_12S182E.vrt"), Description = [[This is a grayscale shaded relief (hillshade) for the original digital elevation model (DEM/DTM) as produced as part of an effort to characterize topography within candidate Human Exploration Zones for Mars. The DEM was constructed from a pair of CTX images using the stereo photogrammetry software AMES Stereo Pipeline (ASP). THe DEM has been tied to MOLA and can be considered resarch- and visualization-ready. Because it has not been manually edited using a full 3D editing environment, ASP DEMs cannot currently be considered true engineering-ready for performing landings. References: @@ -301,7 +324,8 @@ Mayer, D. P., E. S. Kite, 2016, An Integrated Workflow for Producing Digital Ter local treks_CTX_Shade_13S182E_24mp_G15_024127_1673_G16_024483_1673 = { Identifier = "CTX_Shade_13S182E_24mp_G15_024127_1673_G16_024483_1673", Name = [[Mars Reconnaissance Orbiter CTX, HillShade Apollinaris 13S182E]], - FilePath = asset.localResource("Mars_Reconnaissance_Orbiter_CTX/HillShade_Apollinaris_13S182E.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Reconnaissance_Orbiter_CTX/HillShade_Apollinaris_13S182E.vrt"), Description = [[This is a grayscale shaded relief (hillshade) for the original digital elevation model (DEM/DTM) as produced as part of an effort to characterize topography within candidate Human Exploration Zones for Mars. The DEM was constructed from a pair of CTX images using the stereo photogrammetry software AMES Stereo Pipeline (ASP). THe DEM has been tied to MOLA and can be considered resarch- and visualization-ready. Because it has not been manually edited using a full 3D editing environment, ASP DEMs cannot currently be considered true engineering-ready for performing landings. References: @@ -313,7 +337,8 @@ Mayer, D. P., E. S. Kite, 2016, An Integrated Workflow for Producing Digital Ter local treks_CTX_Shade_14S184E_24mp_B01_009886_1658_P21_009385_1658 = { Identifier = "CTX_Shade_14S184E_24mp_B01_009886_1658_P21_009385_1658", Name = [[Mars Reconnaissance Orbiter CTX, HillShade Apollinaris 14S184E]], - FilePath = asset.localResource("Mars_Reconnaissance_Orbiter_CTX/HillShade_Apollinaris_14S184E.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Reconnaissance_Orbiter_CTX/HillShade_Apollinaris_14S184E.vrt"), Description = [[This is a grayscale shaded relief (hillshade) for the original digital elevation model (DEM/DTM) as produced as part of an effort to characterize topography within candidate Human Exploration Zones for Mars. The DEM was constructed from a pair of CTX images using the stereo photogrammetry software AMES Stereo Pipeline (ASP). THe DEM has been tied to MOLA and can be considered resarch- and visualization-ready. Because it has not been manually edited using a full 3D editing environment, ASP DEMs cannot currently be considered true engineering-ready for performing landings. References: @@ -325,7 +350,8 @@ Mayer, D. P., E. S. Kite, 2016, An Integrated Workflow for Producing Digital Ter local treks_CTX_Shade_10S291E_24mp_P22_009684_1699_B02_010396_1699 = { Identifier = "CTX_Shade_10S291E_24mp_P22_009684_1699_B02_010396_1699", Name = [[Mars Reconnaissance Orbiter CTX, HillShade Coprates 10S291E]], - FilePath = asset.localResource("Mars_Reconnaissance_Orbiter_CTX/HillShade_Coprates_10S291E.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Reconnaissance_Orbiter_CTX/HillShade_Coprates_10S291E.vrt"), Description = [[This is a grayscale shaded relief (hillshade) for the original digital elevation model (DEM/DTM) as produced as part of an effort to characterize topography within candidate Human Exploration Zones for Mars. The DEM was constructed from a pair of CTX images using the stereo photogrammetry software AMES Stereo Pipeline (ASP). THe DEM has been tied to MOLA and can be considered resarch- and visualization-ready. Because it has not been manually edited using a full 3D editing environment, ASP DEMs cannot currently be considered true engineering-ready for performing landings. References: @@ -337,7 +363,8 @@ Mayer, D. P., E. S. Kite, 2016, An Integrated Workflow for Producing Digital Ter local treks_CTX_Shade_11S293E_24mp_B09_013231_1696_B11_013732_1690 = { Identifier = "CTX_Shade_11S293E_24mp_B09_013231_1696_B11_013732_1690", Name = [[Mars Reconnaissance Orbiter CTX, HillShade Coprates 11S293E]], - FilePath = asset.localResource("Mars_Reconnaissance_Orbiter_CTX/HillShade_Coprates_11S293E.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Reconnaissance_Orbiter_CTX/HillShade_Coprates_11S293E.vrt"), Description = [[This is a grayscale shaded relief (hillshade) for the original digital elevation model (DEM/DTM) as produced as part of an effort to characterize topography within candidate Human Exploration Zones for Mars. The DEM was constructed from a pair of CTX images using the stereo photogrammetry software AMES Stereo Pipeline (ASP). THe DEM has been tied to MOLA and can be considered resarch- and visualization-ready. Because it has not been manually edited using a full 3D editing environment, ASP DEMs cannot currently be considered true engineering-ready for performing landings. References: @@ -349,7 +376,8 @@ Mayer, D. P., E. S. Kite, 2016, An Integrated Workflow for Producing Digital Ter local treks_CTX_Shade_13S293E_24mp_G07_020879_1669_G09_021657_1665 = { Identifier = "CTX_Shade_13S293E_24mp_G07_020879_1669_G09_021657_1665", Name = [[Mars Reconnaissance Orbiter CTX, HillShade Coprates 13S293E]], - FilePath = asset.localResource("Mars_Reconnaissance_Orbiter_CTX/HillShade_Coprates_13S293E.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Reconnaissance_Orbiter_CTX/HillShade_Coprates_13S293E.vrt"), Description = [[This is a grayscale shaded relief (hillshade) for the original digital elevation model (DEM/DTM) as produced as part of an effort to characterize topography within candidate Human Exploration Zones for Mars. The DEM was constructed from a pair of CTX images using the stereo photogrammetry software AMES Stereo Pipeline (ASP). THe DEM has been tied to MOLA and can be considered resarch- and visualization-ready. Because it has not been manually edited using a full 3D editing environment, ASP DEMs cannot currently be considered true engineering-ready for performing landings. References: @@ -361,7 +389,8 @@ Mayer, D. P., E. S. Kite, 2016, An Integrated Workflow for Producing Digital Ter local treks_CTX_Shade_37N024E_24mp_G05_020203_2178_G22_026994_2170 = { Identifier = "CTX_Shade_37N024E_24mp_G05_020203_2178_G22_026994_2170", Name = [[Mars Reconnaissance Orbiter CTX, HillShade Deuteronius 37N024E]], - FilePath = asset.localResource("Mars_Reconnaissance_Orbiter_CTX/HillShade_Deuteronius_37N024E.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Reconnaissance_Orbiter_CTX/HillShade_Deuteronius_37N024E.vrt"), Description = [[This is a grayscale shaded relief (hillshade) for the original digital elevation model (DEM/DTM) as produced as part of an effort to characterize topography within candidate Human Exploration Zones for Mars. The DEM was constructed from a pair of CTX images using the stereo photogrammetry software AMES Stereo Pipeline (ASP). THe DEM has been tied to MOLA and can be considered resarch- and visualization-ready. Because it has not been manually edited using a full 3D editing environment, ASP DEMs cannot currently be considered true engineering-ready for performing landings. References: @@ -373,7 +402,8 @@ Mayer, D. P., E. S. Kite, 2016, An Integrated Workflow for Producing Digital Ter local treks_CTX_Shade_38N024E_24mp_B17_016168_2181_G16_024594_2181 = { Identifier = "CTX_Shade_38N024E_24mp_B17_016168_2181_G16_024594_2181", Name = [[Mars Reconnaissance Orbiter CTX, HillShade Deuteronius 38N024E]], - FilePath = asset.localResource("Mars_Reconnaissance_Orbiter_CTX/HillShade_Deuteronius_38N024E.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Reconnaissance_Orbiter_CTX/HillShade_Deuteronius_38N024E.vrt"), Description = [[This is a grayscale shaded relief (hillshade) for the original digital elevation model (DEM/DTM) as produced as part of an effort to characterize topography within candidate Human Exploration Zones for Mars. The DEM was constructed from a pair of CTX images using the stereo photogrammetry software AMES Stereo Pipeline (ASP). THe DEM has been tied to MOLA and can be considered resarch- and visualization-ready. Because it has not been manually edited using a full 3D editing environment, ASP DEMs cannot currently be considered true engineering-ready for performing landings. References: @@ -385,7 +415,8 @@ Mayer, D. P., E. S. Kite, 2016, An Integrated Workflow for Producing Digital Ter local treks_CTX_Shade_39N024E_24mp_D15_032875_2196_D15_033165_2196 = { Identifier = "CTX_Shade_39N024E_24mp_D15_032875_2196_D15_033165_2196", Name = [[Mars Reconnaissance Orbiter CTX, HillShade Deuteronius 39N024E]], - FilePath = asset.localResource("Mars_Reconnaissance_Orbiter_CTX/HillShade_Deuteronius_39N024E.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Reconnaissance_Orbiter_CTX/HillShade_Deuteronius_39N024E.vrt"), Description = [[This is a grayscale shaded relief (hillshade) for the original digital elevation model (DEM/DTM) as produced as part of an effort to characterize topography within candidate Human Exploration Zones for Mars. The DEM was constructed from a pair of CTX images using the stereo photogrammetry software AMES Stereo Pipeline (ASP). THe DEM has been tied to MOLA and can be considered resarch- and visualization-ready. Because it has not been manually edited using a full 3D editing environment, ASP DEMs cannot currently be considered true engineering-ready for performing landings. References: @@ -397,7 +428,8 @@ Mayer, D. P., E. S. Kite, 2016, An Integrated Workflow for Producing Digital Ter local treks_CTX_Shade_40N022E_24mp_B18_016656_2206_B18_016801_2206 = { Identifier = "CTX_Shade_40N022E_24mp_B18_016656_2206_B18_016801_2206", Name = [[Mars Reconnaissance Orbiter CTX, HillShade Deuteronius 40N024E]], - FilePath = asset.localResource("Mars_Reconnaissance_Orbiter_CTX/HillShade_Deuteronius_40N024E.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Reconnaissance_Orbiter_CTX/HillShade_Deuteronius_40N024E.vrt"), Description = [[This is a grayscale shaded relief (hillshade) for the original digital elevation model (DEM/DTM) as produced as part of an effort to characterize topography within candidate Human Exploration Zones for Mars. The DEM was constructed from a pair of CTX images using the stereo photogrammetry software AMES Stereo Pipeline (ASP). THe DEM has been tied to MOLA and can be considered resarch- and visualization-ready. Because it has not been manually edited using a full 3D editing environment, ASP DEMs cannot currently be considered true engineering-ready for performing landings. References: @@ -409,7 +441,8 @@ Mayer, D. P., E. S. Kite, 2016, An Integrated Workflow for Producing Digital Ter local treks_CTX_Shade_11S289E_24mp_F23_044971_1685_F21_043995_1685 = { Identifier = "CTX_Shade_11S289E_24mp_F23_044971_1685_F21_043995_1685", Name = [[Mars Reconnaissance Orbiter CTX, HillShade East Melas 11S289E]], - FilePath = asset.localResource("Mars_Reconnaissance_Orbiter_CTX/HillShade_East_Melas_11S289E.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Reconnaissance_Orbiter_CTX/HillShade_East_Melas_11S289E.vrt"), Description = [[This is a grayscale shaded relief (hillshade) for the original digital elevation model (DEM/DTM) as produced as part of an effort to characterize topography within candidate Human Exploration Zones for Mars. The DEM was constructed from a pair of CTX images using the stereo photogrammetry software AMES Stereo Pipeline (ASP). THe DEM has been tied to MOLA and can be considered resarch- and visualization-ready. Because it has not been manually edited using a full 3D editing environment, ASP DEMs cannot currently be considered true engineering-ready for performing landings. References: @@ -421,7 +454,8 @@ Mayer, D. P., E. S. Kite, 2016, An Integrated Workflow for Producing Digital Ter local treks_CTX_Shade_11S291E_24mp_B19_017187_1685_B19_016976_1685 = { Identifier = "CTX_Shade_11S291E_24mp_B19_017187_1685_B19_016976_1685", Name = [[Mars Reconnaissance Orbiter CTX, HillShade East Melas 11S291E]], - FilePath = asset.localResource("Mars_Reconnaissance_Orbiter_CTX/HillShade_East_Melas_11S291E.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Reconnaissance_Orbiter_CTX/HillShade_East_Melas_11S291E.vrt"), Description = [[This is a grayscale shaded relief (hillshade) for the original digital elevation model (DEM/DTM) as produced as part of an effort to characterize topography within candidate Human Exploration Zones for Mars. The DEM was constructed from a pair of CTX images using the stereo photogrammetry software AMES Stereo Pipeline (ASP). THe DEM has been tied to MOLA and can be considered resarch- and visualization-ready. Because it has not been manually edited using a full 3D editing environment, ASP DEMs cannot currently be considered true engineering-ready for performing landings. References: @@ -433,7 +467,8 @@ Mayer, D. P., E. S. Kite, 2016, An Integrated Workflow for Producing Digital Ter local treks_CTX_Shade_12S289E_24mp_D01_027446_1678_D01_027723_1677 = { Identifier = "CTX_Shade_12S289E_24mp_D01_027446_1678_D01_027723_1677", Name = [[Mars Reconnaissance Orbiter CTX, HillShade East Melas 12S289E_D01]], - FilePath = asset.localResource("Mars_Reconnaissance_Orbiter_CTX/HillShade_East_Melas_12S289E_D01.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Reconnaissance_Orbiter_CTX/HillShade_East_Melas_12S289E_D01.vrt"), Description = [[This is a grayscale shaded relief (hillshade) for the original digital elevation model (DEM/DTM) as produced as part of an effort to characterize topography within candidate Human Exploration Zones for Mars. The DEM was constructed from a pair of CTX images using the stereo photogrammetry software AMES Stereo Pipeline (ASP). THe DEM has been tied to MOLA and can be considered resarch- and visualization-ready. Because it has not been manually edited using a full 3D editing environment, ASP DEMs cannot currently be considered true engineering-ready for performing landings. References: @@ -445,7 +480,8 @@ Mayer, D. P., E. S. Kite, 2016, An Integrated Workflow for Producing Digital Ter local treks_CTX_Shade_12S289E_24mp_F18_042927_1681_J02_045749_1694 = { Identifier = "CTX_Shade_12S289E_24mp_F18_042927_1681_J02_045749_1694", Name = [[Mars Reconnaissance Orbiter CTX, HillShade East Melas 12S289E_F18]], - FilePath = asset.localResource("Mars_Reconnaissance_Orbiter_CTX/HillShade_East_Melas_12S289E_F18.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Reconnaissance_Orbiter_CTX/HillShade_East_Melas_12S289E_F18.vrt"), Description = [[This is a grayscale shaded relief (hillshade) for the original digital elevation model (DEM/DTM) as produced as part of an effort to characterize topography within candidate Human Exploration Zones for Mars. The DEM was constructed from a pair of CTX images using the stereo photogrammetry software AMES Stereo Pipeline (ASP). THe DEM has been tied to MOLA and can be considered resarch- and visualization-ready. Because it has not been manually edited using a full 3D editing environment, ASP DEMs cannot currently be considered true engineering-ready for performing landings. References: @@ -457,7 +493,8 @@ Mayer, D. P., E. S. Kite, 2016, An Integrated Workflow for Producing Digital Ter local treks_CTX_Shade_12S290E_24mp_D18_034250_1676_D21_035450_1674 = { Identifier = "CTX_Shade_12S290E_24mp_D18_034250_1676_D21_035450_1674", Name = [[Mars Reconnaissance Orbiter CTX, HillShade East Melas 12S290E]], - FilePath = asset.localResource("Mars_Reconnaissance_Orbiter_CTX/HillShade_East_Melas_12S290E.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Reconnaissance_Orbiter_CTX/HillShade_East_Melas_12S290E.vrt"), Description = [[This is a grayscale shaded relief (hillshade) for the original digital elevation model (DEM/DTM) as produced as part of an effort to characterize topography within candidate Human Exploration Zones for Mars. The DEM was constructed from a pair of CTX images using the stereo photogrammetry software AMES Stereo Pipeline (ASP). THe DEM has been tied to MOLA and can be considered resarch- and visualization-ready. Because it has not been manually edited using a full 3D editing environment, ASP DEMs cannot currently be considered true engineering-ready for performing landings. References: @@ -469,7 +506,8 @@ Mayer, D. P., E. S. Kite, 2016, An Integrated Workflow for Producing Digital Ter local treks_CTX_Shade_12S291E_24mp_F14_041292_1682_F16_041938_1682 = { Identifier = "CTX_Shade_12S291E_24mp_F14_041292_1682_F16_041938_1682", Name = [[Mars Reconnaissance Orbiter CTX, HillShade East Melas 12S291E_F14]], - FilePath = asset.localResource("Mars_Reconnaissance_Orbiter_CTX/HillShade_East_Melas_12S291E_F14.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Reconnaissance_Orbiter_CTX/HillShade_East_Melas_12S291E_F14.vrt"), Description = [[This is a grayscale shaded relief (hillshade) for the original digital elevation model (DEM/DTM) as produced as part of an effort to characterize topography within candidate Human Exploration Zones for Mars. The DEM was constructed from a pair of CTX images using the stereo photogrammetry software AMES Stereo Pipeline (ASP). THe DEM has been tied to MOLA and can be considered resarch- and visualization-ready. Because it has not been manually edited using a full 3D editing environment, ASP DEMs cannot currently be considered true engineering-ready for performing landings. References: @@ -481,7 +519,8 @@ Mayer, D. P., E. S. Kite, 2016, An Integrated Workflow for Producing Digital Ter local treks_CTX_Shade_12S291E_24mp_F21_043850_1684_F21_043916_1685 = { Identifier = "CTX_Shade_12S291E_24mp_F21_043850_1684_F21_043916_1685", Name = [[Mars Reconnaissance Orbiter CTX, HillShade East Melas 12S291E_F21]], - FilePath = asset.localResource("Mars_Reconnaissance_Orbiter_CTX/HillShade_East_Melas_12S291E_F21.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Reconnaissance_Orbiter_CTX/HillShade_East_Melas_12S291E_F21.vrt"), Description = [[This is a grayscale shaded relief (hillshade) for the original digital elevation model (DEM/DTM) as produced as part of an effort to characterize topography within candidate Human Exploration Zones for Mars. The DEM was constructed from a pair of CTX images using the stereo photogrammetry software AMES Stereo Pipeline (ASP). THe DEM has been tied to MOLA and can be considered resarch- and visualization-ready. Because it has not been manually edited using a full 3D editing environment, ASP DEMs cannot currently be considered true engineering-ready for performing landings. References: @@ -493,7 +532,8 @@ Mayer, D. P., E. S. Kite, 2016, An Integrated Workflow for Producing Digital Ter local treks_CTX_Shade_12S291E_24mp_J01_045116_1677_J03_046039_1676 = { Identifier = "CTX_Shade_12S291E_24mp_J01_045116_1677_J03_046039_1676", Name = [[Mars Reconnaissance Orbiter CTX, HillShade East Melas 12S291E_J01]], - FilePath = asset.localResource("Mars_Reconnaissance_Orbiter_CTX/HillShade_East_Melas_12S291E_J01.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Reconnaissance_Orbiter_CTX/HillShade_East_Melas_12S291E_J01.vrt"), Description = [[This is a grayscale shaded relief (hillshade) for the original digital elevation model (DEM/DTM) as produced as part of an effort to characterize topography within candidate Human Exploration Zones for Mars. The DEM was constructed from a pair of CTX images using the stereo photogrammetry software AMES Stereo Pipeline (ASP). THe DEM has been tied to MOLA and can be considered resarch- and visualization-ready. Because it has not been manually edited using a full 3D editing environment, ASP DEMs cannot currently be considered true engineering-ready for performing landings. References: @@ -505,7 +545,8 @@ Mayer, D. P., E. S. Kite, 2016, An Integrated Workflow for Producing Digital Ter local treks_CTX_Shade_13S289E_24mp_D10_031125_1673_D12_031903_1669 = { Identifier = "CTX_Shade_13S289E_24mp_D10_031125_1673_D12_031903_1669", Name = [[Mars Reconnaissance Orbiter CTX, HillShade East Melas 13S289E_D10]], - FilePath = asset.localResource("Mars_Reconnaissance_Orbiter_CTX/HillShade_East_Melas_13S289E_D10.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Reconnaissance_Orbiter_CTX/HillShade_East_Melas_13S289E_D10.vrt"), Description = [[This is a grayscale shaded relief (hillshade) for the original digital elevation model (DEM/DTM) as produced as part of an effort to characterize topography within candidate Human Exploration Zones for Mars. The DEM was constructed from a pair of CTX images using the stereo photogrammetry software AMES Stereo Pipeline (ASP). THe DEM has been tied to MOLA and can be considered resarch- and visualization-ready. Because it has not been manually edited using a full 3D editing environment, ASP DEMs cannot currently be considered true engineering-ready for performing landings. References: @@ -517,7 +558,8 @@ Mayer, D. P., E. S. Kite, 2016, An Integrated Workflow for Producing Digital Ter local treks_CTX_Shade_16S291E_24mp_D22_035951_1644_F01_036307_1644 = { Identifier = "CTX_Shade_16S291E_24mp_D22_035951_1644_F01_036307_1644", Name = [[Mars Reconnaissance Orbiter CTX, HillShade East Melas 16S291E_D22]], - FilePath = asset.localResource("Mars_Reconnaissance_Orbiter_CTX/HillShade_East_Melas_16S291E_D22.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Reconnaissance_Orbiter_CTX/HillShade_East_Melas_16S291E_D22.vrt"), Description = [[This is a grayscale shaded relief (hillshade) for the original digital elevation model (DEM/DTM) as produced as part of an effort to characterize topography within candidate Human Exploration Zones for Mars. The DEM was constructed from a pair of CTX images using the stereo photogrammetry software AMES Stereo Pipeline (ASP). THe DEM has been tied to MOLA and can be considered resarch- and visualization-ready. Because it has not been manually edited using a full 3D editing environment, ASP DEMs cannot currently be considered true engineering-ready for performing landings. References: @@ -529,7 +571,8 @@ Mayer, D. P., E. S. Kite, 2016, An Integrated Workflow for Producing Digital Ter local treks_Deuteronilus_CTX_Shade_v0_20171112 = { Identifier = "Deuteronilus_CTX_Shade_v0_20171112", Name = [[Mars Reconnaissance Orbiter CTX, Hilllshade Deuteronilus]], - FilePath = asset.localResource("Mars_Reconnaissance_Orbiter_CTX/Hilllshade_Deuteronilus.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Reconnaissance_Orbiter_CTX/Hilllshade_Deuteronilus.vrt"), Description = [[This is a grayscale shaded relief (hillshade) for the original digital elevation model (DEM/DTM) as produced as part of an effort to characterize topography within candidate Human Exploration Zones for Mars. The DEM was constructed from a pair of CTX images using the stereo photogrammetry software AMES Stereo Pipeline (ASP). THe DEM has been tied to MOLA and can be considered resarch- and visualization-ready. Because it has not been manually edited using a full 3D editing environment, ASP DEMs cannot currently be considered true engineering-ready for performing landings. References: @@ -541,7 +584,8 @@ Mayer, D. P., E. S. Kite, 2016, An Integrated Workflow for Producing Digital Ter local treks_CTX_Ortho_12S182E_24mp_P22_009609_1674 = { Identifier = "CTX_Ortho_12S182E_24mp_P22_009609_1674", Name = [[Mars Reconnaissance Orbiter CTX, Mosaic Apollinaris 12S182E]], - FilePath = asset.localResource("Mars_Reconnaissance_Orbiter_CTX/Mosaic_Apollinaris_12S182E.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Reconnaissance_Orbiter_CTX/Mosaic_Apollinaris_12S182E.vrt"), Description = [[This is a CTX orthorectified image, geometrically corrected using its own source digital elevation model (DEM/DTM), as produced as part of an effort to characterize candidate Human Exploration Zones for Mars. The original DEM was constructed from a pair of CTX images using the stereo photogrammetry software AMES Stereo Pipeline (ASP). The DEM, and thus orthoimage, has been tied to MOLA and can be considered resarch- and visualization-ready. Because it has not been manually edited using a full 3D editing environment, ASP DEMs cannot currently be considered true engineering-ready for performing landings. References: @@ -553,7 +597,8 @@ Mayer, D. P., E. S. Kite, 2016, An Integrated Workflow for Producing Digital Ter local treks_CTX_Ortho_13S182E_24mp_G15_024127_1673 = { Identifier = "CTX_Ortho_13S182E_24mp_G15_024127_1673", Name = [[Mars Reconnaissance Orbiter CTX, Mosaic Apollinaris 13S182E]], - FilePath = asset.localResource("Mars_Reconnaissance_Orbiter_CTX/Mosaic_Apollinaris_13S182E.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Reconnaissance_Orbiter_CTX/Mosaic_Apollinaris_13S182E.vrt"), Description = [[This is a CTX orthorectified image, geometrically corrected using its own source digital elevation model (DEM/DTM), as produced as part of an effort to characterize candidate Human Exploration Zones for Mars. The original DEM was constructed from a pair of CTX images using the stereo photogrammetry software AMES Stereo Pipeline (ASP). The DEM, and thus orthoimage, has been tied to MOLA and can be considered resarch- and visualization-ready. Because it has not been manually edited using a full 3D editing environment, ASP DEMs cannot currently be considered true engineering-ready for performing landings. References: @@ -565,7 +610,8 @@ Mayer, D. P., E. S. Kite, 2016, An Integrated Workflow for Producing Digital Ter local treks_CTX_Ortho_14S184E_24mp_B01_009886_1658 = { Identifier = "CTX_Ortho_14S184E_24mp_B01_009886_1658", Name = [[Mars Reconnaissance Orbiter CTX, Mosaic Apollinaris 14S184E]], - FilePath = asset.localResource("Mars_Reconnaissance_Orbiter_CTX/Mosaic_Apollinaris_14S184E.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Reconnaissance_Orbiter_CTX/Mosaic_Apollinaris_14S184E.vrt"), Description = [[This is a CTX orthorectified image, geometrically corrected using its own source digital elevation model (DEM/DTM), as produced as part of an effort to characterize candidate Human Exploration Zones for Mars. The original DEM was constructed from a pair of CTX images using the stereo photogrammetry software AMES Stereo Pipeline (ASP). The DEM, and thus orthoimage, has been tied to MOLA and can be considered resarch- and visualization-ready. Because it has not been manually edited using a full 3D editing environment, ASP DEMs cannot currently be considered true engineering-ready for performing landings. References: @@ -577,7 +623,8 @@ Mayer, D. P., E. S. Kite, 2016, An Integrated Workflow for Producing Digital Ter local treks_CTX_Ortho_10S291E_24mp_P22_009684_1699 = { Identifier = "CTX_Ortho_10S291E_24mp_P22_009684_1699", Name = [[Mars Reconnaissance Orbiter CTX, Mosaic Coprates 10S291E]], - FilePath = asset.localResource("Mars_Reconnaissance_Orbiter_CTX/Mosaic_Coprates_10S291E.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Reconnaissance_Orbiter_CTX/Mosaic_Coprates_10S291E.vrt"), Description = [[This is a CTX orthorectified image, geometrically corrected using its own source digital elevation model (DEM/DTM), as produced as part of an effort to characterize candidate Human Exploration Zones for Mars. The original DEM was constructed from a pair of CTX images using the stereo photogrammetry software AMES Stereo Pipeline (ASP). The DEM, and thus orthoimage, has been tied to MOLA and can be considered resarch- and visualization-ready. Because it has not been manually edited using a full 3D editing environment, ASP DEMs cannot currently be considered true engineering-ready for performing landings. References: @@ -589,7 +636,8 @@ Mayer, D. P., E. S. Kite, 2016, An Integrated Workflow for Producing Digital Ter local treks_CTX_Ortho_11S293E_24mp_B09_013231_1696 = { Identifier = "CTX_Ortho_11S293E_24mp_B09_013231_1696", Name = [[Mars Reconnaissance Orbiter CTX, Mosaic Coprates 11S293E]], - FilePath = asset.localResource("Mars_Reconnaissance_Orbiter_CTX/Mosaic_Coprates_11S293E.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Reconnaissance_Orbiter_CTX/Mosaic_Coprates_11S293E.vrt"), Description = [[This is a CTX orthorectified image, geometrically corrected using its own source digital elevation model (DEM/DTM), as produced as part of an effort to characterize candidate Human Exploration Zones for Mars. The original DEM was constructed from a pair of CTX images using the stereo photogrammetry software AMES Stereo Pipeline (ASP). The DEM, and thus orthoimage, has been tied to MOLA and can be considered resarch- and visualization-ready. Because it has not been manually edited using a full 3D editing environment, ASP DEMs cannot currently be considered true engineering-ready for performing landings. References: @@ -601,7 +649,8 @@ Mayer, D. P., E. S. Kite, 2016, An Integrated Workflow for Producing Digital Ter local treks_CTX_Ortho_13S293E_24mp_G07_020879_1669 = { Identifier = "CTX_Ortho_13S293E_24mp_G07_020879_1669", Name = [[Mars Reconnaissance Orbiter CTX, Mosaic Coprates 13S293E]], - FilePath = asset.localResource("Mars_Reconnaissance_Orbiter_CTX/Mosaic_Coprates_13S293E.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Reconnaissance_Orbiter_CTX/Mosaic_Coprates_13S293E.vrt"), Description = [[This is a CTX orthorectified image, geometrically corrected using its own source digital elevation model (DEM/DTM), as produced as part of an effort to characterize candidate Human Exploration Zones for Mars. The original DEM was constructed from a pair of CTX images using the stereo photogrammetry software AMES Stereo Pipeline (ASP). The DEM, and thus orthoimage, has been tied to MOLA and can be considered resarch- and visualization-ready. Because it has not been manually edited using a full 3D editing environment, ASP DEMs cannot currently be considered true engineering-ready for performing landings. References: @@ -613,7 +662,8 @@ Mayer, D. P., E. S. Kite, 2016, An Integrated Workflow for Producing Digital Ter local treks_CTX_Ortho_38N024E_6mp_B17_016168_2181 = { Identifier = "CTX_Ortho_38N024E_6mp_B17_016168_2181", Name = [[Mars Reconnaissance Orbiter CTX, Mosaic Deuteronius 38N024E]], - FilePath = asset.localResource("Mars_Reconnaissance_Orbiter_CTX/Mosaic_Deuteronius_38N024E.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Reconnaissance_Orbiter_CTX/Mosaic_Deuteronius_38N024E.vrt"), Description = [[This is a CTX orthorectified image, geometrically corrected using its own source digital elevation model (DEM/DTM), as produced as part of an effort to characterize candidate Human Exploration Zones for Mars. The original DEM was constructed from a pair of CTX images using the stereo photogrammetry software AMES Stereo Pipeline (ASP). The DEM, and thus orthoimage, has been tied to MOLA and can be considered resarch- and visualization-ready. Because it has not been manually edited using a full 3D editing environment, ASP DEMs cannot currently be considered true engineering-ready for performing landings. References: @@ -625,7 +675,8 @@ Mayer, D. P., E. S. Kite, 2016, An Integrated Workflow for Producing Digital Ter local treks_CTX_Ortho_39N024E_6mp_D15_032875_2196 = { Identifier = "CTX_Ortho_39N024E_6mp_D15_032875_2196", Name = [[Mars Reconnaissance Orbiter CTX, Mosaic Deuteronius 39N024E]], - FilePath = asset.localResource("Mars_Reconnaissance_Orbiter_CTX/Mosaic_Deuteronius_39N024E.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Reconnaissance_Orbiter_CTX/Mosaic_Deuteronius_39N024E.vrt"), Description = [[This is a CTX orthorectified image, geometrically corrected using its own source digital elevation model (DEM/DTM), as produced as part of an effort to characterize candidate Human Exploration Zones for Mars. The original DEM was constructed from a pair of CTX images using the stereo photogrammetry software AMES Stereo Pipeline (ASP). The DEM, and thus orthoimage, has been tied to MOLA and can be considered resarch- and visualization-ready. Because it has not been manually edited using a full 3D editing environment, ASP DEMs cannot currently be considered true engineering-ready for performing landings. References: @@ -637,7 +688,8 @@ Mayer, D. P., E. S. Kite, 2016, An Integrated Workflow for Producing Digital Ter local treks_CTX_Ortho_40N022E_6mp_B18_016656_2206 = { Identifier = "CTX_Ortho_40N022E_6mp_B18_016656_2206", Name = [[Mars Reconnaissance Orbiter CTX, Mosaic Deuteronius 40N024E]], - FilePath = asset.localResource("Mars_Reconnaissance_Orbiter_CTX/Mosaic_Deuteronius_40N024E.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Reconnaissance_Orbiter_CTX/Mosaic_Deuteronius_40N024E.vrt"), Description = [[This is a CTX orthorectified image, geometrically corrected using its own source digital elevation model (DEM/DTM), as produced as part of an effort to characterize candidate Human Exploration Zones for Mars. The original DEM was constructed from a pair of CTX images using the stereo photogrammetry software AMES Stereo Pipeline (ASP). The DEM, and thus orthoimage, has been tied to MOLA and can be considered resarch- and visualization-ready. Because it has not been manually edited using a full 3D editing environment, ASP DEMs cannot currently be considered true engineering-ready for performing landings. References: @@ -649,7 +701,8 @@ Mayer, D. P., E. S. Kite, 2016, An Integrated Workflow for Producing Digital Ter local treks_CTX_Ortho_11S289E_6mp_F23_044971_1685 = { Identifier = "CTX_Ortho_11S289E_6mp_F23_044971_1685", Name = [[Mars Reconnaissance Orbiter CTX, Mosaic East Melas 11S289E]], - FilePath = asset.localResource("Mars_Reconnaissance_Orbiter_CTX/Mosaic_East_Melas_11S289E.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Reconnaissance_Orbiter_CTX/Mosaic_East_Melas_11S289E.vrt"), Description = [[This is a CTX orthorectified image, geometrically corrected using its own source digital elevation model (DEM/DTM), as produced as part of an effort to characterize candidate Human Exploration Zones for Mars. The original DEM was constructed from a pair of CTX images using the stereo photogrammetry software AMES Stereo Pipeline (ASP). The DEM, and thus orthoimage, has been tied to MOLA and can be considered resarch- and visualization-ready. Because it has not been manually edited using a full 3D editing environment, ASP DEMs cannot currently be considered true engineering-ready for performing landings. References: @@ -661,7 +714,8 @@ Mayer, D. P., E. S. Kite, 2016, An Integrated Workflow for Producing Digital Ter local treks_CTX_Ortho_11S291E_6mp_B19_017187_1685 = { Identifier = "CTX_Ortho_11S291E_6mp_B19_017187_1685", Name = [[Mars Reconnaissance Orbiter CTX, Mosaic East Melas 11S291E]], - FilePath = asset.localResource("Mars_Reconnaissance_Orbiter_CTX/Mosaic_East_Melas_11S291E.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Reconnaissance_Orbiter_CTX/Mosaic_East_Melas_11S291E.vrt"), Description = [[This is a CTX orthorectified image, geometrically corrected using its own source digital elevation model (DEM/DTM), as produced as part of an effort to characterize candidate Human Exploration Zones for Mars. The original DEM was constructed from a pair of CTX images using the stereo photogrammetry software AMES Stereo Pipeline (ASP). The DEM, and thus orthoimage, has been tied to MOLA and can be considered resarch- and visualization-ready. Because it has not been manually edited using a full 3D editing environment, ASP DEMs cannot currently be considered true engineering-ready for performing landings. References: @@ -673,7 +727,8 @@ Mayer, D. P., E. S. Kite, 2016, An Integrated Workflow for Producing Digital Ter local treks_CTX_Ortho_12S289E_6mp_D01_027446_1678 = { Identifier = "CTX_Ortho_12S289E_6mp_D01_027446_1678", Name = [[Mars Reconnaissance Orbiter CTX, Mosaic East Melas 12S289E_D01]], - FilePath = asset.localResource("Mars_Reconnaissance_Orbiter_CTX/Mosaic_East_Melas_12S289E_D01.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Reconnaissance_Orbiter_CTX/Mosaic_East_Melas_12S289E_D01.vrt"), Description = [[This is a CTX orthorectified image, geometrically corrected using its own source digital elevation model (DEM/DTM), as produced as part of an effort to characterize candidate Human Exploration Zones for Mars. The original DEM was constructed from a pair of CTX images using the stereo photogrammetry software AMES Stereo Pipeline (ASP). The DEM, and thus orthoimage, has been tied to MOLA and can be considered resarch- and visualization-ready. Because it has not been manually edited using a full 3D editing environment, ASP DEMs cannot currently be considered true engineering-ready for performing landings. References: @@ -685,7 +740,8 @@ Mayer, D. P., E. S. Kite, 2016, An Integrated Workflow for Producing Digital Ter local treks_CTX_Ortho_12S289E_6mp_F18_042927_1681 = { Identifier = "CTX_Ortho_12S289E_6mp_F18_042927_1681", Name = [[Mars Reconnaissance Orbiter CTX, Mosaic East Melas 12S289E_F18]], - FilePath = asset.localResource("Mars_Reconnaissance_Orbiter_CTX/Mosaic_East_Melas_12S289E_F18.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Reconnaissance_Orbiter_CTX/Mosaic_East_Melas_12S289E_F18.vrt"), Description = [[This is a CTX orthorectified image, geometrically corrected using its own source digital elevation model (DEM/DTM), as produced as part of an effort to characterize candidate Human Exploration Zones for Mars. The original DEM was constructed from a pair of CTX images using the stereo photogrammetry software AMES Stereo Pipeline (ASP). The DEM, and thus orthoimage, has been tied to MOLA and can be considered resarch- and visualization-ready. Because it has not been manually edited using a full 3D editing environment, ASP DEMs cannot currently be considered true engineering-ready for performing landings. References: @@ -697,7 +753,8 @@ Mayer, D. P., E. S. Kite, 2016, An Integrated Workflow for Producing Digital Ter local treks_CTX_Ortho_12S290E_6mp_D18_034250_1676 = { Identifier = "CTX_Ortho_12S290E_6mp_D18_034250_1676", Name = [[Mars Reconnaissance Orbiter CTX, Mosaic East Melas 12S290E]], - FilePath = asset.localResource("Mars_Reconnaissance_Orbiter_CTX/Mosaic_East_Melas_12S290E.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Reconnaissance_Orbiter_CTX/Mosaic_East_Melas_12S290E.vrt"), Description = [[This is a CTX orthorectified image, geometrically corrected using its own source digital elevation model (DEM/DTM), as produced as part of an effort to characterize candidate Human Exploration Zones for Mars. The original DEM was constructed from a pair of CTX images using the stereo photogrammetry software AMES Stereo Pipeline (ASP). The DEM, and thus orthoimage, has been tied to MOLA and can be considered resarch- and visualization-ready. Because it has not been manually edited using a full 3D editing environment, ASP DEMs cannot currently be considered true engineering-ready for performing landings. References: @@ -709,7 +766,8 @@ Mayer, D. P., E. S. Kite, 2016, An Integrated Workflow for Producing Digital Ter local treks_F14_041292_1682_map_ba_align_6_fill500DRG = { Identifier = "F14_041292_1682_map_ba_align_6_fill500DRG", Name = [[Mars Reconnaissance Orbiter CTX, Mosaic East Melas 12S291E_F14]], - FilePath = asset.localResource("Mars_Reconnaissance_Orbiter_CTX/Mosaic_East_Melas_12S291E_F14.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Reconnaissance_Orbiter_CTX/Mosaic_East_Melas_12S291E_F14.vrt"), Description = [[This is a CTX orthorectified image, geometrically corrected using its own source digital elevation model (DEM/DTM), as produced as part of an effort to characterize candidate Human Exploration Zones for Mars. The original DEM was constructed from a pair of CTX images using the stereo photogrammetry software AMES Stereo Pipeline (ASP). The DEM, and thus orthoimage, has been tied to MOLA and can be considered resarch- and visualization-ready. Because it has not been manually edited using a full 3D editing environment, ASP DEMs cannot currently be considered true engineering-ready for performing landings. References: @@ -721,7 +779,8 @@ Mayer, D. P., E. S. Kite, 2016, An Integrated Workflow for Producing Digital Ter local treks_CTX_Ortho_12S291E_6mp_F21_043850_1684 = { Identifier = "CTX_Ortho_12S291E_6mp_F21_043850_1684", Name = [[Mars Reconnaissance Orbiter CTX, Mosaic East Melas 12S291E_F21]], - FilePath = asset.localResource("Mars_Reconnaissance_Orbiter_CTX/Mosaic_East_Melas_12S291E_F21.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Reconnaissance_Orbiter_CTX/Mosaic_East_Melas_12S291E_F21.vrt"), Description = [[This is a CTX orthorectified image, geometrically corrected using its own source digital elevation model (DEM/DTM), as produced as part of an effort to characterize candidate Human Exploration Zones for Mars. The original DEM was constructed from a pair of CTX images using the stereo photogrammetry software AMES Stereo Pipeline (ASP). The DEM, and thus orthoimage, has been tied to MOLA and can be considered resarch- and visualization-ready. Because it has not been manually edited using a full 3D editing environment, ASP DEMs cannot currently be considered true engineering-ready for performing landings. References: @@ -733,7 +792,8 @@ Mayer, D. P., E. S. Kite, 2016, An Integrated Workflow for Producing Digital Ter local treks_CTX_Ortho_12S291E_6mp_J01_045116_1677 = { Identifier = "CTX_Ortho_12S291E_6mp_J01_045116_1677", Name = [[Mars Reconnaissance Orbiter CTX, Mosaic East Melas 12S291E_J01]], - FilePath = asset.localResource("Mars_Reconnaissance_Orbiter_CTX/Mosaic_East_Melas_12S291E_J01.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Reconnaissance_Orbiter_CTX/Mosaic_East_Melas_12S291E_J01.vrt"), Description = [[This is a CTX orthorectified image, geometrically corrected using its own source digital elevation model (DEM/DTM), as produced as part of an effort to characterize candidate Human Exploration Zones for Mars. The original DEM was constructed from a pair of CTX images using the stereo photogrammetry software AMES Stereo Pipeline (ASP). The DEM, and thus orthoimage, has been tied to MOLA and can be considered resarch- and visualization-ready. Because it has not been manually edited using a full 3D editing environment, ASP DEMs cannot currently be considered true engineering-ready for performing landings. References: @@ -745,7 +805,8 @@ Mayer, D. P., E. S. Kite, 2016, An Integrated Workflow for Producing Digital Ter local treks_CTX_Ortho_13S289E_6mp_D10_031125_1673 = { Identifier = "CTX_Ortho_13S289E_6mp_D10_031125_1673", Name = [[Mars Reconnaissance Orbiter CTX, Mosaic East Melas 13S289E_D10]], - FilePath = asset.localResource("Mars_Reconnaissance_Orbiter_CTX/Mosaic_East_Melas_13S289E_D10.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Reconnaissance_Orbiter_CTX/Mosaic_East_Melas_13S289E_D10.vrt"), Description = [[This is a CTX orthorectified image, geometrically corrected using its own source digital elevation model (DEM/DTM), as produced as part of an effort to characterize candidate Human Exploration Zones for Mars. The original DEM was constructed from a pair of CTX images using the stereo photogrammetry software AMES Stereo Pipeline (ASP). The DEM, and thus orthoimage, has been tied to MOLA and can be considered resarch- and visualization-ready. Because it has not been manually edited using a full 3D editing environment, ASP DEMs cannot currently be considered true engineering-ready for performing landings. References: @@ -757,7 +818,8 @@ Mayer, D. P., E. S. Kite, 2016, An Integrated Workflow for Producing Digital Ter local treks_CTX_Ortho_16S291E_6mp_D22_035951_1644 = { Identifier = "CTX_Ortho_16S291E_6mp_D22_035951_1644", Name = [[Mars Reconnaissance Orbiter CTX, Mosaic East Melas 16S291E]], - FilePath = asset.localResource("Mars_Reconnaissance_Orbiter_CTX/Mosaic_East_Melas_16S291E.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Reconnaissance_Orbiter_CTX/Mosaic_East_Melas_16S291E.vrt"), Description = [[This is a CTX orthorectified image, geometrically corrected using its own source digital elevation model (DEM/DTM), as produced as part of an effort to characterize candidate Human Exploration Zones for Mars. The original DEM was constructed from a pair of CTX images using the stereo photogrammetry software AMES Stereo Pipeline (ASP). The DEM, and thus orthoimage, has been tied to MOLA and can be considered resarch- and visualization-ready. Because it has not been manually edited using a full 3D editing environment, ASP DEMs cannot currently be considered true engineering-ready for performing landings. References: @@ -769,7 +831,8 @@ Mayer, D. P., E. S. Kite, 2016, An Integrated Workflow for Producing Digital Ter local treks_CTX_Slope_12S182E_24mp_P22_009609_1674_B02_010453_1675 = { Identifier = "CTX_Slope_12S182E_24mp_P22_009609_1674_B02_010453_1675", Name = [[Mars Reconnaissance Orbiter CTX, Slope Apollinaris 12S182E]], - FilePath = asset.localResource("Mars_Reconnaissance_Orbiter_CTX/Slope_Apollinaris_12S182E.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Reconnaissance_Orbiter_CTX/Slope_Apollinaris_12S182E.vrt"), Description = [[This is a colorized version of the original 2x2 pixel slope in degrees (also called a 1 baseline slope). This was produced as part of an effort to characterize topography within candidate Human Exploration Zones for Mars. The DEM was constructed from a pair of CTX images using the stereo photogrammetry software AMES Stereo Pipeline (ASP). THe DEM has been tied to MOLA and can be considered resarch- and visualization-ready. Because it has not been manually edited using a full 3D editing environment, ASP DEMs cannot currently be considered true engineering-ready for performing landings. References: @@ -783,7 +846,8 @@ Slopes were derived using the Python script called gdal_baseline_slope.py: https local treks_CTX_Slope_13S182E_24mp_G15_024127_1673_G16_024483_1673 = { Identifier = "CTX_Slope_13S182E_24mp_G15_024127_1673_G16_024483_1673", Name = [[Mars Reconnaissance Orbiter CTX, Slope Apollinaris 13S182E]], - FilePath = asset.localResource("Mars_Reconnaissance_Orbiter_CTX/Slope_Apollinaris_13S182E.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Reconnaissance_Orbiter_CTX/Slope_Apollinaris_13S182E.vrt"), Description = [[This is a colorized version of the original 2x2 pixel slope in degrees (also called a 1 baseline slope). This was produced as part of an effort to characterize topography within candidate Human Exploration Zones for Mars. The DEM was constructed from a pair of CTX images using the stereo photogrammetry software AMES Stereo Pipeline (ASP). THe DEM has been tied to MOLA and can be considered resarch- and visualization-ready. Because it has not been manually edited using a full 3D editing environment, ASP DEMs cannot currently be considered true engineering-ready for performing landings. References: @@ -797,7 +861,8 @@ Slopes were derived using the Python script called gdal_baseline_slope.py: https local treks_CTX_Slope_14S184E_24mp_B01_009886_1658_P21_009385_1658 = { Identifier = "CTX_Slope_14S184E_24mp_B01_009886_1658_P21_009385_1658", Name = [[Mars Reconnaissance Orbiter CTX, Slope Apollinaris 14S184E]], - FilePath = asset.localResource("Mars_Reconnaissance_Orbiter_CTX/Slope_Apollinaris_14S184E.vrt"), + ZIndex = 50, + FilePath = asset.resource("Mars_Reconnaissance_Orbiter_CTX/Slope_Apollinaris_14S184E.vrt"), Description = [[This is a colorized version of the original 2x2 pixel slope in degrees (also called a 1 baseline slope). This was produced as part of an effort to characterize topography within candidate Human Exploration Zones for Mars. The DEM was constructed from a pair of CTX images using the stereo photogrammetry software AMES Stereo Pipeline (ASP). THe DEM has been tied to MOLA and can be considered resarch- and visualization-ready. Because it has not been manually edited using a full 3D editing environment, ASP DEMs cannot currently be considered true engineering-ready for performing landings. References: @@ -808,6 +873,7 @@ Mayer, D. P., E. S. Kite, 2016, An Integrated Workflow for Producing Digital Ter Slopes were derived using the Python script called gdal_baseline_slope.py: https://github.com/USGS-Astrogeology/GDAL_scripts/blob/master/gdal_baseline_slope ]] } + asset.onInitialize(function() openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_CTX_ClrSlope_8bit_12S182E_24mp_P22_009609_1674_B02_010453_1675) openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_CTX_ClrSlope_8bit_13S182E_24mp_G15_024127_1673_G16_024483_1673) @@ -1005,9 +1071,9 @@ asset.export("CTX_Slope_13S182E_24mp_G15_024127_1673_G16_024483_1673", treks_CTX asset.export("CTX_Slope_14S184E_24mp_B01_009886_1658_P21_009385_1658", treks_CTX_Slope_14S184E_24mp_B01_009886_1658_P21_009385_1658) + asset.meta = { - Name = [[NASA Treks Layers for Mars Mars_Reconnaissance_Orbiter_CTX], - Version = "1.0", + Name = [[NASA Treks Layers for Mars Mars_Reconnaissance_Orbiter_CTX]], Author = "NASA/Treks", URL = "https://trek.nasa.gov/mars", License = "NASA/Treks", diff --git a/data/assets/scene/solarsystem/planets/mars/layers/newyork_layers.asset b/data/assets/scene/solarsystem/planets/mars/layers/newyork_layers.asset new file mode 100644 index 0000000000..20b3e5ed1e --- /dev/null +++ b/data/assets/scene/solarsystem/planets/mars/layers/newyork_layers.asset @@ -0,0 +1,27 @@ +asset.require("./base_layers") +asset.require("./colorlayers/moc_wa_color_newyork", asset.enabled) +asset.require("./colorlayers/viking_mdim_newyork", false) +asset.require("./colorlayers/mola_pseudo_color_newyork", false) +asset.require("./colorlayers/mola_hrsc_newyork", false) +asset.require("./colorlayers/themis_ir_day_newyork", false) +asset.require("./colorlayers/themis_ir_night_newyork", false) +asset.require("./colorlayers/ctx_mosaic_newyork", false) + +-- The New York server does not have this map, use the Utah server for now +asset.require("./heightlayers/mola_utah", false) + + + +asset.meta = { + Name = "Default Mars Layers (New York)", + Description = [[Default Mars layers are: Mars texture, CTX Blended, HiRISE, + HiRISE Local Set, MOC WA Color, Viking MDIM, MOLA Pseudo Color, MOLA HRSC, + Themis IR Day, Themis IR Night, CTX Mosaic, MDEM200M (3D), HiRISE Local Set DEM (3D), + Mola Elevation (3D), Tile Indicies, and Size Reference. + + Layers only loaded from the New York server + ]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/mars/layers/overlays/indices.asset b/data/assets/scene/solarsystem/planets/mars/layers/overlays/indices.asset index eba0ee9243..cc4f373ad8 100644 --- a/data/assets/scene/solarsystem/planets/mars/layers/overlays/indices.asset +++ b/data/assets/scene/solarsystem/planets/mars/layers/overlays/indices.asset @@ -4,7 +4,7 @@ local globe = asset.require("../../mars") local Layer = { Identifier = "Indices", - Type = "TileIndexTileLayer", + Type = "TileIndexTileProvider", Enabled = asset.enabled } @@ -23,7 +23,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Mars Indices", - Version = "1.0", Description = "This asset supplies a tile index layer for the Mars globe", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/mars/layers/overlays/size_reference.asset b/data/assets/scene/solarsystem/planets/mars/layers/overlays/size_reference.asset index 179cf96cee..87bbf32013 100644 --- a/data/assets/scene/solarsystem/planets/mars/layers/overlays/size_reference.asset +++ b/data/assets/scene/solarsystem/planets/mars/layers/overlays/size_reference.asset @@ -6,7 +6,7 @@ local Layer = { Identifier = "Size_Reference", Name = "Size Reference", Enabled = asset.enabled, - Type = "SizeReferenceTileLayer", + Type = "SizeReferenceTileProvider", Radii = globe.Mars.Renderable.Radii } @@ -25,7 +25,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Mars Size Reference", - Version = "1.0", Description = "This asset supplies a size reference layer for the Mars globe", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/mars/layers/sweden_layers.asset b/data/assets/scene/solarsystem/planets/mars/layers/sweden_layers.asset new file mode 100644 index 0000000000..cd48e088bb --- /dev/null +++ b/data/assets/scene/solarsystem/planets/mars/layers/sweden_layers.asset @@ -0,0 +1,26 @@ +asset.require("./base_layers") +asset.require("./colorlayers/moc_wa_color_sweden", asset.enabled) +asset.require("./colorlayers/viking_mdim_sweden", false) +asset.require("./colorlayers/mola_pseudo_color_sweden", false) +asset.require("./colorlayers/mola_hrsc_sweden", false) +asset.require("./colorlayers/themis_ir_day_sweden", false) +asset.require("./colorlayers/themis_ir_night_sweden", false) +asset.require("./colorlayers/ctx_mosaic_sweden", false) + +asset.require("./heightlayers/mola_sweden", false) + + + +asset.meta = { + Name = "Default Mars Layers (Sweden)", + Description = [[Default Mars layers are: Mars texture, CTX Blended, HiRISE, + HiRISE Local Set, MOC WA Color, Viking MDIM, MOLA Pseudo Color, MOLA HRSC, + Themis IR Day, Themis IR Night, CTX Mosaic, MDEM200M (3D), HiRISE Local Set DEM (3D), + Mola Elevation (3D), Tile Indicies, and Size Reference. + + Layers only loaded from the Sweden server + ]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/mars/layers/utah_layers.asset b/data/assets/scene/solarsystem/planets/mars/layers/utah_layers.asset new file mode 100644 index 0000000000..32eb5201b1 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/mars/layers/utah_layers.asset @@ -0,0 +1,26 @@ +asset.require("./base_layers") +asset.require("./colorlayers/moc_wa_color_utah", asset.enabled) +asset.require("./colorlayers/viking_mdim_utah", false) +asset.require("./colorlayers/mola_pseudo_color_utah", false) +asset.require("./colorlayers/mola_hrsc_utah", false) +asset.require("./colorlayers/themis_ir_day_utah", false) +asset.require("./colorlayers/themis_ir_night_utah", false) +asset.require("./colorlayers/ctx_mosaic_utah", false) + +asset.require("./heightlayers/mola_utah", false) + + + +asset.meta = { + Name = "Default Mars Layers (Utah)", + Description = [[Default Mars layers are: Mars texture, CTX Blended, HiRISE, + HiRISE Local Set, MOC WA Color, Viking MDIM, MOLA Pseudo Color, MOLA HRSC, + Themis IR Day, Themis IR Night, CTX Mosaic, MDEM200M (3D), HiRISE Local Set DEM (3D), + Mola Elevation (3D), Tile Indicies, and Size Reference. + + Layers only loaded from the Utah server + ]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/mars/mars.asset b/data/assets/scene/solarsystem/planets/mars/mars.asset index 1ae86ee846..f6b0ecf0e9 100644 --- a/data/assets/scene/solarsystem/planets/mars/mars.asset +++ b/data/assets/scene/solarsystem/planets/mars/mars.asset @@ -1,10 +1,10 @@ -asset.require("spice/base") asset.require("./trail") local transforms = asset.require("./transforms") +local coreKernels = asset.require("spice/core") -local labelsPath = asset.syncedResource({ +local labelsPath = asset.resource({ Name = "Mars Labels", Type = "HttpSynchronization", Identifier = "mars_labels", @@ -21,20 +21,18 @@ local Mars = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "MARS", - Observer = "MARS BARYCENTER" + Target = coreKernels.ID.Mars, + Observer = coreKernels.ID.MarsBarycenter }, Rotation = { Type = "SpiceRotation", - SourceFrame = "IAU_MARS", - DestinationFrame = "GALACTIC" + SourceFrame = coreKernels.Frame.Mars, + DestinationFrame = coreKernels.Frame.Galactic } }, Renderable = { Type = "RenderableGlobe", Radii = MarsRadii, - SegmentsPerPatch = 90, - Layers = {}, Labels = { Enabled = false, FileName = labelsPath .. "mars.labels", @@ -60,8 +58,8 @@ local MarsLabel = { Identifier = "MarsLabel", Parent = Mars.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Mars", FontSize = 70.0, Size = 8.50, @@ -105,7 +103,6 @@ asset.export(MarsLabel) asset.meta = { Name = "Mars", - Version = "1.1", Description = "Mars globe, and main globe label", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/mars/moons/deimos.asset b/data/assets/scene/solarsystem/planets/mars/moons/deimos.asset index b1b383ab17..e35ac1c93d 100644 --- a/data/assets/scene/solarsystem/planets/mars/moons/deimos.asset +++ b/data/assets/scene/solarsystem/planets/mars/moons/deimos.asset @@ -1,38 +1,33 @@ local transforms = asset.require("scene/solarsystem/planets/mars/transforms") local sunTransforms = asset.require("scene/solarsystem/sun/transforms") -local sun = asset.require("scene/solarsystem/sun/sun") +local sun = asset.require("scene/solarsystem/sun/transforms") +local kernels = asset.require("./kernels") +local coreKernels = asset.require("spice/core") -local model = asset.syncedResource({ +local model = asset.resource({ Name = "Deimos Model", Type = "HttpSynchronization", Identifier = "deimos_model", Version = 1 }) -local kernels = asset.syncedResource({ - Name = "Mars Spice Kernels", - Type = "HttpSynchronization", - Identifier = "mars_kernels", - Version = 1 -}) - local Deimos = { Identifier = "Deimos", Parent = transforms.MarsBarycenter.Identifier, InteractionSphere = 8000, Transform = { - Rotation = { - Type = "SpiceRotation", - SourceFrame = "IAU_DEIMOS", - DestinationFrame = "GALACTIC" - }, Translation = { Type = "SpiceTranslation", - Target = "DEIMOS", - Observer = "MARS BARYCENTER" + Target = kernels.ID.Deimos, + Observer = coreKernels.ID.MarsBarycenter + }, + Rotation = { + Type = "SpiceRotation", + SourceFrame = kernels.Frame.Deimos, + DestinationFrame = coreKernels.Frame.Galactic } }, Renderable = { @@ -62,8 +57,8 @@ local DeimosTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "DEIMOS", - Observer = "MARS BARYCENTER" + Target = kernels.ID.Deimos, + Observer = coreKernels.ID.MarsBarycenter }, Color = { 1.0, 0.605, 0.420 }, Period = 1.263, @@ -81,8 +76,8 @@ local DeimosLabel = { Identifier = "DeimosLabel", Parent = Deimos.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Deimos", FontSize = 70.0, Size = 5.0, @@ -104,8 +99,6 @@ local DeimosLabel = { asset.onInitialize(function() - openspace.spice.loadKernel(kernels .. "mar097.bsp") - openspace.addSceneGraphNode(Deimos) openspace.addSceneGraphNode(DeimosTrail) openspace.addSceneGraphNode(DeimosLabel) @@ -115,8 +108,6 @@ asset.onDeinitialize(function() openspace.removeSceneGraphNode(DeimosLabel) openspace.removeSceneGraphNode(DeimosTrail) openspace.removeSceneGraphNode(Deimos) - - openspace.spice.unloadKernel(kernels .. "mar097.bsp") end) asset.export(Deimos) @@ -126,7 +117,6 @@ asset.export(DeimosTrail) asset.meta = { Name = "Deimos", - Version = "1.0", Description = "RenderableModel and Trail for Deimos", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/mars/moons/deimos_globe.asset b/data/assets/scene/solarsystem/planets/mars/moons/deimos_globe.asset index ceb6eaa5c4..0845c8547b 100644 --- a/data/assets/scene/solarsystem/planets/mars/moons/deimos_globe.asset +++ b/data/assets/scene/solarsystem/planets/mars/moons/deimos_globe.asset @@ -1,37 +1,29 @@ local transforms = asset.require("../transforms") +local kernels = asset.require("./kernels") +local coreKernels = asset.require("spice/core") -local kernels = asset.syncedResource({ - Name = "Mars Spice Kernels", - Type = "HttpSynchronization", - Identifier = "mars_kernels", - Version = 1 -}) - - local DeimosGlobe = { Identifier = "Deimos_Globe", Parent = transforms.MarsBarycenter.Identifier, Transform = { - Rotation = { - Type = "SpiceRotation", - SourceFrame = "IAU_DEIMOS", - DestinationFrame = "GALACTIC" - }, Translation = { Type = "SpiceTranslation", - Target = "DEIMOS", - Observer = "MARS BARYCENTER" + Target = kernels.ID.Deimos, + Observer = coreKernels.ID.MarsBarycenter + }, + Rotation = { + Type = "SpiceRotation", + SourceFrame = kernels.Frame.Deimos, + DestinationFrame = coreKernels.Frame.Galactic } }, Renderable = { Type = "RenderableGlobe", - Radii = { 7500, 6100, 5200 }, ---Radius source ---https://sci.esa.int/documents/35171/36506/1567259108230-5-ESLAB46-Day2-Rosenblatt.pdf - SegmentsPerPatch = 90, - Layers = {} + -- Radius source + -- https://sci.esa.int/documents/35171/36506/1567259108230-5-ESLAB46-Day2-Rosenblatt.pdf + Radii = { 7500, 6100, 5200 } }, Tag = { "moon_solarSystem", "moon_terrestrial", "moon_mars" }, GUI = { @@ -43,15 +35,11 @@ local DeimosGlobe = { asset.onInitialize(function() - openspace.spice.loadKernel(kernels .. "mar097.bsp") - openspace.addSceneGraphNode(DeimosGlobe) end) asset.onDeinitialize(function() openspace.removeSceneGraphNode(DeimosGlobe) - - openspace.spice.unloadKernel(kernels .. "mar097.bsp") end) asset.export(DeimosGlobe) @@ -60,7 +48,6 @@ asset.export(DeimosGlobe) asset.meta = { Name = "Deimos Globe", - Version = "1.0", Description = "RenderableGlobe for Deimos", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/mars/moons/kernels.asset b/data/assets/scene/solarsystem/planets/mars/moons/kernels.asset new file mode 100644 index 0000000000..d090f96459 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/mars/moons/kernels.asset @@ -0,0 +1,33 @@ +local coreKernels = asset.require("spice/core") + + + +local kernels = asset.resource({ + Name = "Mars Spice Kernels", + Type = "HttpSynchronization", + Identifier = "mars_kernels", + Version = 1 +}) + + +local ID = { + Deimos = "DEIMOS", + Phobos = "PHOBOS" +} + +local Frame = { + Deimos = coreKernels.Frame.Deimos, + Phobos = coreKernels.Frame.Phobos +} + + +asset.onInitialize(function() + openspace.spice.loadKernel(kernels .. "mar097.bsp") +end) + +asset.onDeinitialize(function() + openspace.spice.unloadKernel(kernels .. "mar097.bsp") +end) + +asset.export("ID", ID) +asset.export("Frame", Frame) diff --git a/data/assets/scene/solarsystem/planets/mars/moons/layers/colorlayers/deimos_viking.asset b/data/assets/scene/solarsystem/planets/mars/moons/layers/colorlayers/deimos_viking.asset index 51998ab9a5..71acfd51f7 100644 --- a/data/assets/scene/solarsystem/planets/mars/moons/layers/colorlayers/deimos_viking.asset +++ b/data/assets/scene/solarsystem/planets/mars/moons/layers/colorlayers/deimos_viking.asset @@ -6,6 +6,7 @@ local Layer = { Identifier = "Deimos_Global_Mosaic_USGS", Name = "Deimos Global Mosaic [USGS]", Enabled = asset.enabled, + ZIndex = 10, FilePath = "WMS:https://wms.wr.usgs.gov/cgi-bin/mapserv?map=/maps/mars/deimos_simp_cyl.map&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&LAYERS=Deimos_Simple_Cylindrical_Rasters&SRS=EPSG:4326&BBOX=-180,-90,360,90", Description = [[This Viking-based cylindrical map of Deimos was created by Philip Stooke with the assistance of Chris Jongkind and Megan Arntz. Control is based on a @@ -28,7 +29,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Deimos Global Mosaic [USGS]", - Version = "1.1", Author = "Philip Stooke/NASA", URL = "https://astrowebmaps.wr.usgs.gov/webmapatlas/Layers/maps.html", License = "NASA/PDS" diff --git a/data/assets/scene/solarsystem/planets/mars/moons/layers/colorlayers/phobos_mars_express.asset b/data/assets/scene/solarsystem/planets/mars/moons/layers/colorlayers/phobos_mars_express.asset new file mode 100644 index 0000000000..083b569074 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/mars/moons/layers/colorlayers/phobos_mars_express.asset @@ -0,0 +1,52 @@ +local globe = asset.require("../../phobos_globe") + + + +local maps = asset.resource({ + Name = "Phobos Maps", + Type = "HttpSynchronization", + Identifier = "phobos_maps", + Version = 1 +}) + + +local Layer = { + Identifier = "Mars_Express_HRSC_100m", + Name = "Mars Express HRCS 100m", + Enabled = asset.enabled, + ZIndex = 10, + FilePath = maps .. "mex_hrsc_100m_dem.vrt", + Description = [[Images from the European Space Agency's High Resolution Stereo Camera + (HRSC) aboard the Mars Express were used to obtain 3-dimensional coordinates of + surface points of Phobos. As currently the HRSC could not gain global coverage yet, + the data was complimented by Viking orbiter image data to be able to provide the + digital elevation model (DEM) globally (Willner et al., 2010). Resolution of this DEM + is 100 meters per pixel (m). + + The research leading to the data products has received funding from the European + Community's Seventh Framework Programme ([FP7/2007-2013]) under grant agreement number + 263466 for the FP7-ESPaCE program. + + Willner, K., Oberst, J., Hussmann, H., Giese, B., Hoffman, H., Matz, K.-D., + Roatsch, T., & Duxbury, T. (2010). Phobos control point network, rotation, and shape. + Earth and Planetary Science Letters, 294(3–4), 541-546. + https://doi.org/10.1016/j.epsl.2009.07.033]] +} + + +asset.onInitialize(function() + openspace.globebrowsing.addLayer(globe.Phobos_Globe.Identifier, "HeightLayers", Layer) +end) + +asset.onDeinitialize(function() + openspace.globebrowsing.deleteLayer(globe.Phobos_Globe.Identifier, "HeightLayers", Layer) +end) + + + +asset.meta = { + Name = "Phobos Mars Express HRSC DEM Global 100m", + Author = "OpenSpace Team", + URL = "https://astrogeology.usgs.gov/search/map/phobos_mars_express_hrsc_dem_global_100m", + License = "Please cite authors" +} diff --git a/data/assets/scene/solarsystem/planets/mars/moons/layers/colorlayers/phobos_viking.asset b/data/assets/scene/solarsystem/planets/mars/moons/layers/colorlayers/phobos_viking.asset index 7744845481..903484d6a3 100644 --- a/data/assets/scene/solarsystem/planets/mars/moons/layers/colorlayers/phobos_viking.asset +++ b/data/assets/scene/solarsystem/planets/mars/moons/layers/colorlayers/phobos_viking.asset @@ -2,12 +2,38 @@ local globe = asset.require("../../phobos_globe") +local maps = asset.resource({ + Name = "Phobos Maps", + Type = "HttpSynchronization", + Identifier = "phobos_maps", + Version = 1 +}) + + local Layer = { - Identifier = "Phobos_Global_Shaded_Relief_USGS", - Name = "Phobos Global Shaded Relief [USGS]", + Identifier = "Viking_5m", + Name = "Viking 5m", Enabled = asset.enabled, - FilePath = "WMS:https://wms.wr.usgs.gov/cgi-bin/mapserv?map=/maps/mars/phobos_simp_cyl.map&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&LAYERS=Phobos_Simple_Cylindrical_Rasters&SRS=EPSG:4326&BBOX=-180,-90,360,90", - Description = "Viking-base Phobos shaded relief created by USGS" + ZIndex = 10, + FilePath = maps .. "viking_5m.vrt", + Description = [[This mosaic of Phobos was created by compiling updated versions of + Viking high-resolution mosaics and selecting the best high-resolution images from + other spacecraft to construct an entirely new mosaic. The process of compiling this + mosaic significantly improved areas of poor control. Where images with reverse + lighting meet, artistic effects are necessary to create satisfactory appearance, but + this affects the appearance only and not the map geometry. This global mosaic has a + pixel resolution of five meters per pixel (m). + + This image was further color-enhanced based on data from the Mars Reconnaissance + Orbiter: https://www.planetary.org/space-images/color-view-of-phobos-from-mars-reconnaissance-orbiter#:~:text=The%20color%20view%20shows%20that + + References: + Stooke, P. (2012). Stooke Small Bodies Maps V2.0. MULTI-SA-MULTI-6-STOOKEMAPS-V2.0. + NASA Planetary Data System. https://sbn.psi.edu/pds/resource/stookemaps.html + + Simonelli, D. P., Thomas, P. C., Carcich, B. T., & Veverka, J. (1993). The generation + and use of numerical shape models for irregular solar system objects. Icarus, 103, + 49-61. https://doi.org/10.1006/icar.1993.1057]] } @@ -19,14 +45,12 @@ asset.onDeinitialize(function() openspace.globebrowsing.deleteLayer(globe.Phobos_Globe.Identifier, "ColorLayers", Layer) end) -asset.export("layer", Layer) - +asset.export(Layer) asset.meta = { - Name = "Phobos Global Shaded Relief [USGS]", - Version = "1.1", - Author = "USGS/NASA", - URL = "https://astrowebmaps.wr.usgs.gov/webmapatlas/Layers/maps.html", - License = "NASA/PDS" + Name = "Phobos Viking Global Mosaic 5m", + Author = "OpenSpace Team", + URL = "https://astrogeology.usgs.gov/search/map/phobos_viking_global_mosaic_5m", + License = "Please cite authors" } diff --git a/data/assets/scene/solarsystem/planets/mars/moons/phobos.asset b/data/assets/scene/solarsystem/planets/mars/moons/phobos.asset index c26d2a2ad5..8babafe4ea 100644 --- a/data/assets/scene/solarsystem/planets/mars/moons/phobos.asset +++ b/data/assets/scene/solarsystem/planets/mars/moons/phobos.asset @@ -1,38 +1,33 @@ local transforms = asset.require("scene/solarsystem/planets/mars/transforms") local sunTransforms = asset.require("scene/solarsystem/sun/transforms") -local sun = asset.require("scene/solarsystem/sun/sun") +local sun = asset.require("scene/solarsystem/sun/transforms") +local kernels = asset.require("./kernels") +local coreKernels = asset.require("spice/core") -local model = asset.syncedResource({ +local model = asset.resource({ Name = "Phobos Model", Type = "HttpSynchronization", Identifier = "phobos_model", Version = 1 }) -local kernels = asset.syncedResource({ - Name = "Mars Spice Kernels", - Type = "HttpSynchronization", - Identifier = "mars_kernels", - Version = 1 -}) - local Phobos = { Identifier = "Phobos", Parent = transforms.MarsBarycenter.Identifier, InteractionSphere = 15000, Transform = { - Rotation = { - Type = "SpiceRotation", - SourceFrame = "IAU_PHOBOS", - DestinationFrame = "GALACTIC" - }, Translation = { Type = "SpiceTranslation", - Target = "PHOBOS", - Observer = "MARS BARYCENTER" + Target = kernels.ID.Phobos, + Observer = coreKernels.ID.MarsBarycenter + }, + Rotation = { + Type = "SpiceRotation", + SourceFrame = kernels.Frame.Phobos, + DestinationFrame = coreKernels.Frame.Galactic } }, Renderable = { @@ -62,8 +57,8 @@ local PhobosTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "PHOBOS", - Observer = "MARS BARYCENTER" + Target = kernels.ID.Phobos, + Observer = coreKernels.ID.MarsBarycenter }, Color = { 1.0, 0.605, 0.420 }, Period = 0.31891023, @@ -81,8 +76,8 @@ local PhobosLabel = { Identifier = "PhobosLabel", Parent = Phobos.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Phobos", FontSize = 70.0, Size = 5.0, @@ -104,8 +99,6 @@ local PhobosLabel = { asset.onInitialize(function() - openspace.spice.loadKernel(kernels .. "mar097.bsp") - openspace.addSceneGraphNode(Phobos) openspace.addSceneGraphNode(PhobosTrail) openspace.addSceneGraphNode(PhobosLabel) @@ -115,8 +108,6 @@ asset.onDeinitialize(function() openspace.removeSceneGraphNode(PhobosLabel) openspace.removeSceneGraphNode(PhobosTrail) openspace.removeSceneGraphNode(Phobos) - - openspace.spice.unloadKernel(kernels .. "mar097.bsp") end) asset.export(Phobos) @@ -126,7 +117,6 @@ asset.export(PhobosTrail) asset.meta = { Name = "Phobos", - Version = "1.0", Description = "RenderableModel and Trail for Phobos", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/mars/moons/phobos_globe.asset b/data/assets/scene/solarsystem/planets/mars/moons/phobos_globe.asset index e8bfc26a0d..3b32e1eb5b 100644 --- a/data/assets/scene/solarsystem/planets/mars/moons/phobos_globe.asset +++ b/data/assets/scene/solarsystem/planets/mars/moons/phobos_globe.asset @@ -1,37 +1,29 @@ local transforms = asset.require("../transforms") +local kernels = asset.require("./kernels") +local coreKernels = asset.require("spice/core") -local kernels = asset.syncedResource({ - Name = "Mars Spice Kernels", - Type = "HttpSynchronization", - Identifier = "mars_kernels", - Version = 1 -}) - - local PhobosGlobe = { Identifier = "Phobos_Globe", Parent = transforms.MarsBarycenter.Identifier, Transform = { - Rotation = { - Type = "SpiceRotation", - SourceFrame = "IAU_PHOBOS", - DestinationFrame = "GALACTIC" - }, Translation = { Type = "SpiceTranslation", - Target = "PHOBOS", - Observer = "MARS BARYCENTER" - } + Target = kernels.ID.Phobos, + Observer = coreKernels.ID.MarsBarycenter + }, + Rotation = { + Type = "SpiceRotation", + SourceFrame = kernels.Frame.Phobos, + DestinationFrame = coreKernels.Frame.Galactic + }, }, Renderable = { Type = "RenderableGlobe", - Radii = { 13030, 11400, 9140 }, ---Radius source ---https://naif.jpl.nasa.gov/pub/naif/generic_kernels/dsk/satellites/willner_etal_phobos.pdf - SegmentsPerPatch = 90, - Layers = {} + -- Radius source + -- https://naif.jpl.nasa.gov/pub/naif/generic_kernels/dsk/satellites/willner_etal_phobos.pdf + Radii = { 13030, 11400, 9140 } }, Tag = { "moon_solarSystem", "moon_terrestrial", "moon_mars" }, GUI = { @@ -43,15 +35,11 @@ local PhobosGlobe = { asset.onInitialize(function() - openspace.spice.loadKernel(kernels .. "mar097.bsp") - openspace.addSceneGraphNode(PhobosGlobe) end) asset.onDeinitialize(function() openspace.removeSceneGraphNode(PhobosGlobe) - - openspace.spice.unloadKernel(kernels .. "mar097.bsp") end) asset.export(PhobosGlobe) @@ -60,7 +48,6 @@ asset.export(PhobosGlobe) asset.meta = { Name = "Phobos Globe", - Version = "1.0", Description = "RenderableGlobe for Phobos", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/mars/trail.asset b/data/assets/scene/solarsystem/planets/mars/trail.asset index 2a8c8785b8..1a602c1dcb 100644 --- a/data/assets/scene/solarsystem/planets/mars/trail.asset +++ b/data/assets/scene/solarsystem/planets/mars/trail.asset @@ -1,5 +1,5 @@ -asset.require("spice/base") local transforms = asset.require("scene/solarsystem/sun/transforms") +local coreKernels = asset.require("spice/core") @@ -10,8 +10,8 @@ local MarsTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "MARS", - Observer = "SSB" + Target = coreKernels.ID.Mars, + Observer = coreKernels.ID.SolarSystemBarycenter }, Color = { 0.814, 0.305, 0.220 }, Period = 686.973, @@ -21,8 +21,7 @@ local MarsTrail = { GUI = { Name = "Mars Trail", Path = "/Solar System/Planets/Mars", - Description = [[Trail of Mars as observed by the Sun. Data from NASA Spice (see - base spice asset)]] + Description = "Trail of Mars as observed by the Sun" } } @@ -41,7 +40,6 @@ asset.export(MarsTrail) asset.meta = { Name = "Mars Trail", - Version = "1.1", Description = "Main Mars trail from SPICE", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/mars/trail_barycenter.asset b/data/assets/scene/solarsystem/planets/mars/trail_barycenter.asset index 325745d6ed..c997945b12 100644 --- a/data/assets/scene/solarsystem/planets/mars/trail_barycenter.asset +++ b/data/assets/scene/solarsystem/planets/mars/trail_barycenter.asset @@ -1,5 +1,5 @@ -asset.require("spice/base") local transforms = asset.require("scene/solarsystem/sun/transforms") +local coreKernels = asset.require("spice/core") @@ -8,22 +8,21 @@ local MarsBarycenterTrail = { Parent = transforms.SolarSystemBarycenter.Identifier, Renderable = { Type = "RenderableTrailOrbit", + Enabled = false, Translation = { Type = "SpiceTranslation", - Target = "MARS BARYCENTER", - Observer = "SSB" + Target = coreKernels.ID.MarsBarycenter, + Observer = coreKernels.ID.SolarSystemBarycenter }, Color = { 0.814, 0.305, 0.220 }, Period = 686.973, - Resolution = 1000, - Enabled = false + Resolution = 1000 }, Tag = { "planetTrail_solarSystem", "planetTrail_terrestrial" }, GUI = { Name = "Mars Barycenter Trail", Path = "/Solar System/Planets/Mars", - Description = [[Trail of Mars' Barycenter as observed by the Sun. Data from NASA Spice - (see base spice asset)]] + Description = "Trail of Mars' Barycenter as observed by the Sun" } } @@ -42,7 +41,6 @@ asset.export(MarsBarycenterTrail) asset.meta = { Name = "Mars Trail", - Version = "1.1", Description = "Barycenter Mars trail from SPICE", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/mars/trail_earth.asset b/data/assets/scene/solarsystem/planets/mars/trail_earth.asset index 0885f3b79d..be2f3923e3 100644 --- a/data/assets/scene/solarsystem/planets/mars/trail_earth.asset +++ b/data/assets/scene/solarsystem/planets/mars/trail_earth.asset @@ -1,5 +1,5 @@ -asset.require("spice/base") local transforms = asset.require("scene/solarsystem/planets/earth/transforms") +local coreKernels = asset.require("spice/core") @@ -8,15 +8,15 @@ local MarsTrailEarth = { Parent = transforms.EarthBarycenter.Identifier, Renderable = { Type = "RenderableTrailOrbit", + Enabled = false, Translation = { Type = "SpiceTranslation", - Target = "MARS", - Observer = "EARTH" + Target = coreKernels.ID.Mars, + Observer = coreKernels.ID.Earth }, - Color = { 1.0, 0.5, 0.2 }, - Period = 224.695, - Resolution = 1000, - Enabled = false + Color = { 0.814, 0.305, 0.220 }, + Period = 5990.0, + Resolution = 1000 }, Tag = { "planetTrail_solarSystem_alt", "planetTrail_terrestrial_alt" }, GUI = { @@ -41,9 +41,7 @@ asset.export(MarsTrailEarth) asset.meta = { Name = "Mars Trail from Earth", - Version = "1.1", - Description = [[Trail of Mars, parented to Earth with Earth as the SPICE observer. Data - from NASA SPICE (see base spice asset)]], + Description = "Trail of Mars, parented to Earth with Earth as the SPICE observer", Author = "OpenSpace Team", URL = "http://openspaceproject.com", License = "MIT license" diff --git a/data/assets/scene/solarsystem/planets/mars/transforms.asset b/data/assets/scene/solarsystem/planets/mars/transforms.asset index d17172c11d..8af3239f34 100644 --- a/data/assets/scene/solarsystem/planets/mars/transforms.asset +++ b/data/assets/scene/solarsystem/planets/mars/transforms.asset @@ -1,5 +1,5 @@ -asset.require("spice/base") local transforms = asset.require("scene/solarsystem/sun/transforms") +local coreKernels = asset.require("spice/core") @@ -9,15 +9,14 @@ local MarsBarycenter = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "MARS BARYCENTER", - Observer = "SSB" + Target = coreKernels.ID.MarsBarycenter, + Observer = coreKernels.ID.SolarSystemBarycenter } }, GUI = { Name = "Mars Barycenter", Path = "/Solar System/Planets/Mars", - Hidden = true, - Description = "SPICE Translation for targeting Mars Barycenter" + Hidden = true } } @@ -36,7 +35,6 @@ asset.export(MarsBarycenter) asset.meta = { Name = "Mars Transforms", - Version = "1.1", Description = "Transform with position for Mars", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/mercury/default_layers.asset b/data/assets/scene/solarsystem/planets/mercury/default_layers.asset index 30aaccf7b7..d85dde8778 100644 --- a/data/assets/scene/solarsystem/planets/mercury/default_layers.asset +++ b/data/assets/scene/solarsystem/planets/mercury/default_layers.asset @@ -1,56 +1,19 @@ -asset.require("./layers/colorlayers/messenger_mdis_utah", false) -asset.require("./layers/colorlayers/messenger_mdis_sweden", false) -asset.require("./layers/colorlayers/messenger_mdis_newyork", false) - -asset.require("./layers/colorlayers/messenger_mosaic_utah", false) -asset.require("./layers/colorlayers/messenger_mosaic_sweden", false) -asset.require("./layers/colorlayers/messenger_mosaic_newyork", false) - -asset.require("./layers/colorlayers/messenger_mosaic2_utah", false) -asset.require("./layers/colorlayers/messenger_mosaic2_sweden", false) -asset.require("./layers/colorlayers/messenger_mosaic2_newyork", false) - -asset.require("./layers/colorlayers/messenger_bdr_utah", true) -asset.require("./layers/colorlayers/messenger_bdr_sweden", false) -asset.require("./layers/colorlayers/messenger_bdr_newyork", false) - -asset.require("./layers/colorlayers/messenger_mdr_utah", false) - -asset.require("./layers/colorlayers/messenger_mp3_utah", false) - -asset.require("./layers/colorlayers/messenger_hie_utah", false) -asset.require("./layers/colorlayers/messenger_hie_sweden", false) -asset.require("./layers/colorlayers/messenger_hie_newyork", false) - -asset.require("./layers/colorlayers/messenger_hiw_utah", false) -asset.require("./layers/colorlayers/messenger_hiw_sweden", false) -asset.require("./layers/colorlayers/messenger_hiw_newyork", false) - -asset.require("./layers/colorlayers/messenger_loi_utah", false) -asset.require("./layers/colorlayers/messenger_loi_sweden", false) -asset.require("./layers/colorlayers/messenger_loi_newyork", false) - -asset.require("./layers/colorlayers/messenger_shade_utah", false) -asset.require("./layers/colorlayers/messenger_shade_sweden", false) -asset.require("./layers/colorlayers/messenger_shade_newyork", false) - -asset.require("./layers/colorlayers/alsimap_02122015", false) -asset.require("./layers/colorlayers/casimap_02122015", false) -asset.require("./layers/colorlayers/fesimap_02122015", false) -asset.require("./layers/colorlayers/mgsimap_02122015", false) -asset.require("./layers/colorlayers/ssimap_02122015", false) - -asset.require("./layers/heightlayers/messenger_dem_utah", true) +asset.require("./layers/base_layers", true) +asset.require("./layers/utah_layers", true) +asset.require("./layers/sweden_layers", false) +asset.require("./layers/newyork_layers", false) asset.meta = { Name = "Default Mercury Layers", - Version = "1.0", - Description = [[Default Mercury layers are: Messenger MDIS, Messenger Mosaic2, - Messenger BDR, Messenger MDR, Messenger MP3, Messenger Hie, Messenger Hiw, - Messenger LOI, Messenger SHADE, Aluminum Abundance, Calcium Abundance, Iron - Abundance, Magnesium Abundance, and Silicon Abundance]], + Description = [[Default Mercury layers are: Aluminium Abundance, Calcium Abundance, + Iron Abundance, Magnesium Abundance, Silicon Abundance, Messenger MDIS, + Messenger Mosaic, Messenger Mosaic2, Messenger BDR, Messenger HIE, Messenger HIW, + Messenger LOI, Messenger SHADE, Messenger MDR, Messenger MP3, and Messenger DEM (3D). + + Layers loaded from all servers + ]], Author = "OpenSpace Team", URL = "http://openspaceproject.com", License = "MIT license" diff --git a/data/assets/scene/solarsystem/planets/mercury/layers/base_layers.asset b/data/assets/scene/solarsystem/planets/mercury/layers/base_layers.asset new file mode 100644 index 0000000000..0310e5ce5c --- /dev/null +++ b/data/assets/scene/solarsystem/planets/mercury/layers/base_layers.asset @@ -0,0 +1,20 @@ +asset.require("./colorlayers/alsimap_02122015", false) +asset.require("./colorlayers/casimap_02122015", false) +asset.require("./colorlayers/fesimap_02122015", false) +asset.require("./colorlayers/mgsimap_02122015", false) +asset.require("./colorlayers/ssimap_02122015", false) + +-- Only the Utah server have this map, use it for now +asset.require("./heightlayers/messenger_dem_utah", asset.enabled) + + + +asset.meta = { + Name = "Base Mercury Layers", + Description = [[Base Mercury layers are: Aluminium Abundance, Calcium Abundance, + Iron Abundance, Magnesium Abundance, Silicon Abundance, and Messenger DEM (3D). + ]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/alsimap_02122015.asset b/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/alsimap_02122015.asset index d796c5e88a..67c9e0c788 100644 --- a/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/alsimap_02122015.asset +++ b/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/alsimap_02122015.asset @@ -2,7 +2,7 @@ local globe = asset.require("../../mercury") -local texturesPath = asset.syncedResource({ +local texturesPath = asset.resource({ Name = "Mercury Textures", Type = "HttpSynchronization", Identifier = "mercury_abundance_textures", @@ -14,8 +14,10 @@ local Layer = { Name = "Aluminium Abundance", Identifier = "alsimap_02122015", Enabled = asset.enabled, + ZIndex = 100, FilePath = texturesPath .. "alsimap_02122015.png", - BlendMode = "Multiply" + BlendMode = "Multiply", + CacheSettings = { Enabled = false } } @@ -33,7 +35,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Mercury Aluminium Abundance", - Version = "1.0", Description = "Aluminium Abundance layer for Mercury globe", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/casimap_02122015.asset b/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/casimap_02122015.asset index 91e6d3e67d..89ffa9f6e1 100644 --- a/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/casimap_02122015.asset +++ b/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/casimap_02122015.asset @@ -2,7 +2,7 @@ local globe = asset.require("../../mercury") -local texturesPath = asset.syncedResource({ +local texturesPath = asset.resource({ Name = "Mercury Textures", Type = "HttpSynchronization", Identifier = "mercury_abundance_textures", @@ -14,8 +14,10 @@ local Layer = { Name = "Calcium Abundance", Identifier = "casimap_02122015", Enabled = asset.enabled, + ZIndex = 100, FilePath = texturesPath .. "casimap_02122015.png", - BlendMode = "Multiply" + BlendMode = "Multiply", + CacheSettings = { Enabled = false } } @@ -33,7 +35,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Mercury Calcium Abundance", - Version = "1.0", Description = "Calcium Abundance layer for Mercury globe", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/fesimap_02122015.asset b/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/fesimap_02122015.asset index 30e3529429..5dff0edc23 100644 --- a/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/fesimap_02122015.asset +++ b/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/fesimap_02122015.asset @@ -2,7 +2,7 @@ local globe = asset.require("../../mercury") -local texturesPath = asset.syncedResource({ +local texturesPath = asset.resource({ Name = "Mercury Textures", Type = "HttpSynchronization", Identifier = "mercury_abundance_textures", @@ -14,8 +14,10 @@ local Layer = { Name = "Iron Abundance", Identifier = "fesimap_02122015", Enabled = asset.enabled, + ZIndex = 100, FilePath = texturesPath .. "fesimap_02122015.png", - BlendMode = "Multiply" + BlendMode = "Multiply", + CacheSettings = { Enabled = false } } @@ -33,7 +35,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Mercury Iron Abundance", - Version = "1.0", Description = "Iron Abundance layer for Mercury globe", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/mercury_texture.asset b/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/mercury_texture.asset index 9c507209f4..7a8a724054 100644 --- a/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/mercury_texture.asset +++ b/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/mercury_texture.asset @@ -2,7 +2,7 @@ local globe = asset.require("../../mercury") -local texturesPath = asset.syncedResource({ +local texturesPath = asset.resource({ Name = "Mercury Textures", Type = "HttpSynchronization", Identifier = "mercury_textures", @@ -14,9 +14,11 @@ local Layer = { Identifier = "Texture", FilePath = texturesPath .. "Mercury_MESSENGER_MDIS_Basemap_BDR_Mosaic_Global_32ppd.jpg", Enabled = asset.enabled, + ZIndex = 5, Description = [[The Map Projected Basemap RDR (BDR) data set consists of a global monochrome map of reflectance at a resolution of 256 pixels per degree (~166 m/p). - This is an offline version with lower resoution than the Messenger BDR layer.]] + This is an offline version with lower resoution than the Messenger BDR layer.]], + CacheSettings = { Enabled = false } } @@ -34,7 +36,6 @@ asset.export("Layer", Layer) asset.meta = { Name = "Mercury Texture", - Version = "1.0", Description = "Default texture for Mercury", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_bdr_newyork.asset b/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_bdr_newyork.asset index 72cbc12107..1b4244012b 100644 --- a/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_bdr_newyork.asset +++ b/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_bdr_newyork.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "Messenger_BDR_NewYork", Name = "Messenger BDR [New York]", Enabled = asset.enabled, - FilePath = asset.localResource("messenger_bdr_newyork.wms"), + ZIndex = 10, + FilePath = asset.resource("messenger_bdr_newyork.wms"), TilePixelSize = 360, Description = [[The Map Projected Basemap RDR (BDR) data set consists of a global monochrome map of reflectance at a resolution of 256 pixels per degree (~166 m/p). @@ -33,7 +34,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Messenger BDR [New York]", - Version = "1.0", Description = [[Mercury MESSENGER MDIS Global Basemap BDR 166m layer for Mercury globe. This map is hosted on the OpenSpace server in New York]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_bdr_sweden.asset b/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_bdr_sweden.asset index 3e6e91190b..9712f672e0 100644 --- a/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_bdr_sweden.asset +++ b/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_bdr_sweden.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "Messenger_BDR_Sweden", Name = "Messenger BDR [Sweden]", Enabled = asset.enabled, - FilePath = asset.localResource("messenger_bdr_sweden.wms"), + ZIndex = 10, + FilePath = asset.resource("messenger_bdr_sweden.wms"), TilePixelSize = 360, Description = [[The Map Projected Basemap RDR (BDR) data set consists of a global monochrome map of reflectance at a resolution of 256 pixels per degree (~166 m/p). @@ -33,7 +34,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Messenger BDR [Sweden]", - Version = "1.0", Description = [[Mercury MESSENGER MDIS Global Basemap BDR 166m layer for Mercury globe. This map is hosted on the OpenSpace server in Sweden]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_bdr_utah.asset b/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_bdr_utah.asset index cdceb42207..b9e4470bf5 100644 --- a/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_bdr_utah.asset +++ b/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_bdr_utah.asset @@ -6,16 +6,17 @@ local Layer = { Identifier = "Messenger_BDR_Utah", Name = "Messenger BDR [Utah]", Enabled = asset.enabled, - FilePath = asset.localResource("messenger_bdr_utah.wms"), + ZIndex = 10, + FilePath = asset.resource("messenger_bdr_utah.wms"), TilePixelSize = 360, Description = [[The Map Projected Basemap RDR (BDR) data set consists of a global monochrome map of reflectance at a resolution of 256 pixels per degree (~166 m/p). This edition, version 1, was released May 6, 2016 to the Planetary Data System (PDS) MESSENGER archive. It is compiled using NAC or WAC 750-nm images from any campaign that best fit the intended illumination geometry or low emission angle and incidence angle - near 74 degrees. It is controlled and projected onto a global digital elevation model. It uses - a Kasseleinin-Shkuratov photometric model, whose parameters are the same for any given - wavelength band across all MESSENGER end-of-mission map data products]] + near 74 degrees. It is controlled and projected onto a global digital elevation model. + It uses a Kasseleinin-Shkuratov photometric model, whose parameters are the same for any + given wavelength band across all MESSENGER end-of-mission map data products]] } @@ -33,7 +34,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Messenger BDR [Utah]", - Version = "1.0", Description = [[Mercury MESSENGER MDIS Global Basemap BDR 166m layer for Mercury globe. This map is hosted on the OpenSpace server in Utah]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_hie_newyork.asset b/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_hie_newyork.asset index 15453f5a02..7070e88206 100644 --- a/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_hie_newyork.asset +++ b/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_hie_newyork.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "Messenger_HIE_NewYork", Name = "Messenger HIE [New York]", Enabled = asset.enabled, - FilePath = asset.localResource("messenger_hie_newyork.wms") + ZIndex = 10, + FilePath = asset.resource("messenger_hie_newyork.wms") } @@ -24,7 +25,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Messenger HIE [New York]", - Version = "1.0", Description = [[Mercury HIE layer for Mercury globe. This map is hosted on the OpenSpace server in New York]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_hie_sweden.asset b/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_hie_sweden.asset index 15888a81ec..3de4ed5fa7 100644 --- a/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_hie_sweden.asset +++ b/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_hie_sweden.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "Messenger_HIE_Sweden", Name = "Messenger HIE [Sweden]", Enabled = asset.enabled, - FilePath = asset.localResource("messenger_hie_sweden.wms") + ZIndex = 10, + FilePath = asset.resource("messenger_hie_sweden.wms") } @@ -24,7 +25,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Messenger HIE [Sweden]", - Version = "1.0", Description = [[Mercury HIE layer for Mercury globe. This map is hosted on the OpenSpace server in Sweden]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_hie_utah.asset b/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_hie_utah.asset index 014e5b07b7..3b62ac07a1 100644 --- a/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_hie_utah.asset +++ b/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_hie_utah.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "Messenger_HIE_Utah", Name = "Messenger HIE [Utah]", Enabled = asset.enabled, - FilePath = asset.localResource("messenger_hie_utah.wms") + ZIndex = 10, + FilePath = asset.resource("messenger_hie_utah.wms") } @@ -24,7 +25,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Messenger HIE [Utah]", - Version = "1.0", Description = [[Mercury HIE layer for Mercury globe. This map is hosted on the OpenSpace server in Utah]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_hiw_newyork.asset b/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_hiw_newyork.asset index 93797ac107..bc55238484 100644 --- a/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_hiw_newyork.asset +++ b/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_hiw_newyork.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "Messenger_HIW_NewYork", Name = "Messenger HIW [New York]", Enabled = asset.enabled, - FilePath = asset.localResource("messenger_hiw_newyork.wms") + ZIndex = 10, + FilePath = asset.resource("messenger_hiw_newyork.wms") } @@ -24,7 +25,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Messenger HIW [New York]", - Version = "1.0", Description = [[Messenger HIW layer for Mercury globe. This map is hosted on the OpenSpace server in New York]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_hiw_sweden.asset b/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_hiw_sweden.asset index 9a70a4a628..273d3920dc 100644 --- a/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_hiw_sweden.asset +++ b/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_hiw_sweden.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "Messenger_HIW_Sweden", Name = "Messenger HIW [Sweden]", Enabled = asset.enabled, - FilePath = asset.localResource("messenger_hiw_sweden.wms") + ZIndex = 10, + FilePath = asset.resource("messenger_hiw_sweden.wms") } @@ -24,7 +25,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Messenger HIW [Sweden]", - Version = "1.0", Description = [[Messenger HIW layer for Mercury globe. This map is hosted on the OpenSpace server in Sweden]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_hiw_utah.asset b/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_hiw_utah.asset index 17eaaed762..5e06c458be 100644 --- a/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_hiw_utah.asset +++ b/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_hiw_utah.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "Messenger_HIW_Utah", Name = "Messenger HIW [Utah]", Enabled = asset.enabled, - FilePath = asset.localResource("messenger_hiw_utah.wms") + ZIndex = 10, + FilePath = asset.resource("messenger_hiw_utah.wms") } @@ -24,7 +25,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Messenger HIW [Utah]", - Version = "1.0", Description = [[Messenger HIW layer for Mercury globe. This map is hosted on the OpenSpace server in Utah]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_loi_newyork.asset b/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_loi_newyork.asset index 0d100c0d6a..812e82d2e7 100644 --- a/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_loi_newyork.asset +++ b/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_loi_newyork.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "Messenger_LOI_NewYork", Name = "Messenger LOI [New York]", Enabled = asset.enabled, - FilePath = asset.localResource("messenger_loi_newyork.wms") + ZIndex = 10, + FilePath = asset.resource("messenger_loi_newyork.wms") } @@ -24,7 +25,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Messenger LOI [New York]", - Version = "1.0", Description = [[Mercury LOI layer for Mercury globe. This map is hosted on the OpenSpace server in New York]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_loi_sweden.asset b/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_loi_sweden.asset index 30d3a78057..1d28184d6b 100644 --- a/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_loi_sweden.asset +++ b/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_loi_sweden.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "Messenger_LOI_Sweden", Name = "Messenger LOI [Sweden]", Enabled = asset.enabled, - FilePath = asset.localResource("messenger_loi_sweden.wms") + ZIndex = 10, + FilePath = asset.resource("messenger_loi_sweden.wms") } @@ -24,7 +25,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Messenger LOI [Sweden]", - Version = "1.0", Description = [[Mercury LOI layer for Mercury globe. This map is hosted on the OpenSpace server in Sweden]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_loi_utah.asset b/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_loi_utah.asset index 5675282a4a..f68d57b050 100644 --- a/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_loi_utah.asset +++ b/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_loi_utah.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "Messenger_LOI_Utah", Name = "Messenger LOI [Utah]", Enabled = asset.enabled, - FilePath = asset.localResource("messenger_loi_utah.wms") + ZIndex = 10, + FilePath = asset.resource("messenger_loi_utah.wms") } @@ -24,7 +25,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Messenger LOI [Utah]", - Version = "1.0", Description = [[Mercury LOI layer for Mercury globe. This map is hosted on the OpenSpace server in Utah]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_mdis_newyork.asset b/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_mdis_newyork.asset index 0487181d7e..9639abbdad 100644 --- a/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_mdis_newyork.asset +++ b/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_mdis_newyork.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "Messenger_MDIS_NewYork", Name = "Messenger MDIS [New York]", Enabled = asset.enabled, - FilePath = asset.localResource("messenger_mdis_newyork.wms"), + ZIndex = 10, + FilePath = asset.resource("messenger_mdis_newyork.wms"), Description = [[This May 2013 basemap is a combination of the following mosaics; (1) The 2013-05-10 version of the monochrome global mosaic, made from Applied Coherent Technology (ACT) Corporation tiles, (2) An average north polar mosaic from 90N to 82.5N, @@ -34,7 +35,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Messenger MDIS [New York]", - Version = "1.0", Description = [[Messenger MDIS layer for Mercury globe. This map is hosted on the OpenSpace server in New York]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_mdis_sweden.asset b/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_mdis_sweden.asset index 2237e17076..a64ab37aaa 100644 --- a/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_mdis_sweden.asset +++ b/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_mdis_sweden.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "Messenger_MDIS_Sweden", Name = "Messenger MDIS [Sweden]", Enabled = asset.enabled, - FilePath = asset.localResource("messenger_mdis_sweden.wms"), + ZIndex = 10, + FilePath = asset.resource("messenger_mdis_sweden.wms"), Description = [[This May 2013 basemap is a combination of the following mosaics; (1) The 2013-05-10 version of the monochrome global mosaic, made from Applied Coherent Technology (ACT) Corporation tiles, (2) An average north polar mosaic from 90N to 82.5N, @@ -34,7 +35,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Messenger MDIS [Sweden]", - Version = "1.0", Description = [[Messenger MDIS layer for Mercury globe. This map is hosted on the OpenSpace server in Sweden]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_mdis_utah.asset b/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_mdis_utah.asset index 67b6009903..15edb70baf 100644 --- a/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_mdis_utah.asset +++ b/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_mdis_utah.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "Messenger_MDIS_Utah", Name = "Messenger MDIS [Utah]", Enabled = asset.enabled, - FilePath = asset.localResource("messenger_mdis_utah.wms"), + ZIndex = 10, + FilePath = asset.resource("messenger_mdis_utah.wms"), Description = [[This May 2013 basemap is a combination of the following mosaics; (1) The 2013-05-10 version of the monochrome global mosaic, made from Applied Coherent Technology (ACT) Corporation tiles, (2) An average north polar mosaic from 90N to 82.5N, @@ -34,7 +35,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Messenger MDIS [Utah]", - Version = "1.0", Description = [[Messenger MDIS layer for Mercury globe. This map is hosted on the OpenSpace server in Utah]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_mdr_utah.asset b/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_mdr_utah.asset index 2dfcb6222b..68d6d4dd7a 100644 --- a/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_mdr_utah.asset +++ b/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_mdr_utah.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "Messenger_MDR_Utah", Name = "Messenger MDR [Utah]", Enabled = asset.enabled, - FilePath = asset.localResource("messenger_mdr_utah.wms") + ZIndex = 10, + FilePath = asset.resource("messenger_mdr_utah.wms") } @@ -24,7 +25,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Messenger MDR [Utah]", - Version = "1.0", Description = [[Mercury MDR layer for Mercury globe. This map is hosted on the OpenSpace server in Utah]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_mosaic2_newyork.asset b/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_mosaic2_newyork.asset index 6418f9a6c6..7d0778d763 100644 --- a/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_mosaic2_newyork.asset +++ b/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_mosaic2_newyork.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "Messenger_Mosaic2_NewYork", Name = "Messenger Mosaic2 [New York]", Enabled = asset.enabled, - FilePath = asset.localResource("messenger_mosaic2_newyork.wms") + ZIndex = 20, + FilePath = asset.resource("messenger_mosaic2_newyork.wms") } @@ -24,7 +25,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Messenger Mosaic2 [New York]", - Version = "1.0", Description = [[Mercury Messenger Mosaic2 layer for Mercury globe. This map is hosted on the OpenSpace server in New York]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_mosaic2_sweden.asset b/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_mosaic2_sweden.asset index d568d7a4ce..03fb9d10e4 100644 --- a/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_mosaic2_sweden.asset +++ b/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_mosaic2_sweden.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "Messenger_Mosaic2_Sweden", Name = "Messenger Mosaic2 [Sweden]", Enabled = asset.enabled, - FilePath = asset.localResource("messenger_mosaic2_sweden.wms") + ZIndex = 20, + FilePath = asset.resource("messenger_mosaic2_sweden.wms") } @@ -24,7 +25,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Messenger Mosaic2 [Sweden]", - Version = "1.0", Description = [[Mercury Messenger Mosaic2 layer for Mercury globe. This map is hosted on the OpenSpace server in Sweden]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_mosaic2_utah.asset b/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_mosaic2_utah.asset index f2e53e59fc..2bea5beefb 100644 --- a/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_mosaic2_utah.asset +++ b/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_mosaic2_utah.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "Messenger_Mosaic2_Utah", Name = "Messenger Mosaic2 [Utah]", Enabled = asset.enabled, - FilePath = asset.localResource("messenger_mosaic2_utah.wms") + ZIndex = 20, + FilePath = asset.resource("messenger_mosaic2_utah.wms") } @@ -24,7 +25,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Messenger Mosaic2 [Utah]", - Version = "1.0", Description = [[Mercury Messenger Mosaic2 layer for Mercury globe. This map is hosted on the OpenSpace server in Utah]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_mosaic_newyork.asset b/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_mosaic_newyork.asset index 7f71d22800..141e3c691c 100644 --- a/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_mosaic_newyork.asset +++ b/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_mosaic_newyork.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "Messenger_Mosaic_NewYork", Name = "Messenger Mosaic [New York]", Enabled = asset.enabled, - FilePath = asset.localResource("messenger_mosaic_newyork.wms") + ZIndex = 20, + FilePath = asset.resource("messenger_mosaic_newyork.wms") } @@ -24,7 +25,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Messenger Mosaic [New York]", - Version = "1.0", Description = [[Mercury Messenger Mosaic layer for Mercury globe. This map is hosted on the OpenSpace server in New York]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_mosaic_sweden.asset b/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_mosaic_sweden.asset index 9c4e6d6643..981b2ad42a 100644 --- a/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_mosaic_sweden.asset +++ b/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_mosaic_sweden.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "Messenger_Mosaic_Sweden", Name = "Messenger Mosaic [Sweden]", Enabled = asset.enabled, - FilePath = asset.localResource("messenger_mosaic_sweden.wms") + ZIndex = 20, + FilePath = asset.resource("messenger_mosaic_sweden.wms") } @@ -24,7 +25,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Messenger Mosaic [Sweden]", - Version = "1.0", Description = [[Mercury Messenger Mosaic layer for Mercury globe. This map is hosted on the OpenSpace server in Sweden]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_mosaic_utah.asset b/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_mosaic_utah.asset index 1c40788bc0..56f7c78d1c 100644 --- a/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_mosaic_utah.asset +++ b/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_mosaic_utah.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "Messenger_Mosaic_Utah", Name = "Messenger Mosaic [Utah]", Enabled = asset.enabled, - FilePath = asset.localResource("messenger_mosaic_utah.wms") + ZIndex = 20, + FilePath = asset.resource("messenger_mosaic_utah.wms") } @@ -24,7 +25,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Messenger Mosaic [Utah]", - Version = "1.0", Description = [[Mercury Messenger Mosaic layer for Mercury globe. This map is hosted on the OpenSpace server in Utah]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_mp3_utah.asset b/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_mp3_utah.asset index c1fdab7108..7a2099afa4 100644 --- a/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_mp3_utah.asset +++ b/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_mp3_utah.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "Messenger_MP3_Utah", Name = "Messenger MP3 [Utah]", Enabled = asset.enabled, - FilePath = asset.localResource("messenger_mp3_utah.wms") + ZIndex = 10, + FilePath = asset.resource("messenger_mp3_utah.wms") } @@ -24,7 +25,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Messenger MP3 [Utah]", - Version = "1.0", Description = [[Mercury Messenger MP3 layer for Mercury globe. This map is hosted on the OpenSpace server in Utah]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_shade_newyork.asset b/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_shade_newyork.asset index 2fbb37357e..6903160c4c 100644 --- a/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_shade_newyork.asset +++ b/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_shade_newyork.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "Messenger_SHADE_NewYork", Name = "Messenger SHADE [New York]", Enabled = asset.enabled, - FilePath = asset.localResource("messenger_shade_newyork.wms"), + ZIndex = 10, + FilePath = asset.resource("messenger_shade_newyork.wms"), Settings = { Gamma = 1.33, Multiplier = 1.15 @@ -29,7 +30,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Messenger SHADE [New York]", - Version = "1.0", Description = [[Mercury SHADE layer for Mercury globe. This map is hosted on the OpenSpace server in New York]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_shade_sweden.asset b/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_shade_sweden.asset index 61c8169d8e..ba51c9e0c8 100644 --- a/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_shade_sweden.asset +++ b/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_shade_sweden.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "Messenger_SHADE_Sweden", Name = "Messenger SHADE [Sweden]", Enabled = asset.enabled, - FilePath = asset.localResource("messenger_shade_sweden.wms"), + ZIndex = 100, + FilePath = asset.resource("messenger_shade_sweden.wms"), Settings = { Gamma = 1.33, Multiplier = 1.15 @@ -29,7 +30,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Messenger SHADE [Sweden]", - Version = "1.0", Description = [[Mercury SHADE layer for Mercury globe. This map is hosted on the OpenSpace server in Sweden]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_shade_utah.asset b/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_shade_utah.asset index d213ca77ea..9b9c6914d4 100644 --- a/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_shade_utah.asset +++ b/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/messenger_shade_utah.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "Messenger_SHADE_Utah", Name = "Messenger SHADE [Utah]", Enabled = asset.enabled, - FilePath = asset.localResource("messenger_shade_utah.wms"), + ZIndex = 100, + FilePath = asset.resource("messenger_shade_utah.wms"), Settings = { Gamma = 1.33, Multiplier = 1.15 @@ -29,7 +30,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Messenger SHADE [Utah]", - Version = "1.0", Description = [[Mercury Messenger SHADE layer for Mercury globe. This map is hosted on the OpenSpace server in Utah]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/mgsimap_02122015.asset b/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/mgsimap_02122015.asset index 1fa0e13d80..8bc88276ed 100644 --- a/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/mgsimap_02122015.asset +++ b/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/mgsimap_02122015.asset @@ -2,7 +2,7 @@ local globe = asset.require("../../mercury") -local texturesPath = asset.syncedResource({ +local texturesPath = asset.resource({ Name = "Mercury Textures", Type = "HttpSynchronization", Identifier = "mercury_abundance_textures", @@ -14,12 +14,14 @@ local Layer = { Name = "Magnesium Abundance", Identifier = "mgsimap_02122015", Enabled = asset.enabled, + ZIndex = 100, FilePath = texturesPath .. "mgsimap_02122015.png", Settings = { Gamma = 1.33, Multiplier = 1.15 }, - BlendMode = "Multiply" + BlendMode = "Multiply", + CacheSettings = { Enabled = false } } @@ -37,7 +39,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Mercury Magnesium Abundance", - Version = "1.0", Description = "Magnesium Abundance layer for Mercury globe", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/ssimap_02122015.asset b/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/ssimap_02122015.asset index 9ba29f0e9d..6973d2e05b 100644 --- a/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/ssimap_02122015.asset +++ b/data/assets/scene/solarsystem/planets/mercury/layers/colorlayers/ssimap_02122015.asset @@ -2,7 +2,7 @@ local globe = asset.require("../../mercury") -local texturesPath = asset.syncedResource({ +local texturesPath = asset.resource({ Name = "Mercury Textures", Type = "HttpSynchronization", Identifier = "mercury_abundance_textures", @@ -14,8 +14,10 @@ local Layer = { Name = "Silicon Abundance", Identifier = "ssimap_02122015", Enabled = asset.enabled, + ZIndex = 100, FilePath = texturesPath .. "ssimap_02122015.png", - BlendMode = "Multiply" + BlendMode = "Multiply", + CacheSettings = { Enabled = false } } @@ -33,7 +35,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Mercury Silicon Abundance", - Version = "1.0", Description = "Silicon Abundance layer for Mercury globe", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/mercury/layers/heightlayers/messenger_dem_utah.asset b/data/assets/scene/solarsystem/planets/mercury/layers/heightlayers/messenger_dem_utah.asset index 00a172afda..60649ccdc6 100644 --- a/data/assets/scene/solarsystem/planets/mercury/layers/heightlayers/messenger_dem_utah.asset +++ b/data/assets/scene/solarsystem/planets/mercury/layers/heightlayers/messenger_dem_utah.asset @@ -1,10 +1,13 @@ local globe = asset.require("../../mercury") + + local Layer = { Identifier = "Messenger_DEM_Utah", Name = "Messenger DEM [Utah]", Enabled = asset.enabled, - FilePath = asset.localResource("messenger_dem_utah.wms"), + ZIndex = 10, + FilePath = asset.resource("messenger_dem_utah.wms"), Settings = { Gamma = 1.59, Multiplier = 1.38 diff --git a/data/assets/scene/solarsystem/planets/mercury/layers/nasa-treks/MSGR_MDIS.asset b/data/assets/scene/solarsystem/planets/mercury/layers/nasa-treks/MSGR_MDIS.asset index b45e33a0cc..3dd4d0da94 100644 --- a/data/assets/scene/solarsystem/planets/mercury/layers/nasa-treks/MSGR_MDIS.asset +++ b/data/assets/scene/solarsystem/planets/mercury/layers/nasa-treks/MSGR_MDIS.asset @@ -6,27 +6,33 @@ local globeIdentifier = asset.require("scene/solarsystem//planets/mercury/mercury").Mercury.Identifier + + local treks_Mercury_Messenger_USGS_DEM_665m_v2_HillshadeColor = { Identifier = "Mercury_Messenger_USGS_DEM_665m_v2_HillshadeColor", Name = [[MSGR MDIS, ColorHillshade Global]], - FilePath = asset.localResource("MSGR_MDIS/ColorHillshade_Global.vrt"), + FilePath = asset.resource("MSGR_MDIS/ColorHillshade_Global.vrt"), + ZIndex = 50, Description = [[This is a colorized shaded-relief generated from the USGS Astrogeology Science Center's Mercury MESSENGER Global DEM 665m v2 data product providing global coverage of Mercury. This color hillshade was generated in ArcPro with the shaded-relief raster function. The resolution of the original DEM used to create this product is 64 pixels/degree (665 m/pixel). The control network used for registration contains tie points that are sample/line coordinates with geometric locations (derived from SPICE) that are automatically measured across the overlapping image areas. Elevation values are in meters and referred to a radius of 2439400m. The legend conveys the mapping colors to elevation values (meters).]] } local treks_Mercury_Messenger_USGS_DEM_665m_v2_Hillshade = { Identifier = "Mercury_Messenger_USGS_DEM_665m_v2_Hillshade", Name = [[MSGR MDIS, Hillshade Global]], - FilePath = asset.localResource("MSGR_MDIS/Hillshade_Global.vrt"), + FilePath = asset.resource("MSGR_MDIS/Hillshade_Global.vrt"), + ZIndex = 50, Description = [[This is a shaded-relief generated from the USGS Astrogeology Science Center's Mercury MESSENGER Global DEM 665m v2 data product providing global coverage of Mercury. This shaded-relief data product was generated in ArcPro with the hillshade raster function. The resolution of the original DEM used to create this product is 64 pixels/degree (665 m/pixel). The control network used for registration contains tie points that are sample/line coordinates with geometric locations (derived from SPICE) that are automatically measured across the overlapping image areas. Elevation values are in meters and referred to a radius of 2439400m.]] } local treks_Mercury_Messenger_USGS_DEM_665m_v2_SlopeColor = { Identifier = "Mercury_Messenger_USGS_DEM_665m_v2_SlopeColor", Name = [[MSGR MDIS, Slope Colorized Global]], - FilePath = asset.localResource("MSGR_MDIS/Slope_Colorized_Global.vrt"), + FilePath = asset.resource("MSGR_MDIS/Slope_Colorized_Global.vrt"), + ZIndex = 50, Description = [[This is a colorized slope data product of the USGS Astrogeology Science Center's Mercury MESSENGER Global DEM 665m v2 data product providing global coverage of Mercury. This slope data product was generated in ArcMap with the slope spatial analysis tool. The resolution of this product is 64 pixels/degree (665 m/pixel). The control network used for registration contains tie points that are sample/line coordinates with geometric locations (derived from SPICE) that are automatically measured across the overlapping image areas. Slope values are in degrees and referred to a radius of 2439400m. Slope values range from a minimum value of 0 to a maximum value of 71.0409. The legend conveys the mapping colors to slope values (degrees).]] } + asset.onInitialize(function() openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_Mercury_Messenger_USGS_DEM_665m_v2_HillshadeColor) openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_Mercury_Messenger_USGS_DEM_665m_v2_Hillshade) @@ -44,9 +50,9 @@ asset.export("Mercury_Messenger_USGS_DEM_665m_v2_Hillshade", treks_Mercury_Messe asset.export("Mercury_Messenger_USGS_DEM_665m_v2_SlopeColor", treks_Mercury_Messenger_USGS_DEM_665m_v2_SlopeColor) + asset.meta = { - Name = [[NASA Treks Layers for Mercury MSGR_MDIS], - Version = "1.0", + Name = [[NASA Treks Layers for Mercury MSGR_MDIS]], Author = "NASA/Treks", URL = "https://trek.nasa.gov/mercury", License = "NASA/Treks", diff --git a/data/assets/scene/solarsystem/planets/mercury/layers/nasa-treks/MSGR_MDIS_Mosaic.asset b/data/assets/scene/solarsystem/planets/mercury/layers/nasa-treks/MSGR_MDIS_Mosaic.asset index 36c95e6edb..28a8ff539e 100644 --- a/data/assets/scene/solarsystem/planets/mercury/layers/nasa-treks/MSGR_MDIS_Mosaic.asset +++ b/data/assets/scene/solarsystem/planets/mercury/layers/nasa-treks/MSGR_MDIS_Mosaic.asset @@ -6,76 +6,89 @@ local globeIdentifier = asset.require("scene/solarsystem//planets/mercury/mercury").Mercury.Identifier + + local treks_MSGR_Aksakov_Crater_Peak_Ring_Ortho_29m = { Identifier = "MSGR_Aksakov_Crater_Peak_Ring_Ortho_29m", Name = [[MSGR MDIS Mosaic, Aksakov Crater Peak Ring]], - FilePath = asset.localResource("MSGR_MDIS_Mosaic/Aksakov_Crater_Peak_Ring.vrt"), + FilePath = asset.resource("MSGR_MDIS_Mosaic/Aksakov_Crater_Peak_Ring.vrt"), + ZIndex = 50, Description = [[This is a visible orthoimage for the Aksakov Crater Peak Ring region on Mercury. This data product class of this data is observational and has been constructed to examine the visible and topographic settings of landforms around Mercury's hollows. Observations of topography, specifically the relationships of hollows to their surroundings, can be used to investigate hollow formation. The visible image has been orthorectified using a digital elevation model (DEM) created from Mercury Dual Imaging System (MDIS) stereo pair images. The DEM used to generate the orthoimage has been aligned and controlled to Mercury Laser Altimeter (MLA) individual elevation points. The orthoimage was then projected onto the DEM and exported. This ortho image has been generated at a resolution of 29m/pixel.]] } local treks_MSGR_near_Dali_Crater_Ortho_20m = { Identifier = "MSGR_near_Dali_Crater_Ortho_20m", Name = [[MSGR MDIS Mosaic, Crater near Dali Crater]], - FilePath = asset.localResource("MSGR_MDIS_Mosaic/Crater_near_Dali_Crater.vrt"), + FilePath = asset.resource("MSGR_MDIS_Mosaic/Crater_near_Dali_Crater.vrt"), + ZIndex = 50, Description = [[This is a visible orthoimage for the Crater Near Dali Crater region on Mercury. This data product class of this data is observational and has been constructed to examine the visible and topographic settings of landforms around Mercury's hollows. Observations of topography, specifically the relationships of hollows to their surroundings, can be used to investigate hollow formation. The visible image has been orthorectified using a digital elevation model (DEM) created from Mercury Dual Imaging System (MDIS) stereo pair images. The DEM used to generate the orthoimage has been aligned and controlled to Mercury Laser Altimeter (MLA) individual elevation points. The orthoimage was then projected onto the DEM and exported. This ortho image has been generated at a resolution of 20m/pixel.]] } local treks_MSGR_near_Geddes_Crater_Ortho_33m = { Identifier = "MSGR_near_Geddes_Crater_Ortho_33m", Name = [[MSGR MDIS Mosaic, Crater near Geddes Crater]], - FilePath = asset.localResource("MSGR_MDIS_Mosaic/Crater_near_Geddes_Crater.vrt"), + FilePath = asset.resource("MSGR_MDIS_Mosaic/Crater_near_Geddes_Crater.vrt"), + ZIndex = 50, Description = [[This is a visible orthoimage for the Crater Near Geddes Crater region on Mercury. This data product class of this data is observational and has been constructed to examine the visible and topographic settings of landforms around Mercury's hollows. Observations of topography, specifically the relationships of hollows to their surroundings, can be used to investigate hollow formation. The visible image has been orthorectified using a digital elevation model (DEM) created from Mercury Dual Imaging System (MDIS) stereo pair images. The DEM used to generate the orthoimage has been aligned and controlled to Mercury Laser Altimeter (MLA) individual elevation points. The orthoimage was then projected onto the DEM and exported. This ortho image has been generated at a resolution of 33m/pixel.]] } local treks_MSGR_Degas_Crater_Ortho_30m = { Identifier = "MSGR_Degas_Crater_Ortho_30m", Name = [[MSGR MDIS Mosaic, Degas Crater]], - FilePath = asset.localResource("MSGR_MDIS_Mosaic/Degas_Crater.vrt"), + FilePath = asset.resource("MSGR_MDIS_Mosaic/Degas_Crater.vrt"), + ZIndex = 50, Description = [[This is a visible orthoimage for the Degas Crater region on Mercury. This data product class of this data is observational and has been constructed to examine the visible and topographic settings of landforms around Mercury's hollows. Observations of topography, specifically the relationships of hollows to their surroundings, can be used to investigate hollow formation. The visible image has been orthorectified using a digital elevation model (DEM) created from Mercury Dual Imaging System (MDIS) stereo pair images. The DEM used to generate the orthoimage has been aligned and controlled to Mercury Laser Altimeter (MLA) individual elevation points. The orthoimage was then projected onto the DEM and exported. This ortho image has been generated at a resolution of 30m/pixel.]] } local treks_MSGR_Kertesz_Crater_Ortho_30m = { Identifier = "MSGR_Kertesz_Crater_Ortho_30m", Name = [[MSGR MDIS Mosaic, Kertesz Crater]], - FilePath = asset.localResource("MSGR_MDIS_Mosaic/Kertesz_Crater.vrt"), + FilePath = asset.resource("MSGR_MDIS_Mosaic/Kertesz_Crater.vrt"), + ZIndex = 50, Description = [[This is a visible orthoimage for the KerteszCrater region on Mercury. This data product class of this data is observational and has been constructed to examine the visible and topographic settings of landforms around Mercury's hollows. Observations of topography, specifically the relationships of hollows to their surroundings, can be used to investigate hollow formation. The visible image has been orthorectified using a digital elevation model (DEM) created from Mercury Dual Imaging System (MDIS) stereo pair images. The DEM used to generate the orthoimage has been aligned and controlled to Mercury Laser Altimeter (MLA) individual elevation points. The orthoimage was then projected onto the DEM and exported. This ortho image has been generated at a resolution of 30m/pixel.]] } local treks_MSGR_nw_Degas_Crater_Ortho_26m = { Identifier = "MSGR_nw_Degas_Crater_Ortho_26m", Name = [[MSGR MDIS Mosaic, North-West of Degas Crater]], - FilePath = asset.localResource("MSGR_MDIS_Mosaic/North-West_of_Degas_Crater.vrt"), + FilePath = asset.resource("MSGR_MDIS_Mosaic/North-West_of_Degas_Crater.vrt"), + ZIndex = 50, Description = [[This is a visible orthoimage for the region northwest of Degas Crater on Mercury. This data product class of this data is observational and has been constructed to examine the visible and topographic settings of landforms around Mercury's hollows. Observations of topography, specifically the relationships of hollows to their surroundings, can be used to investigate hollow formation. The visible image has been orthorectified using a digital elevation model (DEM) created from Mercury Dual Imaging System (MDIS) stereo pair images. The DEM used to generate the orthoimage has been aligned and controlled to Mercury Laser Altimeter (MLA) individual elevation points. The orthoimage was then projected onto the DEM and exported. This ortho image has been generated at a resolution of 26m/pixel.]] } local treks_MSGR_Praxiteles_Peak_Ring_Ortho_20m = { Identifier = "MSGR_Praxiteles_Peak_Ring_Ortho_20m", Name = [[MSGR MDIS Mosaic, Praxiteles Peak Ring]], - FilePath = asset.localResource("MSGR_MDIS_Mosaic/Praxiteles_Peak_Ring.vrt"), + FilePath = asset.resource("MSGR_MDIS_Mosaic/Praxiteles_Peak_Ring.vrt"), + ZIndex = 50, Description = [[This is a visible orthoimage for the Praxiteles Peak Ring region on Mercury. This data product class of this data is observational and has been constructed to examine the visible and topographic settings of landforms around Mercury's hollows. Observations of topography, specifically the relationships of hollows to their surroundings, can be used to investigate hollow formation. The visible image has been orthorectified using a digital elevation model (DEM) created from Mercury Dual Imaging System (MDIS) stereo pair images. The DEM used to generate the orthoimage has been aligned and controlled to Mercury Laser Altimeter (MLA) individual elevation points. The orthoimage was then projected onto the DEM and exported. This ortho image has been generated at a resolution of 20m/pixel.]] } local treks_MSGR_Raditladi_Crater_Ortho_40m = { Identifier = "MSGR_Raditladi_Crater_Ortho_40m", Name = [[MSGR MDIS Mosaic, Raditladi Crater]], - FilePath = asset.localResource("MSGR_MDIS_Mosaic/Raditladi_Crater.vrt"), + FilePath = asset.resource("MSGR_MDIS_Mosaic/Raditladi_Crater.vrt"), + ZIndex = 50, Description = [[This is a visible orthoimage for the Raditladi Crater region on Mercury. This data product class of this data is observational and has been constructed to examine the visible and topographic settings of landforms around Mercury's hollows. Observations of topography, specifically the relationships of hollows to their surroundings, can be used to investigate hollow formation. The visible image has been orthorectified using a digital elevation model (DEM) created from Mercury Dual Imaging System (MDIS) stereo pair images. The DEM used to generate the orthoimage has been aligned and controlled to Mercury Laser Altimeter (MLA) individual elevation points. The orthoimage was then projected onto the DEM and exported. This ortho image has been generated at a resolution of 40m/pixel.]] } local treks_MSGR_Sander_Crater_Ortho_22m = { Identifier = "MSGR_Sander_Crater_Ortho_22m", Name = [[MSGR MDIS Mosaic, Sander Crater]], - FilePath = asset.localResource("MSGR_MDIS_Mosaic/Sander_Crater.vrt"), + FilePath = asset.resource("MSGR_MDIS_Mosaic/Sander_Crater.vrt"), + ZIndex = 50, Description = [[This is a visible orthoimage for the Sander Crater region on Mercury. This data product class of this data is observational and has been constructed to examine the visible and topographic settings of landforms around Mercury's hollows. Observations of topography, specifically the relationships of hollows to their surroundings, can be used to investigate hollow formation. The visible image has been orthorectified using a digital elevation model (DEM) created from Mercury Dual Imaging System (MDIS) stereo pair images. The DEM used to generate the orthoimage has been aligned and controlled to Mercury Laser Altimeter (MLA) individual elevation points. The orthoimage was then projected onto the DEM and exported. This ortho image has been generated at a resolution of 22m/pixel.]] } local treks_MSGR_Sholem_Aleichem_Crater_Wall_Ortho_8m = { Identifier = "MSGR_Sholem_Aleichem_Crater_Wall_Ortho_8m", Name = [[MSGR MDIS Mosaic, Sholem Aleichem Crater Wall]], - FilePath = asset.localResource("MSGR_MDIS_Mosaic/Sholem_Aleichem_Crater_Wall.vrt"), + FilePath = asset.resource("MSGR_MDIS_Mosaic/Sholem_Aleichem_Crater_Wall.vrt"), + ZIndex = 50, Description = [[This is a visible orthoimage for the Sholem Aleichem Crater Wall region on Mercury. This data product class of this data is observational and has been constructed to examine the visible and topographic settings of landforms around Mercury's hollows. Observations of topography, specifically the relationships of hollows to their surroundings, can be used to investigate hollow formation. The visible image has been orthorectified using a digital elevation model (DEM) created from Mercury Dual Imaging System (MDIS) stereo pair images. The DEM used to generate the orthoimage has been aligned and controlled to Mercury Laser Altimeter (MLA) individual elevation points. The orthoimage was then projected onto the DEM and exported. This ortho image has been generated at a resolution of 8m/pixel.]] } + asset.onInitialize(function() openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_MSGR_Aksakov_Crater_Peak_Ring_Ortho_29m) openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_MSGR_near_Dali_Crater_Ortho_20m) @@ -114,9 +127,9 @@ asset.export("MSGR_Sander_Crater_Ortho_22m", treks_MSGR_Sander_Crater_Ortho_22m) asset.export("MSGR_Sholem_Aleichem_Crater_Wall_Ortho_8m", treks_MSGR_Sholem_Aleichem_Crater_Wall_Ortho_8m) + asset.meta = { - Name = [[NASA Treks Layers for Mercury MSGR_MDIS_Mosaic], - Version = "1.0", + Name = [[NASA Treks Layers for Mercury MSGR_MDIS_Mosaic]], Author = "NASA/Treks", URL = "https://trek.nasa.gov/mercury", License = "NASA/Treks", diff --git a/data/assets/scene/solarsystem/planets/mercury/layers/nasa-treks/MSGR_MDIS_Slope.asset b/data/assets/scene/solarsystem/planets/mercury/layers/nasa-treks/MSGR_MDIS_Slope.asset index a86bf3230a..770fc65708 100644 --- a/data/assets/scene/solarsystem/planets/mercury/layers/nasa-treks/MSGR_MDIS_Slope.asset +++ b/data/assets/scene/solarsystem/planets/mercury/layers/nasa-treks/MSGR_MDIS_Slope.asset @@ -6,76 +6,89 @@ local globeIdentifier = asset.require("scene/solarsystem//planets/mercury/mercury").Mercury.Identifier + + local treks_MSGR_Aksakov_Crater_Peak_Ring_Slope_100m = { Identifier = "MSGR_Aksakov_Crater_Peak_Ring_Slope_100m", Name = [[MSGR MDIS Slope, Aksakov Crater Peak Ring]], - FilePath = asset.localResource("MSGR_MDIS_Slope/Aksakov_Crater_Peak_Ring.vrt"), + FilePath = asset.resource("MSGR_MDIS_Slope/Aksakov_Crater_Peak_Ring.vrt"), + ZIndex = 50, Description = [[This is a slope product of the digital elevation model (DEM) for the Aksakov Crater Peak Ring region on Mercury. This data product class of this data is observational and has been constructed to examine the topographic settings of landforms around Mercury's hollows. Observations of topography, specifically the relationships of hollows to their surroundings, can be used to investigate hollow formation. This DEM has been derived from Mercury Dual Imaging System (MDIS) data and has been generated at a resolution of 100m/pixel. The DEM has been aligned and controlled to Mercury Laser Altimeter (MLA) individual elevation points. Vertical offsets in this DEM have been roughly corrected relative to the USGS's 665m Global DEM of Mercury. DEM elevation values are in meters and referred to a radius of 2440000m. Slope values are in degrees with a minimum value of 0 and a maximum value of 41.818.]] } local treks_MSGR_near_Dali_Crater_Slope_60m = { Identifier = "MSGR_near_Dali_Crater_Slope_60m", Name = [[MSGR MDIS Slope, Crater near Dali Crater]], - FilePath = asset.localResource("MSGR_MDIS_Slope/Crater_near_Dali_Crater.vrt"), + FilePath = asset.resource("MSGR_MDIS_Slope/Crater_near_Dali_Crater.vrt"), + ZIndex = 50, Description = [[This is a slope product of the digital elevation model (DEM) for the Crater Near Dali Crater region on Mercury. This data product class of this data is observational and has been constructed to examine the topographic settings of landforms around Mercury's hollows. Observations of topography, specifically the relationships of hollows to their surroundings, can be used to investigate hollow formation. This DEM has been derived from Mercury Dual Imaging System (MDIS) data and has been generated at a resolution of 60m/pixel. The DEM has been aligned and controlled to Mercury Laser Altimeter (MLA) individual elevation points. Vertical offsets in this DEM have been roughly corrected relative to the USGS's 665m Global DEM of Mercury. DEM elevation values are in meters and referred to a radius of 2440000m. Slope values are in degrees with a minimum value of 0 and a maximum value of 50.112.]] } local treks_MSGR_near_Geddes_Crater_Slope_100m = { Identifier = "MSGR_near_Geddes_Crater_Slope_100m", Name = [[MSGR MDIS Slope, Crater near Geddes Crater]], - FilePath = asset.localResource("MSGR_MDIS_Slope/Crater_near_Geddes_Crater.vrt"), + FilePath = asset.resource("MSGR_MDIS_Slope/Crater_near_Geddes_Crater.vrt"), + ZIndex = 50, Description = [[This is a slope product of the digital elevation model (DEM) for the Crater Near Geddes Crater region on Mercury. This data product class of this data is observational and has been constructed to examine the topographic settings of landforms around Mercury's hollows. Observations of topography, specifically the relationships of hollows to their surroundings, can be used to investigate hollow formation. This DEM has been derived from Mercury Dual Imaging System (MDIS) data and has been generated at a resolution of 100m/pixel. The DEM has been aligned and controlled to Mercury Laser Altimeter (MLA) individual elevation points. Vertical offsets in this DEM have been roughly corrected relative to the USGS's 665m Global DEM of Mercury. DEM elevation values are in meters and referred to a radius of 2440000m. Slope values are in degrees with a minimum value of 0 and a maximum value of 42.451.]] } local treks_MSGR_Degas_Crater_Slope_90m = { Identifier = "MSGR_Degas_Crater_Slope_90m", Name = [[MSGR MDIS Slope, Degas Crater]], - FilePath = asset.localResource("MSGR_MDIS_Slope/Degas_Crater.vrt"), + FilePath = asset.resource("MSGR_MDIS_Slope/Degas_Crater.vrt"), + ZIndex = 50, Description = [[This is a slope product of the digital elevation model (DEM) for the Degas Crater region on Mercury. This data product class of this data is observational and has been constructed to examine the topographic settings of landforms around Mercury's hollows. Observations of topography, specifically the relationships of hollows to their surroundings, can be used to investigate hollow formation. This DEM has been derived from Mercury Dual Imaging System (MDIS) data and has been generated at a resolution of 90m/pixel. The DEM has been aligned and controlled to Mercury Laser Altimeter (MLA) individual elevation points. Vertical offsets in this DEM have been roughly corrected relative to the USGS's 665m Global DEM of Mercury. DEM elevation values are in meters and referred to a radius of 2440000m. Slope values are in degrees with a minimum value of 0 and a maximum value of 53.812.]] } local treks_MSGR_Kertesz_Crater_Slope_100m = { Identifier = "MSGR_Kertesz_Crater_Slope_100m", Name = [[MSGR MDIS Slope, Kertesz Crater]], - FilePath = asset.localResource("MSGR_MDIS_Slope/Kertesz_Crater.vrt"), + FilePath = asset.resource("MSGR_MDIS_Slope/Kertesz_Crater.vrt"), + ZIndex = 50, Description = [[This is a slope product of the digital elevation model (DEM) for the Kertesz Crater region on Mercury. This data product class of this data is observational and has been constructed to examine the topographic settings of landforms around Mercury's hollows. Observations of topography, specifically the relationships of hollows to their surroundings, can be used to investigate hollow formation. This DEM has been derived from Mercury Dual Imaging System (MDIS) data and has been generated at a resolution of 100m/pixel. The DEM has been aligned and controlled to Mercury Laser Altimeter (MLA) individual elevation points. Vertical offsets in this DEM have been roughly corrected relative to the USGS's 665m Global DEM of Mercury. DEM elevation values are in meters and referred to a radius of 2440000m. Slope values are in degrees with a minimum value of 0 and a maximum value of 51.033.]] } local treks_MSGR_nw_Degas_Crater_Slope_80m = { Identifier = "MSGR_nw_Degas_Crater_Slope_80m", Name = [[MSGR MDIS Slope, North-West of Degas Crater]], - FilePath = asset.localResource("MSGR_MDIS_Slope/North-West_of_Degas_Crater.vrt"), + FilePath = asset.resource("MSGR_MDIS_Slope/North-West_of_Degas_Crater.vrt"), + ZIndex = 50, Description = [[This is a slope product of the digital elevation model (DEM) for the northwest region of Degas Crater on Mercury. This data product class of this data is observational and has been constructed to examine the topographic settings of landforms around Mercury's hollows. Observations of topography, specifically the relationships of hollows to their surroundings, can be used to investigate hollow formation. This DEM has been derived from Mercury Dual Imaging System (MDIS) data and has been generated at a resolution of 80m/pixel. The DEM has been aligned and controlled to Mercury Laser Altimeter (MLA) individual elevation points. Vertical offsets in this DEM have been roughly corrected relative to the USGS's 665m Global DEM of Mercury. DEM elevation values are in meters and referred to a radius of 2440000m. Slope values are in degrees with a minimum value of 0 and a maximum value of 42.616.]] } local treks_MSGR_Praxiteles_Peak_Ring_Slope_60m = { Identifier = "MSGR_Praxiteles_Peak_Ring_Slope_60m", Name = [[MSGR MDIS Slope, Praxiteles Peak Ring]], - FilePath = asset.localResource("MSGR_MDIS_Slope/Praxiteles_Peak_Ring.vrt"), + FilePath = asset.resource("MSGR_MDIS_Slope/Praxiteles_Peak_Ring.vrt"), + ZIndex = 50, Description = [[This is a colorized slope product of the digital elevation model (DEM) for the Praxiteles Peak Ring region on Mercury. This data product class of this data is observational and has been constructed to examine the topographic settings of landforms around Mercury's hollows. Observations of topography, specifically the relationships of hollows to their surroundings, can be used to investigate hollow formation. This DEM has been derived from Mercury Dual Imaging System (MDIS) data and has been generated at a resolution of 60m/pixel. The DEM has been aligned and controlled to Mercury Laser Altimeter (MLA) individual elevation points. Vertical offsets in this DEM have been roughly corrected relative to the USGS's 665m Global DEM of Mercury. DEM elevation values are in meters and referred to a radius of 2440000m. Slope values are in degrees with a minimum value of 0 and a maximum value of 46.484.]] } local treks_MSGR_Raditladi_Crater_Slope_120m = { Identifier = "MSGR_Raditladi_Crater_Slope_120m", Name = [[MSGR MDIS Slope, Raditladi Crater]], - FilePath = asset.localResource("MSGR_MDIS_Slope/Raditladi_Crater.vrt"), + FilePath = asset.resource("MSGR_MDIS_Slope/Raditladi_Crater.vrt"), + ZIndex = 50, Description = [[This is a slope product of the digital elevation model (DEM) for the Raditladi Crater region on Mercury. This data product class of this data is observational and has been constructed to examine the topographic settings of landforms around Mercury's hollows. Observations of topography, specifically the relationships of hollows to their surroundings, can be used to investigate hollow formation. This DEM has been derived from Mercury Dual Imaging System (MDIS) data and has been generated at a resolution of 120m/pixel. The DEM has been aligned and controlled to Mercury Laser Altimeter (MLA) individual elevation points. Vertical offsets in this DEM have been roughly corrected relative to the USGS's 665m Global DEM of Mercury. DEM elevation values are in meters and referred to a radius of 2440000m. Slope values are in degrees with a minimum value of 0 and a maximum value of 39.538.]] } local treks_MSGR_Sander_Crater_Slope_80m = { Identifier = "MSGR_Sander_Crater_Slope_80m", Name = [[MSGR MDIS Slope, Sander Crater]], - FilePath = asset.localResource("MSGR_MDIS_Slope/Sander_Crater.vrt"), + FilePath = asset.resource("MSGR_MDIS_Slope/Sander_Crater.vrt"), + ZIndex = 50, Description = [[This is a slope product of the digital elevation model (DEM) for the Sander Crater region on Mercury. This data product class of this data is observational and has been constructed to examine the topographic settings of landforms around Mercury's hollows. Observations of topography, specifically the relationships of hollows to their surroundings, can be used to investigate hollow formation. This DEM has been derived from Mercury Dual Imaging System (MDIS) data and has been generated at a resolution of 80m/pixel. The DEM has been aligned and controlled to Mercury Laser Altimeter (MLA) individual elevation points. Vertical offsets in this DEM have been roughly corrected relative to the USGS's 665m Global DEM of Mercury. DEM elevation values are in meters and referred to a radius of 2440000m. Slope values are in degrees with a minimum value of 0 and a maximum value of 41.517.]] } local treks_MSGR_Sholem_Aleichem_Crater_Wall_Slope_25m = { Identifier = "MSGR_Sholem_Aleichem_Crater_Wall_Slope_25m", Name = [[MSGR MDIS Slope, Sholem Aleichem Crater Wall]], - FilePath = asset.localResource("MSGR_MDIS_Slope/Sholem_Aleichem_Crater_Wall.vrt"), + FilePath = asset.resource("MSGR_MDIS_Slope/Sholem_Aleichem_Crater_Wall.vrt"), + ZIndex = 50, Description = [[This is a colorized slope product of the digital elevation model (DEM) for the Sholem Aleichem Crater Wall region on Mercury. This data product class of this data is observational and has been constructed to examine the topographic settings of landforms around Mercury's hollows. Observations of topography, specifically the relationships of hollows to their surroundings, can be used to investigate hollow formation. This DEM has been derived from Mercury Dual Imaging System (MDIS) data and has been generated at a resolution of 25m/pixel. The DEM has been aligned and controlled to Mercury Laser Altimeter (MLA) individual elevation points. Vertical offsets in this DEM have been roughly corrected relative to the USGS's 665m Global DEM of Mercury. DEM elevation values are in meters and referred to a radius of 2440000m. Slope values are in degrees with a minimum value of 0 and a maximum value of 40.746.]] } + asset.onInitialize(function() openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_MSGR_Aksakov_Crater_Peak_Ring_Slope_100m) openspace.globebrowsing.addLayer(globeIdentifier, "ColorLayers", treks_MSGR_near_Dali_Crater_Slope_60m) @@ -114,9 +127,9 @@ asset.export("MSGR_Sander_Crater_Slope_80m", treks_MSGR_Sander_Crater_Slope_80m) asset.export("MSGR_Sholem_Aleichem_Crater_Wall_Slope_25m", treks_MSGR_Sholem_Aleichem_Crater_Wall_Slope_25m) + asset.meta = { - Name = [[NASA Treks Layers for Mercury MSGR_MDIS_Slope], - Version = "1.0", + Name = [[NASA Treks Layers for Mercury MSGR_MDIS_Slope]], Author = "NASA/Treks", URL = "https://trek.nasa.gov/mercury", License = "NASA/Treks", diff --git a/data/assets/scene/solarsystem/planets/mercury/layers/newyork_layers.asset b/data/assets/scene/solarsystem/planets/mercury/layers/newyork_layers.asset new file mode 100644 index 0000000000..4c847f0c77 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/mercury/layers/newyork_layers.asset @@ -0,0 +1,29 @@ +asset.require("./base_layers") +asset.require("./colorlayers/messenger_mdis_newyork", false) +asset.require("./colorlayers/messenger_mosaic_newyork", false) +asset.require("./colorlayers/messenger_mosaic2_newyork", false) +asset.require("./colorlayers/messenger_bdr_newyork", asset.enabled) +asset.require("./colorlayers/messenger_hie_newyork", false) +asset.require("./colorlayers/messenger_hiw_newyork", false) +asset.require("./colorlayers/messenger_loi_newyork", false) +asset.require("./colorlayers/messenger_shade_newyork", false) + +-- The New York server does not have these maps, use the Utah server for now +asset.require("./colorlayers/messenger_mdr_utah", false) +asset.require("./colorlayers/messenger_mp3_utah", false) + + + +asset.meta = { + Name = "Default Mercury Layers (New York)", + Description = [[Default Mercury layers are: Aluminium Abundance, Calcium Abundance, + Iron Abundance, Magnesium Abundance, Silicon Abundance, Messenger MDIS, + Messenger Mosaic, Messenger Mosaic2, Messenger BDR, Messenger HIE, Messenger HIW, + Messenger LOI, Messenger SHADE, Messenger MDR, Messenger MP3, and Messenger DEM (3D). + + Layers only loaded from the New York server + ]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/mercury/layers/sweden_layers.asset b/data/assets/scene/solarsystem/planets/mercury/layers/sweden_layers.asset new file mode 100644 index 0000000000..022492bd4f --- /dev/null +++ b/data/assets/scene/solarsystem/planets/mercury/layers/sweden_layers.asset @@ -0,0 +1,29 @@ +asset.require("./base_layers") +asset.require("./colorlayers/messenger_mdis_sweden", false) +asset.require("./colorlayers/messenger_mosaic_sweden", false) +asset.require("./colorlayers/messenger_mosaic2_sweden", false) +asset.require("./colorlayers/messenger_bdr_sweden", asset.enabled) +asset.require("./colorlayers/messenger_hie_sweden", false) +asset.require("./colorlayers/messenger_hiw_sweden", false) +asset.require("./colorlayers/messenger_loi_sweden", false) +asset.require("./colorlayers/messenger_shade_sweden", false) + +-- The Sweden server does not have these maps, use the Utah server for now +asset.require("./colorlayers/messenger_mdr_utah", false) +asset.require("./colorlayers/messenger_mp3_utah", false) + + + +asset.meta = { + Name = "Default Mercury Layers (Sweden)", + Description = [[Default Mercury layers are: Aluminium Abundance, Calcium Abundance, + Iron Abundance, Magnesium Abundance, Silicon Abundance, Messenger MDIS, + Messenger Mosaic, Messenger Mosaic2, Messenger BDR, Messenger HIE, Messenger HIW, + Messenger LOI, Messenger SHADE, Messenger MDR, Messenger MP3, and Messenger DEM (3D). + + Layers only loaded from the Sweden server + ]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/mercury/layers/utah_layers.asset b/data/assets/scene/solarsystem/planets/mercury/layers/utah_layers.asset new file mode 100644 index 0000000000..d2afff19d1 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/mercury/layers/utah_layers.asset @@ -0,0 +1,27 @@ +asset.require("./base_layers") +asset.require("./colorlayers/messenger_mdis_utah", false) +asset.require("./colorlayers/messenger_mosaic_utah", false) +asset.require("./colorlayers/messenger_mosaic2_utah", false) +asset.require("./colorlayers/messenger_bdr_utah", asset.enabled) +asset.require("./colorlayers/messenger_hie_utah", false) +asset.require("./colorlayers/messenger_hiw_utah", false) +asset.require("./colorlayers/messenger_loi_utah", false) +asset.require("./colorlayers/messenger_shade_utah", false) +asset.require("./colorlayers/messenger_mdr_utah", false) +asset.require("./colorlayers/messenger_mp3_utah", false) + + + +asset.meta = { + Name = "Default Mercury Layers (Utah)", + Description = [[Default Mercury layers are: Aluminium Abundance, Calcium Abundance, + Iron Abundance, Magnesium Abundance, Silicon Abundance, Messenger MDIS, + Messenger Mosaic, Messenger Mosaic2, Messenger BDR, Messenger HIE, Messenger HIW, + Messenger LOI, Messenger SHADE, Messenger MDR, Messenger MP3, and Messenger DEM (3D). + + Layers only loaded from the Utah server + ]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/mercury/mercury.asset b/data/assets/scene/solarsystem/planets/mercury/mercury.asset index 3a4cacf78e..871df88f60 100644 --- a/data/assets/scene/solarsystem/planets/mercury/mercury.asset +++ b/data/assets/scene/solarsystem/planets/mercury/mercury.asset @@ -1,10 +1,10 @@ -asset.require("spice/base") asset.require("./trail") local transforms = asset.require("./transforms") +local coreKernels = asset.require("spice/core") -local labelsPath = asset.syncedResource({ +local labelsPath = asset.resource({ Name = "Mercury Labels", Type = "HttpSynchronization", Identifier = "mercury_labels", @@ -18,23 +18,19 @@ local Mercury = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "MERCURY", - Observer = "MERCURY BARYCENTER" + Target = coreKernels.ID.Mercury, + Observer = coreKernels.ID.MercuryBarycenter }, Rotation = { Type = "SpiceRotation", - SourceFrame = "IAU_MERCURY", - DestinationFrame = "GALACTIC" + SourceFrame = coreKernels.Frame.Mercury, + DestinationFrame = coreKernels.Frame.Galactic } }, Renderable = { Type = "RenderableGlobe", Radii = 2439700, - Frame = "IAU_MERCURY", - Body = "MERCURY", CameraMinHeight = 300, - SegmentsPerPatch = 64, - Layers = {}, Labels = { Enabled = false, FileName = labelsPath .. "Mercury.labels", @@ -58,8 +54,8 @@ local MercuryLabel = { Identifier = "MercuryLabel", Parent = Mercury.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Mercury", FontSize = 70.0, Size = 8.5, @@ -96,7 +92,6 @@ asset.export(MercuryLabel) asset.meta = { Name = "Mercury", - Version = "1.1", Description = "Mercury globe with labels, and main planet label", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/mercury/trail.asset b/data/assets/scene/solarsystem/planets/mercury/trail.asset index ecb673e41c..6f24cac77f 100644 --- a/data/assets/scene/solarsystem/planets/mercury/trail.asset +++ b/data/assets/scene/solarsystem/planets/mercury/trail.asset @@ -1,5 +1,5 @@ -asset.require("spice/base") local transforms = asset.require("scene/solarsystem/sun/transforms") +local coreKernels = asset.require("spice/core") @@ -10,8 +10,8 @@ local MercuryTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "MERCURY", - Observer = "SSB" + Target = coreKernels.ID.Mercury, + Observer = coreKernels.ID.SolarSystemBarycenter }, Color = { 0.6, 0.5, 0.5 }, Period = 87.968, @@ -40,8 +40,7 @@ asset.export(MercuryTrail) asset.meta = { Name = "Mercury Trail", - Version = "1.1", - Description = "Main trail for Mercury. Data from NASA Spice (see base spice asset)", + Description = "Main trail for Mercury", Author = "OpenSpace Team", URL = "http://openspaceproject.com", License = "MIT license" diff --git a/data/assets/scene/solarsystem/planets/mercury/trail_barycenter.asset b/data/assets/scene/solarsystem/planets/mercury/trail_barycenter.asset index 5f66705e6e..b7001285b4 100644 --- a/data/assets/scene/solarsystem/planets/mercury/trail_barycenter.asset +++ b/data/assets/scene/solarsystem/planets/mercury/trail_barycenter.asset @@ -1,5 +1,5 @@ -asset.require("spice/base") local transforms = asset.require("scene/solarsystem/sun/transforms") +local coreKernels = asset.require("spice/core") @@ -8,15 +8,15 @@ local MercuryBarycenterTrail = { Parent = transforms.SolarSystemBarycenter.Identifier, Renderable = { Type = "RenderableTrailOrbit", + Enabled = false, Translation = { Type = "SpiceTranslation", - Target = "MERCURY BARYCENTER", - Observer = "SSB" + Target = coreKernels.ID.MercuryBarycenter, + Observer = coreKernels.ID.SolarSystemBarycenter }, Color = { 0.6, 0.5, 0.5 }, Period = 87.968, - Resolution = 1000, - Enabled = false + Resolution = 1000 }, Tag = { "planetTrail_solarSystem", "planetTrail_terrestrial" }, GUI = { @@ -41,9 +41,7 @@ asset.export(MercuryBarycenterTrail) asset.meta = { Name = "Mercury Trail", - Version = "1.1", - Description = [[Trail for Mercury's Barycenter. Data from NASA Spice (see base spice - asset)]], + Description = "Trail for Mercury's Barycenter", Author = "OpenSpace Team", URL = "http://openspaceproject.com", License = "MIT license" diff --git a/data/assets/scene/solarsystem/planets/mercury/trail_earth.asset b/data/assets/scene/solarsystem/planets/mercury/trail_earth.asset index e151c31ccb..97ed2e70d5 100644 --- a/data/assets/scene/solarsystem/planets/mercury/trail_earth.asset +++ b/data/assets/scene/solarsystem/planets/mercury/trail_earth.asset @@ -1,6 +1,6 @@ -asset.require("spice/base") local transforms = asset.require("scene/solarsystem/sun/transforms") local earthTransforms = asset.require("scene/solarsystem/planets/earth/transforms") +local coreKernels = asset.require("spice/core") @@ -9,15 +9,15 @@ local MercuryTrailEarth = { Parent = earthTransforms.EarthBarycenter.Identifier, Renderable = { Type = "RenderableTrailOrbit", + Enabled = false, Translation = { Type = "SpiceTranslation", - Target = "MERCURY", - Observer = "EARTH" + Target = coreKernels.ID.Mercury, + Observer = coreKernels.ID.Earth }, - Color = { 1.0, 0.5, 0.2 }, - Period = 224.695, - Resolution = 1000, - Enabled = false + Color = { 0.6, 0.5, 0.5 }, + Period = 380.0, + Resolution = 1000 }, Tag = { "planetTrail_solarSystem_alt", "planetTrail_terrestrial_alt" }, GUI = { @@ -42,7 +42,6 @@ asset.export(MercuryTrailEarth) asset.meta = { Name = "Mercury Trail from Earth", - Version = "1.1", Description = [[Alternate trail of Mercury, as observed by the Earth rather then the Sun]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/planets/mercury/transforms.asset b/data/assets/scene/solarsystem/planets/mercury/transforms.asset index e242f52519..30116f18e3 100644 --- a/data/assets/scene/solarsystem/planets/mercury/transforms.asset +++ b/data/assets/scene/solarsystem/planets/mercury/transforms.asset @@ -1,5 +1,5 @@ -asset.require("spice/base") local transforms = asset.require("scene/solarsystem/sun/transforms") +local coreKernels = asset.require("spice/core") @@ -9,15 +9,14 @@ local MercuryBarycenter = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "MERCURY BARYCENTER", - Observer = "SSB" + Target = coreKernels.ID.MercuryBarycenter, + Observer = coreKernels.ID.SolarSystemBarycenter } }, GUI = { Name = "Mercury Barycenter", Path = "/Solar System/Planets/Mercury", - Hidden = true, - Description = "Mercury Barycenter position" + Hidden = true } } @@ -36,7 +35,6 @@ asset.export(MercuryBarycenter) asset.meta = { Name = "Mercury Transforms", - Version = "1.1", Description = "Mercury Barycenter transform", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/neptune/default_layers.asset b/data/assets/scene/solarsystem/planets/neptune/default_layers.asset index 8478b3268e..52305bbe47 100644 --- a/data/assets/scene/solarsystem/planets/neptune/default_layers.asset +++ b/data/assets/scene/solarsystem/planets/neptune/default_layers.asset @@ -4,7 +4,6 @@ asset.require("./layers/colorlayers/neptune_texture", true) asset.meta = { Name = "Default Neptune Layers", - Version = "1.0", Description = "Default Neptune layers are: Neptune Texture", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/neptune/inner_moons.asset b/data/assets/scene/solarsystem/planets/neptune/inner_moons.asset index 6c4e57b39a..6ce4c2c2df 100644 --- a/data/assets/scene/solarsystem/planets/neptune/inner_moons.asset +++ b/data/assets/scene/solarsystem/planets/neptune/inner_moons.asset @@ -1,5 +1,6 @@ local transforms = asset.require("./transforms") -local kernel = asset.require("./kernels") +local kernel = asset.require("./kernels095") +local coreKernels = asset.require("spice/core") @@ -9,15 +10,13 @@ local Naiad = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "NAIAD", - Observer = "NEPTUNE BARYCENTER" + Target = kernel.ID.Naiad, + Observer = coreKernels.ID.NeptuneBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 96000, 60000, 52000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 96000, 60000, 52000 } }, Tag = { "moon_solarSystem", @@ -40,8 +39,8 @@ local NaiadTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "NAIAD", - Observer = "NEPTUNE BARYCENTER" + Target = kernel.ID.Naiad, + Observer = coreKernels.ID.NeptuneBarycenter }, Color = { 0.2, 0.5, 0.75 }, Period = 0.294, @@ -64,8 +63,8 @@ local NaiadLabel = { Identifier = "NaiadLabel", Parent = Naiad.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Naiad", FontSize = 70.0, Size = 5.2, @@ -91,15 +90,13 @@ local Thalassa = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "THALASSA", - Observer = "NEPTUNE BARYCENTER" + Target = kernel.ID.Thalassa, + Observer = coreKernels.ID.NeptuneBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 108000, 100000, 52000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 108000, 100000, 52000 } }, Tag = { "moon_solarSystem", @@ -122,8 +119,8 @@ local ThalassaTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "THALASSA", - Observer = "NEPTUNE BARYCENTER" + Target = kernel.ID.Thalassa, + Observer = coreKernels.ID.NeptuneBarycenter }, Color = { 0.2, 0.5, 0.75 }, Period = 0.311, @@ -146,8 +143,8 @@ local ThalassaLabel = { Identifier = "ThalassaLabel", Parent = Thalassa.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Thalassa", FontSize = 70.0, Size = 5.2, @@ -173,15 +170,13 @@ local Despina = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "DESPINA", - Observer = "NEPTUNE BARYCENTER" + Target = kernel.ID.Despina, + Observer = coreKernels.ID.NeptuneBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 180000, 148000, 128000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 180000, 148000, 128000 } }, Tag = { "moon_solarSystem", @@ -204,8 +199,8 @@ local DespinaTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "DESPINA", - Observer = "NEPTUNE BARYCENTER" + Target = kernel.ID.Despina, + Observer = coreKernels.ID.NeptuneBarycenter }, Color = { 0.2, 0.5, 0.75 }, Period = 0.335, @@ -228,8 +223,8 @@ local DespinaLabel = { Identifier = "DespinaLabel", Parent = Despina.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Despina", FontSize = 70.0, Size = 5.2, @@ -255,15 +250,13 @@ local Galatea = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "GALATEA", - Observer = "NEPTUNE BARYCENTER" + Target = kernel.ID.Galatea, + Observer = coreKernels.ID.NeptuneBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 204000, 184000, 144000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 204000, 184000, 144000 } }, Tag = { "moon_solarSystem", @@ -286,8 +279,8 @@ local GalateaTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "GALATEA", - Observer = "NEPTUNE BARYCENTER" + Target = kernel.ID.Galatea, + Observer = coreKernels.ID.NeptuneBarycenter }, Color = { 0.2, 0.5, 0.75 }, Period = 0.429, @@ -310,8 +303,8 @@ local GalateaLabel = { Identifier = "GalateaLabel", Parent = Galatea.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Galatea", FontSize = 70.0, Size = 5.2, @@ -337,15 +330,13 @@ local Larissa = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "LARISSA", - Observer = "NEPTUNE BARYCENTER" + Target = kernel.ID.Larissa, + Observer = coreKernels.ID.NeptuneBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 216000, 204000, 168000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 216000, 204000, 168000 } }, Tag = { "moon_solarSystem", @@ -368,8 +359,8 @@ local LarissaTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "LARISSA", - Observer = "NEPTUNE BARYCENTER" + Target = kernel.ID.Larissa, + Observer = coreKernels.ID.NeptuneBarycenter }, Color = { 0.2, 0.5, 0.75 }, Period = 0.555, @@ -392,8 +383,8 @@ local LarissaLabel = { Identifier = "LarissaLabel", Parent = Larissa.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Larissa", FontSize = 70.0, Size = 5.2, @@ -419,15 +410,13 @@ local Hippocamp = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "814", - Observer = "NEPTUNE BARYCENTER" + Target = kernel.ID.Hippocamp, + Observer = coreKernels.ID.NeptuneBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 16000, 16000, 16000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 16000, 16000, 16000 } }, Tag = { "moon_solarSystem", @@ -450,8 +439,8 @@ local HippocampTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "814", - Observer = "NEPTUNE BARYCENTER" + Target = kernel.ID.Hippocamp, + Observer = coreKernels.ID.NeptuneBarycenter }, Color = { 0.2, 0.5, 0.75 }, Period = 0.936, @@ -474,8 +463,8 @@ local HippocampLabel = { Identifier = "HippocampLabel", Parent = Hippocamp.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Hippocamp", FontSize = 70.0, Size = 5.2, @@ -501,15 +490,13 @@ local Proteus = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "PROTEUS", - Observer = "NEPTUNE BARYCENTER" + Target = kernel.ID.Proteus, + Observer = coreKernels.ID.NeptuneBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 436000, 416000, 402000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 436000, 416000, 402000 } }, Tag = { "moon_solarSystem", @@ -532,8 +519,8 @@ local ProteusTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "PROTEUS", - Observer = "NEPTUNE BARYCENTER" + Target = kernel.ID.Proteus, + Observer = coreKernels.ID.NeptuneBarycenter }, Color = { 0.2, 0.5, 0.75 }, Period = 1.122, @@ -556,8 +543,8 @@ local ProteusLabel = { Identifier = "ProteusLabel", Parent = Proteus.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Proteus", FontSize = 70.0, Size = 5.2, @@ -579,10 +566,6 @@ local ProteusLabel = { asset.onInitialize(function() - openspace.spice.loadKernel(kernel.nep095) - openspace.spice.loadKernel(kernel.nep097) - - openspace.addSceneGraphNode(Naiad) openspace.addSceneGraphNode(NaiadTrail) openspace.addSceneGraphNode(NaiadLabel) @@ -640,10 +623,6 @@ asset.onDeinitialize(function() openspace.removeSceneGraphNode(ProteusLabel) openspace.removeSceneGraphNode(ProteusTrail) openspace.removeSceneGraphNode(Proteus) - - - openspace.spice.unloadKernel(kernel.nep097) - openspace.spice.unloadKernel(kernel.nep095) end) asset.export(Naiad) @@ -678,7 +657,6 @@ asset.export(ProteusLabel) asset.meta = { Name = "Neptune Inner Moons", - Version = "1.0", Description = [[Procedural Globe asset containing Neptune' inner prograde moons: Naiad, Thalassa, Despina, Galatea, Larissa, S2004N1, and Proteus. Blank globes and SPICE trails are generated for each moon]], diff --git a/data/assets/scene/solarsystem/planets/neptune/irregular_moons.asset b/data/assets/scene/solarsystem/planets/neptune/irregular_moons.asset index 93262f0f38..0f17f84ff2 100644 --- a/data/assets/scene/solarsystem/planets/neptune/irregular_moons.asset +++ b/data/assets/scene/solarsystem/planets/neptune/irregular_moons.asset @@ -1,5 +1,6 @@ local transforms = asset.require("./transforms") -local kernel = asset.require("./kernels") +local kernels102 = asset.require("./kernels102") +local coreKernels = asset.require("spice/core") @@ -9,15 +10,13 @@ local Halimede = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "HALIMEDE", - Observer = "NEPTUNE BARYCENTER" + Target = kernels102.ID.Halimede, + Observer = coreKernels.ID.NeptuneBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 62000, 62000, 62000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 62000, 62000, 62000 } }, Tag = { "moon_solarSystem", @@ -40,8 +39,8 @@ local HalimedeTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "HALIMEDE", - Observer = "NEPTUNE BARYCENTER" + Target = kernels102.ID.Halimede, + Observer = coreKernels.ID.NeptuneBarycenter }, Color = { 0.2, 0.5, 0.75 }, Period = 1879.08, @@ -64,8 +63,8 @@ local HalimedeLabel = { Identifier = "HalimedeLabel", Parent = Halimede.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Halimede", FontSize = 70.0, Size = 7.4, @@ -91,15 +90,13 @@ local Psamathe = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "PSAMATHE", - Observer = "NEPTUNE BARYCENTER" + Target = kernels102.ID.Psamathe, + Observer = coreKernels.ID.NeptuneBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 40000, 40000, 40000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 40000, 40000, 40000 } }, Tag = { "moon_solarSystem", @@ -122,8 +119,8 @@ local PsamatheTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "PSAMATHE", - Observer = "NEPTUNE BARYCENTER" + Target = kernels102.ID.Psamathe, + Observer = coreKernels.ID.NeptuneBarycenter }, Color = { 0.2, 0.5, 0.75 }, Period = 9074.3, @@ -146,8 +143,8 @@ local PsamatheLabel = { Identifier = "PsamatheLabel", Parent = Psamathe.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Psamathe", FontSize = 70.0, Size = 7.4, @@ -173,15 +170,13 @@ local Sao = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "SAO", - Observer = "NEPTUNE BARYCENTER" + Target = kernels102.ID.Sao, + Observer = coreKernels.ID.NeptuneBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 44000, 44000, 44000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 44000, 44000, 44000 } }, Tag = { "moon_solarSystem", @@ -204,8 +199,8 @@ local SaoTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "SAO", - Observer = "NEPTUNE BARYCENTER" + Target = kernels102.ID.Sao, + Observer = coreKernels.ID.NeptuneBarycenter }, Color = { 0.2, 0.5, 0.75 }, Period = 2912.72, @@ -228,8 +223,8 @@ local SaoLabel = { Identifier = "SaoLabel", Parent = Sao.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Sao", FontSize = 70.0, Size = 7.4, @@ -255,15 +250,13 @@ local Laomedeia = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "LAOMEDEIA", - Observer = "NEPTUNE BARYCENTER" + Target = kernels102.ID.Laomedeia, + Observer = coreKernels.ID.NeptuneBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 42000, 42000, 42000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 42000, 42000, 42000 } }, Tag = { "moon_solarSystem", @@ -286,8 +279,8 @@ local LaomedeiaTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "LAOMEDEIA", - Observer = "NEPTUNE BARYCENTER" + Target = kernels102.ID.Laomedeia, + Observer = coreKernels.ID.NeptuneBarycenter }, Color = { 0.2, 0.5, 0.75 }, Period = 3171.33, @@ -310,8 +303,8 @@ local LaomedeiaLabel = { Identifier = "LaomedeiaLabel", Parent = Laomedeia.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Laomedeia", FontSize = 70.0, Size = 7.4, @@ -337,15 +330,13 @@ local Neso = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "NESO", - Observer = "NEPTUNE BARYCENTER" + Target = kernels102.ID.Neso, + Observer = coreKernels.ID.NeptuneBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 60000, 60000, 60000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 60000, 60000, 60000 } }, Tag = { "moon_solarSystem", @@ -368,8 +359,8 @@ local NesoTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "NESO", - Observer = "NEPTUNE BARYCENTER" + Target = kernels102.ID.Neso, + Observer = coreKernels.ID.NeptuneBarycenter }, Color = { 0.2, 0.5, 0.75 }, Period = 9740.73, @@ -392,8 +383,8 @@ local NesoLabel = { Identifier = "NesoLabel", Parent = Neso.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Neso", FontSize = 70.0, Size = 7.4, @@ -415,9 +406,6 @@ local NesoLabel = { asset.onInitialize(function() - openspace.spice.loadKernel(kernel.nep102) - - openspace.addSceneGraphNode(Halimede) openspace.addSceneGraphNode(HalimedeTrail) openspace.addSceneGraphNode(HalimedeLabel) @@ -459,9 +447,6 @@ asset.onDeinitialize(function() openspace.removeSceneGraphNode(NesoLabel) openspace.removeSceneGraphNode(NesoTrail) openspace.removeSceneGraphNode(Neso) - - - openspace.spice.unloadKernel(kernel.nep102) end) asset.export(Halimede) @@ -488,7 +473,6 @@ asset.export(NesoLabel) asset.meta = { Name = "Neptune Irregular Prograde Moons", - Version = "1.0", Description = [[Procedural Globe asset containing Neptune' irregular prograde moons: Halimede, Psamathe and Neso. Blank globes and SPICE trails are generated for each moon]], diff --git a/data/assets/scene/solarsystem/planets/neptune/kernels.asset b/data/assets/scene/solarsystem/planets/neptune/kernels.asset deleted file mode 100644 index 4bfad9a74f..0000000000 --- a/data/assets/scene/solarsystem/planets/neptune/kernels.asset +++ /dev/null @@ -1,23 +0,0 @@ -local kernels = asset.syncedResource({ - Name = "Neptune Spice Kernels", - Type = "HttpSynchronization", - Identifier = "neptune_kernels", - Version = 2 -}) - - -asset.export("nep095", kernels .. "nep095.bsp") -asset.export("nep097", kernels .. "nep097.bsp") -asset.export("nep101xl_802", kernels .. "nep101xl-802.bsp") -asset.export("nep102", kernels .. "nep102.bsp") - - - -asset.meta = { - Name = "Neptune Spice Kernels", - Version = "1.0", - Description = "Generic SPICE kernels for Neptune", - Author = "OpenSpace Team", - URL = "https://naif.jpl.nasa.gov/pub/naif/pds/wgc/kernels/spk/", - License = "NASA" -} diff --git a/data/assets/scene/solarsystem/planets/neptune/kernels095.asset b/data/assets/scene/solarsystem/planets/neptune/kernels095.asset new file mode 100644 index 0000000000..012cf38618 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/neptune/kernels095.asset @@ -0,0 +1,52 @@ +local coreKernels = asset.require("spice/core") + + + +local kernels = asset.resource({ + Name = "Neptune Spice Kernels", + Type = "HttpSynchronization", + Identifier = "neptune_kernels", + Version = 2 +}) + + +local ID = { + Despina = "DESPINA", + Galatea = "GALATEA", + Hippocamp = 814, + Larissa = "LARISSA", + Naiad = "NAIAD", + Proteus = "PROTEUS", + Thalassa = "THALASSA" +} + +local Frame = { + Despina = coreKernels.Frame.Despina, + Galatea = coreKernels.Frame.Galatea, + Larissa = coreKernels.Frame.Larissa, + Naiad = coreKernels.Frame.Naiad, + Proteus = coreKernels.Frame.Proteus, + Thalassa = coreKernels.Frame.Thalassa +} + + +asset.onInitialize(function() + openspace.spice.loadKernel(kernels .. "nep095.bsp") +end) + +asset.onDeinitialize(function() + openspace.spice.unloadKernel(kernels .. "nep095.bsp") +end) + +asset.export("ID", ID) +asset.export("Frame", Frame) + + + +asset.meta = { + Name = "Neptune Spice Kernels", + Description = "Generic SPICE kernels for Neptune", + Author = "OpenSpace Team", + URL = "https://naif.jpl.nasa.gov/pub/naif/pds/wgc/kernels/spk/", + License = "NASA" +} diff --git a/data/assets/scene/solarsystem/planets/neptune/kernels102.asset b/data/assets/scene/solarsystem/planets/neptune/kernels102.asset new file mode 100644 index 0000000000..ead40f8ffd --- /dev/null +++ b/data/assets/scene/solarsystem/planets/neptune/kernels102.asset @@ -0,0 +1,36 @@ +local kernels = asset.resource({ + Name = "Neptune Spice Kernels", + Type = "HttpSynchronization", + Identifier = "neptune_kernels", + Version = 2 +}) + + +local ID = { + Halimede = "HALIMEDE", + Laomedeia = "LAOMEDEIA", + Psamathe = "PSAMATHE", + Sao = "SAO", + Neso = "NESO" +} + + +asset.onInitialize(function() + openspace.spice.loadKernel(kernels .. "nep102.bsp") +end) + +asset.onDeinitialize(function() + openspace.spice.unloadKernel(kernels .. "nep102.bsp") +end) + +asset.export("ID", ID) + + + +asset.meta = { + Name = "Neptune Spice Kernels", + Description = "Generic SPICE kernels for Neptune", + Author = "OpenSpace Team", + URL = "https://naif.jpl.nasa.gov/pub/naif/pds/wgc/kernels/spk/", + License = "NASA" +} diff --git a/data/assets/scene/solarsystem/planets/neptune/layers/colorlayers/neptune_texture.asset b/data/assets/scene/solarsystem/planets/neptune/layers/colorlayers/neptune_texture.asset index 06c5a383f7..f94543ed00 100644 --- a/data/assets/scene/solarsystem/planets/neptune/layers/colorlayers/neptune_texture.asset +++ b/data/assets/scene/solarsystem/planets/neptune/layers/colorlayers/neptune_texture.asset @@ -2,7 +2,7 @@ local globe = asset.require("../../neptune") -local texturesPath = asset.syncedResource({ +local texturesPath = asset.resource({ Name = "Neptune textures", Type = "HttpSynchronization", Identifier = "neptune_textures", @@ -13,7 +13,9 @@ local texturesPath = asset.syncedResource({ local Layer = { Identifier = "Texture", FilePath = texturesPath .. "neptune.jpg", - Enabled = asset.enabled + Enabled = asset.enabled, + ZIndex = 5, + CacheSettings = { Enabled = false } } @@ -31,7 +33,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Neptune Texutre", - Version = "1.0", Description = "Default jpg texture for Neptune", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/neptune/major_moons.asset b/data/assets/scene/solarsystem/planets/neptune/major_moons.asset index 22692658ce..e3f11d21b5 100644 --- a/data/assets/scene/solarsystem/planets/neptune/major_moons.asset +++ b/data/assets/scene/solarsystem/planets/neptune/major_moons.asset @@ -8,11 +8,11 @@ local NeptuneMajorMoonsOn = { Identifier = "os.solarsystem.NeptuneMajorMoonsOn", Name = "Turn on major moons and trails", Command = [[ - local trails = openspace.getProperty("{moonTrail_major_neptune}.Renderable.Enabled") - local trails_fade = openspace.getProperty("{moonTrail_major_neptune}.Renderable.Fade") + local trails = openspace.property("{moonTrail_major_neptune}.Renderable.Enabled") + local trails_fade = openspace.property("{moonTrail_major_neptune}.Renderable.Fade") - local moons = openspace.getProperty("{moon_major_neptune}.Renderable.Enabled") - local moons_fade = openspace.getProperty("{moon_major_neptune}.Renderable.Fade") + local moons = openspace.property("{moon_major_neptune}.Renderable.Enabled") + local moons_fade = openspace.property("{moon_major_neptune}.Renderable.Fade") for i, v in pairs(trails_fade) do openspace.setPropertyValueSingle(trails[i], true) @@ -26,18 +26,18 @@ local NeptuneMajorMoonsOn = { ]], Documentation = "Turn ON Neptune's major moons and their trails", GuiPath = "/Solar System/Neptune", - IsLocal = true + IsLocal = false } local NeptuneMajorMoonsOff = { Identifier = "os.solarsystem.NeptuneMajorMoonsOff", Name = "Turn off majors moon and trails", Command = [[ - local trails = openspace.getProperty("{moonTrail_major_neptune}.Renderable.Enabled") - local trails_fade = openspace.getProperty("{moonTrail_major_neptune}.Renderable.Fade") + local trails = openspace.property("{moonTrail_major_neptune}.Renderable.Enabled") + local trails_fade = openspace.property("{moonTrail_major_neptune}.Renderable.Fade") - local moons = openspace.getProperty("{moon_major_neptune}.Renderable.Enabled") - local moons_fade = openspace.getProperty("{moon_major_neptune}.Renderable.Fade") + local moons = openspace.property("{moon_major_neptune}.Renderable.Enabled") + local moons_fade = openspace.property("{moon_major_neptune}.Renderable.Fade") for i, v in pairs(trails_fade) do openspace.setPropertyValueSingle( @@ -61,7 +61,7 @@ local NeptuneMajorMoonsOff = { ]], Documentation = "Turn OFF Neptune's major moons and their trails", GuiPath = "/Solar System/Neptune", - IsLocal = true + IsLocal = false } @@ -82,7 +82,6 @@ asset.export("NeptuneMajorMoonsOff", NeptuneMajorMoonsOff.Identifier) asset.meta = { Name = "Neptune Major Moons", - Version = "1.0", Description = "Meta asset containing Neptune's major moons Triton and Nereid", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/neptune/minor_moons.asset b/data/assets/scene/solarsystem/planets/neptune/minor_moons.asset index a87f91fed6..a7138216b8 100644 --- a/data/assets/scene/solarsystem/planets/neptune/minor_moons.asset +++ b/data/assets/scene/solarsystem/planets/neptune/minor_moons.asset @@ -7,11 +7,11 @@ local NeptuneMinorMoonsOn = { Identifier = "os.solarsystem.NeptuneMinorMoonsOn", Name = "Turn on minor moons and trails", Command = [[ - local trails = openspace.getProperty("{moonTrail_minor_neptune}.Renderable.Enabled") - local trails_fade = openspace.getProperty("{moonTrail_minor_neptune}.Renderable.Fade") + local trails = openspace.property("{moonTrail_minor_neptune}.Renderable.Enabled") + local trails_fade = openspace.property("{moonTrail_minor_neptune}.Renderable.Fade") - local moons = openspace.getProperty("{moon_minor_neptune}.Renderable.Enabled") - local moons_fade = openspace.getProperty("{moon_minor_neptune}.Renderable.Fade") + local moons = openspace.property("{moon_minor_neptune}.Renderable.Enabled") + local moons_fade = openspace.property("{moon_minor_neptune}.Renderable.Fade") for i, v in pairs(trails_fade) do openspace.setPropertyValueSingle(trails[i], true) @@ -25,18 +25,18 @@ local NeptuneMinorMoonsOn = { ]], Documentation = "Turn ON Neptune's minor moons and their trails", GuiPath = "/Solar System/Neptune", - IsLocal = true + IsLocal = false } local NeptuneMinorMoonsOff = { Identifier = "os.solarsystem.NeptuneMinorMoonsOff", Name = "Turn off minors moon and trails", Command = [[ - local trails = openspace.getProperty("{moonTrail_minor_neptune}.Renderable.Enabled") - local trails_fade = openspace.getProperty("{moonTrail_minor_neptune}.Renderable.Fade") + local trails = openspace.property("{moonTrail_minor_neptune}.Renderable.Enabled") + local trails_fade = openspace.property("{moonTrail_minor_neptune}.Renderable.Fade") - local moons = openspace.getProperty("{moon_minor_neptune}.Renderable.Enabled") - local moons_fade = openspace.getProperty("{moon_minor_neptune}.Renderable.Fade") + local moons = openspace.property("{moon_minor_neptune}.Renderable.Enabled") + local moons_fade = openspace.property("{moon_minor_neptune}.Renderable.Fade") for i, v in pairs(trails_fade) do openspace.setPropertyValueSingle( @@ -60,7 +60,7 @@ local NeptuneMinorMoonsOff = { ]], Documentation = "Turn OFF Neptune's minor moons and their trails", GuiPath = "/Solar System/Neptune", - IsLocal = true + IsLocal = false } @@ -81,7 +81,6 @@ asset.export("NeptuneMinorMoonsOff", NeptuneMinorMoonsOff.Identifier) asset.meta = { Name = "Neptune Minor Moons", - Version = "1.1", Description = [[Meta asset containing two moon groups: inner_moons and irregular_moons]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/planets/neptune/neptune.asset b/data/assets/scene/solarsystem/planets/neptune/neptune.asset index 02dae1bef3..1f25a9770c 100644 --- a/data/assets/scene/solarsystem/planets/neptune/neptune.asset +++ b/data/assets/scene/solarsystem/planets/neptune/neptune.asset @@ -1,7 +1,6 @@ -asset.require("spice/base") asset.require("./trail") local transforms = asset.require("./transforms") -local kernel = asset.require("./kernels") +local coreKernels = asset.require("spice/core") @@ -11,20 +10,18 @@ local Neptune = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "NEPTUNE", - Observer = "NEPTUNE BARYCENTER" + Target = coreKernels.ID.Neptune, + Observer = coreKernels.ID.NeptuneBarycenter }, Rotation = { Type = "SpiceRotation", - SourceFrame = "IAU_NEPTUNE", - DestinationFrame = "GALACTIC" + SourceFrame = coreKernels.Frame.Neptune, + DestinationFrame = coreKernels.Frame.Galactic } }, Renderable = { Type = "RenderableGlobe", - Radii = { 24764000.0, 24764000.0, 24314000.0 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 24764000.0, 24764000.0, 24314000.0 } }, Tag = { "planet_solarSystem", "planet_giants" }, GUI = { @@ -38,8 +35,8 @@ local NeptuneLabel = { Identifier = "NeptuneLabel", Parent = Neptune.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Neptune", FontSize = 70.0, Size = 9.0, @@ -61,8 +58,6 @@ local NeptuneLabel = { asset.onInitialize(function() - openspace.spice.loadKernel(kernel.nep097) - openspace.addSceneGraphNode(Neptune) openspace.addSceneGraphNode(NeptuneLabel) end) @@ -70,8 +65,6 @@ end) asset.onDeinitialize(function() openspace.removeSceneGraphNode(NeptuneLabel) openspace.removeSceneGraphNode(Neptune) - - openspace.spice.unloadKernel(kernel.nep097) end) asset.export(Neptune) @@ -81,7 +74,6 @@ asset.export(NeptuneLabel) asset.meta = { Name = "Neptune", - Version = "1.1", Description = "Neptune globe, and main planet label", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/neptune/nereid/nereid.asset b/data/assets/scene/solarsystem/planets/neptune/nereid/nereid.asset index 3a37ab72a3..7db4b2e752 100644 --- a/data/assets/scene/solarsystem/planets/neptune/nereid/nereid.asset +++ b/data/assets/scene/solarsystem/planets/neptune/nereid/nereid.asset @@ -1,8 +1,16 @@ local transforms = asset.require("../transforms") -local kernel = asset.require("../kernels") +local coreKernels = asset.require("spice/core") +local kernels = asset.resource({ + Name = "Neptune Spice Kernels", + Type = "HttpSynchronization", + Identifier = "neptune_kernels", + Version = 2 +}) + + local Nereid = { Identifier = "Nereid", Parent = transforms.NeptuneBarycenter.Identifier, @@ -10,14 +18,12 @@ local Nereid = { Translation = { Type = "SpiceTranslation", Target = "NEREID", - Observer = "NEPTUNE BARYCENTER" + Observer = coreKernels.ID.NeptuneBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 357000, 340000, 340000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 357000, 340000, 340000 } }, Tag = { "moon_solarSystem", "moon_giants", "moon_neptune", "moon_major_neptune" }, GUI = { @@ -34,13 +40,18 @@ local NereidTrail = { Translation = { Type = "SpiceTranslation", Target = "NEREID", - Observer = "NEPTUNE BARYCENTER" + Observer = coreKernels.ID.NeptuneBarycenter }, Color = { 0.2, 0.5, 0.75 }, Period = 360.13, Resolution = 1000 }, - Tag = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_neptune", "moonTrail_major_neptune" }, + Tag = { + "moonTrail_solarSystem", + "moonTrail_giants", + "moonTrail_neptune", + "moonTrail_major_neptune" + }, GUI = { Name = "Nereid Trail", Path = "/Solar System/Planets/Neptune/Major Moons/Nereid" @@ -51,8 +62,8 @@ local NereidLabel = { Identifier = "NereidLabel", Parent = Nereid.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Nereid", FontSize = 50.0, Size = 7.0, @@ -74,8 +85,7 @@ local NereidLabel = { asset.onInitialize(function() - openspace.spice.loadKernel(kernel.nep101xl_802) - + openspace.spice.loadKernel(kernels .. "nep101xl-802.bsp") openspace.addSceneGraphNode(Nereid) openspace.addSceneGraphNode(NereidTrail) @@ -87,8 +97,7 @@ asset.onDeinitialize(function() openspace.removeSceneGraphNode(NereidTrail) openspace.removeSceneGraphNode(Nereid) - - openspace.spice.unloadKernel(kernel.nep101xl_802) + openspace.spice.unloadKernel(kernels .. "nep101xl-802.bsp") end) asset.export(Nereid) @@ -99,7 +108,6 @@ asset.export(NereidLabel) asset.meta = { Name = "Nereid", - Version = "1.1", Description = [[Procedural Globe asset containing Neptune's moon: Nereid. A blank globe and SPICE trail are generated for the moon]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/planets/neptune/trail.asset b/data/assets/scene/solarsystem/planets/neptune/trail.asset index 62268797bf..80dea527af 100644 --- a/data/assets/scene/solarsystem/planets/neptune/trail.asset +++ b/data/assets/scene/solarsystem/planets/neptune/trail.asset @@ -1,6 +1,5 @@ -asset.require("spice/base") local transforms = asset.require("scene/solarsystem/sun/transforms") -local kernel = asset.require("./kernels") +local coreKernels = asset.require("spice/core") @@ -11,22 +10,11 @@ local NeptuneTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "NEPTUNE", - Observer = "SSB" + Target = coreKernels.ID.Neptune, + Observer = coreKernels.ID.SolarSystemBarycenter }, Color = { 0.2, 0.5, 1.0 }, - -- Period = 60200, - -- Yes, this period is wrong, but the SPICE kernel we load by default only - -- goes back to 1850. Neptunes orbit is 164 years, which would mean that we - -- exceed the SPICE kernel if we go back before 2014, if we try to compute the - -- entire orbit. Cutting the orbit length to 100 years allows us to go back - -- to 1950 instead, which is good enough. - -- If the positions are needed before that, a different set of kernels are - -- needed, namely: - -- https://naif.jpl.nasa.gov/pub/naif/generic_kernels/spk/planets/de431_part-1.bsp - -- https://naif.jpl.nasa.gov/pub/naif/generic_kernels/spk/planets/de431_part-2.bsp - -- that cover a larger time span: -13201-MAY-06 00:00 to 17191-MAR-15 00:00 - Period = 36500, + Period = 60189.018, Resolution = 1000 }, Tag = { "planetTrail_solarSystem", "planetTrail_giants" }, @@ -39,15 +27,11 @@ local NeptuneTrail = { asset.onInitialize(function() - openspace.spice.loadKernel(kernel.nep097) - openspace.addSceneGraphNode(NeptuneTrail) end) asset.onDeinitialize(function() openspace.removeSceneGraphNode(NeptuneTrail) - - openspace.spice.unloadKernel(kernel.nep097) end) asset.export(NeptuneTrail) @@ -56,8 +40,7 @@ asset.export(NeptuneTrail) asset.meta = { Name = "Neptune Trail", - Version = "1.1", - Description = "Main trail of Neptune. Data from NASA Spice (see base spice asset)", + Description = "Main trail of Neptune", Author = "OpenSpace Team", URL = "http://openspaceproject.com", License = "MIT license" diff --git a/data/assets/scene/solarsystem/planets/neptune/trail_barycenter.asset b/data/assets/scene/solarsystem/planets/neptune/trail_barycenter.asset index 6e2466aac5..1627018a52 100644 --- a/data/assets/scene/solarsystem/planets/neptune/trail_barycenter.asset +++ b/data/assets/scene/solarsystem/planets/neptune/trail_barycenter.asset @@ -1,6 +1,5 @@ -asset.require("spice/base") local transforms = asset.require("scene/solarsystem/sun/transforms") -local kernel = asset.require("./kernels") +local coreKernels = asset.require("spice/core") @@ -9,15 +8,15 @@ local NeptuneBarycenterTrail = { Parent = transforms.SolarSystemBarycenter.Identifier, Renderable = { Type = "RenderableTrailOrbit", + Enabled = false, Translation = { Type = "SpiceTranslation", - Target = "NEPTUNE BARYCENTER", - Observer = "SSB" + Target = coreKernels.ID.NeptuneBarycenter, + Observer = coreKernels.ID.SolarSystemBarycenter }, Color = { 0.2, 0.5, 1.0 }, Period = 60266, - Resolution = 1000, - Enabled = false + Resolution = 1000 }, Tag = { "planetTrail_solarSystem", "planetTrail_giants" }, GUI = { @@ -29,15 +28,11 @@ local NeptuneBarycenterTrail = { asset.onInitialize(function() - openspace.spice.loadKernel(kernel.nep097) - openspace.addSceneGraphNode(NeptuneBarycenterTrail) end) asset.onDeinitialize(function() openspace.removeSceneGraphNode(NeptuneBarycenterTrail) - - openspace.spice.unloadKernel(kernel.nep097) end) asset.export(NeptuneBarycenterTrail) @@ -46,9 +41,7 @@ asset.export(NeptuneBarycenterTrail) asset.meta = { Name = "Neptune Trail", - Version = "1.1", - Description = [[Trail of Neptune's Barycenter. Data from NASA Spice (see base spice - asset)]], + Description = "Trail of Neptune's Barycenter", Author = "OpenSpace Team", URL = "http://openspaceproject.com", License = "MIT license" diff --git a/data/assets/scene/solarsystem/planets/neptune/trail_earth.asset b/data/assets/scene/solarsystem/planets/neptune/trail_earth.asset index f417553bed..7f22e97c3f 100644 --- a/data/assets/scene/solarsystem/planets/neptune/trail_earth.asset +++ b/data/assets/scene/solarsystem/planets/neptune/trail_earth.asset @@ -1,7 +1,6 @@ -asset.require("spice/base") local transforms = asset.require("scene/solarsystem/sun/transforms") local earthTransforms = asset.require("scene/solarsystem/planets/earth/transforms") -local kernel = asset.require("./kernels") +local coreKernels = asset.require("spice/core") @@ -10,15 +9,15 @@ local NeptuneTrailEarth = { Parent = earthTransforms.EarthBarycenter.Identifier, Renderable = { Type = "RenderableTrailOrbit", + Enabled = false, Translation = { Type = "SpiceTranslation", - Target = "NEPTUNE", - Observer = "EARTH" + Target = coreKernels.ID.Neptune, + Observer = coreKernels.ID.Earth }, - Color = { 1.0, 0.5, 0.2 }, - Period = 224.695, - Resolution = 1000, - Enabled = false + Color = { 0.2, 0.5, 1.0 }, + Period = 60250.0, + Resolution = 3000 }, Tag = { "planetTrail_solarSystem_alt", "planetTrail_terrestrial_alt" }, GUI = { @@ -30,15 +29,11 @@ local NeptuneTrailEarth = { asset.onInitialize(function() - openspace.spice.loadKernel(kernel.nep097) - openspace.addSceneGraphNode(NeptuneTrailEarth) end) asset.onDeinitialize(function() openspace.removeSceneGraphNode(NeptuneTrailEarth) - - openspace.spice.unloadKernel(kernel.nep097) end) asset.export(NeptuneTrailEarth) @@ -47,7 +42,6 @@ asset.export(NeptuneTrailEarth) asset.meta = { Name = "Neptune Trail from Earth", - Version = "1.1", Description = [[Alternate trail of Neptune, as observed by the Earth rather then the Sun]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/planets/neptune/transforms.asset b/data/assets/scene/solarsystem/planets/neptune/transforms.asset index fdf44cb772..9022f1a8e1 100644 --- a/data/assets/scene/solarsystem/planets/neptune/transforms.asset +++ b/data/assets/scene/solarsystem/planets/neptune/transforms.asset @@ -1,6 +1,5 @@ -asset.require("spice/base") local transforms = asset.require("scene/solarsystem/sun/transforms") -local kernel = asset.require("./kernels") +local coreKernels = asset.require("spice/core") @@ -10,29 +9,24 @@ local NeptuneBarycenter = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "NEPTUNE BARYCENTER", - Observer = "SSB" + Target = coreKernels.ID.NeptuneBarycenter, + Observer = coreKernels.ID.SolarSystemBarycenter } }, GUI = { Name = "Neptune Barycenter", Path = "/Solar System/Planets/Neptune", - Hidden = true, - Description = "Neptune Barycenter position" + Hidden = true } } asset.onInitialize(function() - openspace.spice.loadKernel(kernel.nep097) - openspace.addSceneGraphNode(NeptuneBarycenter) end) asset.onDeinitialize(function() openspace.removeSceneGraphNode(NeptuneBarycenter) - - openspace.spice.unloadKernel(kernel.nep097) end) asset.export(NeptuneBarycenter) @@ -41,7 +35,6 @@ asset.export(NeptuneBarycenter) asset.meta = { Name = "Neptune Transforms", - Version = "1.1", Description = "Neptune Barycenter transform", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/neptune/triton/default_layers.asset b/data/assets/scene/solarsystem/planets/neptune/triton/default_layers.asset index 02ea5f5207..b66160cca5 100644 --- a/data/assets/scene/solarsystem/planets/neptune/triton/default_layers.asset +++ b/data/assets/scene/solarsystem/planets/neptune/triton/default_layers.asset @@ -1,9 +1,9 @@ asset.require("./layers/colorlayers/triton_voyager2_clrmosaic_globalfill_600m", true) + asset.meta = { Name = "Default Triton Layers", - Version = "1.0", Description = "Default Triton layers are: Voyager2 Mosaic", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/neptune/triton/layers/colorlayers/triton_voyager2_clrmosaic_globalfill_600m.asset b/data/assets/scene/solarsystem/planets/neptune/triton/layers/colorlayers/triton_voyager2_clrmosaic_globalfill_600m.asset index c6e34d821f..6873986135 100644 --- a/data/assets/scene/solarsystem/planets/neptune/triton/layers/colorlayers/triton_voyager2_clrmosaic_globalfill_600m.asset +++ b/data/assets/scene/solarsystem/planets/neptune/triton/layers/colorlayers/triton_voyager2_clrmosaic_globalfill_600m.asset @@ -2,7 +2,7 @@ local globe = asset.require("../../triton") -local texturesPath = asset.syncedResource({ +local texturesPath = asset.resource({ Name = "Triton Textures", Type = "HttpSynchronization", Identifier = "triton_textures", @@ -14,12 +14,14 @@ local Layer = { Identifier = "Triton_Voyager2_ClrMosaic_GlobalFill_600m", Name = "Triton Voyager2 Mosaic [local]", Enabled = asset.enabled, + ZIndex = 5, FilePath = texturesPath .. "Triton_Voyager2_ClrMosaic_GlobalFill_600m.png", - Description = [[Voyager 2 data was used to construct the best-ever global color map of Triton. - This map has a resolution of 1,970 feet (600 meters per pixel [m]). Color was synthesized by - combining high-resolution images taken through orange, violet, and ultraviolet filters; these - images were displayed as red, green, and blue images and combined to create this - color version (Smith et al., 1989).]] + Description = [[Voyager 2 data was used to construct the best-ever global color map of + Triton. This map has a resolution of 1,970 feet (600 meters per pixel [m]). Color was + synthesized by combining high-resolution images taken through orange, violet, and + ultraviolet filters; these images were displayed as red, green, and blue images and + combined to create this color version (Smith et al., 1989).]], + CacheSettings = { Enabled = false } } @@ -37,7 +39,6 @@ asset.export("Layer", Layer) asset.meta = { Name = "Triton Voyager2 Mosaic", - Version = "1.0", Description = [[Voyager2 mosaic of Triton. This layer is local in the sync folder.]], Author = "USGS", URL = "https://astrogeology.usgs.gov/search/map/Triton/Mosaic/" .. diff --git a/data/assets/scene/solarsystem/planets/neptune/triton/trail.asset b/data/assets/scene/solarsystem/planets/neptune/triton/trail.asset deleted file mode 100644 index fc8f537041..0000000000 --- a/data/assets/scene/solarsystem/planets/neptune/triton/trail.asset +++ /dev/null @@ -1,53 +0,0 @@ -asset.require("spice/base") -local transforms = asset.require("../transforms") -local kernel = asset.require("../kernels") - - - -local Trail = { - Identifier = "TritonTrail", - Parent = transforms.NeptuneBarycenter.Identifier, - Renderable = { - Type = "RenderableTrailOrbit", - Translation = { - Type = "SpiceTranslation", - Target = "TRITON", - Observer = "NEPTUNE BARYCENTER" - }, - Color = { 0.2, 0.5, 0.75 }, - Period = 5.877, - Resolution = 1000 - }, - Tag = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_neptune" }, - GUI = { - Name = "Triton Trail", - Path = "/Solar System/Planets/Neptune/Major Moons/Triton" - } -} - -asset.onInitialize(function() - openspace.spice.loadKernel(kernel.nep097) - - - openspace.addSceneGraphNode(Trail) -end) - -asset.onDeinitialize(function() - openspace.removeSceneGraphNode(Trail) - - - openspace.spice.unloadKernel(kernel.nep097) -end) - -asset.export(Trail) - - -asset.meta = { - Name = "Triton Trail", - Version = "1.1", - Description = [[Trail of Triton as observed by the Neptune. Data from NASA Spice (see - base spice asset)]], - Author = "OpenSpace Team", - URL = "http://openspaceproject.com", - License = "MIT license" -} diff --git a/data/assets/scene/solarsystem/planets/neptune/triton/triton.asset b/data/assets/scene/solarsystem/planets/neptune/triton/triton.asset index fd46b06dbf..f50ba6297a 100644 --- a/data/assets/scene/solarsystem/planets/neptune/triton/triton.asset +++ b/data/assets/scene/solarsystem/planets/neptune/triton/triton.asset @@ -1,28 +1,34 @@ local transforms = asset.require("../transforms") -local kernel = asset.require("../kernels") +local coreKernels = asset.require("spice/core") +local kernels = asset.resource({ + Name = "Neptune Spice Kernels", + Type = "HttpSynchronization", + Identifier = "neptune_kernels", + Version = 2 +}) + + local Triton = { Identifier = "Triton", Parent = transforms.NeptuneBarycenter.Identifier, Transform = { - Rotation = { - Type = "SpiceRotation", - SourceFrame = "IAU_TRITON", - DestinationFrame = "GALACTIC", - }, Translation = { Type = "SpiceTranslation", Target = "TRITON", - Observer = "NEPTUNE BARYCENTER" + Observer = coreKernels.ID.NeptuneBarycenter + }, + Rotation = { + Type = "SpiceRotation", + SourceFrame = "IAU_TRITON", + DestinationFrame = coreKernels.Frame.Galactic } }, Renderable = { Type = "RenderableGlobe", - Radii = { 2709000, 2706000, 2705000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 2709000, 2706000, 2705000 } }, Tag = { "moon_solarSystem", "moon_giants", "moon_neptune", "moon_major_neptune" }, GUI = { @@ -39,13 +45,18 @@ local TritonTrail = { Translation = { Type = "SpiceTranslation", Target = "TRITON", - Observer = "NEPTUNE BARYCENTER" + Observer = coreKernels.ID.NeptuneBarycenter }, Color = { 0.2, 0.5, 0.75 }, Period = 5.875, Resolution = 1000 }, - Tag = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_neptune", "moonTrail_major_neptune" }, + Tag = { + "moonTrail_solarSystem", + "moonTrail_giants", + "moonTrail_neptune", + "moonTrail_major_neptune" + }, GUI = { Name = "Triton Trail", Path = "/Solar System/Planets/Neptune/Major Moons/Triton" @@ -56,8 +67,8 @@ local TritonLabel = { Identifier = "TritonLabel", Parent = Triton.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Triton", FontSize = 50.0, Size = 7.0, @@ -79,8 +90,7 @@ local TritonLabel = { asset.onInitialize(function() - openspace.spice.loadKernel(kernel.nep097) - + openspace.spice.loadKernel(kernels .. "nep097.bsp") openspace.addSceneGraphNode(Triton) openspace.addSceneGraphNode(TritonTrail) @@ -92,8 +102,7 @@ asset.onDeinitialize(function() openspace.removeSceneGraphNode(TritonTrail) openspace.removeSceneGraphNode(Triton) - - openspace.spice.unloadKernel(kernel.nep097) + openspace.spice.unloadKernel(kernels .. "nep097.bsp") end) asset.export(Triton) @@ -104,7 +113,6 @@ asset.export(TritonLabel) asset.meta = { Name = "Triton", - Version = "1.1", Description = [[Globe asset containing Neptune's moon Triton]], Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/newyork_layers.asset b/data/assets/scene/solarsystem/planets/newyork_layers.asset new file mode 100644 index 0000000000..0feae86a38 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/newyork_layers.asset @@ -0,0 +1,23 @@ +asset.require("./base_layers") + +asset.require("./earth/layers/newyork_layers") +asset.require("./earth/moon/layers/newyork_layers") +asset.require("./jupiter/europa/layers/newyork_layers") +asset.require("./mars/layers/newyork_layers") +asset.require("./mercury/layers/newyork_layers") +asset.require("./saturn/enceladus/layers/newyork_layers") +asset.require("./venus/layers/newyork_layers") + + + +asset.meta = { + Name = "Default Solar System Layers (New York)", + Description = [[Adds default layers for all planets. Remove this asset and include + individual layers for planets to customize planet layers + + Layers only loaded from the New York server + ]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/planets.asset b/data/assets/scene/solarsystem/planets/planets.asset index 4bae909da5..ed6e79e3e1 100644 --- a/data/assets/scene/solarsystem/planets/planets.asset +++ b/data/assets/scene/solarsystem/planets/planets.asset @@ -30,10 +30,16 @@ asset.require("./neptune/neptune") asset.require("./neptune/major_moons") +asset.onInitialize(function() + openspace.setGuiOrder( + "/Solar System/Planets", + { "Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune" } + ) +end) + asset.meta = { Name = "Planets", - Version = "1.0", Description = "Collection of planets in the solar system", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/saturn/default_layers.asset b/data/assets/scene/solarsystem/planets/saturn/default_layers.asset index 4027958912..3ffd4fd680 100644 --- a/data/assets/scene/solarsystem/planets/saturn/default_layers.asset +++ b/data/assets/scene/solarsystem/planets/saturn/default_layers.asset @@ -4,7 +4,6 @@ asset.require("./layers/colorlayers/saturn_texture", true) asset.meta = { Name = "Default Saturn Layers", - Version = "1.0", Description = "Default Saturn layers are: Saturn texture", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/saturn/dione/default_layers.asset b/data/assets/scene/solarsystem/planets/saturn/dione/default_layers.asset index 7365151bfb..ed9ee8b0f8 100644 --- a/data/assets/scene/solarsystem/planets/saturn/dione/default_layers.asset +++ b/data/assets/scene/solarsystem/planets/saturn/dione/default_layers.asset @@ -4,7 +4,6 @@ asset.require("./layers/colorlayers/dione_texture", true) asset.meta = { Name = "Default Dione Layers", - Version = "1.0", Description = "Default Dione layers are: Dione Texture", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/saturn/dione/dione.asset b/data/assets/scene/solarsystem/planets/saturn/dione/dione.asset index a7a939eec5..0dd8f2b2aa 100644 --- a/data/assets/scene/solarsystem/planets/saturn/dione/dione.asset +++ b/data/assets/scene/solarsystem/planets/saturn/dione/dione.asset @@ -1,10 +1,11 @@ asset.require("./trail") local transforms = asset.require("../transforms") -local kernel = asset.require("../kernels") +local kernels = asset.require("../kernels") +local coreKernels = asset.require("spice/core") -local labelsPath = asset.syncedResource({ +local labelsPath = asset.resource({ Name = "Saturn Labels", Type = "HttpSynchronization", Identifier = "saturn_labels", @@ -18,20 +19,18 @@ local Dione = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "DIONE", - Observer = "SATURN BARYCENTER" + Target = kernels.ID.Dione, + Observer = coreKernels.ID.SaturnBarycenter }, Rotation = { Type = "SpiceRotation", - SourceFrame = "IAU_ENCELADUS", - DestinationFrame = "GALACTIC" + SourceFrame = coreKernels.Frame.Dione, + DestinationFrame = coreKernels.Frame.Galactic } }, Renderable = { Type = "RenderableGlobe", Radii = 561400, - SegmentsPerPatch = 64, - Layers = {}, Labels = { Enabled = false, FileName = labelsPath .. "dione.labels", @@ -51,13 +50,12 @@ local Dione = { } } - local DioneLabel = { Identifier = "DioneLabel", Parent = Dione.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Dione", FontSize = 70.0, Size = 6.0, @@ -79,8 +77,6 @@ local DioneLabel = { asset.onInitialize(function() - openspace.spice.loadKernel(kernel.sat441) - openspace.addSceneGraphNode(Dione) openspace.addSceneGraphNode(DioneLabel) end) @@ -88,8 +84,6 @@ end) asset.onDeinitialize(function() openspace.removeSceneGraphNode(DioneLabel) openspace.removeSceneGraphNode(Dione) - - openspace.spice.unloadKernel(kernel.sat441) end) asset.export(Dione) @@ -99,7 +93,6 @@ asset.export(DioneLabel) asset.meta = { Name = "Dione", - Version = "1.0", Description = "Dione globe with labels", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/saturn/dione/layers/colorlayers/dione_texture.asset b/data/assets/scene/solarsystem/planets/saturn/dione/layers/colorlayers/dione_texture.asset index 4c2c4305f9..eeb6e3a222 100644 --- a/data/assets/scene/solarsystem/planets/saturn/dione/layers/colorlayers/dione_texture.asset +++ b/data/assets/scene/solarsystem/planets/saturn/dione/layers/colorlayers/dione_texture.asset @@ -2,7 +2,7 @@ local globe = asset.require("../../dione") -local texturesPath = asset.syncedResource({ +local texturesPath = asset.resource({ Name = "Dione textures", Type = "HttpSynchronization", Identifier = "dione_textures", @@ -13,7 +13,9 @@ local texturesPath = asset.syncedResource({ local Layer = { Identifier = "Texture", FilePath = texturesPath .. "dione.jpg", - Enabled = asset.enabled + Enabled = asset.enabled, + ZIndex = 5, + CacheSettings = { Enabled = false } } @@ -31,7 +33,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Dione Texutre", - Version = "1.0", Description = "Default jpg texture for Dione", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/saturn/dione/trail.asset b/data/assets/scene/solarsystem/planets/saturn/dione/trail.asset index 41cdab9d54..8e5fda0d3e 100644 --- a/data/assets/scene/solarsystem/planets/saturn/dione/trail.asset +++ b/data/assets/scene/solarsystem/planets/saturn/dione/trail.asset @@ -1,5 +1,6 @@ local transforms = asset.require("../transforms") -local kernel = asset.require("../kernels") +local kernels = asset.require("../kernels") +local coreKernels = asset.require("spice/core") @@ -10,8 +11,8 @@ local DioneTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "DIONE", - Observer = "SATURN BARYCENTER" + Target = kernels.ID.Dione, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 66.0 / 24.0, @@ -27,15 +28,11 @@ local DioneTrail = { asset.onInitialize(function() - openspace.spice.loadKernel(kernel.sat441) - openspace.addSceneGraphNode(DioneTrail) end) asset.onDeinitialize(function() openspace.removeSceneGraphNode(DioneTrail) - - openspace.spice.unloadKernel(kernel.sat441) end) asset.export(DioneTrail) @@ -44,8 +41,7 @@ asset.export(DioneTrail) asset.meta = { Name = "Dione Trail", - Version = "1.0", - Description = "Trail for Dione. Data from NASA Spice (see base spice asset)", + Description = "Trail for Dione", Author = "OpenSpace Team", URL = "http://openspaceproject.com", License = "MIT license" diff --git a/data/assets/scene/solarsystem/planets/saturn/enceladus/default_layers.asset b/data/assets/scene/solarsystem/planets/saturn/enceladus/default_layers.asset index 2d36fe9a58..17fe06b6c0 100644 --- a/data/assets/scene/solarsystem/planets/saturn/enceladus/default_layers.asset +++ b/data/assets/scene/solarsystem/planets/saturn/enceladus/default_layers.asset @@ -1,14 +1,16 @@ -asset.require("./layers/colorlayers/enceladus_texture", false) -asset.require("./layers/colorlayers/global_mosaic_100m_hpf_sweden", false) -asset.require("./layers/colorlayers/global_mosaic_100m_hpf_newyork", true) +asset.require("./layers/base_layers", false) +asset.require("./layers/sweden_layers", false) +asset.require("./layers/newyork_layers", true) asset.meta = { Name = "Default Enceladus Layers", - Version = "1.0", - Description = [[Default Enceladus layers are: Enceladus Texture and Cassini Global - Mosaic 100m HPF]], + Description = [[Default Enceladus layers are: Enceladus Texture, + and Cassini Global Mosaic 100m HPF. + + Layers loaded from all available servers + ]], Author = "OpenSpace Team", URL = "http://openspaceproject.com", License = "MIT license" diff --git a/data/assets/scene/solarsystem/planets/saturn/enceladus/enceladus.asset b/data/assets/scene/solarsystem/planets/saturn/enceladus/enceladus.asset index 8cde73ffd0..b218e8066c 100644 --- a/data/assets/scene/solarsystem/planets/saturn/enceladus/enceladus.asset +++ b/data/assets/scene/solarsystem/planets/saturn/enceladus/enceladus.asset @@ -1,10 +1,11 @@ asset.require("./trail") local transforms = asset.require("../transforms") -local kernel = asset.require("../kernels") +local kernels = asset.require("../kernels") +local coreKernels = asset.require("spice/core") -local labelsPath = asset.syncedResource({ +local labelsPath = asset.resource({ Name = "Saturn Labels", Type = "HttpSynchronization", Identifier = "saturn_labels", @@ -18,20 +19,18 @@ local Enceladus = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "ENCELADUS", - Observer = "SATURN BARYCENTER" + Target = kernels.ID.Enceladus, + Observer = coreKernels.ID.SaturnBarycenter }, Rotation = { Type = "SpiceRotation", - SourceFrame = "IAU_ENCELADUS", - DestinationFrame = "GALACTIC" + SourceFrame = kernels.Frame.Enceladus, + DestinationFrame = coreKernels.Frame.Galactic } }, Renderable = { Type = "RenderableGlobe", Radii = 252000, - SegmentsPerPatch = 64, - Layers = {}, Labels = { Enabled = false, FileName = labelsPath .. "enceladus.labels", @@ -48,8 +47,7 @@ local Enceladus = { Tag = { "moon_solarSystem", "moon_giants", "moon_saturn", "moon_major_saturn" }, GUI = { Name = "Enceladus", - Path = "/Solar System/Planets/Saturn/Major Moons/Enceladus", - Description = "Enceladus globe with labels" + Path = "/Solar System/Planets/Saturn/Major Moons/Enceladus" } } @@ -57,8 +55,8 @@ local EnceladusLabel = { Identifier = "EnceladusLabel", Parent = Enceladus.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Enceladus", FontSize = 70.0, Size = 6.0, @@ -80,8 +78,6 @@ local EnceladusLabel = { asset.onInitialize(function() - openspace.spice.loadKernel(kernel.sat441) - openspace.addSceneGraphNode(Enceladus) openspace.addSceneGraphNode(EnceladusLabel) end) @@ -89,8 +85,6 @@ end) asset.onDeinitialize(function() openspace.removeSceneGraphNode(EnceladusLabel) openspace.removeSceneGraphNode(Enceladus) - - openspace.spice.unloadKernel(kernel.sat441) end) asset.export(Enceladus) @@ -99,10 +93,9 @@ asset.export(EnceladusLabel) asset.meta = { - Name = "Enceladus", - Version = "1.1", - Description = "Enceladus globe with labels and map layers", - Author = "OpenSpace Team", - URL = "http://openspaceproject.com", - License = "MIT license" + Name = "Enceladus", + Description = "Enceladus globe with labels and map layers", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" } diff --git a/data/assets/scene/solarsystem/planets/saturn/enceladus/layers/base_layers.asset b/data/assets/scene/solarsystem/planets/saturn/enceladus/layers/base_layers.asset new file mode 100644 index 0000000000..724b343c6a --- /dev/null +++ b/data/assets/scene/solarsystem/planets/saturn/enceladus/layers/base_layers.asset @@ -0,0 +1,11 @@ +asset.require("./colorlayers/enceladus_texture", false) + + + +asset.meta = { + Name = "Base Enceladus Layers", + Description = "Base Enceladus layers are: Enceladus Texture", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/saturn/enceladus/layers/colorlayers/enceladus_texture.asset b/data/assets/scene/solarsystem/planets/saturn/enceladus/layers/colorlayers/enceladus_texture.asset index 1cd5ccc633..6455680049 100644 --- a/data/assets/scene/solarsystem/planets/saturn/enceladus/layers/colorlayers/enceladus_texture.asset +++ b/data/assets/scene/solarsystem/planets/saturn/enceladus/layers/colorlayers/enceladus_texture.asset @@ -2,7 +2,7 @@ local globe = asset.require("../../enceladus") -local texturesPath = asset.syncedResource({ +local texturesPath = asset.resource({ Name = "Enceladus textures", Type = "HttpSynchronization", Identifier = "enceladus_textures", @@ -13,7 +13,9 @@ local texturesPath = asset.syncedResource({ local Layer = { Identifier = "Texture", FilePath = texturesPath .. "enceladus.jpg", - Enabled = asset.enabled + Enabled = asset.enabled, + ZIndex = 5, + CacheSettings = { Enabled = false } } @@ -31,7 +33,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Enceladus Texture", - Version = "1.0", Description = "Default jpg texture for Enceladus", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/saturn/enceladus/layers/colorlayers/global_mosaic_100m_hpf_newyork.asset b/data/assets/scene/solarsystem/planets/saturn/enceladus/layers/colorlayers/global_mosaic_100m_hpf_newyork.asset index 2f886bfc0e..cf02e17ed4 100644 --- a/data/assets/scene/solarsystem/planets/saturn/enceladus/layers/colorlayers/global_mosaic_100m_hpf_newyork.asset +++ b/data/assets/scene/solarsystem/planets/saturn/enceladus/layers/colorlayers/global_mosaic_100m_hpf_newyork.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "Global_Mosaic_100m_HPF_NewYork", Name = "Cassini Global Mosaic 100m HPF [New York]", Enabled = asset.enabled, - FilePath = asset.localResource("global_mosaic_100m_hpf_newyork.wms"), + ZIndex = 10, + FilePath = asset.resource("global_mosaic_100m_hpf_newyork.wms"), Description = [[This mosaic represents the completion of a global control network of Enceladus containing Cassini Imaging Science Subsystem (ISS) images. A total of 586 images in CLR, GRN, UV3, and IR3 filters were selected for the control @@ -30,7 +31,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Cassini Global Mosaic 100m HPF [New York]", - Version = "1.0", Description = [[Cassini Global mosaic for Enceladus. This map is hosted on the OpenSpace server in New York]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/saturn/enceladus/layers/colorlayers/global_mosaic_100m_hpf_sweden.asset b/data/assets/scene/solarsystem/planets/saturn/enceladus/layers/colorlayers/global_mosaic_100m_hpf_sweden.asset index fbfdbb5193..cc30aea493 100644 --- a/data/assets/scene/solarsystem/planets/saturn/enceladus/layers/colorlayers/global_mosaic_100m_hpf_sweden.asset +++ b/data/assets/scene/solarsystem/planets/saturn/enceladus/layers/colorlayers/global_mosaic_100m_hpf_sweden.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "Global_Mosaic_100m_HPF_Sweden", Name = "Cassini Global Mosaic 100m HPF [Sweden]", Enabled = asset.enabled, - FilePath = asset.localResource("global_mosaic_100m_hpf_sweden.wms"), + ZIndex = 10, + FilePath = asset.resource("global_mosaic_100m_hpf_sweden.wms"), Description = [[This mosaic represents the completion of a global control network of Enceladus containing Cassini Imaging Science Subsystem (ISS) images. A total of 586 images in CLR, GRN, UV3, and IR3 filters were selected for the control @@ -30,7 +31,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Cassini Global Mosaic 100m HPF [Sweden]", - Version = "1.0", Description = [[Cassini Global mosaic for Enceladus. This map is hosted on the OpenSpace server in Sweden]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/saturn/enceladus/layers/newyork_layers.asset b/data/assets/scene/solarsystem/planets/saturn/enceladus/layers/newyork_layers.asset new file mode 100644 index 0000000000..b9f0fc57fc --- /dev/null +++ b/data/assets/scene/solarsystem/planets/saturn/enceladus/layers/newyork_layers.asset @@ -0,0 +1,16 @@ +asset.require("./base_layers", false) +asset.require("./colorlayers/global_mosaic_100m_hpf_newyork", asset.enabled) + + + +asset.meta = { + Name = "Default Enceladus Layers (New York)", + Description = [[Default Enceladus layers are: Enceladus Texture, + and Cassini Global Mosaic 100m HPF. + + Layers only loaded from the New York server + ]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/saturn/enceladus/layers/sweden_layers.asset b/data/assets/scene/solarsystem/planets/saturn/enceladus/layers/sweden_layers.asset new file mode 100644 index 0000000000..c8b293402c --- /dev/null +++ b/data/assets/scene/solarsystem/planets/saturn/enceladus/layers/sweden_layers.asset @@ -0,0 +1,16 @@ +asset.require("./base_layers", false) +asset.require("./colorlayers/global_mosaic_100m_hpf_sweden", asset.enabled) + + + +asset.meta = { + Name = "Default Enceladus Layers (Sweden)", + Description = [[Default Enceladus layers are: Enceladus Texture, + and Cassini Global Mosaic 100m HPF. + + Layers only loaded from the Sweden server + ]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/saturn/enceladus/trail.asset b/data/assets/scene/solarsystem/planets/saturn/enceladus/trail.asset index e518227623..9cfd1ceca5 100644 --- a/data/assets/scene/solarsystem/planets/saturn/enceladus/trail.asset +++ b/data/assets/scene/solarsystem/planets/saturn/enceladus/trail.asset @@ -1,5 +1,6 @@ local transforms = asset.require("../transforms") -local kernel = asset.require("../kernels") +local kernels = asset.require("../kernels") +local coreKernels = asset.require("spice/core") @@ -10,8 +11,8 @@ local EnceladusTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "ENCELADUS", - Observer = "SATURN BARYCENTER" + Target = kernels.ID.Enceladus, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 33.0 / 24.0, @@ -27,15 +28,11 @@ local EnceladusTrail = { asset.onInitialize(function() - openspace.spice.loadKernel(kernel.sat441) - openspace.addSceneGraphNode(EnceladusTrail) end) asset.onDeinitialize(function() openspace.removeSceneGraphNode(EnceladusTrail) - - openspace.spice.unloadKernel(kernel.sat441) end) asset.export(EnceladusTrail) @@ -44,8 +41,7 @@ asset.export(EnceladusTrail) asset.meta = { Name = "Enceladus Trail", - Version = "1.1", - Description = "Trail for Enceladus. Data from NASA Spice (see base spice asset)", + Description = "Trail for Enceladus", Author = "OpenSpace Team", URL = "http://openspaceproject.com", License = "MIT license" diff --git a/data/assets/scene/solarsystem/planets/saturn/hyperion/hyperion.asset b/data/assets/scene/solarsystem/planets/saturn/hyperion/hyperion.asset index 3652eef7fc..e2915d5ea4 100644 --- a/data/assets/scene/solarsystem/planets/saturn/hyperion/hyperion.asset +++ b/data/assets/scene/solarsystem/planets/saturn/hyperion/hyperion.asset @@ -1,10 +1,11 @@ asset.require("./trail") local transforms = asset.require("../transforms") -local kernel = asset.require("../kernels") +local kernels = asset.require("../kernels") +local coreKernels = asset.require("spice/core") -local labelsPath = asset.syncedResource({ +local labelsPath = asset.resource({ Name = "Saturn Labels", Type = "HttpSynchronization", Identifier = "saturn_labels", @@ -18,19 +19,15 @@ local Hyperion = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "HYPERION", - Observer = "SATURN BARYCENTER" + Target = kernels.ID.Hyperion, + Observer = coreKernels.ID.SaturnBarycenter } - --[[ - The IAU report does not give an orientation model for Hyperion. - Hyperion's rotation is chaotic and not predictable for long periods. - ]]-- + -- The IAU report does not give an orientation model for Hyperion. + -- Hyperion's rotation is chaotic and not predictable for long periods. }, Renderable = { Type = "RenderableGlobe", Radii = { 360200, 266000, 205400 }, - SegmentsPerPatch = 64, - Layers = {}, Labels = { -- @TODO (2021-05-21, emmbr26) These labels do not seem to be visible Enabled = false, @@ -55,8 +52,8 @@ local HyperionLabel = { Identifier = "HyperionLabel", Parent = Hyperion.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Hyperion", FontSize = 70.0, Size = 6.2, @@ -78,8 +75,6 @@ local HyperionLabel = { asset.onInitialize(function() - openspace.spice.loadKernel(kernel.sat441) - openspace.addSceneGraphNode(Hyperion) openspace.addSceneGraphNode(HyperionLabel) end) @@ -87,8 +82,6 @@ end) asset.onDeinitialize(function() openspace.removeSceneGraphNode(HyperionLabel) openspace.removeSceneGraphNode(Hyperion) - - openspace.spice.unloadKernel(kernel.sat441) end) asset.export(Hyperion) @@ -98,7 +91,6 @@ asset.export(HyperionLabel) asset.meta = { Name = "Hyperion", - Version = "1.1", Description = "Hyperion globe with labels", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/saturn/hyperion/trail.asset b/data/assets/scene/solarsystem/planets/saturn/hyperion/trail.asset index 5957e218b1..29260a58e8 100644 --- a/data/assets/scene/solarsystem/planets/saturn/hyperion/trail.asset +++ b/data/assets/scene/solarsystem/planets/saturn/hyperion/trail.asset @@ -1,5 +1,6 @@ local transforms = asset.require("../transforms") -local kernel = asset.require("../kernels") +local kernels = asset.require("../kernels") +local coreKernels = asset.require("spice/core") @@ -10,14 +11,19 @@ local HyperionTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "HYPERION", - Observer = "SATURN BARYCENTER" + Target = kernels.ID.Hyperion, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 21.276, Resolution = 1000 }, - Tag = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", "moonTrail_major_saturn" }, + Tag = { + "moonTrail_solarSystem", + "moonTrail_giants", + "moonTrail_saturn", + "moonTrail_major_saturn" + }, GUI = { Name = "Hyperion Trail", Path = "/Solar System/Planets/Saturn/Major Moons/Hyperion" @@ -26,15 +32,11 @@ local HyperionTrail = { asset.onInitialize(function() - openspace.spice.loadKernel(kernel.sat441) - openspace.addSceneGraphNode(HyperionTrail) end) asset.onDeinitialize(function() openspace.removeSceneGraphNode(HyperionTrail) - - openspace.spice.unloadKernel(kernel.sat441) end) asset.export(HyperionTrail) @@ -43,9 +45,7 @@ asset.export(HyperionTrail) asset.meta = { Name = "Hyperion Trail", - Version = "1.1", - Description = [[Trail of Saturn's moon Hyperion as observed by Saturn. Data from NASA - Spice (see base spice asset)]], + Description = "Trail of Saturn's moon Hyperion as observed by Saturn", Author = "OpenSpace Team", URL = "http://openspaceproject.com", License = "MIT license" diff --git a/data/assets/scene/solarsystem/planets/saturn/iapetus/default_layers.asset b/data/assets/scene/solarsystem/planets/saturn/iapetus/default_layers.asset index 1085f92655..bcfecdf163 100644 --- a/data/assets/scene/solarsystem/planets/saturn/iapetus/default_layers.asset +++ b/data/assets/scene/solarsystem/planets/saturn/iapetus/default_layers.asset @@ -4,7 +4,6 @@ asset.require("./layers/colorlayers/iapetus_texture", true) asset.meta = { Name = "Default Iapetus Layers", - Version = "1.0", Description = "Default Iapetus layers are: Iapetus Texture", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/saturn/iapetus/iapetus.asset b/data/assets/scene/solarsystem/planets/saturn/iapetus/iapetus.asset index c8ac165115..e9a51fc40a 100644 --- a/data/assets/scene/solarsystem/planets/saturn/iapetus/iapetus.asset +++ b/data/assets/scene/solarsystem/planets/saturn/iapetus/iapetus.asset @@ -1,10 +1,11 @@ asset.require("./trail") local transforms = asset.require("../transforms") -local kernel = asset.require("../kernels") +local kernels = asset.require("../kernels") +local coreKernels = asset.require("spice/core") -local labelsPath = asset.syncedResource({ +local labelsPath = asset.resource({ Name = "Saturn Labels", Type = "HttpSynchronization", Identifier = "saturn_labels", @@ -18,20 +19,18 @@ local Iapetus = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "IAPETUS", - Observer = "SATURN BARYCENTER" + Target = kernels.ID.Iapetus, + Observer = coreKernels.ID.SaturnBarycenter }, Rotation = { Type = "SpiceRotation", - SourceFrame = "IAU_IAPETUS", - DestinationFrame = "GALACTIC" + SourceFrame = kernels.Frame.Iapetus, + DestinationFrame = coreKernels.Frame.Galactic } }, Renderable = { Type = "RenderableGlobe", Radii = 734000, - SegmentsPerPatch = 64, - Layers = {}, Labels = { Enabled = false, FileName = labelsPath .. "iapetus.labels", @@ -48,8 +47,7 @@ local Iapetus = { Tag = { "moon_solarSystem", "moon_giants", "moon_saturn", "moon_major_saturn" }, GUI = { Name = "Iapetus", - Path = "/Solar System/Planets/Saturn/Major Moons/Iapetus", - Description = "Third largest moon of Saturn" + Path = "/Solar System/Planets/Saturn/Major Moons/Iapetus" } } @@ -57,8 +55,8 @@ local IapetusLabel = { Identifier = "IapetusLabel", Parent = Iapetus.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Iapetus", FontSize = 70.0, Size = 6.2, @@ -73,15 +71,12 @@ local IapetusLabel = { Tag = { "solarsystem_labels", "moon_labels", "major_moon_labels" }, GUI = { Name = "Iapetus Label", - Path = "/Solar System/Planets/Saturn/Major Moons/Iapetus", - Description = "Label for Saturn's moon Iapetus" + Path = "/Solar System/Planets/Saturn/Major Moons/Iapetus" } } asset.onInitialize(function() - openspace.spice.loadKernel(kernel.sat441) - openspace.addSceneGraphNode(Iapetus) openspace.addSceneGraphNode(IapetusLabel) end) @@ -89,8 +84,6 @@ end) asset.onDeinitialize(function() openspace.removeSceneGraphNode(IapetusLabel) openspace.removeSceneGraphNode(Iapetus) - - openspace.spice.unloadKernel(kernel.sat441) end) asset.export(Iapetus) @@ -99,10 +92,9 @@ asset.export(IapetusLabel) asset.meta = { - Name = "Iapetus", - Version = "1.0", - Description = "Iapetus globe with labels", - Author = "OpenSpace Team", - URL = "http://openspaceproject.com", - License = "MIT license" + Name = "Iapetus", + Description = "Iapetus globe with labels", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" } diff --git a/data/assets/scene/solarsystem/planets/saturn/iapetus/layers/colorlayers/iapetus_texture.asset b/data/assets/scene/solarsystem/planets/saturn/iapetus/layers/colorlayers/iapetus_texture.asset index 842d15cc5b..c553c60b49 100644 --- a/data/assets/scene/solarsystem/planets/saturn/iapetus/layers/colorlayers/iapetus_texture.asset +++ b/data/assets/scene/solarsystem/planets/saturn/iapetus/layers/colorlayers/iapetus_texture.asset @@ -2,7 +2,7 @@ local globe = asset.require("../../iapetus") -local texturesPath = asset.syncedResource({ +local texturesPath = asset.resource({ Name = "Iapetus textures", Type = "HttpSynchronization", Identifier = "iapetus_textures", @@ -13,7 +13,9 @@ local texturesPath = asset.syncedResource({ local layer = { Identifier = "Texture", FilePath = texturesPath .. "iapetus.jpg", - Enabled = asset.enabled + Enabled = asset.enabled, + ZIndex = 5, + CacheSettings = { Enabled = false } } @@ -31,7 +33,6 @@ asset.export("layer", layer) asset.meta = { Name = "Iapetus Texutre", - Version = "1.0", Description = "Default jpg texture for Iapetus", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/saturn/iapetus/trail.asset b/data/assets/scene/solarsystem/planets/saturn/iapetus/trail.asset index 4b67b96bbf..1ced8f0d38 100644 --- a/data/assets/scene/solarsystem/planets/saturn/iapetus/trail.asset +++ b/data/assets/scene/solarsystem/planets/saturn/iapetus/trail.asset @@ -1,5 +1,6 @@ local transforms = asset.require("../transforms") -local kernel = asset.require("../kernels") +local kernels = asset.require("../kernels") +local coreKernels = asset.require("spice/core") @@ -10,8 +11,8 @@ local IapetusTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "IAPETUS", - Observer = "SATURN BARYCENTER" + Target = kernels.ID.Iapetus, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 79.0, @@ -27,15 +28,11 @@ local IapetusTrail = { asset.onInitialize(function() - openspace.spice.loadKernel(kernel.sat441) - openspace.addSceneGraphNode(IapetusTrail) end) asset.onDeinitialize(function() openspace.removeSceneGraphNode(IapetusTrail) - - openspace.spice.unloadKernel(kernel.sat441) end) asset.export(IapetusTrail) @@ -44,8 +41,7 @@ asset.export(IapetusTrail) asset.meta = { Name = "Iapetus Trail", - Version = "1.1", - Description = "Main trail for Iapetus. Data from NASA Spice (see base spice asset)", + Description = "Main trail for Iapetus", Author = "OpenSpace Team", URL = "http://openspaceproject.com", License = "MIT license" diff --git a/data/assets/scene/solarsystem/planets/saturn/kernels.asset b/data/assets/scene/solarsystem/planets/saturn/kernels.asset index 5a659764a9..f64cc6d7fd 100644 --- a/data/assets/scene/solarsystem/planets/saturn/kernels.asset +++ b/data/assets/scene/solarsystem/planets/saturn/kernels.asset @@ -1,4 +1,8 @@ -local kernels = asset.syncedResource({ +local coreKernels = asset.require("spice/core") + + + +local kernels = asset.resource({ Name = "Saturn Spice Kernels", Type = "HttpSynchronization", Identifier = "saturn_kernels", @@ -6,15 +10,48 @@ local kernels = asset.syncedResource({ }) -asset.export("sat415", kernels .. "sat415.bsp") -asset.export("sat441", kernels .. "sat441.bsp") -asset.export("sat452", kernels .. "sat452.bsp") +local ID = { + Calypso = "CALYPSO", + Dione = "DIONE", + Enceladus = "ENCELADUS", + Helene = "HELENE", + Hyperion = "HYPERION", + Iapetus = "IAPETUS", + Mimas = "MIMAS", + Phoebe = "PHOEBE", + Polydeuces = "POLYDEUCES", + Rhea = "RHEA", + Tethys = "TETHYS", + Titan = "TITAN" +} + +local Frame = { + Calypso = coreKernels.Frame.Calypso, + Dione = coreKernels.Frame.Dione, + Enceladus = coreKernels.Frame.Enceladus, + Iapetus = coreKernels.Frame.Iapetus, + Mimas = coreKernels.Frame.Mimas, + Rhea = coreKernels.Frame.Rhea, + Tethys = coreKernels.Frame.Tethys, + Titan = coreKernels.Frame.Titan +} + + +asset.onInitialize(function() + openspace.spice.loadKernel(kernels .. "sat441.bsp") +end) + +asset.onDeinitialize(function() + openspace.spice.unloadKernel(kernels .. "sat441.bsp") +end) + +asset.export("ID", ID) +asset.export("Frame", Frame) asset.meta = { Name = "Saturn Spice Kernels", - Version = "1.0", Description = "Generic SPICE kernels for Saturn", Author = "OpenSpace Team", URL = "https://naif.jpl.nasa.gov/pub/naif/pds/wgc/kernels/spk/", diff --git a/data/assets/scene/solarsystem/planets/saturn/kernels415.asset b/data/assets/scene/solarsystem/planets/saturn/kernels415.asset new file mode 100644 index 0000000000..7b0890c505 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/saturn/kernels415.asset @@ -0,0 +1,58 @@ +local coreKernels = asset.require("spice/core") + + + +local kernels = asset.resource({ + Name = "Saturn Spice Kernels", + Type = "HttpSynchronization", + Identifier = "saturn_kernels", + Version = 2 +}) + + +local ID = { + Aegaeon = "AEGAEON", + Anthe = "ANTHE", + Atlas = "ATLAS", + Daphnis = "DAPHNIS", + Epimetheus = "EPIMETHEUS", + Janus = "JANUS", + Methone = "METHONE", + Pallene = "PALLENE", + Pan = "PAN", + Pandora = "PANDORA", + Prometheus = "PROMETHEUS", + Telesto = "TELESTO", +} + +local Frame = { + Atlas = coreKernels.Frame.Atlas, + Epimetheus = coreKernels.Frame.Epimetheus, + Janus = coreKernels.Frame.Janus, + Pan = coreKernels.Frame.Pan, + Pandora = coreKernels.Frame.Pandora, + Prometheus = coreKernels.Frame.Prometheus, + Telesto = coreKernels.Frame.Telesto +} + + +asset.onInitialize(function() + openspace.spice.loadKernel(kernels .. "sat415.bsp") +end) + +asset.onDeinitialize(function() + openspace.spice.unloadKernel(kernels .. "sat415.bsp") +end) + +asset.export("ID", ID) +asset.export("Frame", Frame) + + + +asset.meta = { + Name = "Saturn Spice Kernels", + Description = "Generic SPICE kernels for Saturn", + Author = "OpenSpace Team", + URL = "https://naif.jpl.nasa.gov/pub/naif/pds/wgc/kernels/spk/", + License = "NASA" +} diff --git a/data/assets/scene/solarsystem/planets/saturn/kernels452.asset b/data/assets/scene/solarsystem/planets/saturn/kernels452.asset new file mode 100644 index 0000000000..21a670287c --- /dev/null +++ b/data/assets/scene/solarsystem/planets/saturn/kernels452.asset @@ -0,0 +1,90 @@ +local kernels = asset.resource({ + Name = "Saturn Spice Kernels", + Type = "HttpSynchronization", + Identifier = "saturn_kernels", + Version = 2 +}) + + +local ID = { + Aegir = "AEGIR", + Albiorix = "ALBIORIX", + Alvaldi = 665, + Angrboda = 655, + Bebhionn = "BEBHIONN", + Beli = 661, + Bergelmir = "BERGELMIR", + Bestla = "BESTLA", + Eggther = 659, + Erriapus = "ERRIAPUS", + Farbauti = "FARBAUTI", + Fenrir = "FENRIR", + Fornjot = "FORNJOT", + Geirrod = 666, + Gerd = 657, + Greip = "GREIP", + Gridr = 654, + Gunnlod = 662, + Hati = "HATI", + Hyrrokkin = "HYRROKKIN", + Ijiraq = "IJIRAQ", + Jarnsaxa = "JARNSAXA", + Kari = "KARI", + Kiviuq = "KIVIUQ", + Loge = "LOGE", + Mundilfari = "MUNDILFARI", + Narvi = "NARVI", + Paaliaq = "PAALIAQ", + S2004S7 = 65085, + S2004S12 = 65086, + S2004S13 = 65087, + S2004S17 = 65088, + S2004S21 = 65079, + S2004S24 = 65070, + S2004S26 = 658, + S2004S28 = 65077, + S2004S29 = 660, + S2004S31 = 65067, + S2004S34 = 664, + S2004S36 = 65081, + S2004S37 = 65082, + S2004S39 = 65084, + S2006S1 = 65089, + S2006S3 = 65090, + S2007S2 = 65091, + S2007S3 = 65092, + S2019S01 = 65093, + Siarnaq = "SIARNAQ", + Skadi = 627, + Skathi = "SKATHI", + Skoll = "SKOLL", + Skrymir = 656, + Suttungr = "SUTTUNGR", + Surtur = 648, + Tarqeq = "TARQEQ", + Tarvos = "TARVOS", + Thiazzi = 663, + Thrymr = "THRYMR", + Ymir = "YMIR", +} + + +asset.onInitialize(function() + openspace.spice.loadKernel(kernels .. "sat452.bsp") +end) + +asset.onDeinitialize(function() + openspace.spice.unloadKernel(kernels .. "sat452.bsp") +end) + +asset.export("ID", ID) + + + +asset.meta = { + Name = "Saturn Spice Kernels", + Description = "Generic SPICE kernels for Saturn", + Author = "OpenSpace Team", + URL = "https://naif.jpl.nasa.gov/pub/naif/pds/wgc/kernels/spk/", + License = "NASA" +} diff --git a/data/assets/scene/solarsystem/planets/saturn/layers/colorlayers/saturn_texture.asset b/data/assets/scene/solarsystem/planets/saturn/layers/colorlayers/saturn_texture.asset index 53ad4d9cb0..0bbcb2835b 100644 --- a/data/assets/scene/solarsystem/planets/saturn/layers/colorlayers/saturn_texture.asset +++ b/data/assets/scene/solarsystem/planets/saturn/layers/colorlayers/saturn_texture.asset @@ -2,7 +2,7 @@ local globe = asset.require("../../saturn") -local texturesPath = asset.syncedResource({ +local texturesPath = asset.resource({ Type = "HttpSynchronization", Name = "Saturn textures", Identifier = "saturn_textures", @@ -13,7 +13,9 @@ local texturesPath = asset.syncedResource({ local Layer = { Identifier = "Texture", FilePath = texturesPath .. "saturn.jpg", - Enabled = asset.enabled + Enabled = asset.enabled, + ZIndex = 5, + CacheSettings = { Enabled = false } } @@ -31,7 +33,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Saturn Texutre", - Version = "1.0", Description = "Default jpg texture for Saturn", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/saturn/major_moons.asset b/data/assets/scene/solarsystem/planets/saturn/major_moons.asset index 55dc4dd87e..5f2058fde1 100644 --- a/data/assets/scene/solarsystem/planets/saturn/major_moons.asset +++ b/data/assets/scene/solarsystem/planets/saturn/major_moons.asset @@ -14,11 +14,11 @@ local SaturnMajorMoonsOn = { Identifier = "os.solarsystem.SaturnMajorMoonsOn", Name = "Turn ON major moons and trails", Command = [[ - local trails = openspace.getProperty("{moonTrail_major_saturn}.Renderable.Enabled") - local trails_fade = openspace.getProperty("{moonTrail_major_saturn}.Renderable.Fade") + local trails = openspace.property("{moonTrail_major_saturn}.Renderable.Enabled") + local trails_fade = openspace.property("{moonTrail_major_saturn}.Renderable.Fade") - local moons = openspace.getProperty("{moon_major_saturn}.Renderable.Enabled") - local moons_fade = openspace.getProperty("{moon_major_saturn}.Renderable.Fade") + local moons = openspace.property("{moon_major_saturn}.Renderable.Enabled") + local moons_fade = openspace.property("{moon_major_saturn}.Renderable.Fade") for i, v in pairs(trails_fade) do openspace.setPropertyValueSingle(trails[i], true) @@ -32,18 +32,18 @@ local SaturnMajorMoonsOn = { ]], Documentation = "Turn ON Saturn's major moons and their trails", GuiPath = "/Solar System/Saturn", - IsLocal = true + IsLocal = false } local SaturnMajorMoonsOff = { Identifier = "os.solarsystem.SaturnMajorMoonsOff", Name = "Turn OFF majors moon and trails", Command = [[ - local trails = openspace.getProperty("{moonTrail_major_saturn}.Renderable.Enabled") - local trails_fade = openspace.getProperty("{moonTrail_major_saturn}.Renderable.Fade") + local trails = openspace.property("{moonTrail_major_saturn}.Renderable.Enabled") + local trails_fade = openspace.property("{moonTrail_major_saturn}.Renderable.Fade") - local moons = openspace.getProperty("{moon_major_saturn}.Renderable.Enabled") - local moons_fade = openspace.getProperty("{moon_major_saturn}.Renderable.Fade") + local moons = openspace.property("{moon_major_saturn}.Renderable.Enabled") + local moons_fade = openspace.property("{moon_major_saturn}.Renderable.Fade") for i, v in pairs(trails_fade) do openspace.setPropertyValueSingle( @@ -67,7 +67,7 @@ local SaturnMajorMoonsOff = { ]], Documentation = "Turn OFF Saturn's major moons and their trails", GuiPath = "/Solar System/Saturn", - IsLocal = true + IsLocal = false } @@ -88,7 +88,6 @@ asset.export("SaturnMajorMoonsOff", SaturnMajorMoonsOff.Identifier) asset.meta = { Name = "Saturn Major Moons", - Version = "1.1", Description = [[Meta asset containing Saturn's major moons: Dione, Enceladus, Hyperion, Iapetus, Mimas, Rhea, Tethys, and Titan]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/planets/saturn/mimas/default_layers.asset b/data/assets/scene/solarsystem/planets/saturn/mimas/default_layers.asset index 28f7f3af64..af6b72fbe1 100644 --- a/data/assets/scene/solarsystem/planets/saturn/mimas/default_layers.asset +++ b/data/assets/scene/solarsystem/planets/saturn/mimas/default_layers.asset @@ -4,7 +4,6 @@ asset.require("./layers/colorlayers/mimas_texture", true) asset.meta = { Name = "Default Mimas Layers", - Version = "1.0", Description = "Default Mimas layers are: Mimas Texture", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/saturn/mimas/layers/colorlayers/mimas_texture.asset b/data/assets/scene/solarsystem/planets/saturn/mimas/layers/colorlayers/mimas_texture.asset index fc2feae315..1ee305fe18 100644 --- a/data/assets/scene/solarsystem/planets/saturn/mimas/layers/colorlayers/mimas_texture.asset +++ b/data/assets/scene/solarsystem/planets/saturn/mimas/layers/colorlayers/mimas_texture.asset @@ -2,7 +2,7 @@ local globe = asset.require("../../mimas") -local texturesPath = asset.syncedResource({ +local texturesPath = asset.resource({ Name = "Mimas textures", Type = "HttpSynchronization", Identifier = "mimas_textures", @@ -13,7 +13,9 @@ local texturesPath = asset.syncedResource({ local Layer = { Identifier = "Texture", FilePath = texturesPath .. "mimas.jpg", - Enabled = asset.enabled + Enabled = asset.enabled, + ZIndex = 5, + CacheSettings = { Enabled = false } } @@ -31,7 +33,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Mimas Texutre", - Version = "1.0", Description = "Default jpg texture for Mimas", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/saturn/mimas/mimas.asset b/data/assets/scene/solarsystem/planets/saturn/mimas/mimas.asset index 36aad15d4c..2f6c3ade12 100644 --- a/data/assets/scene/solarsystem/planets/saturn/mimas/mimas.asset +++ b/data/assets/scene/solarsystem/planets/saturn/mimas/mimas.asset @@ -1,10 +1,11 @@ asset.require("./trail") local transforms = asset.require("../transforms") -local kernel = asset.require("../kernels") +local kernels = asset.require("../kernels") +local coreKernels = asset.require("spice/core") -local labelsPath = asset.syncedResource({ +local labelsPath = asset.resource({ Name = "Saturn Labels", Type = "HttpSynchronization", Identifier = "saturn_labels", @@ -18,20 +19,18 @@ local Mimas = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "MIMAS", - Observer = "SATURN BARYCENTER" + Target = kernels.ID.Mimas, + Observer = coreKernels.ID.SaturnBarycenter }, Rotation = { Type = "SpiceRotation", - SourceFrame = "IAU_MIMAS", - DestinationFrame = "GALACTIC" + SourceFrame = kernels.Frame.Mimas, + DestinationFrame = coreKernels.Frame.Galactic } }, Renderable = { Type = "RenderableGlobe", Radii = { 207000, 197000, 191000 }, - SegmentsPerPatch = 64, - Layers = { }, Labels = { Enabled = false, FileName = labelsPath .. "mimas.labels", @@ -57,8 +56,8 @@ local MimasLabel = { Identifier = "MimasLabel", Parent = Mimas.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Mimas", FontSize = 70.0, Size = 6.0, @@ -80,8 +79,6 @@ local MimasLabel = { asset.onInitialize(function() - openspace.spice.loadKernel(kernel.sat441) - openspace.addSceneGraphNode(Mimas) openspace.addSceneGraphNode(MimasLabel) end) @@ -89,8 +86,6 @@ end) asset.onDeinitialize(function() openspace.removeSceneGraphNode(MimasLabel) openspace.removeSceneGraphNode(Mimas) - - openspace.spice.unloadKernel(kernel.sat441) end) asset.export(Mimas) @@ -100,7 +95,6 @@ asset.export(MimasLabel) asset.meta = { Name = "Mimas", - Version = "1.1", Description = "Mimas globe with labels", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/saturn/mimas/trail.asset b/data/assets/scene/solarsystem/planets/saturn/mimas/trail.asset index 72c60acddf..bc58f63adf 100644 --- a/data/assets/scene/solarsystem/planets/saturn/mimas/trail.asset +++ b/data/assets/scene/solarsystem/planets/saturn/mimas/trail.asset @@ -1,5 +1,6 @@ local transforms = asset.require("../transforms") -local kernel = asset.require("../kernels") +local kernels = asset.require("../kernels") +local coreKernels = asset.require("spice/core") @@ -10,8 +11,8 @@ local MimasTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "MIMAS", - Observer = "SATURN BARYCENTER" + Target = kernels.ID.Mimas, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 23.0 / 24.0, @@ -27,15 +28,11 @@ local MimasTrail = { asset.onInitialize(function() - openspace.spice.loadKernel(kernel.sat441) - openspace.addSceneGraphNode(MimasTrail) end) asset.onDeinitialize(function() openspace.removeSceneGraphNode(MimasTrail) - - openspace.spice.unloadKernel(kernel.sat441) end) asset.export(MimasTrail) @@ -44,8 +41,7 @@ asset.export(MimasTrail) asset.meta = { Name = "Mimas Trail", - Version = "1.1", - Description = "Main trail for Mimas. Data from NASA Spice (see base spice asset)", + Description = "Main trail for Mimas", Author = "OpenSpace Team", URL = "http://openspaceproject.com", License = "MIT license" diff --git a/data/assets/scene/solarsystem/planets/saturn/minor/gallic_group.asset b/data/assets/scene/solarsystem/planets/saturn/minor/gallic_group.asset index 8babea3120..3767e88daa 100644 --- a/data/assets/scene/solarsystem/planets/saturn/minor/gallic_group.asset +++ b/data/assets/scene/solarsystem/planets/saturn/minor/gallic_group.asset @@ -1,5 +1,6 @@ local transforms = asset.require("../transforms") -local kernel = asset.require("../kernels") +local kernels452 = asset.require("../kernels452") +local coreKernels = asset.require("spice/core") @@ -9,15 +10,13 @@ local Albiorix = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "ALBIORIX", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Albiorix, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 32000, 32000, 32000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 32000, 32000, 32000 } }, Tag = { "moon_solarSystem", @@ -40,8 +39,8 @@ local AlbiorixTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "ALBIORIX", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Albiorix, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 774.58, @@ -51,6 +50,7 @@ local AlbiorixTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_gallic", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -64,8 +64,8 @@ local AlbiorixLabel = { Identifier = "AlbiorixLabel", Parent = Albiorix.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Albiorix", FontSize = 70.0, Size = 7.1, @@ -77,11 +77,16 @@ local AlbiorixLabel = { FadeDistances = { 1.25, 90.0 }, FadeWidths = { 0.25, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_gallic" + }, GUI = { Name = "Albiorix Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Gallic Group/Albiorix", - Description = "Label for Saturn's moon Albiorix (Gallic group)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Gallic Group/Albiorix" } } @@ -91,15 +96,13 @@ local Bebhionn = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "BEBHIONN", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Bebhionn, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 6000, 6000, 6000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 6000, 6000, 6000 } }, Tag = { "moon_solarSystem", @@ -122,8 +125,8 @@ local BebhionnTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "BEBHIONN", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Bebhionn, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 838.77, @@ -133,6 +136,7 @@ local BebhionnTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_gallic", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -146,8 +150,8 @@ local BebhionnLabel = { Identifier = "BebhionnLabel", Parent = Bebhionn.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Bebhionn", FontSize = 70.0, Size = 7.1, @@ -159,11 +163,16 @@ local BebhionnLabel = { FadeDistances = { 1.25, 90.0 }, FadeWidths = { 0.25, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_gallic" + }, GUI = { Name = "Bebhionn Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Gallic Group/Bebhionn", - Description = "Label for Saturn's moon Bebhionn (Gallic group)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Gallic Group/Bebhionn" } } @@ -173,15 +182,13 @@ local Erriapus = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "ERRIAPUS", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Erriapus, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 10000, 10000, 10000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 10000, 10000, 10000 } }, Tag = { "moon_solarSystem", @@ -204,8 +211,8 @@ local ErriapusTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "ERRIAPUS", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Erriapus, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 844.89, @@ -215,6 +222,7 @@ local ErriapusTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_gallic", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -228,8 +236,8 @@ local ErriapusLabel = { Identifier = "ErriapusLabel", Parent = Erriapus.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Erriapus", FontSize = 70.0, Size = 7.1, @@ -241,11 +249,16 @@ local ErriapusLabel = { FadeDistances = { 1.25, 90.0 }, FadeWidths = { 0.25, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_gallic" + }, GUI = { Name = "Erriapus Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Gallic Group/Erriapus", - Description = "Label for Saturn's moon Erriapus (Gallic group)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Gallic Group/Erriapus" } } @@ -255,15 +268,13 @@ local Tarvos = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "TARVOS", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Tarvos, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 15000, 15000, 15000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 15000, 15000, 15000 } }, Tag = { "moon_solarSystem", @@ -286,8 +297,8 @@ local TarvosTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "TARVOS", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Tarvos, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 944.23, @@ -297,6 +308,7 @@ local TarvosTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_gallic", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -310,8 +322,8 @@ local TarvosLabel = { Identifier = "TarvosLabel", Parent = Tarvos.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Tarvos", FontSize = 70.0, Size = 7.1, @@ -323,19 +335,21 @@ local TarvosLabel = { FadeDistances = { 1.25, 90.0 }, FadeWidths = { 0.25, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_gallic" + }, GUI = { Name = "Tarvos Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Gallic Group/Tarvos", - Description = "Label for Saturn's moon Tarvos (Gallic group)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Gallic Group/Tarvos" } } asset.onInitialize(function() - openspace.spice.loadKernel(kernel.sat452) - - openspace.addSceneGraphNode(Albiorix) openspace.addSceneGraphNode(AlbiorixTrail) openspace.addSceneGraphNode(AlbiorixLabel) @@ -369,9 +383,6 @@ asset.onDeinitialize(function() openspace.removeSceneGraphNode(AlbiorixLabel) openspace.removeSceneGraphNode(AlbiorixTrail) openspace.removeSceneGraphNode(Albiorix) - - - openspace.spice.unloadKernel(kernel.sat452) end) asset.export(Albiorix) @@ -394,7 +405,6 @@ asset.export(TarvosLabel) asset.meta = { Name = "Saturn Gallic Group Moons", - Version = "1.0", Description = [[Procedural Globe asset containing Saturn's Gallic Group moons: Albiorix, Bebhionn, Erriapus, and Tarvos. Blank globes and SPICE trails are generated for each moon]], diff --git a/data/assets/scene/solarsystem/planets/saturn/minor/inuit_group.asset b/data/assets/scene/solarsystem/planets/saturn/minor/inuit_group.asset index f5b99049eb..55403af79c 100644 --- a/data/assets/scene/solarsystem/planets/saturn/minor/inuit_group.asset +++ b/data/assets/scene/solarsystem/planets/saturn/minor/inuit_group.asset @@ -1,5 +1,6 @@ local transforms = asset.require("../transforms") -local kernel = asset.require("../kernels") +local kernels452 = asset.require("../kernels452") +local coreKernels = asset.require("spice/core") @@ -9,15 +10,13 @@ local Kiviuq = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "KIVIUQ", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Kiviuq, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 16000, 16000, 16000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 16000, 16000, 16000 } }, Tag = { "moon_solarSystem", @@ -40,8 +39,8 @@ local KiviuqTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "KIVIUQ", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Kiviuq, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 448.16, @@ -51,6 +50,7 @@ local KiviuqTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_inuit", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -64,8 +64,8 @@ local KiviuqLabel = { Identifier = "KiviuqLabel", Parent = Kiviuq.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Kiviuq", FontSize = 70.0, Size = 7.1, @@ -77,11 +77,16 @@ local KiviuqLabel = { FadeDistances = { 1.25, 90.0 }, FadeWidths = { 0.25, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_inuit" + }, GUI = { Name = "Kiviuq Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Inuit Group/Kiviuq", - Description = "Label for Saturn's moon Kiviuq (Inuit group)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Inuit Group/Kiviuq" } } @@ -91,15 +96,13 @@ local Ijiraq = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "IJIRAQ", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Ijiraq, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 12000, 12000, 12000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 12000, 12000, 12000 } }, Tag = { "moon_solarSystem", @@ -122,8 +125,8 @@ local IjiraqTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "IJIRAQ", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Ijiraq, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 451.77, @@ -133,6 +136,7 @@ local IjiraqTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_inuit", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -146,8 +150,8 @@ local IjiraqLabel = { Identifier = "IjiraqLabel", Parent = Ijiraq.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Ijiraq", FontSize = 70.0, Size = 7.1, @@ -159,11 +163,16 @@ local IjiraqLabel = { FadeDistances = { 1.25, 90.0 }, FadeWidths = { 0.25, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_inuit" + }, GUI = { Name = "Ijiraq Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Inuit Group/Ijiraq", - Description = "Label for Saturn's moon Ijiraq (Inuit group)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Inuit Group/Ijiraq" } } @@ -173,15 +182,13 @@ local Paaliaq = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "PAALIAQ", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Paaliaq, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 22000, 22000, 22000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 22000, 22000, 22000 } }, Tag = { "moon_solarSystem", @@ -204,8 +211,8 @@ local PaaliaqTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "PAALIAQ", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Paaliaq, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 692.98, @@ -215,6 +222,7 @@ local PaaliaqTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_inuit", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -228,8 +236,8 @@ local PaaliaqLabel = { Identifier = "PaaliaqLabel", Parent = Paaliaq.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Paaliaq", FontSize = 70.0, Size = 7.1, @@ -241,11 +249,16 @@ local PaaliaqLabel = { FadeDistances = { 1.25, 90.0 }, FadeWidths = { 0.25, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_inuit" + }, GUI = { Name = "Paaliaq Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Inuit Group/Paaliaq", - Description = "Label for Saturn's moon Paaliaq (Inuit group)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Inuit Group/Paaliaq" } } @@ -255,15 +268,13 @@ local Siarnaq = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "SIARNAQ", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Siarnaq, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 40000, 40000, 40000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 40000, 40000, 40000 } }, Tag = { "moon_solarSystem", @@ -286,8 +297,8 @@ local SiarnaqTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "SIARNAQ", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Siarnaq, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 884.88, @@ -297,6 +308,7 @@ local SiarnaqTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_inuit", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -310,8 +322,8 @@ local SiarnaqLabel = { Identifier = "SiarnaqLabel", Parent = Siarnaq.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Siarnaq", FontSize = 70.0, Size = 7.1, @@ -323,11 +335,16 @@ local SiarnaqLabel = { FadeDistances = { 1.25, 90.0 }, FadeWidths = { 0.25, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_inuit" + }, GUI = { Name = "Siarnaq Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Inuit Group/Siarnaq", - Description = "Label for Saturn's moon Siarnaq (Inuit group)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Inuit Group/Siarnaq" } } @@ -337,15 +354,13 @@ local Tarqeq = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "TARQEQ", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Tarqeq, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 7000, 7000, 7000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 7000, 7000, 7000 } }, Tag = { "moon_solarSystem", @@ -368,8 +383,8 @@ local TarqeqTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "TARQEQ", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Tarqeq, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 894.86, @@ -379,6 +394,7 @@ local TarqeqTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_inuit", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -392,8 +408,8 @@ local TarqeqLabel = { Identifier = "TarqeqLabel", Parent = Tarqeq.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Tarqeq", FontSize = 70.0, Size = 7.1, @@ -405,11 +421,16 @@ local TarqeqLabel = { FadeDistances = { 1.25, 90.0 }, FadeWidths = { 0.25, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_inuit" + }, GUI = { Name = "Tarqeq Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Inuit Group/Tarqeq", - Description = "Label for Saturn's moon Tarqeq (Inuit group)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Inuit Group/Tarqeq" } } @@ -419,15 +440,13 @@ local S2004S29 = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "660", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.S2004S29, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 4000, 4000, 4000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 4000, 4000, 4000 } }, Tag = { "moon_solarSystem", @@ -450,8 +469,8 @@ local S2004S29Trail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "660", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.S2004S29, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 858.77, @@ -461,6 +480,7 @@ local S2004S29Trail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_inuit", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -474,8 +494,8 @@ local S2004S29Label = { Identifier = "S2004S29Label", Parent = S2004S29.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "S/2004 S 29", FontSize = 70.0, Size = 7.1, @@ -487,11 +507,16 @@ local S2004S29Label = { FadeDistances = { 1.25, 90.0 }, FadeWidths = { 0.25, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_inuit" + }, GUI = { Name = "S/2004 S 29 Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Inuit Group/S2004S29", - Description = "Label for Saturn's moon S/2004 S 29 (Inuit group)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Inuit Group/S2004S29" } } @@ -501,15 +526,13 @@ local S2004S31 = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "65067", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.S2004S31, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 4000, 4000, 4000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 4000, 4000, 4000 } }, Tag = { "moon_solarSystem", @@ -532,8 +555,8 @@ local S2004S31Trail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "65067", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.S2004S31, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 853.80, @@ -543,6 +566,7 @@ local S2004S31Trail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_inuit", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -556,8 +580,8 @@ local S2004S31Label = { Identifier = "S2004S31Label", Parent = S2004S31.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "S/2004 S 31", FontSize = 70.0, Size = 7.1, @@ -569,11 +593,16 @@ local S2004S31Label = { FadeDistances = { 1.25, 90.0 }, FadeWidths = { 0.25, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_inuit" + }, GUI = { Name = "S/2004 S 31 Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Inuit Group/S2004S31", - Description = "Label for Saturn's moon S/2004 S 31 (Inuit group)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Inuit Group/S2004S31" } } @@ -583,15 +612,13 @@ local S2019S01 = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "65093", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.S2019S01, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 5000, 5000, 5000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 5000, 5000, 5000 } }, Tag = { "moon_solarSystem", @@ -614,8 +641,8 @@ local S2019S01Trail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "65093", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.S2019S01, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 443.78, @@ -625,6 +652,7 @@ local S2019S01Trail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_inuit", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -638,8 +666,8 @@ local S2019S01Label = { Identifier = "S2019S01Label", Parent = S2019S01.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "S/2019 S 01", FontSize = 70.0, Size = 7.1, @@ -651,19 +679,21 @@ local S2019S01Label = { FadeDistances = { 1.25, 90.0 }, FadeWidths = { 0.25, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_inuit" + }, GUI = { Name = "S/2019 S 01 Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Inuit Group/S2019S01", - Description = "Label for Saturn's moon S/2019 S 01 (Inuit group)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Inuit Group/S2019S01" } } asset.onInitialize(function() - openspace.spice.loadKernel(kernel.sat452) - - openspace.addSceneGraphNode(Kiviuq) openspace.addSceneGraphNode(KiviuqTrail) openspace.addSceneGraphNode(KiviuqLabel) @@ -729,9 +759,6 @@ asset.onDeinitialize(function() openspace.removeSceneGraphNode(KiviuqLabel) openspace.removeSceneGraphNode(KiviuqTrail) openspace.removeSceneGraphNode(Kiviuq) - - - openspace.spice.unloadKernel(kernel.sat452) end) asset.export(Kiviuq) @@ -770,7 +797,6 @@ asset.export(S2019S01Label) asset.meta = { Name = "Saturn Inuit Group Moons", - Version = "1.0", Description = [[Procedural Globe asset containing Saturn's Inuit Group moons: Kiviuq, Ijiraq, Paaliaq, Siarnaq and Tarqeq. Blank globes and SPICE trails are generated for each moon]], diff --git a/data/assets/scene/solarsystem/planets/saturn/minor/norse_group.asset b/data/assets/scene/solarsystem/planets/saturn/minor/norse_group.asset index 3a7dff2fab..9e0499b62f 100644 --- a/data/assets/scene/solarsystem/planets/saturn/minor/norse_group.asset +++ b/data/assets/scene/solarsystem/planets/saturn/minor/norse_group.asset @@ -1,5 +1,7 @@ local transforms = asset.require("../transforms") local kernels = asset.require("../kernels") +local kernels452 = asset.require("../kernels452") +local coreKernels = asset.require("spice/core") @@ -9,15 +11,13 @@ local Phoebe = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "PHOEBE", - Observer = "SATURN BARYCENTER" + Target = kernels.ID.Phoebe, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 218800, 217000, 203600 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 218800, 217000, 203600 } }, Tag = { "moon_solarSystem", @@ -40,8 +40,8 @@ local PhoebeTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "PHOEBE", - Observer = "SATURN BARYCENTER" + Target = kernels.ID.Phoebe, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 545.09, @@ -51,6 +51,7 @@ local PhoebeTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_norse", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -64,8 +65,8 @@ local PhoebeLabel = { Identifier = "PhoebeLabel", Parent = Phoebe.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Phoebe", FontSize = 70.0, Size = 7.1, @@ -77,11 +78,16 @@ local PhoebeLabel = { FadeDistances = { 1.25, 90.0 }, FadeWidths = { 0.25, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_norse" + }, GUI = { Name = "Phoebe Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/Phoebe", - Description = "Label for Saturn's moon Phoebe (Norse group)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/Phoebe" } } @@ -91,15 +97,13 @@ local Skathi = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "SKATHI", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Skathi, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 8000, 8000, 8000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 8000, 8000, 8000 } }, Tag = { "moon_solarSystem", @@ -122,8 +126,8 @@ local SkathiTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "SKATHI", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Skathi, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 732.52, @@ -133,6 +137,7 @@ local SkathiTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_norse", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -146,8 +151,8 @@ local SkathiLabel = { Identifier = "SkathiLabel", Parent = Skathi.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Skathi", FontSize = 70.0, Size = 7.1, @@ -159,11 +164,16 @@ local SkathiLabel = { FadeDistances = { 1.25, 90.0 }, FadeWidths = { 0.25, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_norse" + }, GUI = { Name = "Skathi Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/Skathi", - Description = "Label for Saturn's moon Skathi (Norse group)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/Skathi" } } @@ -173,15 +183,13 @@ local S2007S2 = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "65091", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.S2007S2, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 6000, 6000, 6000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 6000, 6000, 6000 } }, Tag = { "moon_solarSystem", @@ -204,8 +212,8 @@ local S2007S2Trail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "65091", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.S2007S2, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 792.96, @@ -215,6 +223,7 @@ local S2007S2Trail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_norse", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -228,8 +237,8 @@ local S2007S2Label = { Identifier = "S2007S2Label", Parent = S2007S2.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "S/2007 S 2", FontSize = 70.0, Size = 7.1, @@ -241,11 +250,16 @@ local S2007S2Label = { FadeDistances = { 1.25, 90.0 }, FadeWidths = { 0.25, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_norse" + }, GUI = { Name = "S/2007 S 2 Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/S2007S2", - Description = "Label for Saturn's moon S/2007 S 2 (Norse group)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/S2007S2" } } @@ -255,15 +269,13 @@ local Skoll = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "SKOLL", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Skoll, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 6000, 6000, 6000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 6000, 6000, 6000 } }, Tag = { "moon_solarSystem", @@ -286,8 +298,8 @@ local SkollTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "SKOLL", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Skoll, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 862.37, @@ -297,6 +309,7 @@ local SkollTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_norse", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -310,8 +323,8 @@ local SkollLabel = { Identifier = "SkollLabel", Parent = Skoll.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Skoll", FontSize = 70.0, Size = 7.1, @@ -323,11 +336,16 @@ local SkollLabel = { FadeDistances = { 1.25, 90.0 }, FadeWidths = { 0.25, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_norse" + }, GUI = { Name = "Skoll Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/Skoll", - Description = "Label for Saturn's moon Skoll (Norse group)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/Skoll" } } @@ -337,15 +355,13 @@ local S2004S13 = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "65087", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.S2004S13, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 2000, 2000, 2000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 2000, 2000, 2000 } }, Tag = { "moon_solarSystem", @@ -368,8 +384,8 @@ local S2004S13Trail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "65087", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.S2004S13, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 905.85, @@ -379,6 +395,7 @@ local S2004S13Trail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_norse", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -392,8 +409,8 @@ local S2004S13Label = { Identifier = "S2004S13Label", Parent = S2004S13.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "S/2004 S 13", FontSize = 70.0, Size = 7.1, @@ -405,11 +422,16 @@ local S2004S13Label = { FadeDistances = { 1.25, 90.0 }, FadeWidths = { 0.25, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_norse" + }, GUI = { Name = "S/2004 S 13 Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/S2004S13", - Description = "Label for Saturn's moon S/2004 S 13 (Norse group)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/S2004S13" } } @@ -419,15 +441,13 @@ local Greip = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "GREIP", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Greip, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 6000, 6000, 6000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 6000, 6000, 6000 } }, Tag = { "moon_solarSystem", @@ -450,8 +470,8 @@ local GreipTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "GREIP", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Greip, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 906.56, @@ -461,6 +481,7 @@ local GreipTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_norse", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -474,8 +495,8 @@ local GreipLabel = { Identifier = "GreipLabel", Parent = Greip.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Greip", FontSize = 70.0, Size = 7.1, @@ -487,11 +508,16 @@ local GreipLabel = { FadeDistances = { 1.25, 90.0 }, FadeWidths = { 0.25, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_norse" + }, GUI = { Name = "Greip Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/Greip", - Description = "Label for Saturn's moon Greip (Norse group)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/Greip" } } @@ -501,15 +527,13 @@ local Hyrrokkin = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "HYRROKKIN", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Hyrrokkin, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 8000, 8000, 8000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 8000, 8000, 8000 } }, Tag = { "moon_solarSystem", @@ -532,8 +556,8 @@ local HyrrokkinTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "HYRROKKIN", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Hyrrokkin, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 914.29, @@ -543,6 +567,7 @@ local HyrrokkinTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_norse", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -556,8 +581,8 @@ local HyrrokkinLabel = { Identifier = "HyrrokkinLabel", Parent = Hyrrokkin.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Hyrrokkin", FontSize = 70.0, Size = 7.1, @@ -569,11 +594,16 @@ local HyrrokkinLabel = { FadeDistances = { 1.25, 90.0 }, FadeWidths = { 0.25, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_norse" + }, GUI = { Name = "Hyrrokkin Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/Hyrrokkin", - Description = "Label for Saturn's moon Hyrrokkin (Norse group)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/Hyrrokkin" } } @@ -583,15 +613,13 @@ local Jarnsaxa = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "JARNSAXA", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Jarnsaxa, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 6000, 6000, 6000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 6000, 6000, 6000 } }, Tag = { "moon_solarSystem", @@ -614,8 +642,8 @@ local JarnsaxaTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "JARNSAXA", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Jarnsaxa, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 943.78, @@ -625,6 +653,7 @@ local JarnsaxaTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_norse", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -638,8 +667,8 @@ local JarnsaxaLabel = { Identifier = "JarnsaxaLabel", Parent = Jarnsaxa.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Jarnsaxa", FontSize = 70.0, Size = 7.1, @@ -651,11 +680,16 @@ local JarnsaxaLabel = { FadeDistances = { 1.25, 90.0 }, FadeWidths = { 0.25, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_norse" + }, GUI = { Name = "Jarnsaxa Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/Jarnsaxa", - Description = "Label for Saturn's moon Jarnsaxa (Norse group)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/Jarnsaxa" } } @@ -665,15 +699,13 @@ local Mundilfari = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "MUNDILFARI", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Mundilfari, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 7000, 7000, 7000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 7000, 7000, 7000 } }, Tag = { "moon_solarSystem", @@ -696,8 +728,8 @@ local MundilfariTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "MUNDILFARI", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Mundilfari, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 956.70, @@ -707,6 +739,7 @@ local MundilfariTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_norse", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -720,8 +753,8 @@ local MundilfariLabel = { Identifier = "MundilfariLabel", Parent = Mundilfari.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Mundilfari", FontSize = 70.0, Size = 7.1, @@ -733,11 +766,16 @@ local MundilfariLabel = { FadeDistances = { 1.25, 90.0 }, FadeWidths = { 0.25, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_norse" + }, GUI = { Name = "Mundilfari Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/Mundilfari", - Description = "Label for Saturn's moon Mundilfari (Norse group)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/Mundilfari" } } @@ -747,15 +785,13 @@ local S2006S1 = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "65089", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.S2006S1, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 6000, 6000, 6000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 6000, 6000, 6000 } }, Tag = { "moon_solarSystem", @@ -778,8 +814,8 @@ local S2006S1Trail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "65089", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.S2006S1, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 972.41, @@ -789,6 +825,7 @@ local S2006S1Trail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_norse", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -802,8 +839,8 @@ local S2006S1Label = { Identifier = "S2006S1Label", Parent = S2006S1.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "S/2006 S 1", FontSize = 70.0, Size = 7.1, @@ -815,11 +852,16 @@ local S2006S1Label = { FadeDistances = { 1.25, 90.0 }, FadeWidths = { 0.25, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_norse" + }, GUI = { Name = "S/2006 S 1 Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/S2006S1", - Description = "Label for Saturn's moon S/2006 S 1 (Norse group)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/S2006S1" } } @@ -829,15 +871,13 @@ local S2004S17 = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "65088", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.S2004S17, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 4000, 4000, 4000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 4000, 4000, 4000 } }, Tag = { "moon_solarSystem", @@ -860,8 +900,8 @@ local S2004S17Trail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "65088", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.S2004S17, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 985.45, @@ -871,6 +911,7 @@ local S2004S17Trail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_norse", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -884,8 +925,8 @@ local S2004S17Label = { Identifier = "S2004S17Label", Parent = S2004S17.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "S/2004 S 17", FontSize = 70.0, Size = 7.1, @@ -897,11 +938,16 @@ local S2004S17Label = { FadeDistances = { 1.25, 90.0 }, FadeWidths = { 0.25, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_norse" + }, GUI = { Name = "S/2004 S 17 Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/S2004S17", - Description = "Label for Saturn's moon S/2004 S 17 (Norse group)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/S2004S17" } } @@ -911,15 +957,13 @@ local Bergelmir = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "BERGELMIR", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Bergelmir, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 6000, 6000, 6000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 6000, 6000, 6000 } }, Tag = { "moon_solarSystem", @@ -942,8 +986,8 @@ local BergelmirTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "BERGELMIR", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Bergelmir, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 985.83, @@ -953,6 +997,7 @@ local BergelmirTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_norse", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -966,8 +1011,8 @@ local BergelmirLabel = { Identifier = "BergelmirLabel", Parent = Bergelmir.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Bergelmir", FontSize = 70.0, Size = 7.1, @@ -979,11 +1024,16 @@ local BergelmirLabel = { FadeDistances = { 1.25, 90.0 }, FadeWidths = { 0.25, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_norse" + }, GUI = { Name = "Bergelmir Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/Bergelmir", - Description = "Label for Saturn's moon Bergelmir (Norse group)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/Bergelmir" } } @@ -993,15 +1043,13 @@ local Narvi = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "NARVI", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Narvi, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 7000, 7000, 7000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 7000, 7000, 7000 } }, Tag = { "moon_solarSystem", @@ -1024,8 +1072,8 @@ local NarviTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "NARVI", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Narvi, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 1008.45, @@ -1035,6 +1083,7 @@ local NarviTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_norse", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -1048,8 +1097,8 @@ local NarviLabel = { Identifier = "NarviLabel", Parent = Narvi.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Narvi", FontSize = 70.0, Size = 7.1, @@ -1061,11 +1110,16 @@ local NarviLabel = { FadeDistances = { 1.25, 90.0 }, FadeWidths = { 0.25, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_norse" + }, GUI = { Name = "Narvi Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/Narvi", - Description = "Label for Saturn's moon Narvi (Norse group)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/Narvi" } } @@ -1075,15 +1129,13 @@ local Suttungr = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "SUTTUNGR", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Suttungr, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 7000, 7000, 7000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 7000, 7000, 7000 } }, Tag = { "moon_solarSystem", @@ -1106,8 +1158,8 @@ local SuttungrTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "SUTTUNGR", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Suttungr, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 1022.82, @@ -1117,6 +1169,7 @@ local SuttungrTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_norse", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -1130,8 +1183,8 @@ local SuttungrLabel = { Identifier = "SuttungrLabel", Parent = Suttungr.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Suttungr", FontSize = 70.0, Size = 7.1, @@ -1143,11 +1196,16 @@ local SuttungrLabel = { FadeDistances = { 1.25, 90.0 }, FadeWidths = { 0.25, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_norse" + }, GUI = { Name = "Suttungr Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/Suttungr", - Description = "Label for Saturn's moon Suttungr (Norse group)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/Suttungr" } } @@ -1157,15 +1215,13 @@ local Hati = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "HATI", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Hati, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 6000, 6000, 6000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 6000, 6000, 6000 } }, Tag = { "moon_solarSystem", @@ -1188,8 +1244,8 @@ local HatiTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "HATI", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Hati, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 1033.05, @@ -1199,6 +1255,7 @@ local HatiTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_norse", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -1212,8 +1269,8 @@ local HatiLabel = { Identifier = "HatiLabel", Parent = Hati.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Hati", FontSize = 70.0, Size = 7.1, @@ -1225,11 +1282,16 @@ local HatiLabel = { FadeDistances = { 1.25, 90.0 }, FadeWidths = { 0.25, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_norse" + }, GUI = { Name = "Hati Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/Hati", - Description = "Label for Saturn's moon Hati (Norse group)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/Hati" } } @@ -1239,15 +1301,13 @@ local S2004S12 = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "65086", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.S2004S12, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 5000, 5000, 5000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 5000, 5000, 5000 } }, Tag = { "moon_solarSystem", @@ -1270,8 +1330,8 @@ local S2004S12Trail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "65086", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.S2004S12, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 1048.54, @@ -1281,6 +1341,7 @@ local S2004S12Trail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_norse", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -1294,8 +1355,8 @@ local S2004S12Label = { Identifier = "S2004S12Label", Parent = S2004S12.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "S/2004 S 12", FontSize = 70.0, Size = 7.1, @@ -1307,11 +1368,16 @@ local S2004S12Label = { FadeDistances = { 1.25, 90.0 }, FadeWidths = { 0.25, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_norse" + }, GUI = { Name = "S/2004 S 12 Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/S2004S12", - Description = "Label for Saturn's moon S/2004 S 12 (Norse group)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/S2004S12" } } @@ -1321,15 +1387,13 @@ local Farbauti = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "FARBAUTI", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Farbauti, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 5000, 5000, 5000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 5000, 5000, 5000 } }, Tag = { "moon_solarSystem", @@ -1352,8 +1416,8 @@ local FarbautiTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "FARBAUTI", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Farbauti, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 1054.78, @@ -1363,6 +1427,7 @@ local FarbautiTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_norse", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -1376,8 +1441,8 @@ local FarbautiLabel = { Identifier = "FarbautiLabel", Parent = Farbauti.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Farbauti", FontSize = 70.0, Size = 7.1, @@ -1389,11 +1454,16 @@ local FarbautiLabel = { FadeDistances = { 1.25, 90.0 }, FadeWidths = { 0.25, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_norse" + }, GUI = { Name = "Farbauti Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/Farbauti", - Description = "Label for Saturn's moon Farbauti (Norse group)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/Farbauti" } } @@ -1403,15 +1473,13 @@ local Thrymr = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "THRYMR", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Thrymr, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 7000, 7000, 7000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 7000, 7000, 7000 } }, Tag = { "moon_solarSystem", @@ -1434,8 +1502,8 @@ local ThrymrTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "THRYMR", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Thrymr, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 1078.09, @@ -1445,6 +1513,7 @@ local ThrymrTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_norse", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -1458,8 +1527,8 @@ local ThrymrLabel = { Identifier = "ThrymrLabel", Parent = Thrymr.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Thrymr", FontSize = 70.0, Size = 7.1, @@ -1471,11 +1540,16 @@ local ThrymrLabel = { FadeDistances = { 1.25, 90.0 }, FadeWidths = { 0.25, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_norse" + }, GUI = { Name = "Thrymr Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/Thrymr", - Description = "Label for Saturn's moon Thrymr (Norse group)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/Thrymr" } } @@ -1485,15 +1559,13 @@ local Aegir = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "AEGIR", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Aegir, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 6000, 6000, 6000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 6000, 6000, 6000 } }, Tag = { "moon_solarSystem", @@ -1516,8 +1588,8 @@ local AegirTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "AEGIR", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Aegir, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 1094.46, @@ -1527,6 +1599,7 @@ local AegirTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_norse", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -1540,8 +1613,8 @@ local AegirLabel = { Identifier = "AegirLabel", Parent = Aegir.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Aegir", FontSize = 70.0, Size = 7.1, @@ -1553,11 +1626,16 @@ local AegirLabel = { FadeDistances = { 1.25, 90.0 }, FadeWidths = { 0.25, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_norse" + }, GUI = { Name = "Aegir Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/Aegir", - Description = "Label for Saturn's moon Aegir (Norse group)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/Aegir" } } @@ -1567,15 +1645,13 @@ local S2007S3 = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "65092", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.S2007S3, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 5000, 5000, 5000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 5000, 5000, 5000 } }, Tag = { "moon_solarSystem", @@ -1598,8 +1674,8 @@ local S2007S3Trail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "65092", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.S2007S3, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 1100.0, @@ -1609,6 +1685,7 @@ local S2007S3Trail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_norse", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -1622,8 +1699,8 @@ local S2007S3Label = { Identifier = "S2007S3Label", Parent = S2007S3.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "S/2007 S 3", FontSize = 70.0, Size = 7.1, @@ -1635,11 +1712,16 @@ local S2007S3Label = { FadeDistances = { 1.25, 90.0 }, FadeWidths = { 0.25, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_norse" + }, GUI = { Name = "S/2007 S 3 Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/S2007S3", - Description = "Label for Saturn's moon S/2007 S 3 (Norse group)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/S2007S3" } } @@ -1649,15 +1731,13 @@ local Bestla = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "BESTLA", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Bestla, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 7000, 7000, 7000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 7000, 7000, 7000 } }, Tag = { "moon_solarSystem", @@ -1680,8 +1760,8 @@ local BestlaTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "BESTLA", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Bestla, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 1101.45, @@ -1691,6 +1771,7 @@ local BestlaTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_norse", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -1704,8 +1785,8 @@ local BestlaLabel = { Identifier = "BestlaLabel", Parent = Bestla.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Bestla", FontSize = 70.0, Size = 7.1, @@ -1717,11 +1798,16 @@ local BestlaLabel = { FadeDistances = { 1.25, 90.0 }, FadeWidths = { 0.25, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_norse" + }, GUI = { Name = "Bestla Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/Bestla", - Description = "Label for Saturn's moon Bestla (Norse group)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/Bestla" } } @@ -1731,15 +1817,13 @@ local S2004S7 = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "65085", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.S2004S7, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 6000, 6000, 6000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 6000, 6000, 6000 } }, Tag = { "moon_solarSystem", @@ -1762,8 +1846,8 @@ local S2004S7Trail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "65085", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.S2004S7, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 1101.99, @@ -1773,6 +1857,7 @@ local S2004S7Trail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_norse", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -1786,8 +1871,8 @@ local S2004S7Label = { Identifier = "S2004S7Label", Parent = S2004S7.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "S/2004 S 7", FontSize = 70.0, Size = 7.1, @@ -1799,11 +1884,16 @@ local S2004S7Label = { FadeDistances = { 1.25, 90.0 }, FadeWidths = { 0.25, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_norse" + }, GUI = { Name = "S/2004 S 7 Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/S2004S7", - Description = "Label for Saturn's moon S/2004 S 7 (Norse group)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/S2004S7" } } @@ -1813,15 +1903,13 @@ local S2006S3 = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "65090", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.S2006S3, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 6000, 6000, 6000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 6000, 6000, 6000 } }, Tag = { "moon_solarSystem", @@ -1844,8 +1932,8 @@ local S2006S3Trail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "65090", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.S2006S3, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 1142.37, @@ -1855,6 +1943,7 @@ local S2006S3Trail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_norse", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -1868,8 +1957,8 @@ local S2006S3Label = { Identifier = "S2006S3Label", Parent = S2006S3.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "S/2006 S 3", FontSize = 70.0, Size = 7.1, @@ -1881,11 +1970,16 @@ local S2006S3Label = { FadeDistances = { 1.25, 90.0 }, FadeWidths = { 0.25, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_norse" + }, GUI = { Name = "S/2006 S 3 Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/S2006S3", - Description = "Label for Saturn's moon S/2006 S 3 (Norse group)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/S2006S3" } } @@ -1895,15 +1989,13 @@ local Fenrir = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "FENRIR", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Fenrir, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 4000, 4000, 4000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 4000, 4000, 4000 } }, Tag = { "moon_solarSystem", @@ -1926,8 +2018,8 @@ local FenrirTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "FENRIR", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Fenrir, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 1212.53, @@ -1937,6 +2029,7 @@ local FenrirTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_norse", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -1950,8 +2043,8 @@ local FenrirLabel = { Identifier = "FenrireLabel", Parent = Fenrir.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Fenrir", FontSize = 70.0, Size = 7.1, @@ -1963,11 +2056,16 @@ local FenrirLabel = { FadeDistances = { 1.25, 90.0 }, FadeWidths = { 0.25, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_norse" + }, GUI = { Name = "Fenrir Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/Fenrir", - Description = "Label for Saturn's moon Fenrir (Norse group)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/Fenrir" } } @@ -1977,15 +2075,13 @@ local Surtur = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "648", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Surtur, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 6000, 6000, 6000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 6000, 6000, 6000 } }, Tag = { "moon_solarSystem", @@ -2008,8 +2104,8 @@ local SurturTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "648", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Surtur, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 1297.7, @@ -2019,6 +2115,7 @@ local SurturTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_norse", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -2032,8 +2129,8 @@ local SurturLabel = { Identifier = "SurturLabel", Parent = Surtur.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Surtur", FontSize = 70.0, Size = 7.1, @@ -2045,11 +2142,16 @@ local SurturLabel = { FadeDistances = { 1.25, 90.0 }, FadeWidths = { 0.25, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_norse" + }, GUI = { Name = "Surtur Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/Surtur", - Description = "Label for Saturn's moon Surtur (Norse group)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/Surtur" } } @@ -2059,15 +2161,13 @@ local Kari = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "KARI", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Kari, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 7000, 7000, 7000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 7000, 7000, 7000 } }, Tag = { "moon_solarSystem", @@ -2090,8 +2190,8 @@ local KariTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "KARI", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Kari, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 1245.06, @@ -2101,6 +2201,7 @@ local KariTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_norse", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -2114,8 +2215,8 @@ local KariLabel = { Identifier = "KariLabel", Parent = Kari.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Kari", FontSize = 70.0, Size = 7.1, @@ -2127,11 +2228,16 @@ local KariLabel = { FadeDistances = { 1.25, 90.0 }, FadeWidths = { 0.25, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_norse" + }, GUI = { Name = "Kari Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/Kari", - Description = "Label for Saturn's moon Kari (Norse group)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/Kari" } } @@ -2141,15 +2247,13 @@ local Ymir = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "YMIR", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Ymir, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 18000, 18000, 18000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 18000, 18000, 18000 } }, Tag = { "moon_solarSystem", @@ -2172,8 +2276,8 @@ local YmirTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "YMIR", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Ymir, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 1254.15, @@ -2183,6 +2287,7 @@ local YmirTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_norse", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -2196,8 +2301,8 @@ local YmirLabel = { Identifier = "YmirLabel", Parent = Ymir.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Ymir", FontSize = 70.0, Size = 7.1, @@ -2209,11 +2314,16 @@ local YmirLabel = { FadeDistances = { 1.25, 90.0 }, FadeWidths = { 0.25, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_norse" + }, GUI = { Name = "Ymir Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/Ymir", - Description = "Label for Saturn's moon Ymir (Norse group)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/Ymir" } } @@ -2223,15 +2333,13 @@ local Loge = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "LOGE", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Loge, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 6000, 6000, 6000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 6000, 6000, 6000 } }, Tag = { "moon_solarSystem", @@ -2254,8 +2362,8 @@ local LogeTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "LOGE", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Loge, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 1300.95, @@ -2265,6 +2373,7 @@ local LogeTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_norse", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -2278,8 +2387,8 @@ local LogeLabel = { Identifier = "LogeLabel", Parent = Loge.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Cyllene", FontSize = 70.0, Size = 7.1, @@ -2291,11 +2400,16 @@ local LogeLabel = { FadeDistances = { 1.25, 90.0 }, FadeWidths = { 0.25, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_norse" + }, GUI = { Name = "Loge Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/Loge", - Description = "Label for Saturn's moon Loge (Norse group)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/Loge" } } @@ -2305,15 +2419,13 @@ local Fornjot = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "FORNJOT", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Fornjot, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 6000, 6000, 6000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 6000, 6000, 6000 } }, Tag = { "moon_solarSystem", @@ -2336,8 +2448,8 @@ local FornjotTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "FORNJOT", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Fornjot, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 1432.16, @@ -2347,6 +2459,7 @@ local FornjotTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_norse", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -2360,8 +2473,8 @@ local FornjotLabel = { Identifier = "FornjotLabel", Parent = Fornjot.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Fornjot", FontSize = 70.0, Size = 7.1, @@ -2373,11 +2486,16 @@ local FornjotLabel = { FadeDistances = { 1.25, 90.0 }, FadeWidths = { 0.25, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_norse" + }, GUI = { Name = "Fornjot Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/Fornjot", - Description = "Label for Saturn's moon Fornjot (Norse group)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/Fornjot" } } @@ -2387,15 +2505,13 @@ local Skadi = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "627", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Skadi, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 8000, 8000, 8000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 8000, 8000, 8000 } }, Tag = { "moon_solarSystem", @@ -2418,8 +2534,8 @@ local SkadiTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "627", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Skadi, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 728.2, @@ -2429,6 +2545,7 @@ local SkadiTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_norse", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -2442,8 +2559,8 @@ local SkadiLabel = { Identifier = "SkadiLabel", Parent = Skadi.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Skadi", FontSize = 70.0, Size = 7.1, @@ -2455,11 +2572,16 @@ local SkadiLabel = { FadeDistances = { 1.25, 90.0 }, FadeWidths = { 0.25, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_norse" + }, GUI = { Name = "Skadi Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/Skadi", - Description = "Label for Saturn's moon Skadi (Norse group)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/Skadi" } } @@ -2469,15 +2591,13 @@ local Gridr = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "654", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Gridr, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 4000, 4000, 4000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 4000, 4000, 4000 } }, Tag = { "moon_solarSystem", @@ -2500,8 +2620,8 @@ local GridrTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "654", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Gridr, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 990.23, @@ -2511,6 +2631,7 @@ local GridrTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_norse", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -2524,8 +2645,8 @@ local GridrLabel = { Identifier = "GridrLabel", Parent = Gridr.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Gridr", FontSize = 70.0, Size = 7.1, @@ -2537,11 +2658,16 @@ local GridrLabel = { FadeDistances = { 1.25, 90.0 }, FadeWidths = { 0.25, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_norse" + }, GUI = { Name = "Gridr Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/Gridr", - Description = "Label for Saturn's moon Gridr (Norse group)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/Gridr" } } @@ -2551,15 +2677,13 @@ local Angrboda = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "655", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Angrboda, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 3000, 3000, 3000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 3000, 3000, 3000 } }, Tag = { "moon_solarSystem", @@ -2582,8 +2706,8 @@ local AngrbodaTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "655", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Angrboda, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 1080.4, @@ -2593,6 +2717,7 @@ local AngrbodaTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_norse", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -2606,8 +2731,8 @@ local AngrbodaLabel = { Identifier = "AngrbodaLabel", Parent = Angrboda.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Angrboda", FontSize = 70.0, Size = 7.1, @@ -2619,11 +2744,16 @@ local AngrbodaLabel = { FadeDistances = { 1.25, 90.0 }, FadeWidths = { 0.25, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_norse" + }, GUI = { Name = "Angrboda Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/Angrboda", - Description = "Label for Saturn's moon Angrboda (Norse group)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/Angrboda" } } @@ -2633,15 +2763,13 @@ local Skrymir = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "656", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Skrymir, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 4000, 4000, 4000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 4000, 4000, 4000 } }, Tag = { "moon_solarSystem", @@ -2664,8 +2792,8 @@ local SkrymirTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "656", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Skrymir, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 1164.3, @@ -2675,6 +2803,7 @@ local SkrymirTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_norse", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -2688,8 +2817,8 @@ local SkrymirLabel = { Identifier = "SkrymirLabel", Parent = Skrymir.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Skrymir", FontSize = 70.0, Size = 7.1, @@ -2701,11 +2830,16 @@ local SkrymirLabel = { FadeDistances = { 1.25, 90.0 }, FadeWidths = { 0.25, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_norse" + }, GUI = { Name = "Skrymir Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/Skrymir", - Description = "Label for Saturn's moon Skrymir (Norse group)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/Skrymir" } } @@ -2715,15 +2849,13 @@ local Gerd = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "657", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Gerd, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 4000, 4000, 4000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 4000, 4000, 4000 } }, Tag = { "moon_solarSystem", @@ -2746,8 +2878,8 @@ local GerdTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "657", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Gerd, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 1095.0, @@ -2757,6 +2889,7 @@ local GerdTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_norse", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -2770,8 +2903,8 @@ local GerdLabel = { Identifier = "GerdLabel", Parent = Gerd.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Gerd", FontSize = 70.0, Size = 7.1, @@ -2783,11 +2916,16 @@ local GerdLabel = { FadeDistances = { 1.25, 90.0 }, FadeWidths = { 0.25, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_norse" + }, GUI = { Name = "Gerd Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/Gerd", - Description = "Label for Saturn's moon Gerd (Norse group)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/Gerd" } } @@ -2797,15 +2935,13 @@ local S2004S26 = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "658", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.S2004S26, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 4000, 4000, 4000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 4000, 4000, 4000 } }, Tag = { "moon_solarSystem", @@ -2828,8 +2964,8 @@ local S2004S26Trail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "658", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.S2004S26, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 1624.2, @@ -2839,6 +2975,7 @@ local S2004S26Trail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_norse", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -2852,8 +2989,8 @@ local S2004S26Label = { Identifier = "S2004S26Label", Parent = S2004S26.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "S/2004 S 26", FontSize = 70.0, Size = 7.1, @@ -2865,11 +3002,16 @@ local S2004S26Label = { FadeDistances = { 1.25, 90.0 }, FadeWidths = { 0.25, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_norse" + }, GUI = { Name = "S/2004 S 26 Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/S2004S26", - Description = "Label for Saturn's moon S/2004 S 26 (Norse group)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/S2004S26" } } @@ -2879,15 +3021,13 @@ local Eggther = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "659", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Eggther, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 6000, 6000, 6000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 6000, 6000, 6000 } }, Tag = { "moon_solarSystem", @@ -2910,8 +3050,8 @@ local EggtherTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "659", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Eggther, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 1033.0, @@ -2921,6 +3061,7 @@ local EggtherTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_norse", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -2934,8 +3075,8 @@ local EggtherLabel = { Identifier = "EggtherLabel", Parent = Eggther.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Eggther", FontSize = 70.0, Size = 7.1, @@ -2947,11 +3088,16 @@ local EggtherLabel = { FadeDistances = { 1.25, 90.0 }, FadeWidths = { 0.25, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_norse" + }, GUI = { Name = "Eggther Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/Eggther", - Description = "Label for Saturn's moon Eggther (Norse group)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/Eggther" } } @@ -2961,15 +3107,13 @@ local Beli = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "661", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Beli, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 4000, 4000, 4000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 4000, 4000, 4000 } }, Tag = { "moon_solarSystem", @@ -2992,8 +3136,8 @@ local BeliTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "661", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Beli, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 1084.1, @@ -3003,6 +3147,7 @@ local BeliTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_norse", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -3016,8 +3161,8 @@ local BeliLabel = { Identifier = "BeliLabel", Parent = Beli.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Beli", FontSize = 70.0, Size = 7.1, @@ -3029,11 +3174,16 @@ local BeliLabel = { FadeDistances = { 1.25, 90.0 }, FadeWidths = { 0.25, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_norse" + }, GUI = { Name = "Beli Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/Beli", - Description = "Label for Saturn's moon Beli (Norse group)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/Beli" } } @@ -3043,15 +3193,13 @@ local Gunnlod = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "662", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Gunnlod, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 4000, 4000, 4000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 4000, 4000, 4000 } }, Tag = { "moon_solarSystem", @@ -3074,8 +3222,8 @@ local GunnlodTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "662", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Gunnlod, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 1175.3, @@ -3085,6 +3233,7 @@ local GunnlodTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_norse", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -3098,8 +3247,8 @@ local GunnlodLabel = { Identifier = "GunnlodLabel", Parent = Gunnlod.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Gunnlod", FontSize = 70.0, Size = 7.1, @@ -3111,11 +3260,16 @@ local GunnlodLabel = { FadeDistances = { 1.25, 90.0 }, FadeWidths = { 0.25, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_norse" + }, GUI = { Name = "Gunnlod Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/Gunnlod", - Description = "Label for Saturn's moon Gunnlod (Norse group)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/Gunnlod" } } @@ -3125,15 +3279,13 @@ local Thiazzi = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "663", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Thiazzi, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 4000, 4000, 4000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 4000, 4000, 4000 } }, Tag = { "moon_solarSystem", @@ -3156,8 +3308,8 @@ local ThiazziTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "663", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Thiazzi, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 1361.5, @@ -3167,6 +3319,7 @@ local ThiazziTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_norse", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -3180,8 +3333,8 @@ local ThiazziLabel = { Identifier = "ThiazziLabel", Parent = Thiazzi.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Thiazzi", FontSize = 70.0, Size = 7.1, @@ -3193,11 +3346,16 @@ local ThiazziLabel = { FadeDistances = { 1.25, 90.0 }, FadeWidths = { 0.25, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_norse" + }, GUI = { Name = "Thiazzi Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/Thiazzi", - Description = "Label for Saturn's moon Thiazzi (Norse group)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/Thiazzi" } } @@ -3207,15 +3365,13 @@ local S2004S34 = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "664", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.S2004S34, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 3000, 3000, 3000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 3000, 3000, 3000 } }, Tag = { "moon_solarSystem", @@ -3238,8 +3394,8 @@ local S2004S34Trail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "664", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.S2004S34, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 1412.5, @@ -3249,6 +3405,7 @@ local S2004S34Trail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_norse", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -3262,8 +3419,8 @@ local S2004S34Label = { Identifier = "S2004S34Label", Parent = S2004S34.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "S/2004 S 34", FontSize = 70.0, Size = 7.1, @@ -3275,11 +3432,16 @@ local S2004S34Label = { FadeDistances = { 1.25, 90.0 }, FadeWidths = { 0.25, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_norse" + }, GUI = { Name = "S/2004 S 34 Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/S2004S34", - Description = "Label for Saturn's moon S/2004 S 34 (Norse group)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/S2004S34" } } @@ -3289,15 +3451,13 @@ local Alvaldi = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "665", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Alvaldi, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 5000, 5000, 5000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 5000, 5000, 5000 } }, Tag = { "moon_solarSystem", @@ -3320,8 +3480,8 @@ local AlvaldiTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "665", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Alvaldi, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 1208.1, @@ -3331,6 +3491,7 @@ local AlvaldiTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_norse", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -3344,8 +3505,8 @@ local AlvaldiLabel = { Identifier = "AlvaldiLabel", Parent = Alvaldi.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Alvaldi", FontSize = 70.0, Size = 7.1, @@ -3357,11 +3518,16 @@ local AlvaldiLabel = { FadeDistances = { 1.25, 90.0 }, FadeWidths = { 0.25, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_norse" + }, GUI = { Name = "Alvaldi Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/Alvaldi", - Description = "Label for Saturn's moon Alvaldi (Norse group)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/Alvaldi" } } @@ -3371,15 +3537,13 @@ local Geirrod = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "666", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Geirrod, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 4000, 4000, 4000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 4000, 4000, 4000 } }, Tag = { "moon_solarSystem", @@ -3402,8 +3566,8 @@ local GeirrodTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "666", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.Geirrod, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 1295.8, @@ -3413,6 +3577,7 @@ local GeirrodTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_norse", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -3426,8 +3591,8 @@ local GeirrodLabel = { Identifier = "GeirrodLabel", Parent = Geirrod.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Geirrod", FontSize = 70.0, Size = 7.1, @@ -3439,11 +3604,16 @@ local GeirrodLabel = { FadeDistances = { 1.25, 90.0 }, FadeWidths = { 0.25, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_norse" + }, GUI = { Name = "Geirrod Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/Geirrod", - Description = "Label for Saturn's moon Geirrod (Norse group)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/Geirrod" } } @@ -3453,15 +3623,13 @@ local S2004S28 = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "65077", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.S2004S28, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 4000, 4000, 4000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 4000, 4000, 4000 } }, Tag = { "moon_solarSystem", @@ -3484,8 +3652,8 @@ local S2004S28Trail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "65077", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.S2004S28, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 1197.2, @@ -3495,6 +3663,7 @@ local S2004S28Trail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_norse", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -3508,8 +3677,8 @@ local S2004S28Label = { Identifier = "S2004S28Label", Parent = S2004S28.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "S/2004 S 28", FontSize = 70.0, Size = 7.1, @@ -3521,11 +3690,16 @@ local S2004S28Label = { FadeDistances = { 1.25, 90.0 }, FadeWidths = { 0.25, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_norse" + }, GUI = { Name = "S/2004 S 28 Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/S2004S28", - Description = "Label for Saturn's moon S/2004 S 28 (Norse group)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/S2004S28" } } @@ -3535,15 +3709,13 @@ local S2004S21 = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "65079", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.S2004S21, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 3000, 3000, 3000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 3000, 3000, 3000 } }, Tag = { "moon_solarSystem", @@ -3566,8 +3738,8 @@ local S2004S21Trail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "65079", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.S2004S21, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 1365.1, @@ -3577,6 +3749,7 @@ local S2004S21Trail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_norse", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -3590,8 +3763,8 @@ local S2004S21Label = { Identifier = "S2004S21Label", Parent = S2004S21.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "S/2004 S 21", FontSize = 70.0, Size = 7.1, @@ -3603,11 +3776,16 @@ local S2004S21Label = { FadeDistances = { 1.25, 90.0 }, FadeWidths = { 0.25, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_norse" + }, GUI = { Name = "S/2004 S 21 Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/S2004S21", - Description = "Label for Saturn's moon S/2004 S 21 (Norse group)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/S2004S21" } } @@ -3617,15 +3795,13 @@ local S2004S36 = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "65081", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.S2004S36, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 3000, 3000, 3000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 3000, 3000, 3000 } }, Tag = { "moon_solarSystem", @@ -3648,8 +3824,8 @@ local S2004S36Trail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "65081", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.S2004S36, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 1354.2, @@ -3659,6 +3835,7 @@ local S2004S36Trail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_norse", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -3672,8 +3849,8 @@ local S2004S36Label = { Identifier = "S2004S36Label", Parent = S2004S36.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "S/2004 S 36", FontSize = 70.0, Size = 7.1, @@ -3685,11 +3862,16 @@ local S2004S36Label = { FadeDistances = { 1.25, 90.0 }, FadeWidths = { 0.25, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_norse" + }, GUI = { Name = "S/2004 S 36 Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/S2004S36", - Description = "Label for Saturn's moon S/2004 S 36 (Norse group)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/S2004S36" } } @@ -3699,15 +3881,13 @@ local S2004S37 = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "65082", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.S2004S37, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 4000, 4000, 4000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 4000, 4000, 4000 } }, Tag = { "moon_solarSystem", @@ -3730,8 +3910,8 @@ local S2004S37Trail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "65082", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.S2004S37, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 752.88, @@ -3741,6 +3921,7 @@ local S2004S37Trail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_norse", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -3754,8 +3935,8 @@ local S2004S37Label = { Identifier = "S2004S37Label", Parent = S2004S37.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "S/2004 S 37", FontSize = 70.0, Size = 7.1, @@ -3767,11 +3948,16 @@ local S2004S37Label = { FadeDistances = { 1.25, 90.0 }, FadeWidths = { 0.25, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_norse" + }, GUI = { Name = "S/2004 S 37 Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/S2004S37", - Description = "Label for Saturn's moon S/2004 S 37 (Norse group)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/S2004S37" } } @@ -3781,15 +3967,13 @@ local S2004S39 = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "65084", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.S2004S39, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 3000, 3000, 3000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 3000, 3000, 3000 } }, Tag = { "moon_solarSystem", @@ -3812,8 +3996,8 @@ local S2004S39Trail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "65084", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.S2004S39, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 1277.5, @@ -3823,6 +4007,7 @@ local S2004S39Trail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_norse", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -3836,8 +4021,8 @@ local S2004S39Label = { Identifier = "S2004S39Label", Parent = S2004S39.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "S/2004 S 39", FontSize = 70.0, Size = 7.1, @@ -3849,20 +4034,21 @@ local S2004S39Label = { FadeDistances = { 1.25, 90.0 }, FadeWidths = { 0.25, 90.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_norse" + }, GUI = { Name = "S/2004 S 39 Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/S2004S39", - Description = "Label for Saturn's moon S/2004 S 39 (Norse group)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Norse Group/S2004S39" } } asset.onInitialize(function() - openspace.spice.loadKernel(kernels.sat441) - openspace.spice.loadKernel(kernels.sat452) - - openspace.addSceneGraphNode(Phoebe) openspace.addSceneGraphNode(PhoebeTrail) openspace.addSceneGraphNode(PhoebeLabel) @@ -4240,9 +4426,6 @@ asset.onDeinitialize(function() openspace.removeSceneGraphNode(PhoebeLabel) openspace.removeSceneGraphNode(PhoebeTrail) openspace.removeSceneGraphNode(Phoebe) - - openspace.spice.unloadKernel(kernels.sat452) - openspace.spice.unloadKernel(kernels.sat441) end) asset.export(Phoebe) @@ -4437,7 +4620,6 @@ asset.export(S2004S39Label) asset.meta = { Name = "Saturn Norse Group Moons", - Version = "1.0", Description = [[Procedural Globe asset containing Saturn's Norse Group moons: Phoebe, Skathi, S2007S2, Skoll, S2004S13, Greip, Hyrrokkin, Jarnsaxa, Mundilfari, S2006S1, S2004S17, Bergelmir, Narvi, Suttungr, Hati, S2004S12, Farbauti, Thrymr, Aegir, diff --git a/data/assets/scene/solarsystem/planets/saturn/minor/other_group.asset b/data/assets/scene/solarsystem/planets/saturn/minor/other_group.asset index 7d87adba94..6a10e65078 100644 --- a/data/assets/scene/solarsystem/planets/saturn/minor/other_group.asset +++ b/data/assets/scene/solarsystem/planets/saturn/minor/other_group.asset @@ -1,5 +1,8 @@ local transforms = asset.require("../transforms") local kernels = asset.require("../kernels") +local kernels415 = asset.require("../kernels415") +local kernels452 = asset.require("../kernels452") +local coreKernels = asset.require("spice/core") @@ -9,15 +12,13 @@ local Aegaeon = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "AEGAEON", - Observer = "SATURN BARYCENTER" + Target = kernels415.ID.Aegaeon, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 500, 500, 500 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 500, 500, 500 } }, Tag = { "moon_solarSystem", @@ -40,8 +41,8 @@ local AegaeonTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "AEGAEON", - Observer = "SATURN BARYCENTER" + Target = kernels415.ID.Aegaeon, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 0.80812, @@ -51,6 +52,7 @@ local AegaeonTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_other", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -64,8 +66,8 @@ local AegaeonLabel = { Identifier = "AegaeonLabel", Parent = Aegaeon.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Aegaeon", FontSize = 70.0, Size = 5.5, @@ -77,11 +79,16 @@ local AegaeonLabel = { FadeDistances = { 250.0, 1500.0 }, FadeWidths = { 100.0, 1500.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_other" + }, GUI = { Name = "Aegaeon Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Other Group/Aegaeon", - Description = "Label for Saturn's moon Aegaeon (Other group)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Other Group/Aegaeon" } } @@ -91,15 +98,13 @@ local Methone = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "METHONE", - Observer = "SATURN BARYCENTER" + Target = kernels415.ID.Methone, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 3200, 3200, 3200 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 3200, 3200, 3200 } }, Tag = { "moon_solarSystem", @@ -122,8 +127,8 @@ local MethoneTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "METHONE", - Observer = "SATURN BARYCENTER" + Target = kernels415.ID.Methone, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 1.00957, @@ -133,6 +138,7 @@ local MethoneTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_other", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -146,8 +152,8 @@ local MethoneLabel = { Identifier = "MethoneLabel", Parent = Methone.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Methone", FontSize = 70.0, Size = 5.5, @@ -159,11 +165,16 @@ local MethoneLabel = { FadeDistances = { 250.0, 1500.0 }, FadeWidths = { 100.0, 1500.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_other" + }, GUI = { Name = "Methone Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Other Group/Methone", - Description = "Label for Saturn's moon Methone (Other group)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Other Group/Methone" } } @@ -173,15 +184,13 @@ local Anthe = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "ANTHE", - Observer = "SATURN BARYCENTER" + Target = kernels415.ID.Anthe, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 1800, 1800, 1800 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 1800, 1800, 1800 } }, Tag = { "moon_solarSystem", @@ -204,8 +213,8 @@ local AntheTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "ANTHE", - Observer = "SATURN BARYCENTER" + Target = kernels415.ID.Anthe, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 1.05089, @@ -215,6 +224,7 @@ local AntheTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_other", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -228,8 +238,8 @@ local AntheLabel = { Identifier = "AntheLabel", Parent = Anthe.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Anthe", FontSize = 70.0, Size = 5.5, @@ -241,11 +251,16 @@ local AntheLabel = { FadeDistances = { 250.0, 1500.0 }, FadeWidths = { 100.0, 1500.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_other" + }, GUI = { Name = "Anthe Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Other Group/Anthe", - Description = "Label for Saturn's moon Anthe (Other group)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Other Group/Anthe" } } @@ -255,15 +270,13 @@ local Pallene = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "PALLENE", - Observer = "SATURN BARYCENTER" + Target = kernels415.ID.Pallene, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 6000, 6000, 4000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 6000, 6000, 4000 } }, Tag = { "moon_solarSystem", @@ -286,8 +299,8 @@ local PalleneTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "PALLENE", - Observer = "SATURN BARYCENTER" + Target = kernels415.ID.Pallene, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 1.370218, @@ -297,6 +310,7 @@ local PalleneTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_other", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -310,8 +324,8 @@ local PalleneLabel = { Identifier = "PalleneLabel", Parent = Pallene.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Pallene", FontSize = 70.0, Size = 5.5, @@ -323,11 +337,16 @@ local PalleneLabel = { FadeDistances = { 250.0, 1500.0 }, FadeWidths = { 100.0, 1500.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_other" + }, GUI = { Name = "Pallene Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Other Group/Pallene", - Description = "Label for Saturn's moon Pallene (Other group)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Other Group/Pallene" } } @@ -337,15 +356,13 @@ local Telesto = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "TELESTO", - Observer = "SATURN BARYCENTER" + Target = kernels415.ID.Telesto, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 33000, 24000, 20000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 33000, 24000, 20000 } }, Tag = { "moon_solarSystem", @@ -368,8 +385,8 @@ local TelestoTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "TELESTO", - Observer = "SATURN BARYCENTER" + Target = kernels415.ID.Telesto, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 1.887802, @@ -379,6 +396,7 @@ local TelestoTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_other", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -392,8 +410,8 @@ local TelestoLabel = { Identifier = "TelestoLabel", Parent = Telesto.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Telesto", FontSize = 70.0, Size = 5.5, @@ -405,11 +423,16 @@ local TelestoLabel = { FadeDistances = { 250.0, 1500.0 }, FadeWidths = { 100.0, 1500.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_other" + }, GUI = { Name = "Telesto Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Other Group/Telesto", - Description = "Label for Saturn's moon Telesto (Other group)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Other Group/Telesto" } } @@ -419,15 +442,13 @@ local Calypso = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "CALYPSO", - Observer = "SATURN BARYCENTER" + Target = kernels.ID.Calypso, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 30000, 23000, 14000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 30000, 23000, 14000 } }, Tag = { "moon_solarSystem", @@ -450,8 +471,8 @@ local CalypsoTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "CALYPSO", - Observer = "SATURN BARYCENTER" + Target = kernels.ID.Calypso, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 1.887802, @@ -461,6 +482,7 @@ local CalypsoTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_other", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -474,8 +496,8 @@ local CalypsoLabel = { Identifier = "CalypsoLabel", Parent = Calypso.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Calypso", FontSize = 70.0, Size = 5.5, @@ -487,11 +509,16 @@ local CalypsoLabel = { FadeDistances = { 250.0, 1500.0 }, FadeWidths = { 100.0, 1500.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_other" + }, GUI = { Name = "Calypso Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Other Group/Calypso", - Description = "Label for Saturn's moon Calypso (Other group)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Other Group/Calypso" } } @@ -501,15 +528,13 @@ local Helene = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "HELENE", - Observer = "SATURN BARYCENTER" + Target = kernels.ID.Helene, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 43000, 38000, 26000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 43000, 38000, 26000 } }, Tag = { "moon_solarSystem", @@ -532,8 +557,8 @@ local HeleneTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "HELENE", - Observer = "SATURN BARYCENTER" + Target = kernels.ID.Helene, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 2.736915, @@ -543,6 +568,7 @@ local HeleneTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_other", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -556,8 +582,8 @@ local HeleneLabel = { Identifier = "HeleneLabel", Parent = Helene.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Helene", FontSize = 70.0, Size = 5.5, @@ -569,11 +595,16 @@ local HeleneLabel = { FadeDistances = { 250.0, 1500.0 }, FadeWidths = { 100.0, 1500.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_other" + }, GUI = { Name = "Helene Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Other Group/Helene", - Description = "Label for Saturn's moon Helene (Other group)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Other Group/Helene" } } @@ -583,15 +614,13 @@ local Polydeuces = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "POLYDEUCES", - Observer = "SATURN BARYCENTER" + Target = kernels.ID.Polydeuces, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 3000, 2000, 1000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 3000, 2000, 1000 } }, Tag = { "moon_solarSystem", @@ -614,8 +643,8 @@ local PolydeucesTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "POLYDEUCES", - Observer = "SATURN BARYCENTER" + Target = kernels.ID.Polydeuces, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 2.736915, @@ -625,6 +654,7 @@ local PolydeucesTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_other", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -638,8 +668,8 @@ local PolydeucesLabel = { Identifier = "PolydeucesLabel", Parent = Polydeuces.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Polydeuces", FontSize = 70.0, Size = 5.5, @@ -651,11 +681,16 @@ local PolydeucesLabel = { FadeDistances = { 250.0, 1500.0 }, FadeWidths = { 100.0, 1500.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_other" + }, GUI = { Name = "Polydeuces Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Other Group/Polydeuces", - Description = "Label for Saturn's moon Polydeuces (Other group)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Other Group/Polydeuces" } } @@ -665,15 +700,13 @@ local S2004S24 = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "65070", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.S2004S24, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 3000, 3000, 3000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 3000, 3000, 3000 } }, Tag = { "moon_solarSystem", @@ -696,8 +729,8 @@ local S2004S24Trail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "65070", - Observer = "SATURN BARYCENTER" + Target = kernels452.ID.S2004S24, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 1293.85, @@ -707,6 +740,7 @@ local S2004S24Trail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_other", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -720,8 +754,8 @@ local S2004S24Label = { Identifier = "S2004S24Label", Parent = S2004S24.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "S/2004 S 24", FontSize = 70.0, Size = 5.5, @@ -733,21 +767,21 @@ local S2004S24Label = { FadeDistances = { 250.0, 1500.0 }, FadeWidths = { 100.0, 1500.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_other" + }, GUI = { Name = "S/2004 S 24 Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Other Group/S2004S24", - Description = "Label for Saturn's moon S/2004 S 24 (Other group)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Other Group/S2004S24" } } asset.onInitialize(function() - openspace.spice.loadKernel(kernels.sat415) - openspace.spice.loadKernel(kernels.sat441) - openspace.spice.loadKernel(kernels.sat452) - - openspace.addSceneGraphNode(Aegaeon) openspace.addSceneGraphNode(AegaeonTrail) openspace.addSceneGraphNode(AegaeonLabel) @@ -821,12 +855,6 @@ asset.onDeinitialize(function() openspace.removeSceneGraphNode(S2004S24Label) openspace.removeSceneGraphNode(S2004S24Trail) openspace.removeSceneGraphNode(S2004S24) - - - openspace.spice.unloadKernel(kernels.sat452) - openspace.spice.unloadKernel(kernels.sat441) - openspace.spice.unloadKernel(kernels.sat415) - end) asset.export(Aegaeon) @@ -869,7 +897,6 @@ asset.export(S2004S24Label) asset.meta = { Name = "Saturn Other Group Moons", - Version = "1.0", Description = [[Procedural Globe asset containing Saturn's Other Group moons: Aegaeon, Methone, Anthe, Pallene, Telesto, Calypso, Helene, Polydeuces. Blank globes and SPICE trails are generated for each moon]], diff --git a/data/assets/scene/solarsystem/planets/saturn/minor/shepherd_group.asset b/data/assets/scene/solarsystem/planets/saturn/minor/shepherd_group.asset index 734d32c3e3..b371212420 100644 --- a/data/assets/scene/solarsystem/planets/saturn/minor/shepherd_group.asset +++ b/data/assets/scene/solarsystem/planets/saturn/minor/shepherd_group.asset @@ -1,8 +1,10 @@ local transforms = asset.require("../transforms") +local kernels415 = asset.require("../kernels415") +local coreKernels = asset.require("spice/core") -local syncedKernels = asset.syncedResource({ +local syncedKernels = asset.resource({ Name = "Saturn Shepherd Moons Spice Kernels", Type = "HttpSynchronization", Identifier = "saturn_shepherd_kernels", @@ -15,22 +17,19 @@ local kernels = { syncedKernels .. "sat393_daphnis.bsp" } - local Prometheus = { Identifier = "Prometheus", Parent = transforms.SaturnBarycenter.Identifier, Transform = { Translation = { Type = "SpiceTranslation", - Target = "PROMETHEUS", - Observer = "SATURN BARYCENTER" + Target = kernels415.ID.Prometheus, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 135600, 79400, 59400 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 135600, 79400, 59400 } }, Tag = { "moon_solarSystem", @@ -53,8 +52,8 @@ local PrometheusTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "PROMETHEUS", - Observer = "SATURN BARYCENTER" + Target = kernels415.ID.Prometheus, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 0.612990038, @@ -64,6 +63,7 @@ local PrometheusTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_shepherd", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -77,8 +77,8 @@ local PrometheusLabel = { Identifier = "PrometheusLabel", Parent = Prometheus.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Prometheus", FontSize = 70.0, Size = 5.5, @@ -90,11 +90,16 @@ local PrometheusLabel = { FadeDistances = { 75.0, 1000.0 }, FadeWidths = { 25.0, 800.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_shepherd" + }, GUI = { Name = "Prometheus Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Shepherd Moons/Prometheus", - Description = "Label for Saturn's moon Prometheus (Shepherd Moons)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Shepherd Moons/Prometheus" } } @@ -104,15 +109,13 @@ local Pandora = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "PANDORA", - Observer = "SATURN BARYCENTER" + Target = kernels415.ID.Pandora, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 104000, 81000, 64000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 104000, 81000, 64000 } }, Tag = { "moon_solarSystem", @@ -135,8 +138,8 @@ local PandoraTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "PANDORA", - Observer = "SATURN BARYCENTER" + Target = kernels415.ID.Pandora, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 0.628504213, @@ -146,6 +149,7 @@ local PandoraTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_shepherd", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -159,8 +163,8 @@ local PandoraLabel = { Identifier = "PandoraLabel", Parent = Pandora.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Pandora", FontSize = 70.0, Size = 5.5, @@ -172,11 +176,16 @@ local PandoraLabel = { FadeDistances = { 75.0, 1000.0 }, FadeWidths = { 25.0, 800.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_shepherd" + }, GUI = { Name = "Pandora Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Shepherd Moons/Pandora", - Description = "Label for Saturn's moon Pandora (Shepherd Moons)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Shepherd Moons/Pandora" } } @@ -186,15 +195,13 @@ local Atlas = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "ATLAS", - Observer = "SATURN BARYCENTER" + Target = kernels415.ID.Atlas, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 40800, 35400, 18800 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 40800, 35400, 18800 } }, Tag = { "moon_solarSystem", @@ -217,8 +224,8 @@ local AtlasTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "ATLAS", - Observer = "SATURN BARYCENTER" + Target = kernels415.ID.Atlas, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 0.6016947883, @@ -228,6 +235,7 @@ local AtlasTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_shepherd", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -241,8 +249,8 @@ local AtlasLabel = { Identifier = "AtlasLabel", Parent = Atlas.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Atlas", FontSize = 70.0, Size = 5.5, @@ -254,11 +262,16 @@ local AtlasLabel = { FadeDistances = { 75.0, 1000.0 }, FadeWidths = { 25.0, 800.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_shepherd" + }, GUI = { Name = "Atlas Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Shepherd Moons/Atlas", - Description = "Label for Saturn's moon Atlas (Shepherd Moons)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Shepherd Moons/Atlas" } } @@ -268,15 +281,13 @@ local Janus = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "JANUS", - Observer = "SATURN BARYCENTER" + Target = kernels415.ID.Janus, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 203000, 185000, 152600 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 203000, 185000, 152600 } }, Tag = { "moon_solarSystem", @@ -299,8 +310,8 @@ local JanusTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "JANUS", - Observer = "SATURN BARYCENTER" + Target = kernels415.ID.Janus, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 0.694660342, @@ -310,6 +321,7 @@ local JanusTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_shepherd", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -323,8 +335,8 @@ local JanusLabel = { Identifier = "JanusLabel", Parent = Janus.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Janus", FontSize = 70.0, Size = 5.5, @@ -336,11 +348,16 @@ local JanusLabel = { FadeDistances = { 75.0, 1000.0 }, FadeWidths = { 25.0, 800.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_shepherd" + }, GUI = { Name = "Janus Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Shepherd Moons/Janus", - Description = "Label for Saturn's moon Janus (Shepherd Moons)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Shepherd Moons/Janus" } } @@ -350,15 +367,13 @@ local Epimetheus = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "EPIMETHEUS", - Observer = "SATURN BARYCENTER" + Target = kernels415.ID.Epimetheus, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 129800, 114000, 106200 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 129800, 114000, 106200 } }, Tag = { "moon_solarSystem", @@ -381,8 +396,8 @@ local EpimetheusTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "EPIMETHEUS", - Observer = "SATURN BARYCENTER" + Target = kernels415.ID.Epimetheus, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 0.694333517, @@ -392,6 +407,7 @@ local EpimetheusTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_shepherd", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -405,8 +421,8 @@ local EpimetheusLabel = { Identifier = "EpimetheusLabel", Parent = Epimetheus.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Epimetheus", FontSize = 70.0, Size = 5.5, @@ -418,11 +434,16 @@ local EpimetheusLabel = { FadeDistances = { 75.0, 1000.0 }, FadeWidths = { 25.0, 800.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_shepherd" + }, GUI = { Name = "Epimetheus Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Shepherd Moons/Epimetheus", - Description = "Label for Saturn's moon Epimetheus (Shepherd Moons)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Shepherd Moons/Epimetheus" } } @@ -432,15 +453,13 @@ local Daphnis = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "DAPHNIS", - Observer = "SATURN BARYCENTER" + Target = kernels415.ID.Daphnis, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 8600, 8200, 6400 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 8600, 8200, 6400 } }, Tag = { "moon_solarSystem", @@ -463,8 +482,8 @@ local DaphnisTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "DAPHNIS", - Observer = "SATURN BARYCENTER" + Target = kernels415.ID.Daphnis, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 0.5940798, @@ -474,6 +493,7 @@ local DaphnisTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_shepherd", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -487,8 +507,8 @@ local DaphnisLabel = { Identifier = "DaphnisLabel", Parent = Daphnis.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Daphnis", FontSize = 70.0, Size = 5.5, @@ -500,11 +520,16 @@ local DaphnisLabel = { FadeDistances = { 75.0, 1000.0 }, FadeWidths = { 25.0, 800.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_shepherd" + }, GUI = { Name = "Daphnis Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Shepherd Moons/Daphnis", - Description = "Label for Saturn's moon Daphnis (Shepherd Moons)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Shepherd Moons/Daphnis" } } @@ -514,15 +539,13 @@ local Pan = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "PAN", - Observer = "SATURN BARYCENTER" + Target = kernels415.ID.Pan, + Observer = coreKernels.ID.SaturnBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 34400, 31400, 20800 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 34400, 31400, 20800 } }, Tag = { "moon_solarSystem", @@ -545,8 +568,8 @@ local PanTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "PAN", - Observer = "SATURN BARYCENTER" + Target = kernels415.ID.Pan, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 0.575050718, @@ -556,6 +579,7 @@ local PanTrail = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", + "moonTrail_shepherd", "moonTrail_minor", "moonTrail_minor_saturn" }, @@ -569,8 +593,8 @@ local PanLabel = { Identifier = "PanLabel", Parent = Pan.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Pan", FontSize = 70.0, Size = 5.5, @@ -582,14 +606,20 @@ local PanLabel = { FadeDistances = { 75.0, 1000.0 }, FadeWidths = { 25.0, 800.0 } }, - Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, + Tag = { + "solarsystem_labels", + "moon_labels", + "minor_moon_labels", + "minor_moon_labels_saturn", + "minor_moon_labels_shepherd" + }, GUI = { Name = "Pan Label", - Path = "/Solar System/Planets/Saturn/Minor Moons/Shepherd Moons/Pan", - Description = "Label for Saturn's moon Pan (Shepherd Moons)" + Path = "/Solar System/Planets/Saturn/Minor Moons/Shepherd Moons/Pan" } } + asset.onInitialize(function() openspace.spice.loadKernel(syncedKernels .. "sat393_daphnis.bsp") openspace.spice.loadKernel(syncedKernels .. "sat415.bsp") @@ -690,7 +720,6 @@ asset.export(PanLabel) asset.meta = { Name = "Saturn Shepherd Moons", - Version = "1.0", Description = [[Procedural Globe asset containing Saturn's Shepherd moons: Prometheus, Pandora, Atlas, Janus, Epimetheus, Daphnis and Pan. Blank globes and SPICE trails are generated for each moon]], diff --git a/data/assets/scene/solarsystem/planets/saturn/minor_moons.asset b/data/assets/scene/solarsystem/planets/saturn/minor_moons.asset index 1e6b513bad..8519f81f1a 100644 --- a/data/assets/scene/solarsystem/planets/saturn/minor_moons.asset +++ b/data/assets/scene/solarsystem/planets/saturn/minor_moons.asset @@ -10,11 +10,11 @@ local SaturnMinorMoonsOn = { Identifier = "os.solarsystem.SaturnMinorMoonsOn", Name = "Turn ON minor moons and trails", Command = [[ - local trails = openspace.getProperty("{moonTrail_minor_saturn}.Renderable.Enabled") - local trails_fade = openspace.getProperty("{moonTrail_minor_saturn}.Renderable.Fade") + local trails = openspace.property("{moonTrail_minor_saturn}.Renderable.Enabled") + local trails_fade = openspace.property("{moonTrail_minor_saturn}.Renderable.Fade") - local moons = openspace.getProperty("{moon_minor_saturn}.Renderable.Enabled") - local moons_fade = openspace.getProperty("{moon_minor_saturn}.Renderable.Fade") + local moons = openspace.property("{moon_minor_saturn}.Renderable.Enabled") + local moons_fade = openspace.property("{moon_minor_saturn}.Renderable.Fade") for i, v in pairs(trails_fade) do openspace.setPropertyValueSingle(trails[i], true) @@ -28,18 +28,18 @@ local SaturnMinorMoonsOn = { ]], Documentation = "Turn ON Saturn's minor moons and their trails", GuiPath = "/Solar System/Saturn", - IsLocal = true + IsLocal = false } local SaturnMinorMoonsOff = { Identifier = "os.solarsystem.SaturnMinorMoonsOff", Name = "Turn OFF minors moon and trails", Command = [[ - local trails = openspace.getProperty("{moonTrail_minor_saturn}.Renderable.Enabled") - local trails_fade = openspace.getProperty("{moonTrail_minor_saturn}.Renderable.Fade") + local trails = openspace.property("{moonTrail_minor_saturn}.Renderable.Enabled") + local trails_fade = openspace.property("{moonTrail_minor_saturn}.Renderable.Fade") - local moons = openspace.getProperty("{moon_minor_saturn}.Renderable.Enabled") - local moons_fade = openspace.getProperty("{moon_minor_saturn}.Renderable.Fade") + local moons = openspace.property("{moon_minor_saturn}.Renderable.Enabled") + local moons_fade = openspace.property("{moon_minor_saturn}.Renderable.Fade") for i, v in pairs(trails_fade) do openspace.setPropertyValueSingle( @@ -63,7 +63,7 @@ local SaturnMinorMoonsOff = { ]], Documentation = "Turn OFF Saturn's minor moons and their trails", GuiPath = "/Solar System/Saturn", - IsLocal = true + IsLocal = false } @@ -84,7 +84,6 @@ asset.export("SaturnMinorMoonsOff", SaturnMinorMoonsOff.Identifier) asset.meta = { Name = "Saturn Minor Moons", - Version = "1.1", Description = [[Meta asset containing five moon groups: Gallic, Inuit, Norse, Shepherd moons and Other]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/planets/saturn/rhea/default_layers.asset b/data/assets/scene/solarsystem/planets/saturn/rhea/default_layers.asset index 487ded6ad8..70e5a056cf 100644 --- a/data/assets/scene/solarsystem/planets/saturn/rhea/default_layers.asset +++ b/data/assets/scene/solarsystem/planets/saturn/rhea/default_layers.asset @@ -4,7 +4,6 @@ asset.require("./layers/colorlayers/rhea_texture", true) asset.meta = { Name = "Default Rhea Layers", - Version = "1.0", Description = "Default Rhea layers are: Rhea Texture", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/saturn/rhea/layers/colorlayers/rhea_texture.asset b/data/assets/scene/solarsystem/planets/saturn/rhea/layers/colorlayers/rhea_texture.asset index 7a704c70f5..a7e3702dfb 100644 --- a/data/assets/scene/solarsystem/planets/saturn/rhea/layers/colorlayers/rhea_texture.asset +++ b/data/assets/scene/solarsystem/planets/saturn/rhea/layers/colorlayers/rhea_texture.asset @@ -2,7 +2,7 @@ local globe = asset.require("../../rhea") -local texturesPath = asset.syncedResource({ +local texturesPath = asset.resource({ Name = "Rhea textures", Type = "HttpSynchronization", Identifier = "rhea_textures", @@ -13,7 +13,9 @@ local texturesPath = asset.syncedResource({ local Layer = { Identifier = "Texture", FilePath = texturesPath .. "rhea.jpg", - Enabled = asset.enabled + Enabled = asset.enabled, + ZIndex = 5, + CacheSettings = { Enabled = false } } @@ -31,7 +33,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Rhea Texutre", - Version = "1.0", Description = "Default jpg texture for Rhea", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/saturn/rhea/rhea.asset b/data/assets/scene/solarsystem/planets/saturn/rhea/rhea.asset index 9aaf757c80..0c7e8d1b64 100644 --- a/data/assets/scene/solarsystem/planets/saturn/rhea/rhea.asset +++ b/data/assets/scene/solarsystem/planets/saturn/rhea/rhea.asset @@ -1,10 +1,11 @@ asset.require("./trail") local transforms = asset.require("../transforms") -local kernel = asset.require("../kernels") +local kernels = asset.require("../kernels") +local coreKernels = asset.require("spice/core") -local labelsPath = asset.syncedResource({ +local labelsPath = asset.resource({ Name = "Saturn Labels", Type = "HttpSynchronization", Identifier = "saturn_labels", @@ -18,20 +19,18 @@ local Rhea = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "RHEA", - Observer = "SATURN BARYCENTER" + Target = kernels.ID.Rhea, + Observer = coreKernels.ID.SaturnBarycenter }, Rotation = { Type = "SpiceRotation", - SourceFrame = "IAU_RHEA", - DestinationFrame = "GALACTIC" + SourceFrame = kernels.Frame.Rhea, + DestinationFrame = coreKernels.Frame.Galactic } }, Renderable = { Type = "RenderableGlobe", Radii = 765000, - SegmentsPerPatch = 64, - Layers = {}, Labels = { Enabled = false, FileName = labelsPath .. "rhea.labels", @@ -57,8 +56,8 @@ local RheaLabel = { Identifier = "RheaLabel", Parent = Rhea.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Rhea", FontSize = 70.0, Size = 6.0, @@ -73,15 +72,12 @@ local RheaLabel = { Tag = { "solarsystem_labels", "moon_labels", "major_moon_labels", "moon_major_saturn" }, GUI = { Name = "Rhea Label", - Path = "/Solar System/Planets/Saturn/Major Moons/Rhea", - Description = "Label for Saturn's moon Rhea" + Path = "/Solar System/Planets/Saturn/Major Moons/Rhea" } } asset.onInitialize(function() - openspace.spice.loadKernel(kernel.sat441) - openspace.addSceneGraphNode(Rhea) openspace.addSceneGraphNode(RheaLabel) end) @@ -89,8 +85,6 @@ end) asset.onDeinitialize(function() openspace.removeSceneGraphNode(RheaLabel) openspace.removeSceneGraphNode(Rhea) - - openspace.spice.unloadKernel(kernel.sat441) end) asset.export(Rhea) @@ -100,7 +94,6 @@ asset.export(RheaLabel) asset.meta = { Name = "Rhea", - Version = "1.0", Description = "Rhea globe with labels", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/saturn/rhea/trail.asset b/data/assets/scene/solarsystem/planets/saturn/rhea/trail.asset index 57b15feb7a..f439933392 100644 --- a/data/assets/scene/solarsystem/planets/saturn/rhea/trail.asset +++ b/data/assets/scene/solarsystem/planets/saturn/rhea/trail.asset @@ -1,5 +1,6 @@ local transforms = asset.require("../transforms") -local kernel = asset.require("../kernels") +local kernels = asset.require("../kernels") +local coreKernels = asset.require("spice/core") @@ -10,14 +11,19 @@ local RheaTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "RHEA", - Observer = "SATURN BARYCENTER" + Target = kernels.ID.Rhea, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 108.0 / 24.0, Resolution = 1000 }, - Tag = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", "moonTrail_major_saturn" }, + Tag = { + "moonTrail_solarSystem", + "moonTrail_giants", + "moonTrail_saturn", + "moonTrail_major_saturn" + }, GUI = { Name = "Rhea Trail", Path = "/Solar System/Planets/Saturn/Major Moons/Rhea", @@ -27,15 +33,11 @@ local RheaTrail = { asset.onInitialize(function() - openspace.spice.loadKernel(kernel.sat441) - openspace.addSceneGraphNode(RheaTrail) end) asset.onDeinitialize(function() openspace.removeSceneGraphNode(RheaTrail) - - openspace.spice.unloadKernel(kernel.sat441) end) asset.export(RheaTrail) @@ -44,8 +46,7 @@ asset.export(RheaTrail) asset.meta = { Name = "Rhea Trail", - Version = "1.0", - Description = "Main trail for Rhea. Data from NASA Spice (see base spice asset)", + Description = "Main trail for Rhea", Author = "OpenSpace Team", URL = "http://openspaceproject.com", License = "MIT license" diff --git a/data/assets/scene/solarsystem/planets/saturn/saturn.asset b/data/assets/scene/solarsystem/planets/saturn/saturn.asset index 188a5c824f..f85abdd7b8 100644 --- a/data/assets/scene/solarsystem/planets/saturn/saturn.asset +++ b/data/assets/scene/solarsystem/planets/saturn/saturn.asset @@ -1,10 +1,10 @@ -asset.require("spice/base") asset.require("./trail") local transforms = asset.require("./transforms") +local coreKernels = asset.require("spice/core") -local texturesPath = asset.syncedResource({ +local texturesPath = asset.resource({ Type = "HttpSynchronization", Name = "Saturn textures", Identifier = "saturn_textures", @@ -18,20 +18,18 @@ local Saturn = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "SATURN", - Observer = "SATURN BARYCENTER" + Target = coreKernels.ID.Saturn, + Observer = coreKernels.ID.SaturnBarycenter }, Rotation = { Type = "SpiceRotation", - SourceFrame = "IAU_SATURN", - DestinationFrame = "GALACTIC" + SourceFrame = coreKernels.Frame.Saturn, + DestinationFrame = coreKernels.Frame.Galactic } }, Renderable = { Type = "RenderableGlobe", Radii = { 60268000, 60268000, 54364000 }, - SegmentsPerPatch = 64, - Layers = {}, Rings = { -- Single Texture Values: --Texture = texturesPath .. "/saturn_rings.png", @@ -66,8 +64,8 @@ local SaturnLabel = { Identifier = "SaturnLabel", Parent = Saturn.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Saturn", FontSize = 70.0, Size = 8.9, @@ -105,7 +103,6 @@ asset.export(SaturnLabel) asset.meta = { Name = "Saturn", - Version = "1.1", Description = "Saturn globe, and main planet label", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/saturn/tethys/default_layers.asset b/data/assets/scene/solarsystem/planets/saturn/tethys/default_layers.asset index 6b0fa39d55..e71387b316 100644 --- a/data/assets/scene/solarsystem/planets/saturn/tethys/default_layers.asset +++ b/data/assets/scene/solarsystem/planets/saturn/tethys/default_layers.asset @@ -4,7 +4,6 @@ asset.require("./layers/colorlayers/tethys_texture", true) asset.meta = { Name = "Default Tethys Layers", - Version = "1.0", Description = "Default Tethys layers are: Tethys Texture", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/saturn/tethys/layers/colorlayers/tethys_texture.asset b/data/assets/scene/solarsystem/planets/saturn/tethys/layers/colorlayers/tethys_texture.asset index bf048d863e..72b6215402 100644 --- a/data/assets/scene/solarsystem/planets/saturn/tethys/layers/colorlayers/tethys_texture.asset +++ b/data/assets/scene/solarsystem/planets/saturn/tethys/layers/colorlayers/tethys_texture.asset @@ -2,7 +2,7 @@ local globe = asset.require("../../tethys") -local texturesPath = asset.syncedResource({ +local texturesPath = asset.resource({ Name = "Tethys textures", Type = "HttpSynchronization", Identifier = "tethys_textures", @@ -13,7 +13,9 @@ local texturesPath = asset.syncedResource({ local Layer = { Identifier = "Texture", FilePath = texturesPath .. "tethys.jpg", - Enabled = asset.enabled + Enabled = asset.enabled, + ZIndex = 5, + CacheSettings = { Enabled = false } } @@ -31,7 +33,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Tethys Texutre", - Version = "1.0", Description = "Default jpg texture for Tethys", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/saturn/tethys/tethys.asset b/data/assets/scene/solarsystem/planets/saturn/tethys/tethys.asset index ec844427cf..d895eb207a 100644 --- a/data/assets/scene/solarsystem/planets/saturn/tethys/tethys.asset +++ b/data/assets/scene/solarsystem/planets/saturn/tethys/tethys.asset @@ -1,10 +1,11 @@ asset.require("./trail") local transforms = asset.require("../transforms") -local kernel = asset.require("../kernels") +local kernels = asset.require("../kernels") +local coreKernels = asset.require("spice/core") -local labelsPath = asset.syncedResource({ +local labelsPath = asset.resource({ Name = "Saturn Labels", Type = "HttpSynchronization", Identifier = "saturn_labels", @@ -18,20 +19,18 @@ local Tethys = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "TETHYS", - Observer = "SATURN BARYCENTER" + Target = kernels.ID.Tethys, + Observer = coreKernels.ID.SaturnBarycenter }, Rotation = { Type = "SpiceRotation", - SourceFrame = "IAU_TETHYS", - DestinationFrame = "GALACTIC" + SourceFrame = kernels.Frame.Tethys, + DestinationFrame = coreKernels.Frame.Galactic } }, Renderable = { Type = "RenderableGlobe", Radii = 531100, - SegmentsPerPatch = 64, - Layers = {}, Labels = { Enabled = false, FileName = labelsPath .. "tethys.labels", @@ -55,8 +54,8 @@ local TethysLabel = { Identifier = "TethysLabel", Parent = Tethys.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Tethys", FontSize = 70.0, Size = 6.0, @@ -71,15 +70,12 @@ local TethysLabel = { Tag = { "solarsystem_labels", "moon_labels", "major_moon_labels", "moon_major_saturn" }, GUI = { Name = "Tethys Label", - Path = "/Solar System/Planets/Saturn/Major Moons/Tethys", - Description = "Label for Saturn's moon Tethys" + Path = "/Solar System/Planets/Saturn/Major Moons/Tethys" } } asset.onInitialize(function() - openspace.spice.loadKernel(kernel.sat441) - openspace.addSceneGraphNode(Tethys) openspace.addSceneGraphNode(TethysLabel) end) @@ -87,8 +83,6 @@ end) asset.onDeinitialize(function() openspace.removeSceneGraphNode(TethysLabel) openspace.removeSceneGraphNode(Tethys) - - openspace.spice.unloadKernel(kernel.sat441) end) asset.export(Tethys) @@ -98,7 +92,6 @@ asset.export(TethysLabel) asset.meta = { Name = "Tethys", - Version = "1.0", Description = "Tethys globe with labels", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/saturn/tethys/trail.asset b/data/assets/scene/solarsystem/planets/saturn/tethys/trail.asset index f9253f7bc3..1a9539d8f6 100644 --- a/data/assets/scene/solarsystem/planets/saturn/tethys/trail.asset +++ b/data/assets/scene/solarsystem/planets/saturn/tethys/trail.asset @@ -1,5 +1,6 @@ local transforms = asset.require("../transforms") -local kernel = asset.require("../kernels") +local kernels = asset.require("../kernels") +local coreKernels = asset.require("spice/core") @@ -10,14 +11,19 @@ local TethysTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "TETHYS", - Observer = "SATURN BARYCENTER" + Target = kernels.ID.Tethys, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 45.0 / 24.0, Resolution = 1000 }, - Tag = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", "moonTrail_major_saturn" }, + Tag = { + "moonTrail_solarSystem", + "moonTrail_giants", + "moonTrail_saturn", + "moonTrail_major_saturn" + }, GUI = { Name = "Tethys Trail", Path = "/Solar System/Planets/Saturn/Major Moons/Tethys", @@ -27,15 +33,11 @@ local TethysTrail = { asset.onInitialize(function() - openspace.spice.loadKernel(kernel.sat441) - openspace.addSceneGraphNode(TethysTrail) end) asset.onDeinitialize(function() openspace.removeSceneGraphNode(TethysTrail) - - openspace.spice.unloadKernel(kernel.sat441) end) asset.export(TethysTrail) @@ -44,8 +46,7 @@ asset.export(TethysTrail) asset.meta = { Name = "Tethys Trail", - Version = "1.0", - Description = "Main trail for Tethys. Data from NASA Spice (see base spice asset)", + Description = "Main trail for Tethys", Author = "OpenSpace Team", URL = "http://openspaceproject.com", License = "MIT license" diff --git a/data/assets/scene/solarsystem/planets/saturn/titan/atmosphere.asset b/data/assets/scene/solarsystem/planets/saturn/titan/atmosphere.asset index 719c8807f4..ef2e18ab3f 100644 --- a/data/assets/scene/solarsystem/planets/saturn/titan/atmosphere.asset +++ b/data/assets/scene/solarsystem/planets/saturn/titan/atmosphere.asset @@ -62,7 +62,6 @@ asset.export(Atmosphere) asset.meta = { Name = "Titan Atmosphere", - Version = "1.1", Description = "RenderableAtmosphere for Titan", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/saturn/titan/default_layers.asset b/data/assets/scene/solarsystem/planets/saturn/titan/default_layers.asset index b9b1027544..cd992f6782 100644 --- a/data/assets/scene/solarsystem/planets/saturn/titan/default_layers.asset +++ b/data/assets/scene/solarsystem/planets/saturn/titan/default_layers.asset @@ -4,7 +4,6 @@ asset.require("./layers/colorlayers/cassini_iss_global_mosaic_4km_local", true) asset.meta = { Name = "Default Titan Layers", - Version = "1.0", Description = "Default Titan layers are: Cassini ISS Global Mosaic", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/saturn/titan/layers/colorlayers/cassini_iss_global_mosaic_4km_local.asset b/data/assets/scene/solarsystem/planets/saturn/titan/layers/colorlayers/cassini_iss_global_mosaic_4km_local.asset index 2e069072a2..08550b96de 100644 --- a/data/assets/scene/solarsystem/planets/saturn/titan/layers/colorlayers/cassini_iss_global_mosaic_4km_local.asset +++ b/data/assets/scene/solarsystem/planets/saturn/titan/layers/colorlayers/cassini_iss_global_mosaic_4km_local.asset @@ -2,7 +2,7 @@ local globe = asset.require("../../titan") -local texturesPath = asset.syncedResource({ +local texturesPath = asset.resource({ Type = "HttpSynchronization", Name = "Titan textures", Identifier = "titan_textures", @@ -14,6 +14,7 @@ local Layer = { Identifier = "Cassini_ISS_Global_Mosaic_4km_Local", Name = "Cassini ISS Global Mosaic 4km", Enabled = asset.enabled, + ZIndex = 10, FilePath = texturesPath .. "Titan_ISS_P19658_Mosaic_Global_4km_os.tif", Description = [[This global digital map of Saturn's moon Titan was created using images taken by the Cassini spacecraft's Imaging Science Subsystem (ISS). The map @@ -40,7 +41,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Cassini ISS Global Mosaic", - Version = "1.1", Description = "Cassini global image layer for Titan", Author = "USGS", URL = "https://astrogeology.usgs.gov/search/map/Titan/Cassini/Global-Mosaic/" .. diff --git a/data/assets/scene/solarsystem/planets/saturn/titan/layers/colorlayers/cassini_iss_global_mosaic_4km_newyork.asset b/data/assets/scene/solarsystem/planets/saturn/titan/layers/colorlayers/cassini_iss_global_mosaic_4km_newyork.asset index 8084c7797f..4f9ddaad2c 100644 --- a/data/assets/scene/solarsystem/planets/saturn/titan/layers/colorlayers/cassini_iss_global_mosaic_4km_newyork.asset +++ b/data/assets/scene/solarsystem/planets/saturn/titan/layers/colorlayers/cassini_iss_global_mosaic_4km_newyork.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "Cassini_ISS_Global_Mosaic_4km_NewYork", Name = "Cassini ISS Global Mosaic [New York]", Enabled = asset.enabled, - FilePath = asset.localResource("cassini_iss_global_mosaic_4km_newyork.wms"), + ZIndex = 10, + FilePath = asset.resource("cassini_iss_global_mosaic_4km_newyork.wms"), Description = [[This global digital map of Saturn's moon Titan was created using images taken by the Cassini spacecraft's Imaging Science Subsystem (ISS). The map was produced in June 2015 using data collected through Cassini's flyby on April 7, @@ -32,7 +33,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Cassini ISS Global Mosaic [New York]", - Version = "1.1", Description = [[Cassini global image layer for Titan. This layer is hosted on the OpenSpace server in New York]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/saturn/titan/layers/colorlayers/cassini_iss_global_mosaic_4km_sweden.asset b/data/assets/scene/solarsystem/planets/saturn/titan/layers/colorlayers/cassini_iss_global_mosaic_4km_sweden.asset index bf3cee518d..59a79a5415 100644 --- a/data/assets/scene/solarsystem/planets/saturn/titan/layers/colorlayers/cassini_iss_global_mosaic_4km_sweden.asset +++ b/data/assets/scene/solarsystem/planets/saturn/titan/layers/colorlayers/cassini_iss_global_mosaic_4km_sweden.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "Cassini_ISS_Global_Mosaic_4km_LiU", Name = "Cassini ISS Global Mosaic [Sweden]", Enabled = asset.enabled, - FilePath = asset.localResource("cassini_iss_global_mosaic_4km_sweden.wms"), + ZIndex = 10, + FilePath = asset.resource("cassini_iss_global_mosaic_4km_sweden.wms"), Description = [[This global digital map of Saturn's moon Titan was created using images taken by the Cassini spacecraft's Imaging Science Subsystem (ISS). The map was produced in June 2015 using data collected through Cassini's flyby on April 7, @@ -32,7 +33,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Cassini ISS Global Mosaic", - Version = "1.1", Description = [[Cassini global image layer for Titan. This layer is hosted on the OpenSpace server in Sweden]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/saturn/titan/titan.asset b/data/assets/scene/solarsystem/planets/saturn/titan/titan.asset index 53b332a6f6..cabd4f2813 100644 --- a/data/assets/scene/solarsystem/planets/saturn/titan/titan.asset +++ b/data/assets/scene/solarsystem/planets/saturn/titan/titan.asset @@ -1,10 +1,11 @@ asset.require("./trail") local transforms = asset.require("../transforms") -local kernel = asset.require("../kernels") +local kernels = asset.require("../kernels") +local coreKernels = asset.require("spice/core") -local labelsPath = asset.syncedResource({ +local labelsPath = asset.resource({ Name = "Saturn Labels", Type = "HttpSynchronization", Identifier = "saturn_labels", @@ -18,20 +19,18 @@ local Titan = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "TITAN", - Observer = "SATURN BARYCENTER" + Target = kernels.ID.Titan, + Observer = coreKernels.ID.SaturnBarycenter }, Rotation = { Type = "SpiceRotation", - SourceFrame = "IAU_TITAN", - DestinationFrame = "GALACTIC" + SourceFrame = kernels.Frame.Titan, + DestinationFrame = coreKernels.Frame.Galactic } }, Renderable = { Type = "RenderableGlobe", Radii = 2576000, - SegmentsPerPatch = 64, - Layers = {}, Labels = { Enabled = false, FileName = labelsPath .. "titan.labels", @@ -57,8 +56,8 @@ local TitanLabel = { Identifier = "TitanLabel", Parent = Titan.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Titan", FontSize = 70.0, Size = 6.2, @@ -80,8 +79,6 @@ local TitanLabel = { asset.onInitialize(function() - openspace.spice.loadKernel(kernel.sat441) - openspace.addSceneGraphNode(Titan) openspace.addSceneGraphNode(TitanLabel) end) @@ -89,8 +86,6 @@ end) asset.onDeinitialize(function() openspace.removeSceneGraphNode(TitanLabel) openspace.removeSceneGraphNode(Titan) - - openspace.spice.unloadKernel(kernel.sat441) end) asset.export(Titan) @@ -100,7 +95,6 @@ asset.export(TitanLabel) asset.meta = { Name = "Titan", - Version = "1.2", Description = "Titan globe with labels", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/saturn/titan/trail.asset b/data/assets/scene/solarsystem/planets/saturn/titan/trail.asset index c5568ac4a8..942716d5f0 100644 --- a/data/assets/scene/solarsystem/planets/saturn/titan/trail.asset +++ b/data/assets/scene/solarsystem/planets/saturn/titan/trail.asset @@ -1,5 +1,6 @@ local transforms = asset.require("../transforms") -local kernel = asset.require("../kernels") +local kernels = asset.require("../kernels") +local coreKernels = asset.require("spice/core") @@ -10,14 +11,19 @@ local TitanTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "TITAN", - Observer = "SATURN BARYCENTER" + Target = kernels.ID.Titan, + Observer = coreKernels.ID.SaturnBarycenter }, Color = { 0.5, 0.3, 0.3 }, Period = 16.0, Resolution = 1000 }, - Tag = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_saturn", "moonTrail_major_saturn" }, + Tag = { + "moonTrail_solarSystem", + "moonTrail_giants", + "moonTrail_saturn", + "moonTrail_major_saturn" + }, GUI = { Name = "Titan Trail", Path = "/Solar System/Planets/Saturn/Major Moons/Titan", @@ -27,15 +33,11 @@ local TitanTrail = { asset.onInitialize(function() - openspace.spice.loadKernel(kernel.sat441) - openspace.addSceneGraphNode(TitanTrail) end) asset.onDeinitialize(function() openspace.removeSceneGraphNode(TitanTrail) - - openspace.spice.unloadKernel(kernel.sat441) end) asset.export(TitanTrail) @@ -44,8 +46,7 @@ asset.export(TitanTrail) asset.meta = { Name = "Titan Trail", - Version = "1.2", - Description = "Main trail for Titan. Data from NASA Spice (see base spice asset)", + Description = "Main trail for Titan", Author = "OpenSpace Team", URL = "http://openspaceproject.com", License = "MIT license" diff --git a/data/assets/scene/solarsystem/planets/saturn/trail.asset b/data/assets/scene/solarsystem/planets/saturn/trail.asset index 5dafbc7db8..44617c9697 100644 --- a/data/assets/scene/solarsystem/planets/saturn/trail.asset +++ b/data/assets/scene/solarsystem/planets/saturn/trail.asset @@ -1,4 +1,5 @@ local transforms = asset.require("scene/solarsystem/sun/transforms") +local coreKernels = asset.require("spice/core") @@ -9,8 +10,8 @@ local SaturnTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "SATURN", - Observer = "SSB" + Target = coreKernels.ID.Saturn, + Observer = coreKernels.ID.SolarSystemBarycenter }, Color = { 0.85, 0.75, 0.51 }, Period = 10746.94, @@ -39,8 +40,7 @@ asset.export(SaturnTrail) asset.meta = { Name = "Saturn Trail", - Version = "1.1", - Description = "Main trail of Saturn. Data from NASA Spice (see base spice asset)", + Description = "Main trail of Saturn", Author = "OpenSpace Team", URL = "http://openspaceproject.com", License = "MIT license" diff --git a/data/assets/scene/solarsystem/planets/saturn/trail_barycenter.asset b/data/assets/scene/solarsystem/planets/saturn/trail_barycenter.asset index 5e9fdcbe94..383bb510bc 100644 --- a/data/assets/scene/solarsystem/planets/saturn/trail_barycenter.asset +++ b/data/assets/scene/solarsystem/planets/saturn/trail_barycenter.asset @@ -1,4 +1,5 @@ local transforms = asset.require("scene/solarsystem/sun/transforms") +local coreKernels = asset.require("spice/core") @@ -7,15 +8,15 @@ local SaturnBarycenterTrail = { Parent = transforms.SolarSystemBarycenter.Identifier, Renderable = { Type = "RenderableTrailOrbit", + Enabled = false, Translation = { Type = "SpiceTranslation", - Target = "SATURN BARYCENTER", - Observer = "SSB" + Target = coreKernels.ID.SaturnBarycenter, + Observer = coreKernels.ID.SolarSystemBarycenter }, Color = { 0.85, 0.75, 0.51 }, Period = 10746.94, - Resolution = 1000, - Enabled = false + Resolution = 1000 }, Tag = { "planetTrail_solarSystem", "planetTrail_giants" }, GUI = { @@ -40,9 +41,7 @@ asset.export(SaturnBarycenterTrail) asset.meta = { Name = "Saturn Trail", - Version = "1.1", - Description = [[Trail of Saturn's Barycenter. Data from NASA Spice (see base spice - asset)]], + Description = "Trail of Saturn's Barycenter", Author = "OpenSpace Team", URL = "http://openspaceproject.com", License = "MIT license" diff --git a/data/assets/scene/solarsystem/planets/saturn/trail_earth.asset b/data/assets/scene/solarsystem/planets/saturn/trail_earth.asset index 42acbb752c..e35bd3acd5 100644 --- a/data/assets/scene/solarsystem/planets/saturn/trail_earth.asset +++ b/data/assets/scene/solarsystem/planets/saturn/trail_earth.asset @@ -1,5 +1,5 @@ -asset.require("spice/base") local transforms = asset.require("scene/solarsystem/planets/earth/transforms") +local coreKernels = asset.require("spice/core") @@ -8,15 +8,15 @@ local SaturnTrailEarth = { Parent = transforms.EarthBarycenter.Identifier, Renderable = { Type = "RenderableTrailOrbit", + Enabled = false, Translation = { Type = "SpiceTranslation", - Target = "SATURN", - Observer = "EARTH" + Target = coreKernels.ID.Saturn, + Observer = coreKernels.ID.Earth }, - Color = { 1.0, 0.5, 0.2 }, - Period = 224.695, - Resolution = 1000, - Enabled = false + Color = { 0.85, 0.75, 0.51 }, + Period = 10746.94, + Resolution = 3000 }, Tag = { "planetTrail_solarSystem_alt", "planetTrail_terrestrial_alt" }, GUI = { @@ -41,9 +41,7 @@ asset.export(SaturnTrailEarth) asset.meta = { Name = "Saturn Trail from Earth", - Version = "1.1", - Description = [[Alternate trail of Saturn, as observed by the Earth rather then the Sun. - Data from NASA SPICE (see base spice asset)]], + Description = "Alternate trail of Saturn", Author = "OpenSpace Team", URL = "http://openspaceproject.com", License = "MIT license" diff --git a/data/assets/scene/solarsystem/planets/saturn/transforms.asset b/data/assets/scene/solarsystem/planets/saturn/transforms.asset index 2ac76b0b3d..0d06778328 100644 --- a/data/assets/scene/solarsystem/planets/saturn/transforms.asset +++ b/data/assets/scene/solarsystem/planets/saturn/transforms.asset @@ -1,5 +1,5 @@ -asset.require("spice/base") local transforms = asset.require("scene/solarsystem/sun/transforms") +local coreKernels = asset.require("spice/core") @@ -9,15 +9,14 @@ local SaturnBarycenter = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "SATURN BARYCENTER", - Observer = "SSB" + Target = coreKernels.ID.SaturnBarycenter, + Observer = coreKernels.ID.SolarSystemBarycenter } }, GUI = { Name = "Saturn Barycenter", Path = "/Solar System/Planets/Saturn", - Hidden = true, - Description = "Saturn Barycenter position" + Hidden = true } } @@ -36,7 +35,6 @@ asset.export(SaturnBarycenter) asset.meta = { Name = "Saturn Transforms", - Version = "1.1", Description = "Saturn Barycenter transform", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/sweden_layers.asset b/data/assets/scene/solarsystem/planets/sweden_layers.asset new file mode 100644 index 0000000000..43cb383cf2 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/sweden_layers.asset @@ -0,0 +1,25 @@ +asset.require("./base_layers") + +asset.require("./earth/layers/sweden_layers") +asset.require("./earth/moon/layers/sweden_layers") +asset.require("./jupiter/europa/layers/sweden_layers") +asset.require("./mars/layers/sweden_layers") +asset.require("./mercury/layers/sweden_layers") +asset.require("./saturn/enceladus/layers/sweden_layers") + +-- The Sweden server does not have these layers, use the New York server for now +asset.require("./venus/layers/newyork_layers") + + + +asset.meta = { + Name = "Default Solar System Layers (Sweden)", + Description = [[Adds default layers for all planets. Remove this asset and include + individual layers for planets to customize planet layers + + Layers only loaded from the Sweden server + ]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/uranus/default_layers.asset b/data/assets/scene/solarsystem/planets/uranus/default_layers.asset index bc536ba50e..6ce06eab58 100644 --- a/data/assets/scene/solarsystem/planets/uranus/default_layers.asset +++ b/data/assets/scene/solarsystem/planets/uranus/default_layers.asset @@ -4,7 +4,6 @@ asset.require("./layers/colorlayers/uranus_texture", true) asset.meta = { Name = "Default Uranus Layers", - Version = "1.0", Description = "Default Uranus layers are: Uranus texture", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/uranus/inner_moons.asset b/data/assets/scene/solarsystem/planets/uranus/inner_moons.asset index 7d0428f8cd..eecd6fbe4b 100644 --- a/data/assets/scene/solarsystem/planets/uranus/inner_moons.asset +++ b/data/assets/scene/solarsystem/planets/uranus/inner_moons.asset @@ -1,5 +1,6 @@ local transforms = asset.require("./transforms") -local kernel = asset.require("./kernels") +local kernels115 = asset.require("./kernels115") +local coreKernels = asset.require("spice/core") @@ -9,15 +10,13 @@ local Cordelia = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "CORDELIA", - Observer = "URANUS BARYCENTER" + Target = kernels115.ID.Cordelia, + Observer = coreKernels.ID.UranusBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 40000, 40000, 40000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 40000, 40000, 40000 } }, Tag = { "moon_solarSystem", @@ -40,8 +39,8 @@ local CordeliaTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "CORDELIA", - Observer = "URANUS BARYCENTER" + Target = kernels115.ID.Cordelia, + Observer = coreKernels.ID.UranusBarycenter }, Color = { 0.60, 0.65, 0.84 }, Period = 0.335034, @@ -64,8 +63,8 @@ local CordeliaLabel = { Identifier = "CordeliaLabel", Parent = Cordelia.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Cordelia", FontSize = 70.0, Size = 5.5, @@ -80,8 +79,7 @@ local CordeliaLabel = { Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, GUI = { Name = "Cordelia Label", - Path = "/Solar System/Planets/Uranus/Minor Moons/Inner Moons/Cordelia", - Description = "Label for Uranus' moon Cordelia (Inner Moons)" + Path = "/Solar System/Planets/Uranus/Minor Moons/Inner Moons/Cordelia" } } @@ -91,15 +89,13 @@ local Ophelia = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "OPHELIA", - Observer = "URANUS BARYCENTER" + Target = kernels115.ID.Ophelia, + Observer = coreKernels.ID.UranusBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 43000, 43000, 43000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 43000, 43000, 43000 } }, Tag = { "moon_solarSystem", @@ -122,8 +118,8 @@ local OpheliaTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "OPHELIA", - Observer = "URANUS BARYCENTER" + Target = kernels115.ID.Ophelia, + Observer = coreKernels.ID.UranusBarycenter }, Color = { 0.60, 0.65, 0.84 }, Period = 0.3764, @@ -146,8 +142,8 @@ local OpheliaLabel = { Identifier = "OpheliaLabel", Parent = Ophelia.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Ophelia", FontSize = 70.0, Size = 5.5, @@ -162,8 +158,7 @@ local OpheliaLabel = { Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, GUI = { Name = "Ophelia Label", - Path = "/Solar System/Planets/Uranus/Minor Moons/Inner Moons/Ophelia", - Description = "Label for Uranus' moon Ophelia (Inner Moons)" + Path = "/Solar System/Planets/Uranus/Minor Moons/Inner Moons/Ophelia" } } @@ -173,15 +168,13 @@ local Bianca = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "BIANCA", - Observer = "URANUS BARYCENTER" + Target = kernels115.ID.Bianca, + Observer = coreKernels.ID.UranusBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 64000, 46000, 46000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 64000, 46000, 46000 } }, Tag = { "moon_solarSystem", @@ -204,8 +197,8 @@ local BiancaTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "BIANCA", - Observer = "URANUS BARYCENTER" + Target = kernels115.ID.Bianca, + Observer = coreKernels.ID.UranusBarycenter }, Color = { 0.60, 0.65, 0.84 }, Period = 0.434579, @@ -228,8 +221,8 @@ local BiancaLabel = { Identifier = "BiancaLabel", Parent = Bianca.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Bianca", FontSize = 70.0, Size = 5.5, @@ -244,8 +237,7 @@ local BiancaLabel = { Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, GUI = { Name = "Bianca Label", - Path = "/Solar System/Planets/Uranus/Minor Moons/Inner Moons/Bianca", - Description = "Label for Uranus' moon Bianca (Inner Moons)" + Path = "/Solar System/Planets/Uranus/Minor Moons/Inner Moons/Bianca" } } @@ -255,15 +247,13 @@ local Cressida = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "CRESSIDA", - Observer = "URANUS BARYCENTER" + Target = kernels115.ID.Cressida, + Observer = coreKernels.ID.UranusBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 80000, 80000, 80000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 80000, 80000, 80000 } }, Tag = { "moon_solarSystem", @@ -286,8 +276,8 @@ local CressidaTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "CRESSIDA", - Observer = "URANUS BARYCENTER" + Target = kernels115.ID.Cressida, + Observer = coreKernels.ID.UranusBarycenter }, Color = { 0.60, 0.65, 0.84 }, Period = 0.463570, @@ -310,8 +300,8 @@ local CressidaLabel = { Identifier = "CressidaLabel", Parent = Cressida.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Cressida", FontSize = 70.0, Size = 5.5, @@ -326,8 +316,7 @@ local CressidaLabel = { Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, GUI = { Name = "Cressida Label", - Path = "/Solar System/Planets/Uranus/Minor Moons/Inner Moons/Cressida", - Description = "Label for Uranus' moon Cressida (Inner Moons)" + Path = "/Solar System/Planets/Uranus/Minor Moons/Inner Moons/Cressida" } } @@ -337,15 +326,13 @@ local Desdemona = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "DESDEMONA", - Observer = "URANUS BARYCENTER" + Target = kernels115.ID.Desdemona, + Observer = coreKernels.ID.UranusBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 64000, 64000, 64000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 64000, 64000, 64000 } }, Tag = { "moon_solarSystem", @@ -368,8 +355,8 @@ local DesdemonaTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "DESDEMONA", - Observer = "URANUS BARYCENTER" + Target = kernels115.ID.Desdemona, + Observer = coreKernels.ID.UranusBarycenter }, Color = { 0.60, 0.65, 0.84 }, Period = 0.473650, @@ -392,8 +379,8 @@ local DesdemonaLabel = { Identifier = "DesdemonaLabel", Parent = Desdemona.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Desdemona", FontSize = 70.0, Size = 5.5, @@ -408,8 +395,7 @@ local DesdemonaLabel = { Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, GUI = { Name = "Desdemona Label", - Path = "/Solar System/Planets/Uranus/Minor Moons/Inner Moons/Desdemona", - Description = "Label for Uranus' moon Desdemona (Inner Moons)" + Path = "/Solar System/Planets/Uranus/Minor Moons/Inner Moons/Desdemona" } } @@ -419,15 +405,13 @@ local Juliet = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "JULIET", - Observer = "URANUS BARYCENTER" + Target = kernels115.ID.Juliet, + Observer = coreKernels.ID.UranusBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 94000, 94000, 94000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 94000, 94000, 94000 } }, Tag = { "moon_solarSystem", @@ -450,8 +434,8 @@ local JulietTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "JULIET", - Observer = "URANUS BARYCENTER" + Target = kernels115.ID.Juliet, + Observer = coreKernels.ID.UranusBarycenter }, Color = { 0.60, 0.65, 0.84 }, Period = 0.493065, @@ -474,8 +458,8 @@ local JulietLabel = { Identifier = "JulietLabel", Parent = Juliet.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Juliet", FontSize = 70.0, Size = 5.5, @@ -490,8 +474,7 @@ local JulietLabel = { Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, GUI = { Name = "Juliet Label", - Path = "/Solar System/Planets/Uranus/Minor Moons/Inner Moons/Juliet", - Description = "Label for Uranus' moon Juliet (Inner Moons)" + Path = "/Solar System/Planets/Uranus/Minor Moons/Inner Moons/Juliet" } } @@ -501,15 +484,13 @@ local Portia = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "PORTIA", - Observer = "URANUS BARYCENTER" + Target = kernels115.ID.Portia, + Observer = coreKernels.ID.UranusBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 135000, 135000, 135000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 135000, 135000, 135000 } }, Tag = { "moon_solarSystem", @@ -532,8 +513,8 @@ local PortiaTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "PORTIA", - Observer = "URANUS BARYCENTER" + Target = kernels115.ID.Portia, + Observer = coreKernels.ID.UranusBarycenter }, Color = { 0.60, 0.65, 0.84 }, Period = 0.513196, @@ -556,8 +537,8 @@ local PortiaLabel = { Identifier = "PortiaLabel", Parent = Portia.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Portia", FontSize = 70.0, Size = 5.5, @@ -572,8 +553,7 @@ local PortiaLabel = { Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, GUI = { Name = "Portia Label", - Path = "/Solar System/Planets/Uranus/Minor Moons/Inner Moons/Portia", - Description = "Label for Uranus' moon Portia (Inner Moons)" + Path = "/Solar System/Planets/Uranus/Minor Moons/Inner Moons/Portia" } } @@ -583,15 +563,13 @@ local Rosalind = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "ROSALIND", - Observer = "URANUS BARYCENTER" + Target = kernels115.ID.Rosalind, + Observer = coreKernels.ID.UranusBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 72000, 72000, 72000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 72000, 72000, 72000 } }, Tag = { "moon_solarSystem", @@ -614,8 +592,8 @@ local RosalindTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "ROSALIND", - Observer = "URANUS BARYCENTER" + Target = kernels115.ID.Rosalind, + Observer = coreKernels.ID.UranusBarycenter }, Color = { 0.60, 0.65, 0.84 }, Period = 0.55846, @@ -638,8 +616,8 @@ local RosalindLabel = { Identifier = "RosalindLabel", Parent = Rosalind.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Rosalind", FontSize = 70.0, Size = 5.5, @@ -654,8 +632,7 @@ local RosalindLabel = { Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, GUI = { Name = "Rosalind Label", - Path = "/Solar System/Planets/Uranus/Minor Moons/Inner Moons/Rosalind", - Description = "Label for Uranus' moon Rosalind (Inner Moons)" + Path = "/Solar System/Planets/Uranus/Minor Moons/Inner Moons/Rosalind" } } @@ -665,15 +642,13 @@ local Cupid = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "CUPID", - Observer = "URANUS BARYCENTER" + Target = kernels115.ID.Cupid, + Observer = coreKernels.ID.UranusBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 18000, 18000, 18000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 18000, 18000, 18000 } }, Tag = { "moon_solarSystem", @@ -696,8 +671,8 @@ local CupidTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "CUPID", - Observer = "URANUS BARYCENTER" + Target = kernels115.ID.Cupid, + Observer = coreKernels.ID.UranusBarycenter }, Color = { 0.60, 0.65, 0.84 }, Period = 0.618, @@ -720,8 +695,8 @@ local CupidLabel = { Identifier = "CupidLabel", Parent = Cupid.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Cupid", FontSize = 70.0, Size = 5.5, @@ -736,8 +711,7 @@ local CupidLabel = { Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, GUI = { Name = "Cupid Label", - Path = "/Solar System/Planets/Uranus/Minor Moons/Inner Moons/Cupid", - Description = "Label for Uranus' moon Cupid (Inner Moons)" + Path = "/Solar System/Planets/Uranus/Minor Moons/Inner Moons/Cupid" } } @@ -747,15 +721,13 @@ local Belinda = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "BELINDA", - Observer = "URANUS BARYCENTER" + Target = kernels115.ID.Belinda, + Observer = coreKernels.ID.UranusBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 90000, 90000, 90000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 90000, 90000, 90000 } }, Tag = { "moon_solarSystem", @@ -778,8 +750,8 @@ local BelindaTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "BELINDA", - Observer = "URANUS BARYCENTER" + Target = kernels115.ID.Belinda, + Observer = coreKernels.ID.UranusBarycenter }, Color = { 0.60, 0.65, 0.84 }, Period = 0.623527, @@ -802,8 +774,8 @@ local BelindaLabel = { Identifier = "BelindaLabel", Parent = Belinda.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Belinda", FontSize = 70.0, Size = 5.5, @@ -818,8 +790,7 @@ local BelindaLabel = { Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, GUI = { Name = "Belinda Label", - Path = "/Solar System/Planets/Uranus/Minor Moons/Inner Moons/Belinda", - Description = "Label for Uranus' moon Belinda (Inner Moons)" + Path = "/Solar System/Planets/Uranus/Minor Moons/Inner Moons/Belinda" } } @@ -829,15 +800,13 @@ local Perdita = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "PERDITA", - Observer = "URANUS BARYCENTER" + Target = kernels115.ID.Perdita, + Observer = coreKernels.ID.UranusBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 30000, 30000, 30000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 30000, 30000, 30000 } }, Tag = { "moon_solarSystem", @@ -860,8 +829,8 @@ local PerditaTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "PERDITA", - Observer = "URANUS BARYCENTER" + Target = kernels115.ID.Perdita, + Observer = coreKernels.ID.UranusBarycenter }, Color = { 0.60, 0.65, 0.84 }, Period = 0.638, @@ -884,8 +853,8 @@ local PerditaLabel = { Identifier = "PerditaLabel", Parent = Perdita.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Perdita", FontSize = 70.0, Size = 5.5, @@ -900,8 +869,7 @@ local PerditaLabel = { Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, GUI = { Name = "Perdita Label", - Path = "/Solar System/Planets/Uranus/Minor Moons/Inner Moons/Perdita", - Description = "Label for Uranus' moon Perdita (Inner Moons)" + Path = "/Solar System/Planets/Uranus/Minor Moons/Inner Moons/Perdita" } } @@ -911,15 +879,13 @@ local Puck = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "PUCK", - Observer = "URANUS BARYCENTER" + Target = kernels115.ID.Puck, + Observer = coreKernels.ID.UranusBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 162000, 162000, 162000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 162000, 162000, 162000 } }, Tag = { "moon_solarSystem", @@ -942,8 +908,8 @@ local PuckTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "PUCK", - Observer = "URANUS BARYCENTER" + Target = kernels115.ID.Puck, + Observer = coreKernels.ID.UranusBarycenter }, Color = { 0.60, 0.65, 0.84 }, Period = 0.761833, @@ -966,8 +932,8 @@ local PuckLabel = { Identifier = "PuckLabel", Parent = Puck.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Puck", FontSize = 70.0, Size = 5.5, @@ -982,8 +948,7 @@ local PuckLabel = { Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, GUI = { Name = "Puck Label", - Path = "/Solar System/Planets/Uranus/Minor Moons/Inner Moons/Puck", - Description = "Label for Uranus' moon Puck (Inner Moons)" + Path = "/Solar System/Planets/Uranus/Minor Moons/Inner Moons/Puck" } } @@ -993,15 +958,13 @@ local Mab = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "MAB", - Observer = "URANUS BARYCENTER" + Target = kernels115.ID.Mab, + Observer = coreKernels.ID.UranusBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 25000, 25000, 25000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 25000, 25000, 25000 } }, Tag = { "moon_solarSystem", @@ -1024,8 +987,8 @@ local MabTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "MAB", - Observer = "URANUS BARYCENTER" + Target = kernels115.ID.Mab, + Observer = coreKernels.ID.UranusBarycenter }, Color = { 0.60, 0.65, 0.84 }, Period = 0.923, @@ -1048,8 +1011,8 @@ local MabLabel = { Identifier = "MabLabel", Parent = Mab.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Mab", FontSize = 70.0, Size = 5.5, @@ -1064,15 +1027,12 @@ local MabLabel = { Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, GUI = { Name = "Mab Label", - Path = "/Solar System/Planets/Uranus/Minor Moons/Inner Moons/Mab", - Description = "Label for Uranus' moon Mab (Inner Moons)" + Path = "/Solar System/Planets/Uranus/Minor Moons/Inner Moons/Mab" } } + asset.onInitialize(function() - openspace.spice.loadKernel(kernel.ura115) - - openspace.addSceneGraphNode(Cordelia) openspace.addSceneGraphNode(CordeliaTrail) openspace.addSceneGraphNode(CordeliaLabel) @@ -1178,9 +1138,6 @@ asset.onDeinitialize(function() openspace.removeSceneGraphNode(MabLabel) openspace.removeSceneGraphNode(MabTrail) openspace.removeSceneGraphNode(Mab) - - - openspace.spice.unloadKernel(kernel.ura115) end) asset.export(Cordelia) @@ -1227,7 +1184,6 @@ asset.export(MabLabel) asset.meta = { Name = "Uranus Irregular Retrograde Moons", - Version = "1.0", Description = [[Procedural Globe asset containing Uranus' irregular retrograde moons: Cordelia, Ophelia, Bianca, Cressida, Desdemona, Juliet, Portia, Rosalind, Cupid, Belinda, Perdita, Puck and Mab. Blank globes and SPICE trails are generated for each diff --git a/data/assets/scene/solarsystem/planets/uranus/irregular_prograde_moons.asset b/data/assets/scene/solarsystem/planets/uranus/irregular_prograde_moons.asset index 5d4785be17..3502dfc264 100644 --- a/data/assets/scene/solarsystem/planets/uranus/irregular_prograde_moons.asset +++ b/data/assets/scene/solarsystem/planets/uranus/irregular_prograde_moons.asset @@ -1,5 +1,6 @@ local transforms = asset.require("./transforms") -local kernel = asset.require("./kernels") +local kernel = asset.require("./kernels116") +local coreKernels = asset.require("spice/core") @@ -9,15 +10,13 @@ local Margaret = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "MARGARET", - Observer = "URANUS BARYCENTER" + Target = kernel.ID.Margaret, + Observer = coreKernels.ID.UranusBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 20000, 20000, 20000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 20000, 20000, 20000 } }, Tag = { "moon_solarSystem", @@ -40,8 +39,8 @@ local MargaretTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "MARGARET", - Observer = "URANUS BARYCENTER" + Target = kernel.ID.Margaret, + Observer = coreKernels.ID.UranusBarycenter }, Color = { 0.60, 0.65, 0.84 }, Period = 1694.8, @@ -64,8 +63,8 @@ local MargaretLabel = { Identifier = "MargaretLabel", Parent = Margaret.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Margaret", FontSize = 70.0, Size = 7.0, @@ -80,16 +79,12 @@ local MargaretLabel = { Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, GUI = { Name = "Margaret Label", - Path = "/Solar System/Planets/Uranus/Minor Moons/Irregular Prograde Moons/Margaret", - Description = "Label for Uranus' moon Margaret (Irregular Prograde Moons)" + Path = "/Solar System/Planets/Uranus/Minor Moons/Irregular Prograde Moons/Margaret" } } asset.onInitialize(function() - openspace.spice.loadKernel(kernel.ura116) - - openspace.addSceneGraphNode(Margaret) openspace.addSceneGraphNode(MargaretTrail) openspace.addSceneGraphNode(MargaretLabel) @@ -99,9 +94,6 @@ asset.onDeinitialize(function() openspace.removeSceneGraphNode(MargaretLabel) openspace.removeSceneGraphNode(MargaretTrail) openspace.removeSceneGraphNode(Margaret) - - - openspace.spice.unloadKernel(kernel.ura116) end) asset.export(Margaret) @@ -112,7 +104,6 @@ asset.export(MargaretLabel) asset.meta = { Name = "Uranus Irregular Prograde Moons", - Version = "1.0", Description = [[Procedural Globe asset containing Uranus' irregular prograde moon: Margaret. A blank globe and SPICE trail are generated for the moon]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/planets/uranus/irregular_retrograde_moons.asset b/data/assets/scene/solarsystem/planets/uranus/irregular_retrograde_moons.asset index da897c3dff..15fbab936d 100644 --- a/data/assets/scene/solarsystem/planets/uranus/irregular_retrograde_moons.asset +++ b/data/assets/scene/solarsystem/planets/uranus/irregular_retrograde_moons.asset @@ -1,5 +1,6 @@ local transforms = asset.require("./transforms") -local kernel = asset.require("./kernels") +local kernel = asset.require("./kernels116") +local coreKernels = asset.require("spice/core") @@ -9,15 +10,13 @@ local Francisco = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "FRANCISCO", - Observer = "URANUS BARYCENTER" + Target = kernel.ID.Francisco, + Observer = coreKernels.ID.UranusBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 22000, 22000, 22000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 22000, 22000, 22000 } }, Tag = { "moon_solarSystem", @@ -40,8 +39,8 @@ local FranciscoTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "FRANCISCO", - Observer = "URANUS BARYCENTER" + Target = kernel.ID.Francisco, + Observer = coreKernels.ID.UranusBarycenter }, Color = { 0.60, 0.65, 0.84 }, Period = 266.56, @@ -64,8 +63,8 @@ local FranciscoLabel = { Identifier = "FranciscoLabel", Parent = Francisco.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Francisco", FontSize = 70.0, Size = 7.0, @@ -80,8 +79,7 @@ local FranciscoLabel = { Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, GUI = { Name = "Francisco Label", - Path = "/Solar System/Planets/Uranus/Minor Moons/Irregular Retrograde Moons/Francisco", - Description = "Label for Uranus' moon Francisco (Irregular Retrograde Moons)" + Path = "/Solar System/Planets/Uranus/Minor Moons/Irregular Retrograde Moons/Francisco" } } @@ -91,15 +89,13 @@ local Caliban = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "CALIBAN", - Observer = "URANUS BARYCENTER" + Target = kernel.ID.Caliban, + Observer = coreKernels.ID.UranusBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 72000, 72000, 72000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 72000, 72000, 72000 } }, Tag = { "moon_solarSystem", @@ -122,8 +118,8 @@ local CalibanTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "CALIBAN", - Observer = "URANUS BARYCENTER" + Target = kernel.ID.Caliban, + Observer = coreKernels.ID.UranusBarycenter }, Color = { 0.60, 0.65, 0.84 }, Period = 579.50, @@ -146,8 +142,8 @@ local CalibanLabel = { Identifier = "CalibanLabel", Parent = Caliban.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Caliban", FontSize = 70.0, Size = 7.0, @@ -162,8 +158,7 @@ local CalibanLabel = { Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, GUI = { Name = "Caliban Label", - Path = "/Solar System/Planets/Uranus/Minor Moons/Irregular Retrograde Moons/Caliban", - Description = "Label for Uranus' moon Caliban (Irregular Retrograde Moons)" + Path = "/Solar System/Planets/Uranus/Minor Moons/Irregular Retrograde Moons/Caliban" } } @@ -173,15 +168,13 @@ local Stephano = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "STEPHANO", - Observer = "URANUS BARYCENTER" + Target = kernel.ID.Stephano, + Observer = coreKernels.ID.UranusBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 32000, 32000, 32000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 32000, 32000, 32000 } }, Tag = { "moon_solarSystem", @@ -204,8 +197,8 @@ local StephanoTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "STEPHANO", - Observer = "URANUS BARYCENTER" + Target = kernel.ID.Stephano, + Observer = coreKernels.ID.UranusBarycenter }, Color = { 0.60, 0.65, 0.84 }, Period = 676.50, @@ -228,8 +221,8 @@ local StephanoLabel = { Identifier = "StephanoLabel", Parent = Stephano.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Stephano", FontSize = 70.0, Size = 7.0, @@ -244,8 +237,7 @@ local StephanoLabel = { Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, GUI = { Name = "Stephano Label", - Path = "/Solar System/Planets/Uranus/Minor Moons/Irregular Retrograde Moons/Stephano", - Description = "Label for Uranus' moon Stephano (Irregular Retrograde Moons)" + Path = "/Solar System/Planets/Uranus/Minor Moons/Irregular Retrograde Moons/Stephano" } } @@ -255,15 +247,13 @@ local Trinculo = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "TRINCULO", - Observer = "URANUS BARYCENTER" + Target = kernel.ID.Trinculo, + Observer = coreKernels.ID.UranusBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 18000, 18000, 18000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 18000, 18000, 18000 } }, Tag = { "moon_solarSystem", @@ -286,8 +276,8 @@ local TrinculoTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "TRINCULO", - Observer = "URANUS BARYCENTER" + Target = kernel.ID.Trinculo, + Observer = coreKernels.ID.UranusBarycenter }, Color = { 0.60, 0.65, 0.84 }, Period = 758.10, @@ -310,8 +300,8 @@ local TrinculoLabel = { Identifier = "TrinculoLabel", Parent = Trinculo.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Trinculo", FontSize = 70.0, Size = 7.0, @@ -326,8 +316,7 @@ local TrinculoLabel = { Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, GUI = { Name = "Trinculo Label", - Path = "/Solar System/Planets/Uranus/Minor Moons/Irregular Retrograde Moons/Trinculo", - Description = "Label for Uranus' moon Trinculo (Irregular Retrograde Moons)" + Path = "/Solar System/Planets/Uranus/Minor Moons/Irregular Retrograde Moons/Trinculo" } } @@ -337,15 +326,13 @@ local Sycorax = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "SYCORAX", - Observer = "URANUS BARYCENTER" + Target = kernel.ID.Sycorax, + Observer = coreKernels.ID.UranusBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 165000, 165000, 165000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 165000, 165000, 165000 } }, Tag = { "moon_solarSystem", @@ -368,8 +355,8 @@ local SycoraxTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "SYCORAX", - Observer = "URANUS BARYCENTER" + Target = kernel.ID.Sycorax, + Observer = coreKernels.ID.UranusBarycenter }, Color = { 0.60, 0.65, 0.84 }, Period = 1283.4, @@ -392,8 +379,8 @@ local SycoraxLabel = { Identifier = "SycoraxLabel", Parent = Sycorax.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Sycorax", FontSize = 70.0, Size = 7.0, @@ -408,8 +395,7 @@ local SycoraxLabel = { Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, GUI = { Name = "Sycorax Label", - Path = "/Solar System/Planets/Uranus/Minor Moons/Irregular Retrograde Moons/Sycorax", - Description = "Label for Uranus' moon Sycorax (Irregular Retrograde Moons)" + Path = "/Solar System/Planets/Uranus/Minor Moons/Irregular Retrograde Moons/Sycorax" } } @@ -419,15 +405,13 @@ local Prospero = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "PROSPERO", - Observer = "URANUS BARYCENTER" + Target = kernel.ID.Prospero, + Observer = coreKernels.ID.UranusBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 50000, 50000, 50000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 50000, 50000, 50000 } }, Tag = { "moon_solarSystem", @@ -450,8 +434,8 @@ local ProsperoTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "PROSPERO", - Observer = "URANUS BARYCENTER" + Target = kernel.ID.Prospero, + Observer = coreKernels.ID.UranusBarycenter }, Color = { 0.60, 0.65, 0.84 }, Period = 1992.8, @@ -474,8 +458,8 @@ local ProsperoLabel = { Identifier = "ProsperoLabel", Parent = Prospero.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Prospero", FontSize = 70.0, Size = 7.0, @@ -490,8 +474,7 @@ local ProsperoLabel = { Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, GUI = { Name = "Prospero Label", - Path = "/Solar System/Planets/Uranus/Minor Moons/Irregular Retrograde Moons/Prospero", - Description = "Label for Uranus' moon Prospero (Irregular Retrograde Moons)" + Path = "/Solar System/Planets/Uranus/Minor Moons/Irregular Retrograde Moons/Prospero" } } @@ -501,15 +484,13 @@ local Setebos = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "SETEBOS", - Observer = "URANUS BARYCENTER" + Target = kernel.ID.Setebos, + Observer = coreKernels.ID.UranusBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 48000, 48000, 48000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 48000, 48000, 48000 } }, Tag = { "moon_solarSystem", @@ -532,8 +513,8 @@ local SetebosTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "SETEBOS", - Observer = "URANUS BARYCENTER" + Target = kernel.ID.Setebos, + Observer = coreKernels.ID.UranusBarycenter }, Color = { 0.60, 0.65, 0.84 }, Period = 2202.3, @@ -556,8 +537,8 @@ local SetebosLabel = { Identifier = "SetebosLabel", Parent = Setebos.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Setebos", FontSize = 70.0, Size = 7.0, @@ -572,8 +553,7 @@ local SetebosLabel = { Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, GUI = { Name = "Setebos Label", - Path = "/Solar System/Planets/Uranus/Minor Moons/Irregular Retrograde Moons/Setebos", - Description = "Label for Uranus' moon Setebos (Irregular Retrograde Moons)" + Path = "/Solar System/Planets/Uranus/Minor Moons/Irregular Retrograde Moons/Setebos" } } @@ -583,15 +563,13 @@ local Ferdinand = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "FERDINAND", - Observer = "URANUS BARYCENTER" + Target = kernel.ID.Ferdinand, + Observer = coreKernels.ID.UranusBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 20000, 20000, 20000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 20000, 20000, 20000 } }, Tag = { "moon_solarSystem", @@ -614,8 +592,8 @@ local FerdinandTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "FERDINAND", - Observer = "URANUS BARYCENTER" + Target = kernel.ID.Ferdinand, + Observer = coreKernels.ID.UranusBarycenter }, Color = { 0.60, 0.65, 0.84 }, Period = 2823.4, @@ -638,8 +616,8 @@ local FerdinandLabel = { Identifier = "FerdinandLabel", Parent = Ferdinand.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Ferdinand", FontSize = 70.0, Size = 7.0, @@ -654,16 +632,12 @@ local FerdinandLabel = { Tag = { "solarsystem_labels", "moon_labels", "minor_moon_labels" }, GUI = { Name = "Ferdinand Label", - Path = "/Solar System/Planets/Uranus/Minor Moons/Irregular Retrograde Moons/Ferdinand", - Description = "Label for Uranus' moon Ferdinand (Irregular Retrograde Moons)" + Path = "/Solar System/Planets/Uranus/Minor Moons/Irregular Retrograde Moons/Ferdinand" } } asset.onInitialize(function() - openspace.spice.loadKernel(kernel.ura116) - - openspace.addSceneGraphNode(Francisco) openspace.addSceneGraphNode(FranciscoTrail) openspace.addSceneGraphNode(FranciscoLabel) @@ -729,9 +703,6 @@ asset.onDeinitialize(function() openspace.removeSceneGraphNode(FranciscoLabel) openspace.removeSceneGraphNode(FranciscoTrail) openspace.removeSceneGraphNode(Francisco) - - - openspace.spice.unloadKernel(kernel.ura116) end) asset.export(Francisco) @@ -767,9 +738,9 @@ asset.export(FerdinandTrail) asset.export(FerdinandLabel) + asset.meta = { Name = "Uranus Irregular Retrograde Moons", - Version = "1.0", Description = [[Procedural Globe asset containing Uranus' irregular retrograde moons: Francisco, Caliban, Stephano, Trinculo, Sycorax, Prospero, Setebos and Ferdinand. Blank globes and SPICE trails are generated for each moon]], diff --git a/data/assets/scene/solarsystem/planets/uranus/kernels.asset b/data/assets/scene/solarsystem/planets/uranus/kernels.asset index d7dcbf10c6..50ea5d8bb7 100644 --- a/data/assets/scene/solarsystem/planets/uranus/kernels.asset +++ b/data/assets/scene/solarsystem/planets/uranus/kernels.asset @@ -1,4 +1,8 @@ -local kernels = asset.syncedResource({ +local coreKernels = asset.require("spice/core") + + + +local kernels = asset.resource({ Name = "Uranus Spice Kernels", Type = "HttpSynchronization", Identifier = "uranus_kernels", @@ -6,15 +10,38 @@ local kernels = asset.syncedResource({ }) -asset.export("ura111", kernels .. "ura111.bsp") -asset.export("ura115", kernels .. "ura115.bsp") -asset.export("ura116", kernels .. "ura116.bsp") +local ID = { + Ariel = "ARIEL", + Miranda = "MIRANDA", + Oberon = "OBERON", + Titania = "TITANIA", + Umbriel = "UMBRIEL" +} + +local Frame = { + Ariel = coreKernels.Frame.Ariel, + Miranda = coreKernels.Frame.Miranda, + Oberon = coreKernels.Frame.Oberon, + Titania = coreKernels.Frame.Titania, + Umbriel = coreKernels.Frame.Umbriel +} + + +asset.onInitialize(function() + openspace.spice.loadKernel(kernels .. "ura111.bsp") +end) + +asset.onDeinitialize(function() + openspace.spice.unloadKernel(kernels .. "ura111.bsp") +end) + +asset.export("ID", ID) +asset.export("Frame", Frame) asset.meta = { Name = "Uranus Spice Kernels", - Version = "1.0", Description = "Generic SPICE kernels for Uranus", Author = "OpenSpace Team", URL = "https://naif.jpl.nasa.gov/pub/naif/pds/wgc/kernels/spk/", diff --git a/data/assets/scene/solarsystem/planets/uranus/kernels115.asset b/data/assets/scene/solarsystem/planets/uranus/kernels115.asset new file mode 100644 index 0000000000..cf1b035d35 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/uranus/kernels115.asset @@ -0,0 +1,61 @@ +local coreKernels = asset.require("spice/core") + + + +local kernels = asset.resource({ + Name = "Uranus Spice Kernels", + Type = "HttpSynchronization", + Identifier = "uranus_kernels", + Version = 2 +}) + +local ID = { + Belinda = "BELINDA", + Bianca = "BIANCA", + Cordelia = "CORDELIA", + Cressida = "CRESSIDA", + Cupid = "CUPID", + Desdemona = "DESDEMONA", + Juliet = "JULIET", + Mab = "MAB", + Ophelia = "OPHELIA", + Perdita = "PERDITA", + Portia = "PORTIA", + Puck = "PUCK", + Rosalind = "ROSALIND", +} + +local Frame = { + Belinda = coreKernels.Frame.Belinda, + Bianca = coreKernels.Frame.Bianca, + Cordelia = coreKernels.Frame.Cordelia, + Cressida = coreKernels.Frame.Cressida, + Desdemona = coreKernels.Frame.Desdemona, + Juliet = coreKernels.Frame.Juliet, + Ophelia = coreKernels.Frame.Ophelia, + Portia = coreKernels.Frame.Portia, + Puck = coreKernels.Frame.Puck, + Rosalind = coreKernels.Frame.Rosalind +} + + +asset.onInitialize(function() + openspace.spice.loadKernel(kernels .. "ura115.bsp") +end) + +asset.onDeinitialize(function() + openspace.spice.unloadKernel(kernels .. "ura115.bsp") +end) + +asset.export("ID", ID) +asset.export("Frame", Frame) + + + +asset.meta = { + Name = "Uranus Spice Kernels", + Description = "Generic SPICE kernels for Uranus", + Author = "OpenSpace Team", + URL = "https://naif.jpl.nasa.gov/pub/naif/pds/wgc/kernels/spk/", + License = "NASA" +} diff --git a/data/assets/scene/solarsystem/planets/uranus/kernels116.asset b/data/assets/scene/solarsystem/planets/uranus/kernels116.asset new file mode 100644 index 0000000000..bd1c197f56 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/uranus/kernels116.asset @@ -0,0 +1,40 @@ +local kernels = asset.resource({ + Name = "Uranus Spice Kernels", + Type = "HttpSynchronization", + Identifier = "uranus_kernels", + Version = 2 +}) + + +local ID = { + Caliban = "CALIBAN", + Ferdinand = "FERDINAND", + Francisco = "FRANCISCO", + Margaret = "MARGARET", + Prospero = "PROSPERO", + Setebos = "SETEBOS", + Stephano = "STEPHANO", + Sycorax = "SYCORAX", + Trinculo = "TRINCULO", +} + + +asset.onInitialize(function() + openspace.spice.loadKernel(kernels .. "ura116.bsp") +end) + +asset.onDeinitialize(function() + openspace.spice.unloadKernel(kernels .. "ura116.bsp") +end) + +asset.export("ID", ID) + + + +asset.meta = { + Name = "Uranus Spice Kernels", + Description = "Generic SPICE kernels for Uranus", + Author = "OpenSpace Team", + URL = "https://naif.jpl.nasa.gov/pub/naif/pds/wgc/kernels/spk/", + License = "NASA" +} diff --git a/data/assets/scene/solarsystem/planets/uranus/layers/colorlayers/uranus_texture.asset b/data/assets/scene/solarsystem/planets/uranus/layers/colorlayers/uranus_texture.asset index 5e9d4272bf..ac086829a9 100644 --- a/data/assets/scene/solarsystem/planets/uranus/layers/colorlayers/uranus_texture.asset +++ b/data/assets/scene/solarsystem/planets/uranus/layers/colorlayers/uranus_texture.asset @@ -2,7 +2,7 @@ local globe = asset.require("../../uranus") -local texturesPath = asset.syncedResource({ +local texturesPath = asset.resource({ Name = "Uranus Textures", Type = "HttpSynchronization", Identifier = "uranus_textures", @@ -13,7 +13,9 @@ local texturesPath = asset.syncedResource({ local Layer = { Identifier = "Texture", FilePath = texturesPath .. "uranus.jpg", - Enabled = asset.enabled + Enabled = asset.enabled, + ZIndex = 5, + CacheSettings = { Enabled = false } } @@ -31,7 +33,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Uranus texture", - Version = "1.0", Description = "Uranus image texture", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/uranus/major_moons.asset b/data/assets/scene/solarsystem/planets/uranus/major_moons.asset index 4d5f5eade6..771216c58f 100644 --- a/data/assets/scene/solarsystem/planets/uranus/major_moons.asset +++ b/data/assets/scene/solarsystem/planets/uranus/major_moons.asset @@ -1,5 +1,6 @@ local transforms = asset.require("./transforms") -local kernel = asset.require("./kernels") +local kernels = asset.require("./kernels") +local coreKernels = asset.require("spice/core") @@ -9,17 +10,21 @@ local Miranda = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "MIRANDA", - Observer = "URANUS BARYCENTER" + Target = kernels.ID.Miranda, + Observer = coreKernels.ID.UranusBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 471600, 468000, 466000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 471600, 468000, 466000 } + }, + Tag = { + "moon_solarSystem", + "moon_giants", + "moon_uranus", + "moon_major", + "moon_major_uranus" }, - Tag = { "moon_solarSystem", "moon_giants", "moon_uranus", "moon_major", "moon_major_uranus" }, GUI = { Name = "Miranda", Path = "/Solar System/Planets/Uranus/Major Moons/Miranda" @@ -33,14 +38,19 @@ local MirandaTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "MIRANDA", - Observer = "URANUS BARYCENTER" + Target = kernels.ID.Miranda, + Observer = coreKernels.ID.UranusBarycenter }, Color = { 0.60, 0.65, 0.84 }, Period = 1.413479, Resolution = 1000 }, - Tag = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_uranus", "moonTrail_major_uranus" }, + Tag = { + "moonTrail_solarSystem", + "moonTrail_giants", + "moonTrail_uranus", + "moonTrail_major_uranus" + }, GUI = { Name = "Miranda Trail", Path = "/Solar System/Planets/Uranus/Major Moons/Miranda" @@ -51,8 +61,8 @@ local MirandaLabel = { Identifier = "MirandaLabel", Parent = Miranda.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Miranda", FontSize = 70.0, Size = 7.4, @@ -67,8 +77,7 @@ local MirandaLabel = { Tag = { "solarsystem_labels", "moon_labels", "major_moon_labels" }, GUI = { Name = "Miranda Label", - Path = "/Solar System/Planets/Uranus/Major Moons/Miranda", - Description = "Label for Uranus' moon Miranda" + Path = "/Solar System/Planets/Uranus/Major Moons/Miranda" } } @@ -78,17 +87,21 @@ local Ariel = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "ARIEL", - Observer = "URANUS BARYCENTER" + Target = kernels.ID.Ariel, + Observer = coreKernels.ID.UranusBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 1162000, 1156000, 1155000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 1162000, 1156000, 1155000 } + }, + Tag = { + "moon_solarSystem", + "moon_giants", + "moon_uranus", + "moon_major", + "moon_major_uranus" }, - Tag = { "moon_solarSystem", "moon_giants", "moon_uranus", "moon_major", "moon_major_uranus" }, GUI = { Name = "Ariel", Path = "/Solar System/Planets/Uranus/Major Moons/Ariel" @@ -102,14 +115,19 @@ local ArielTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "ARIEL", - Observer = "URANUS BARYCENTER" + Target = kernels.ID.Ariel, + Observer = coreKernels.ID.UranusBarycenter }, Color = { 0.60, 0.65, 0.84 }, Period = 2.520379, Resolution = 1000 }, - Tag = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_uranus", "moonTrail_major_uranus" }, + Tag = { + "moonTrail_solarSystem", + "moonTrail_giants", + "moonTrail_uranus", + "moonTrail_major_uranus" + }, GUI = { Name = "Ariel Trail", Path = "/Solar System/Planets/Uranus/Major Moons/Ariel" @@ -120,8 +138,8 @@ local ArielLabel = { Identifier = "ArielLabel", Parent = Ariel.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Ariel", FontSize = 70.0, Size = 7.4, @@ -136,8 +154,7 @@ local ArielLabel = { Tag = { "solarsystem_labels", "moon_labels", "major_moon_labels" }, GUI = { Name = "Ariel Label", - Path = "/Solar System/Planets/Uranus/Major Moons/Ariel", - Description = "Label for Uranus' moon Ariel" + Path = "/Solar System/Planets/Uranus/Major Moons/Ariel" } } @@ -147,17 +164,21 @@ local Umbriel = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "UMBRIEL", - Observer = "URANUS BARYCENTER" + Target = kernels.ID.Umbriel, + Observer = coreKernels.ID.UranusBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 1169400, 1169400, 1169400 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 1169400, 1169400, 1169400 } + }, + Tag = { + "moon_solarSystem", + "moon_giants", + "moon_uranus", + "moon_major", + "moon_major_uranus" }, - Tag = { "moon_solarSystem", "moon_giants", "moon_uranus", "moon_major", "moon_major_uranus" }, GUI = { Name = "Umbriel", Path = "/Solar System/Planets/Uranus/Major Moons/Umbriel" @@ -171,14 +192,19 @@ local UmbrielTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "UMBRIEL", - Observer = "URANUS BARYCENTER" + Target = kernels.ID.Umbriel, + Observer = coreKernels.ID.UranusBarycenter }, Color = { 0.60, 0.65, 0.84 }, Period = 4.144177, Resolution = 1000 }, - Tag = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_uranus", "moonTrail_major_uranus" }, + Tag = { + "moonTrail_solarSystem", + "moonTrail_giants", + "moonTrail_uranus", + "moonTrail_major_uranus" + }, GUI = { Name = "Umbriel Trail", Path = "/Solar System/Planets/Uranus/Major Moons/Umbriel" @@ -189,8 +215,8 @@ local UmbrielLabel = { Identifier = "UmbrielLabel", Parent = Umbriel.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Umbriel", FontSize = 70.0, Size = 7.4, @@ -205,8 +231,7 @@ local UmbrielLabel = { Tag = { "solarsystem_labels", "moon_labels", "major_moon_labels" }, GUI = { Name = "Umbriel Label", - Path = "/Solar System/Planets/Uranus/Major Moons/Umbriel", - Description = "Label for Uranus' moon Umbriel" + Path = "/Solar System/Planets/Uranus/Major Moons/Umbriel" } } @@ -216,17 +241,21 @@ local Titania = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "TITANIA", - Observer = "URANUS BARYCENTER" + Target = kernels.ID.Titania, + Observer = coreKernels.ID.UranusBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 1576800, 1576800, 1576800 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 1576800, 1576800, 1576800 } + }, + Tag = { + "moon_solarSystem", + "moon_giants", + "moon_uranus", + "moon_major", + "moon_major_uranus" }, - Tag = { "moon_solarSystem", "moon_giants", "moon_uranus", "moon_major", "moon_major_uranus" }, GUI = { Name = "Titania", Path = "/Solar System/Planets/Uranus/Major Moons/Titania" @@ -240,14 +269,19 @@ local TitaniaTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "TITANIA", - Observer = "URANUS BARYCENTER" + Target = kernels.ID.Titania, + Observer = coreKernels.ID.UranusBarycenter }, Color = { 0.60, 0.65, 0.84 }, Period = 8.705872, Resolution = 1000 }, - Tag = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_uranus", "moonTrail_major_uranus" }, + Tag = { + "moonTrail_solarSystem", + "moonTrail_giants", + "moonTrail_uranus", + "moonTrail_major_uranus" + }, GUI = { Name = "Titania Trail", Path = "/Solar System/Planets/Uranus/Major Moons/Titania" @@ -258,8 +292,8 @@ local TitaniaLabel = { Identifier = "TitaniaLabel", Parent = Titania.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Titania", FontSize = 70.0, Size = 7.4, @@ -274,8 +308,7 @@ local TitaniaLabel = { Tag = { "solarsystem_labels", "moon_labels", "major_moon_labels" }, GUI = { Name = "Titania Label", - Path = "/Solar System/Planets/Uranus/Major Moons/Titania", - Description = "Label for Uranus' moon Titania" + Path = "/Solar System/Planets/Uranus/Major Moons/Titania" } } @@ -285,17 +318,21 @@ local Oberon = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "OBERON", - Observer = "URANUS BARYCENTER" + Target = kernels.ID.Oberon, + Observer = coreKernels.ID.UranusBarycenter } }, Renderable = { Type = "RenderableGlobe", - Radii = { 1522800, 1522800, 1522800 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 1522800, 1522800, 1522800 } + }, + Tag = { + "moon_solarSystem", + "moon_giants", + "moon_uranus", + "moon_major", + "moon_major_uranus" }, - Tag = { "moon_solarSystem", "moon_giants", "moon_uranus", "moon_major", "moon_major_uranus" }, GUI = { Name = "Oberon", Path = "/Solar System/Planets/Uranus/Major Moons/Oberon" @@ -309,14 +346,19 @@ local OberonTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "OBERON", - Observer = "URANUS BARYCENTER" + Target = kernels.ID.Oberon, + Observer = coreKernels.ID.UranusBarycenter }, Color = { 0.60, 0.65, 0.84 }, Period = 13.463239, Resolution = 1000 }, - Tag = { "moonTrail_solarSystem", "moonTrail_giants", "moonTrail_uranus", "moonTrail_major_uranus" }, + Tag = { + "moonTrail_solarSystem", + "moonTrail_giants", + "moonTrail_uranus", + "moonTrail_major_uranus" + }, GUI = { Name = "Oberon Trail", Path = "/Solar System/Planets/Uranus/Major Moons/Oberon" @@ -327,8 +369,8 @@ local OberonLabel = { Identifier = "OberonLabel", Parent = Oberon.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Oberon", FontSize = 70.0, Size = 7.4, @@ -343,21 +385,19 @@ local OberonLabel = { Tag = { "solarsystem_labels", "moon_labels", "major_moon_labels" }, GUI = { Name = "Oberon Label", - Path = "/Solar System/Planets/Uranus/Major Moons/Oberon", - Description = "Label for Uranus' moon Oberon" + Path = "/Solar System/Planets/Uranus/Major Moons/Oberon" } } - local UranusMajorMoonsOn = { Identifier = "os.solarsystem.UranusMajorMoonsOn", Name = "Turn ON major moons and trails", Command = [[ - local trails = openspace.getProperty("{moonTrail_major_uranus}.Renderable.Enabled") - local trails_fade = openspace.getProperty("{moonTrail_major_uranus}.Renderable.Fade") + local trails = openspace.property("{moonTrail_major_uranus}.Renderable.Enabled") + local trails_fade = openspace.property("{moonTrail_major_uranus}.Renderable.Fade") - local moons = openspace.getProperty("{moon_major_uranus}.Renderable.Enabled") - local moons_fade = openspace.getProperty("{moon_major_uranus}.Renderable.Fade") + local moons = openspace.property("{moon_major_uranus}.Renderable.Enabled") + local moons_fade = openspace.property("{moon_major_uranus}.Renderable.Fade") for i, v in pairs(trails_fade) do openspace.setPropertyValueSingle(trails[i], true) @@ -371,18 +411,18 @@ local UranusMajorMoonsOn = { ]], Documentation = "Turn ON Uranus's major moons and their trails", GuiPath = "/Solar System/Uranus", - IsLocal = true + IsLocal = false } local UranusMajorMoonsOff = { Identifier = "os.solarsystem.UranusMajorMoonsOff", Name = "Turn OFF majors moon and trails", Command = [[ - local trails = openspace.getProperty("{moonTrail_major_uranus}.Renderable.Enabled") - local trails_fade = openspace.getProperty("{moonTrail_major_uranus}.Renderable.Fade") + local trails = openspace.property("{moonTrail_major_uranus}.Renderable.Enabled") + local trails_fade = openspace.property("{moonTrail_major_uranus}.Renderable.Fade") - local moons = openspace.getProperty("{moon_major_uranus}.Renderable.Enabled") - local moons_fade = openspace.getProperty("{moon_major_uranus}.Renderable.Fade") + local moons = openspace.property("{moon_major_uranus}.Renderable.Enabled") + local moons_fade = openspace.property("{moon_major_uranus}.Renderable.Fade") for i, v in pairs(trails_fade) do openspace.setPropertyValueSingle( @@ -406,14 +446,11 @@ local UranusMajorMoonsOff = { ]], Documentation = "Turn OFF Uranus's major moons and their trails", GuiPath = "/Solar System/Uranus", - IsLocal = true + IsLocal = false } asset.onInitialize(function() - openspace.spice.loadKernel(kernel.ura111) - - openspace.addSceneGraphNode(Miranda) openspace.addSceneGraphNode(MirandaTrail) openspace.addSceneGraphNode(MirandaLabel) @@ -461,9 +498,6 @@ asset.onDeinitialize(function() openspace.removeSceneGraphNode(OberonLabel) openspace.removeSceneGraphNode(OberonTrail) openspace.removeSceneGraphNode(Oberon) - - - openspace.spice.unloadKernel(kernel.ura111) end) asset.export(Miranda) @@ -485,9 +519,9 @@ asset.export("UranusMajorMoonsOn", UranusMajorMoonsOn.Identifier) asset.export("UranusMajorMoonsOff", UranusMajorMoonsOff.Identifier) + asset.meta = { Name = "Uranus Marjor Moons", - Version = "1.0", Description = [[Procedural Globe asset containing Uranus' major moons: Miranda, Ariel, Umbriel, Titania, and Oberon. Blank globes and SPICE trails are generated for each moon]], diff --git a/data/assets/scene/solarsystem/planets/uranus/minor_moons.asset b/data/assets/scene/solarsystem/planets/uranus/minor_moons.asset index ecdce57028..b78a6a7aae 100644 --- a/data/assets/scene/solarsystem/planets/uranus/minor_moons.asset +++ b/data/assets/scene/solarsystem/planets/uranus/minor_moons.asset @@ -8,11 +8,11 @@ local UranusMinorMoonsOn = { Identifier = "os.solarsystem.UranusMinorMoonsOn", Name = "Turn ON minor moons and trails", Command = [[ - local trails = openspace.getProperty("{moonTrail_minor_uranus}.Renderable.Enabled") - local trails_fade = openspace.getProperty("{moonTrail_minor_uranus}.Renderable.Fade") + local trails = openspace.property("{moonTrail_minor_uranus}.Renderable.Enabled") + local trails_fade = openspace.property("{moonTrail_minor_uranus}.Renderable.Fade") - local moons = openspace.getProperty("{moon_minor_uranus}.Renderable.Enabled") - local moons_fade = openspace.getProperty("{moon_minor_uranus}.Renderable.Fade") + local moons = openspace.property("{moon_minor_uranus}.Renderable.Enabled") + local moons_fade = openspace.property("{moon_minor_uranus}.Renderable.Fade") for i, v in pairs(trails_fade) do openspace.setPropertyValueSingle(trails[i], true) @@ -26,18 +26,18 @@ local UranusMinorMoonsOn = { ]], Documentation = "Turn ON Uranus's minor moons and their trails", GuiPath = "/Solar System/Uranus", - IsLocal = true + IsLocal = false } local UranusMinorMoonsOff = { Identifier = "os.solarsystem.UranusMinorMoonsOff", Name = "Turn OFF minors moon and trails", Command = [[ - local trails = openspace.getProperty("{moonTrail_minor_uranus}.Renderable.Enabled") - local trails_fade = openspace.getProperty("{moonTrail_minor_uranus}.Renderable.Fade") + local trails = openspace.property("{moonTrail_minor_uranus}.Renderable.Enabled") + local trails_fade = openspace.property("{moonTrail_minor_uranus}.Renderable.Fade") - local moons = openspace.getProperty("{moon_minor_uranus}.Renderable.Enabled") - local moons_fade = openspace.getProperty("{moon_minor_uranus}.Renderable.Fade") + local moons = openspace.property("{moon_minor_uranus}.Renderable.Enabled") + local moons_fade = openspace.property("{moon_minor_uranus}.Renderable.Fade") for i, v in pairs(trails_fade) do openspace.setPropertyValueSingle( @@ -61,7 +61,7 @@ local UranusMinorMoonsOff = { ]], Documentation = "Turn OFF Uranus's minor moons and their trails", GuiPath = "/Solar System/Uranus", - IsLocal = true + IsLocal = false } @@ -82,7 +82,6 @@ asset.export("UranusMinorMoonsOff", UranusMinorMoonsOff.Identifier) asset.meta = { Name = "Uranus Minor Moons", - Version = "1.1", Description = [[Meta asset containing three moon groups: Inner Moons, Irregular Prograde Moons and Irregular Retrograde Moons]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/planets/uranus/trail.asset b/data/assets/scene/solarsystem/planets/uranus/trail.asset index 218363e6fe..ef649343ca 100644 --- a/data/assets/scene/solarsystem/planets/uranus/trail.asset +++ b/data/assets/scene/solarsystem/planets/uranus/trail.asset @@ -1,4 +1,5 @@ local transforms = asset.require("scene/solarsystem/sun/transforms") +local coreKernels = asset.require("spice/core") @@ -9,11 +10,11 @@ local UranusTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "URANUS", - Observer = "SSB" + Target = coreKernels.ID.Uranus, + Observer = coreKernels.ID.SolarSystemBarycenter }, Color = { 0.60, 0.95, 1.00 }, - Period = 30588.740, + Period = 30685.4, Resolution = 1000 }, Tag = { "planetTrail_solarSystem", "planetTrail_giants" }, @@ -39,8 +40,7 @@ asset.export(UranusTrail) asset.meta = { Name = "Uranus Trail", - Version = "1.1", - Description = "Main trail of Uranus. Data from NASA Spice (see base spice asset)", + Description = "Main trail of Uranus", Author = "OpenSpace Team", URL = "http://openspaceproject.com", License = "MIT license" diff --git a/data/assets/scene/solarsystem/planets/uranus/trail_barycenter.asset b/data/assets/scene/solarsystem/planets/uranus/trail_barycenter.asset index 6744b2dc0e..cdd4fd6513 100644 --- a/data/assets/scene/solarsystem/planets/uranus/trail_barycenter.asset +++ b/data/assets/scene/solarsystem/planets/uranus/trail_barycenter.asset @@ -1,4 +1,5 @@ local transforms = asset.require("scene/solarsystem/sun/transforms") +local coreKernels = asset.require("spice/core") @@ -7,15 +8,15 @@ local UranusBarycenterTrail = { Parent = transforms.SolarSystemBarycenter.Identifier, Renderable = { Type = "RenderableTrailOrbit", + Enabled = false, Translation = { Type = "SpiceTranslation", - Target = "URANUS BARYCENTER", - Observer = "SSB" + Target = coreKernels.ID.UranusBarycenter, + Observer = coreKernels.ID.SolarSystemBarycenter }, Color = { 0.60, 0.95, 1.00 }, Period = 30588.740, - Resolution = 1000, - Enabled = false + Resolution = 1000 }, Tag = { "planetTrail_solarSystem", "planetTrail_giants" }, GUI = { @@ -40,9 +41,7 @@ asset.export(UranusBarycenterTrail) asset.meta = { Name = "Uranus Trail", - Version = "1.1", - Description = [[Trail of Uranus' Barycenter. Data from NASA Spice (see base spice - asset)]], + Description = "Trail of Uranus' Barycenter", Author = "OpenSpace Team", URL = "http://openspaceproject.com", License = "MIT license" diff --git a/data/assets/scene/solarsystem/planets/uranus/trail_earth.asset b/data/assets/scene/solarsystem/planets/uranus/trail_earth.asset index 373c601692..be915740bc 100644 --- a/data/assets/scene/solarsystem/planets/uranus/trail_earth.asset +++ b/data/assets/scene/solarsystem/planets/uranus/trail_earth.asset @@ -1,5 +1,5 @@ -asset.require("spice/base") local transforms = asset.require("scene/solarsystem/planets/earth/transforms") +local coreKernels = asset.require("spice/core") @@ -8,15 +8,15 @@ local UranusTrailEarth = { Parent = transforms.EarthBarycenter.Identifier, Renderable = { Type = "RenderableTrailOrbit", + Enabled = false, Translation = { Type = "SpiceTranslation", - Target = "URANUS", - Observer = "EARTH" + Target = coreKernels.ID.Uranus, + Observer = coreKernels.ID.Earth }, - Color = { 1.0, 0.5, 0.2 }, - Period = 224.695, - Resolution = 1000, - Enabled = false + Color = { 0.6, 0.95, 1.0 }, + Period = 30588.74, + Resolution = 3000 }, Tag = { "planetTrail_solarSystem_alt", "planetTrail_terrestrial_alt" }, GUI = { @@ -41,9 +41,7 @@ asset.export(UranusTrailEarth) asset.meta = { Name = "Uranus Trail from Earth", - Version = "1.1", - Description = [[Alternate trail of Uranus, as observed by the Earth rather then the Sun. - Data from NASA SPICE (see base spice asset)]], + Description = "Alternate trail of Uranus, as observed by the Earth rather then the Sun", Author = "OpenSpace Team", URL = "http://openspaceproject.com", License = "MIT license" diff --git a/data/assets/scene/solarsystem/planets/uranus/transforms.asset b/data/assets/scene/solarsystem/planets/uranus/transforms.asset index 0ff002020a..6e05e5c0e7 100644 --- a/data/assets/scene/solarsystem/planets/uranus/transforms.asset +++ b/data/assets/scene/solarsystem/planets/uranus/transforms.asset @@ -1,5 +1,5 @@ -asset.require("spice/base") local transforms = asset.require("scene/solarsystem/sun/transforms") +local coreKernels = asset.require("spice/core") @@ -9,15 +9,14 @@ local UranusBarycenter = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "URANUS BARYCENTER", - Observer = "SSB" + Target = coreKernels.ID.UranusBarycenter, + Observer = coreKernels.ID.SolarSystemBarycenter } }, GUI = { Name = "Uranus Barycenter", Path = "/Solar System/Planets/Uranus", - Hidden = true, - Description = "Uranus Barycenter position" + Hidden = true } } @@ -36,7 +35,6 @@ asset.export(UranusBarycenter) asset.meta = { Name = "Uranus Transforms", - Version = "1.1", Description = "Uranus Barycenter transform", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/uranus/uranus.asset b/data/assets/scene/solarsystem/planets/uranus/uranus.asset index 1f86f751b7..5bda3b2e01 100644 --- a/data/assets/scene/solarsystem/planets/uranus/uranus.asset +++ b/data/assets/scene/solarsystem/planets/uranus/uranus.asset @@ -1,6 +1,6 @@ -asset.require("spice/base") asset.require("./trail") local transforms = asset.require("./transforms") +local coreKernels = asset.require("spice/core") @@ -10,26 +10,23 @@ local Uranus = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "URANUS", - Observer = "URANUS BARYCENTER" + Target = coreKernels.ID.Uranus, + Observer = coreKernels.ID.UranusBarycenter }, Rotation = { Type = "SpiceRotation", - SourceFrame = "IAU_URANUS", - DestinationFrame = "GALACTIC" + SourceFrame = coreKernels.Frame.Uranus, + DestinationFrame = coreKernels.Frame.Galactic } }, Renderable = { Type = "RenderableGlobe", - Radii = { 25559000, 25559000, 24973000 }, - SegmentsPerPatch = 64, - Layers = {} + Radii = { 25559000, 25559000, 24973000 } }, Tag = { "planet_solarSystem", "planet_giants" }, GUI = { Name = "Uranus", - Path = "/Solar System/Planets/Uranus", - Description = "Globe for Uranus" + Path = "/Solar System/Planets/Uranus" } } @@ -37,8 +34,8 @@ local UranusLabel = { Identifier = "UranusLabel", Parent = Uranus.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Uranus", FontSize = 70.0, Size = 9.0, @@ -53,8 +50,7 @@ local UranusLabel = { Tag = { "solarsystem_labels" }, GUI = { Name = "Uranus Label", - Path = "/Solar System/Planets/Uranus", - Description = "Main planet label for Uranus" + Path = "/Solar System/Planets/Uranus" } } @@ -76,7 +72,6 @@ asset.export(UranusLabel) asset.meta = { Name = "Uranus", - Version = "1.1", Description = "Uranus globe, and main planet label", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/utah_layers.asset b/data/assets/scene/solarsystem/planets/utah_layers.asset new file mode 100644 index 0000000000..741cd1188f --- /dev/null +++ b/data/assets/scene/solarsystem/planets/utah_layers.asset @@ -0,0 +1,25 @@ +asset.require("./base_layers") + +asset.require("./earth/layers/utah_layers") +asset.require("./earth/moon/layers/utah_layers") +asset.require("./mars/layers/utah_layers") +asset.require("./mercury/layers/utah_layers") +asset.require("./venus/layers/utah_layers") + +-- The Utah server does not have these layers, use the New York server for now +asset.require("./jupiter/europa/layers/newyork_layers") +asset.require("./saturn/enceladus/layers/newyork_layers") + + + +asset.meta = { + Name = "Default Solar System Layers (Utah)", + Description = [[Adds default layers for all planets. Remove this asset and include + individual layers for planets to customize planet layers + + Layers only loaded from the Utah server + ]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/venus/atmosphere.asset b/data/assets/scene/solarsystem/planets/venus/atmosphere.asset index b2461330f8..66604edb9e 100644 --- a/data/assets/scene/solarsystem/planets/venus/atmosphere.asset +++ b/data/assets/scene/solarsystem/planets/venus/atmosphere.asset @@ -67,7 +67,6 @@ asset.export(Atmosphere) asset.meta = { Name = "Venus Atmosphere", - Version = "1.1", Description = "Atmosphere of Venus", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/venus/default_layers.asset b/data/assets/scene/solarsystem/planets/venus/default_layers.asset index 957149d5a2..401dccc331 100644 --- a/data/assets/scene/solarsystem/planets/venus/default_layers.asset +++ b/data/assets/scene/solarsystem/planets/venus/default_layers.asset @@ -1,18 +1,16 @@ -asset.require("./layers/colorlayers/magellan_mosaic_utah", false) -asset.require("./layers/colorlayers/magellan_mosaic_newyork", false) -asset.require("./layers/colorlayers/venus_texture", false) -asset.require("./layers/colorlayers/clouds_magellan_combo", true) -asset.require("./layers/colorlayers/clouds_magellan_combo_newyork", false) - -asset.require("./layers/heightlayers/magellan_utah", true) -asset.require("./layers/heightlayers/magellan_newyork", false) +asset.require("./layers/base_layers", false) +asset.require("./layers/newyork_layers", false) +asset.require("./layers/utah_layers", true) asset.meta = { Name = "Default Venus Layers", - Version = "1.1", - Description = "Default Venus layers are: Venus Magellan Mosaic and Venus Magellan DEM", + Description = [[Default Venus layers are: Venus Texture, Magellan Mosaic, + Clouds Magellan Combo, and Magellan Elevation (3D). + + Layers loaded from all available servers + ]], Author = "OpenSpace Team", URL = "http://openspaceproject.com", License = "MIT license" diff --git a/data/assets/scene/solarsystem/planets/venus/layers/base_layers.asset b/data/assets/scene/solarsystem/planets/venus/layers/base_layers.asset new file mode 100644 index 0000000000..d51f4a2e7a --- /dev/null +++ b/data/assets/scene/solarsystem/planets/venus/layers/base_layers.asset @@ -0,0 +1,11 @@ +asset.require("./colorlayers/venus_texture", false) + + + +asset.meta = { + Name = "Base Venus Layers", + Description = "Base Venus layers are: Venus Texture", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/venus/layers/colorlayers/clouds_magellan_combo_newyork.asset b/data/assets/scene/solarsystem/planets/venus/layers/colorlayers/clouds_magellan_combo_newyork.asset index e8a1211c15..09fee19707 100644 --- a/data/assets/scene/solarsystem/planets/venus/layers/colorlayers/clouds_magellan_combo_newyork.asset +++ b/data/assets/scene/solarsystem/planets/venus/layers/colorlayers/clouds_magellan_combo_newyork.asset @@ -2,7 +2,7 @@ local globe = asset.require("../../venus") -local texturesPath = asset.syncedResource({ +local texturesPath = asset.resource({ Name = "Venus Textures", Type = "HttpSynchronization", Identifier = "venus_textures", @@ -14,14 +14,16 @@ local Layer = { Identifier = "Clouds_Magellan_Combo_NewYork", Name = "Clouds Magellan Combo [New York]", Enabled = asset.enabled, - Type = "ByLevelTileLayer", + ZIndex = 20, + Type = "TileProviderByLevel", LevelTileProviders = { { MaxLevel = 4, TileProvider = { Identifier = "Clouds", Name = "Clouds", - FilePath = texturesPath .. "venus_clouds.jpg" + FilePath = texturesPath .. "venus_clouds.jpg", + CacheSettings = { Enabled = false } } }, { @@ -29,7 +31,7 @@ local Layer = { TileProvider = { Identifier = "Magellan_Mosaic_NewYork", Name = "Magellan Mosaic [New York]", - FilePath = asset.localResource("magellan_mosaic_newyork.vrt"), + FilePath = asset.resource("magellan_mosaic_newyork.vrt"), BlendMode = "Color", Settings = { Gamma = 2.0 } } diff --git a/data/assets/scene/solarsystem/planets/venus/layers/colorlayers/clouds_magellan_combo.asset b/data/assets/scene/solarsystem/planets/venus/layers/colorlayers/clouds_magellan_combo_utah.asset similarity index 71% rename from data/assets/scene/solarsystem/planets/venus/layers/colorlayers/clouds_magellan_combo.asset rename to data/assets/scene/solarsystem/planets/venus/layers/colorlayers/clouds_magellan_combo_utah.asset index 603db61c9a..cf16f08f58 100644 --- a/data/assets/scene/solarsystem/planets/venus/layers/colorlayers/clouds_magellan_combo.asset +++ b/data/assets/scene/solarsystem/planets/venus/layers/colorlayers/clouds_magellan_combo_utah.asset @@ -2,7 +2,7 @@ local globe = asset.require("../../venus") -local texturesPath = asset.syncedResource({ +local texturesPath = asset.resource({ Name = "Venus Textures", Type = "HttpSynchronization", Identifier = "venus_textures", @@ -11,17 +11,19 @@ local texturesPath = asset.syncedResource({ local Layer = { - Identifier = "Clouds_Magellan_Combo", - Name = "Clouds Magellan Combo", + Identifier = "Clouds_Magellan_Combo_Utah", + Name = "Clouds Magellan Combo [Utah]", Enabled = asset.enabled, - Type = "ByLevelTileLayer", + ZIndex = 20, + Type = "TileProviderByLevel", LevelTileProviders = { { MaxLevel = 4, TileProvider = { Identifier = "Clouds", Name = "Clouds", - FilePath = texturesPath .. "venus_clouds.jpg" + FilePath = texturesPath .. "venus_clouds.jpg", + CacheSettings = { Enabled = false } } }, { @@ -29,7 +31,7 @@ local Layer = { TileProvider = { Identifier = "Magellan_Mosaic_Utah", Name = "Magellan Mosaic [Utah]", - FilePath = asset.localResource("magellan_mosaic_utah.vrt"), + FilePath = asset.resource("magellan_mosaic_utah.vrt"), BlendMode = "Color", Settings = { Gamma = 2.0 } } diff --git a/data/assets/scene/solarsystem/planets/venus/layers/colorlayers/magellan_mosaic_newyork.asset b/data/assets/scene/solarsystem/planets/venus/layers/colorlayers/magellan_mosaic_newyork.asset index 5b4a771047..0b0a7c139c 100644 --- a/data/assets/scene/solarsystem/planets/venus/layers/colorlayers/magellan_mosaic_newyork.asset +++ b/data/assets/scene/solarsystem/planets/venus/layers/colorlayers/magellan_mosaic_newyork.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "Magellan_Mosaic_NewYork", Name = "Magellan Mosaic [New York]", Enabled = asset.enabled, - FilePath = asset.localResource("magellan_mosaic_newyork.vrt"), + ZIndex = 10, + FilePath = asset.resource("magellan_mosaic_newyork.vrt"), BlendMode = "Color", Settings = { Gamma = 2.0 }, Description = [[Color layer for Venus. This mosaic was created from the Magellan @@ -42,7 +43,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Venus Magellan Mosaic", - Version = "1.0", Description = [[Map layer for Venus containting Venus Magellan Mosaic from the USGS. Hosted on the OpenSpace servers in New York]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/venus/layers/colorlayers/magellan_mosaic_utah.asset b/data/assets/scene/solarsystem/planets/venus/layers/colorlayers/magellan_mosaic_utah.asset index 45d05e246e..b7bdc13596 100644 --- a/data/assets/scene/solarsystem/planets/venus/layers/colorlayers/magellan_mosaic_utah.asset +++ b/data/assets/scene/solarsystem/planets/venus/layers/colorlayers/magellan_mosaic_utah.asset @@ -6,7 +6,8 @@ local Layer = { Identifier = "Magellan_Mosaic_Utah", Name = "Magellan Mosaic [Utah]", Enabled = asset.enabled, - FilePath = asset.localResource("magellan_mosaic_utah.vrt"), + ZIndex = 10, + FilePath = asset.resource("magellan_mosaic_utah.vrt"), BlendMode = "Color", Settings = { Gamma = 2.0 }, Description = [[Color layer for Venus. This mosaic was created from the Magellan @@ -42,7 +43,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Venus Magellan Mosaic", - Version = "1.0", Description = [[Map layer for Venus containting Venus Magellan Mosaic from the USGS. Hosted on the OpenSpace servers in Utah]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/venus/layers/colorlayers/venus_texture.asset b/data/assets/scene/solarsystem/planets/venus/layers/colorlayers/venus_texture.asset index b49f35bc9c..e99aa4cad5 100644 --- a/data/assets/scene/solarsystem/planets/venus/layers/colorlayers/venus_texture.asset +++ b/data/assets/scene/solarsystem/planets/venus/layers/colorlayers/venus_texture.asset @@ -2,7 +2,7 @@ local globe = asset.require("../../venus") -local texturesPath = asset.syncedResource({ +local texturesPath = asset.resource({ Name = "Venus Textures", Type = "HttpSynchronization", Identifier = "venus_textures", @@ -13,17 +13,21 @@ local texturesPath = asset.syncedResource({ local Clouds = { Identifier = "Clouds", FilePath = texturesPath .. "venus_clouds.jpg", - Enabled = asset.enabled + Enabled = asset.enabled, + ZIndex = 20, + CacheSettings = { Enabled = false } } local Layer = { Identifier = "Texture", FilePath = texturesPath .. "venus.jpg", Enabled = asset.enabled, + ZIndex = 5, Settings = { Opacity = 0.48, Gamma = 0.48 - } + }, + CacheSettings = { Enabled = false } } @@ -44,7 +48,6 @@ asset.export(Clouds) asset.meta = { Name = "Venus Texture", - Version = "2.0", Description = "This asset supplies a default texture for Venus", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/venus/layers/heightlayers/magellan_newyork.asset b/data/assets/scene/solarsystem/planets/venus/layers/heightlayers/magellan_newyork.asset index a2e2534caf..173a853113 100644 --- a/data/assets/scene/solarsystem/planets/venus/layers/heightlayers/magellan_newyork.asset +++ b/data/assets/scene/solarsystem/planets/venus/layers/heightlayers/magellan_newyork.asset @@ -6,8 +6,9 @@ local Layer = { Identifier = "MagellanElevation_NewYork", Name = "Magellan Elevation [New York]", Enabled = asset.enabled, - FilePath = asset.localResource("magellan_newyork.wms"), - TilePixelSize = 256, + ZIndex = 10, + FilePath = asset.resource("magellan_newyork.wms"), + TilePixelSize = 129, Settings = { Gamma = 1.72, Multiplier = 1.1 @@ -39,7 +40,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Venus Magellan DEM", - Version = "1.0", Description = [[Map layer for Venus containting Venus Magellan DEM from the USGS. Hosted on the OpenSpace servers in New York]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/venus/layers/heightlayers/magellan_utah.asset b/data/assets/scene/solarsystem/planets/venus/layers/heightlayers/magellan_utah.asset index a9d380d3db..7416d061a8 100644 --- a/data/assets/scene/solarsystem/planets/venus/layers/heightlayers/magellan_utah.asset +++ b/data/assets/scene/solarsystem/planets/venus/layers/heightlayers/magellan_utah.asset @@ -6,8 +6,9 @@ local Layer = { Identifier = "MagellanElevation_Utah", Name = "Magellan Elevation [Utah]", Enabled = asset.enabled, - FilePath = asset.localResource("magellan_utah.wms"), - TilePixelSize = 256, + ZIndex = 10, + FilePath = asset.resource("magellan_utah.wms"), + TilePixelSize = 129, Settings = { Gamma = 1.72, Multiplier = 1.1 @@ -38,7 +39,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Venus Magellan DEM", - Version = "1.0", Description = [[Map layer for Venus containting Venus Magellan DEM from the USGS. Hosted on the OpenSpace servers in Utah]], Author = "USGS", diff --git a/data/assets/scene/solarsystem/planets/venus/layers/newyork_layers.asset b/data/assets/scene/solarsystem/planets/venus/layers/newyork_layers.asset new file mode 100644 index 0000000000..5513383ff4 --- /dev/null +++ b/data/assets/scene/solarsystem/planets/venus/layers/newyork_layers.asset @@ -0,0 +1,19 @@ +asset.require("./base_layers") +asset.require("./colorlayers/magellan_mosaic_newyork", false) +asset.require("./colorlayers/clouds_magellan_combo_newyork", asset.enabled) + +asset.require("./heightlayers/magellan_newyork", asset.enabled) + + + +asset.meta = { + Name = "Default Venus Layers (New York)", + Description = [[Default Venus layers are: Venus Texture, Magellan Mosaic, + Clouds Magellan Combo, and Magellan Elevation (3D). + + Layers only loaded from the New York server + ]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/venus/layers/utah_layers.asset b/data/assets/scene/solarsystem/planets/venus/layers/utah_layers.asset new file mode 100644 index 0000000000..17e40ea29a --- /dev/null +++ b/data/assets/scene/solarsystem/planets/venus/layers/utah_layers.asset @@ -0,0 +1,19 @@ +asset.require("./base_layers") +asset.require("./colorlayers/magellan_mosaic_utah", false) +asset.require("./colorlayers/clouds_magellan_combo_utah", asset.enabled) + +asset.require("./heightlayers/magellan_utah", asset.enabled) + + + +asset.meta = { + Name = "Default Venus Layers (Utah)", + Description = [[Default Venus layers are: Venus Texture, Magellan Mosaic, + Clouds Magellan Combo, and Magellan Elevation (3D). + + Layers only loaded from the Utah server + ]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/planets/venus/trail.asset b/data/assets/scene/solarsystem/planets/venus/trail.asset index ffd8443417..5e8d0a37a9 100644 --- a/data/assets/scene/solarsystem/planets/venus/trail.asset +++ b/data/assets/scene/solarsystem/planets/venus/trail.asset @@ -1,5 +1,5 @@ -asset.require("spice/base") local transforms = asset.require("scene/solarsystem/sun/transforms") +local coreKernels = asset.require("spice/core") @@ -10,8 +10,8 @@ local VenusTrail = { Type = "RenderableTrailOrbit", Translation = { Type = "SpiceTranslation", - Target = "VENUS", - Observer = "SSB" + Target = coreKernels.ID.Venus, + Observer = coreKernels.ID.SolarSystemBarycenter }, Color = { 1.0, 0.5, 0.2 }, Period = 224.695, @@ -20,8 +20,7 @@ local VenusTrail = { Tag = { "planetTrail_solarSystem", "planetTrail_terrestrial" }, GUI = { Name = "Venus Trail", - Path = "/Solar System/Planets/Venus", - Description = "Main trail for Venus" + Path = "/Solar System/Planets/Venus" } } @@ -40,9 +39,7 @@ asset.export(VenusTrail) asset.meta = { Name = "Venus Trail", - Version = "1.1", - Description = [[Trail of Venus as observed by the Sun. Data from NASA Spice (see base - spice asset)]], + Description = "Trail of Venus as observed by the Sun", Author = "OpenSpace Team", URL = "http://openspaceproject.com", License = "MIT license" diff --git a/data/assets/scene/solarsystem/planets/venus/trail_barycenter.asset b/data/assets/scene/solarsystem/planets/venus/trail_barycenter.asset index 5ef709e293..ec46a030d9 100644 --- a/data/assets/scene/solarsystem/planets/venus/trail_barycenter.asset +++ b/data/assets/scene/solarsystem/planets/venus/trail_barycenter.asset @@ -1,5 +1,5 @@ -asset.require("spice/base") local transforms = asset.require("scene/solarsystem/sun/transforms") +local coreKernels = asset.require("spice/core") @@ -8,21 +8,20 @@ local VenusBarycenterTrail = { Parent = transforms.SolarSystemBarycenter.Identifier, Renderable = { Type = "RenderableTrailOrbit", + Enabled = false, Translation = { Type = "SpiceTranslation", - Target = "VENUS BARYCENTER", - Observer = "SSB" + Target = coreKernels.ID.VenusBarycenter, + Observer = coreKernels.ID.SolarSystemBarycenter }, Color = { 1.0, 0.5, 0.2 }, Period = 224.695, - Resolution = 1000, - Enabled = false + Resolution = 1000 }, Tag = { "planetTrail_solarSystem", "planetTrail_terrestrial" }, GUI = { Name = "Venus Barycenter Trail", - Path = "/Solar System/Planets/Venus", - Description = "Berycenter trail for Venus" + Path = "/Solar System/Planets/Venus" } } @@ -41,9 +40,7 @@ asset.export(VenusBarycenterTrail) asset.meta = { Name = "Venus Trail", - Version = "1.1", - Description = [[Barycenter Trail of Venus as observed by the Sun. Data from NASA Spice - (see base spice asset)]], + Description = "Barycenter Trail of Venus as observed by the Sun", Author = "OpenSpace Team", URL = "http://openspaceproject.com", License = "MIT license" diff --git a/data/assets/scene/solarsystem/planets/venus/trail_earth.asset b/data/assets/scene/solarsystem/planets/venus/trail_earth.asset index 0f11f3006f..bbe796393e 100644 --- a/data/assets/scene/solarsystem/planets/venus/trail_earth.asset +++ b/data/assets/scene/solarsystem/planets/venus/trail_earth.asset @@ -1,6 +1,6 @@ -asset.require("spice/base") local transforms = asset.require("scene/solarsystem/sun/transforms") local earthTransforms = asset.require("scene/solarsystem/planets/earth/transforms") +local coreKernels = asset.require("spice/core") @@ -9,15 +9,15 @@ local VenusTrailEarth = { Parent = earthTransforms.EarthBarycenter.Identifier, Renderable = { Type = "RenderableTrailOrbit", + Enabled = false, Translation = { Type = "SpiceTranslation", - Target = "VENUS", - Observer = "EARTH" + Target = coreKernels.ID.Venus, + Observer = coreKernels.ID.Earth }, Color = { 1.0, 0.5, 0.2 }, - Period = 224.695, - Resolution = 1000, - Enabled = false + Period = 2900.0, + Resolution = 1000 }, Tag = { "planetTrail_solarSystem_alt", "planetTrail_terrestrial_alt" }, GUI = { @@ -42,9 +42,7 @@ asset.export(VenusTrailEarth) asset.meta = { Name = "Venus Trail from Earth", - Version = "1.1", - Description = [[Trail of Venus as observed by the Earth. Data from NASA SPICE (see base - spice asset)]], + Description = "Trail of Venus as observed by the Earth", Author = "OpenSpace Team", URL = "http://openspaceproject.com", License = "MIT license" diff --git a/data/assets/scene/solarsystem/planets/venus/transforms.asset b/data/assets/scene/solarsystem/planets/venus/transforms.asset index c521ac5940..bee0e82620 100644 --- a/data/assets/scene/solarsystem/planets/venus/transforms.asset +++ b/data/assets/scene/solarsystem/planets/venus/transforms.asset @@ -1,5 +1,5 @@ -asset.require("spice/base") local transforms = asset.require("scene/solarsystem/sun/transforms") +local coreKernels = asset.require("spice/core") @@ -9,15 +9,14 @@ local VenusBarycenter = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "VENUS BARYCENTER", - Observer = "SSB" + Target = coreKernels.ID.VenusBarycenter, + Observer = coreKernels.ID.SolarSystemBarycenter } }, GUI = { Name = "Venus Barycenter", Path = "/Solar System/Planets/Venus", - Hidden = true, - Description = "Position for Venus Barycenter" + Hidden = true } } @@ -36,7 +35,6 @@ asset.export(VenusBarycenter) asset.meta = { Name = "Venus Transforms", - Version = "1.1", Description = "Spice translation for Venus Barycenter", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/planets/venus/venus.asset b/data/assets/scene/solarsystem/planets/venus/venus.asset index 5b2d452429..8d536081c5 100644 --- a/data/assets/scene/solarsystem/planets/venus/venus.asset +++ b/data/assets/scene/solarsystem/planets/venus/venus.asset @@ -1,10 +1,10 @@ -asset.require("spice/base") asset.require("./trail") local transforms = asset.require("./transforms") +local coreKernels = asset.require("spice/core") -local labelsPath = asset.syncedResource({ +local labelsPath = asset.resource({ Name = "Venus Labels", Type = "HttpSynchronization", Identifier = "venus_labels", @@ -18,21 +18,19 @@ local Venus = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "VENUS", - Observer = "VENUS BARYCENTER" + Target = coreKernels.ID.Venus, + Observer = coreKernels.ID.VenusBarycenter }, Rotation = { Type = "SpiceRotation", - SourceFrame = "IAU_VENUS", - DestinationFrame = "GALACTIC" + SourceFrame = coreKernels.Frame.Venus, + DestinationFrame = coreKernels.Frame.Galactic } }, Renderable = { Type = "RenderableGlobe", --Radii = { 6051900.0, 6051900.0, 6051800.0 }, Radii = { 6051900.0, 6051900.0, 6051900.0 }, - SegmentsPerPatch = 64, - Layers = {}, Labels = { Enabled = false, FileName = labelsPath .. "venus.labels", @@ -49,8 +47,7 @@ local Venus = { Tag = { "planet_solarSystem", "planet_terrestrial" }, GUI = { Name = "Venus", - Path = "/Solar System/Planets/Venus", - Description = "Venus globe with labels and map layers" + Path = "/Solar System/Planets/Venus" } } @@ -58,8 +55,8 @@ local VenusLabel = { Identifier = "VenusLabel", Parent = Venus.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Venus", FontSize = 70.0, Size = 8.5, @@ -74,8 +71,7 @@ local VenusLabel = { Tag = { "solarsystem_labels" }, GUI = { Name = "Venus Label", - Path = "/Solar System/Planets/Venus", - Description = "Label for Venus, viewable within the solar system" + Path = "/Solar System/Planets/Venus" } } @@ -96,10 +92,9 @@ asset.export(VenusLabel) asset.meta = { - Name = "Venus", - Version = "1.1", - Description = "Venus globe with labels, and main planet label", - Author = "OpenSpace Team", - URL = "http://openspaceproject.com", - License = "MIT license" + Name = "Venus", + Description = "Venus globe with labels, and main planet label", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" } diff --git a/data/assets/scene/solarsystem/sssb/amor_asteroid.asset b/data/assets/scene/solarsystem/sssb/amor_asteroid.asset index 2c5d7f0979..b89b521494 100644 --- a/data/assets/scene/solarsystem/sssb/amor_asteroid.asset +++ b/data/assets/scene/solarsystem/sssb/amor_asteroid.asset @@ -2,17 +2,17 @@ local transforms = asset.require("scene/solarsystem/sun/transforms") -local sssb = asset.syncedResource({ +local sssb = asset.resource({ Name = "Small SolarSystem Body Data (Amor Asteroid)", Type = "HttpSynchronization", Identifier = "sssb_data_amor_asteroid", - Version = 3 + Version = 4 }) local Object = { Identifier = "sssb_amor_asteroid", - Parent = transforms.SunECLIPJ2000.Identifier, + Parent = transforms.SunEclipJ2000.Identifier, Renderable = { Type = "RenderableOrbitalKepler", Path = sssb .. "sssb_data_amor_asteroid.csv", @@ -20,7 +20,8 @@ local Object = { Segments = 200, SegmentQuality = 4, Color = { 1.0, 1.0, 1.0 }, - TrailFade = 11 + TrailFade = 11, + PointSizeExponent = 9.2 }, GUI = { Name = "Amor Asteroids", @@ -45,7 +46,6 @@ asset.export(Object) asset.meta = { Name = "Amor Asteroids", - Version = "1.1", Description = [[RenderableSmallBody asset with data from from JPL Horizons containing the Amor group]], Author = "JPL Small-Body Database hosted by California Institute of Technology", diff --git a/data/assets/scene/solarsystem/sssb/apollo_asteroid.asset b/data/assets/scene/solarsystem/sssb/apollo_asteroid.asset index 4b051e11ff..8f2b1ea3d1 100644 --- a/data/assets/scene/solarsystem/sssb/apollo_asteroid.asset +++ b/data/assets/scene/solarsystem/sssb/apollo_asteroid.asset @@ -2,17 +2,17 @@ local transforms = asset.require("scene/solarsystem/sun/transforms") -local sssb = asset.syncedResource({ +local sssb = asset.resource({ Name = "Small SolarSystem Body Data (Apollo Asteroid)", Type = "HttpSynchronization", Identifier = "sssb_data_apollo_asteroid", - Version = 3 + Version = 4 }) local Object = { Identifier = "sssb_apollo_asteroid", - Parent = transforms.SunECLIPJ2000.Identifier, + Parent = transforms.SunEclipJ2000.Identifier, Renderable = { Type = "RenderableOrbitalKepler", Path = sssb .. "sssb_data_apollo_asteroid.csv", @@ -20,7 +20,8 @@ local Object = { Segments = 200, SegmentQuality = 6, Color = { 0.7, 0.7, 1.0 }, - TrailFade = 10 + TrailFade = 10, + PointSizeExponent = 9.2 }, GUI = { Name = "Apollo Asteroids", @@ -45,7 +46,6 @@ asset.export(Object) asset.meta = { Name = "Apollo Asteroids", - Version = "1.1", Description = [[RenderableSmallBody asset with data from from JPL Horizons containing the Apollo group]], Author = "JPL Small-Body Database hosted by California Institute of Technology", diff --git a/data/assets/scene/solarsystem/sssb/astraea.asset b/data/assets/scene/solarsystem/sssb/astraea.asset index bb8c721d1a..8679e1ec84 100644 --- a/data/assets/scene/solarsystem/sssb/astraea.asset +++ b/data/assets/scene/solarsystem/sssb/astraea.asset @@ -2,7 +2,7 @@ local transforms = asset.require("scene/solarsystem/sun/transforms") -local horizons = asset.syncedResource({ +local horizons = asset.resource({ Name = "5 Astraea Trajectory", Type = "HttpSynchronization", Identifier = "astraea_horizons", @@ -67,7 +67,6 @@ asset.export(AstraeaTrail) asset.meta = { Name = "5 Astraea", - Version = "1.2", Description = [[This asset contains the trail and position of 5 Astraea from 2014 JAN 01 00:00:00 to 2050 JAN 01 00:00:00. Data from JPL Horizons]], Author = "Zach Shaffer", diff --git a/data/assets/scene/solarsystem/sssb/aten_asteroid.asset b/data/assets/scene/solarsystem/sssb/aten_asteroid.asset index ae3d5f0f72..1c7c7b97ae 100644 --- a/data/assets/scene/solarsystem/sssb/aten_asteroid.asset +++ b/data/assets/scene/solarsystem/sssb/aten_asteroid.asset @@ -2,17 +2,17 @@ local transforms = asset.require("scene/solarsystem/sun/transforms") -local sssb = asset.syncedResource({ +local sssb = asset.resource({ Name = "Small SolarSystem Body Data (Aten Asteroid)", Type = "HttpSynchronization", Identifier = "sssb_data_aten_asteroid", - Version = 3 + Version = 4 }) local Object = { Identifier = "sssb_aten_asteroid", - Parent = transforms.SunECLIPJ2000.Identifier, + Parent = transforms.SunEclipJ2000.Identifier, Renderable = { Type = "RenderableOrbitalKepler", Path = sssb .. "sssb_data_aten_asteroid.csv", @@ -20,7 +20,8 @@ local Object = { Segments = 200, SegmentQuality = 2, Color = { 0.15, 0.15, 1.0 }, - TrailFade = 18 + TrailFade = 18, + PointSizeExponent = 9.2 }, GUI = { Name = "Aten Asteroids", @@ -45,7 +46,6 @@ asset.export(Object) asset.meta = { Name = "Aten Asteroids", - Version = "1.1", Description = [[RenderableSmallBody asset with data from from JPL Horizons containing the Aten group]], Author = "JPL Small-Body Database hosted by California Institute of Technology", diff --git a/data/assets/scene/solarsystem/sssb/atira_asteroid.asset b/data/assets/scene/solarsystem/sssb/atira_asteroid.asset index ac1f7023ec..000904556b 100644 --- a/data/assets/scene/solarsystem/sssb/atira_asteroid.asset +++ b/data/assets/scene/solarsystem/sssb/atira_asteroid.asset @@ -2,17 +2,17 @@ local transforms = asset.require("scene/solarsystem/sun/transforms") -local sssb = asset.syncedResource({ +local sssb = asset.resource({ Name = "Small SolarSystem Body Data (Atira Asteroid)", Type = "HttpSynchronization", Identifier = "sssb_data_atira_asteroid", - Version = 3 + Version = 4 }) local Object = { Identifier = "sssb_atira_asteroid", - Parent = transforms.SunECLIPJ2000.Identifier, + Parent = transforms.SunEclipJ2000.Identifier, Renderable = { Type = "RenderableOrbitalKepler", Path = sssb .. "sssb_data_atira_asteroid.csv", @@ -20,7 +20,8 @@ local Object = { Segments = 200, SegmentQuality = 2, Color = { 0.5, 0.8, 1.0 }, - TrailFade = 25 + TrailFade = 25, + PointSizeExponent = 9.2 }, GUI = { Name = "Atira Asteroids", @@ -45,7 +46,6 @@ asset.export(Object) asset.meta = { Name = "Atira Asteroids", - Version = "1.1", Description = [[RenderableSmallBody asset with data from from JPL Horizons containing the Atira group]], Author = "JPL Small-Body Database hosted by California Institute of Technology", diff --git a/data/assets/scene/solarsystem/sssb/c2019y4atlas.asset b/data/assets/scene/solarsystem/sssb/c2019y4atlas.asset index 8704ad96e6..3dafeab613 100644 --- a/data/assets/scene/solarsystem/sssb/c2019y4atlas.asset +++ b/data/assets/scene/solarsystem/sssb/c2019y4atlas.asset @@ -2,7 +2,7 @@ local sunTransforms = asset.require("scene/solarsystem/sun/transforms") -local orbit = asset.syncedResource({ +local orbit = asset.resource({ Name = "Comet C/2019 Y4 ATLAS", Type = "HttpSynchronization", Identifier = "horizons_c2019y4atlas", @@ -10,6 +10,9 @@ local orbit = asset.syncedResource({ }) .. "c2019y4atlas.hrz" +local StartTime = "1950 JAN 1 00:00:00" +local EndTime = "2100 JAN 1 00:00:00" + local C2019Y4AtlasTrail = { Identifier = "C2019Y4AtlasTrail", Parent = sunTransforms.SolarSystemBarycenter.Identifier, @@ -26,14 +29,13 @@ local C2019Y4AtlasTrail = { }, Color = { 0.533333, 0.850980, 0.996078 }, EnableFade = false, - StartTime = "1950 JAN 1 0:00:00", - EndTime = "2100 JAN 1 00:00:00", - SampleInterval = 52595, -- About 14h 36m 35.5200s in seconds - TimeStampSubsampleFactor = 1 + StartTime = StartTime, + EndTime = EndTime, + SampleInterval = openspace.time.duration(StartTime, EndTime) / 90000 }, GUI = { Name = "C2019 Y4 Atlas Trail", - Path = "/Solar System/Comets" + Path = "/Solar System/Small Bodies" } } @@ -48,7 +50,7 @@ local C2019Y4AtlasPosition = { }, GUI = { Name = "C/2019 Y4 Atlas", - Path = "/Solar System/Comets", + Path = "/Solar System/Small Bodies", Description = "This is the position for C/2019 Y4 Atlas" } } @@ -71,7 +73,6 @@ asset.export(C2019Y4AtlasTrail) asset.meta = { Name = "C/2019 Y4 Atlas", - Version = "1.2", Description = [[This asset contains the trail and position of C/2019 Y4 Atlas from 1950 JAN 01 00:00:00 to 2100 JAN 01 00:00:00. Data from JPL Horizons]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/sssb/centaur_asteroid.asset b/data/assets/scene/solarsystem/sssb/centaur_asteroid.asset index 8b2468a1bf..688e139197 100644 --- a/data/assets/scene/solarsystem/sssb/centaur_asteroid.asset +++ b/data/assets/scene/solarsystem/sssb/centaur_asteroid.asset @@ -2,17 +2,17 @@ local transforms = asset.require("scene/solarsystem/sun/transforms") -local sssb = asset.syncedResource({ +local sssb = asset.resource({ Name = "Small SolarSystem Body Data (Centaur Asteroid)", Type = "HttpSynchronization", Identifier = "sssb_data_centaur_asteroid", - Version = 3 + Version = 4 }) local Object = { Identifier = "sssb_centaur_asteroid", - Parent = transforms.SunECLIPJ2000.Identifier, + Parent = transforms.SunEclipJ2000.Identifier, Renderable = { Type = "RenderableOrbitalKepler", Path = sssb .. "sssb_data_centaur_asteroid.csv", @@ -20,7 +20,8 @@ local Object = { Segments = 200, SegmentQuality = 6, Color = { 0.94, 0.96, 0.94 }, - TrailFade = 18 + TrailFade = 18, + PointSizeExponent = 10.2 }, GUI = { Name = "Centaur Asteroids", @@ -45,7 +46,6 @@ asset.export(Object) asset.meta = { Name = "Centaur Asteroids", - Version = "1.1", Description = [[RenderableSmallBody asset with data from from JPL Horizons containing the Centaur group]], Author = "JPL Small-Body Database hosted by California Institute of Technology", diff --git a/data/assets/scene/solarsystem/sssb/chiron-type_comet.asset b/data/assets/scene/solarsystem/sssb/chiron-type_comet.asset index 48b7f01a89..13ac881cd8 100644 --- a/data/assets/scene/solarsystem/sssb/chiron-type_comet.asset +++ b/data/assets/scene/solarsystem/sssb/chiron-type_comet.asset @@ -2,17 +2,17 @@ local transforms = asset.require("scene/solarsystem/sun/transforms") -local sssb = asset.syncedResource({ +local sssb = asset.resource({ Name = "Small SolarSystem Body Data (Chiron-type Comet)", Type = "HttpSynchronization", Identifier = "sssb_data_chiron-type_comet", - Version = 3 + Version = 4 }) local Object = { Identifier = "sssb_chiron-type_comet", - Parent = transforms.SunECLIPJ2000.Identifier, + Parent = transforms.SunEclipJ2000.Identifier, Renderable = { Type = "RenderableOrbitalKepler", Path = sssb .. "sssb_data_chiron-type_comet.csv", @@ -20,7 +20,8 @@ local Object = { Segments = 200, SegmentQuality = 10, Color = { 0.15, 0.1, 1.0 }, - TrailFade = 25 + TrailFade = 25, + PointSizeExponent = 10.5 }, GUI = { Name = "Chiron-type Comets", @@ -45,7 +46,6 @@ asset.export(Object) asset.meta = { Name = "Chiron-Type Comets", - Version = "1.1", Description = [[RenderableSmallBody asset with data from from JPL Horizons containing the Chiron-Type group]], Author = "JPL Small-Body Database hosted by California Institute of Technology", diff --git a/data/assets/scene/solarsystem/sssb/encke-type_comet.asset b/data/assets/scene/solarsystem/sssb/encke-type_comet.asset index 6ebc6a16a8..3ce380a567 100644 --- a/data/assets/scene/solarsystem/sssb/encke-type_comet.asset +++ b/data/assets/scene/solarsystem/sssb/encke-type_comet.asset @@ -2,17 +2,17 @@ local transforms = asset.require("scene/solarsystem/sun/transforms") -local sssb = asset.syncedResource({ +local sssb = asset.resource({ Name = "Small SolarSystem Body Data (Encke-type Comet)", Type = "HttpSynchronization", Identifier = "sssb_data_encke-type_comet", - Version = 3 + Version = 4 }) local Object = { Identifier = "sssb_encke-type_comet", - Parent = transforms.SunECLIPJ2000.Identifier, + Parent = transforms.SunEclipJ2000.Identifier, Renderable = { Type = "RenderableOrbitalKepler", Path = sssb .. "sssb_data_encke-type_comet.csv", @@ -20,7 +20,8 @@ local Object = { Segments = 200, SegmentQuality = 2, Color = { 0.8, 0.34, 1.0 }, - TrailFade = 23 + TrailFade = 23, + PointSizeExponent = 10.0 }, GUI = { Name = "Encke-type Comets", @@ -45,7 +46,6 @@ asset.export(Object) asset.meta = { Name = "Encke-Type Comets", - Version = "1.1", Description = [[RenderableSmallBody asset with data from from JPL Horizons containing the Encke-Type group]], Author = "JPL Small-Body Database hosted by California Institute of Technology", diff --git a/data/assets/scene/solarsystem/sssb/halley-type_comet.asset b/data/assets/scene/solarsystem/sssb/halley-type_comet.asset index 81b8efafec..d135cfbbba 100644 --- a/data/assets/scene/solarsystem/sssb/halley-type_comet.asset +++ b/data/assets/scene/solarsystem/sssb/halley-type_comet.asset @@ -2,17 +2,17 @@ local transforms = asset.require("scene/solarsystem/sun/transforms") -local sssb = asset.syncedResource({ +local sssb = asset.resource({ Name = "Small SolarSystem Body Data (Halley-type Comet)", Type = "HttpSynchronization", Identifier = "sssb_data_halley-type_comet", - Version = 3 + Version = 4 }) local Object = { Identifier = "sssb_halley-type_comet", - Parent = transforms.SunECLIPJ2000.Identifier, + Parent = transforms.SunEclipJ2000.Identifier, Renderable = { Type = "RenderableOrbitalKepler", Path = sssb .. "sssb_data_halley-type_comet.csv", @@ -20,7 +20,8 @@ local Object = { Segments = 200, SegmentQuality = 9, Color = { 0.66, 0.66, 0.66 }, - TrailFade = 18 + TrailFade = 18, + PointSizeExponent = 10.6 }, GUI = { Name = "Halley-type Comets", @@ -44,7 +45,6 @@ asset.export(Object) asset.meta = { Name = "Halley-Type Comets", - Version = "1.1", Description = [[RenderableSmallBody asset with data from from JPL Horizons containing the Halley-Type group]], Author = "JPL Small-Body Database hosted by California Institute of Technology", diff --git a/data/assets/scene/solarsystem/sssb/inner_main_belt_asteroid.asset b/data/assets/scene/solarsystem/sssb/inner_main_belt_asteroid.asset index 17ea63d52d..2b843dd9b3 100644 --- a/data/assets/scene/solarsystem/sssb/inner_main_belt_asteroid.asset +++ b/data/assets/scene/solarsystem/sssb/inner_main_belt_asteroid.asset @@ -2,17 +2,17 @@ local transforms = asset.require("scene/solarsystem/sun/transforms") -local sssb = asset.syncedResource({ +local sssb = asset.resource({ Name = "Small SolarSystem Body Data (Inner Main Belt Asteroid)", Type = "HttpSynchronization", Identifier = "sssb_data_inner_main_belt_asteroid", - Version = 3 + Version = 4 }) local Object = { Identifier = "sssb_inner_main_belt_asteroid", - Parent = transforms.SunECLIPJ2000.Identifier, + Parent = transforms.SunEclipJ2000.Identifier, Renderable = { Type = "RenderableOrbitalKepler", Path = sssb .. "sssb_data_inner_main_belt_asteroid.csv", @@ -20,7 +20,8 @@ local Object = { Segments = 200, SegmentQuality = 1, Color = { 1.0, 1.0, 0.0 }, - TrailFade = 0.5 + TrailFade = 0.5, + PointSizeExponent = 9.2 }, GUI = { Name = "Inner Main Asteroid Belt", @@ -45,7 +46,6 @@ asset.export(Object) asset.meta = { Name = "Inner Main Asteroid Belt", - Version = "1.1", Description = [[RenderableSmallBody asset with data from from JPL Horizons containing the Inner Main Asteroid Belt group]], Author = "JPL Small-Body Database hosted by California Institute of Technology", diff --git a/data/assets/scene/solarsystem/sssb/itokawa.asset b/data/assets/scene/solarsystem/sssb/itokawa.asset index 743ff3747f..a7de3618cf 100644 --- a/data/assets/scene/solarsystem/sssb/itokawa.asset +++ b/data/assets/scene/solarsystem/sssb/itokawa.asset @@ -1,16 +1,15 @@ local sunTransforms = asset.require("scene/solarsystem/sun/transforms") -local sun = asset.require("scene/solarsystem/sun/sun") -local orbit = asset.syncedResource({ +local orbit = asset.resource({ Name = "Itokawa Orbit", Type = "HttpSynchronization", Identifier = "itokawa_horizons", Version = 2 }) -local model = asset.syncedResource({ +local model = asset.resource({ Name = "Itokawa Model", Type = "HttpSynchronization", Identifier = "itokawa_model", @@ -38,7 +37,7 @@ local ItokawaTrail = { }, GUI = { Name = "Itokawa Trail", - Path = "/Solar System/SSSB/Itokawa", + Path = "/Solar System/Small Bodies/Itokawa", Description = [[Trail of asteroid 25143 Itokawa from 1950 JAN 1 00:00:00 to 2050 JAN 1 00:00:00. Data from JPL Horizons]] } @@ -55,7 +54,7 @@ local ItokawaPosition = { }, GUI = { Name = "Itokawa Position", - Path = "/Solar System/SSSB/Itokawa", + Path = "/Solar System/Small Bodies/Itokawa", Description = [[Position of asteroid 25143 Itokawa from 1950 JAN 1 00:00:00 to 2050 JAN 1 00:00:00. Data from JPL Horizons]] } @@ -68,14 +67,14 @@ local ItokawaModel = { Type = "RenderableModel", GeometryFile = model .. "itokawa.glb", LightSources = { - sun.LightSource + sunTransforms.LightSource }, PerformShading = true, SpecularIntensity = 0.0 }, GUI = { Name = "Itokawa Model", - Path = "/Solar System/SSSB/Itokawa", + Path = "/Solar System/Small Bodies/Itokawa", Description = [[Model of asteroid 25143 Itokawa. 3D model from https://solarsystem.nasa.gov/resources/2377/asteroid-itokawa-3d-model]] } @@ -102,7 +101,6 @@ asset.export(ItokawaModel) asset.meta = { Name = "Itokawa Asteroid", - Version = "1.0", Description = [[Position, trail and model of asteroid 25143 Itokawa from 1950 JAN 1 00:00:00 to 2050 JAN 1 00:00:00. Data from JPL Horizons]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/sssb/jupiter-family_comet.asset b/data/assets/scene/solarsystem/sssb/jupiter-family_comet.asset index fc9aa2e9e2..d38b10968c 100644 --- a/data/assets/scene/solarsystem/sssb/jupiter-family_comet.asset +++ b/data/assets/scene/solarsystem/sssb/jupiter-family_comet.asset @@ -2,17 +2,17 @@ local transforms = asset.require("scene/solarsystem/sun/transforms") -local sssb = asset.syncedResource({ +local sssb = asset.resource({ Name = "Small SolarSystem Body Data (Jupiter Family Comet)", Type = "HttpSynchronization", Identifier = "sssb_data_jupiter-family_comet", - Version = 3 + Version = 4 }) local Object = { Identifier = "sssb_jupiter-family_comet", - Parent = transforms.SunECLIPJ2000.Identifier, + Parent = transforms.SunEclipJ2000.Identifier, Renderable = { Type = "RenderableOrbitalKepler", Path = sssb .. "sssb_data_jupiter-family_comet.csv", @@ -20,7 +20,8 @@ local Object = { Segments = 200, SegmentQuality = 10, Color = { 0.2, 0.8, 0.2 }, - TrailFade = 28 + TrailFade = 28, + PointSizeExponent = 10.5 }, GUI = { Name = "Jupiter-family Comets", @@ -45,7 +46,6 @@ asset.export(Object) asset.meta = { Name = "Jupiter Family Comets", - Version = "1.1", Description = [[RenderableSmallBody asset with data from from JPL Horizons containing Jupiter-family group]], Author = "JPL Small-Body Database hosted by California Institute of Technology", diff --git a/data/assets/scene/solarsystem/sssb/jupiter_trojan_asteroid.asset b/data/assets/scene/solarsystem/sssb/jupiter_trojan_asteroid.asset index f2ad637137..ea06683651 100644 --- a/data/assets/scene/solarsystem/sssb/jupiter_trojan_asteroid.asset +++ b/data/assets/scene/solarsystem/sssb/jupiter_trojan_asteroid.asset @@ -2,17 +2,17 @@ local transforms = asset.require("scene/solarsystem/sun/transforms") -local sssb = asset.syncedResource({ +local sssb = asset.resource({ Name = "Small SolarSystem Body Data (Jupiter Trojan Asteroid)", Type = "HttpSynchronization", Identifier = "sssb_data_jupiter_trojan_asteroid", - Version = 3 + Version = 4 }) local Object = { Identifier = "sssb_jupiter_trojan_asteroid", - Parent = transforms.SunECLIPJ2000.Identifier, + Parent = transforms.SunEclipJ2000.Identifier, Renderable = { Type = "RenderableOrbitalKepler", Path = sssb .. "sssb_data_jupiter_trojan_asteroid.csv", @@ -20,7 +20,8 @@ local Object = { Segments = 200, SegmentQuality = 1, Color = { 0.5, 0.8, 0.5 }, - TrailFade = 5 + TrailFade = 5, + PointSizeExponent = 9.2 }, GUI = { Name = "Jupiter Trojan Asteroids", @@ -45,7 +46,6 @@ asset.export(Object) asset.meta = { Name = "Jupiter Trojan Asteroids", - Version = "1.1", Description = [[RenderableSmallBody asset with data from from JPL Horizons containing Jupiter Trojan group]], Author = "JPL Small-Body Database hosted by California Institute of Technology", diff --git a/data/assets/scene/solarsystem/sssb/main_belt_asteroid.asset b/data/assets/scene/solarsystem/sssb/main_belt_asteroid.asset index 850e3d9b9a..76978d5826 100644 --- a/data/assets/scene/solarsystem/sssb/main_belt_asteroid.asset +++ b/data/assets/scene/solarsystem/sssb/main_belt_asteroid.asset @@ -2,17 +2,17 @@ local transforms = asset.require("scene/solarsystem/sun/transforms") -local sssb = asset.syncedResource({ +local sssb = asset.resource({ Name = "Small SolarSystem Body Data (Main Belt Asteroid)", Type = "HttpSynchronization", Identifier = "sssb_data_main_belt_asteroid", - Version = 3 + Version = 4 }) local Object = { Identifier = "sssb_main_belt_asteroid", - Parent = transforms.SunECLIPJ2000.Identifier, + Parent = transforms.SunEclipJ2000.Identifier, Renderable = { Type = "RenderableOrbitalKepler", Path = sssb .. "sssb_data_main_belt_asteroid.csv", @@ -21,6 +21,7 @@ local Object = { SegmentQuality = 1, Color = { 0.0, 0.5, 0.0 }, TrailFade = 0.1, + PointSizeExponent = 9.2, RenderSize = 50000 }, GUI = { @@ -46,7 +47,6 @@ asset.export(Object) asset.meta = { Name = "Main Asteroid Belt", - Version = "1.1", Description = [[RenderableSmallBody asset with data from from JPL Horizons containing Main Asteroid Belt group]], Author = "JPL Small-Body Database hosted by California Institute of Technology", diff --git a/data/assets/scene/solarsystem/sssb/mars-crossing_asteroid.asset b/data/assets/scene/solarsystem/sssb/mars-crossing_asteroid.asset index ed44f28a94..2e173fa8cb 100644 --- a/data/assets/scene/solarsystem/sssb/mars-crossing_asteroid.asset +++ b/data/assets/scene/solarsystem/sssb/mars-crossing_asteroid.asset @@ -2,17 +2,17 @@ local transforms = asset.require("scene/solarsystem/sun/transforms") -local sssb = asset.syncedResource({ +local sssb = asset.resource({ Name = "Small SolarSystem Body Data (Mars-Crossing Asteroid)", Type = "HttpSynchronization", Identifier = "sssb_data_mars-crossing_asteroid", - Version = 3 + Version = 4 }) local Object = { Identifier = "sssb_mars-crossing_asteroid", - Parent = transforms.SunECLIPJ2000.Identifier, + Parent = transforms.SunEclipJ2000.Identifier, Renderable = { Type = "RenderableOrbitalKepler", Path = sssb .. "sssb_data_mars-crossing_asteroid.csv", @@ -20,7 +20,8 @@ local Object = { Segments = 200, SegmentQuality = 1, Color = { 0.814, 0.305, 0.22 }, - TrailFade = 13 + TrailFade = 13, + PointSizeExponent = 9.2 }, GUI = { Name = "Mars-crossing Asteroids", @@ -45,7 +46,6 @@ asset.export(Object) asset.meta = { Name = "Mars-Crossing Asteroids", - Version = "1.1", Description = [[RenderableSmallBody asset with data from from JPL Horizons containing Mars-Crossing group]], Author = "JPL Small-Body Database hosted by California Institute of Technology", diff --git a/data/assets/scene/solarsystem/sssb/outer_main_belt_asteroid.asset b/data/assets/scene/solarsystem/sssb/outer_main_belt_asteroid.asset index 3047d60dfa..be738fa2a0 100644 --- a/data/assets/scene/solarsystem/sssb/outer_main_belt_asteroid.asset +++ b/data/assets/scene/solarsystem/sssb/outer_main_belt_asteroid.asset @@ -2,17 +2,17 @@ local transforms = asset.require("scene/solarsystem/sun/transforms") -local sssb = asset.syncedResource({ +local sssb = asset.resource({ Name = "Small SolarSystem Body Data (Outer Main Belt Asteroid)", Type = "HttpSynchronization", Identifier = "sssb_data_outer_main_belt_asteroid", - Version = 3 + Version = 4 }) local Object = { Identifier = "sssb_outer_main_belt_asteroid", - Parent = transforms.SunECLIPJ2000.Identifier, + Parent = transforms.SunEclipJ2000.Identifier, Renderable = { Type = "RenderableOrbitalKepler", Path = sssb .. "sssb_data_outer_main_belt_asteroid.csv", @@ -20,7 +20,8 @@ local Object = { Segments = 200, SegmentQuality = 1, Color = { 0.4, 0.4, 1.0 }, - TrailFade = 2 + TrailFade = 2, + PointSizeExponent = 9.2 }, GUI = { Name = "Outer Main Asteroid Belt", @@ -44,7 +45,6 @@ asset.export(Object) asset.meta = { Name = "Outer Main Asteroid Belt", - Version = "1.1", Description = [[RenderableSmallBody asset with data from from JPL Horizons containing Outer Main Asteroid Belt group]], Author = "JPL Small-Body Database hosted by California Institute of Technology", diff --git a/data/assets/scene/solarsystem/sssb/pha.asset b/data/assets/scene/solarsystem/sssb/pha.asset index ddc49f421e..35465484a8 100644 --- a/data/assets/scene/solarsystem/sssb/pha.asset +++ b/data/assets/scene/solarsystem/sssb/pha.asset @@ -2,17 +2,17 @@ local transforms = asset.require("scene/solarsystem/sun/transforms") -local sssb = asset.syncedResource({ +local sssb = asset.resource({ Name = "Small SolarSystem Body Data (Potentially hazardous Asteroids)", Type = "HttpSynchronization", Identifier = "sssb_data_pha", - Version = 3 + Version = 4 }) local Object = { Identifier = "sssb_pha", - Parent = transforms.SunECLIPJ2000.Identifier, + Parent = transforms.SunEclipJ2000.Identifier, Renderable = { Type = "RenderableOrbitalKepler", Path = sssb .. "sssb_data_pha.csv", @@ -20,7 +20,8 @@ local Object = { Segments = 200, SegmentQuality = 3, Color = { 0.98, 0.09, 0.06 }, - TrailFade = 17 + TrailFade = 17, + PointSizeExponent = 9.2 }, GUI = { Name = "Potentially Hazardous Asteroids", @@ -47,7 +48,6 @@ asset.export(Object) asset.meta = { Name = "Potentially-Hazardous Asteroids", - Version = "1.1", Description = [[RenderableSmallBody asset with data from from JPL Horizons containing Potentially Hazardous group. ]], Author = [[JPL Small-Body Database hosted by California Institute of diff --git a/data/assets/scene/solarsystem/sssb/swifttuttle.asset b/data/assets/scene/solarsystem/sssb/swifttuttle.asset index e4c119e08f..f4d5c82348 100644 --- a/data/assets/scene/solarsystem/sssb/swifttuttle.asset +++ b/data/assets/scene/solarsystem/sssb/swifttuttle.asset @@ -2,7 +2,7 @@ local sunTransforms = asset.require("scene/solarsystem/sun/transforms") -local sync = asset.syncedResource({ +local sync = asset.resource({ Name = "Swift Tuttle Orbit", Type = "HttpSynchronization", Identifier = "swift_tuttle_horizons", @@ -30,7 +30,7 @@ local SwiftTuttleTrail = { }, GUI = { Name = "Swift Tuttle Trail", - Path = "/Solar System/SSSB" + Path = "/Solar System/Small Bodies" } } @@ -45,7 +45,7 @@ local SwiftTuttlePosition = { }, GUI = { Name = "Swift Tuttle Position", - Path = "/Solar System/SSSB" + Path = "/Solar System/Small Bodies" } } @@ -67,7 +67,6 @@ asset.export(SwiftTuttleTrail) asset.meta = { Name = "Swift Tuttle", - Version = "1.2", Description = [[Position and Trail of Swift Tuttle from 1879 JUN 27 to 2050 JAN 01. Data from JPL Horizons]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/sssb/tesla_roadster.asset b/data/assets/scene/solarsystem/sssb/tesla_roadster.asset index b1fd429a34..d17437a097 100644 --- a/data/assets/scene/solarsystem/sssb/tesla_roadster.asset +++ b/data/assets/scene/solarsystem/sssb/tesla_roadster.asset @@ -2,7 +2,7 @@ local transforms = asset.require("scene/solarsystem/sun/transforms") -local orbit = asset.syncedResource({ +local orbit = asset.resource({ Name = "Tesla Roadster Orbit", Type = "HttpSynchronization", Identifier = "tesla_horizons", @@ -30,7 +30,7 @@ local TeslaRoadsterTrail = { }, GUI = { Name = "Tesla Roadster Trail", - Path = "/Solar System/SSSB" + Path = "/Solar System/Small Bodies" } } @@ -45,7 +45,7 @@ local TeslaPosition = { }, GUI = { Name = "Tesla Roadster", - Path = "/Solar System/SSSB", + Path = "/Solar System/Small Bodies", Description = [[Position and Trail of Tesla Roadster from 2018 FEB 7 03:00:00 to 2089 DEC 31 03:00:00. Data from JPL Horizons]] } @@ -69,7 +69,6 @@ asset.export(TeslaRoadsterTrail) asset.meta = { Name = "Tesla Roadster", - Version = "1.2", Description = [[Position and Trail of Tesla Roadster from 2018 FEB 7 03:00:00 to 2089 DEC 31 03:00:00. Data from JPL Horizons]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/sssb/transneptunian_object_asteroid.asset b/data/assets/scene/solarsystem/sssb/transneptunian_object_asteroid.asset index 33de963562..fab0c4d349 100644 --- a/data/assets/scene/solarsystem/sssb/transneptunian_object_asteroid.asset +++ b/data/assets/scene/solarsystem/sssb/transneptunian_object_asteroid.asset @@ -2,17 +2,17 @@ local transforms = asset.require("scene/solarsystem/sun/transforms") -local sssb = asset.syncedResource({ +local sssb = asset.resource({ Name = "Small SolarSystem Body Data (Trans-Neptunian Object Asteroid)", Type = "HttpSynchronization", Identifier = "sssb_data_transneptunian_object_asteroid", - Version = 3 + Version = 4 }) local Object = { Identifier = "sssb_transneptunian_object_asteroid", - Parent = transforms.SunECLIPJ2000.Identifier, + Parent = transforms.SunEclipJ2000.Identifier, Renderable = { Type = "RenderableOrbitalKepler", Path = sssb .. "sssb_data_transneptunian_object_asteroid.csv", @@ -20,7 +20,8 @@ local Object = { Segments = 200, SegmentQuality = 8, Color = { 0.56, 0.64, 0.95 }, - TrailFade = 10 + TrailFade = 10, + PointSizeExponent = 10.3 }, GUI = { Name = "Transneptunian Object Asteroids", @@ -45,7 +46,6 @@ asset.export(Object) asset.meta = { Name = "Trans-Neptunian Asteroids", - Version = "1.1", Description = [[RenderableSmallBody asset with data from from JPL Horizons containing the Trans-Neptunian group]], Author = [[JPL Small-Body Database hosted by California Institute of diff --git a/data/assets/scene/solarsystem/sun.asset b/data/assets/scene/solarsystem/sun.asset index b7292fb709..76e2c5b597 100644 --- a/data/assets/scene/solarsystem/sun.asset +++ b/data/assets/scene/solarsystem/sun.asset @@ -5,7 +5,6 @@ asset.require("./sun/glare") asset.meta = { Name = "Sun", - Version = "1.0", Description = [[Meta asset for the Sun in our solar system. Contains the Sun globe and Sun glare texture]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/sun/EUV_layer.asset b/data/assets/scene/solarsystem/sun/EUV_layer.asset index aeb1921870..6fd0757944 100644 --- a/data/assets/scene/solarsystem/sun/EUV_layer.asset +++ b/data/assets/scene/solarsystem/sun/EUV_layer.asset @@ -1,10 +1,9 @@ -asset.require("spice/base") local propertyHelper = asset.require("util/property_helper") local transforms = asset.require("./transforms") -local textureSourcePath = asset.syncedResource({ +local textureSourcePath = asset.resource({ Type = "HttpSynchronization", Name = "euv_textures_bastille_event", Identifier = "euv_textures_bastille_event", @@ -38,11 +37,11 @@ local ToggleEuv = { Identifier = "os.solarsystem.ToggleEuv", Name = "Toggle EUV layer", Command = [[ - if openspace.getPropertyValue("Scene.EUV-Layer-bastille-day-2000.Renderable.Enabled") then + if openspace.propertyValue("Scene.EUV-Layer-bastille-day-2000.Renderable.Enabled") then openspace.setPropertyValueSingle( "Scene.EUV-Layer-bastille-day-2000.Renderable.Fade", 0.0, - openspace.getPropertyValue("OpenSpaceEngine.FadeDuration"), + openspace.propertyValue("OpenSpaceEngine.FadeDuration"), "Linear", 'openspace.setPropertyValueSingle("Scene.EUV-Layer-bastille-day-2000.Renderable.Enabled", false)' ) @@ -51,7 +50,7 @@ local ToggleEuv = { openspace.setPropertyValueSingle( "Scene.EUV-Layer-bastille-day-2000.Renderable.Fade", 1.0, - openspace.getPropertyValue("OpenSpaceEngine.FadeDuration"), + openspace.propertyValue("OpenSpaceEngine.FadeDuration"), "Linear" ) end @@ -79,7 +78,6 @@ asset.export(EUVLayer) asset.meta = { Name = "Predictive Science Inc. EUV texture sequence Bastille Days", - Version = "1.2", Description = [[Texture sequence of an extreme ultraviolet (EUV) simulation during the CME]], Author = "CCMC, OpenSpace team", URL = "https://dx.doi.org/10.3847/1538-4357/aab36d", diff --git a/data/assets/scene/solarsystem/sun/default_layers.asset b/data/assets/scene/solarsystem/sun/default_layers.asset index 9917c6a852..edd5c0abda 100644 --- a/data/assets/scene/solarsystem/sun/default_layers.asset +++ b/data/assets/scene/solarsystem/sun/default_layers.asset @@ -4,7 +4,6 @@ asset.require("./layers/colorlayers/sun_texture", true) asset.meta = { Name = "Default Sun layers", - Version = "1.0", Description = "Default Sun layers renderable globe", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/sun/glare.asset b/data/assets/scene/solarsystem/sun/glare.asset index de5227e4f5..14223d174e 100644 --- a/data/assets/scene/solarsystem/sun/glare.asset +++ b/data/assets/scene/solarsystem/sun/glare.asset @@ -1,9 +1,8 @@ -asset.require("spice/base") local transforms = asset.require("./transforms") -local textures = asset.syncedResource({ +local textures = asset.resource({ Type = "HttpSynchronization", Name = "Sun textures", Identifier = "sun_textures", @@ -16,12 +15,13 @@ local SunGlare = { Parent = transforms.SunIAU.Identifier, Renderable = { Type = "RenderablePlaneImageLocal", - Size = 1.3*10^10.5, + Size = 41109609582.189, Origin = "Center", Billboard = true, Texture = textures .. "halo.png", BlendMode = "Additive", - Opacity = 0.65 + Opacity = 0.65, + MultiplyColor = { 0.92, 0.93, 0.84 } }, GUI = { Name = "Sun Glare", @@ -45,7 +45,6 @@ asset.export(SunGlare) asset.meta = { Name = "Sun Glare", - Version = "1.1", Description = "Image plane with sun glare effect", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/sun/habitablezone.asset b/data/assets/scene/solarsystem/sun/habitablezone.asset index 3266e75daa..4a86d2fcd5 100644 --- a/data/assets/scene/solarsystem/sun/habitablezone.asset +++ b/data/assets/scene/solarsystem/sun/habitablezone.asset @@ -5,7 +5,7 @@ local textures = asset.require("scene/milkyway/habitable_zones/habitable_zone_te local HabitableZone = { Identifier = "SunHabitableZone", - Parent = transforms.SunECLIPJ2000.Identifier, + Parent = transforms.SunEclipJ2000.Identifier, Renderable = { Type = "RenderableHabitableZone", Enabled = false, @@ -37,7 +37,6 @@ asset.export(HabitableZone) asset.meta = { Name = "Sun Habitable Zone", - Version = "1.1", Description = [[The habitable zone around our sun, computed using formula and coefficients by Kopparapu et al. (2015) https://arxiv.org/abs/1404.5292]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/sun/kernels/HEEQ180.tf b/data/assets/scene/solarsystem/sun/kernels/HEEQ180.tf deleted file mode 100644 index 4106801ce9..0000000000 --- a/data/assets/scene/solarsystem/sun/kernels/HEEQ180.tf +++ /dev/null @@ -1,41 +0,0 @@ -\begintext - -Heliocentric Earth Equatorial (HEEQ+180) Frame -Used by the BATSRUS model -This Kernel's ID is not a valid ID! - Definition of the Heliocentric Earth Equatorial frame: - - All vectors are geometric: no aberration corrections are - used. - - The solar rotation axis is the primary vector: the Z axis points - in the solar north direction. - - The position of the sun relative to the earth is the secondary - vector: the X axis is the component of this position vector - orthogonal to the Z axis. - - The Y axis is Z cross X, completing the right-handed - reference frame. - -\begindata - - FRAME_HEEQ180 = 6666666 - FRAME_6666666_NAME = 'HEEQ180' - FRAME_6666666_CLASS = 5 - FRAME_6666666_CLASS_ID = 6666666 - FRAME_6666666_CENTER = 10 - FRAME_6666666_RELATIVE = 'J2000' - FRAME_6666666_DEF_STYLE = 'PARAMETERIZED' - FRAME_6666666_FAMILY = 'TWO-VECTOR' - FRAME_6666666_PRI_AXIS = 'Z' - FRAME_6666666_PRI_VECTOR_DEF = 'CONSTANT' - FRAME_6666666_PRI_FRAME = 'IAU_SUN' - FRAME_6666666_PRI_SPEC = 'RECTANGULAR' - FRAME_6666666_PRI_VECTOR = ( 0, 0, 1 ) - FRAME_6666666_SEC_AXIS = 'X' - FRAME_6666666_SEC_VECTOR_DEF = 'OBSERVER_TARGET_POSITION' - FRAME_6666666_SEC_OBSERVER = 'EARTH' - FRAME_6666666_SEC_TARGET = 'SUN' - FRAME_6666666_SEC_ABCORR = 'NONE' - FRAME_6666666_SEC_FRAME = 'IAU_SUN' diff --git a/data/assets/scene/solarsystem/sun/layers/colorlayers/sun_texture.asset b/data/assets/scene/solarsystem/sun/layers/colorlayers/sun_texture.asset index 830731671f..bb0793ad1f 100644 --- a/data/assets/scene/solarsystem/sun/layers/colorlayers/sun_texture.asset +++ b/data/assets/scene/solarsystem/sun/layers/colorlayers/sun_texture.asset @@ -2,7 +2,7 @@ local globe = asset.require("../../sun") -local texturesPath = asset.syncedResource({ +local texturesPath = asset.resource({ Type = "HttpSynchronization", Name = "Sun textures", Identifier = "sun_textures", @@ -13,7 +13,9 @@ local texturesPath = asset.syncedResource({ local Layer = { Identifier = "Texture", FilePath = texturesPath .. "sun.jpg", - Enabled = asset.enabled + Enabled = asset.enabled, + ZIndex = 5, + CacheSettings = { Enabled = false } } @@ -31,7 +33,6 @@ asset.export("layer", Layer) asset.meta = { Name = "Sun Texture", - Version = "1.0", Description = "Default Sun texture for renderable globe", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/sun/marker.asset b/data/assets/scene/solarsystem/sun/marker.asset index d1623e569c..cd2277fb80 100644 --- a/data/assets/scene/solarsystem/sun/marker.asset +++ b/data/assets/scene/solarsystem/sun/marker.asset @@ -1,9 +1,8 @@ -asset.require("spice/base") local transforms = asset.require("./transforms") -local textures = asset.syncedResource({ +local textures = asset.resource({ Type = "HttpSynchronization", Name = "Sun textures", Identifier = "sun_textures", @@ -15,8 +14,8 @@ local SunMarker = { Identifier = "SunMarker", Parent = transforms.SolarSystemBarycenter.Identifier, Renderable = { - Enabled = false, Type = "RenderablePlaneImageLocal", + Enabled = false, Size = 3.0E11, Origin = "Center", Billboard = true, @@ -45,7 +44,6 @@ asset.export(SunMarker) asset.meta = { Name = "Sun marker", - Version = "1.1", Description = "Marker for the Sun, with a stick and label", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/sun/sun.asset b/data/assets/scene/solarsystem/sun/sun.asset index 350c6f51b0..1d09d395e3 100644 --- a/data/assets/scene/solarsystem/sun/sun.asset +++ b/data/assets/scene/solarsystem/sun/sun.asset @@ -1,4 +1,3 @@ -asset.require("spice/base") local transforms = asset.require("./transforms") @@ -10,8 +9,11 @@ local Sun = { Type = "RenderableGlobe", Enabled = false, Radii = { 695700000, 695700000, 695700000 }, - SegmentsPerPatch = 64, - Layers = {}, + LightSource = { + Identifier = "Camera", + Type = "CameraLightSource", + Intensity = 1.0 + }, PerformShading = false }, ApproachFactor = 15.0, @@ -26,8 +28,8 @@ local SunLabel = { Identifier = "SunLabel", Parent = Sun.Identifier, Renderable = { - Enabled = false, Type = "RenderableLabel", + Enabled = false, Text = "Sun", FontSize = 70.0, Size = 14.17, @@ -47,13 +49,6 @@ local SunLabel = { } } -local LightSource = { - Type = "SceneGraphLightSource", - Identifier = "Sun", - Node = Sun.Identifier, - Intensity = 1.0 -} - asset.onInitialize(function() openspace.addSceneGraphNode(Sun) @@ -67,13 +62,11 @@ end) asset.export(Sun) asset.export(SunLabel) -asset.export("LightSource", LightSource) asset.meta = { Name = "Sun", - Version = "1.1", Description = "The Sun and label", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/sun/transforms.asset b/data/assets/scene/solarsystem/sun/transforms.asset index 67ccf36166..4cd42b86e9 100644 --- a/data/assets/scene/solarsystem/sun/transforms.asset +++ b/data/assets/scene/solarsystem/sun/transforms.asset @@ -1,4 +1,4 @@ -asset.require("spice/base") +local coreKernels = asset.require("spice/core") @@ -6,7 +6,7 @@ asset.require("spice/base") local SolarSystemBarycenter = { Identifier = "SolarSystemBarycenter", -- No parent; this node is attached to the scene graph root - TimeFrame = { -- Using Spice kernels for 1850-2150 + TimeFrame = { Type = "TimeFrameInterval", Start = "1550-JAN-01", End = "2650-JAN-22" @@ -14,7 +14,6 @@ local SolarSystemBarycenter = { GUI = { Name = "Solar System Barycenter", Path = "/Solar System", - Description = "Barycenter of the solar system, expressed in the Galactic frame", Hidden = true } } @@ -25,12 +24,12 @@ local SunCenter = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "SUN", - Observer = "SSB" + Target = coreKernels.ID.Sun, + Observer = coreKernels.ID.SolarSystemBarycenter } }, GUI = { - Name = "SUN Center", + Name = "Sun Center", Path = "/Solar System/Sun", Description = "Spice frame for the Sun", Hidden = true @@ -44,56 +43,61 @@ local SunIAU = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "SUN", - Observer = "SSB" + Target = coreKernels.ID.Sun, + Observer = coreKernels.ID.SolarSystemBarycenter }, Rotation = { Type = "SpiceRotation", - SourceFrame = "IAU_SUN", - DestinationFrame = "GALACTIC" + SourceFrame = coreKernels.Frame.Sun, + DestinationFrame = coreKernels.Frame.Galactic } }, GUI = { - Name = "SUN IAU", + Name = "Sun IAU", Path = "/Solar System/Sun", - Description = "Spice frame for the Sun", Hidden = true } } -local SunECLIPJ2000 = { - Identifier = "SunECLIPJ2000", +local SunEclipJ2000 = { + Identifier = "SunEclipJ2000", Parent = SolarSystemBarycenter.Identifier, Transform = { Translation = { Type = "SpiceTranslation", - Target = "SUN", - Observer = "SSB" + Target = coreKernels.ID.Sun, + Observer = coreKernels.ID.SolarSystemBarycenter }, Rotation = { Type = "SpiceRotation", - SourceFrame = "ECLIPJ2000", - DestinationFrame = "GALACTIC" + SourceFrame = coreKernels.Frame.EclipJ2000, + DestinationFrame = coreKernels.Frame.Galactic } }, GUI = { - Name = "SUN J2000", + Name = "Sun J2000", Path = "/Solar System/Sun", - Description = "Spice rotation for Mean ecliptic and equinox of J2000", Hidden = true } } +local LightSource = { + Type = "SceneGraphLightSource", + Identifier = "Sun", + Node = SunIAU.Identifier, + Intensity = 1.0 +} + asset.onInitialize(function() openspace.addSceneGraphNode(SolarSystemBarycenter) openspace.addSceneGraphNode(SunCenter) openspace.addSceneGraphNode(SunIAU) - openspace.addSceneGraphNode(SunECLIPJ2000) + openspace.addSceneGraphNode(SunEclipJ2000) end) asset.onDeinitialize(function() - openspace.removeSceneGraphNode(SunECLIPJ2000) + openspace.removeSceneGraphNode(SunEclipJ2000) openspace.removeSceneGraphNode(SunIAU) openspace.removeSceneGraphNode(SunCenter) openspace.removeSceneGraphNode(SolarSystemBarycenter) @@ -102,13 +106,13 @@ end) asset.export(SolarSystemBarycenter) asset.export(SunCenter) asset.export(SunIAU) -asset.export(SunECLIPJ2000) +asset.export(SunEclipJ2000) +asset.export("LightSource", LightSource) asset.meta = { Name = "Sun Transforms", - Version = "1.1", Description = "Sun transforms: Solar System Barycenter, SUN IAU and SUN J2000", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/sun/transforms_heliosphere.asset b/data/assets/scene/solarsystem/sun/transforms_heliosphere.asset index eb7447a536..45e9828964 100644 --- a/data/assets/scene/solarsystem/sun/transforms_heliosphere.asset +++ b/data/assets/scene/solarsystem/sun/transforms_heliosphere.asset @@ -1,48 +1,131 @@ -asset.require("spice/base") local sunTransforms = asset.require("scene/solarsystem/sun/transforms") +local coreKernels = asset.require("spice/core") -local HEEQ180ReferenceFrame = { - Identifier = "HEEQ180ReferenceFrame", - -- The HEEQ180 reference frame should have Sun_IAU as parent - -- instead of Solar center, however the Sun_IAU adds - -- an unwanted rotation which is difficult to cancel out - -- since it is using SpiceRotation. Sun center - -- is used instead. +local SunCentricFrameKernels = asset.resource({ + Name = "Sun Centric Frame Kernels", + Type = "HttpSynchronization", + Identifier = "suncentric_frame_kernels", + Version = 1 +}) + +local HeliocentricEarthEquatorial180 = { + Identifier = "HeliocentricEarthEquatorial180", Parent = sunTransforms.SunCenter.Identifier, Transform = { Rotation = { Type = "SpiceRotation", SourceFrame = "HEEQ180", - DestinationFrame = "GALACTIC", - Kernels = asset.localResource("kernels/HEEQ180.tf") + DestinationFrame = coreKernels.Frame.Galactic } }, GUI = { - Name = "HEEQ180 Reference Frame", + Name = "Heliocentric Earth Equatorial 180", Path = "/Solar System/Sun", + Description = [[ - X-Y plane is the solar equator of date, therefore, the +Z axis + is the primary vector and it is aligned to the Sun's north pole + of date. + + - +X axis is defined by the intersection between the Sun equatorial + plane and the solar central meridian of date as seen from the Earth. + The solar central meridian of date is defined as the meridian of the + Sun that is turned toward the Earth. Therefore, +X axis is the + component of the Sun-Earth vector that is orthogonal to the +Z axis. + + - +Y axis completes the right-handed system. + + - the origin of this frame is the Sun's center of mass.]], + Hidden = true + } +} + +local HeliocentricEarthEquatorial = { + Identifier = "HeliocentricEarthEquatorial", + Parent = sunTransforms.SunCenter.Identifier, + Transform = { + Rotation = { + Type = "SpiceRotation", + SourceFrame = "HEEQ", + DestinationFrame = coreKernels.Frame.Galactic + } + }, + GUI = { + Name = "Heliocentric Earth Equatorial", + Path = "/Solar System/Sun", + Description = [[ - X-Y plane is the solar equator of date, therefore, the +Z axis + is the primary vector and it is aligned to the Sun's north pole + of date. + + - +X axis is defined by the intersection between the Sun equatorial + plane and the solar central meridian of date as seen from the Earth. + The solar central meridian of date is defined as the meridian of the + Sun that is turned toward the Earth. Therefore, +X axis is the + component of the Sun-Earth vector that is orthogonal to the +Z axis. + + - +Y axis completes the right-handed system. + + - the origin of this frame is the Sun's center of mass.]], + Hidden = true + } +} + +local HeliocentricEarthEcliptic = { + Identifier = "HeliocentricEarthEcliptic", + Parent = sunTransforms.SunCenter.Identifier, + Transform = { + Rotation = { + Type = "SpiceRotation", + SourceFrame = "HEE", + DestinationFrame = coreKernels.Frame.Galactic + } + }, + GUI = { + Name = "Heliocentric Earth Ecliptic", + Path = "/Solar System/Sun", + Description = [[ - X-Y plane is defined by the Earth Mean Ecliptic plane of date, + therefore, the +Z axis is the primary vector,and it defined as + the normal vector to the Ecliptic plane that points toward the + north pole of date \n + + - +X axis is the component of the Sun-Earth vector that is + orthogonal to the +Z axis. + + - +Y axis completes the right-handed system. + + - the origin of this frame is the Sun's center of mass.]], Hidden = true } } asset.onInitialize(function() - openspace.addSceneGraphNode(HEEQ180ReferenceFrame) + openspace.spice.loadKernel(SunCentricFrameKernels .. "HEEQ180.tf") + openspace.spice.loadKernel(SunCentricFrameKernels .. "HEEQ.tf") + openspace.spice.loadKernel(SunCentricFrameKernels .. "HEE.tf") + openspace.addSceneGraphNode(HeliocentricEarthEquatorial180) + openspace.addSceneGraphNode(HeliocentricEarthEquatorial) + openspace.addSceneGraphNode(HeliocentricEarthEcliptic) end) asset.onDeinitialize(function() - openspace.removeSceneGraphNode(HEEQ180ReferenceFrame) + openspace.removeSceneGraphNode(HeliocentricEarthEcliptic) + openspace.removeSceneGraphNode(HeliocentricEarthEquatorial) + openspace.removeSceneGraphNode(HeliocentricEarthEquatorial180) + openspace.spice.unloadKernel(SunCentricFrameKernels .."HEE.tf") + openspace.spice.unloadKernel(SunCentricFrameKernels .."HEEQ.tf") + openspace.spice.unloadKernel(SunCentricFrameKernels .."HEEQ180.tf") end) -asset.export(HEEQ180ReferenceFrame) +asset.export(HeliocentricEarthEquatorial180) +asset.export(HeliocentricEarthEquatorial) +asset.export(HeliocentricEarthEcliptic) asset.meta = { - Name = "Sun Transform, HEEQ180", - Version = "1.1", - Description = "Sun transform: HEEQ180", + Name = "Sun Transform, HEE, HEEQ and HEEQ180", + Description = "Sun transform: HEE, HEEQ and HEEQ180", Author = "CCMC", URL = "http://openspaceproject.com", License = "MIT license" diff --git a/data/assets/scene/solarsystem/telescopes/euclid/euclid.asset b/data/assets/scene/solarsystem/telescopes/euclid/euclid.asset new file mode 100644 index 0000000000..8ee29d76b2 --- /dev/null +++ b/data/assets/scene/solarsystem/telescopes/euclid/euclid.asset @@ -0,0 +1,13 @@ +asset.require("./model") +asset.require("./trails") +asset.require("./mission") + + + +asset.meta = { + Name = "Euclid", + Description = "This asset includes all of the other assets for the Euclid mission.", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/telescopes/euclid/kernels.asset b/data/assets/scene/solarsystem/telescopes/euclid/kernels.asset new file mode 100644 index 0000000000..9d407d81c9 --- /dev/null +++ b/data/assets/scene/solarsystem/telescopes/euclid/kernels.asset @@ -0,0 +1,37 @@ +local kernels = asset.resource({ + Name = "Euclid Kernels", + Type = "HttpSynchronization", + Identifier = "euclid_kernels", + Version = 1 +}) + + +local EuclidKernels = { + kernels .. "de432s.bsp", + kernels .. "euclid_flp_00044_20230701_20311013_v01.bsp" +} + +local ID = { + Euclid = -680 +} + + +asset.onInitialize(function() + openspace.spice.loadKernel(EuclidKernels) +end) + +asset.onDeinitialize(function() + openspace.spice.unloadKernel(EuclidKernels) +end) + +asset.export("ID", ID) + + + +asset.meta = { + Name = "Euclid Kernels", + Description = "This asset contains the SPICE kernels for ESA's Euclid mission.", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/telescopes/euclid/mission.asset b/data/assets/scene/solarsystem/telescopes/euclid/mission.asset new file mode 100644 index 0000000000..a5379df34a --- /dev/null +++ b/data/assets/scene/solarsystem/telescopes/euclid/mission.asset @@ -0,0 +1,89 @@ +local Mission = { + Identifier = "Euclid", + Name = "Euclid", + Image = "https://www.esa.int/var/esa/storage/images/esa_multimedia/images/2013/01/euclid_logo/12493233-3-eng-GB/Euclid_logo_pillars.png", + Description = [[Euclid is designed to explore the evolution of the dark universe. It will make a 3D-map of the universe (with time as the third dimension) by observing billions of galaxies out to 10 billion light-years, across more than a third of the sky. + + While dark energy accelerates the expansion of the universe and dark matter governs the growth of cosmic structures, scientists remain unsure about what dark energy and dark matter actually are. + + By observing the universe evolving over the past 10 billion years, Euclid will reveal how it has expanded and how structure has formed over cosmic history - and from this, astronomers can infer the properties of dark energy, dark matter and gravity, to reveal more about their precise nature.]], + Milestones = { + { + Name = "Launch", + Date = "2023 JUL 01 15:12:00" + }, + { + Name = "Start of Trajectory Information", + Date = "2023 JUL 01 15:53:08.239" + }, + { + Name = "Quality Release Q1", + Date = "2024 DEC 01" + }, + { + Name = "Data Release DR1", + Date = "2025 DEC 01" + }, + { + Name = "Quality Release Q2", + Date = "2026 DEC 01" + }, + { + Name = "Data Release DR2", + Date = "2027 DEC 01" + }, + { + Name = "Quality Release Q3", + Date = "2028 DEC 01" + }, + { + Name = "Quality Release Q4", + Date = "2029 DEC 01" + }, + { + Name = "Data Release DR3", + Date = "2030 DEC 01" + } + }, + Phases = { + { + Name = "Cruise phase", + TimeRange = { Start = "2023 JUL 01 15:12:00", End = "2023 AUG 01" }, + Description = "Following a cruise of 30 days, Euclid will operate in a large halo orbit around the L2 point of the Sun-Earth system, which is located 1.5 million km from the Earth in the anti-Sun direction. The orbit will not suffer from any Earth eclipses and will have a radius of 1 million kilometers. An operational lifetime of 6 years is planned." + }, + { + Name = "Commissioning & Performance Verification phase", + TimeRange = { Start = "2023 AUG 01", End = "2023 OCT 01" }, + Description = "During commissioning a mission's instruments and subsystems are deployed, turned on, tested and calibrated. The Performance Verification will ensure that the science instruments are all rigorously tested and that the expected performances of the Euclid project are in line with the core science objectives." + }, + { + Name = "Operational phase", + TimeRange = { Start = "2023 OCT 01", End = "2028 AUG 01" }, + Description = [[Euclid was selected for implementation in June 2012 by ESA's Science Programme Committee. It's main scientific objectives are: + + - To investigate whether Dark Energy is real, or whether the apparent acceleration of the Universe is caused by a breakdown of General Relativity on the largest scales, or a failure of our assumption that the universe is more or less uniform in density. + - If dark energy is real, to investigate whether it is a constant energy spread across space, which would make it the Cosmological Constant found in Einstein's General Relativity, or a new force of nature that evolves with the expansion of the Universe. + - To investigate the nature of Dark Matter, the mass of neutrino particles and whether there are other, so-far undetected fast moving particle species in the Universe. + - To investigate the conditions in the Universe after the Big Bang that seeded the large-scale structure of the universe that we observe today.]] + } + } +} + + +asset.onInitialize(function() + openspace.loadMission(Mission) +end) + +asset.onDeinitialize(function() + openspace.unloadMission(Mission) +end) + + + +asset.meta = { + Name = "Euclid Mission", + Description = "This asset contains the mission profile information for ESA's Euclid mission. The data in this file has been combined from multiple sources, including https://sci.esa.int/web/euclid, https://www.esa.int/Science_Exploration/Space_Science/Euclid_overview, https://www.euclid-ec.org/, https://sci.esa.int/web/euclid, https://indico.in2p3.fr/event/14206/contributions/17189/attachments/14299/17526/Euclid-MSauvage-LSSTFrance-MAR2017.pdf, and https://euclid.caltech.edu/page/data-release-timeline", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/telescopes/euclid/model.asset b/data/assets/scene/solarsystem/telescopes/euclid/model.asset new file mode 100644 index 0000000000..c358df4319 --- /dev/null +++ b/data/assets/scene/solarsystem/telescopes/euclid/model.asset @@ -0,0 +1,73 @@ +local transform = asset.require("scene/solarsystem/planets/earth/transforms") +local sun = asset.require("scene/solarsystem/sun/transforms") +local kernels = asset.require("./kernels") +local coreKernels = asset.require("spice/core") + + + +local modelFolder = asset.resource({ + Name = "Euclid Model", + Type = "HttpSynchronization", + Identifier = "euclid_model", + Version = 1 +}) + + +local Euclid = { + Identifier = "Euclid", + Parent = transform.EarthBarycenter.Identifier, + TimeFrame = { + Type = "TimeFrameInterval", + Start = "2023 JUL 01 15:53:08.239", + End = "2031 OCT 13 00:37:22.437" + }, + Transform = { + Translation = { + Type = "SpiceTranslation", + Target = kernels.ID.Euclid, + Observer = coreKernels.ID.EarthBarycenter + }, + Rotation = { + Type = "FixedRotation", + Attached = "Euclid", + ZAxis = sun.SunCenter.Identifier, + YAxis = { 0.0, 1.0, 0.0 }, + YAxisOrthogonal = true + } + }, + Renderable = { + Type = "RenderableModel", + GeometryFile = modelFolder .. "euclid.fbx", + ModelScale = 30.0, + LightSources = { + sun.LightSource + }, + PerformShading = true, + AmbientIntensity = 0.075 + }, + GUI = { + Name = "Euclid", + Path = "/Solar System/Telescopes/Euclid" + } +} + + +asset.onInitialize(function() + openspace.addSceneGraphNode(Euclid) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Euclid) +end) + +asset.export(Euclid) + + + +asset.meta = { + Name = "Euclid Model", + Description = "This asset contains the model of ESA's Euclid spacecraft. The model is retrieved from https://scifleet.esa.int", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/telescopes/euclid/trails.asset b/data/assets/scene/solarsystem/telescopes/euclid/trails.asset new file mode 100644 index 0000000000..b91f91ad34 --- /dev/null +++ b/data/assets/scene/solarsystem/telescopes/euclid/trails.asset @@ -0,0 +1,135 @@ +local kernels = asset.require("./kernels") +local earth = asset.require("scene/solarsystem/planets/earth/transforms") +local solarsystem = asset.require("scene/solarsystem/sun/transforms") +local transforms = asset.require("scene/solarsystem/planets/earth/lagrange_points/l2/transforms") +local coreKernels = asset.require("spice/core") + + +local StartTime = "2023 JUL 01 15:53:08.239" +local EndTime = "2031 OCT 13 00:37:22.437" + +local EuclidTrailSun = { + Identifier = "EuclidTrailSun", + Parent = solarsystem.SolarSystemBarycenter.Identifier, + Renderable = { + Type = "RenderableTrailTrajectory", + Translation = { + Type = "SpiceTranslation", + Target = kernels.ID.Euclid, + Observer = coreKernels.ID.SolarSystemBarycenter + }, + Color = { 0.70, 0.50, 0.20 }, + StartTime = StartTime, + EndTime = EndTime, + SampleInterval = 60000 + }, + GUI = { + Name = "Euclid Trail (Sun)", + Path = "/Solar System/Telescopes/Euclid" + } +} + +local EuclidTrailEarth = { + Identifier = "EuclidTrailEarth", + Parent = earth.EarthBarycenter.Identifier, + Renderable = { + Type = "RenderableTrailTrajectory", + Translation = { + Type = "SpiceTranslation", + Target = kernels.ID.Euclid, + Observer = coreKernels.ID.EarthBarycenter + }, + Color = { 0.325, 0.65, 0.55 }, + StartTime = StartTime, + EndTime = EndTime, + SampleInterval = 60000 + }, + GUI = { + Name = "Euclid Trail (Earth)", + Path = "/Solar System/Telescopes/Euclid" + } +} + +local EuclidTrailOrbit = { + Identifier = "EuclidTrailOrbit", + Parent = transforms.L2Position.Identifier, + TimeFrame = { + Type = "TimeFrameInterval", + Start = StartTime, + End = EndTime + }, + Renderable = { + Type = "RenderableTrailOrbit", + Translation = { + Type = "SpiceTranslation", + Target = kernels.ID.Euclid, + Observer = transforms.ID.L2, + Frame = coreKernels.Frame.Galactic + }, + Color = { 0.863, 0.0, 0.902 }, + Period = 182.621099, -- About 6 months + Resolution = 183 -- About a sample rate of once per day + }, + GUI = { + Name = "Euclid Orbit Trail", + Path = "/Solar System/Telescopes/Euclid", + Description = "Euclid Orbit Trail relative to L2" + } +} + +local EuclidTrailCoRevOrbit = { + Identifier = "EuclidTrailCoRevOrbit", + Parent = transforms.L2CoRevFrame.Identifier, + TimeFrame = { + Type = "TimeFrameInterval", + Start = StartTime, + End = EndTime + }, + Renderable = { + Type = "RenderableTrailOrbit", + Translation = { + Type = "SpiceTranslation", + Target = kernels.ID.Euclid, + Observer = transforms.ID.L2, + Frame = transforms.Frame.L2Corevolving + }, + Color = { 0.863, 0.0, 0.902 }, + Period = 182.621099, -- About 6 months + Resolution = 183 -- About a sample rate of once per day + }, + GUI = { + Name = "Euclid L2 Co-Revolving Orbit Trail", + Path = "/Solar System/Telescopes/Euclid", + Description = "Euclid Orbit Trail relative to L2" + } +} + + +asset.onInitialize(function() + openspace.addSceneGraphNode(EuclidTrailSun) + openspace.addSceneGraphNode(EuclidTrailEarth) + openspace.addSceneGraphNode(EuclidTrailOrbit) + openspace.addSceneGraphNode(EuclidTrailCoRevOrbit) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(EuclidTrailCoRevOrbit) + openspace.removeSceneGraphNode(EuclidTrailOrbit) + openspace.removeSceneGraphNode(EuclidTrailEarth) + openspace.removeSceneGraphNode(EuclidTrailSun) +end) + +asset.export(EuclidTrailSun) +asset.export(EuclidTrailEarth) +asset.export(EuclidTrailOrbit) +asset.export(EuclidTrailCoRevOrbit) + + + +asset.meta = { + Name = "Euclid Trails", + Description = "This asset contains the trails for the Euclid spacecraft relative to the Earth and the Sun.", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/telescopes/gaia/gaia.asset b/data/assets/scene/solarsystem/telescopes/gaia/gaia.asset index f23ee9bb27..7528a0a9a7 100644 --- a/data/assets/scene/solarsystem/telescopes/gaia/gaia.asset +++ b/data/assets/scene/solarsystem/telescopes/gaia/gaia.asset @@ -1,9 +1,10 @@ local transforms = asset.require("./transforms") +local sunTransform = asset.require("scene/solarsystem/sun/transforms") local sun = asset.require("scene/solarsystem/sun/sun") -local model = asset.syncedResource({ +local model = asset.resource({ Name = "Gaia Model", Type = "HttpSynchronization", Identifier = "gaia_model", @@ -20,7 +21,7 @@ local Gaia = { Attached = "Gaia", XAxis = { 1.0, 0.0, 0.0 }, XAxisOrthogonal = true, - YAxis = "Sun", + YAxis = sun.Sun.Identifier, YAxisInvert = true }, Scale = { @@ -31,10 +32,9 @@ local Gaia = { -- X Orthogonal Renderable = { Type = "RenderableModel", - Body = "GAIA", GeometryFile = model .. "gaia.obj", LightSources = { - sun.LightSource, + sunTransform.LightSource, { Identifier = "Camera", Type = "CameraLightSource", diff --git a/data/assets/scene/solarsystem/telescopes/gaia/trail.asset b/data/assets/scene/solarsystem/telescopes/gaia/trail.asset index a1ba231f95..cc159ca913 100644 --- a/data/assets/scene/solarsystem/telescopes/gaia/trail.asset +++ b/data/assets/scene/solarsystem/telescopes/gaia/trail.asset @@ -3,7 +3,7 @@ local sunTransforms = asset.require("scene/solarsystem/sun/transforms") -local trail = asset.syncedResource({ +local trail = asset.resource({ Name = "Gaia Trail", Type = "HttpSynchronization", Identifier = "gaia_trail", @@ -83,7 +83,6 @@ asset.export(GaiaTrailEclip) asset.meta = { Name = "Gaia Trail", - Version = "1.0", Description = [[This asset contains the trail of Gaia around both Earth and the Sun. Data from JPL Horizons from 2013 DEC 19 09:55:27 to 2026 SEP 14 21:15:27]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/telescopes/gaia/transforms.asset b/data/assets/scene/solarsystem/telescopes/gaia/transforms.asset index 9d2375f100..702bded85b 100644 --- a/data/assets/scene/solarsystem/telescopes/gaia/transforms.asset +++ b/data/assets/scene/solarsystem/telescopes/gaia/transforms.asset @@ -2,7 +2,7 @@ local earthTransforms = asset.require("scene/solarsystem/planets/earth/transform -local trail = asset.syncedResource({ +local trail = asset.resource({ Name = "Gaia Trail", Type = "HttpSynchronization", Identifier = "gaia_trail", @@ -48,7 +48,6 @@ asset.export(GaiaPosition) asset.meta = { Name = "Gaia Transform", - Version = "1.0", Description = [[This asset contains the position of Gaia from 2013 DEC 19 09:55:27 to 2026 SEP 14 21:15:27. Data from JPL Horizons]], Author = "OpenSpace Team", diff --git a/data/assets/scene/solarsystem/telescopes/jwst/actions.asset b/data/assets/scene/solarsystem/telescopes/jwst/actions.asset index a0615e5196..ed9854d6f8 100644 --- a/data/assets/scene/solarsystem/telescopes/jwst/actions.asset +++ b/data/assets/scene/solarsystem/telescopes/jwst/actions.asset @@ -2,56 +2,56 @@ local ToggleLagrangianPoints = { Identifier = "os.jwst.ToggleLagrangianPoints", Name = "Toggle Lagrangian points", Command = [[ - local list = openspace.getProperty("{lagrange_points_earth}.Renderable.Enabled") + local list = openspace.property("{lagrange_points_earth}.Renderable.Enabled") for _,v in pairs(list) do - openspace.setPropertyValueSingle(v, not openspace.getPropertyValue(v)) + openspace.setPropertyValueSingle(v, not openspace.propertyValue(v)) end ]], Documentation = "Toggle points and labels for the Lagrangian points for Earth Sun system", GuiPath = "/JWST", - isLocal = false + IsLocal = false } local ToggleHudf = { Identifier = "os.jwst.ToggleHudf", Name = "Toggle Hubble Ultra Deep Field", Command = [[ - local list = openspace.getProperty("{mission_jwst_hudf}.*.Enabled") + local list = openspace.property("{mission_jwst_hudf}.*.Enabled") for _,v in pairs(list) do - openspace.setPropertyValueSingle(v, not openspace.getPropertyValue(v)) + openspace.setPropertyValueSingle(v, not openspace.propertyValue(v)) end ]], Documentation = "Toggle Hubble Ultra Deep Field image and line towards its coordinate", GuiPath = "/JWST", - isLocal = false + IsLocal = false } local ToggleL2 = { Identifier = "os.jwst.ToggleL2", Name = "Toggle L2 line and small L2 label", Command = [[ - local list = openspace.getProperty("{lagrange_points_earth_l2_small}.*.Enabled") + local list = openspace.property("{lagrange_points_earth_l2_small}.*.Enabled") for _,v in pairs(list) do - openspace.setPropertyValueSingle(v, not openspace.getPropertyValue(v)) + openspace.setPropertyValueSingle(v, not openspace.propertyValue(v)) end ]], Documentation = "Toggle L2 label, point and line", GuiPath = "/JWST", - isLocal = false + IsLocal = false } local ToggleFov = { Identifier = "os.jwst.ToggleFov", Name = "Toggle JWST field of view and view band", Command = [[ - local list = openspace.getProperty("{mission_jwst_fov}.*.Enabled") + local list = openspace.property("{mission_jwst_fov}.*.Enabled") for _,v in pairs(list) do - openspace.setPropertyValueSingle(v, not openspace.getPropertyValue(v)) + openspace.setPropertyValueSingle(v, not openspace.propertyValue(v)) end ]], Documentation = "Toggle James Webb Space Telecope field of view and view band", GuiPath = "/JWST", - isLocal = false + IsLocal = false } local SetupLaunch = { @@ -63,7 +63,7 @@ local SetupLaunch = { ]], Documentation = "Set the time to the launch time of JWST", GuiPath = "/JWST", - isLocal = false + IsLocal = false } local SetupDetach = { @@ -75,38 +75,38 @@ local SetupDetach = { ]], Documentation = "Set the time to the detach time of JWST", GuiPath = "/JWST", - isLocal = false + IsLocal = false } local ToggleSunTrail = { Identifier = "os.jwst.ToggleSunTrail", Name = "Toggle JWST Sun trail", Command = [[ - local value = openspace.getPropertyValue("Scene.JWSTSunTrail.Renderable.Enabled") + local value = openspace.propertyValue("Scene.JWSTSunTrail.Renderable.Enabled") openspace.setPropertyValueSingle("Scene.JWSTSunTrail.Renderable.Enabled", not value) ]], Documentation = "Toggle JWST trail relative to the Sun", GuiPath = "/JWST", - isLocal = false + IsLocal = false } local ToggleTrailsExceptMoon = { Identifier = "os.jwst.ToggleTrailsExceptMoon", Name = "Toggle trails (except Moon)", Command = [[ - local list = openspace.getProperty("{planetTrail_solarSystem}.Renderable.Enabled") + local list = openspace.property("{planetTrail_solarSystem}.Renderable.Enabled") for _,v in pairs(list) do - openspace.setPropertyValueSingle(v, not openspace.getPropertyValue(v)) + openspace.setPropertyValueSingle(v, not openspace.propertyValue(v)) end - local moonlist = openspace.getProperty("{moonTrail_solarSystem}.Renderable.Enabled") + local moonlist = openspace.property("{moonTrail_solarSystem}.Renderable.Enabled") for _,v in pairs(moonlist) do - openspace.setPropertyValueSingle(v, not openspace.getPropertyValue(v)) + openspace.setPropertyValueSingle(v, not openspace.propertyValue(v)) end openspace.setPropertyValueSingle("Scene.MoonTrail.Renderable.Enabled", true) ]], Documentation = "Toggle all planet and moon trails, except the Moon", GuiPath = "/JWST", - isLocal = false + IsLocal = false } local ToggleJwstTrails = { @@ -119,12 +119,12 @@ local ToggleJwstTrails = { "Scene.JWSTTrailCoRevOrbit.Renderable.Enabled" } for _,v in pairs(list) do - openspace.setPropertyValueSingle(v, not openspace.getPropertyValue(v)) + openspace.setPropertyValueSingle(v, not openspace.propertyValue(v)) end ]], Documentation = "Toggle JWST launch, cruise and L2 co-revolving orbit trails, not the Sun trail", GuiPath = "/JWST", - isLocal = false + IsLocal = false } @@ -166,7 +166,6 @@ asset.export("ToggleTrailsExceptMoon", ToggleJwstTrails.Identifier) asset.meta = { Name = "Actions - JWST", - Version = "1.0", Description = "Actions related to the JWST mission", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/telescopes/jwst/deployment.mission b/data/assets/scene/solarsystem/telescopes/jwst/deployment.mission deleted file mode 100644 index 6b51256d55..0000000000 --- a/data/assets/scene/solarsystem/telescopes/jwst/deployment.mission +++ /dev/null @@ -1,25 +0,0 @@ -return -{ - Name = "JWST_Deployment", - Phases = { - { Name = "Solar_Array_Deploy", TimeRange = { Start = "2021-DEC-25 12:50:20", End = "2021-DEC-25 12:50:42" }, - { Name = "Communication_Antenna_Deploy", TimeRange = { Start = "2021-DEC-26 06:20:00", End = "2021-DEC-26 11:59:00" }, - { Name = "Front_Palette_Deploy", TimeRange = { Start = "2021-DEC-28 06:40:35", End = "2021-DEC-28 18:20:00" }, - { Name = "Rear_Palette_Deploy", TimeRange = { Start = "2021-DEC-28 21:11:00", End = "2021-DEC-29 00:20:00" }, - { Name = "Base_Rise_Deploy", TimeRange = { Start = "2021-DEC-29 00:42:00", End = "2021-DEC-30 05:55:00" }, - { Name = "Aft_Flap_Deploy", TimeRange = { Start = "2021-DEC-30 09:20:00", End = "2021-DEC-30 13:57:00" }, - { Name = "Front_Right_Membrane_Restraints_Release", TimeRange = { Start = "2021-DEC-30 14:29:00", End = "2021-DEC-30 15:15:39" }, - { Name = "Front_Left_Membrane_Restraints_Release", TimeRange = { Start = "2021-DEC-30 15:29:13", End = "2021-DEC-30 16:58:20" }, - { Name = "Rear_Membrane_Restraints_Release", TimeRange = { Start = "2021-DEC-30 17:17:00", End = "2021-DEC-30 20:50:56" }, - { Name = "Core_Cover_Release", TimeRange = { Start = "2021-DEC-30 21:35:49", End = "2021-DEC-30 22:20:00" }, - { Name = "Right_Mid_Boom_Extend", TimeRange = { Start = "2021-DEC-30 23:49:43", End = "2021-DEC-31 06:02:05" }, - { Name = "Left_Mid_Boom_Extend", TimeRange = { Start = "2021-DEC-31 06:02:05", End = "2021-DEC-31 10:26:00" }, - { Name = "Sun_Shield_Membrane_Stretching", TimeRange = { Start = "2021-DEC-31 10:29:14", End = "2021-DEC-31 10:40:00" }, - { Name = "Sun_Shield_Layers_Separate", TimeRange = { Start = "2022-JAN-01 00:56:49", End = "2022-JAN-01 03:16:02" }, - { Name = "Bottom_Panel_Deploy", TimeRange = { Start = "2022-JAN-01 04:05:00", End = "2022-JAN-01 05:10:00" }, - { Name = "Secondary_Mirror_Deploy", TimeRange = { Start = "2022-JAN-01 12:20:00", End = "2022-JAN-05 22:53:00" }, - { Name = "Aft_Radiator_Delopy", TimeRange = { Start = "2022-JAN-06 00:40:48", End = "2022-JAN-06 04:25:00" }, - { Name = "Right_Main_Mirror_Deploy", TimeRange = { Start = "2022-JAN-06 21:50:00", End = "2022-JAN-08 01:00:48" }, - { Name = "Left_Main_Mirror_Deploy", TimeRange = { Start = "2022-JAN-08 11:20:00", End = "2022-JAN-09 07:20:00" } - } -} diff --git a/data/assets/scene/solarsystem/telescopes/jwst/fieldofview.asset b/data/assets/scene/solarsystem/telescopes/jwst/fieldofview.asset new file mode 100644 index 0000000000..95d5117d3d --- /dev/null +++ b/data/assets/scene/solarsystem/telescopes/jwst/fieldofview.asset @@ -0,0 +1,60 @@ +local transforms = asset.require("./transforms") +local model = asset.require("./model") + + + +local JWSTFov = { + Identifier = "JWSTFov", + Parent = model.JWSTModel.Identifier, + TimeFrame = { + Type = "TimeFrameInterval", + Start = transforms.LaunchTime + }, + Renderable = { + Type = "RenderablePrism", + Enabled = asset.enabled, + Segments = 6, + Lines = 3, + Radius = 3.25, + LineWidth = 1.0, + Color = { 1.0, 1.0, 1.0 }, + Length = 9.2E15 + }, + Transform = { + Rotation = { + Type = "StaticRotation", + Rotation = { 0, 0, math.rad(30) } + } + }, + Tag = { "mission_jwst_fov" }, + GUI = { + Name = "JWST Field of View", + Path = "/Solar System/Telescopes/JWST", + Description = [[ + The field of view for the James Webb Space Telescope at its current position. + ]] + } +} + + +asset.onInitialize(function() + openspace.addSceneGraphNode(JWSTFov) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(JWSTFov) +end) + +asset.export(JWSTFov) + + + +asset.meta = { + Name = "JWST Field of View", + Description = [[ + The field of view for the James Webb Space Telescope at its current position. + ]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/telescopes/jwst/jwst.asset b/data/assets/scene/solarsystem/telescopes/jwst/jwst.asset index 364181f76e..9d4f5cfb42 100644 --- a/data/assets/scene/solarsystem/telescopes/jwst/jwst.asset +++ b/data/assets/scene/solarsystem/telescopes/jwst/jwst.asset @@ -1,184 +1,31 @@ -asset.require("spice/base") asset.require("./actions") +asset.require("./fieldofview") +asset.require("./label") asset.require("./mission") -local sun = asset.require("scene/solarsystem/sun/sun") -local sunTransforms = asset.require("scene/solarsystem/sun/transforms") -local transforms = asset.require("./transforms") +asset.require("./model") +asset.require("./viewingband") +asset.require("scene/solarsystem/planets/earth/lagrange_points/l2/l2") +asset.require("scene/solarsystem/planets/earth/lagrange_points/l2/l2sunline") -local models = asset.syncedResource({ - Name = "JWST Model", - Type = "HttpSynchronization", - Identifier = "jwst_model", - Version = 3 -}) - -local band = asset.syncedResource({ - Name = "JWST band texture", - Type = "HttpSynchronization", - Identifier = "jwst_band_texture", - Version = 1 -}) - - -local LaunchTime = "2021 DEC 25 12:20:00" -local EndTime = "2024 JAN 22 00:00:00" - -local JWSTBand = { - Identifier = "JWSTBand", - Parent = transforms.JWSTPosition.Identifier, - TimeFrame = { - Type = "TimeFrameInterval", - Start = LaunchTime, - End = EndTime - }, - Transform = { - Rotation = { - Type = "FixedRotation", - Attached = "JWSTBand", - XAxis = { 1.0, 0.0, 0.0 }, - XAxisOrthogonal = true, - ZAxis = sunTransforms.SolarSystemBarycenter.Identifier - } - }, - Renderable = { - Type = "RenderableSphere", - Texture = band .. "JWST-band.png", - Size = 9.2E15, - Segments = 50, - DisableFadeInOut = true, - Orientation = "Inside", - Opacity = 0.05 - }, - Tag = { "mission_jwst_fov" }, - GUI = { - Name = "JWST Safe Viewing Band", - Path = "/Solar System/Telescopes/JWST", - Description = [[ - The safe viewing band for the James Webb Space Telescope at its current position - ]] - } -} - -local JWSTModel = { - Identifier = "JWSTModel", - Parent = transforms.JWSTRotation.Identifier, - TimeFrame = { - Type = "TimeFrameInterval", - Start = LaunchTime, - End = EndTime - }, - Renderable = { - Type = "RenderableModel", - GeometryFile = models .. "jwst_anim74_2fps_2018_nb.osmodel", - ModelScale = 0.0328, -- First scale down with centimeters then scale up with feet - EnableAnimation = true, - AnimationStartTime = "2021 12 25 12:20:00", - AnimationTimeScale = "Millisecond", - AnimationMode = "Once", - LightSources = { - sun.LightSource - }, - PerformShading = true - }, - GUI = { - Name = "James Webb Space Telescope Model", - Path = "/Solar System/Telescopes/JWST", - Description = [[ - Animated model of the James Webb Space Telescope that shows its deployment in - real time - ]] - } -} - -local JWSTFov = { - Identifier = "JWSTFov", - Parent = JWSTModel.Identifier, - TimeFrame = { - Type = "TimeFrameInterval", - Start = LaunchTime, - End = EndTime - }, - Renderable = { - Type = "RenderablePrism", - Segments = 6, - Lines = 3, - Radius = 3.25, - LineWidth = 1.0, - Color = { 1.0, 1.0, 1.0 }, - Length = 9.2E15 - }, - Transform = { - Rotation = { - Type = "StaticRotation", - Rotation = { 0, 0, math.rad(30) } - } - }, - Tag = { "mission_jwst_fov" }, - GUI = { - Name = "JWST Field of View", - Path = "/Solar System/Telescopes/JWST", - Description = [[ - The field of view for the James Webb Space Telescope at its current position - ]] - } -} - -local JWSTLabel = { - Identifier = "JWSTLabel", - Parent = transforms.JWSTPosition.Identifier, - TimeFrame = { - Type = "TimeFrameInterval", - Start = LaunchTime, - End = EndTime - }, - Renderable = { - Type = "RenderableLabel", - Text = "JWST", - FontSize = 50, - Size = 6.5, - MinMaxSize = { 4.0, 30.0 }, - OrientationOption = "Camera View Direction", - BlendMode = "Normal", - EnableFading = false - }, - GUI = { - Name = "JWST Label", - Path = "/Solar System/Telescopes/JWST", - Description = "Main label for the James Webb Space Telescope" - } -} - asset.onInitialize(function() - openspace.addSceneGraphNode(JWSTBand) - openspace.addSceneGraphNode(JWSTModel) - openspace.addSceneGraphNode(JWSTFov) - openspace.addSceneGraphNode(JWSTLabel) end) asset.onDeinitialize(function() - openspace.removeSceneGraphNode(JWSTLabel) - openspace.removeSceneGraphNode(JWSTFov) - openspace.removeSceneGraphNode(JWSTModel) - openspace.removeSceneGraphNode(JWSTBand) - openspace.scriptScheduler.clear(2) end) -asset.export(JWSTBand) -asset.export(JWSTModel) -asset.export(JWSTFov) -asset.export(JWSTLabel) - asset.meta = { Name = "James Webb Space Telescope", - Version = "1.1", Description = [[ - James Webb Space Telescope animated model, safe viewing band, field of view and label. + This assets adds the content for the James Webb Space Telescope mission, including + the animated model, safe viewing band, field of view, label, mission file, and actions. + It also includes visuals about the Lagrange point L2, and a line between L2 and the + Sun. ]], Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/telescopes/jwst/kernels.asset b/data/assets/scene/solarsystem/telescopes/jwst/kernels.asset new file mode 100644 index 0000000000..f9b83d945e --- /dev/null +++ b/data/assets/scene/solarsystem/telescopes/jwst/kernels.asset @@ -0,0 +1,22 @@ +local kernels = asset.resource({ + Name = "JWST Kernel", + Type = "HttpSynchronization", + Identifier = "jwst_kernels", + Version = 2 +}) + + +local ID = { + JWST = 170 +} + + +asset.onInitialize(function() + openspace.spice.loadKernel(kernels .. "webb.bsp") +end) + +asset.onDeinitialize(function() + openspace.spice.unloadKernel(kernels .. "webb.bsp") +end) + +asset.export("ID", ID) diff --git a/data/assets/scene/solarsystem/telescopes/jwst/label.asset b/data/assets/scene/solarsystem/telescopes/jwst/label.asset new file mode 100644 index 0000000000..21fe46a65c --- /dev/null +++ b/data/assets/scene/solarsystem/telescopes/jwst/label.asset @@ -0,0 +1,49 @@ +local transforms = asset.require("./transforms") + + + +local JWSTLabel = { + Identifier = "JWSTLabel", + Parent = transforms.JWSTPosition.Identifier, + TimeFrame = { + Type = "TimeFrameInterval", + Start = transforms.LaunchTime + }, + Renderable = { + Type = "RenderableLabel", + Enabled = asset.enabled, + Text = "JWST", + FontSize = 50, + Size = 6.5, + MinMaxSize = { 4.0, 30.0 }, + OrientationOption = "Camera View Direction", + BlendMode = "Normal", + EnableFading = false + }, + GUI = { + Name = "JWST Label", + Path = "/Solar System/Telescopes/JWST", + Description = "Main label for the James Webb Space Telescope." + } +} + + +asset.onInitialize(function() + openspace.addSceneGraphNode(JWSTLabel) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(JWSTLabel) +end) + +asset.export(JWSTLabel) + + + +asset.meta = { + Name = "JWST Label", + Description = "Main label for the James Webb Space Telescope", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/telescopes/jwst/mission.asset b/data/assets/scene/solarsystem/telescopes/jwst/mission.asset index 47b21b254b..e1ede5a9ce 100644 --- a/data/assets/scene/solarsystem/telescopes/jwst/mission.asset +++ b/data/assets/scene/solarsystem/telescopes/jwst/mission.asset @@ -1,10 +1,5 @@ ---voyager/mission.asset - --- Source: http://pluto.jhuapl.edu/Mission/index.php --- Many of the values (especially days of the month if 01 or 30 or 31 and hh::mm::ss if all 0) --- are approximate and need fixing - local Mission = { + Identifier = "JWST", Name = "James Webb Space Telescope", Image = "https://www.esa.int/var/esa/storage/images/esa_multimedia/images/2016/12/jwst_mission_logo/16561412-4-eng-GB/JWST_mission_logo_pillars.png", Description = "The James Webb Space Telescope (sometimes called JWST or Webb) is an orbiting infrared observatory that will complement and extend the discoveries of the Hubble Space Telescope, with longer wavelength coverage and greatly improved sensitivity. The longer wavelengths enable Webb to look much closer to the beginning of time and to hunt for the unobserved formation of the first galaxies, as well as to look inside dust clouds where stars and planetary systems are forming today.", @@ -20,7 +15,7 @@ local Mission = { Date = "2022 JAN 24 00:00:00", Description = "When you ask an astronomer about the James Webb Space Telescope's orbit, they'll tell you something that sounds like it came from a science-fiction novel. The Webb won't be orbiting the Earth - instead we will send it almost a million miles out into space to a place called 'L2'. L2 is short-hand for the second Lagrange Point, a wonderful accident of gravity and orbital mechanics, and the perfect place to park the Webb telescope in space. There are five so-called 'Lagrange Points' - areas where gravity from the sun and Earth balance the orbital motion of a satellite. Putting a spacecraft at any of these points allows it to stay in a fixed position relative to the Earth and sun with a minimal amount of energy needed for course correction.", Image = "https://www.nasa.gov/images/content/463480main_lagrange_point_lg_1.jpg", - Link = "https://www.nasa.gov/topics/universe/features/webb-l2.html", + Link = "https://www.nasa.gov/topics/universe/features/webb-l2.html" }, { Name = "NIRCam detected the first photons", @@ -50,7 +45,7 @@ local Mission = { Phases = { { Name = "Launch", - TimeRange = { Start = "2021 DEC 25 12:20:00", End = "2021 DEC 25 12:47:00" }, + TimeRange = { Start = "2021 DEC 25 12:20:00", End = "2021 DEC 25 12:47:00" } }, { Name = "Preparation for science operations", @@ -96,5 +91,5 @@ asset.onInitialize(function() end) asset.onDeinitialize(function() - openspace.unloadMission(Mission.Name) + openspace.unloadMission(Mission) end) diff --git a/data/assets/scene/solarsystem/telescopes/jwst/model.asset b/data/assets/scene/solarsystem/telescopes/jwst/model.asset new file mode 100644 index 0000000000..016d56a019 --- /dev/null +++ b/data/assets/scene/solarsystem/telescopes/jwst/model.asset @@ -0,0 +1,64 @@ +local sunTransforms = asset.require("scene/solarsystem/sun/transforms") +local transforms = asset.require("./transforms") + + + +local models = asset.resource({ + Name = "JWST Model", + Type = "HttpSynchronization", + Identifier = "jwst_model", + Version = 3 +}) + + +local JWSTModel = { + Identifier = "JWSTModel", + Parent = transforms.JWSTRotation.Identifier, + TimeFrame = { + Type = "TimeFrameInterval", + Start = transforms.LaunchTime + }, + Renderable = { + Type = "RenderableModel", + Enabled = asset.enabled, + GeometryFile = models .. "jwst_anim74_2fps_2018_nb.osmodel", + ModelScale = 0.0328, -- First scale down with centimeters then scale up with feet + EnableAnimation = true, + AnimationStartTime = "2021 12 25 12:20:00", + AnimationTimeScale = "Millisecond", + AnimationMode = "Once", + LightSources = { + sunTransforms.LightSource + }, + PerformShading = true + }, + GUI = { + Name = "James Webb Space Telescope Model", + Path = "/Solar System/Telescopes/JWST", + Description = [[ + Animated model of the James Webb Space Telescope that shows its deployment in + real time. + ]] + } +} + + +asset.onInitialize(function() + openspace.addSceneGraphNode(JWSTModel) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(JWSTModel) +end) + +asset.export(JWSTModel) + + + +asset.meta = { + Name = "James Webb Space Telescope Model", + Description = [[James Webb Space Telescope animated model.]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/scene/solarsystem/telescopes/jwst/point_jwst.asset b/data/assets/scene/solarsystem/telescopes/jwst/point_jwst.asset index ebe2b56876..bc2bd95d60 100644 --- a/data/assets/scene/solarsystem/telescopes/jwst/point_jwst.asset +++ b/data/assets/scene/solarsystem/telescopes/jwst/point_jwst.asset @@ -136,7 +136,7 @@ local PointJwst = { sky coordinate as arguments. ]], GuiPath = "/JWST/Events", - IsLocal = true + IsLocal = false } diff --git a/data/assets/scene/solarsystem/telescopes/jwst/targets/crab.asset b/data/assets/scene/solarsystem/telescopes/jwst/targets/crab.asset index d9df8bce0f..d3d6c7f572 100644 --- a/data/assets/scene/solarsystem/telescopes/jwst/targets/crab.asset +++ b/data/assets/scene/solarsystem/telescopes/jwst/targets/crab.asset @@ -13,9 +13,7 @@ local CrabImage = { Opacity = 1.0, TexturePath = crab.image .. "crab-nebula.png", Tag = { "mission_jwst_target" }, - Description = [[ - Image of the Crab Nebula by NASA, ESA and Allison Loll/Jeff Hester. - ]] + Description = "Image of the Crab Nebula by NASA, ESA and Allison Loll/Jeff Hester." } @@ -33,7 +31,6 @@ asset.export(CrabImage) asset.meta = { Name = "Crab Nebula Image", - Version = "1.0", Description = "Screenspace image of the Crab Nebula", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/telescopes/jwst/targets/crab_image.asset b/data/assets/scene/solarsystem/telescopes/jwst/targets/crab_image.asset index fb77d04dcf..bb61696508 100644 --- a/data/assets/scene/solarsystem/telescopes/jwst/targets/crab_image.asset +++ b/data/assets/scene/solarsystem/telescopes/jwst/targets/crab_image.asset @@ -1,4 +1,4 @@ -local image = asset.syncedResource({ +local image = asset.resource({ Name = "Crab Nebula Image", Type = "HttpSynchronization", Identifier = "crab_image", @@ -12,7 +12,6 @@ asset.export("image", image) asset.meta = { Name = "Crab Nebula", - Version = "1.0", Description = "Crab Nebula Image", Author = [[ NASA, ESA and Allison Loll/Jeff Hester (Arizona State University). diff --git a/data/assets/scene/solarsystem/telescopes/jwst/targets/hd84406.asset b/data/assets/scene/solarsystem/telescopes/jwst/targets/hd84406.asset index fdc89b55aa..ac6bcea77d 100644 --- a/data/assets/scene/solarsystem/telescopes/jwst/targets/hd84406.asset +++ b/data/assets/scene/solarsystem/telescopes/jwst/targets/hd84406.asset @@ -33,7 +33,6 @@ asset.export(HD84406Image) asset.meta = { Name = "HD 84406 Star Image", - Version = "1.0", Description = "Screenspace image of the HD 84406 Star", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/telescopes/jwst/targets/hd84406_image.asset b/data/assets/scene/solarsystem/telescopes/jwst/targets/hd84406_image.asset index c119d7cd01..576a2b415d 100644 --- a/data/assets/scene/solarsystem/telescopes/jwst/targets/hd84406_image.asset +++ b/data/assets/scene/solarsystem/telescopes/jwst/targets/hd84406_image.asset @@ -1,4 +1,4 @@ -local image = asset.syncedResource({ +local image = asset.resource({ Name = "HD 84406 Star Image", Type = "HttpSynchronization", Identifier = "hd84406_image", @@ -12,7 +12,6 @@ asset.export("image", image) asset.meta = { Name = "HD 84406 Star", - Version = "1.0", Description = "JWST alignment image of star HD 84406", Author = "NASA/STScI", URL = "https://www.nasa.gov/press-release/nasa-s-webb-reaches-alignment-milestone-optics-working-successfully", diff --git a/data/assets/scene/solarsystem/telescopes/jwst/targets/hh212.asset b/data/assets/scene/solarsystem/telescopes/jwst/targets/hh212.asset index 5badac01d0..cdaa51e25c 100644 --- a/data/assets/scene/solarsystem/telescopes/jwst/targets/hh212.asset +++ b/data/assets/scene/solarsystem/telescopes/jwst/targets/hh212.asset @@ -13,9 +13,7 @@ local HH212Image = { Opacity = 1.0, TexturePath = hh212.image .. "hh212.png", Tag = { "mission_jwst_target" }, - Description = [[ - Image of HH 212 by ESO/M. McCaughrean. - ]] + Description = "Image of HH 212 by ESO/M. McCaughrean." } @@ -33,7 +31,6 @@ asset.export(HH212Image) asset.meta = { Name = "HH 212 Image", - Version = "1.0", Description = "Screenspace image of HH 212", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/telescopes/jwst/targets/hh212_image.asset b/data/assets/scene/solarsystem/telescopes/jwst/targets/hh212_image.asset index 775e2dddf9..5de6824dfb 100644 --- a/data/assets/scene/solarsystem/telescopes/jwst/targets/hh212_image.asset +++ b/data/assets/scene/solarsystem/telescopes/jwst/targets/hh212_image.asset @@ -1,4 +1,4 @@ -local image = asset.syncedResource({ +local image = asset.resource({ Name = "HH 212 Image", Type = "HttpSynchronization", Identifier = "hh212_image", @@ -12,7 +12,6 @@ asset.export("image", image) asset.meta = { Name = "HH 212", - Version = "1.0", Description = "HH 212 Image", Author = "ESO/M. McCaughrean", URL = "https://www.eso.org/public/images/potw1541a/", diff --git a/data/assets/scene/solarsystem/telescopes/jwst/targets/hudf.asset b/data/assets/scene/solarsystem/telescopes/jwst/targets/hudf.asset index 3ff3c7cb1f..f3e60a457c 100644 --- a/data/assets/scene/solarsystem/telescopes/jwst/targets/hudf.asset +++ b/data/assets/scene/solarsystem/telescopes/jwst/targets/hudf.asset @@ -26,10 +26,7 @@ local HUDFPosition = { GUI = { Name = "Hubble Ultra Deep Field Position", Path = "/Solar System/Telescopes/JWST/HUDF", - Hidden = true, - Description = [[ - Galactic cartesian position for the Hubble Ultra Deep Field - ]] + Hidden = true } } @@ -99,7 +96,6 @@ asset.export(HUDFPosition) asset.meta = { Name = "Hubble Ultra Deep Field Image and Line", - Version = "1.0", Description = [[ Screenspace image of the Hubble Ultra Deep Field and a line from the James Webb Space Telescope to the Hubble Ultra Deep Field position. diff --git a/data/assets/scene/solarsystem/telescopes/jwst/targets/hudf_image.asset b/data/assets/scene/solarsystem/telescopes/jwst/targets/hudf_image.asset index a2deb3c480..5d81a6df9f 100644 --- a/data/assets/scene/solarsystem/telescopes/jwst/targets/hudf_image.asset +++ b/data/assets/scene/solarsystem/telescopes/jwst/targets/hudf_image.asset @@ -1,4 +1,4 @@ -local image = asset.syncedResource({ +local image = asset.resource({ Name = "HUDF Image", Type = "HttpSynchronization", Identifier = "hudf_image", @@ -12,7 +12,6 @@ asset.export("image", image) asset.meta = { Name = "Hubble Ultra Deep Field", - Version = "1.0", Description = "Hubble Ultra Deep Field Image", Author = "NASA, ESA, and S. Beckwith (STScI) and the HUDF Team", URL = "https://esahubble.org/images/heic0611b/", diff --git a/data/assets/scene/solarsystem/telescopes/jwst/targets/m51.asset b/data/assets/scene/solarsystem/telescopes/jwst/targets/m51.asset index cf16be6271..8154c52db2 100644 --- a/data/assets/scene/solarsystem/telescopes/jwst/targets/m51.asset +++ b/data/assets/scene/solarsystem/telescopes/jwst/targets/m51.asset @@ -34,7 +34,6 @@ asset.export(M51Image) asset.meta = { Name = "M51 Galaxy Image", - Version = "1.0", Description = "Screenspace image of the M51 Galaxy", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/telescopes/jwst/targets/m51_image.asset b/data/assets/scene/solarsystem/telescopes/jwst/targets/m51_image.asset index 5526cfe9d3..73dac4006c 100644 --- a/data/assets/scene/solarsystem/telescopes/jwst/targets/m51_image.asset +++ b/data/assets/scene/solarsystem/telescopes/jwst/targets/m51_image.asset @@ -1,4 +1,4 @@ -local image = asset.syncedResource({ +local image = asset.resource({ Name = "M51 Galaxy Image", Type = "HttpSynchronization", Identifier = "m51_image", @@ -12,7 +12,6 @@ asset.export("image", image) asset.meta = { Name = "M51 Galaxy", - Version = "1.0", Description = "M51 Galaxy Image", Author = [[ NASA, ESA, S. Beckwith (STScI), and The Hubble Heritage Team (STScI/AURA) diff --git a/data/assets/scene/solarsystem/telescopes/jwst/targets/m82.asset b/data/assets/scene/solarsystem/telescopes/jwst/targets/m82.asset index 13a5362763..fda28b52b0 100644 --- a/data/assets/scene/solarsystem/telescopes/jwst/targets/m82.asset +++ b/data/assets/scene/solarsystem/telescopes/jwst/targets/m82.asset @@ -33,7 +33,6 @@ asset.export(M82Image) asset.meta = { Name = "M82 Galaxy Image", - Version = "1.0", Description = "Screenspace image of the M82 Galaxy", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/telescopes/jwst/targets/m82_image.asset b/data/assets/scene/solarsystem/telescopes/jwst/targets/m82_image.asset index adf6985ee0..d342cec01f 100644 --- a/data/assets/scene/solarsystem/telescopes/jwst/targets/m82_image.asset +++ b/data/assets/scene/solarsystem/telescopes/jwst/targets/m82_image.asset @@ -1,4 +1,4 @@ -local image = asset.syncedResource({ +local image = asset.resource({ Name = "M82 Galaxy Image", Type = "HttpSynchronization", Identifier = "m82_image", @@ -12,7 +12,6 @@ asset.export("image", image) asset.meta = { Name = "M82 Galaxy", - Version = "1.0", Description = "M82 Galaxy Image", Author = [[ NASA, ESA and the Hubble Heritage Team (STScI/AURA). Acknowledgment: diff --git a/data/assets/scene/solarsystem/telescopes/jwst/targets/orion.asset b/data/assets/scene/solarsystem/telescopes/jwst/targets/orion.asset index 7b99cfe617..ce79b81ca0 100644 --- a/data/assets/scene/solarsystem/telescopes/jwst/targets/orion.asset +++ b/data/assets/scene/solarsystem/telescopes/jwst/targets/orion.asset @@ -13,9 +13,7 @@ local OrionImage = { Opacity = 1.0, TexturePath = orion.image .. "orion-nebula.png", Tag = { "mission_jwst_target" }, - Description = [[ - Image of the Orion Nebula by Bill Schoening/NOIRLab/NSF/AURA. - ]] + Description = "Image of the Orion Nebula by Bill Schoening/NOIRLab/NSF/AURA." } @@ -33,7 +31,6 @@ asset.export(OrionImage) asset.meta = { Name = "Orion Nebula Image", - Version = "1.0", Description = "Screenspace image of the Orion Nebula", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/telescopes/jwst/targets/orion_image.asset b/data/assets/scene/solarsystem/telescopes/jwst/targets/orion_image.asset index d719b6a388..79ee6c2f8e 100644 --- a/data/assets/scene/solarsystem/telescopes/jwst/targets/orion_image.asset +++ b/data/assets/scene/solarsystem/telescopes/jwst/targets/orion_image.asset @@ -1,4 +1,4 @@ -local image = asset.syncedResource({ +local image = asset.resource({ Name = "Orion Image", Type = "HttpSynchronization", Identifier = "orion_image", @@ -12,7 +12,6 @@ asset.export("image", image) asset.meta = { Name = "Orion Nebula", - Version = "1.0", Description = "Orion Nebula Image", Author = "Bill Schoening/NOIRLab/NSF/AURA", URL = "https://noirlab.edu/public/images/noao-02677/", diff --git a/data/assets/scene/solarsystem/telescopes/jwst/targets/ring.asset b/data/assets/scene/solarsystem/telescopes/jwst/targets/ring.asset index 73049b9427..ee7cd5837f 100644 --- a/data/assets/scene/solarsystem/telescopes/jwst/targets/ring.asset +++ b/data/assets/scene/solarsystem/telescopes/jwst/targets/ring.asset @@ -34,7 +34,6 @@ asset.export(RingImage) asset.meta = { Name = "Ring Nebula Image", - Version = "1.0", Description = "Screenspace image of the Ring Nebula", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/telescopes/jwst/targets/ring_image.asset b/data/assets/scene/solarsystem/telescopes/jwst/targets/ring_image.asset index f2824dead8..4aece4b47f 100644 --- a/data/assets/scene/solarsystem/telescopes/jwst/targets/ring_image.asset +++ b/data/assets/scene/solarsystem/telescopes/jwst/targets/ring_image.asset @@ -1,4 +1,4 @@ -local image = asset.syncedResource({ +local image = asset.resource({ Name = "Ring Nebula Image", Type = "HttpSynchronization", Identifier = "ring_image", @@ -12,7 +12,6 @@ asset.export("image", image) asset.meta = { Name = "Ring Nebula", - Version = "1.0", Description = "Ring Nebula Image", Author = [[ NASA, ESA, C.R. O'Dell (Vanderbilt University), and diff --git a/data/assets/scene/solarsystem/telescopes/jwst/targets/sn1987a.asset b/data/assets/scene/solarsystem/telescopes/jwst/targets/sn1987a.asset index cb7381c607..8228907228 100644 --- a/data/assets/scene/solarsystem/telescopes/jwst/targets/sn1987a.asset +++ b/data/assets/scene/solarsystem/telescopes/jwst/targets/sn1987a.asset @@ -34,7 +34,6 @@ asset.export(SN1987aImage) asset.meta = { Name = "Supernova SN 1987a Image", - Version = "1.0", Description = "Screenspace image of the Supernova SN 1987a", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/telescopes/jwst/targets/sn1987a_image.asset b/data/assets/scene/solarsystem/telescopes/jwst/targets/sn1987a_image.asset index 9816a43368..b87ea56888 100644 --- a/data/assets/scene/solarsystem/telescopes/jwst/targets/sn1987a_image.asset +++ b/data/assets/scene/solarsystem/telescopes/jwst/targets/sn1987a_image.asset @@ -1,4 +1,4 @@ -local image = asset.syncedResource({ +local image = asset.resource({ Name = "Supernova SN 1987a Image", Type = "HttpSynchronization", Identifier = "sn1987a_image", @@ -12,12 +12,8 @@ asset.export("image", image) asset.meta = { Name = "Supernova SN 1987a", - Version = "1.0", Description = "Supernova SN 1987a Image", - Author = [[ - X-ray: NASA/CXC/PSU/S.Park & D.Burrows. - Optical: NASA/STScI/CfA/P.Challis - ]], + Author = "X-ray: NASA/CXC/PSU/S.Park & D.Burrows. Optical: NASA/STScI/CfA/P.Challis", URL = "https://chandra.harvard.edu/photo/2007/sn87a/", License = "https://chandra.harvard.edu/photo/image_use.html" } diff --git a/data/assets/scene/solarsystem/telescopes/jwst/targets/trifid.asset b/data/assets/scene/solarsystem/telescopes/jwst/targets/trifid.asset index 397e50fa07..8bf2080be9 100644 --- a/data/assets/scene/solarsystem/telescopes/jwst/targets/trifid.asset +++ b/data/assets/scene/solarsystem/telescopes/jwst/targets/trifid.asset @@ -33,7 +33,6 @@ asset.export(TrifidImage) asset.meta = { Name = "Trifid Nebula Image", - Version = "1.0", Description = "Screenspace image of the Trifid Nebula", Author = "OpenSpace Team", URL = "http://openspaceproject.com", diff --git a/data/assets/scene/solarsystem/telescopes/jwst/targets/trifid_image.asset b/data/assets/scene/solarsystem/telescopes/jwst/targets/trifid_image.asset index b0a6896142..f3f9e5462e 100644 --- a/data/assets/scene/solarsystem/telescopes/jwst/targets/trifid_image.asset +++ b/data/assets/scene/solarsystem/telescopes/jwst/targets/trifid_image.asset @@ -1,4 +1,4 @@ -local image = asset.syncedResource({ +local image = asset.resource({ Name = "Trifid Nebula Image", Type = "HttpSynchronization", Identifier = "trifid_image", @@ -12,7 +12,6 @@ asset.export("image", image) asset.meta = { Name = "Trifid Nebula", - Version = "1.0", Description = "Trifid Nebula Image", Author = "ESO/Gábor Tóth", URL = "https://www.eso.org/public/images/eso1504g/", diff --git a/data/assets/scene/solarsystem/telescopes/jwst/timelapse.asset b/data/assets/scene/solarsystem/telescopes/jwst/timelapse.asset index ef0d2a4b7b..02ef78313d 100644 --- a/data/assets/scene/solarsystem/telescopes/jwst/timelapse.asset +++ b/data/assets/scene/solarsystem/telescopes/jwst/timelapse.asset @@ -1,6 +1,8 @@ -asset.require("spice/base") -- openspace.time.advancedTime depends on SPICE +asset.require("spice/core") -- openspace.time.advancedTime depends on SPICE asset.require("scene/solarsystem/planets/earth/atmosphere") + + -- Function to advance a time stamp in the given number of days, hours, minutes and -- seconds. returns the new time stamp local function advance(time, days, hours, minutes, seconds) @@ -604,7 +606,7 @@ asset.onInitialize(function() end -- Update the dashboard text - local text = openspace.getPropertyValue("Dashboard.JWSTStateText.Text") + local text = openspace.propertyValue("Dashboard.JWSTStateText.Text") if string.len(text) > 14 then local newText = "" if text:sub(13, 13) == "-" then @@ -646,7 +648,6 @@ end) asset.meta = { Name = "James Webb Space Telescope Timelapse", - Version = "1.1", Description = [[ Scripts that are scheduled to alter the speed of the simulation time so the deployment of the James Webb Space Telescope looks smoother. diff --git a/data/assets/scene/solarsystem/telescopes/jwst/toggle_trail.asset b/data/assets/scene/solarsystem/telescopes/jwst/toggle_trail.asset index 1866639228..36c89c61cc 100644 --- a/data/assets/scene/solarsystem/telescopes/jwst/toggle_trail.asset +++ b/data/assets/scene/solarsystem/telescopes/jwst/toggle_trail.asset @@ -29,9 +29,9 @@ local ToggleTrail = { end else visibility = not ( - openspace.getPropertyValue("Scene." .. launchTrail .. ".Renderable.Enabled") or - openspace.getPropertyValue("Scene." .. cruiseTrail .. ".Renderable.Enabled") or - openspace.getPropertyValue("Scene." .. coRevOrbitTrail .. ".Renderable.Enabled") + openspace.propertyValue("Scene." .. launchTrail .. ".Renderable.Enabled") or + openspace.propertyValue("Scene." .. cruiseTrail .. ".Renderable.Enabled") or + openspace.propertyValue("Scene." .. coRevOrbitTrail .. ".Renderable.Enabled") ) end @@ -53,7 +53,7 @@ local ToggleTrail = { node is currently in focus and only hide JWST trail if it is in focus (as the 'Node') and 2) the transition direction (as 'Approaching' or 'Exiting')]], GuiPath = "/JWST/Events", - IsLocal = true + IsLocal = false } diff --git a/data/assets/scene/solarsystem/telescopes/jwst/trail.asset b/data/assets/scene/solarsystem/telescopes/jwst/trail.asset index bacd2e67cb..928564a9e1 100644 --- a/data/assets/scene/solarsystem/telescopes/jwst/trail.asset +++ b/data/assets/scene/solarsystem/telescopes/jwst/trail.asset @@ -1,21 +1,13 @@ -asset.require("spice/base") -local transforms = asset.require("scene/solarsystem/planets/earth/lagrange_points/l2") +local L2transforms = asset.require("scene/solarsystem/planets/earth/lagrange_points/l2/transforms") +local L2kernels = asset.require("scene/solarsystem/planets/earth/lagrange_points/l2/kernels") local earthTransforms = asset.require("scene/solarsystem/planets/earth/transforms") local sunTransforms = asset.require("scene/solarsystem/sun/transforms") +local kernels = asset.require("./kernels") +local transforms = asset.require("./transforms") +local coreKernels = asset.require("spice/core") -local kernels = asset.syncedResource({ - Name = "JWST Kernel", - Type = "HttpSynchronization", - Identifier = "jwst_kernels", - Version = 2 -}) - - -local LaunchTime = "2021 DEC 25 12:20:00" -local DetachTime = "2021 DEC 25 12:50:00" -local L2orbitInsertionTime = "2022 JAN 25 00:00:00" local EndTime = "2024 JAN 22 00:00:00" -- Trail of JWST relative the Earth Inertial for the first 30 minutes after launch @@ -25,28 +17,26 @@ local JWSTTrailLaunch = { Parent = earthTransforms.EarthIAU.Identifier, TimeFrame = { Type = "TimeFrameInterval", - Start = LaunchTime, - End = DetachTime + Start = transforms.LaunchTime, + End = transforms.DetachTime }, Renderable = { Type = "RenderableTrailTrajectory", Translation = { Type = "SpiceTranslation", Target = 170, -- JWST - Observer = "EARTH", - Frame = "IAU_EARTH" + Observer = coreKernels.ID.Earth, + Frame = coreKernels.Frame.Earth }, Color = { 0.9, 0.9, 0.0 }, - StartTime = LaunchTime, - EndTime = DetachTime, + StartTime = transforms.LaunchTime, + EndTime = transforms.DetachTime, SampleInterval = 60 -- Sample rate of once per minute }, GUI = { Name = "JWST Launch Trail", Path = "/Solar System/Telescopes/JWST/Trails", - Description = [[ - James Webb Space Telescope Launch Trail relative to Earth IAU. - ]] + Description = "James Webb Space Telescope Launch Trail relative to Earth IAU." } } @@ -57,28 +47,26 @@ local JWSTTrailCruise = { Parent = earthTransforms.EarthCenter.Identifier, TimeFrame = { Type = "TimeFrameInterval", - Start = DetachTime, - End = L2orbitInsertionTime + Start = transforms.DetachTime, + End = transforms.L2orbitInsertionTime }, Renderable = { Type = "RenderableTrailTrajectory", Translation = { Type = "SpiceTranslation", - Target = 170, -- JWST - Observer = "EARTH", - Frame = "GALACTIC" + Target = kernels.ID.JWST, + Observer = coreKernels.ID.Earth, + Frame = coreKernels.Frame.Galactic }, Color = { 0.9, 0.9, 0.0 }, - StartTime = DetachTime, - EndTime = L2orbitInsertionTime, + StartTime = transforms.DetachTime, + EndTime = transforms.L2orbitInsertionTime, SampleInterval = 60 -- Sample rate of once per minute }, GUI = { Name = "JWST Cruise Trail", Path = "/Solar System/Telescopes/JWST/Trails", - Description = [[ - James Webb Space Telescope Cruise Trail relative to Earth. - ]] + Description = "James Webb Space Telescope Cruise Trail relative to Earth." } } @@ -87,19 +75,20 @@ local JWSTTrailCruise = { -- This does NOT co-rotate with L2 and gives a saddle look of the trail local JWSTTrailOrbit = { Identifier = "JWSTTrailOrbit", - Parent = transforms.L2Position.Identifier, + Parent = L2transforms.L2Position.Identifier, TimeFrame = { Type = "TimeFrameInterval", - Start = L2orbitInsertionTime, + Start = transforms.L2orbitInsertionTime, End = EndTime }, Renderable = { Type = "RenderableTrailOrbit", + Enabled = asset.enabled, Translation = { Type = "SpiceTranslation", - Target = 170, -- JWST - Observer = 392, -- L2 - Frame = "GALACTIC" + Target = kernels.ID.JWST, + Observer = L2kernels.ID.L2, + Frame = coreKernels.Frame.Galactic }, Color = { 0.863, 0.0, 0.902 }, Period = 182.621099, -- About 6 months @@ -108,9 +97,7 @@ local JWSTTrailOrbit = { GUI = { Name = "JWST Orbit Trail", Path = "/Solar System/Telescopes/JWST/Trails", - Description = [[ - James Webb Space Telescope Orbit Trail relative to L2. - ]] + Description = "James Webb Space Telescope Orbit Trail relative to L2." } } @@ -118,18 +105,19 @@ local JWSTTrailOrbit = { -- This gives the trail a look of a wheel going along L2 around the Sun local JWSTTrailCoRevOrbit = { Identifier = "JWSTTrailCoRevOrbit", - Parent = transforms.L2CoRevFrame.Identifier, + Parent = L2transforms.L2CoRevFrame.Identifier, TimeFrame = { Type = "TimeFrameInterval", - Start = L2orbitInsertionTime, + Start = transforms.L2orbitInsertionTime, End = EndTime }, Renderable = { Type = "RenderableTrailOrbit", + Enabled = asset.enabled, Translation = { Type = "SpiceTranslation", - Target = 170, -- JWST - Observer = 392, -- L2 + Target = kernels.ID.JWST, + Observer = L2kernels.ID.L2, Frame = "L2_COREV" }, Color = { 1.0, 0.663, 0.157 }, @@ -139,9 +127,7 @@ local JWSTTrailCoRevOrbit = { GUI = { Name = "JWST L2 Co-revolving Orbit Trail", Path = "/Solar System/Telescopes/JWST/Trails", - Description = [[ - James Webb Space Telescope Orbit Trail that Co-revolves with L2. - ]] + Description = "James Webb Space Telescope Orbit Trail that Co-revolves with L2." } } @@ -150,16 +136,17 @@ local JWSTSunTrail = { Parent = sunTransforms.SolarSystemBarycenter.Identifier, TimeFrame = { Type = "TimeFrameInterval", - Start = L2orbitInsertionTime, + Start = transforms.L2orbitInsertionTime, End = EndTime }, Renderable = { Type = "RenderableTrailOrbit", + Enabled = asset.enabled, Translation = { Type = "SpiceTranslation", - Target = 170, -- JWST - Observer = "SSB", - Frame = "GALACTIC" + Target = kernels.ID.JWST, + Observer = coreKernels.ID.SolarSystemBarycenter, + Frame = coreKernels.Frame.Galactic }, Color = { 0.0, 0.9, 0.9 }, Period = 365.242, @@ -168,16 +155,12 @@ local JWSTSunTrail = { GUI = { Name = "JWST Sun Trail", Path = "/Solar System/Telescopes/JWST/Trails", - Description = [[ - James Webb Space Telescope Trail relative to the Sun. - ]] + Description = "James Webb Space Telescope Trail relative to the Sun." } } asset.onInitialize(function() - openspace.spice.loadKernel(kernels .. "webb.bsp") - openspace.addSceneGraphNode(JWSTTrailLaunch) openspace.addSceneGraphNode(JWSTTrailCruise) openspace.addSceneGraphNode(JWSTTrailOrbit) @@ -191,8 +174,6 @@ asset.onDeinitialize(function() openspace.removeSceneGraphNode(JWSTTrailOrbit) openspace.removeSceneGraphNode(JWSTTrailCruise) openspace.removeSceneGraphNode(JWSTTrailLaunch) - - openspace.spice.unloadKernel(kernels .. "webb.bsp") end) asset.export(JWSTTrailLaunch) @@ -205,7 +186,6 @@ asset.export(JWSTSunTrail) asset.meta = { Name = "James Webb Space Telescope Trails", - Version = "1.0", Description = [[ Trail of James Webb Space Telescope in respect to Earth, L2 and the Sun ]], diff --git a/data/assets/scene/solarsystem/telescopes/jwst/transforms.asset b/data/assets/scene/solarsystem/telescopes/jwst/transforms.asset index 421a9a91f5..56fa1265b7 100644 --- a/data/assets/scene/solarsystem/telescopes/jwst/transforms.asset +++ b/data/assets/scene/solarsystem/telescopes/jwst/transforms.asset @@ -1,18 +1,12 @@ -asset.require("spice/base") -asset.require("scene/solarsystem/planets/earth/lagrange_points/l2") local earthTransforms = asset.require("scene/solarsystem/planets/earth/transforms") local sunTransforms = asset.require("scene/solarsystem/sun/transforms") +local l2kernels = asset.require("scene/solarsystem/planets/earth/lagrange_points/l2/kernels") +local l2transforms = asset.require("scene/solarsystem/planets/earth/lagrange_points/l2/transforms") +local kernels = asset.require("./kernels") +local coreKernels = asset.require("spice/core") -local kernels = asset.syncedResource({ - Name = "JWST Kernel", - Type = "HttpSynchronization", - Identifier = "jwst_kernels", - Version = 2 -}) - - local LaunchTime = "2021 DEC 25 12:20:00" local DetachTime = "2021 DEC 25 12:50:00" local L2orbitInsertionTime = "2022 JAN 25 00:00:00" @@ -27,21 +21,21 @@ local JWSTPosition = { Keyframes = { [LaunchTime] = { Type = "SpiceTranslation", - Target = 170, -- JWST - Observer = "EARTH", - Frame = "IAU_EARTH" + Target = kernels.ID.JWST, + Observer = coreKernels.ID.Earth, + Frame = coreKernels.Frame.Earth }, [DetachTime] = { Type = "SpiceTranslation", - Target = 170, -- JWST - Observer = "EARTH", - Frame = "GALACTIC" + Target = kernels.ID.JWST, + Observer = coreKernels.ID.Earth, + Frame = coreKernels.Frame.Galactic }, [L2orbitInsertionTime] = { Type = "SpiceTranslation", - Target = 170, -- JWST - Observer = 392, -- L2 - Frame = "GALACTIC" + Target = kernels.ID.JWST, + Observer = l2kernels.ID.L2, + Frame = coreKernels.Frame.Galactic } } } @@ -49,10 +43,7 @@ local JWSTPosition = { GUI = { Name = "JWST Position", Path = "/Solar System/Telescopes/JWST", - Hidden = true, - Description = [[ - James Webb Space Telescope Position relative to Earth. - ]] + Hidden = true } } @@ -72,33 +63,28 @@ local JWSTRotation = { GUI = { Name = "JWST Rotation", Path = "/Solar System/Telescopes/JWST", - Hidden = true, - Description = [[ - James Webb Space Telescope Rotation so the sunshield always faces the Sun. - ]] + Hidden = true } } -- Reparent the JWSTPosition node when the data changes asset.onInitialize(function() - openspace.spice.loadKernel(kernels .. "webb.bsp") - openspace.addSceneGraphNode(JWSTPosition) openspace.addSceneGraphNode(JWSTRotation) -- Set correct parent during run-time openspace.scriptScheduler.loadScheduledScript( DetachTime, - [[openspace.setParent("JWSTPosition", "EarthCenter")]], - [[openspace.setParent("JWSTPosition", "EarthIAU")]], + [[openspace.setParent("JWSTPosition", "]] .. earthTransforms.EarthCenter.Identifier .. [[")]], + [[openspace.setParent("JWSTPosition", "]] .. earthTransforms.EarthIAU.Identifier .. [[")]], "", 1 -- Not default group, never clear this script ) openspace.scriptScheduler.loadScheduledScript( L2orbitInsertionTime, - [[openspace.setParent("JWSTPosition", "L2")]], - [[openspace.setParent("JWSTPosition", "EarthCenter")]], + [[openspace.setParent("JWSTPosition", "]] .. l2transforms.L2Position.Identifier .. [[")]], + [[openspace.setParent("JWSTPosition", "]] .. earthTransforms.EarthCenter.Identifier .. [[")]], "", 1 -- Not default group, never clear this script ) @@ -106,11 +92,11 @@ asset.onInitialize(function() -- Set correct parent at the start local now = openspace.time.currentTime() if now < openspace.time.convertTime(DetachTime) then - openspace.setParent("JWSTPosition", "EarthIAU") + openspace.setParent("JWSTPosition", earthTransforms.EarthIAU.Identifier) elseif now > openspace.time.convertTime(L2orbitInsertionTime) then - openspace.setParent("JWSTPosition", "L2") + openspace.setParent("JWSTPosition", l2transforms.L2Position.Identifier) else - openspace.setParent("JWSTPosition", "EarthCenter") + openspace.setParent("JWSTPosition", earthTransforms.EarthCenter.Identifier) end end) @@ -118,10 +104,11 @@ asset.onDeinitialize(function() openspace.removeSceneGraphNode(JWSTRotation) openspace.removeSceneGraphNode(JWSTPosition) openspace.scriptScheduler.clear(1) - - openspace.spice.unloadKernel(kernels .. "webb.bsp") end) +asset.export("LaunchTime", LaunchTime) +asset.export("DetachTime", DetachTime) +asset.export("L2orbitInsertionTime", L2orbitInsertionTime) asset.export(JWSTPosition) asset.export(JWSTRotation) @@ -129,7 +116,6 @@ asset.export(JWSTRotation) asset.meta = { Name = "James Webb Space Telescope Transforms", - Version = "1.0", Description = [[ JWST transforms: JWST position relative to Earth and JWST rotation, a fixed rotation so sunshield always points toward the Sun. diff --git a/data/assets/scene/solarsystem/telescopes/jwst/viewingband.asset b/data/assets/scene/solarsystem/telescopes/jwst/viewingband.asset new file mode 100644 index 0000000000..9177158b10 --- /dev/null +++ b/data/assets/scene/solarsystem/telescopes/jwst/viewingband.asset @@ -0,0 +1,70 @@ +local sunTransforms = asset.require("scene/solarsystem/sun/transforms") +local transforms = asset.require("./transforms") + + + +local band = asset.resource({ + Name = "JWST band texture", + Type = "HttpSynchronization", + Identifier = "jwst_band_texture", + Version = 1 +}) + + +local JWSTBand = { + Identifier = "JWSTBand", + Parent = transforms.JWSTPosition.Identifier, + TimeFrame = { + Type = "TimeFrameInterval", + Start = transforms.LaunchTime + }, + Transform = { + Rotation = { + Type = "FixedRotation", + Attached = "JWSTBand", + XAxis = { 1.0, 0.0, 0.0 }, + XAxisOrthogonal = true, + ZAxis = sunTransforms.SolarSystemBarycenter.Identifier + } + }, + Renderable = { + Type = "RenderableSphereImageLocal", + Enabled = asset.enabled, + Texture = band .. "JWST-band.png", + Size = 9.2E15, + Segments = 50, + DisableFadeInOut = true, + Orientation = "Inside", + Opacity = 0.05 + }, + Tag = { "mission_jwst_fov" }, + GUI = { + Name = "JWST Safe Viewing Band", + Path = "/Solar System/Telescopes/JWST", + Description = [[ + The safe viewing band for the James Webb Space Telescope at its current position. + ]] + } +} + + +asset.onInitialize(function() + openspace.addSceneGraphNode(JWSTBand) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(JWSTBand) +end) + +asset.export(JWSTBand) + + +asset.meta = { + Name = "JWST Safe Viewing Band", + Description = [[ + The safe viewing band for the James Webb Space Telescope at its current position. + ]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/spice/base.asset b/data/assets/spice/base.asset deleted file mode 100644 index 31fd1fef3a..0000000000 --- a/data/assets/spice/base.asset +++ /dev/null @@ -1,52 +0,0 @@ -local lsk = asset.syncedResource({ - Name = "General LSK Kernels", - Type = "HttpSynchronization", - Identifier = "general_lsk", - Version = 1 -}) - -local pck = asset.syncedResource({ - Name = "General PCK Kernels", - Type = "HttpSynchronization", - Identifier = "general_pck", - Version = 1 -}) - -local spk = asset.syncedResource({ - Name = "General SPK Kernels", - Type = "HttpSynchronization", - Identifier = "general_spk", - Version = 2 -}) - - -local kernels = { - lsk .. "naif0012.tls", - pck .. "pck00011.tpc", - spk .. "de430.bsp" -} - - -asset.onInitialize(function() - openspace.spice.loadKernel(lsk .. "naif0012.tls") - openspace.spice.loadKernel(pck .. "pck00011.tpc") - openspace.spice.loadKernel(spk .. "de430.bsp") -end) - -asset.onDeinitialize(function() - openspace.spice.unloadKernel(spk .. "de430.bsp") - openspace.spice.unloadKernel(pck .. "pck00011.tpc") - openspace.spice.unloadKernel(lsk .. "naif0012.tls") -end) - - - -asset.meta = { - Name = "SPICE Base", - Version = "1.1", - Description = [[This asset contains the spice base kernels necessary for any space - application. Includes positions for Solar System bodies from 1850 to 2150]], - Author = "OpenSpace Team", - URL = "https://naif.jpl.nasa.gov/naif/data_generic.html", - License = "NASA" -} diff --git a/data/assets/spice/core.asset b/data/assets/spice/core.asset new file mode 100644 index 0000000000..e40cd083ac --- /dev/null +++ b/data/assets/spice/core.asset @@ -0,0 +1,190 @@ +local pck = asset.resource({ + Name = "General PCK Kernels", + Type = "HttpSynchronization", + Identifier = "general_pck", + Version = 1 +}) + +local spk = asset.resource({ + Name = "General SPK Kernels", + Type = "HttpSynchronization", + Identifier = "general_spk", + Version = 2 +}) + + +-- The following IDs are defined in the de430 kernel provided by the `generic_spk` package +local ID = { + Earth = "EARTH", + EarthBarycenter = "EARTH BARYCENTER", + Mars = "MARS", + MarsBarycenter = "MARS BARYCENTER", + Mercury = "MERCURY", + MercuryBarycenter = "MERCURY BARYCENTER", + Moon = "MOON", + Neptune = "NEPTUNE", + NeptuneBarycenter = "NEPTUNE BARYCENTER", + Jupiter = "JUPITER", + JupiterBarycenter = "JUPITER BARYCENTER", + Pluto = "PLUTO", + PlutoBarycenter = "PLUTO BARYCENTER", + Saturn = "SATURN", + SaturnBarycenter = "SATURN BARYCENTER", + SolarSystemBarycenter = "SOLAR SYSTEM BARYCENTER", + Sun = "SUN", + Uranus = "URANUS", + UranusBarycenter = "URANUS BARYCENTER", + Venus = "VENUS", + VenusBarycenter = "VENUS BARYCENTER", +} + +-- The following frames are provided as built-in reference frames by SPICE itself. See +-- https://naif.jpl.nasa.gov/pub/naif/toolkit_docs/C/req/frames.html +-- Appendix: "Built in" Inertial Reference Frames +-- Appendix: "Built in" PCK-Based IAU Body-Fixed Reference Frames +-- Appendix: High Precision Earth Fixed Frames +-- for more information +local Frame = { + J2000 = "J2000", + EclipJ2000 = "ECLIPJ2000", + Galactic = "GALACTIC", + + Earth = "IAU_EARTH", + ITRF93 = "ITRF93", + EarthFixed = "EARTH_FIXED", + Mars = "IAU_MARS", + Mercury = "IAU_MERCURY", + Moon = "IAU_MOON", + Neptune = "IAU_NEPTUNE", + Jupiter = "IAU_JUPITER", + Pluto = "IAU_PLUTO", + Saturn = "IAU_SATURN", + Sun = "IAU_SUN", + Uranus = "IAU_URANUS", + Venus = "IAU_VENUS", + + ["52Europa"] = "IAU_52_EUROPA", + Adrastea = "IAU_ADRASTEA", + Amalthea = "IAU_AMALTHEA", + Ananke = "IAU_ANANKE", + Ariel = "IAU_ARIEL", + Arrokoth = "IAU_ARROKOTH", + Atlas = "IAU_ATLAS", + Belinda = "IAU_BELINDA", + Bennu = "IAU_BENNU", + Bianca = "IAU_BIANCA", + Borrelly = "IAU_BORRELLY", + Callirrhoe = "IAU_CALLIRRHOE", + Callisto = "IAU_CALLISTO", + Calypso = "IAU_CALYPSO", + Carme = "IAU_CARME", + Ceres = "IAU_CERES", + Chaldene = "IAU_CHALDENE", + Charon = "IAU_CHARON", + Cordelia = "IAU_CORDELIA", + Cressida = "IAU_CRESSIDA", + Davida = "IAU_DAVIDA", + Deimos = "IAU_DEIMOS", + Desdemona = "IAU_DESDEMONA", + Despina = "IAU_DESPINA", + Didymos = "IAU_DIDYMOS", + Dimorphos = "IAU_DIMORPHOS", + Dione = "IAU_DIONE", + DonaldJohanson = "IAU_DONALDJOHANSON", + Elara = "IAU_ELARA", + Enceladus = "IAU_ENCELADUS", + Epimetheus = "IAU_EPIMETHEUS", + Erinome = "IAU_ERINOME", + Eros = "IAU_EROS", + Europa = "IAU_EUROPA", + Eurybates = "IAU_EURYBATES", + Galatea = "IAU_GALATEA", + Ganymede = "IAU_GANYMEDE", + Gaspra = "IAU_GASPRA", + Harpalyke = "IAU_HARPALYKE", + Helene = "IAU_HELENE", + Himalia = "IAU_HIMALIA", + Hydra = "IAU_HYDRA", + Hyperion = "IAU_HYPERION", + Iapetus = "IAU_IAPETUS", + Ida = "IAU_IDA", + Io = "IAU_IO", + Iocaste = "IAU_IOCASTE", + Isonoe = "IAU_ISONOE", + Itokawa = "IAU_ITOKAWA", + Janus = "IAU_JANUS", + Juliet = "IAU_JULIET", + Kalyke = "IAU_KALYKE", + Larissa = "IAU_LARISSA", + Leda = "IAU_LEDA", + Leucus = "IAU_LEUCUS", + Lutetia = "IAU_LUTETIA", + Lysithea = "IAU_LYSITHEA", + Magaclite = "IAU_MAGACLITE", + Menoetius = "IAU_MENOETIUS", + Metis = "IAU_METIS", + Mimas = "IAU_MIMAS", + Miranda = "IAU_MIRANDA", + Naiad = "IAU_NAIAD", + Nereid = "IAU_NEREID", + Nix = "IAU_NIX", + Oberon = "IAU_OBERON", + Ophelia = "IAU_OPHELIA", + Orus = "IAU_ORUS", + Pallas = "IAU_PALLAS", + Pan = "IAU_PAN", + Pandora = "IAU_PANDORA", + Pasiphae = "IAU_PASIPHAE", + Patroclus = "IAU_PATROCLUS", + Phobos = "IAU_PHOBOS", + Phoebe = "IAU_PHOEBE", + Polymele = "IAU_POLYMELE", + Portia = "IAU_PORTIA", + Praxidike = "IAU_PRAXIDIKE", + Prometheus = "IAU_PROMETHEUS", + Proteus = "IAU_PROTEUS", + Puck = "IAU_PUCK", + Queta = "IAU_QUETA", + Rhea = "IAU_RHEA", + Rosalind = "IAU_ROSALIND", + Ryugu = "IAU_RYUGU", + Sinope = "IAU_SINOPE", + Steins = "IAU_STEINS", + Taygete = "IAU_TAYGETE", + Telesto = "IAU_TELESTO", + Tempel1 = "IAU_TEMPEL_1", + Tethys = "IAU_TETHYS", + Thalassa = "IAU_THALASSA", + Thebe = "IAU_THEBE", + Themisto = "IAU_THEMISTO", + Titan = "IAU_TITAN", + Titania = "IAU_TITANIA", + Triton = "IAU_TRITON", + Umbriel = "IAU_UMBRIEL", + Vesta = "IAU_VESTA" +} + + +asset.onInitialize(function() + openspace.spice.loadKernel(pck .. "pck00011.tpc") + openspace.spice.loadKernel(spk .. "de430.bsp") +end) + +asset.onDeinitialize(function() + openspace.spice.unloadKernel(spk .. "de430.bsp") + openspace.spice.unloadKernel(pck .. "pck00011.tpc") +end) + +asset.export("ID", ID) +asset.export("Frame", Frame) + + + +asset.meta = { + Name = "SPICE Base", + Description = [[This asset contains the spice base kernels necessary for any space + application. Includes positions for Solar System bodies from 1850 to 2150]], + Author = "OpenSpace Team", + URL = "https://naif.jpl.nasa.gov/naif/data_generic.html", + License = "NASA" +} diff --git a/data/assets/util/add_marker.asset b/data/assets/util/add_marker.asset index d7424f417a..f287a79b22 100644 --- a/data/assets/util/add_marker.asset +++ b/data/assets/util/add_marker.asset @@ -1,4 +1,4 @@ -local icons = asset.syncedResource({ +local icons = asset.resource({ Name = "Icons", Type = "HttpSynchronization", Identifier = "icons", diff --git a/data/assets/util/constellations_helper.asset b/data/assets/util/constellations_helper.asset index 8e3b8e7627..69975b7a99 100644 --- a/data/assets/util/constellations_helper.asset +++ b/data/assets/util/constellations_helper.asset @@ -1,4 +1,4 @@ -local data = asset.syncedResource({ +local data = asset.resource({ Name = "Constellation Files", Type = "HttpSynchronization", Identifier = "digitaluniverse_constellations_data", @@ -11,14 +11,10 @@ local data = asset.syncedResource({ -- If the file does not exist or if a match could not be found, it returns nil local function findFullName(abbreviation) local namesFile = data .. "constellations.dat" - local file = io.open(namesFile, "r") local fullName = "" - if file == nil then - return nil - end - - for line in io.lines(namesFile) do + local lines = openspace.readFileLines(namesFile) + for _, line in ipairs(lines) do -- Try and find the identifier in the file local index, length = line:find(abbreviation) if index ~= nil and index < 4 then @@ -37,7 +33,6 @@ local function findFullName(abbreviation) end end - file:close() if fullName == "" then openspace.printError( "Error when calling function 'findFullName' in file 'util/constellations_helper': " .. diff --git a/data/assets/util/debug_helper.asset b/data/assets/util/debug_helper.asset index 2c9d94db2d..2c5c242d3f 100644 --- a/data/assets/util/debug_helper.asset +++ b/data/assets/util/debug_helper.asset @@ -123,6 +123,7 @@ local function registerCartesianAxes(axesAsset, specification) registerNode(axesAsset, addCartesianAxes, generateAxesIdentifier, specification) end + asset.export("addGrid", addGrid) asset.export("registerGrid", registerGrid) diff --git a/data/assets/util/default_colormaps.asset b/data/assets/util/default_colormaps.asset new file mode 100644 index 0000000000..50057832c8 --- /dev/null +++ b/data/assets/util/default_colormaps.asset @@ -0,0 +1,198 @@ +-- For detailed explanations about the categories and the color maps, please refer to +-- source page from Matplotlib +-- https://matplotlib.org/stable/users/explain/colors/colormaps.html + + +-- Perceptually Uniform Sequental colormaps + +local uniform = asset.resource({ + Name = "Perceptually Uniform Color Maps", + Type = "HttpSynchronization", + Identifier = "default_colormaps_uniform", + Version = 1 +}) + +local Uniform = { + Viridis = uniform .. "viridis.cmap", + Plasma = uniform .. "plasma.cmap", + Inferno = uniform .. "inferno.cmap", + Magma = uniform .. "magma.cmap", + Cividis = uniform .. "cividis.cmap" +} +asset.export("Uniform", Uniform) + + +-- Sequential maps, where the lightness value increases monotonically through the colormaps + +local sequential = asset.resource({ + Name = "Sequential Color Maps", + Type = "HttpSynchronization", + Identifier = "default_colormaps_sequential", + Version = 1 +}) + +local Sequential = { + Greys = sequential .. "Greys.cmap", + Purples = sequential .. "Purples.cmap", + Blues = sequential .. "Blues.cmap", + Greens = sequential .. "Greens.cmap", + Oranges = sequential .. "Oranges.cmap", + Reds = sequential .. "Reds.cmap", + YlOrBr = sequential .. "YlOrBr.cmap", + YlOrRd = sequential .. "YlOrRd.cmap", + OrRd = sequential .. "OrRd.cmap", + PuRd = sequential .. "PuRd.cmap", + RdPu = sequential .. "RdPu.cmap", + BuPu = sequential .. "BuPu.cmap", + GnBu = sequential .. "GnBu.cmap", + PuBu = sequential .. "PuBu.cmap", + YlGnBu = sequential .. "YlGnBu.cmap", + PuBuGn = sequential .. "PuBuGn.cmap", + BuGn = sequential .. "BuGn.cmap", + YlGn = sequential .. "YlGn.cmap" +} +asset.export("Sequential", Sequential) + + +-- Sequential color maps where the lightness might plateu or go both up or down + +local sequential2 = asset.resource({ + Name = "Sequential2 Color Maps", + Type = "HttpSynchronization", + Identifier = "default_colormaps_sequential2", + Version = 1 +}) + +local Sequential2 = { + Binary = sequential2 .. "binary.cmap", + Gist_yarg = sequential2 .. "gist_yarg.cmap", + Gist_gray = sequential2 .. "gist_gray.cmap", + Gray = sequential2 .. "gray.cmap", + Bone = sequential2 .. "bone.cmap", + Pink = sequential2 .. "pink.cmap", + Spring = sequential2 .. "spring.cmap", + Summer = sequential2 .. "summer.cmap", + Autumn = sequential2 .. "autumn.cmap", + Winter = sequential2 .. "winter.cmap", + Cool = sequential2 .. "cool.cmap", + Wistia = sequential2 .. "Wistia.cmap", + Hot = sequential2 .. "hot.cmap", + Afmhot = sequential2 .. "afmhot.cmap", + Gist_heat = sequential2 .. "gist_heat.cmap", + Copper = sequential2 .. "copper.cmap" +} +asset.export("Sequential2", Sequential2) + + +-- Diverging maps, with lightness monotonically increasing up to a maximum, +-- followed by monotonically decreasing + +local diverging = asset.resource({ + Name = "Diverging Color Maps", + Type = "HttpSynchronization", + Identifier = "default_colormaps_diverging", + Version = 1 +}) + +local Diverging = { + PiYG = diverging .. "PiYG.cmap", + PRGn = diverging .. "PRGn.cmap", + BrBG = diverging .. "BrBG.cmap", + PuOr = diverging .. "PuOr.cmap", + RdGy = diverging .. "RdGy.cmap", + RdBu = diverging .. "RdBu.cmap", + RdYlBu = diverging .. "RdYlBu.cmap", + RdYlGn = diverging .. "RdYlGn.cmap", + Spectral = diverging .. "Spectral.cmap", + Coolwarm = diverging .. "coolwarm.cmap", + Bwr = diverging .. "bwr.cmap", + Seismic = diverging .. "seismic.cmap" +} +asset.export("Diverging", Diverging) + + +-- Cyclic colormaps, that start and end on the same color, and meet a symmetric center +-- point in the middle + +local cyclic = asset.resource({ + Name = "Cyclic Color Maps", + Type = "HttpSynchronization", + Identifier = "default_colormaps_cyclic", + Version = 1 +}) + +local Cyclic = { + Twilight = cyclic .. "twilight.cmap", + Twilight_shifted = cyclic .. "twilight_shifted.cmap", + Hsv = cyclic .. "hsv.cmap" +} +asset.export("Cyclic", Cyclic) + + +-- Qualitative colormaps + +local qualitative = asset.resource({ + Name = "Qualitative Color Maps", + Type = "HttpSynchronization", + Identifier = "default_colormaps_qualitative", + Version = 1 +}) + +local Qualitative = { + Pastel1 = qualitative .. "Pastel1.cmap", + Pastel2 = qualitative .. "Pastel2.cmap", + Paired = qualitative .. "Paired.cmap", + Accent = qualitative .. "Accent.cmap", + Dark2 = qualitative .. "Dark2.cmap", + Set1 = qualitative .. "Set1.cmap", + Set2 = qualitative .. "Set2.cmap", + Set3 = qualitative .. "Set3.cmap", + Tab10 = qualitative .. "tab10.cmap", + Tab20 = qualitative .. "tab20.cmap", + Tab20b = qualitative .. "tab20b.cmap", + Tab20c = qualitative .. "tab20c.cmap" +} +asset.export("Qualitative", Qualitative) + + +-- Miscellaneous colormaps + +local misc = asset.resource({ + Name = "Miscellaneous Color Maps", + Type = "HttpSynchronization", + Identifier = "default_colormaps_misc", + Version = 1 +}) + +local Misc = { + Flag = misc .. "flag.cmap", + Prism = misc .. "prism.cmap", + Ocean = misc .. "ocean.cmap", + Gist_earth = misc .. "gist_earth.cmap", + Terrain = misc .. "terrain.cmap", + Gist_stern = misc .. "gist_stern.cmap", + Gnuplot = misc .. "gnuplot.cmap", + Gnuplot2 = misc .. "gnuplot2.cmap", + CMRmap = misc .. "CMRmap.cmap", + Cubehelix = misc .. "cubehelix.cmap", + Brg = misc .. "brg.cmap", + Gist_rainbow = misc .. "gist_rainbow.cmap", + Rainbow = misc .. "rainbow.cmap", + Jet = misc .. "jet.cmap", + Turbo = misc .. "turbo.cmap", + Nipy_spectral = misc .. "nipy_spectral.cmap", + Gist_ncar = misc .. "gist_ncar.cmap" +} +asset.export("Misc", Misc) + + + +asset.meta = { + Name = "Default Color Maps", + Description = [[Load a set of default color maps that can be used in other assets. The + color maps are created and categorized based on the ones in Matplotlib. + https://matplotlib.org/stable/users/explain/colors/colormaps.html]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/util/dpiscaling.asset b/data/assets/util/dpiscaling.asset index d460088092..ee64420fed 100644 --- a/data/assets/util/dpiscaling.asset +++ b/data/assets/util/dpiscaling.asset @@ -6,19 +6,19 @@ asset.onInitialize(function() if openspace.modules.isLoaded("CefWebGui") then openspace.setPropertyValueSingle( "Modules.CefWebGui.GuiScale", - openspace.getPropertyValue("Modules.CefWebGui.GuiScale") * scale + openspace.propertyValue("Modules.CefWebGui.GuiScale") * scale ) end - local dashboards = openspace.getProperty("Dashboard.*.FontSize") + local dashboards = openspace.property("Dashboard.*.FontSize") for _, v in ipairs(dashboards) do openspace.setPropertyValueSingle( v, - openspace.getPropertyValue(v) * scale + openspace.propertyValue(v) * scale ) end - local offset = openspace.getPropertyValue("Dashboard.StartPositionOffset") + local offset = openspace.propertyValue("Dashboard.StartPositionOffset") openspace.setPropertyValueSingle( "Dashboard.StartPositionOffset", { offset[1] * scale, offset[2] * scale } @@ -29,7 +29,6 @@ end) asset.meta = { Name = "DPI Scaling", - Version = "1.0", Description = [[Retrieves the DPI scaling from the operating system and applies it to a few selected places to make them scale better on "large resolution but small size" monitors]], diff --git a/data/assets/util/joysticks/any-joystick.asset b/data/assets/util/joysticks/any-joystick.asset index c159d8e859..9e9ef66a9e 100644 --- a/data/assets/util/joysticks/any-joystick.asset +++ b/data/assets/util/joysticks/any-joystick.asset @@ -13,6 +13,8 @@ local function addJoystickAsset(joystick) openspace.asset.add("./util/joysticks/xbox") elseif joystick == "Wireless Xbox Controller" then openspace.asset.add("./util/joysticks/xbox-wireless") + elseif joystick == "Microsoft X-Box 360 pad" then + openspace.asset.add("./util/joysticks/microsoft-xbox-360-pad") elseif joystick == "SpaceNavigator" then openspace.asset.add("./util/joysticks/space-mouse-compact") elseif joystick == "SpaceMouse Enterprise" then @@ -74,3 +76,15 @@ asset.onDeinitialize(function() openspace.asset.remove("./util/joysticks/space-mouse-enterprise") end end) + + + +asset.meta = { + Name = "Joystick controller: Any", + Description = [[ + Checks the name on the connected controllers and adds the cooresponding joystick asset + ]], + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/util/joysticks/joystick_helper.asset b/data/assets/util/joysticks/joystick_helper.asset index c21ebe58b9..1bdf148243 100644 --- a/data/assets/util/joysticks/joystick_helper.asset +++ b/data/assets/util/joysticks/joystick_helper.asset @@ -9,7 +9,7 @@ local function bindLocalRoll(name, axis) -- We only want to store the current state in the first mode that is enabled, otherwise we will overwrite the backup if not Joystick.State.IsInRollMode then -- Save current axis state - Joystick.State.Axis.Type, Joystick.State.Axis.Inverted, Joystick.State.Axis.JoystickType, Joystick.State.Axis.Sticky, Joystick.State.Axis.Flip, Joystick.State.Axis.Sensitivity, Joystick.State.Axis.PropertyUri, Joystick.State.Axis.MinValue, Joystick.State.Axis.MaxValue, Joystick.State.Axis.IsRemote = openspace.navigation.joystickAxis("]] .. name .. "\", " .. axis .. [[) + Joystick.State.Axis = openspace.navigation.joystickAxis("]] .. name .. "\", " .. axis .. [[) end -- Set new axis state @@ -23,7 +23,7 @@ local function bindGlobalRoll(name, axis) -- We only want to store the current state in the first mode that is enabled, otherwise we will overwrite the backup if not Joystick.State.IsInRollMode then -- Save current axis state - Joystick.State.Axis.Type, Joystick.State.Axis.Inverted, Joystick.State.Axis.JoystickType, Joystick.State.Axis.Sticky, Joystick.State.Axis.Flip, Joystick.State.Axis.Sensitivity, Joystick.State.Axis.PropertyUri, Joystick.State.Axis.MinValue, Joystick.State.Axis.MaxValue, Joystick.State.Axis.IsRemote = openspace.navigation.joystickAxis("]] .. name .. "\", " .. axis .. [[) + Joystick.State.Axis = openspace.navigation.joystickAxis("]] .. name .. "\", " .. axis .. [[) end -- Set new axis state @@ -35,7 +35,7 @@ end local function permaBindLocalRoll(name, axis) return [[ -- Save current axis state - Joystick.State.Axis.Type, Joystick.State.Axis.Inverted, Joystick.State.Axis.JoystickType, Joystick.State.Axis.Sticky, Joystick.State.Axis.Flip, Joystick.State.Axis.Sensitivity, Joystick.State.Axis.PropertyUri, Joystick.State.Axis.MinValue, Joystick.State.Axis.MaxValue, Joystick.State.Axis.IsRemote = openspace.navigation.joystickAxis("]] .. name .. "\", " .. axis .. [[) + Joystick.State.Axis = openspace.navigation.joystickAxis("]] .. name .. "\", " .. axis .. [[) -- Set new axis state openspace.navigation.bindJoystickAxis("]] .. name .. "\", " .. axis .. [[, "LocalRoll", Joystick.State.Axis.Inverted, Joystick.State.Axis.JoystickType, Joystick.State.Axis.Sticky, Joystick.State.Axis.Flip, Joystick.State.Axis.Sensitivity) @@ -45,7 +45,7 @@ end local function permaBindGlobalRoll(name, axis) return [[ -- Save current axis state - Joystick.State.Axis.Type, Joystick.State.Axis.Inverted, Joystick.State.Axis.JoystickType, Joystick.State.Axis.Sticky, Joystick.State.Axis.Flip, Joystick.State.Axis.Sensitivity, Joystick.State.Axis.PropertyUri, Joystick.State.Axis.MinValue, Joystick.State.Axis.MaxValue, Joystick.State.Axis.IsRemote = openspace.navigation.joystickAxis("]] .. name .. "\", " .. axis .. [[) + Joystick.State.Axis = openspace.navigation.joystickAxis("]] .. name .. "\", " .. axis .. [[) -- Set new axis state openspace.navigation.bindJoystickAxis("]] .. name .. "\", " .. axis .. [[, "GlobalRoll", Joystick.State.Axis.Inverted, Joystick.State.Axis.JoystickType, Joystick.State.Axis.Sticky, Joystick.State.Axis.Flip, Joystick.State.Axis.Sensitivity) diff --git a/data/assets/util/joysticks/microsoft-xbox-360-pad.asset b/data/assets/util/joysticks/microsoft-xbox-360-pad.asset new file mode 100644 index 0000000000..528c6b18f9 --- /dev/null +++ b/data/assets/util/joysticks/microsoft-xbox-360-pad.asset @@ -0,0 +1,221 @@ +local propertyHelper = asset.require("../property_helper") +local joystickHelper = asset.require("./joystick_helper") + + + +-- Allowed values for the third parameter of bindJoystickAxis: +-- "None" +-- "Orbit X" +-- "Orbit Y" +-- "Zoom" -- both in and out +-- "Zoom In" +-- "Zoom Out" +-- "LocalRoll" +-- "GlobalRoll" +-- "Pan X" +-- "Pan Y" +-- Fourth parameter determines whether the axis should be inverted +-- Fifth parameter determines whether the axis behaves like a joystick or a Trigger. +-- Allowed values are "JoystickLike" and "TriggerLike", the first one is the default +-- Sixth parameters determins if the axis should be "Sticky" or not. +-- The axis values can either go back to 0 when the joystick is released or it can +-- stay at the value it was before the joystick was released. +-- The latter is called a sticky axis, when the values don't go back to 0. +-- Seventh parameter can be used to reverse the camera movement for the axis +-- Eighth parameter is the sensitivity for the axis + +local XBoxController = { + -- Axes + LeftThumbStick = { + LeftRight = 0, + UpDown = 1 + }, + RightThumbStick = { + LeftRight = 3, + UpDown = 4 + }, + LeftTrigger = 2, + RightTrigger = 5, + + -- Buttons + A = 0, + B = 1, + X = 2, + Y = 3, + LB = 4, + RB = 5, + Back = 6, + Start = 7, + LeftStickButton = 9, + RightStickButton = 10, + DPad = { + Up = 11, + Right = 12, + Down = 13, + Left = 14 + } +} + + +asset.onInitialize(function() + local controller = XBoxController + local name = "Microsoft X-Box 360 pad" + + local deadzoneJoysticks = 0.2 + local deadzoneTriggers = 0.05 + openspace.navigation.setAxisDeadZone(name, controller.LeftThumbStick.LeftRight, deadzoneJoysticks) + openspace.navigation.setAxisDeadZone(name, controller.LeftThumbStick.UpDown, deadzoneJoysticks) + openspace.navigation.setAxisDeadZone(name, controller.RightThumbStick.LeftRight, deadzoneJoysticks) + openspace.navigation.setAxisDeadZone(name, controller.RightThumbStick.UpDown, deadzoneJoysticks) + openspace.navigation.setAxisDeadZone(name, controller.LeftTrigger, deadzoneTriggers) + openspace.navigation.setAxisDeadZone(name, controller.RightTrigger, deadzoneTriggers) + + openspace.navigation.bindJoystickAxis(name, controller.LeftThumbStick.LeftRight, "Orbit X") + openspace.navigation.bindJoystickAxis(name, controller.LeftThumbStick.UpDown, "Orbit Y") + openspace.navigation.bindJoystickAxis(name, controller.RightThumbStick.LeftRight, "Pan X", true) + openspace.navigation.bindJoystickAxis(name, controller.RightThumbStick.UpDown, "Pan Y", true) + openspace.navigation.bindJoystickAxis(name, controller.LeftTrigger, "Zoom Out", false, "TriggerLike") + openspace.navigation.bindJoystickAxis(name, controller.RightTrigger, "Zoom In", false, "TriggerLike") + + -- Roll + openspace.navigation.bindJoystickButton( + name, + controller.DPad.Up, + joystickHelper.bindLocalRoll(name, controller.RightThumbStick.LeftRight) .. + "openspace.navigation.bindJoystickAxis('" .. name .. "', " .. controller.RightThumbStick.UpDown .. ", 'None')", + "Switch to roll mode" + ) + openspace.navigation.bindJoystickButton( + name, + controller.DPad.Up, + joystickHelper.unbindRoll(name, controller.RightThumbStick.LeftRight) .. + "openspace.navigation.bindJoystickAxis('" .. name .. "', " .. controller.RightThumbStick.UpDown .. ", 'Pan Y', true)", + "Switch back to normal mode", + "Release" + ) + + -- Switch focus in the interesting nodes menu + openspace.navigation.bindJoystickButton( + name, + controller.LB, + [[ + openspace.navigation.targetPreviousInterestingAnchor() + openspace.navigation.retargetAnchor() + ]], + "Switch target to the previous interesting node" + ) + + openspace.navigation.bindJoystickButton( + name, + controller.RB, + [[ + openspace.navigation.targetNextInterestingAnchor() + openspace.navigation.retargetAnchor() + ]], + "Switch target to the next interesting node" + ) + + -- Toggle Frictions + openspace.navigation.bindJoystickButton( + name, + controller.A, + propertyHelper.invert("NavigationHandler.OrbitalNavigator.Friction.RotationalFriction"), + "Toggle rotational friction" + ) + openspace.navigation.bindJoystickButton( + name, + controller.B, + propertyHelper.invert("NavigationHandler.OrbitalNavigator.Friction.ZoomFriction"), + "Toggle zoom friction" + ) + openspace.navigation.bindJoystickButton( + name, + controller.Y, + propertyHelper.invert("NavigationHandler.OrbitalNavigator.Friction.RollFriction"), + "Toggle roll friction" + ) + + -- Refocus + openspace.navigation.bindJoystickButton( + name, + controller.RightStickButton, + "openspace.navigation.retargetAnchor()", + "Retarget on current focus" + ) + + -- Time + openspace.navigation.bindJoystickButton( + name, + controller.DPad.Left, + "openspace.time.interpolatePreviousDeltaTimeStep()", + "Go backwards in time, faster the more times this button is pressed" + ) + + openspace.navigation.bindJoystickButton( + name, + controller.DPad.Down, + "openspace.time.interpolateDeltaTime(1)", + "Reset realtime" + ) + + openspace.navigation.bindJoystickButton( + name, + controller.DPad.Right, + "openspace.time.interpolateNextDeltaTimeStep()", + "Go forwards in time, faster the more times this button is pressed" + ) + + -- Reset Time to yesterday + openspace.navigation.bindJoystickButton( + name, + controller.Back, + [[ + openspace.time.setDeltaTime(1) + local yesterday = openspace.time.advancedTime(openspace.time.currentWallTime(), "-1d") + openspace.time.setTime(yesterday) + ]], + "Reset to yesterday realtime" + ) + + -- Pause + openspace.navigation.bindJoystickButton( + name, + controller.Start, + "openspace.time.togglePause()", + "Pause time simulation" + ) + + -- Open buttons that can be customized + -- X + openspace.navigation.bindJoystickButton( + name, + controller.X, + [[ + -- <-- Copy paste your custom script here + ]], + "" -- <-- Description of your custom script here (optional) + ) + + -- Left Joystick Button + openspace.navigation.bindJoystickButton( + name, + controller.LeftStickButton, + [[ + -- <-- Copy paste your custom script here + ]], + "" -- <-- Description of your custom script here (optional) + ) +end) + + + +asset.meta = { + Name = "Joystick controller: Microsoft X-Box 360 pad", + Description = "Joystick controller configuration for Microsoft X-Box 360 pad", + Author = [[ + OpenSpace Team & Winston + https://openspacesupport.slack.com/archives/CLMQXJJDQ/p1710388096683769 + ]], + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/util/joysticks/ps4.asset b/data/assets/util/joysticks/ps4.asset index 1ca140dfe8..f8696079e8 100644 --- a/data/assets/util/joysticks/ps4.asset +++ b/data/assets/util/joysticks/ps4.asset @@ -228,3 +228,13 @@ asset.onInitialize(function() "" -- <-- Description of your custom script here (optional) ) end) + + + +asset.meta = { + Name = "Joystick controller: PS4", + Description = "Joystick controller configuration for PS4", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/util/joysticks/ps5.asset b/data/assets/util/joysticks/ps5.asset new file mode 100644 index 0000000000..f2c55bc0e0 --- /dev/null +++ b/data/assets/util/joysticks/ps5.asset @@ -0,0 +1,253 @@ +local propertyHelper = asset.require("../property_helper") +local joystickHelper = asset.require("./joystick_helper") + + + +-- Allowed values for the third parameter of bindJoystickAxis: +-- "None" +-- "Orbit X" +-- "Orbit Y" +-- "Zoom" -- both in and out +-- "Zoom In" +-- "Zoom Out" +-- "LocalRoll" +-- "GlobalRoll" +-- "Pan X" +-- "Pan Y" +-- Fourth parameter determines whether the axis should be inverted +-- Fifth parameter determines whether the axis behaves like a joystick or a Trigger. +-- Allowed values are "JoystickLike" and "TriggerLike", the first one is the default +-- Sixth parameters determins if the axis should be "Sticky" or not. +-- The axis values can either go back to 0 when the joystick is released or it can +-- stay at the value it was before the joystick was released. +-- The latter is called a sticky axis, when the values don't go back to 0. +-- Seventh parameter can be used to reverse the camera movement for the axis +-- Eighth parameter is the sensitivity for the axis + +local PS5Controller = { + -- Axes + LeftThumbStick = { + LeftRight = 0, + UpDown = 1 + }, + RightThumbStick = { + LeftRight = 2, + UpDown = 5 + }, + L2 = 3, + R2 = 4, + + -- Buttons + Cross = 1, + Circle = 2, + Square = 0, + Triangle = 3, + L1 = 4, + R1 = 5, + L2Press = 6, + R2Press = 7, + Share = 8, + Options = 9, + PS = 12, + LeftStickButton = 10, + RightStickButton = 11, + TouchPad = 13, + Mute = 14, + DPad = { + Up = 15, + Right = 16, + Down = 17, + Left = 18 + } +} + + +asset.onInitialize(function() + local controller = PS5Controller + local name = "DualSense Wireless Controller" + + local deadzoneJoysticks = 0.2 + local deadzoneTriggers = 0.05 + openspace.navigation.setAxisDeadZone(name, controller.LeftThumbStick.LeftRight, deadzoneJoysticks) + openspace.navigation.setAxisDeadZone(name, controller.LeftThumbStick.UpDown, deadzoneJoysticks) + openspace.navigation.setAxisDeadZone(name, controller.RightThumbStick.LeftRight, deadzoneJoysticks) + openspace.navigation.setAxisDeadZone(name, controller.RightThumbStick.UpDown, deadzoneJoysticks) + openspace.navigation.setAxisDeadZone(name, controller.L2, deadzoneTriggers) + openspace.navigation.setAxisDeadZone(name, controller.R2, deadzoneTriggers) + + openspace.navigation.bindJoystickAxis(name, controller.LeftThumbStick.LeftRight, "Orbit X") + openspace.navigation.bindJoystickAxis(name, controller.LeftThumbStick.UpDown, "Orbit Y") + openspace.navigation.bindJoystickAxis(name, controller.RightThumbStick.LeftRight, "Pan X", true) + openspace.navigation.bindJoystickAxis(name, controller.RightThumbStick.UpDown, "Pan Y", true) + openspace.navigation.bindJoystickAxis(name, controller.L2, "Zoom Out", false, "TriggerLike") + openspace.navigation.bindJoystickAxis(name, controller.R2, "Zoom In", false, "TriggerLike") + + -- Roll + openspace.navigation.bindJoystickButton( + name, + controller.DPad.Up, + joystickHelper.bindLocalRoll(name, controller.RightThumbStick.LeftRight) .. + "openspace.navigation.bindJoystickAxis('" .. name .. "', " .. controller.RightThumbStick.UpDown .. ", 'None')", + "Switch to roll mode" + ) + openspace.navigation.bindJoystickButton( + name, + controller.DPad.Up, + joystickHelper.unbindRoll(name, controller.RightThumbStick.LeftRight) .. + "openspace.navigation.bindJoystickAxis('" .. name .. "', " .. controller.RightThumbStick.UpDown .. ", 'Pan Y', true)", + "Switch back to normal mode", + "Release" + ) + + -- Switch focus in the interesting nodes menu + openspace.navigation.bindJoystickButton( + name, + controller.L1, + [[ + openspace.navigation.targetPreviousInterestingAnchor() + openspace.navigation.retargetAnchor() + ]], + "Switch target to the previous interesting node" + ) + + openspace.navigation.bindJoystickButton( + name, + controller.R1, + [[ + openspace.navigation.targetNextInterestingAnchor() + openspace.navigation.retargetAnchor() + ]], + "Switch target to the next interesting node" + ) + + -- Toggle Frictions + openspace.navigation.bindJoystickButton( + name, + controller.Cross, + propertyHelper.invert("NavigationHandler.OrbitalNavigator.Friction.RotationalFriction"), + "Toggle rotational friction" + ) + openspace.navigation.bindJoystickButton( + name, + controller.Circle, + propertyHelper.invert("NavigationHandler.OrbitalNavigator.Friction.ZoomFriction"), + "Toggle zoom friction" + ) + openspace.navigation.bindJoystickButton( + name, + controller.Triangle, + propertyHelper.invert("NavigationHandler.OrbitalNavigator.Friction.RollFriction"), + "Toggle roll friction" + ) + + -- Refocus + openspace.navigation.bindJoystickButton( + name, + controller.RightStickButton, + "openspace.navigation.retargetAnchor()", + "Retarget on current focus" + ) + + -- Time + openspace.navigation.bindJoystickButton( + name, + controller.DPad.Left, + "openspace.time.interpolatePreviousDeltaTimeStep()", + "Go backwards in time, faster the more times this button is pressed" + ) + + openspace.navigation.bindJoystickButton( + name, + controller.DPad.Down, + "openspace.time.interpolateDeltaTime(1)", + "Reset realtime" + ) + + openspace.navigation.bindJoystickButton( + name, + controller.DPad.Right, + "openspace.time.interpolateNextDeltaTimeStep()", + "Go forwards in time, faster the more times this button is pressed" + ) + + -- Reset Time to yesterday + openspace.navigation.bindJoystickButton( + name, + controller.Options, + [[ + openspace.time.setDeltaTime(1) + local yesterday = openspace.time.advancedTime(openspace.time.currentWallTime(), "-1d") + openspace.time.setTime(yesterday) + ]], + "Reset to yesterday realtime" + ) + + -- Pause + openspace.navigation.bindJoystickButton( + name, + controller.TouchPad, + "openspace.time.togglePause()", + "Pause time simulation" + ) + + -- Open buttons that can be customized + -- Square + openspace.navigation.bindJoystickButton( + name, + controller.Square, + [[ + -- <-- Copy paste your custom script here + ]], + "" -- <-- Description of your custom script here (optional) + ) + + -- Share button + openspace.navigation.bindJoystickButton( + name, + controller.Share, + [[ + -- <-- Copy paste your custom script here + ]], + "" -- <-- Description of your custom script here (optional) + ) + + -- Left Joystick Button + openspace.navigation.bindJoystickButton( + name, + controller.LeftStickButton, + [[ + -- <-- Copy paste your custom script here + ]], + "" -- <-- Description of your custom script here (optional) + ) + + -- Playstation button + openspace.navigation.bindJoystickButton( + name, + controller.PS, + [[ + -- <-- Copy paste your custom script here + ]], + "" -- <-- Description of your custom script here (optional) + ) + + -- Microphone mute button + openspace.navigation.bindJoystickButton( + name, + controller.Mute, + [[ + -- <-- Copy paste your custom script here + ]], + "" -- <-- Description of your custom script here (optional) + ) +end) + + + +asset.meta = { + Name = "Joystick controller: PS5", + Description = "Joystick controller configuration for PS5", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/util/joysticks/space-mouse-compact-wireless.asset b/data/assets/util/joysticks/space-mouse-compact-wireless.asset index 4352f161ac..3ef46d306c 100644 --- a/data/assets/util/joysticks/space-mouse-compact-wireless.asset +++ b/data/assets/util/joysticks/space-mouse-compact-wireless.asset @@ -69,3 +69,13 @@ asset.onInitialize(function() "Switch to global roll mode" ) end) + + + +asset.meta = { + Name = "Joystick controller: SpaceMouse compact wireless", + Description = "Joystick controller configuration for SpaceMouse compact wireless", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/util/joysticks/space-mouse-compact.asset b/data/assets/util/joysticks/space-mouse-compact.asset index d6935347e7..77b911effe 100644 --- a/data/assets/util/joysticks/space-mouse-compact.asset +++ b/data/assets/util/joysticks/space-mouse-compact.asset @@ -69,3 +69,13 @@ asset.onInitialize(function() "Switch to global roll mode" ) end) + + + +asset.meta = { + Name = "Joystick controller: SpaceMouse compact (wired)", + Description = "Joystick controller configuration for SpaceMouse compact (wired)", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/util/joysticks/space-mouse-enterprise-wireless.asset b/data/assets/util/joysticks/space-mouse-enterprise-wireless.asset index d84e309d18..279a8c3cd2 100644 --- a/data/assets/util/joysticks/space-mouse-enterprise-wireless.asset +++ b/data/assets/util/joysticks/space-mouse-enterprise-wireless.asset @@ -63,3 +63,13 @@ asset.onInitialize(function() openspace.navigation.bindJoystickAxis(name, controller.Push.UpDown, "Zoom") openspace.navigation.bindJoystickAxis(name, controller.Tilt.LeftRight, "LocalRoll") end) + + + +asset.meta = { + Name = "Joystick controller: SpaceMouse enterprise wireless", + Description = "Joystick controller configuration for SpaceMouse enterprise wireless", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/util/joysticks/space-mouse-enterprise.asset b/data/assets/util/joysticks/space-mouse-enterprise.asset index b7d7a963c8..b3ee78bf1c 100644 --- a/data/assets/util/joysticks/space-mouse-enterprise.asset +++ b/data/assets/util/joysticks/space-mouse-enterprise.asset @@ -63,3 +63,13 @@ asset.onInitialize(function() openspace.navigation.bindJoystickAxis(name, controller.Push.UpDown, "Zoom") openspace.navigation.bindJoystickAxis(name, controller.Tilt.LeftRight, "LocalRoll") end) + + + +asset.meta = { + Name = "Joystick controller: SpaceMouse enterprise (wired)", + Description = "Joystick controller configuration for SpaceMouse enterprise (wired)", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/util/joysticks/xbox-wireless.asset b/data/assets/util/joysticks/xbox-wireless.asset index 5afbb5d82c..699dc1eb6a 100644 --- a/data/assets/util/joysticks/xbox-wireless.asset +++ b/data/assets/util/joysticks/xbox-wireless.asset @@ -206,3 +206,13 @@ asset.onInitialize(function() "" -- <-- Description of your custom script here (optional) ) end) + + + +asset.meta = { + Name = "Joystick controller: Xbox wireless", + Description = "Joystick controller configuration for Xbox wireless", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/util/joysticks/xbox.asset b/data/assets/util/joysticks/xbox.asset index 40f01210d4..a31b8cb5db 100644 --- a/data/assets/util/joysticks/xbox.asset +++ b/data/assets/util/joysticks/xbox.asset @@ -206,3 +206,13 @@ asset.onInitialize(function() "" -- <-- Description of your custom script here (optional) ) end) + + + +asset.meta = { + Name = "Joystick controller: Xbox (wired)", + Description = "Joystick controller configuration for Xbox (wired)", + Author = "OpenSpace Team", + URL = "http://openspaceproject.com", + License = "MIT license" +} diff --git a/data/assets/util/launcher_images.asset b/data/assets/util/launcher_images.asset index 01a474b765..a95d1b7386 100644 --- a/data/assets/util/launcher_images.asset +++ b/data/assets/util/launcher_images.asset @@ -1,7 +1,7 @@ -local DataPath = asset.syncedResource({ +local DataPath = asset.resource({ Name = "Launcher Images", Type = "HttpSynchronization", Identifier = "launcher_images", - Version = 3 + Version = 4 }) asset.export("DataPath", DataPath) diff --git a/data/assets/util/property_helper.asset b/data/assets/util/property_helper.asset index d0c9809641..99f059b6a6 100644 --- a/data/assets/util/property_helper.asset +++ b/data/assets/util/property_helper.asset @@ -1,14 +1,14 @@ -- Function that returns the string that inverts the fully qualified boolean property 'property' function invert(prop) local escaped_property = [["]] .. prop .. [["]] - return "openspace.setPropertyValueSingle(" .. escaped_property .. ", not openspace.getPropertyValue(" .. escaped_property .. "))" + return "openspace.setPropertyValueSingle(" .. escaped_property .. ", not openspace.propertyValue(" .. escaped_property .. "))" end -- Function that returns the string that increments the 'property' by the 'value' function increment(prop, value) local v = value or 1 local escaped_property = [["]] .. prop .. [["]] - return "openspace.setPropertyValueSingle(" .. escaped_property .. ", openspace.getPropertyValue(" .. escaped_property .. ") + " .. v .. ")" + return "openspace.setPropertyValueSingle(" .. escaped_property .. ", openspace.propertyValue(" .. escaped_property .. ") + " .. v .. ")" end -- Function that returns the string that decrements the 'property' by the 'value' @@ -38,7 +38,7 @@ function fadeInOut(prop, duration) local escaped_property = [["]] .. prop .. [["]] -- If the value is > 0.5 fade out, otherwise fade in - return "local v = openspace.getPropertyValue(" .. escaped_property .. ") if v <= 0.5 then " .. fadeIn(prop, duration) .. " else " .. fadeOut(prop, duration) .. " end" + return "local v = openspace.propertyValue(" .. escaped_property .. ") if v <= 0.5 then " .. fadeIn(prop, duration) .. " else " .. fadeOut(prop, duration) .. " end" end asset.export("invert", invert) diff --git a/data/assets/util/screenshots_endpoint.asset b/data/assets/util/screenshots_endpoint.asset index f39066846e..09a1cbeb63 100644 --- a/data/assets/util/screenshots_endpoint.asset +++ b/data/assets/util/screenshots_endpoint.asset @@ -5,10 +5,10 @@ asset.onInitialize(function() -- remove automatic restart on each property change, since frequent restarting seems to -- be unstable on MacOS. - local enabled = openspace.getPropertyValue("Modules.WebGui.ServerProcessEnabled") + local enabled = openspace.propertyValue("Modules.WebGui.ServerProcessEnabled") openspace.setPropertyValueSingle("Modules.WebGui.ServerProcessEnabled", false) - local directories = openspace.getPropertyValue("Modules.WebGui.Directories") + local directories = openspace.propertyValue("Modules.WebGui.Directories") directories[#directories + 1] = "screenshots" directories[#directories + 1] = "${SCREENSHOTS}" openspace.setPropertyValueSingle("Modules.WebGui.Directories", directories) diff --git a/data/assets/util/static_server.asset b/data/assets/util/static_server.asset index b894061f56..b6a4c39804 100644 --- a/data/assets/util/static_server.asset +++ b/data/assets/util/static_server.asset @@ -1,6 +1,6 @@ local BackendHash = "7ca0a34e9c4c065b7bfad0623db0e322bf3e0af9" -local backend = asset.syncedResource({ +local backend = asset.resource({ Identifier = "WebGuiBackend", Name = "Web Gui Backend", Type = "UrlSynchronization", diff --git a/data/assets/util/webgui.asset b/data/assets/util/webgui.asset index 7dab6599be..a367c3aa13 100644 --- a/data/assets/util/webgui.asset +++ b/data/assets/util/webgui.asset @@ -4,9 +4,9 @@ local guiCustomization = asset.require("customization/gui") -- Select which commit hashes to use for the frontend and backend -local frontendHash = "c6b16ef4ffdda6b20298d16a204c8977ad56ef09" +local frontendHash = "1e64af3b19764af15ad844dec543b1fffec99fe9" -local frontend = asset.syncedResource({ +local frontend = asset.resource({ Identifier = "WebGuiFrontend", Name = "Web Gui Frontend", Type = "UrlSynchronization", @@ -30,12 +30,15 @@ asset.onInitialize(function() -- and remove automatic restart on each property change, -- since frequent restarting seems to be unstable on mac. - local enabled = openspace.getPropertyValue("Modules.WebGui.ServerProcessEnabled") + local enabled = openspace.propertyValue("Modules.WebGui.ServerProcessEnabled") openspace.setPropertyValueSingle("Modules.WebGui.ServerProcessEnabled", false) - local directories = openspace.getPropertyValue("Modules.WebGui.Directories") + local directories = openspace.propertyValue("Modules.WebGui.Directories") directories[#directories + 1] = "frontend" directories[#directories + 1] = frontend .. "frontend" + -- Add user directory for webpanels + directories[#directories + 1] = "webpanels" + directories[#directories + 1] = openspace.absPath("${USER_WEBPANELS}") openspace.setPropertyValueSingle("Modules.WebGui.Directories", directories) openspace.setPropertyValueSingle("Modules.WebGui.DefaultEndpoint", "frontend") @@ -43,7 +46,7 @@ asset.onInitialize(function() -- The GUI contains date and simulation increment, -- so let's remove these from the dashboard. - if openspace.getPropertyValue("Modules.CefWebGui.Visible") then + if openspace.propertyValue("Modules.CefWebGui.Visible") then if openspace.hasProperty("Dashboard.Date.Enabled") then openspace.setPropertyValueSingle("Dashboard.Date.Enabled", false) end @@ -55,7 +58,7 @@ end) asset.onDeinitialize(function() -- Remove the frontend endpoint - local directories = openspace.getPropertyValue("Modules.WebGui.Directories") + local directories = openspace.propertyValue("Modules.WebGui.Directories") local newDirectories = {} -- @TODO(maci, 2019-08-23) see message below @@ -76,7 +79,7 @@ asset.onDeinitialize(function() end) function setCefRoute(route) - local port = openspace.getPropertyValue("Modules.WebGui.Port") + local port = openspace.propertyValue("Modules.WebGui.Port") -- As a developer, you can manually serve the webgui from port 4690 -- with the command `npm start` in the web gui repository if guiCustomization.webguiDevelopmentMode then @@ -94,7 +97,6 @@ asset.export("setCefRoute", setCefRoute) asset.meta = { Name = "WebGUI", - Version = "1.0", Author = "OpenSpace Team", URL = "http://openspaceproject.com", License = "MIT license" diff --git a/data/globebrowsing_servers.lua b/data/globebrowsing_servers.lua index 1c2de7dc53..c3defef508 100644 --- a/data/globebrowsing_servers.lua +++ b/data/globebrowsing_servers.lua @@ -46,5 +46,3 @@ return { } } - --- https://astrowebmaps.wr.usgs.gov/webmapatlas/Layers/maps.html \ No newline at end of file diff --git a/data/profiles/artemis.profile b/data/profiles/artemis.profile index 550a7466f0..103fcab6ec 100644 --- a/data/profiles/artemis.profile +++ b/data/profiles/artemis.profile @@ -73,11 +73,6 @@ "type": "setPropertyValueSingle", "value": "{0.5, 0.5, 0.5}" }, - { - "name": "Scene.MoonTrail.Renderable.Appearance.Fade", - "type": "setPropertyValueSingle", - "value": "4.0" - }, { "name": "Scene.Earth.Renderable.Layers.ColorLayers.ESRI_NOAA20_Combo.Enabled", "type": "setPropertyValueSingle", diff --git a/data/profiles/bepicolombo.profile b/data/profiles/bepicolombo.profile new file mode 100644 index 0000000000..6cef837a3c --- /dev/null +++ b/data/profiles/bepicolombo.profile @@ -0,0 +1,183 @@ +{ + "assets": [ + "base", + "base_keybindings", + "scene/solarsystem/missions/bepicolombo/bepicolombo", + "scene/solarsystem/planets/earth/earth" + ], + "camera": { + "altitude": 17000000.0, + "anchor": "Earth", + "latitude": 58.5877, + "longitude": 16.1924, + "type": "goToGeo" + }, + "delta_times": [ + 1.0, + 5.0, + 30.0, + 60.0, + 300.0, + 1800.0, + 3600.0, + 43200.0, + 86400.0, + 604800.0, + 1209600.0, + 2592000.0, + 5184000.0, + 7776000.0, + 15552000.0, + 31536000.0, + 63072000.0, + 157680000.0, + 315360000.0, + 630720000.0 + ], + "mark_nodes": [ + "BepiColombo", + "Mercury", + "Earth", + "Venus", + "Sun" + ], + "meta": { + "author": "OpenSpace Team", + "description": "Default OpenSpace Profile. Adds Earth satellites not contained in other profiles", + "license": "MIT License", + "name": "Default", + "url": "https://www.openspaceproject.com", + "version": "1.0" + }, + "properties": [ + { + "name": "Scene.BepiColomboMPO_MertisTis.Renderable.Enabled", + "type": "setPropertyValueSingle", + "value": "false" + }, + { + "name": "Scene.BepiColomboMPO_MertisTisPlanet.Renderable.Enabled", + "type": "setPropertyValueSingle", + "value": "false" + }, + { + "name": "Scene.BepiColomboMPO_MertisTisSpace.Renderable.Enabled", + "type": "setPropertyValueSingle", + "value": "false" + }, + { + "name": "Scene.BepiColomboMPO_Phebus100.Renderable.Enabled", + "type": "setPropertyValueSingle", + "value": "false" + }, + { + "name": "Scene.BepiColomboMPO_Phebus75.Renderable.Enabled", + "type": "setPropertyValueSingle", + "value": "false" + }, + { + "name": "Scene.BepiColomboMPO_PhebusSlit100.Renderable.Enabled", + "type": "setPropertyValueSingle", + "value": "false" + }, + { + "name": "Scene.BepiColomboMPO_PhebusSlit75.Renderable.Enabled", + "type": "setPropertyValueSingle", + "value": "false" + }, + { + "name": "Scene.BepiColomboMPO_SerenaElena.Renderable.Enabled", + "type": "setPropertyValueSingle", + "value": "false" + }, + { + "name": "Scene.BepiColomboMPO_SIMBIOSYS_HRIC_F550.Renderable.Enabled", + "type": "setPropertyValueSingle", + "value": "false" + }, + { + "name": "Scene.BepiColomboMPO_SIMBIOSYS_HRIC_F750.Renderable.Enabled", + "type": "setPropertyValueSingle", + "value": "false" + }, + { + "name": "Scene.BepiColomboMPO_SIMBIOSYS_HRIC_F880.Renderable.Enabled", + "type": "setPropertyValueSingle", + "value": "false" + }, + { + "name": "Scene.BepiColomboMPO_SIMBIOSYS_HRIC_FPA.Renderable.Enabled", + "type": "setPropertyValueSingle", + "value": "false" + }, + { + "name": "Scene.BepiColomboMPO_SIMBIOSYS_HRIC_FPAN.Renderable.Enabled", + "type": "setPropertyValueSingle", + "value": "false" + }, + { + "name": "Scene.BepiColomboMPO_SIMBIOSYS_STC_H.Renderable.Enabled", + "type": "setPropertyValueSingle", + "value": "false" + }, + { + "name": "Scene.BepiColomboMPO_SIMBIOSYS_STC_H_F420.Renderable.Enabled", + "type": "setPropertyValueSingle", + "value": "false" + }, + { + "name": "Scene.BepiColomboMPO_SIMBIOSYS_STC_H_F750.Renderable.Enabled", + "type": "setPropertyValueSingle", + "value": "false" + }, + { + "name": "Scene.BepiColomboMPO_SIMBIOSYS_STC_H_P700.Renderable.Enabled", + "type": "setPropertyValueSingle", + "value": "false" + }, + { + "name": "Scene.BepiColomboMPO_SIMBIOSYS_STC_L.Renderable.Enabled", + "type": "setPropertyValueSingle", + "value": "false" + }, + { + "name": "Scene.BepiColomboMPO_SIMBIOSYS_STC_L_F550.Renderable.Enabled", + "type": "setPropertyValueSingle", + "value": "false" + }, + { + "name": "Scene.BepiColomboMPO_SIMBIOSYS_STC_L_F920.Renderable.Enabled", + "type": "setPropertyValueSingle", + "value": "false" + }, + { + "name": "Scene.BepiColomboMPO_SIMBIOSYS_STC_L_P700.Renderable.Enabled", + "type": "setPropertyValueSingle", + "value": "false" + }, + { + "name": "Scene.BepiColomboMPO_SIMBIOSYS_VIHI.Renderable.Enabled", + "type": "setPropertyValueSingle", + "value": "false" + }, + { + "name": "Scene.BepiColomboMPO_MIXS-C.Renderable.Enabled", + "type": "setPropertyValueSingle", + "value": "false" + }, + { + "name": "Scene.BepiColomboMPO_MIXS-T.Renderable.Enabled", + "type": "setPropertyValueSingle", + "value": "false" + } + ], + "time": { + "is_paused": false, + "type": "relative", + "value": "-1d" + }, + "version": { + "major": 1, + "minor": 3 + } +} diff --git a/data/profiles/eclipse.profile b/data/profiles/eclipse.profile new file mode 100644 index 0000000000..4efef08434 --- /dev/null +++ b/data/profiles/eclipse.profile @@ -0,0 +1,74 @@ +{ + "assets": [ + "base", + "base_keybindings", + "events/toggle_sun", + "scene/solarsystem/planets/earth/earth", + "scene/solarsystem/planets/earth/eclipses/eclipses", + "scene/solarsystem/planets/earth/eclipse_shadow" + ], + "camera": { + "altitude": 17000000.0, + "anchor": "Earth", + "latitude": 58.5877, + "longitude": 16.1924, + "type": "goToGeo" + }, + "delta_times": [ + 1.0, + 5.0, + 30.0, + 60.0, + 300.0, + 1800.0, + 3600.0, + 43200.0, + 86400.0, + 604800.0, + 1209600.0, + 2592000.0, + 5184000.0, + 7776000.0, + 15552000.0, + 31536000.0, + 63072000.0, + 157680000.0, + 315360000.0, + 630720000.0 + ], + "keybindings": [], + "mark_nodes": [ + "Earth", + "Moon", + "Sun", + "ISS" + ], + "meta": { + "author": "OpenSpace Team", + "description": "OpenSpace profile to highlight solar eclipses on the Earth from 1900 to 2100", + "license": "MIT License", + "name": "Default", + "url": "https://www.openspaceproject.com", + "version": "1.0" + }, + "properties": [ + { + "name": "Scene.MoonOrbitalPlaneRadialGrid.Renderable.Enabled", + "type": "setPropertyValueSingle", + "value": "false" + }, + { + "name": "Scene.EarthEclipticRadialGrid.Renderable.Enabled", + "type": "setPropertyValueSingle", + "value": "false" + } + ], + "time": { + "type": "relative", + "value": "-1d" + }, + "version": { + "major": 1, + "minor": 1 + } +} diff --git a/data/profiles/euclid.profile b/data/profiles/euclid.profile new file mode 100644 index 0000000000..8db9bcf69c --- /dev/null +++ b/data/profiles/euclid.profile @@ -0,0 +1,89 @@ +{ + "assets": [ + "base", + "base_keybindings", + "events/toggle_sun", + "scene/solarsystem/telescopes/euclid/euclid", + "scene/solarsystem/planets/earth/earth" + ], + "camera": { + "anchor": "Euclid", + "type": "goToNode" + }, + "delta_times": [ + 1.0, + 5.0, + 30.0, + 60.0, + 300.0, + 1800.0, + 3600.0, + 43200.0, + 86400.0, + 604800.0, + 1209600.0, + 2592000.0, + 5184000.0, + 7776000.0, + 15552000.0, + 31536000.0, + 63072000.0, + 157680000.0, + 315360000.0, + 630720000.0 + ], + "mark_nodes": [ + "Earth", + "Sun", + "Euclid" + ], + "meta": { + "author": "OpenSpace Team", + "description": "A profile showing the trajectory of ESA's Euclid mission", + "license": "MIT License", + "name": "Euclid", + "url": "https://www.openspaceproject.com", + "version": "1.0" + }, + "properties": [ + { + "name": "Scene.L2.Renderable.Enabled", + "type": "setPropertyValueSingle", + "value": "false" + }, + { + "name": "Scene.L2Label.Renderable.Enabled", + "type": "setPropertyValueSingle", + "value": "false" + }, + { + "name": "Scene.L2SmallLabel.Renderable.Enabled", + "type": "setPropertyValueSingle", + "value": "false" + }, + { + "name": "Scene.EuclidTrailSun.Renderable.Enabled", + "type": "setPropertyValueSingle", + "value": "false" + }, + { + "name": "Scene.EuclidTrailEarth.Renderable.Enabled", + "type": "setPropertyValueSingle", + "value": "false" + }, + { + "name": "Scene.EuclidTrailOrbit.Renderable.Enabled", + "type": "setPropertyValueSingle", + "value": "false" + } + ], + "time": { + "is_paused": false, + "type": "relative", + "value": "-1d" + }, + "version": { + "major": 1, + "minor": 3 + } +} diff --git a/data/profiles/juice.profile b/data/profiles/juice.profile index 1def720964..3fd45ae004 100644 --- a/data/profiles/juice.profile +++ b/data/profiles/juice.profile @@ -9,6 +9,7 @@ "scene/solarsystem/missions/juice/model", "scene/solarsystem/missions/juice/plane", "scene/solarsystem/missions/juice/trail", + "scene/solarsystem/missions/juice/mission", "scene/solarsystem/planets/earth/earth", "scene/solarsystem/planets/jupiter/layers/colorlayers/jupiter_video" ], diff --git a/data/profiles/jwst.profile b/data/profiles/jwst.profile index 39111d2947..521fa3a859 100644 --- a/data/profiles/jwst.profile +++ b/data/profiles/jwst.profile @@ -134,11 +134,6 @@ "type": "setPropertyValue", "value": "false" }, - { - "name": "Scene.MoonTrail.Renderable.Appearance.Fade", - "type": "setPropertyValueSingle", - "value": "3.0" - }, { "name": "Scene.JWSTTrailLaunch.Renderable.Appearance.EnableFade", "type": "setPropertyValueSingle", diff --git a/data/profiles/osirisrex.profile b/data/profiles/osirisrex.profile index 796a9e6b3b..3cd0af20d1 100644 --- a/data/profiles/osirisrex.profile +++ b/data/profiles/osirisrex.profile @@ -88,6 +88,11 @@ "name": "NavigationHandler.OrbitalNavigator.FollowAnchorNodeRotationDistance", "type": "setPropertyValue", "value": "20.0" + }, + { + "name": "NavigationHandler.OrbitalNavigator.LimitZoom.MinimumAllowedDistance", + "type": "setPropertyValueSingle", + "value": "3.0" } ], "time": { diff --git a/data/profiles/voyager.profile b/data/profiles/voyager.profile index a14681d2c6..7fdae4dea9 100644 --- a/data/profiles/voyager.profile +++ b/data/profiles/voyager.profile @@ -1,4 +1,8 @@ { + "additional_scripts": [ + "openspace.action.triggerAction('os.solarsystem.JupiterMinorMoonsOff')", + "openspace.action.triggerAction('os.solarsystem.SaturnMinorMoonsOff')" + ], "assets": [ "base", "base_keybindings", diff --git a/documentation b/documentation index 3917fa57e4..15696c6d5c 160000 --- a/documentation +++ b/documentation @@ -1 +1 @@ -Subproject commit 3917fa57e47503e30e20d4059be9b54b729a5ea2 +Subproject commit 15696c6d5c95bf51b136efb76a6467a6d2ecfa8f diff --git a/ext/CMakeLists.txt b/ext/CMakeLists.txt index be0d33f15d..2a42f99780 100644 --- a/ext/CMakeLists.txt +++ b/ext/CMakeLists.txt @@ -2,7 +2,7 @@ # # # OpenSpace # # # -# Copyright (c) 2014-2023 # +# Copyright (c) 2014-2025 # # # # 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 # @@ -45,6 +45,10 @@ if (APPLE) endif () # Ghoul +if (NOT OPENSPACE_HAVE_TESTS) + # Unless overriden, disable ghoul tests if OpenSpace tests are disabled + set(GHOUL_HAVE_TESTS FALSE CACHE BOOL "Enable ghoul unit tests") +endif() add_subdirectory(ghoul) if (TARGET GhoulTest) set_target_properties(GhoulTest PROPERTIES FOLDER "Unit Tests") diff --git a/ext/ghoul b/ext/ghoul index ede185dd8b..96bf82e968 160000 --- a/ext/ghoul +++ b/ext/ghoul @@ -1 +1 @@ -Subproject commit ede185dd8b2f6c9cda5731b7e3512dec0f08a12e +Subproject commit 96bf82e9682ab924479fa72470e42f9a36f7ca60 diff --git a/ext/spice b/ext/spice index 5dba0f3269..711ffdb918 160000 --- a/ext/spice +++ b/ext/spice @@ -1 +1 @@ -Subproject commit 5dba0f32690dd49f29adbbf618a69e5709cdc405 +Subproject commit 711ffdb91865c48018ba2efef963ed645ed2557b diff --git a/ext/tinythread.cpp b/ext/tinythread.cpp deleted file mode 100644 index 690eceea1a..0000000000 --- a/ext/tinythread.cpp +++ /dev/null @@ -1,303 +0,0 @@ -/* -*- mode: c++; tab-width: 2; indent-tabs-mode: nil; -*- -Copyright (c) 2010-2012 Marcus Geelnard - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - - 3. This notice may not be removed or altered from any source - distribution. -*/ - -#include -#include "tinythread.h" - -#if defined(_TTHREAD_POSIX_) - #include - #include -#elif defined(_TTHREAD_WIN32_) - #include -#endif - - -namespace tthread { - -//------------------------------------------------------------------------------ -// condition_variable -//------------------------------------------------------------------------------ -// NOTE 1: The Win32 implementation of the condition_variable class is based on -// the corresponding implementation in GLFW, which in turn is based on a -// description by Douglas C. Schmidt and Irfan Pyarali: -// http://www.cs.wustl.edu/~schmidt/win32-cv-1.html -// -// NOTE 2: Windows Vista actually has native support for condition variables -// (InitializeConditionVariable, WakeConditionVariable, etc), but we want to -// be portable with pre-Vista Windows versions, so TinyThread++ does not use -// Vista condition variables. -//------------------------------------------------------------------------------ - -#if defined(_TTHREAD_WIN32_) - #define _CONDITION_EVENT_ONE 0 - #define _CONDITION_EVENT_ALL 1 -#endif - -#if defined(_TTHREAD_WIN32_) -condition_variable::condition_variable() : mWaitersCount(0) -{ - mEvents[_CONDITION_EVENT_ONE] = CreateEvent(NULL, FALSE, FALSE, NULL); - mEvents[_CONDITION_EVENT_ALL] = CreateEvent(NULL, TRUE, FALSE, NULL); - InitializeCriticalSection(&mWaitersCountLock); -} -#endif - -#if defined(_TTHREAD_WIN32_) -condition_variable::~condition_variable() -{ - CloseHandle(mEvents[_CONDITION_EVENT_ONE]); - CloseHandle(mEvents[_CONDITION_EVENT_ALL]); - DeleteCriticalSection(&mWaitersCountLock); -} -#endif - -#if defined(_TTHREAD_WIN32_) -void condition_variable::_wait() -{ - // Wait for either event to become signaled due to notify_one() or - // notify_all() being called - int result = WaitForMultipleObjects(2, mEvents, FALSE, INFINITE); - - // Check if we are the last waiter - EnterCriticalSection(&mWaitersCountLock); - -- mWaitersCount; - bool lastWaiter = (result == (WAIT_OBJECT_0 + _CONDITION_EVENT_ALL)) && - (mWaitersCount == 0); - LeaveCriticalSection(&mWaitersCountLock); - - // If we are the last waiter to be notified to stop waiting, reset the event - if(lastWaiter) - ResetEvent(mEvents[_CONDITION_EVENT_ALL]); -} -#endif - -#if defined(_TTHREAD_WIN32_) -void condition_variable::notify_one() -{ - // Are there any waiters? - EnterCriticalSection(&mWaitersCountLock); - bool haveWaiters = (mWaitersCount > 0); - LeaveCriticalSection(&mWaitersCountLock); - - // If we have any waiting threads, send them a signal - if(haveWaiters) - SetEvent(mEvents[_CONDITION_EVENT_ONE]); -} -#endif - -#if defined(_TTHREAD_WIN32_) -void condition_variable::notify_all() -{ - // Are there any waiters? - EnterCriticalSection(&mWaitersCountLock); - bool haveWaiters = (mWaitersCount > 0); - LeaveCriticalSection(&mWaitersCountLock); - - // If we have any waiting threads, send them a signal - if(haveWaiters) - SetEvent(mEvents[_CONDITION_EVENT_ALL]); -} -#endif - - -//------------------------------------------------------------------------------ -// POSIX pthread_t to unique thread::id mapping logic. -// Note: Here we use a global thread safe std::map to convert instances of -// pthread_t to small thread identifier numbers (unique within one process). -// This method should be portable across different POSIX implementations. -//------------------------------------------------------------------------------ - -#if defined(_TTHREAD_POSIX_) -static thread::id _pthread_t_to_ID(const pthread_t &aHandle) -{ - static mutex idMapLock; - static std::map idMap; - static unsigned long int idCount(1); - - lock_guard guard(idMapLock); - if(idMap.find(aHandle) == idMap.end()) - idMap[aHandle] = idCount ++; - return thread::id(idMap[aHandle]); -} -#endif // _TTHREAD_POSIX_ - - -//------------------------------------------------------------------------------ -// thread -//------------------------------------------------------------------------------ - -/// Information to pass to the new thread (what to run). -struct _thread_start_info { - void (*mFunction)(void *); ///< Pointer to the function to be executed. - void * mArg; ///< Function argument for the thread function. - thread * mThread; ///< Pointer to the thread object. -}; - -// Thread wrapper function. -#if defined(_TTHREAD_WIN32_) -unsigned WINAPI thread::wrapper_function(void * aArg) -#elif defined(_TTHREAD_POSIX_) -void * thread::wrapper_function(void * aArg) -#endif -{ - // Get thread startup information - _thread_start_info * ti = (_thread_start_info *) aArg; - - try - { - // Call the actual client thread function - ti->mFunction(ti->mArg); - } - catch(...) - { - // Uncaught exceptions will terminate the application (default behavior - // according to C++11) - std::terminate(); - } - - // The thread is no longer executing - lock_guard guard(ti->mThread->mDataMutex); - ti->mThread->mNotAThread = true; - - // The thread is responsible for freeing the startup information - delete ti; - - return 0; -} - -thread::thread(void (*aFunction)(void *), void * aArg) -{ - // Serialize access to this thread structure - lock_guard guard(mDataMutex); - - // Fill out the thread startup information (passed to the thread wrapper, - // which will eventually free it) - _thread_start_info * ti = new _thread_start_info; - ti->mFunction = aFunction; - ti->mArg = aArg; - ti->mThread = this; - - // The thread is now alive - mNotAThread = false; - - // Create the thread -#if defined(_TTHREAD_WIN32_) - mHandle = (HANDLE) _beginthreadex(0, 0, wrapper_function, (void *) ti, 0, &mWin32ThreadID); -#elif defined(_TTHREAD_POSIX_) - if(pthread_create(&mHandle, NULL, wrapper_function, (void *) ti) != 0) - mHandle = 0; -#endif - - // Did we fail to create the thread? - if(!mHandle) - { - mNotAThread = true; - delete ti; - } -} - -thread::~thread() -{ - if(joinable()) - std::terminate(); -} - -void thread::join() -{ - if(joinable()) - { -#if defined(_TTHREAD_WIN32_) - WaitForSingleObject(mHandle, INFINITE); - CloseHandle(mHandle); -#elif defined(_TTHREAD_POSIX_) - pthread_join(mHandle, NULL); -#endif - } -} - -bool thread::joinable() const -{ - mDataMutex.lock(); - bool result = !mNotAThread; - mDataMutex.unlock(); - return result; -} - -void thread::detach() -{ - mDataMutex.lock(); - if(!mNotAThread) - { -#if defined(_TTHREAD_WIN32_) - CloseHandle(mHandle); -#elif defined(_TTHREAD_POSIX_) - pthread_detach(mHandle); -#endif - mNotAThread = true; - } - mDataMutex.unlock(); -} - -thread::id thread::get_id() const -{ - if(!joinable()) - return id(); -#if defined(_TTHREAD_WIN32_) - return id((unsigned long int) mWin32ThreadID); -#elif defined(_TTHREAD_POSIX_) - return _pthread_t_to_ID(mHandle); -#endif -} - -unsigned thread::hardware_concurrency() -{ -#if defined(_TTHREAD_WIN32_) - SYSTEM_INFO si; - GetSystemInfo(&si); - return (int) si.dwNumberOfProcessors; -#elif defined(_SC_NPROCESSORS_ONLN) - return (int) sysconf(_SC_NPROCESSORS_ONLN); -#elif defined(_SC_NPROC_ONLN) - return (int) sysconf(_SC_NPROC_ONLN); -#else - // The standard requires this function to return zero if the number of - // hardware cores could not be determined. - return 0; -#endif -} - - -//------------------------------------------------------------------------------ -// this_thread -//------------------------------------------------------------------------------ - -thread::id this_thread::get_id() -{ -#if defined(_TTHREAD_WIN32_) - return thread::id((unsigned long int) GetCurrentThreadId()); -#elif defined(_TTHREAD_POSIX_) - return _pthread_t_to_ID(pthread_self()); -#endif -} - -} diff --git a/ext/tinythread.h b/ext/tinythread.h deleted file mode 100644 index aed7b5856b..0000000000 --- a/ext/tinythread.h +++ /dev/null @@ -1,714 +0,0 @@ -/* -*- mode: c++; tab-width: 2; indent-tabs-mode: nil; -*- -Copyright (c) 2010-2012 Marcus Geelnard - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - - 3. This notice may not be removed or altered from any source - distribution. -*/ - -#ifndef _TINYTHREAD_H_ -#define _TINYTHREAD_H_ - -/// @file -/// @mainpage TinyThread++ API Reference -/// -/// @section intro_sec Introduction -/// TinyThread++ is a minimal, portable implementation of basic threading -/// classes for C++. -/// -/// They closely mimic the functionality and naming of the C++11 standard, and -/// should be easily replaceable with the corresponding std:: variants. -/// -/// @section port_sec Portability -/// The Win32 variant uses the native Win32 API for implementing the thread -/// classes, while for other systems, the POSIX threads API (pthread) is used. -/// -/// @section class_sec Classes -/// In order to mimic the threading API of the C++11 standard, subsets of -/// several classes are provided. The fundamental classes are: -/// @li tthread::thread -/// @li tthread::mutex -/// @li tthread::recursive_mutex -/// @li tthread::condition_variable -/// @li tthread::lock_guard -/// @li tthread::fast_mutex -/// -/// @section misc_sec Miscellaneous -/// The following special keywords are available: #thread_local. -/// -/// For more detailed information (including additional classes), browse the -/// different sections of this documentation. A good place to start is: -/// tinythread.h. - -// Which platform are we on? -#if !defined(_TTHREAD_PLATFORM_DEFINED_) - #if defined(_WIN32) || defined(__WIN32__) || defined(__WINDOWS__) - #define _TTHREAD_WIN32_ - #else - #define _TTHREAD_POSIX_ - #endif - #define _TTHREAD_PLATFORM_DEFINED_ -#endif - -// Platform specific includes -#if defined(_TTHREAD_WIN32_) - #ifndef WIN32_LEAN_AND_MEAN - #define WIN32_LEAN_AND_MEAN - #define __UNDEF_LEAN_AND_MEAN - #endif - #include - #ifdef __UNDEF_LEAN_AND_MEAN - #undef WIN32_LEAN_AND_MEAN - #undef __UNDEF_LEAN_AND_MEAN - #endif -#else - #include - #include - #include - #include -#endif - -// Generic includes -#include - -/// TinyThread++ version (major number). -#define TINYTHREAD_VERSION_MAJOR 1 -/// TinyThread++ version (minor number). -#define TINYTHREAD_VERSION_MINOR 1 -/// TinyThread++ version (full version). -#define TINYTHREAD_VERSION (TINYTHREAD_VERSION_MAJOR * 100 + TINYTHREAD_VERSION_MINOR) - -// Do we have a fully featured C++11 compiler? -#if (__cplusplus > 199711L) || (defined(__STDCXX_VERSION__) && (__STDCXX_VERSION__ >= 201001L)) - #define _TTHREAD_CPP11_ -#endif - -// ...at least partial C++11? -#if defined(_TTHREAD_CPP11_) || defined(__GXX_EXPERIMENTAL_CXX0X__) || defined(__GXX_EXPERIMENTAL_CPP0X__) - #define _TTHREAD_CPP11_PARTIAL_ -#endif - -// Macro for disabling assignments of objects. -#ifdef _TTHREAD_CPP11_PARTIAL_ - #define _TTHREAD_DISABLE_ASSIGNMENT(name) \ - name(const name&) = delete; \ - name& operator=(const name&) = delete; -#else - #define _TTHREAD_DISABLE_ASSIGNMENT(name) \ - name(const name&); \ - name& operator=(const name&); -#endif - -/// @def thread_local -/// Thread local storage keyword. -/// A variable that is declared with the @c thread_local keyword makes the -/// value of the variable local to each thread (known as thread-local storage, -/// or TLS). Example usage: -/// @code -/// // This variable is local to each thread. -/// thread_local int variable; -/// @endcode -/// @note The @c thread_local keyword is a macro that maps to the corresponding -/// compiler directive (e.g. @c __declspec(thread)). While the C++11 standard -/// allows for non-trivial types (e.g. classes with constructors and -/// destructors) to be declared with the @c thread_local keyword, most pre-C++11 -/// compilers only allow for trivial types (e.g. @c int). So, to guarantee -/// portable code, only use trivial types for thread local storage. -/// @note This directive is currently not supported on Mac OS X (it will give -/// a compiler error), since compile-time TLS is not supported in the Mac OS X -/// executable format. Also, some older versions of MinGW (before GCC 4.x) do -/// not support this directive. -/// @hideinitializer - -#if !defined(_TTHREAD_CPP11_) && !defined(thread_local) - #if defined(__GNUC__) || defined(__INTEL_COMPILER) || defined(__SUNPRO_CC) || defined(__IBMCPP__) - #define thread_local __thread - #else - #define thread_local __declspec(thread) - #endif -#endif - - -/// Main name space for TinyThread++. -/// This namespace is more or less equivalent to the @c std namespace for the -/// C++11 thread classes. For instance, the tthread::mutex class corresponds to -/// the std::mutex class. -namespace tthread { - -/// Mutex class. -/// This is a mutual exclusion object for synchronizing access to shared -/// memory areas for several threads. The mutex is non-recursive (i.e. a -/// program may deadlock if the thread that owns a mutex object calls lock() -/// on that object). -/// @see recursive_mutex -class mutex { - public: - /// Constructor. - mutex() -#if defined(_TTHREAD_WIN32_) - : mAlreadyLocked(false) -#endif - { -#if defined(_TTHREAD_WIN32_) - InitializeCriticalSection(&mHandle); -#else - pthread_mutex_init(&mHandle, NULL); -#endif - } - - /// Destructor. - ~mutex() - { -#if defined(_TTHREAD_WIN32_) - DeleteCriticalSection(&mHandle); -#else - pthread_mutex_destroy(&mHandle); -#endif - } - - /// Lock the mutex. - /// The method will block the calling thread until a lock on the mutex can - /// be obtained. The mutex remains locked until @c unlock() is called. - /// @see lock_guard - inline void lock() - { -#if defined(_TTHREAD_WIN32_) - EnterCriticalSection(&mHandle); - while(mAlreadyLocked) Sleep(1000); // Simulate deadlock... - mAlreadyLocked = true; -#else - pthread_mutex_lock(&mHandle); -#endif - } - - /// Try to lock the mutex. - /// The method will try to lock the mutex. If it fails, the function will - /// return immediately (non-blocking). - /// @return @c true if the lock was acquired, or @c false if the lock could - /// not be acquired. - inline bool try_lock() - { -#if defined(_TTHREAD_WIN32_) - bool ret = (TryEnterCriticalSection(&mHandle) ? true : false); - if(ret && mAlreadyLocked) - { - LeaveCriticalSection(&mHandle); - ret = false; - } - return ret; -#else - return (pthread_mutex_trylock(&mHandle) == 0) ? true : false; -#endif - } - - /// Unlock the mutex. - /// If any threads are waiting for the lock on this mutex, one of them will - /// be unblocked. - inline void unlock() - { -#if defined(_TTHREAD_WIN32_) - mAlreadyLocked = false; - LeaveCriticalSection(&mHandle); -#else - pthread_mutex_unlock(&mHandle); -#endif - } - - _TTHREAD_DISABLE_ASSIGNMENT(mutex) - - private: -#if defined(_TTHREAD_WIN32_) - CRITICAL_SECTION mHandle; - bool mAlreadyLocked; -#else - pthread_mutex_t mHandle; -#endif - - friend class condition_variable; -}; - -/// Recursive mutex class. -/// This is a mutual exclusion object for synchronizing access to shared -/// memory areas for several threads. The mutex is recursive (i.e. a thread -/// may lock the mutex several times, as long as it unlocks the mutex the same -/// number of times). -/// @see mutex -class recursive_mutex { - public: - /// Constructor. - recursive_mutex() - { -#if defined(_TTHREAD_WIN32_) - InitializeCriticalSection(&mHandle); -#else - pthread_mutexattr_t attr; - pthread_mutexattr_init(&attr); - pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE); - pthread_mutex_init(&mHandle, &attr); -#endif - } - - /// Destructor. - ~recursive_mutex() - { -#if defined(_TTHREAD_WIN32_) - DeleteCriticalSection(&mHandle); -#else - pthread_mutex_destroy(&mHandle); -#endif - } - - /// Lock the mutex. - /// The method will block the calling thread until a lock on the mutex can - /// be obtained. The mutex remains locked until @c unlock() is called. - /// @see lock_guard - inline void lock() - { -#if defined(_TTHREAD_WIN32_) - EnterCriticalSection(&mHandle); -#else - pthread_mutex_lock(&mHandle); -#endif - } - - /// Try to lock the mutex. - /// The method will try to lock the mutex. If it fails, the function will - /// return immediately (non-blocking). - /// @return @c true if the lock was acquired, or @c false if the lock could - /// not be acquired. - inline bool try_lock() - { -#if defined(_TTHREAD_WIN32_) - return TryEnterCriticalSection(&mHandle) ? true : false; -#else - return (pthread_mutex_trylock(&mHandle) == 0) ? true : false; -#endif - } - - /// Unlock the mutex. - /// If any threads are waiting for the lock on this mutex, one of them will - /// be unblocked. - inline void unlock() - { -#if defined(_TTHREAD_WIN32_) - LeaveCriticalSection(&mHandle); -#else - pthread_mutex_unlock(&mHandle); -#endif - } - - _TTHREAD_DISABLE_ASSIGNMENT(recursive_mutex) - - private: -#if defined(_TTHREAD_WIN32_) - CRITICAL_SECTION mHandle; -#else - pthread_mutex_t mHandle; -#endif - - friend class condition_variable; -}; - -/// Lock guard class. -/// The constructor locks the mutex, and the destructor unlocks the mutex, so -/// the mutex will automatically be unlocked when the lock guard goes out of -/// scope. Example usage: -/// @code -/// mutex m; -/// int counter; -/// -/// void increment() -/// { -/// lock_guard guard(m); -/// ++ counter; -/// } -/// @endcode - -template -class lock_guard { - public: - typedef T mutex_type; - - lock_guard() : mMutex(0) {} - - /// The constructor locks the mutex. - explicit lock_guard(mutex_type &aMutex) - { - mMutex = &aMutex; - mMutex->lock(); - } - - /// The destructor unlocks the mutex. - ~lock_guard() - { - if(mMutex) - mMutex->unlock(); - } - - private: - mutex_type * mMutex; -}; - -/// Condition variable class. -/// This is a signalling object for synchronizing the execution flow for -/// several threads. Example usage: -/// @code -/// // Shared data and associated mutex and condition variable objects -/// int count; -/// mutex m; -/// condition_variable cond; -/// -/// // Wait for the counter to reach a certain number -/// void wait_counter(int targetCount) -/// { -/// lock_guard guard(m); -/// while(count < targetCount) -/// cond.wait(m); -/// } -/// -/// // Increment the counter, and notify waiting threads -/// void increment() -/// { -/// lock_guard guard(m); -/// ++ count; -/// cond.notify_all(); -/// } -/// @endcode -class condition_variable { - public: - /// Constructor. -#if defined(_TTHREAD_WIN32_) - condition_variable(); -#else - condition_variable() - { - pthread_cond_init(&mHandle, NULL); - } -#endif - - /// Destructor. -#if defined(_TTHREAD_WIN32_) - ~condition_variable(); -#else - ~condition_variable() - { - pthread_cond_destroy(&mHandle); - } -#endif - - /// Wait for the condition. - /// The function will block the calling thread until the condition variable - /// is woken by @c notify_one(), @c notify_all() or a spurious wake up. - /// @param[in] aMutex A mutex that will be unlocked when the wait operation - /// starts, an locked again as soon as the wait operation is finished. - template - inline void wait(_mutexT &aMutex) - { -#if defined(_TTHREAD_WIN32_) - // Increment number of waiters - EnterCriticalSection(&mWaitersCountLock); - ++ mWaitersCount; - LeaveCriticalSection(&mWaitersCountLock); - - // Release the mutex while waiting for the condition (will decrease - // the number of waiters when done)... - aMutex.unlock(); - _wait(); - aMutex.lock(); -#else - pthread_cond_wait(&mHandle, &aMutex.mHandle); -#endif - } - - /// Notify one thread that is waiting for the condition. - /// If at least one thread is blocked waiting for this condition variable, - /// one will be woken up. - /// @note Only threads that started waiting prior to this call will be - /// woken up. -#if defined(_TTHREAD_WIN32_) - void notify_one(); -#else - inline void notify_one() - { - pthread_cond_signal(&mHandle); - } -#endif - - /// Notify all threads that are waiting for the condition. - /// All threads that are blocked waiting for this condition variable will - /// be woken up. - /// @note Only threads that started waiting prior to this call will be - /// woken up. -#if defined(_TTHREAD_WIN32_) - void notify_all(); -#else - inline void notify_all() - { - pthread_cond_broadcast(&mHandle); - } -#endif - - _TTHREAD_DISABLE_ASSIGNMENT(condition_variable) - - private: -#if defined(_TTHREAD_WIN32_) - void _wait(); - HANDLE mEvents[2]; ///< Signal and broadcast event HANDLEs. - unsigned int mWaitersCount; ///< Count of the number of waiters. - CRITICAL_SECTION mWaitersCountLock; ///< Serialize access to mWaitersCount. -#else - pthread_cond_t mHandle; -#endif -}; - - -/// Thread class. -class thread { - public: -#if defined(_TTHREAD_WIN32_) - typedef HANDLE native_handle_type; -#else - typedef pthread_t native_handle_type; -#endif - - class id; - - /// Default constructor. - /// Construct a @c thread object without an associated thread of execution - /// (i.e. non-joinable). - thread() : mHandle(0), mNotAThread(true) -#if defined(_TTHREAD_WIN32_) - , mWin32ThreadID(0) -#endif - {} - - /// Thread starting constructor. - /// Construct a @c thread object with a new thread of execution. - /// @param[in] aFunction A function pointer to a function of type: - /// void fun(void * arg) - /// @param[in] aArg Argument to the thread function. - /// @note This constructor is not fully compatible with the standard C++ - /// thread class. It is more similar to the pthread_create() (POSIX) and - /// CreateThread() (Windows) functions. - thread(void (*aFunction)(void *), void * aArg); - - /// Destructor. - /// @note If the thread is joinable upon destruction, @c std::terminate() - /// will be called, which terminates the process. It is always wise to do - /// @c join() before deleting a thread object. - ~thread(); - - /// Wait for the thread to finish (join execution flows). - /// After calling @c join(), the thread object is no longer associated with - /// a thread of execution (i.e. it is not joinable, and you may not join - /// with it nor detach from it). - void join(); - - /// Check if the thread is joinable. - /// A thread object is joinable if it has an associated thread of execution. - bool joinable() const; - - /// Detach from the thread. - /// After calling @c detach(), the thread object is no longer assicated with - /// a thread of execution (i.e. it is not joinable). The thread continues - /// execution without the calling thread blocking, and when the thread - /// ends execution, any owned resources are released. - void detach(); - - /// Return the thread ID of a thread object. - id get_id() const; - - /// Get the native handle for this thread. - /// @note Under Windows, this is a @c HANDLE, and under POSIX systems, this - /// is a @c pthread_t. - inline native_handle_type native_handle() - { - return mHandle; - } - - /// Determine the number of threads which can possibly execute concurrently. - /// This function is useful for determining the optimal number of threads to - /// use for a task. - /// @return The number of hardware thread contexts in the system. - /// @note If this value is not defined, the function returns zero (0). - static unsigned hardware_concurrency(); - - _TTHREAD_DISABLE_ASSIGNMENT(thread) - - private: - native_handle_type mHandle; ///< Thread handle. - mutable mutex mDataMutex; ///< Serializer for access to the thread private data. - bool mNotAThread; ///< True if this object is not a thread of execution. -#if defined(_TTHREAD_WIN32_) - unsigned int mWin32ThreadID; ///< Unique thread ID (filled out by _beginthreadex). -#endif - - // This is the internal thread wrapper function. -#if defined(_TTHREAD_WIN32_) - static unsigned WINAPI wrapper_function(void * aArg); -#else - static void * wrapper_function(void * aArg); -#endif -}; - -/// Thread ID. -/// The thread ID is a unique identifier for each thread. -/// @see thread::get_id() -class thread::id { - public: - /// Default constructor. - /// The default constructed ID is that of thread without a thread of - /// execution. - id() : mId(0) {}; - - id(unsigned long int aId) : mId(aId) {}; - - id(const id& aId) : mId(aId.mId) {}; - - inline id & operator=(const id &aId) - { - mId = aId.mId; - return *this; - } - - inline friend bool operator==(const id &aId1, const id &aId2) - { - return (aId1.mId == aId2.mId); - } - - inline friend bool operator!=(const id &aId1, const id &aId2) - { - return (aId1.mId != aId2.mId); - } - - inline friend bool operator<=(const id &aId1, const id &aId2) - { - return (aId1.mId <= aId2.mId); - } - - inline friend bool operator<(const id &aId1, const id &aId2) - { - return (aId1.mId < aId2.mId); - } - - inline friend bool operator>=(const id &aId1, const id &aId2) - { - return (aId1.mId >= aId2.mId); - } - - inline friend bool operator>(const id &aId1, const id &aId2) - { - return (aId1.mId > aId2.mId); - } - - inline friend std::ostream& operator <<(std::ostream &os, const id &obj) - { - os << obj.mId; - return os; - } - - private: - unsigned long int mId; -}; - - -// Related to - minimal to be able to support chrono. -typedef long long __intmax_t; - -/// Minimal implementation of the @c ratio class. This class provides enough -/// functionality to implement some basic @c chrono classes. -template <__intmax_t N, __intmax_t D = 1> class ratio { - public: - static double _as_double() { return double(N) / double(D); } -}; - -/// Minimal implementation of the @c chrono namespace. -/// The @c chrono namespace provides types for specifying time intervals. -namespace chrono { - /// Duration template class. This class provides enough functionality to - /// implement @c this_thread::sleep_for(). - template > class duration { - private: - _Rep rep_; - public: - typedef _Rep rep; - typedef _Period period; - - /// Construct a duration object with the given duration. - template - explicit duration(const _Rep2& r) : rep_(r) {}; - - /// Return the value of the duration object. - rep count() const - { - return rep_; - } - }; - - // Standard duration types. - typedef duration<__intmax_t, ratio<1, 1000000000> > nanoseconds; ///< Duration with the unit nanoseconds. - typedef duration<__intmax_t, ratio<1, 1000000> > microseconds; ///< Duration with the unit microseconds. - typedef duration<__intmax_t, ratio<1, 1000> > milliseconds; ///< Duration with the unit milliseconds. - typedef duration<__intmax_t> seconds; ///< Duration with the unit seconds. - typedef duration<__intmax_t, ratio<60> > minutes; ///< Duration with the unit minutes. - typedef duration<__intmax_t, ratio<3600> > hours; ///< Duration with the unit hours. -} - -/// The namespace @c this_thread provides methods for dealing with the -/// calling thread. -namespace this_thread { - /// Return the thread ID of the calling thread. - thread::id get_id(); - - /// Yield execution to another thread. - /// Offers the operating system the opportunity to schedule another thread - /// that is ready to run on the current processor. - inline void yield() - { -#if defined(_TTHREAD_WIN32_) - Sleep(0); -#else - sched_yield(); -#endif - } - - /// Blocks the calling thread for a period of time. - /// @param[in] aTime Minimum time to put the thread to sleep. - /// Example usage: - /// @code - /// // Sleep for 100 milliseconds - /// this_thread::sleep_for(chrono::milliseconds(100)); - /// @endcode - /// @note Supported duration types are: nanoseconds, microseconds, - /// milliseconds, seconds, minutes and hours. - template void sleep_for(const chrono::duration<_Rep, _Period>& aTime) - { -#if defined(_TTHREAD_WIN32_) - Sleep(int(double(aTime.count()) * (1000.0 * _Period::_as_double()) + 0.5)); -#else - usleep(int(double(aTime.count()) * (1000000.0 * _Period::_as_double()) + 0.5)); -#endif - } -} - -} - -// Define/macro cleanup -#undef _TTHREAD_DISABLE_ASSIGNMENT - -#endif // _TINYTHREAD_H_ diff --git a/ext/vld/lib/vld.lib b/ext/vld/lib/vld.lib deleted file mode 100644 index 6325a37c82..0000000000 Binary files a/ext/vld/lib/vld.lib and /dev/null differ diff --git a/ext/vld/vld.h b/ext/vld/vld.h deleted file mode 100644 index 52686dcb8c..0000000000 --- a/ext/vld/vld.h +++ /dev/null @@ -1,343 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// -// Visual Leak Detector - Import Library Header -// Copyright (c) 2005-2014 VLD Team -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -// -// See COPYING.txt for the full terms of the GNU Lesser General Public License. -// -//////////////////////////////////////////////////////////////////////////////// - -#pragma once - -#include "vld_def.h" - -typedef int VLD_BOOL; -typedef unsigned int VLD_UINT; -typedef size_t VLD_SIZET; -typedef void* VLD_HMODULE; - -#if defined _DEBUG || defined VLD_FORCE_ENABLE - -#pragma comment(lib, "vld.lib") - -// Force a symbolic reference to the global VisualLeakDetector class object from -// the DLL. This ensures that the DLL is loaded and linked with the program, -// even if no code otherwise imports any of the DLL's exports. -#pragma comment(linker, "/include:__imp_?g_vld@@3VVisualLeakDetector@@A") - -//////////////////////////////////////////////////////////////////////////////// -// -// Visual Leak Detector APIs -// - -#ifdef __cplusplus -extern "C" { -#endif // __cplusplus - -// VLDDisable - Disables Visual Leak Detector's memory leak detection at -// runtime. If memory leak detection is already disabled, then calling this -// function has no effect. -// -// Note: In multithreaded programs, this function operates on a per-thread -// basis. In other words, if you call this function from one thread, then -// memory leak detection is only disabled for that thread. If memory leak -// detection is enabled for other threads, then it will remain enabled for -// those other threads. It was designed to work this way to insulate you, -// the programmer, from having to ensure thread synchronization when calling -// VLDEnable() and VLDDisable(). Without this, calling these two functions -// unsynchronized could result in unpredictable and unintended behavior. -// But this also means that if you want to disable memory leak detection -// process-wide, then you need to call this function from every thread in -// the process. -// -// Return Value: -// -// None. -// -__declspec(dllimport) void VLDDisable (); - -// VLDEnable - Enables Visual Leak Detector's memory leak detection at runtime. -// If memory leak detection is already enabled, which it is by default, then -// calling this function has no effect. -// -// Note: In multithreaded programs, this function operates on a per-thread -// basis. In other words, if you call this function from one thread, then -// memory leak detection is only enabled for that thread. If memory leak -// detection is disabled for other threads, then it will remain disabled for -// those other threads. It was designed to work this way to insulate you, -// the programmer, from having to ensure thread synchronization when calling -// VLDEnable() and VLDDisable(). Without this, calling these two functions -// unsynchronized could result in unpredictable and unintended behavior. -// But this also means that if you want to enable memory leak detection -// process-wide, then you need to call this function from every thread in -// the process. -// -// Return Value: -// -// None. -// -__declspec(dllimport) void VLDEnable (); - -// VLDRestore - Restore Visual Leak Detector's previous state. -// -// Return Value: -// -// None. -// -__declspec(dllimport) void VLDRestore (); - -// VLDGlobalDisable - Disables Visual Leak Detector's memory leak detection at -// runtime in all threads. If memory leak detection is already disabled, -// then calling this function has no effect. -// -// Return Value: -// -// None. -// -__declspec(dllimport) void VLDGlobalDisable (); - -// VLDGlobalEnable - Enables Visual Leak Detector's memory leak detection -// at runtime in all threads. If memory leak detection is already enabled, -// which it is by default, then calling this function has no effect. -// -// Return Value: -// -// None. -// -__declspec(dllimport) void VLDGlobalEnable (); - -// VLDReportLeaks - Report leaks up to the execution point. -// -// Return Value: -// -// None. -// -__declspec(dllimport) VLD_UINT VLDReportLeaks (); - -// VLDReportThreadLeaks - Report thread leaks up to the execution point. -// -// threadId: thread Id. -// -// Return Value: -// -// None. -// -__declspec(dllimport) VLD_UINT VLDReportThreadLeaks (VLD_UINT threadId); - -// VLDGetLeaksCount - Return memory leaks count to the execution point. -// -// Return Value: -// -// None. -// -__declspec(dllimport) VLD_UINT VLDGetLeaksCount (); - -// VLDGetThreadLeaksCount - Return thread memory leaks count to the execution point. -// -// threadId: thread Id. -// -// Return Value: -// -// None. -// -__declspec(dllimport) VLD_UINT VLDGetThreadLeaksCount (VLD_UINT threadId); - -// VLDMarkAllLeaksAsReported - Mark all leaks as reported. -// -// Return Value: -// -// None. -// -__declspec(dllimport) void VLDMarkAllLeaksAsReported (); - -// VLDMarkThreadLeaksAsReported - Mark thread leaks as reported. -// -// threadId: thread Id. -// -// Return Value: -// -// None. -// -__declspec(dllimport) void VLDMarkThreadLeaksAsReported (VLD_UINT threadId); - - -// VLDRefreshModules - Look for recently loaded DLLs and patch them if necessary. -// -// Return Value: -// -// None. -// -__declspec(dllimport) void VLDRefreshModules(); - - -// VLDEnableModule - Enable Memory leak checking on the specified module. -// -// module: module handle. -// -// Return Value: -// -// None. -// - -__declspec(dllimport) void VLDEnableModule(VLD_HMODULE module); - - -// VLDDisableModule - Disable Memory leak checking on the specified module. -// -// module: module handle. -// -// Return Value: -// -// None. -// -__declspec(dllimport) void VLDDisableModule(VLD_HMODULE module); - -// VLDGetOptions - Return all current options. -// -// Return Value: -// -// Mask of current options. -// -__declspec(dllimport) VLD_UINT VLDGetOptions(); - -// VLDGetReportFilename - Return current report filename. -// -// filename: current report filename (max characters - MAX_PATH). -// -// Return Value: -// -// None. -// -__declspec(dllimport) void VLDGetReportFilename(wchar_t *filename); - -// VLDSetOptions - Update the report options via function call rather than INI file. -// -// option_mask: Only the following flags are checked -// VLD_OPT_AGGREGATE_DUPLICATES -// VLD_OPT_MODULE_LIST_INCLUDE -// VLD_OPT_SAFE_STACK_WALK -// VLD_OPT_SLOW_DEBUGGER_DUMP -// VLD_OPT_TRACE_INTERNAL_FRAMES -// VLD_OPT_START_DISABLED -// VLD_OPT_SKIP_HEAPFREE_LEAKS -// VLD_OPT_VALIDATE_HEAPFREE -// -// maxDataDump: maximum number of user-data bytes to dump for each leaked block. -// -// maxTraceFrames: maximum number of frames per stack trace for each leaked block. -// -// Return Value: -// -// None. -// -__declspec(dllimport) void VLDSetOptions(VLD_UINT option_mask, VLD_SIZET maxDataDump, VLD_UINT maxTraceFrames); - -// VLDSetModulesList - Set list of modules included/excluded in leak detection -// depending on parameter "includeModules". -// -// modules: list of modules to be forcefully included/excluded in leak detection. -// -// includeModules: include or exclude that modules. -// -// Return Value: -// -// None. -// -__declspec(dllimport) void VLDSetModulesList(const wchar_t *modules, VLD_BOOL includeModules); - -// VLDGetModulesList - Return current list of included/excluded modules -// depending on flag VLD_OPT_TRACE_INTERNAL_FRAMES. -// -// modules: destination string for list of included/excluded modules (maximum length 512 characters). -// -// size: maximum string size. -// -// Return Value: -// -// VLD_BOOL: TRUE if include modules, otherwise FALSE. -// -__declspec(dllimport) VLD_BOOL VLDGetModulesList(wchar_t *modules, VLD_UINT size); - -// VLDSetReportOptions - Update the report options via function call rather than INI file. -// -// Only the following flags are checked -// VLD_OPT_REPORT_TO_DEBUGGER -// VLD_OPT_REPORT_TO_FILE -// VLD_OPT_REPORT_TO_STDOUT -// VLD_OPT_UNICODE_REPORT -// -// filename is optional and can be NULL. -// -// Return Value: -// -// None. -// -__declspec(dllimport) void VLDSetReportOptions(VLD_UINT option_mask, const wchar_t *filename); - -// VLDSetReportHook - Installs or uninstalls a client-defined reporting function by hooking it -// into the C run-time debug reporting process (debug version only). -// -// mode: The action to take: VLD_RPTHOOK_INSTALL or VLD_RPTHOOK_REMOVE. -// -// pfnNewHook: Report hook to install or remove. -// -// Return Value: -// -// int: 0 if success. -// -__declspec(dllimport) int VLDSetReportHook(int mode, VLD_REPORT_HOOK pfnNewHook); - -// VLDResolveCallstacks - Performs symbol resolution for all saved extent CallStack's that have -// been tracked by Visual Leak Detector. This function is necessary for applications that -// dynamically load and unload modules, and through which memory leaks might be included. -// If this is NOT called, stack traces may have stack frames with no symbol information. This -// happens because the symbol API's cannot look up symbols for a binary / module that has been unloaded -// from the process. -// -// Return Value: -// -// None. -// -__declspec(dllexport) void VLDResolveCallstacks(); - -#ifdef __cplusplus -} -#endif // __cplusplus - -#else // !_DEBUG - -#define VLDEnable() -#define VLDDisable() -#define VLDRestore() -#define VLDReportLeaks() (0) -#define VLDReportThreadLeaks() (0) -#define VLDGetLeaksCount() (0) -#define VLDGetThreadLeaksCount() (0) -#define VLDMarkAllLeaksAsReported() -#define VLDMarkThreadLeaksAsReported(a) -#define VLDRefreshModules() -#define VLDEnableModule(a) -#define VLDDisableModule(b) -#define VLDGetOptions() (0) -#define VLDGetReportFilename(a) -#define VLDSetOptions(a, b, c) -#define VLDSetReportHook(a, b) -#define VLDSetModulesList(a) -#define VLDGetModulesList(a, b) (FALSE) -#define VLDSetReportOptions(a, b) - -#endif // _DEBUG diff --git a/ext/vld/vld_def.h b/ext/vld/vld_def.h deleted file mode 100644 index 4b6d92ed89..0000000000 --- a/ext/vld/vld_def.h +++ /dev/null @@ -1,46 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// -// Visual Leak Detector - Import Library Header -// Copyright (c) 2005-2014 VLD Team -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -// -// See COPYING.txt for the full terms of the GNU Lesser General Public License. -// -//////////////////////////////////////////////////////////////////////////////// - -#pragma once - -#include - -#define VLD_OPT_AGGREGATE_DUPLICATES 0x0001 // If set, aggregate duplicate leaks in the leak report. -#define VLD_OPT_MODULE_LIST_INCLUDE 0x0002 // If set, modules in the module list are included, all others are excluded. -#define VLD_OPT_REPORT_TO_DEBUGGER 0x0004 // If set, the memory leak report is sent to the debugger. -#define VLD_OPT_REPORT_TO_FILE 0x0008 // If set, the memory leak report is sent to a file. -#define VLD_OPT_SAFE_STACK_WALK 0x0010 // If set, the stack is walked using the "safe" method (StackWalk64). -#define VLD_OPT_SELF_TEST 0x0020 // If set, perform a self-test to verify memory leak self-checking. -#define VLD_OPT_SLOW_DEBUGGER_DUMP 0x0040 // If set, inserts a slight delay between sending output to the debugger. -#define VLD_OPT_START_DISABLED 0x0080 // If set, memory leak detection will initially disabled. -#define VLD_OPT_TRACE_INTERNAL_FRAMES 0x0100 // If set, include useless frames (e.g. internal to VLD) in call stacks. -#define VLD_OPT_UNICODE_REPORT 0x0200 // If set, the leak report will be encoded UTF-16 instead of ASCII. -#define VLD_OPT_VLDOFF 0x0400 // If set, VLD will be completely deactivated. It will not attach to any modules. -#define VLD_OPT_REPORT_TO_STDOUT 0x0800 // If set, the memory leak report is sent to stdout. -#define VLD_OPT_SKIP_HEAPFREE_LEAKS 0x1000 // If set, VLD skip HeapFree memory leaks. -#define VLD_OPT_VALIDATE_HEAPFREE 0x2000 // If set, VLD verifies and reports heap consistency for HeapFree calls. - -#define VLD_RPTHOOK_INSTALL 0 -#define VLD_RPTHOOK_REMOVE 1 - -typedef int (__cdecl * VLD_REPORT_HOOK)(int reportType, wchar_t *message, int *returnValue); diff --git a/include/openspace/camera/camera.h b/include/openspace/camera/camera.h index 460b260bbb..2c343df921 100644 --- a/include/openspace/camera/camera.h +++ b/include/openspace/camera/camera.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -78,7 +78,7 @@ public: void setAtmosphereDimmingFactor(float atmosphereDimmingFactor); // Relative mutators - void rotate(glm::dquat rotation); + void rotate(const glm::dquat& rotation); // Accessors // Remove Vec3 from the name when psc is gone diff --git a/include/openspace/camera/camerapose.h b/include/openspace/camera/camerapose.h index d17ae6c054..9e0fb90b57 100644 --- a/include/openspace/camera/camerapose.h +++ b/include/openspace/camera/camerapose.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * diff --git a/include/openspace/scene/scenelicensewriter.h b/include/openspace/data/csvloader.h similarity index 77% rename from include/openspace/scene/scenelicensewriter.h rename to include/openspace/data/csvloader.h index 4a183e3a1b..ad4b6c297c 100644 --- a/include/openspace/scene/scenelicensewriter.h +++ b/include/openspace/data/csvloader.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -22,21 +22,21 @@ * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * ****************************************************************************************/ -#ifndef __OPENSPACE_CORE___SCENELICENSEWRITER___H__ -#define __OPENSPACE_CORE___SCENELICENSEWRITER___H__ +#ifndef __OPENSPACE_CORE___CSVLOADER___H__ +#define __OPENSPACE_CORE___CSVLOADER___H__ -#include -#include +#include +#include +#include -namespace openspace { +namespace openspace::dataloader::csv { -class SceneLicenseWriter { -public: - SceneLicenseWriter(); - nlohmann::json generateJsonList() const; - nlohmann::json generateJsonGroupedByLicense() const; -}; +Dataset loadCsvFile(std::filesystem::path path, + std::optional specs = std::nullopt); -} // namespace openspace +std::vector loadTextureMapFile(std::filesystem::path path, + const std::set& texturesInData); -#endif // __OPENSPACE_CORE___SCENELICENSEWRITER___H__ +} // namespace openspace::dataloader + +#endif // __OPENSPACE_CORE___CSVLOADER___H__ diff --git a/modules/space/speckloader.h b/include/openspace/data/dataloader.h similarity index 62% rename from modules/space/speckloader.h rename to include/openspace/data/dataloader.h index 74d4150841..1641802767 100644 --- a/modules/space/speckloader.h +++ b/include/openspace/data/dataloader.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -22,20 +22,28 @@ * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * ****************************************************************************************/ -#ifndef __OPENSPACE_MODULE_SPACE___SPECKLOADER___H__ -#define __OPENSPACE_MODULE_SPACE___SPECKLOADER___H__ +#ifndef __OPENSPACE_CORE___DATALOADER___H__ +#define __OPENSPACE_CORE___DATALOADER___H__ +#include #include #include +#include #include #include #include #include -namespace openspace::speck { - -BooleanType(SkipAllZeroLines); +namespace openspace::dataloader { +/** + * A dataset representing objects with positions and various other data columns. + * Based on the SPECK format originally used for the digital universe datasets. + * Mostly used for point-data. + * + * The read data files may also have associated texture values to be used for the + * points. + */ struct Dataset { struct Variable { int index = -1; @@ -59,8 +67,16 @@ struct Dataset { }; std::vector entries; + /// This variable can be used to get an understanding of the world scale size of + /// the dataset + float maxPositionComponent = 0.f; + + bool isEmpty() const; + int index(std::string_view variableName) const; bool normalizeVariable(std::string_view variableName); + glm::vec2 findValueRange(int variableIndex) const; + glm::vec2 findValueRange(std::string_view variableName) const; }; struct Labelset { @@ -76,49 +92,50 @@ struct Labelset { }; struct ColorMap { + std::optional belowRangeColor; + std::optional aboveRangeColor; + std::optional nanColor; std::vector entries; }; namespace data { Dataset loadFile(std::filesystem::path path, - SkipAllZeroLines skipAllZeroLines = SkipAllZeroLines::Yes); + std::optional specs = std::nullopt); - std::optional loadCachedFile(std::filesystem::path path); - void saveCachedFile(const Dataset& dataset, std::filesystem::path path); + std::optional loadCachedFile(const std::filesystem::path& path); + void saveCachedFile(const Dataset& dataset, const std::filesystem::path& path); - Dataset loadFileWithCache(std::filesystem::path speckPath, - SkipAllZeroLines skipAllZeroLines = SkipAllZeroLines::Yes); + Dataset loadFileWithCache(std::filesystem::path path, + std::optional specs = std::nullopt); } // namespace data namespace label { Labelset loadFile(std::filesystem::path path, - SkipAllZeroLines skipAllZeroLines = SkipAllZeroLines::Yes); + std::optional specs = std::nullopt); - std::optional loadCachedFile(std::filesystem::path path); - void saveCachedFile(const Labelset& labelset, std::filesystem::path path); + std::optional loadCachedFile(const std::filesystem::path& path); + void saveCachedFile(const Labelset& labelset, const std::filesystem::path& path); - Labelset loadFileWithCache(std::filesystem::path speckPath, - SkipAllZeroLines skipAllZeroLines = SkipAllZeroLines::Yes); + Labelset loadFileWithCache(std::filesystem::path path); + Labelset loadFromDataset(const dataloader::Dataset& dataset); } // namespace label namespace color { ColorMap loadFile(std::filesystem::path path, - SkipAllZeroLines skipAllZeroLines = SkipAllZeroLines::Yes); + std::optional specs = std::nullopt); - std::optional loadCachedFile(std::filesystem::path path); - void saveCachedFile(const ColorMap& colorMap, std::filesystem::path path); + std::optional loadCachedFile(const std::filesystem::path& path); + void saveCachedFile(const ColorMap& colorMap, const std::filesystem::path& path); - ColorMap loadFileWithCache(std::filesystem::path path, - SkipAllZeroLines skipAllZeroLines = SkipAllZeroLines::Yes); + ColorMap loadFileWithCache(std::filesystem::path path); } // namespace color +} // namespace openspace::dataloader -} // namespace openspace::speck - -#endif // __OPENSPACE_MODULE_SPACE___SPECKLOADER___H__ +#endif // __OPENSPACE_CORE___DATALOADER___H__ diff --git a/include/openspace/data/datamapping.h b/include/openspace/data/datamapping.h new file mode 100644 index 0000000000..5554c630d9 --- /dev/null +++ b/include/openspace/data/datamapping.h @@ -0,0 +1,84 @@ +/***************************************************************************************** + * * + * OpenSpace * + * * + * Copyright (c) 2014-2025 * + * * + * 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_CORE___DATAMAPPING___H__ +#define __OPENSPACE_CORE___DATAMAPPING___H__ + +#include +#include +#include + +namespace openspace::documentation { struct Documentation; } +namespace ghoul { class Dictionary; } + +namespace openspace::dataloader { + +struct DataMapping { + static DataMapping createFromDictionary(const ghoul::Dictionary& dictionary); + static documentation::Documentation Documentation(); + + bool hasExcludeColumns() const; + bool isExcludeColumn(std::string_view column) const; + + bool checkIfAllProvidedColumnsExist(const std::vector& columns) const; + + std::optional xColumnName; + std::optional yColumnName; + std::optional zColumnName; + std::optional nameColumn; + std::optional textureColumn; + + std::optional textureMap; + + std::optional missingDataValue; + + bool isCaseSensitive = false; + + std::vector excludeColumns; + + // OBS! When new parameters are added they should be included in the generateHash + // function +}; + +/** + * Generate a string based on the data mapping, that can be used to uniquely + * identify the dataset. + */ +std::string generateHashString(const DataMapping& dm); + +bool isPositionColumn(const std::string& c, const std::optional& mapping); + +bool isColumnX(const std::string& c, const std::optional& mapping); + +bool isColumnY(const std::string& c, const std::optional& mapping); + +bool isColumnZ(const std::string& c, const std::optional& mapping); + +bool isNameColumn(const std::string& c, const std::optional& mapping); + +bool isTextureColumn(const std::string& c, const std::optional& mapping); + +} // namespace openspace::dataloader + +#endif // __OPENSPACE_CORE___DATAMAPPING___H__ diff --git a/include/openspace/data/speckloader.h b/include/openspace/data/speckloader.h new file mode 100644 index 0000000000..fe4175f9f4 --- /dev/null +++ b/include/openspace/data/speckloader.h @@ -0,0 +1,43 @@ +/***************************************************************************************** + * * + * OpenSpace * + * * + * Copyright (c) 2014-2025 * + * * + * 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_CORE___SPECKLOADER___H__ +#define __OPENSPACE_CORE___SPECKLOADER___H__ + +#include +#include +#include + +namespace openspace::dataloader::speck { + +Dataset loadSpeckFile(std::filesystem::path path, + std::optional specs = std::nullopt); + +Labelset loadLabelFile(std::filesystem::path path); + +ColorMap loadCmapFile(std::filesystem::path path); + +} // namespace openspace::dataloader::speck + +#endif // __OPENSPACE_CORE___SPECKLOADER___H__ diff --git a/include/openspace/documentation/core_registration.h b/include/openspace/documentation/core_registration.h index d0ff377dd1..91b19300ca 100644 --- a/include/openspace/documentation/core_registration.h +++ b/include/openspace/documentation/core_registration.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * diff --git a/include/openspace/documentation/documentation.h b/include/openspace/documentation/documentation.h index b369faa06c..e57e7ff262 100644 --- a/include/openspace/documentation/documentation.h +++ b/include/openspace/documentation/documentation.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -36,7 +36,10 @@ namespace ghoul { class Dictionary; } namespace openspace::documentation { +class Verifier; + BooleanType(Optional); +BooleanType(Private); /** * The TestResult structure returns the information from the #testSpecification method. It @@ -52,20 +55,24 @@ struct TestResult { * offense. */ struct Offense { - /** - * The Reason for the offense - */ + /// The Reason for the offense enum class Reason { - MissingKey, ///< The offending key that was requested was not found - WrongType, ///< The key's value was not of the expected type - Verification, ///< The value did not pass a necessary non-type verifier - UnknownIdentifier ///< The identifier for a ReferencingVerifier did not exist + /// Unknown reason + Unknown, + /// The offending key that was requested was not found + MissingKey, + /// The key's value was not of the expected type + WrongType, + /// The value did not pass a necessary non-type verifier + Verification, + /// The identifier for a ReferencingVerifier did not exist + UnknownIdentifier }; /// The offending key that caused the Offense. In the case of a nested table, /// this value will be the fully qualified name of the key std::string offender; /// The Reason that caused this offense - Reason reason; + Reason reason = Reason::Unknown; /// An optional explanation for when a verification fails std::string explanation; }; @@ -77,11 +84,10 @@ struct TestResult { * might be removed in a latter version. */ struct Warning { - /** - * The reason for the warning - */ + /// The reason for the warning enum class Reason { - Deprecated ///< The value is marked as deprecated and should not used + /// The value is marked as deprecated and should not used + Deprecated }; /// The offending key that caused the Warning. In the case of a nested table, @@ -91,7 +97,6 @@ struct TestResult { Reason reason; }; - /// Is `true` if the TestResult is positive, `false` otherwise bool success = false; /// Contains a list of offenses that were found in the test. Is empty if @@ -123,8 +128,6 @@ struct SpecificationError : public ghoul::RuntimeError { void logError(const SpecificationError& error, std::string component = ""); -struct Verifier; - /** * A DocumentationEntry provides the specification for a single key, which is tested using * the provided Verifier. Each DocumentationEntry can contain a textual documentation that @@ -133,10 +136,10 @@ struct Verifier; * DocumentationEntry::Wildcard, any key in the containing Documentation will be tested * against the provided verifier. The most convenient way of creating DocumentationEntry%s * is by using an inline initializer list such as: - *\verbatim -DocumentationEntry e = { "key", new IntVerifier, "Documentation text", Optional::Yes }; -\endverbatim - + * ``` + * DocumentationEntry e = { "key", new IntVerifier, "Documentation text", Optional::Yes }; + * ``` + * * Furthermore, these initializer lists can be crated all at once for a Documentation. * Even if the Verifier%s are specified using the `new` operators, they will not leak * memory as the DocumentationEntry takes ownership of them in the constructor. @@ -159,42 +162,50 @@ struct DocumentationEntry { * contains this DocumentationEntry will be matched * \param v The Verifier that is used to test the \p k%'s value to determine if it is * a valid value - * \param doc The textual documentation that describes the DocumentationEntry in a - * human readable format * \param opt Determines whether the Documentation containing this DocumentationEntry * must have a key \p key, or whether it is optional + * \param priv Determines whether the DocumentationEntry is considered private. If it + * is, then shall not be reported in a user-facing manner, but its values + * should still be checked when verifying the correctness and completeness of + * an entry + * \param doc The textual documentation that describes the DocumentationEntry in a + * human readable format * * \pre \p k must not be empty * \pre \p v must not be nullptr */ DocumentationEntry(std::string k, std::shared_ptr v, - Optional opt, std::string doc = ""); + Optional opt = Optional::No, Private priv = Private::No, std::string doc = ""); /** - * The constructor for a DocumentationEntry describing a key \p k in a Documentation. - * The value for the key (or each value in the case of the - * DocumentationEntry::Wildcard) is tested using the verifier \p v, that specifies the - * conditions that the \p k%'s value has to fulfill. The textual documentation - * \p doc shall describe the usage of the key-value pair and will be printed for human - * consumption for example in the DocumentationEngine. Each DocumentationEntry can - * further be \p opt. - * - * \param k The key for which this DocumentationEntry is valid. If this valid is - * equal to DocumentationEntry::Wildcard, each entry in the Documentation that - * contains this DocumentationEntry will be matched - * \param v The Verifier that is used to test the \p key%'s value to determine if it is - * a valid value. The DocumentationEntry will take ownership of the passed - * object - * \param doc The textual documentation that describes the DocumentationEntry in a - * human readable format - * \param opt Determines whether the Documentation containing this DocumentationEntry - * must have a key \p key, or whether it is optional - * - * \pre \p k must not be empty - * \pre \p v must not be nullptr - */ - DocumentationEntry(std::string k, Verifier* v, Optional opt, - std::string doc = ""); + * The constructor for a DocumentationEntry describing a key \p k in a Documentation. + * The value for the key (or each value in the case of the + * DocumentationEntry::Wildcard) is tested using the verifier \p v, that specifies the + * conditions that the \p k%'s value has to fulfill. The textual documentation + * \p doc shall describe the usage of the key-value pair and will be printed for human + * consumption for example in the DocumentationEngine. Each DocumentationEntry can + * further be \p opt. + * + * \param k The key for which this DocumentationEntry is valid. If this valid is + * equal to DocumentationEntry::Wildcard, each entry in the Documentation that + * contains this DocumentationEntry will be matched + * \param v The Verifier that is used to test the \p key%'s value to determine if it + * is a valid value. The DocumentationEntry will take ownership of the passed + * object + * \param opt Determines whether the Documentation containing this DocumentationEntry + * must have a key \p key, or whether it is optional + * \param priv Determines whether the DocumentationEntry is considered private. If it + * is, then shall not be reported in a user-facing manner, but its values + * should still be checked when verifying the correctness and completeness of + * an entry + * \param doc The textual documentation that describes the DocumentationEntry in a + * human readable format + * + * \pre \p k must not be empty + * \pre \p v must not be nullptr + */ + DocumentationEntry(std::string k, Verifier* v, Optional opt = Optional::No, + Private priv = Private::No, std::string doc = ""); /// The key that is described by this DocumentationEntry std::string key; @@ -202,11 +213,12 @@ struct DocumentationEntry { std::shared_ptr verifier; /// Determines whether the described DocumentationEntry is optional or not Optional optional; + /// Determines if the entry should be visible to the user + Private isPrivate; /// The textual description of this DocumentationEntry std::string documentation; }; - /** * This struct contains the documentation and specification for a ghoul::Dictionary. It is * used to impose restrictions on keys and values and determine whether a given @@ -214,16 +226,16 @@ struct DocumentationEntry { * #testSpecificationAndThrow methods). Each Documentation consists of a human-readable * `name`, and a list of DocumentationEntry%s that each describe a single key value. The * most convenient way of creating a Documentation is by using nested initializer lists: - *\verbatim -Documentation doc = { - "Documentation for an arbitrary dictionary", - { // A list of DocumentationEntry%s; also specified using initializer lists - { "key1", new IntVerifier, "Documentation key1", Optional::Yes }, - { "key2", new FloatVerifier, "Documentation key2" }, - { "key3", new StringVerifier } - } -}; -\endverbatim + * ``` + * Documentation doc = { + * "Documentation for an arbitrary dictionary", + * { // A list of DocumentationEntry%s; also specified using initializer lists + * { "key1", new IntVerifier, "Documentation key1", Optional::Yes }, + * { "key2", new FloatVerifier, "Documentation key2" }, + * { "key3", new StringVerifier } + * } + * }; + * ``` * * If multiple DocumentationEntries cover the same key, they are all evaluated for that * specific key. The same holds true if there is a DocumentationEntry with a @@ -231,43 +243,14 @@ Documentation doc = { * both the wildcard and the specialized entry will be evaluated. */ struct Documentation { - using DocumentationEntries = std::vector; - - /** - * Creates a Documentation with a human-readable name \p n and a list of entries - * \p ents. - * - * \param n The human-readable name of this Documentation - * \param i A unique identifier which can be used by applications (or other - * Documentation%s to reference this entry - * \param ents A list of DocumentationEntry%s that describe the individual keys for - * this entrie Documentation - */ - Documentation(std::string n, std::string i, DocumentationEntries ents = {}); - - /** - * Creates a Documentation with a human-readable name \p n. - * - * \param n The human-readable name of this Documentation - * \param ents A list of DocumentationEntry%s that describe the individual keys for - * this entrie Documentation - */ - Documentation(std::string n, DocumentationEntries ents = {}); - - /** - * Creates a Documentation. - * - * \param entries A list of DocumentationEntry%s that describe the individual keys for - * this entrie Documentation - */ - Documentation(DocumentationEntries ents = {}); - /// The human-readable name of the Documentation std::string name; /// A unique identifier which can be used to reference this Documentation std::string id; + /// A general description for the entire documented entity + std::string description; /// A list of specifications that are describing this Documentation - DocumentationEntries entries; + std::vector entries; }; /** @@ -286,20 +269,21 @@ TestResult testSpecification(const Documentation& documentation, const ghoul::Dictionary& dictionary); /** -* This method tests whether a provided ghoul::Dictionary \p dictionary adheres to the -* specification \p documentation. If the \p dictionary does not adhere to the -* specification a SpecificationError is thrown, and the exception contains the TestResult -* that contains more information about the offending keys. If the \p dictionary adheres to -* the \p documentation, the method returns normally. -* -* \param documentation The Documentation that the \p dictionary is tested against -* \param dictionary The ghoul::Dictionary that is to be tested against the -* \p documentation -* \param component The component that is using this method; this argument is passed to the -* SpecificationError that is thrown in case of not adhering to the \p documentation -* -* \throw SpecificationError If the \p dictionary does not adhere to the \p documentation -*/ + * This method tests whether a provided ghoul::Dictionary \p dictionary adheres to the + * specification \p documentation. If the \p dictionary does not adhere to the + * specification a SpecificationError is thrown, and the exception contains the TestResult + * that contains more information about the offending keys. If the \p dictionary adheres + * to the \p documentation, the method returns normally. + * + * \param documentation The Documentation that the \p dictionary is tested against + * \param dictionary The ghoul::Dictionary that is to be tested against the + * \p documentation + * \param component The component that is using this method; this argument is passed to + * the SpecificationError that is thrown in case of not adhering to the + * \p documentation + * + * \throw SpecificationError If the \p dictionary does not adhere to the \p documentation + */ void testSpecificationAndThrow(const Documentation& documentation, const ghoul::Dictionary& dictionary, std::string component); diff --git a/include/openspace/documentation/documentationengine.h b/include/openspace/documentation/documentationengine.h index 88ec3042c7..60a251a348 100644 --- a/include/openspace/documentation/documentationengine.h +++ b/include/openspace/documentation/documentationengine.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -27,6 +27,7 @@ #include #include +#include #include namespace openspace::documentation { @@ -47,8 +48,7 @@ public: * Constructor of a DuplicateDocumentationException storing the offending * Documentation for later use. * - * \param doc The Documentation whose identifier was previously - * registered + * \param doc The Documentation whose identifier was previously registered */ DuplicateDocumentationException(Documentation doc); @@ -87,12 +87,19 @@ public: */ static DocumentationEngine& ref(); - std::string generateJson() const; + void writeJavascriptDocumentation() const; + void writeJsonDocumentation() const; - nlohmann::json generateJsonJson() const; + nlohmann::json generateScriptEngineJson() const; + nlohmann::json generateFactoryManagerJson() const; + nlohmann::json generateKeybindingsJson() const; + nlohmann::json generatePropertyOwnerJson(properties::PropertyOwner* owner) const; + nlohmann::json generateLicenseGroupsJson() const; + nlohmann::json generateLicenseListJson() const; + nlohmann::json generateActionJson() const; + nlohmann::json generateEventJson() const; private: - /// The list of all Documentation%s that are stored by the DocumentationEngine std::vector _documentations; diff --git a/include/openspace/documentation/verifier.h b/include/openspace/documentation/verifier.h index dd263a6ea5..b7d4b03324 100644 --- a/include/openspace/documentation/verifier.h +++ b/include/openspace/documentation/verifier.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -41,7 +41,8 @@ namespace openspace::documentation { * Verifier. Furthermore, the Verifier::documentation method returns a human-readable * description of the Verifier subclass and what it tests for. */ -struct Verifier { +class Verifier { +public: virtual ~Verifier() = default; /** @@ -57,7 +58,7 @@ struct Verifier { * \return A TestResult struct that contains information about whether the key adheres * to the demands of the specific Verifier. If it does not, * TestResult::offenders will either contain \p key or, in the case of a - * TableVerifier, a list of all offending subkeys as fully qualified names. + * TableVerifier, a list of all offending subkeys as fully qualified names * * \post If the return values' TestResult::success is `true`, its * TestResult::offenders is empty @@ -97,10 +98,12 @@ struct Verifier { * The base class Verifier for all Verifier%s that have to test against a specific value * type. This Verifier tests whether a given key exists and whether it has the same type * as the template parameter `T`. + * * \tparam T The type against which the key's value is tested */ template -struct TemplateVerifier : public Verifier { +class TemplateVerifier : public Verifier { +public: using Type = T; /** @@ -110,7 +113,7 @@ struct TemplateVerifier : public Verifier { * \param dictionary The ghoul::Dictionary that contains the \p key to be tested * \param key The key inside the \p dictinoary that is to be tested * \return A TestResult that contains the information whether the \p key exists in the - * \p dictionary and whether the key's value's type agrees with `T`. + * \p dictionary and whether the key's value's type agrees with `T` * * \post The return values' TestResult::success is either `true` and * TestResult::offenders is empty, or it is `false` and TestResult::offenders @@ -126,7 +129,8 @@ struct TemplateVerifier : public Verifier { * A Verifier that checks whether a given key inside a ghoul::Dictionary is of type * `bool`. No implicit conversion is considered in this testing. */ -struct BoolVerifier : public TemplateVerifier { +class BoolVerifier : public TemplateVerifier { +public: std::string type() const override; }; @@ -134,7 +138,8 @@ struct BoolVerifier : public TemplateVerifier { * A Verifier that checks whether a given key inside a ghoul::Dictionary is of type * `double`. No implicit conversion is considered in this testing. */ -struct DoubleVerifier : public TemplateVerifier { +class DoubleVerifier : public TemplateVerifier { +public: std::string type() const override; }; @@ -143,7 +148,8 @@ struct DoubleVerifier : public TemplateVerifier { * `int`. It will also return `true` if the key's value is of type `double`, but is a * integer value (for example, `0.0`, `12.0`, but not `0.5`). */ -struct IntVerifier : public TemplateVerifier { +class IntVerifier : public TemplateVerifier { +public: TestResult operator()(const ghoul::Dictionary& dict, const std::string& key) const override; @@ -154,7 +160,8 @@ struct IntVerifier : public TemplateVerifier { * A Verifier that checks whether a given key inside a ghoul::Dictionary is of type * `std::string`. No implicit conversion is considered in this testing. */ -struct StringVerifier : public TemplateVerifier { +class StringVerifier : public TemplateVerifier { +public: StringVerifier(bool mustBeNotEmpty = false); TestResult operator()(const ghoul::Dictionary& dictionary, @@ -172,7 +179,8 @@ private: * A Verifier that checks whether a given string is a valid identifier, meaning that is * does not contain any whitespaces or dots */ -struct IdentifierVerifier : public StringVerifier { +class IdentifierVerifier : public StringVerifier { +public: IdentifierVerifier(); TestResult operator()(const ghoul::Dictionary& dict, @@ -187,7 +195,8 @@ struct IdentifierVerifier : public StringVerifier { * A Verifier that checks whether a given key inside a ghoul::Dictionary is a string and * refers to an existing file on disk. */ -struct FileVerifier : public StringVerifier { +class FileVerifier : public StringVerifier { +public: FileVerifier(); TestResult operator()(const ghoul::Dictionary& dict, @@ -197,10 +206,11 @@ struct FileVerifier : public StringVerifier { }; /** -* A Verifier that checks whether a given key inside a ghoul::Dictionary is a string and -* refers to an existing directory on disk. -*/ -struct DirectoryVerifier : public StringVerifier { + * A Verifier that checks whether a given key inside a ghoul::Dictionary is a string and + * refers to an existing directory on disk. + */ +class DirectoryVerifier : public StringVerifier { +public: DirectoryVerifier(); TestResult operator()(const ghoul::Dictionary& dict, @@ -211,9 +221,10 @@ struct DirectoryVerifier : public StringVerifier { /** * A Verifier that checks whether a given key inside a ghoul::Dictionary is a string and - * a valid date time + * a valid date time. */ -struct DateTimeVerifier : public StringVerifier { +class DateTimeVerifier : public StringVerifier { +public: DateTimeVerifier(); TestResult operator()(const ghoul::Dictionary& dict, @@ -232,7 +243,8 @@ struct DateTimeVerifier : public StringVerifier { * DocumentationEntry checks for a nested key `a` and this does not comply, this Verifier * will return `Table.a` as an offender. */ -struct TableVerifier : public TemplateVerifier { +class TableVerifier : public TemplateVerifier { +public: /** * This constructor takes a list of DocumentationEntry%s that are used recursively to * check the table (= ghoul::Dictionary) contained in the key's value. Similar to the @@ -241,8 +253,11 @@ struct TableVerifier : public TemplateVerifier { * \param documentationEntries The DocumentationEntry%s that are used to recursively * test the ghoul::Dictionary that is contained inside. If this list is empty, * only a type check is performed + * \param nEntries The exact number of entries that should be in the table. If the + * value is not provided, any number (including 0) is allowed */ - TableVerifier(std::vector documentationEntries = {}); + TableVerifier(std::vector documentationEntries = {}, + std::optional nEntries = std::nullopt); /** * Checks whether the \p key%'s value is a table (= ghoul::Dictionary) and (if @@ -265,12 +280,14 @@ struct TableVerifier : public TemplateVerifier { /// The documentations passed in the constructor std::vector documentations; + std::optional count; }; /** * A Verifier that checks whether all values contained in a Table are of type `string`. */ -struct StringListVerifier : public TableVerifier { +class StringListVerifier : public TableVerifier { +public: /** * Constructor for a StringListVerifier. * @@ -284,7 +301,8 @@ struct StringListVerifier : public TableVerifier { /** * A Verifier that checks whether all values contained in a Table are of type `int`. */ -struct IntListVerifier : public TableVerifier { +class IntListVerifier : public TableVerifier { +public: /** * Constructor for a IntListVerifier. * @@ -300,39 +318,42 @@ struct IntListVerifier : public TableVerifier { //---------------------------------------------------------------------------------------- /** - * This struct is the base class for all Verifier%s that check for `glm` vector types. - * The template parameter for the subclasses is the containing type, not the full vector - * type. For example to check for `glm::dvec3`, one would create a - * `Vector3Verifier`. + * This Verifier checks whether the value is of type `glm::tvec2`. */ -struct VectorVerifier {}; - -/// This Verifier checks whether the value is of type `glm::tvec2` template -struct Vector2Verifier : public TemplateVerifier>, public VectorVerifier { +class Vector2Verifier : public TemplateVerifier> { +public: std::string type() const override; }; -/// This Verifier checks whether the value is of type `glm::tvec3` +/** + * This Verifier checks whether the value is of type `glm::tvec3`. + */ template -struct Vector3Verifier : public TemplateVerifier>, public VectorVerifier { +class Vector3Verifier : public TemplateVerifier> { +public: std::string type() const override; }; -/// This Verifier checks whether the value is of type `glm::tvec4` +/** + * This Verifier checks whether the value is of type `glm::tvec4`. + */ template -struct Vector4Verifier : public TemplateVerifier>, public VectorVerifier { +class Vector4Verifier : public TemplateVerifier> { +public: std::string type() const override; }; -struct Color3Verifier : public Vector3Verifier { +class Color3Verifier : public Vector3Verifier { +public: TestResult operator()(const ghoul::Dictionary& dictionary, const std::string& key) const override; std::string type() const override; }; -struct Color4Verifier : public Vector4Verifier { +class Color4Verifier : public Vector4Verifier { +public: TestResult operator()(const ghoul::Dictionary& dictionary, const std::string& key) const override; @@ -341,13 +362,20 @@ struct Color4Verifier : public Vector4Verifier { /** * A Verifier that checks whether all values contained in a Table are of - * type `glm::tvec2` + * type `glm::tvec2`. */ template -struct Vector2ListVerifier : public TableVerifier { +class Vector2ListVerifier : public TableVerifier { +public: Vector2ListVerifier(std::string elementDocumentation = "") : TableVerifier({ - { "*", new Vector2Verifier, Optional::No, std::move(elementDocumentation) } + { + "*", + new Vector2Verifier, + Optional::No, + Private::No, + std::move(elementDocumentation) + } }) {} @@ -358,13 +386,20 @@ struct Vector2ListVerifier : public TableVerifier { /** * A Verifier that checks whether all values contained in a Table are of - * type `glm::tvec3` + * type `glm::tvec3`. */ template -struct Vector3ListVerifier : public TableVerifier { +class Vector3ListVerifier : public TableVerifier { +public: Vector3ListVerifier(std::string elementDocumentation = "") : TableVerifier({ - { "*", new Vector3Verifier, Optional::No, std::move(elementDocumentation) } + { + "*", + new Vector3Verifier, + Optional::No, + Private::No, + std::move(elementDocumentation) + } }) {} @@ -375,13 +410,20 @@ struct Vector3ListVerifier : public TableVerifier { /** * A Verifier that checks whether all values contained in a Table are of - * type `glm::tvec4` + * type `glm::tvec4`. */ template -struct Vector4ListVerifier : public TableVerifier { +class Vector4ListVerifier : public TableVerifier { +public: Vector4ListVerifier(std::string elementDocumentation = "") : TableVerifier({ - { "*", new Vector4Verifier, Optional::No, std::move(elementDocumentation) } + { + "*", + new Vector4Verifier, + Optional::No, + Private::No, + std::move(elementDocumentation) + } }) {} @@ -395,91 +437,83 @@ struct Vector4ListVerifier : public TableVerifier { //---------------------------------------------------------------------------------------- /** - * This struct is the base class for all Verifier%s that check for `glm` matrix types. - * The template parameter for the subclasses is the containing type, not the full matrix - * type. For example to check for `glm::dmat4x3`, one would create a - * `Matrix4x3Verifier`. - */ -struct MatrixVerifier {}; - -/** - * This Verifier checks whether the value is of type `glm::mat2x2` + * This Verifier checks whether the value is of type `glm::mat2x2`. */ template -struct Matrix2x2Verifier : public TemplateVerifier>, public MatrixVerifier -{ +class Matrix2x2Verifier : public TemplateVerifier> { +public: std::string type() const override; }; /** - * This Verifier checks whether the value is of type `glm::mat2x3` + * This Verifier checks whether the value is of type `glm::mat2x3`. */ template -struct Matrix2x3Verifier : public TemplateVerifier>, public MatrixVerifier -{ +class Matrix2x3Verifier : public TemplateVerifier> { +public: std::string type() const override; }; /** - * This Verifier checks whether the value is of type `glm::mat2x4` + * This Verifier checks whether the value is of type `glm::mat2x4`. */ template -struct Matrix2x4Verifier : public TemplateVerifier>, public MatrixVerifier -{ +class Matrix2x4Verifier : public TemplateVerifier> { +public: std::string type() const override; }; /** - * This Verifier checks whether the value is of type `glm::mat3x2` + * This Verifier checks whether the value is of type `glm::mat3x2`. */ template -struct Matrix3x2Verifier : public TemplateVerifier>, public MatrixVerifier -{ +class Matrix3x2Verifier : public TemplateVerifier> { +public: std::string type() const override; }; /** - * This Verifier checks whether the value is of type `glm::mat3x3` + * This Verifier checks whether the value is of type `glm::mat3x3`. */ template -struct Matrix3x3Verifier : public TemplateVerifier>, public MatrixVerifier -{ +class Matrix3x3Verifier : public TemplateVerifier> { +public: std::string type() const override; }; /** - * This Verifier checks whether the value is of type `glm::mat3x4` + * This Verifier checks whether the value is of type `glm::mat3x4`. */ template -struct Matrix3x4Verifier : public TemplateVerifier>, public MatrixVerifier -{ +class Matrix3x4Verifier : public TemplateVerifier> { +public: std::string type() const override; }; /** - * This Verifier checks whether the value is of type `glm::mat4x2` + * This Verifier checks whether the value is of type `glm::mat4x2`. */ template -struct Matrix4x2Verifier : public TemplateVerifier>, public MatrixVerifier -{ +class Matrix4x2Verifier : public TemplateVerifier> { +public: std::string type() const override; }; /** - * This Verifier checks whether the value is of type `glm::mat4x3` + * This Verifier checks whether the value is of type `glm::mat4x3`. */ template -struct Matrix4x3Verifier : public TemplateVerifier>, public MatrixVerifier -{ +class Matrix4x3Verifier : public TemplateVerifier> { +public: std::string type() const override; }; /** - * This Verifier checks whether the value is of type `glm::mat4x4` + * This Verifier checks whether the value is of type `glm::mat4x4`. */ template -struct Matrix4x4Verifier : public TemplateVerifier>, public MatrixVerifier -{ +class Matrix4x4Verifier : public TemplateVerifier> { +public: std::string type() const override; }; @@ -492,7 +526,7 @@ struct Matrix4x4Verifier : public TemplateVerifier>, public Matr * takes two template parameters. The first is the Verifier that one would use to only * check for the type of the object, for example IntVerifier. The second argument is a * function object that has its `operator()` function overloaded and returns a boolean - * value. In these cases, the `std` function objects `std::less`, `std::equal_to, etc are + * value. In these cases, the `std` function objects `std::less`, `std::equal_to`, etc are * used. * * This verifier will apply the `Operator` to the stored value and the incoming value @@ -503,10 +537,12 @@ struct Matrix4x4Verifier : public TemplateVerifier>, public Matr * reason TestResult::Offense::Verification is returned instead. */ template -struct OperatorVerifier : public T { +class OperatorVerifier : public T { +public: /** * Constructor for an OperatorVerifier. As all operators need to compare the incoming * value to a stored value, we require the comparison \p value to be passed in here. + * * \param value The value against which the tested value is compared using the * `Operator` */ @@ -524,7 +560,7 @@ struct OperatorVerifier : public T { * \p key%'s value has the wrong type, it will be added to the TestResult's * offense list with the reason TestResult::Offense::Reason::WrongType; if the * `Operator` returns false, it will be added with the reason - * TestResult::Offense::Verification instead. + * TestResult::Offense::Verification instead */ TestResult operator()(const ghoul::Dictionary& dictionary, const std::string& key) const override; @@ -539,18 +575,17 @@ struct OperatorVerifier : public T { * as) BoolVerifier, StringVerifier, TableVerifier, or VectorVerifier. */ template -struct LessVerifier : public OperatorVerifier> { - static_assert(!std::is_base_of::value, "T cannot be BoolVerifier"); - static_assert( - !std::is_base_of::value, "T cannot be StringVerifier" - ); - static_assert(!std::is_base_of::value, "T cannot be TableVerifier"); - +class LessVerifier : public OperatorVerifier> { +public: using OperatorVerifier>::OperatorVerifier; + using OperatorVerifier>::value; std::string documentation() const override; - using OperatorVerifier>::value; +private: + static_assert(!std::is_base_of_v, "T cannot be BoolVerifier"); + static_assert(!std::is_base_of_v, "T cannot be StringVerifier"); + static_assert(!std::is_base_of_v, "T cannot be TableVerifier"); }; /** @@ -559,19 +594,17 @@ struct LessVerifier : public OperatorVerifier> { * as) BoolVerifier, StringVerifier, TableVerifier, or VectorVerifier. */ template -struct LessEqualVerifier : public OperatorVerifier> { - static_assert(!std::is_base_of::value, "T cannot be BoolVerifier"); - static_assert( - !std::is_base_of::value, - "T cannot be StringVerifier" - ); - static_assert(!std::is_base_of::value, "T cannot be TableVerifier"); - +class LessEqualVerifier : public OperatorVerifier> { +public: using OperatorVerifier>::OperatorVerifier; + using OperatorVerifier>::value; std::string documentation() const override; - using OperatorVerifier>::value; +private: + static_assert(!std::is_base_of_v, "T cannot be BoolVerifier"); + static_assert(!std::is_base_of_v, "T cannot be StringVerifier"); + static_assert(!std::is_base_of_v, "T cannot be TableVerifier"); }; /** @@ -580,19 +613,17 @@ struct LessEqualVerifier : public OperatorVerifier -struct GreaterVerifier : public OperatorVerifier> { - static_assert(!std::is_base_of::value, "T cannot be BoolVerifier"); - static_assert( - !std::is_base_of::value, - "T cannot be StringVerifier" - ); - static_assert(!std::is_base_of::value, "T cannot be TableVerifier"); - +class GreaterVerifier : public OperatorVerifier> { +public: using OperatorVerifier>::OperatorVerifier; + using OperatorVerifier>::value; std::string documentation() const override; - using OperatorVerifier>::value; +private: + static_assert(!std::is_base_of_v, "T cannot be BoolVerifier"); + static_assert(!std::is_base_of_v, "T cannot be StringVerifier"); + static_assert(!std::is_base_of_v, "T cannot be TableVerifier"); }; /** @@ -601,21 +632,19 @@ struct GreaterVerifier : public OperatorVerifier -struct GreaterEqualVerifier : public OperatorVerifier> { - static_assert(!std::is_base_of::value, "T cannot be BoolVerifier"); - static_assert( - !std::is_base_of::value, - "T cannot be StringVerifier" - ); - static_assert(!std::is_base_of::value, "T cannot be TableVerifier"); - +public: using OperatorVerifier>::OperatorVerifier; + using OperatorVerifier>::value; std::string documentation() const override; - using OperatorVerifier>::value; +private: + static_assert(!std::is_base_of_v, "T cannot be BoolVerifier"); + static_assert(!std::is_base_of_v, "T cannot be StringVerifier"); + static_assert(!std::is_base_of_v, "T cannot be TableVerifier"); }; /** @@ -624,14 +653,15 @@ struct GreaterEqualVerifier : public OperatorVerifier -struct EqualVerifier : public OperatorVerifier> { - static_assert(!std::is_base_of::value, "T cannot be TableVerifier"); - +class EqualVerifier : public OperatorVerifier> { +public: using OperatorVerifier>::OperatorVerifier; + using OperatorVerifier>::value; std::string documentation() const override; - using OperatorVerifier>::value; +private: + static_assert(!std::is_base_of_v, "T cannot be TableVerifier"); }; /** @@ -640,14 +670,15 @@ struct EqualVerifier : public OperatorVerifier -struct UnequalVerifier : public OperatorVerifier> { - static_assert(!std::is_base_of::value, "T cannot be TableVerifier"); - +class UnequalVerifier : public OperatorVerifier> { +public: using OperatorVerifier>::OperatorVerifier; + using OperatorVerifier>::value; std::string documentation() const override; - using OperatorVerifier>::value; +private: + static_assert(!std::is_base_of_v, "T cannot be TableVerifier"); }; //---------------------------------------------------------------------------------------- @@ -661,9 +692,8 @@ struct UnequalVerifier : public OperatorVerifier -struct InListVerifier : public T { - static_assert(!std::is_base_of::value, "T cannot be TableVerifier"); - +class InListVerifier : public T { +public: /** * Constructs an InListVerifier that checks whether the incoming value is of the * correct type and whether the value is part of the list passed as \p values. @@ -683,7 +713,7 @@ struct InListVerifier : public T { * \p key%'s value has the wrong type, it will be added to the TestResult's * offense list with the reason TestResult::Offense::Reason::WrongType; if the * value is not in the list, it will be added with the reason - * TestResult::Offense::Verification instead. + * TestResult::Offense::Verification instead */ TestResult operator()(const ghoul::Dictionary& dictionary, const std::string& key) const override; @@ -692,6 +722,9 @@ struct InListVerifier : public T { /// The list of values against which the incoming value is tested std::vector values; + +private: + static_assert(!std::is_base_of_v, "T cannot be TableVerifier"); }; /** @@ -701,9 +734,8 @@ struct InListVerifier : public T { * be a subclass of (or the same as) TableVerifier. */ template -struct NotInListVerifier : public T { - static_assert(!std::is_base_of::value, "T cannot be TableVerifier"); - +class NotInListVerifier : public T { +public: /** * Constructs a NotInListVerifier that checks whether the incoming value is of the * correct type and whether the value is not part of the list passed as \p values. @@ -723,7 +755,7 @@ struct NotInListVerifier : public T { * \p key%'s value has the wrong type, it will be added to the TestResult's * offense list with the reason TestResult::Offense::Reason::WrongType; if the * value is in the list, it will be added with the reason - * TestResult::Offense::Verification instead. + * TestResult::Offense::Verification instead */ TestResult operator()(const ghoul::Dictionary& dictionary, const std::string& key) const override; @@ -731,6 +763,9 @@ struct NotInListVerifier : public T { std::string documentation() const override; std::vector values; + +private: + static_assert(!std::is_base_of_v, "T cannot be TableVerifier"); }; //---------------------------------------------------------------------------------------- @@ -745,20 +780,8 @@ struct NotInListVerifier : public T { * TableVerifier, or VectorVerifier. Both the lower and the higher limit are inclusive). */ template -struct InRangeVerifier : public T { - static_assert( - !std::is_base_of::value, - "T cannot be BoolVerifier" - ); - static_assert( - !std::is_base_of::value, - "T cannot be StringVerifier" - ); - static_assert( - !std::is_base_of::value, - "T cannot be TableVerifier" - ); - +class InRangeVerifier : public T { +public: /** * Constructs a InRangeVerifier that checks whether the incoming value is of the * correct type and whether the value is greater or equal to \p lower and less or @@ -784,7 +807,7 @@ struct InRangeVerifier : public T { * offense list with the reason TestResult::Offense::Reason::WrongType; if the * value is outside the range defined by the lower and upper limits passed to * the constructor, it will be added with the reason - * TestResult::Offense::Verification instead. + * TestResult::Offense::Verification instead */ TestResult operator()(const ghoul::Dictionary& dictionary, const std::string& key) const override; @@ -793,6 +816,11 @@ struct InRangeVerifier : public T { typename T::Type lower; typename T::Type upper; + +private: + static_assert(!std::is_base_of_v, "T cannot be BoolVerifier"); + static_assert(!std::is_base_of_v, "T cannot be StringVerifier"); + static_assert(!std::is_base_of_v, "T cannot be TableVerifier"); }; /** @@ -803,20 +831,8 @@ struct InRangeVerifier : public T { * TableVerifier, or VectorVerifier. Both the lower and the higher limit are exclusive). */ template -struct NotInRangeVerifier : public T { - static_assert( - !std::is_base_of::value, - "T cannot be BoolVerifier" - ); - static_assert( - !std::is_base_of::value, - "T cannot be StringVerifier" - ); - static_assert( - !std::is_base_of::value, - "T cannot be TableVerifier" - ); - +class NotInRangeVerifier : public T { +public: /** * Constructs a InRangeVerifier that checks whether the incoming value is of the * correct type and whether the value is less then \p lower and greater than \p upper. @@ -841,7 +857,7 @@ struct NotInRangeVerifier : public T { * offense list with the reason TestResult::Offense::Reason::WrongType; if the * value is greater or equal to the lower limit and less or equal to the upper * limit, it will be added with the reason TestResult::Offense::Verification - * instead. + * instead */ TestResult operator()(const ghoul::Dictionary& dictionary, const std::string& key) const override; @@ -850,6 +866,11 @@ struct NotInRangeVerifier : public T { typename T::Type lower; typename T::Type upper; + +private: + static_assert(!std::is_base_of_v, "T cannot be BoolVerifier"); + static_assert(!std::is_base_of_v, "T cannot be StringVerifier"); + static_assert(!std::is_base_of_v, "T cannot be TableVerifier"); }; @@ -865,13 +886,14 @@ struct NotInRangeVerifier : public T { * the user that the parameter should be a file of a specific type. */ template -struct AnnotationVerifier : public T { +class AnnotationVerifier : public T { +public: /** * Constructs an AnnotationVerifier that contains the passed \p annotation which is * passed to the user when a documentation is requested. * * \param annotation The annotation that is stored and returned to the user when it - * is requested. + * is requested * * \pre annotation must not be empty */ @@ -883,34 +905,6 @@ struct AnnotationVerifier : public T { std::string annotation; }; -/** - * This Verifier is a marker that performs the same testing as the `T` parameter, but - * also adds a warning to the test result informing the user of the deprecation. - * Furthermore, the documentation will contain the word `(deprecated)` in - * addition to the documentation returned by `T` - * \tparam T The Verifier that is to be marked deprecated - */ -template -struct DeprecatedVerifier : public T { - /** - * Tests the \p dictionary%s \p key using the Verifier `T` and adds a warning to the - * TestResult informing the caller of the deprecation. - * - * \param dictionary The ghoul::Dictionary whose \p key should be tested - * \param key The key inside the \p dictionary that is to be tested - * \return A TestResult that contains the results of the testing - */ - TestResult operator()(const ghoul::Dictionary& dictionary, - const std::string& key) const override; - - /** - * Returns the documentation as reported by `T` and adds the word - * `(deprecated)` to it. - * \return The deprecated version of `T`%'s documentation - */ - std::string documentation() const override; -}; - /** * This Verifier can reference and apply other Documentation%s that have been registered * with a DocumentationEngine. The dependency is only resolved when the operator() is @@ -919,7 +913,8 @@ struct DeprecatedVerifier : public T { * If the referenced Documentation exists, the stored Table will be checked against that * Documentation. */ -struct ReferencingVerifier : public TableVerifier { +class ReferencingVerifier : public TableVerifier { +public: /** * Creates a ReferencingVerifier that references a documentation with the provided * identifier \p identifier. The ReferencingVerifier will use the static @@ -958,54 +953,14 @@ struct ReferencingVerifier : public TableVerifier { // Misc verifiers //---------------------------------------------------------------------------------------- -/** - * This Verifier takes two Verifiers and performs a boolean `and` operation on their - * results. In essence, a value only passes this Verifier if it passes both Verifier%s - * that are passed in the constructor. Opposed to the `C++` `&&` - * operator, the AndVerifier does not perform any short-circut evaluation. - */ -struct AndVerifier : public Verifier { - /** - * Constructs an AndVerifier with Verifiers that must be cleared by incoming values in - * order to pass this Verifier. - * - * \param values The list of Verifiers that are to be tested - * - * \pre values must contain at least two values - */ - AndVerifier(const std::vector values); - - /** - * Checks whether the \p dictionary contains the \p key and whether this key passes - * all Verifier%s that were passed in the constructor. If the value fails at least - * one Verifiers, it is only added once to the TestResult::offenses list with a reason - * of TestResult::Offense::Reason::Verification. - * - * \param dictionary The ghoul::Dictionary that is to be tested - * \param key The key contained in \p dictionary that is to be tested - * \return A TestResult object that contains the test results. If the value fails - * any passed Verifiers, TestResult::success is `false` and the - * TestResult::offenses list contains \p with a reason of - * TestResult::Offense::Reason::Verification. If \p key%'s value passes both - * Verifier%s, the result's TestResult::success is `true` and the - * TestResult::offenses is empty. - */ - TestResult operator()(const ghoul::Dictionary& dictionary, - const std::string& key) const override; - - std::string type() const override; - std::string documentation() const override; - - std::vector> values; -}; - /** * This Verifier takes two Verifiers and performs a boolean `or` operation on their * results. In essence, a value only passes this Verifier if it passes either of the two * Verifier%s that are passed in the constructor. Opposed to the `C++` `||` operator, the * OrVerifier does not perform any short-circut evaluation. */ -struct OrVerifier : public Verifier { +class OrVerifier : public Verifier { +public: /** * Constructs an OrVerifier with Verifiers that must be cleared by incoming values in * order to pass this Verifier. @@ -1021,7 +976,7 @@ struct OrVerifier : public Verifier { * necessary to make the codegen work in all cases without complications there */ OrVerifier(const std::vector>> values); + std::shared_ptr>>& values); /** * Checks whether the \p dictionary contains the \p key and whether this key passes @@ -1036,7 +991,7 @@ struct OrVerifier : public Verifier { * TestResult::offenses list contains \p with a reason of * TestResult::Offense::Reason::Verification. If \p key%'s value passes either * of the two Verifier%s, the result's TestResult::success is `true` and the - * TestResult::offenses is empty. + * TestResult::offenses is empty */ TestResult operator()(const ghoul::Dictionary& dictionary, const std::string& key) const override; @@ -1047,206 +1002,335 @@ struct OrVerifier : public Verifier { std::vector> values; }; -/// A short-hand definition for a Verifier checking for `glm::bvec2` +/** + * A short-hand definition for a Verifier checking for `glm::bvec2`. + */ using BoolVector2Verifier = Vector2Verifier; -/// A short-hand definition for a Verifier checking for `glm::ivec2` + +/** + * A short-hand definition for a Verifier checking for `glm::ivec2`. + */ using IntVector2Verifier = Vector2Verifier; -/// A short-hand definition for a Verifier checking for `glm::dvec2` + +/** + * A short-hand definition for a Verifier checking for `glm::dvec2`. + */ using DoubleVector2Verifier = Vector2Verifier; -/// A short-hand definition for a Verifier checking for `glm::bvec3` + +/** + * A short-hand definition for a Verifier checking for `glm::bvec3`. + */ using BoolVector3Verifier = Vector3Verifier; -/// A short-hand definition for a Verifier checking for `glm::ivec3` + +/** + * A short-hand definition for a Verifier checking for `glm::ivec3`. + */ using IntVector3Verifier = Vector3Verifier; -/// A short-hand definition for a Verifier checking for `glm::dvec3` + +/** + * A short-hand definition for a Verifier checking for `glm::dvec3`. + */ using DoubleVector3Verifier = Vector3Verifier; -/// A short-hand definition for a Verifier checking for `glm::bvec4` + +/** + * A short-hand definition for a Verifier checking for `glm::bvec4`. + */ using BoolVector4Verifier = Vector4Verifier; -/// A short-hand definition for a Verifier checking for `glm::ivec4` + +/** + * A short-hand definition for a Verifier checking for `glm::ivec4`. + */ using IntVector4Verifier = Vector4Verifier; -/// A short-hand definition for a Verifier checking for `glm::dvec4` + +/** + * A short-hand definition for a Verifier checking for `glm::dvec4`. + */ using DoubleVector4Verifier = Vector4Verifier; -/// A short-hand definition for a Verifier checking for `glm::dmat2x2` +/** + * A short-hand definition for a Verifier checking for `glm::dmat2x2`. + */ using DoubleMatrix2x2Verifier = Matrix2x2Verifier; + using DoubleMatrix2Verifier = DoubleMatrix2x2Verifier; -/// A short-hand definition for a Verifier checking for `glm::dmat2x3` + +/** + * A short-hand definition for a Verifier checking for `glm::dmat2x3`. + */ using DoubleMatrix2x3Verifier = Matrix2x3Verifier; -/// A short-hand definition for a Verifier checking for `glm::dmat2x4` + +/** + * A short-hand definition for a Verifier checking for `glm::dmat2x4`. + */ using DoubleMatrix2x4Verifier = Matrix2x4Verifier; -/// A short-hand definition for a Verifier checking for `glm::dmat3x2` + +/** + * A short-hand definition for a Verifier checking for `glm::dmat3x2`. + */ using DoubleMatrix3x2Verifier = Matrix3x2Verifier; -/// A short-hand definition for a Verifier checking for `glm::dmat3x3` + +/** + * A short-hand definition for a Verifier checking for `glm::dmat3x3`. + */ using DoubleMatrix3x3Verifier = Matrix3x3Verifier; + using DoubleMatrix3Verifier = DoubleMatrix3x3Verifier; -/// A short-hand definition for a Verifier checking for `glm::dmat3x4` + +/** + * A short-hand definition for a Verifier checking for `glm::dmat3x4`. + */ using DoubleMatrix3x4Verifier = Matrix3x4Verifier; -/// A short-hand definition for a Verifier checking for `glm::dmat4x2` + +/** + * A short-hand definition for a Verifier checking for `glm::dmat4x2`. + */ using DoubleMatrix4x2Verifier = Matrix4x2Verifier; -/// A short-hand definition for a Verifier checking for `glm::dmat4x3` + +/** + * A short-hand definition for a Verifier checking for `glm::dmat4x3`. + */ using DoubleMatrix4x3Verifier = Matrix4x3Verifier; -/// A short-hand definition for a Verifier checking for `glm::dmat4x4` + +/** + * A short-hand definition for a Verifier checking for `glm::dmat4x4`. + */ using DoubleMatrix4x4Verifier = Matrix4x4Verifier; + using DoubleMatrix4Verifier = DoubleMatrix4x4Verifier; -/// A short-hand definition for a LessVerifier with a type check for `int` +/** + * A short-hand definition for a LessVerifier with a type check for `int`. + */ using IntLessVerifier = LessVerifier; -/// A short-hand definition for a LessVerifier with a type check for `double` + +/** + * A short-hand definition for a LessVerifier with a type check for `double`. + */ using DoubleLessVerifier = LessVerifier; -/// A short-hand definition for a LessEqualVerifier with a type check for `int` + +/** + * A short-hand definition for a LessEqualVerifier with a type check for `int`. + */ using IntLessEqualVerifier = LessEqualVerifier; -/// A short-hand definition for a LessEqualVerifier with a type check for `double` + +/** + * A short-hand definition for a LessEqualVerifier with a type check for `double`. + */ using DoubleLessEqualVerifier = LessEqualVerifier; -/// A short-hand definition for a GreaterVerifier with a type check for `int` + +/** + * A short-hand definition for a GreaterVerifier with a type check for `int`. + */ using IntGreaterVerifier = GreaterVerifier; -/// A short-hand definition for a GreaterVerifier with a type check for `double` + +/** + * A short-hand definition for a GreaterVerifier with a type check for `double`. + */ using DoubleGreaterVerifier = GreaterVerifier; -/// A short-hand definition for a GreaterEqualVerifier with a type check for `int` + +/** + * A short-hand definition for a GreaterEqualVerifier with a type check for `int`. + */ using IntGreaterEqualVerifier = GreaterEqualVerifier; -/// A short-hand definition for a GreaterEqualVerifier with a type check for `double` + +/** + * A short-hand definition for a GreaterEqualVerifier with a type check for `double`. + */ using DoubleGreaterEqualVerifier = GreaterEqualVerifier; -/// A short-hand definition for a EqualVerifier with a type check for `bool` + +/** + * A short-hand definition for a EqualVerifier with a type check for `bool`. + */ using BoolEqualVerifier = EqualVerifier; -/// A short-hand definition for a EqualVerifier with a type check for `int` + +/** + * A short-hand definition for a EqualVerifier with a type check for `int`. + */ using IntEqualVerifier = EqualVerifier; -/// A short-hand definition for a EqualVerifier with a type check for `double` + +/** + * A short-hand definition for a EqualVerifier with a type check for `double`. + */ using DoubleEqualVerifier = EqualVerifier; -/// A short-hand definition for a EqualVerifier with a type check for `string` + +/** + * A short-hand definition for a EqualVerifier with a type check for `string`. + */ using StringEqualVerifier = EqualVerifier; -/// A short-hand definition for a UnequalVerifier with a type check for `bool` + +/** + * A short-hand definition for a UnequalVerifier with a type check for `bool`. + */ using BoolUnequalVerifier = UnequalVerifier; -/// A short-hand definition for a UnequalVerifier with a type check for `int` + +/** + * A short-hand definition for a UnequalVerifier with a type check for `int`. + */ using IntUnequalVerifier = UnequalVerifier; -/// A short-hand definition for a UnequalVerifier with a type check for `double` + +/** + * A short-hand definition for a UnequalVerifier with a type check for `double`. + */ using DoubleUnequalVerifier = UnequalVerifier; -/// A short-hand definition for a UnequalVerifier with a type check for `string` + +/** + * A short-hand definition for a UnequalVerifier with a type check for `string`. + */ using StringUnequalVerifier = UnequalVerifier; -/// A short-hand definition for a InListVerifier with a type check for `bool` +/** + * A short-hand definition for a InListVerifier with a type check for `bool`. + */ using BoolInListVerifier = InListVerifier; -/// A short-hand definition for a InListVerifier with a type check for `int` + +/** + * A short-hand definition for a InListVerifier with a type check for `int`. + */ using IntInListVerifier = InListVerifier; -/// A short-hand definition for a InListVerifier with a type check for `double` + +/** + * A short-hand definition for a InListVerifier with a type check for `double`. + */ using DoubleInListVerifier = InListVerifier; -/// A short-hand definition for a InListVerifier with a type check for `string` + +/** + * A short-hand definition for a InListVerifier with a type check for `string`. + */ using StringInListVerifier = InListVerifier; -/// A short-hand definition for a NotInListVerifier with a type check for `bool` + +/** + * A short-hand definition for a NotInListVerifier with a type check for `bool`. + */ using BoolNotInListVerifier = NotInListVerifier; -/// A short-hand definition for a NotInListVerifier with a type check for `int` + +/** + * A short-hand definition for a NotInListVerifier with a type check for `int`. + */ using IntNotInListVerifier = NotInListVerifier; -/// A short-hand definition for a NotInListVerifier with a type check for `double` + +/** + * A short-hand definition for a NotInListVerifier with a type check for `double`. + */ using DoubleNotInListVerifier = NotInListVerifier; -/// A short-hand definition for a NotInListVerifier with a type check for `string` + +/** + * A short-hand definition for a NotInListVerifier with a type check for `string`. + */ using StringNotInListVerifier = NotInListVerifier; -/// A short-hand definition for a InRangeVerifier with a type check for `int` +/** + * A short-hand definition for a InRangeVerifier with a type check for `int`. + */ using IntInRangeVerifier = InRangeVerifier; -/// A short-hand definition for a InRangeVerifier with a type check for `double` + +/** + * A short-hand definition for a InRangeVerifier with a type check for `double`. + */ using DoubleInRangeVerifier = InRangeVerifier; -/// A short-hand definition for a InRangeVerifier with a type check for `vec2` + +/** + * A short-hand definition for a InRangeVerifier with a type check for `vec2`. + */ using Vec2InRangeVerifier = InRangeVerifier; -/// A short-hand definition for a NotInRangeVerifier with a type check for `int` + +/** + * A short-hand definition for a NotInRangeVerifier with a type check for `int`. + */ using IntNotInRangeVerifier = NotInRangeVerifier; -/// A short-hand definition for a NotInRangeVerifier with a type check for `double` + +/** + * A short-hand definition for a NotInRangeVerifier with a type check for `double`. + */ using DoubleNotInRangeVerifier = NotInRangeVerifier; -/// A short-hand definition for a AnnotationVerifier with a type check for `bool` +/** + * A short-hand definition for a AnnotationVerifier with a type check for `bool`. + */ using BoolAnnotationVerifier = AnnotationVerifier; -/// A short-hand definition for a AnnotationVerifier with a type check for `int` -using IntAnnotationVerifier = AnnotationVerifier; -/// A short-hand definition for a AnnotationVerifier with a type check for `double` -using DoubleAnnotationVerifier = AnnotationVerifier; -/// A short-hand definition for a AnnotationVerifier with a type check for `string` -using StringAnnotationVerifier = AnnotationVerifier; -/// A short-hand definition for a AnnotationVerifier with a type check for -/// `ghoul::Dictionary` -using TableAnnotationVerifier = AnnotationVerifier; -/// A short-hand definition for a DeprecatedVerifier with a type check for `bool` -using BoolDeprecatedVerifier = DeprecatedVerifier; -/// A short-hand definition for a DeprecatedVerifier with a type check for `int` -using IntDeprecatedVerifier = DeprecatedVerifier; -/// A short-hand definition for a DeprecatedVerifier with a type check for `double` -using DoubleDeprecatedVerifier = DeprecatedVerifier; -/// A short-hand definition for a DeprecatedVerifier with a type check for `string` -using StringDeprecatedVerifier = DeprecatedVerifier; -/// A short-hand definition for a DeprecatedVerifier with a type check for -/// `ghoul::Dictionary` -using TableDeprecatedVerifier = DeprecatedVerifier; +/** + * A short-hand definition for a AnnotationVerifier with a type check for `int`. + */ +using IntAnnotationVerifier = AnnotationVerifier; + +/** + * A short-hand definition for a AnnotationVerifier with a type check for `double`. + */ +using DoubleAnnotationVerifier = AnnotationVerifier; + +/** + * A short-hand definition for a AnnotationVerifier with a type check for `string`. + */ +using StringAnnotationVerifier = AnnotationVerifier; + +/** + * A short-hand definition for a AnnotationVerifier with a type check for + * `ghoul::Dictionary` + */ +using TableAnnotationVerifier = AnnotationVerifier; // Definitions of external templates that are instantiated in the cpp file // This cuts down the compilation times as almost all of the possible template types do // not need to be instantiated multiple times -extern template struct Vector2Verifier; -extern template struct Vector2Verifier; -extern template struct Vector3Verifier; -extern template struct Vector3Verifier; -extern template struct Vector4Verifier; -extern template struct Vector4Verifier; +extern template class Vector2Verifier; +extern template class Vector2Verifier; +extern template class Vector3Verifier; +extern template class Vector3Verifier; +extern template class Vector4Verifier; +extern template class Vector4Verifier; -extern template struct Matrix2x2Verifier; -extern template struct Matrix2x3Verifier; -extern template struct Matrix2x4Verifier; -extern template struct Matrix3x2Verifier; -extern template struct Matrix3x3Verifier; -extern template struct Matrix3x4Verifier; -extern template struct Matrix4x2Verifier; -extern template struct Matrix4x3Verifier; -extern template struct Matrix4x4Verifier; +extern template class Matrix2x2Verifier; +extern template class Matrix2x3Verifier; +extern template class Matrix2x4Verifier; +extern template class Matrix3x2Verifier; +extern template class Matrix3x3Verifier; +extern template class Matrix3x4Verifier; +extern template class Matrix4x2Verifier; +extern template class Matrix4x3Verifier; +extern template class Matrix4x4Verifier; -extern template struct LessVerifier; -extern template struct LessVerifier; -extern template struct LessEqualVerifier; -extern template struct LessEqualVerifier; -extern template struct GreaterVerifier; -extern template struct GreaterVerifier; -extern template struct GreaterEqualVerifier; -extern template struct GreaterEqualVerifier; -extern template struct EqualVerifier; -extern template struct EqualVerifier; -extern template struct EqualVerifier; -extern template struct EqualVerifier; -extern template struct UnequalVerifier; -extern template struct UnequalVerifier; -extern template struct UnequalVerifier; -extern template struct UnequalVerifier; +extern template class LessVerifier; +extern template class LessVerifier; +extern template class LessEqualVerifier; +extern template class LessEqualVerifier; +extern template class GreaterVerifier; +extern template class GreaterVerifier; +extern template class GreaterEqualVerifier; +extern template class GreaterEqualVerifier; +extern template class EqualVerifier; +extern template class EqualVerifier; +extern template class EqualVerifier; +extern template class EqualVerifier; +extern template class UnequalVerifier; +extern template class UnequalVerifier; +extern template class UnequalVerifier; +extern template class UnequalVerifier; -extern template struct InListVerifier; -extern template struct InListVerifier; -extern template struct InListVerifier; -extern template struct InListVerifier; -extern template struct NotInListVerifier; -extern template struct NotInListVerifier; -extern template struct NotInListVerifier; -extern template struct NotInListVerifier; +extern template class InListVerifier; +extern template class InListVerifier; +extern template class InListVerifier; +extern template class InListVerifier; +extern template class NotInListVerifier; +extern template class NotInListVerifier; +extern template class NotInListVerifier; +extern template class NotInListVerifier; -extern template struct InRangeVerifier; -extern template struct InRangeVerifier; -extern template struct NotInRangeVerifier; -extern template struct NotInRangeVerifier; +extern template class InRangeVerifier; +extern template class InRangeVerifier; +extern template class NotInRangeVerifier; +extern template class NotInRangeVerifier; -extern template struct AnnotationVerifier; -extern template struct AnnotationVerifier; -extern template struct AnnotationVerifier; -extern template struct AnnotationVerifier; -extern template struct AnnotationVerifier; -extern template struct AnnotationVerifier; -extern template struct AnnotationVerifier; -extern template struct AnnotationVerifier; -extern template struct AnnotationVerifier; -extern template struct AnnotationVerifier; -extern template struct AnnotationVerifier; - -extern template struct DeprecatedVerifier; -extern template struct DeprecatedVerifier; -extern template struct DeprecatedVerifier; -extern template struct DeprecatedVerifier; -extern template struct DeprecatedVerifier; -extern template struct DeprecatedVerifier; -extern template struct DeprecatedVerifier; -extern template struct DeprecatedVerifier; -extern template struct DeprecatedVerifier; -extern template struct DeprecatedVerifier; -extern template struct DeprecatedVerifier; +extern template class AnnotationVerifier; +extern template class AnnotationVerifier; +extern template class AnnotationVerifier; +extern template class AnnotationVerifier; +extern template class AnnotationVerifier; +extern template class AnnotationVerifier; +extern template class AnnotationVerifier; +extern template class AnnotationVerifier; +extern template class AnnotationVerifier; +extern template class AnnotationVerifier; +extern template class AnnotationVerifier; } // namespace openspace::documentation diff --git a/include/openspace/documentation/verifier.inl b/include/openspace/documentation/verifier.inl index 4fc3cc9671..7ba00334f6 100644 --- a/include/openspace/documentation/verifier.inl +++ b/include/openspace/documentation/verifier.inl @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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,390 +24,12 @@ #include -#include +#include #include #include #include #include -template <> -struct std::less { - bool operator()(const glm::vec2& a, const glm::vec2& b) const { - return a.x < b.x && a.x < b.y; - } -}; - -template <> -struct std::less { - bool operator()(const glm::vec3& a, const glm::vec3& b) const { - return a.x < b.x && a.x < b.y && a.z < b.z; - } -}; - -template <> -struct std::less { - bool operator()(const glm::vec4& a, const glm::vec4& b) const { - return a.x < b.x && a.x < b.y && a.z < b.z && a.w < b.w; - } -}; - -template <> -struct std::less { - bool operator()(const glm::ivec2& a, const glm::ivec2& b) const { - return a.x < b.x && a.x < b.y; - } -}; - -template <> -struct std::less { - bool operator()(const glm::ivec3& a, const glm::ivec3& b) const { - return a.x < b.x && a.x < b.y && a.z < b.z; - } -}; - -template <> -struct std::less { - bool operator()(const glm::ivec4& a, const glm::ivec4& b) const { - return a.x < b.x && a.x < b.y && a.z < b.z && a.w < b.w; - } -}; - -template <> -struct std::less { - bool operator()(const glm::dvec2& a, const glm::dvec2& b) const { - return a.x < b.x && a.x < b.y; - } -}; - -template <> -struct std::less { - bool operator()(const glm::dvec3& a, const glm::dvec3& b) const { - return a.x < b.x && a.x < b.y && a.z < b.z; - } -}; - -template <> -struct std::less { - bool operator()(const glm::dvec4& a, const glm::dvec4& b) const { - return a.x < b.x && a.x < b.y && a.z < b.z && a.w < b.w; - } -}; - -template <> -struct std::less_equal { - bool operator()(const glm::vec2& a, const glm::vec2& b) const { - return a.x <= b.x && a.x <= b.y; - } -}; - -template <> -struct std::less_equal { - bool operator()(const glm::vec3& a, const glm::vec3& b) const { - return a.x <= b.x && a.x <= b.y && a.z <= b.z; - } -}; - -template <> -struct std::less_equal { - bool operator()(const glm::vec4& a, const glm::vec4& b) const { - return a.x <= b.x && a.x <= b.y && a.z <= b.z && a.w <= b.w; - } -}; - -template <> -struct std::less_equal { - bool operator()(const glm::ivec2& a, const glm::ivec2& b) const { - return a.x <= b.x && a.x <= b.y; - } -}; - -template <> -struct std::less_equal { - bool operator()(const glm::ivec3& a, const glm::ivec3& b) const { - return a.x <= b.x && a.x <= b.y && a.z <= b.z; - } -}; - -template <> -struct std::less_equal { - bool operator()(const glm::ivec4& a, const glm::ivec4& b) const { - return a.x <= b.x && a.x <= b.y && a.z <= b.z && a.w <= b.w; - } -}; - -template <> -struct std::less_equal { - bool operator()(const glm::dvec2& a, const glm::dvec2& b) const { - return a.x <= b.x && a.x <= b.y; - } -}; - -template <> -struct std::less_equal { - bool operator()(const glm::dvec3& a, const glm::dvec3& b) const { - return a.x <= b.x && a.x <= b.y && a.z <= b.z; - } -}; - -template <> -struct std::less_equal { - bool operator()(const glm::dvec4& a, const glm::dvec4& b) const { - return a.x <= b.x && a.x <= b.y && a.z <= b.z && a.w <= b.w; - } -}; - -template <> -struct std::greater { - bool operator()(const glm::vec2& a, const glm::vec2& b) const { - return a.x > b.x && a.x > b.y; - } -}; - -template <> -struct std::greater { - bool operator()(const glm::vec3& a, const glm::vec3& b) const { - return a.x > b.x && a.x > b.y && a.z > b.z; - } -}; - -template <> -struct std::greater { - bool operator()(const glm::vec4& a, const glm::vec4& b) const { - return a.x > b.x && a.x > b.y && a.z > b.z && a.w > b.w; - } -}; - -template <> -struct std::greater { - bool operator()(const glm::ivec2& a, const glm::ivec2& b) const { - return a.x > b.x && a.x > b.y; - } -}; - -template <> -struct std::greater { - bool operator()(const glm::ivec3& a, const glm::ivec3& b) const { - return a.x > b.x && a.x > b.y && a.z > b.z; - } -}; - -template <> -struct std::greater { - bool operator()(const glm::ivec4& a, const glm::ivec4& b) const { - return a.x > b.x && a.x > b.y && a.z > b.z && a.w > b.w; - } -}; - -template <> -struct std::greater { - bool operator()(const glm::dvec2& a, const glm::dvec2& b) const { - return a.x > b.x && a.x > b.y; - } -}; - -template <> -struct std::greater { - bool operator()(const glm::dvec3& a, const glm::dvec3& b) const { - return a.x > b.x && a.x > b.y && a.z > b.z; - } -}; - -template <> -struct std::greater { - bool operator()(const glm::dvec4& a, const glm::dvec4& b) const { - return a.x > b.x && a.x > b.y && a.z > b.z && a.w > b.w; - } -}; - -template <> -struct std::greater_equal { - bool operator()(const glm::vec2& a, const glm::vec2& b) const { - return a.x >= b.x && a.x >= b.y; - } -}; - -template <> -struct std::greater_equal { - bool operator()(const glm::vec3& a, const glm::vec3& b) const { - return a.x >= b.x && a.x >= b.y && a.z >= b.z; - } -}; - -template <> -struct std::greater_equal { - bool operator()(const glm::vec4& a, const glm::vec4& b) const { - return a.x >= b.x && a.x >= b.y && a.z >= b.z && a.w >= b.w; - } -}; - -template <> -struct std::greater_equal { - bool operator()(const glm::ivec2& a, const glm::ivec2& b) const { - return a.x >= b.x && a.x >= b.y; - } -}; - -template <> -struct std::greater_equal { - bool operator()(const glm::ivec3& a, const glm::ivec3& b) const { - return a.x >= b.x && a.x >= b.y && a.z >= b.z; - } -}; - -template <> -struct std::greater_equal { - bool operator()(const glm::ivec4& a, const glm::ivec4& b) const { - return a.x >= b.x && a.x >= b.y && a.z >= b.z && a.w >= b.w; - } -}; - -template <> -struct std::greater_equal { - bool operator()(const glm::dvec2& a, const glm::dvec2& b) const { - return a.x >= b.x && a.x >= b.y; - } -}; - -template <> -struct std::greater_equal { - bool operator()(const glm::dvec3& a, const glm::dvec3& b) const { - return a.x >= b.x && a.x >= b.y && a.z >= b.z; - } -}; - -template <> -struct std::greater_equal { - bool operator()(const glm::dvec4& a, const glm::dvec4& b) const { - return a.x >= b.x && a.x >= b.y && a.z >= b.z && a.w >= b.w; - } -}; - -template <> -struct std::equal_to { - bool operator()(const glm::vec2& a, const glm::vec2& b) const { - return a.x == b.x && a.x == b.y; - } -}; - -template <> -struct std::equal_to { - bool operator()(const glm::vec3& a, const glm::vec3& b) const { - return a.x == b.x && a.x == b.y && a.z == b.z; - } -}; - -template <> -struct std::equal_to { - bool operator()(const glm::vec4& a, const glm::vec4& b) const { - return a.x == b.x && a.x == b.y && a.z == b.z && a.w == b.w; - } -}; - -template <> -struct std::equal_to { - bool operator()(const glm::ivec2& a, const glm::ivec2& b) const { - return a.x == b.x && a.x == b.y; - } -}; - -template <> -struct std::equal_to { - bool operator()(const glm::ivec3& a, const glm::ivec3& b) const { - return a.x == b.x && a.x == b.y && a.z == b.z; - } -}; - -template <> -struct std::equal_to { - bool operator()(const glm::ivec4& a, const glm::ivec4& b) const { - return a.x == b.x && a.x == b.y && a.z == b.z && a.w == b.w; - } -}; - -template <> -struct std::equal_to { - bool operator()(const glm::dvec2& a, const glm::dvec2& b) const { - return a.x == b.x && a.x == b.y; - } -}; - -template <> -struct std::equal_to { - bool operator()(const glm::dvec3& a, const glm::dvec3& b) const { - return a.x == b.x && a.x == b.y && a.z == b.z; - } -}; - -template <> -struct std::equal_to { - bool operator()(const glm::dvec4& a, const glm::dvec4& b) const { - return a.x == b.x && a.x == b.y && a.z == b.z && a.w == b.w; - } -}; - -template <> -struct std::not_equal_to { - bool operator()(const glm::vec2& a, const glm::vec2& b) const { - return a.x != b.x && a.x != b.y; - } -}; - -template <> -struct std::not_equal_to { - bool operator()(const glm::vec3& a, const glm::vec3& b) const { - return a.x != b.x && a.x != b.y && a.z != b.z; - } -}; - -template <> -struct std::not_equal_to { - bool operator()(const glm::vec4& a, const glm::vec4& b) const { - return a.x != b.x && a.x != b.y && a.z != b.z && a.w != b.w; - } -}; - -template <> -struct std::not_equal_to { - bool operator()(const glm::ivec2& a, const glm::ivec2& b) const { - return a.x != b.x && a.x != b.y; - } -}; - -template <> -struct std::not_equal_to { - bool operator()(const glm::ivec3& a, const glm::ivec3& b) const { - return a.x != b.x && a.x != b.y && a.z != b.z; - } -}; - -template <> -struct std::not_equal_to { - bool operator()(const glm::ivec4& a, const glm::ivec4& b) const { - return a.x != b.x && a.x != b.y && a.z != b.z && a.w != b.w; - } -}; - -template <> -struct std::not_equal_to { - bool operator()(const glm::dvec2& a, const glm::dvec2& b) const { - return a.x != b.x && a.x != b.y; - } -}; - -template <> -struct std::not_equal_to { - bool operator()(const glm::dvec3& a, const glm::dvec3& b) const { - return a.x != b.x && a.x != b.y && a.z != b.z; - } -}; - -template <> -struct std::not_equal_to { - bool operator()(const glm::dvec4& a, const glm::dvec4& b) const { - return a.x != b.x && a.x != b.y && a.z != b.z && a.w != b.w; - } -}; - namespace openspace::documentation { template <> @@ -756,13 +378,13 @@ TestResult InListVerifier::operator()(const ghoul::Dictionary& dict, std::string list = std::accumulate( values.begin() + 1, values.end(), - fmt::format("{}", values.front()), + std::format("{}", values.front()), [](std::string lhs, typename T::Type rhs) { - return fmt::format("{}, {}", lhs, rhs); + return std::format("{}, {}", lhs, rhs); } ); - o.explanation = fmt::format( - "{} not in list of accepted values '{}'", + o.explanation = std::format( + "'{}' not in list of accepted values '{}'", key, list ); r.offenses.push_back(o); @@ -782,12 +404,12 @@ std::string InListVerifier::documentation() const { std::copy( values.begin(), values.end(), - std::ostream_iterator(s, ",") + std::ostream_iterator(s, ", ") ); std::string joined = s.str(); - // We need to remove a trailing ',' at the end of the string - result += joined.substr(0, joined.size() - 1); + // We need to remove a trailing ',' and whitespace at the end of the string + result += joined.substr(0, joined.size() - 2); result += " }"; return result; @@ -800,7 +422,7 @@ NotInListVerifier::NotInListVerifier(std::vector vals) template TestResult NotInListVerifier::operator()(const ghoul::Dictionary& dict, - const std::string& key) const + const std::string& key) const { TestResult res = T::operator()(dict, key); if (res.success) { @@ -1064,30 +686,11 @@ std::string NotInRangeVerifier::documentation() const { template AnnotationVerifier::AnnotationVerifier(std::string a) : annotation(std::move(a)) -{ - -} +{} template std::string AnnotationVerifier::documentation() const { return annotation; } -template -TestResult DeprecatedVerifier::operator()(const ghoul::Dictionary& dict, - const std::string& key) const -{ - TestResult res = T::operator()(dict, key); - TestResult::Warning w; - w.offender = key; - w.reason = TestResult::Warning::Reason::Deprecated; - res.warnings.push_back(w); - return res; -} - -template -std::string DeprecatedVerifier::documentation() const { - return T::documentation() + " (deprecated)"; -} - } // namespace openspace::documentation diff --git a/include/openspace/engine/configuration.h b/include/openspace/engine/configuration.h index 3445f8a5b9..609caafe16 100644 --- a/include/openspace/engine/configuration.h +++ b/include/openspace/engine/configuration.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -34,9 +34,9 @@ #include #include -namespace openspace::documentation { struct Documentation; } +namespace openspace { -namespace openspace::configuration { +namespace documentation { struct Documentation; } struct Configuration { Configuration() = default; @@ -45,7 +45,9 @@ struct Configuration { Configuration& operator=(const Configuration&) = delete; Configuration& operator=(Configuration&&) = default; - std::string windowConfiguration = "${CONFIG}/single.xml"; + ghoul::Dictionary createDictionary(); + + std::string windowConfiguration = "${CONFIG}/single.json"; std::string asset; std::string profile; @@ -76,6 +78,8 @@ struct Configuration { Logging logging; std::string scriptLog; + bool verboseScriptLog = false; + int scriptLogRotation = 3; struct DocumentationInfo { std::string path; @@ -88,7 +92,7 @@ struct Configuration { struct LoadingScreen { bool isShowingMessages = true; bool isShowingNodeNames = true; - bool isShowingProgressbar = true; + bool isShowingLogMessages = true; }; LoadingScreen loadingScreen; @@ -102,6 +106,8 @@ struct Configuration { bool shouldUseScreenshotDate = false; + bool sandboxedLua = true; + std::string onScreenTextScaling = "window"; bool usePerProfileCache = false; @@ -112,6 +118,15 @@ struct Configuration { bool isConsoleDisabled = false; bool bypassLauncher = false; + enum LayerServer { + All = 0, + NewYork, + Sweden, + Utah, + None + }; + LayerServer layerServer = LayerServer::All; + std::map moduleConfigurations; struct OpenGLDebugContext { @@ -141,15 +156,19 @@ struct Configuration { // Values not read from the openspace.cfg file std::string sgctConfigNameInitialized; - static documentation::Documentation Documentation; + static documentation::Documentation Documentation(); ghoul::lua::LuaState state; }; std::filesystem::path findConfiguration(const std::string& filename = "openspace.cfg"); -Configuration loadConfigurationFromFile(const std::filesystem::path& filename, - const glm::ivec2& primaryMonitorResolution, std::string_view overrideScript); +Configuration loadConfigurationFromFile(const std::filesystem::path& configurationFile, + const std::filesystem::path& settingsFile, + const glm::ivec2& primaryMonitorResolution); -} // namespace openspace::configuration +Configuration::LayerServer stringToLayerServer(std::string_view server); +std::string layerServerToString(Configuration::LayerServer server); + +} // namespace openspace #endif // __OPENSPACE_CORE___CONFIGURATION___H__ diff --git a/include/openspace/engine/downloadmanager.h b/include/openspace/engine/downloadmanager.h index 1eda760dbc..952c8a28eb 100644 --- a/include/openspace/engine/downloadmanager.h +++ b/include/openspace/engine/downloadmanager.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -44,7 +44,7 @@ public: // Since the FileFuture object will be used from multiple threads, we have to be // careful about the access pattern, that is, no values should be read and written // by both the DownloadManager and the outside threads. - FileFuture(std::string file); + FileFuture(std::filesystem::path file); // Values that are written by the DownloadManager to be consumed by others long long currentSize = -1; @@ -53,7 +53,7 @@ public: float secondsRemaining = -1.f; bool isFinished = false; bool isAborted = false; - std::string filePath; + std::filesystem::path filePath; std::string errorMessage; std::string format; // Values set by others to be consumed by the DownloadManager @@ -104,15 +104,14 @@ public: OverrideFile overrideFile = OverrideFile::Yes, FailOnError failOnError = FailOnError::No, unsigned int timeout_secs = 0, DownloadFinishedCallback finishedCallback = DownloadFinishedCallback(), - DownloadProgressCallback progressCallback = DownloadProgressCallback() - ); + DownloadProgressCallback progressCallback = DownloadProgressCallback()) const; std::future fetchFile(const std::string& url, SuccessCallback successCallback = SuccessCallback(), ErrorCallback errorCallback = ErrorCallback()); - void getFileExtension(const std::string& url, - RequestFinishedCallback finishedCallback = RequestFinishedCallback()); + void fileExtension(const std::string& url, + RequestFinishedCallback finishedCallback = RequestFinishedCallback()) const; private: bool _useMultithreadedDownload; diff --git a/include/openspace/engine/globals.h b/include/openspace/engine/globals.h index f6e294552b..6eca1b720e 100644 --- a/include/openspace/engine/globals.h +++ b/include/openspace/engine/globals.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -33,6 +33,7 @@ namespace ghoul::fontrendering { class FontManager; } namespace openspace { +struct Configuration; class Dashboard; class DeferredcasterManager; class DownloadManager; @@ -50,16 +51,15 @@ class SyncEngine; class TimeManager; class VersionChecker; struct WindowDelegate; -namespace configuration { struct Configuration; } namespace interaction { struct JoystickInputStates; struct WebsocketInputStates; class ActionManager; class InteractionMonitor; class KeybindingManager; + class KeyframeRecordingHandler; class NavigationHandler; - class SessionRecording; - class ShortcutManager; + class SessionRecordingHandler; } // namespace interaction namespace properties { class PropertyOwner; } namespace scripting { @@ -88,15 +88,15 @@ inline SyncEngine* syncEngine; inline TimeManager* timeManager; inline VersionChecker* versionChecker; inline WindowDelegate* windowDelegate; -inline configuration::Configuration* configuration; +inline Configuration* configuration; inline interaction::ActionManager* actionManager; inline interaction::InteractionMonitor* interactionMonitor; inline interaction::JoystickInputStates* joystickInputStates; inline interaction::WebsocketInputStates* websocketInputStates; inline interaction::KeybindingManager* keybindingManager; +inline interaction::KeyframeRecordingHandler* keyframeRecording; inline interaction::NavigationHandler* navigationHandler; -inline interaction::SessionRecording* sessionRecording; -inline interaction::ShortcutManager* shortcutManager; +inline interaction::SessionRecordingHandler* sessionRecordingHandler; inline properties::PropertyOwner* rootPropertyOwner; inline properties::PropertyOwner* screenSpaceRootPropertyOwner; inline properties::PropertyOwner* userPropertyOwner; diff --git a/include/openspace/engine/globalscallbacks.h b/include/openspace/engine/globalscallbacks.h index a0f606b65c..f454fb134e 100644 --- a/include/openspace/engine/globalscallbacks.h +++ b/include/openspace/engine/globalscallbacks.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -66,11 +66,10 @@ inline std::vector>* touchExit; /** * If the framerate becomes slow, Chromium Embedded Framework (used in Web Browser Module) * needs to perform its message loop work more frequently than once per frame. If this - * method is not called frequently enough, the GUI will become much less responsive. - * A future more long-term may decouple the browser's message work loop from the main - * render loop altogehter using a separate thread. - * Currently, this method is called from within the RenderEngine, - * between calls to individual renderables. + * method is not called frequently enough, the GUI will become much less responsive. A + * future more long-term may decouple the browser's message work loop from the main render + * loop altogehter using a separate thread. Currently, this method is called from within + * the RenderEngine, between calls to individual renderables. */ extern void (*webBrowserPerformanceHotfix)(); diff --git a/include/openspace/engine/logfactory.h b/include/openspace/engine/logfactory.h index 3216e44e32..61e0816ae8 100644 --- a/include/openspace/engine/logfactory.h +++ b/include/openspace/engine/logfactory.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -43,12 +43,14 @@ namespace documentation { struct Documentation; } * logfile should be created. Both logs can be customized using the `Append`, * `TimeStamping`, `DateStamping`, `CategoryStamping`, and `LogLevelStamping` values. * - * \param dictionary The dictionary from which the ghoul::logging::Log should be created + * \param dictionary The dictionary from which the ghoul::logging::Log should be created * \return The created ghoul::logging::Log - * \post The return value will not be `nullptr` - * \throw ghoul::RuntimeError If there was an error creating the ghoul::logging::Log - * \sa ghoul::logging::TextLog - * \sa ghoul::logging::HTMLLog + * + * \post The return value will not be `nullptr` + * \throw ghoul::RuntimeError If there was an error creating the ghoul::logging::Log + * + * \see ghoul::logging::TextLog + * \see ghoul::logging::HTMLLog */ std::unique_ptr createLog(const ghoul::Dictionary& dictionary); diff --git a/include/openspace/engine/moduleengine.h b/include/openspace/engine/moduleengine.h index 8a37586007..9cb789dc81 100644 --- a/include/openspace/engine/moduleengine.h +++ b/include/openspace/engine/moduleengine.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -39,15 +39,16 @@ namespace openspace { class OpenSpaceModule; +namespace documentation { struct Documentation; } namespace scripting { struct LuaLibrary; } /** * The ModuleEngine is the central repository for registering and accessing * OpenSpaceModule for the current application run. By initializing (#initialize) the * ModuleEngine, the default set of OpenSpaceModule%s as generated by CMake in the - * `moduleregistration.h` file is automatically registered and created. - * Additional OpenSpaceModule%s can be registered with the #registerModule function, which - * will internally call the OpenSpaceModule::initialize method. + * `moduleregistration.h` file is automatically registered and created. Additional + * OpenSpaceModule%s can be registered with the #registerModule function, which will + * internally call the OpenSpaceModule::initialize method. */ class ModuleEngine : public properties::PropertyOwner { public: @@ -55,11 +56,10 @@ public: /** * Registers all of the OpenSpaceModule%s which are created by the CMake configuration - * and stored in the `moduleregistration.h` file. For all of those modules - * the OpenSpaceModule::initialize method with will called. + * and stored in the `moduleregistration.h` file. For all of those modules the + * OpenSpaceModule::initialize method with will called. * - * \throw ghoul::RuntimeError If two modules in the default modules have the same - * name + * \throw ghoul::RuntimeError If two modules in the default modules have the same name */ void initialize(const std::map& moduleConfigurations); @@ -104,7 +104,7 @@ public: * to have the public static member variable `name` which must be equal to * the name of the module used in its constructor. * - * \return a pointer to the module of the given subclass + * \return A pointer to the module of the given subclass */ template ModuleSubClass* module() const; @@ -118,11 +118,16 @@ public: ghoul::systemcapabilities::Version requiredOpenGLVersion() const; /** - * Returns the Lua library that contains all Lua functions available to affect the - * modules. - */ + * Returns the Lua library that contains all Lua functions available to affect the + * modules. + */ static scripting::LuaLibrary luaLibrary(); + /** + * Returns the list of all documentations for all modules. + */ + std::vector moduleDocumentations() const; + private: /// The list of all names of all registered OpenSpaceModules properties::StringListProperty _allModules; diff --git a/include/openspace/engine/moduleengine.inl b/include/openspace/engine/moduleengine.inl index b699db55be..c53d2105af 100644 --- a/include/openspace/engine/moduleengine.inl +++ b/include/openspace/engine/moduleengine.inl @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * diff --git a/include/openspace/engine/openspaceengine.h b/include/openspace/engine/openspaceengine.h index b21c04cba3..edeb821dac 100644 --- a/include/openspace/engine/openspaceengine.h +++ b/include/openspace/engine/openspaceengine.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -51,28 +51,35 @@ class Scene; namespace scripting { struct LuaLibrary; } - // Structure that is responsible for the delayed shutdown of the application +/** + * Structure that is responsible for the delayed shutdown of the application. + */ struct ShutdownInformation { - // Whether the application is currently in shutdown mode (i.e. counting down the - // timer and closing it at '0' + /// Whether the application is currently in shutdown mode (i.e. counting down the + /// timer and closing it at '0' bool inShutdown = false; - // Total amount of time the application will wait before actually shutting down + /// Total amount of time the application will wait before actually shutting down float waitTime = 0.f; - // Current state of the countdown; if it reaches '0', the application will - // close + /// Current state of the countdown; if it reaches '0', the application will + /// close float timer = 0.f; }; struct CommandlineArguments { - std::string configurationName; - std::vector configurationOverride; + std::optional configuration; + std::optional windowConfig; + std::optional profile; + std::optional propertyVisibility; + std::optional bypassLauncher; }; class OpenSpaceEngine : public properties::PropertyOwner { public: - // A mode that specifies which part of the system is currently in control. - // The mode can be used to limit certain features, like setting time, navigation - // or triggering scripts + /** + * A mode that specifies which part of the system is currently in control. The mode + * can be used to limit certain features, like setting time, navigation or triggering + * scripts. + */ enum class Mode { UserControl = 0, SessionRecordingPlayback, @@ -89,12 +96,10 @@ public: void deinitializeGL(); void preSynchronization(); void postSynchronizationPreDraw(); - void viewportChanged(); void render(const glm::mat4& sceneMatrix, const glm::mat4& viewMatrix, const glm::mat4& projectionMatrix); void drawOverlays(); void postDraw(); - void resetPropertyChangeFlags(); void keyboardCallback(Key key, KeyModifier mod, KeyAction action, IsGuiWindow isGuiWindow); void charCallback(unsigned int codepoint, KeyModifier modifier, @@ -111,7 +116,6 @@ public: void decode(std::vector data); properties::Property::Visibility visibility() const; - bool showHiddenSceneGraphNodes() const; void toggleShutdownMode(); Mode currentMode() const; @@ -128,9 +132,11 @@ public: AssetManager& assetManager(); LoadingScreen* loadingScreen(); - void writeDocumentation(); void createUserDirectoriesIfNecessary(); + uint64_t ramInUse() const; + uint64_t vramInUse() const; + /** * Returns the Lua library that contains all Lua functions available to affect the * application. @@ -142,17 +148,14 @@ private: void loadFonts(); void runGlobalCustomizationScripts(); - void resetPropertyChangeFlagsOfSubowners(openspace::properties::PropertyOwner* po); properties::BoolProperty _printEvents; properties::OptionProperty _visibility; - properties::BoolProperty _showHiddenSceneGraphNodes; properties::FloatProperty _fadeOnEnableDuration; properties::BoolProperty _disableAllMouseInputs; std::unique_ptr _scene; std::unique_ptr _assetManager; - bool _shouldAbortLoading = false; std::unique_ptr _loadingScreen; std::unique_ptr _versionChecker; @@ -177,7 +180,8 @@ private: * Sets the camera position using the time contents of a profile. The function will * set an absolute position or a go-to-geolocation command using the globebrowsing * module. - * \param p The Profile to be read. + * + * \param p The Profile to be read */ void setCameraFromProfile(const Profile& p); @@ -185,21 +189,21 @@ void setCameraFromProfile(const Profile& p); * Reads a list of modules from a profile, and executes scripts based on whether or * not the corresponding module is loaded. * - * \param p The Profile to be read. + * \param p The Profile to be read */ void setModulesFromProfile(const Profile& p); /** * Registers actions from the contents of a profile. * - * \param p The Profile to be read. + * \param p The Profile to be read */ void setActionsFromProfile(const Profile& p); /** * Registers keybindings from the contents of a profile. * - * \param p The Profile to be read. + * \param p The Profile to be read */ void setKeybindingsFromProfile(const Profile& p); @@ -208,7 +212,7 @@ void setKeybindingsFromProfile(const Profile& p); * If any nodes are listed, a script to mark these will be queued with the * script engine. * - * \param p The Profile to be read. + * \param p The Profile to be read */ void setMarkInterestingNodesFromProfile(const Profile& p); @@ -217,7 +221,7 @@ void setMarkInterestingNodesFromProfile(const Profile& p); * at the end of the initialization. Any openspace lua commands are allowed, * and will be added to the script queue. * - * \param p The Profile to be read. + * \param p The Profile to be read */ void setAdditionalScriptsFromProfile(const Profile& p); diff --git a/include/openspace/engine/settings.h b/include/openspace/engine/settings.h new file mode 100644 index 0000000000..d167d8544d --- /dev/null +++ b/include/openspace/engine/settings.h @@ -0,0 +1,64 @@ +/***************************************************************************************** + * * + * OpenSpace * + * * + * Copyright (c) 2014-2025 * + * * + * 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_CORE___SETTINGS___H__ +#define __OPENSPACE_CORE___SETTINGS___H__ + +#include +#include +#include +#include + +namespace openspace { + +struct Settings { + auto operator<=>(const Settings&) const = default; + + std::optional hasStartedBefore; + + std::optional configuration; + std::optional rememberLastConfiguration; + std::optional profile; + std::optional rememberLastProfile; + std::optional visibility; + std::optional bypassLauncher; + std::optional layerServer; + + struct MRF { + auto operator<=>(const MRF&) const = default; + + std::optional isEnabled; + std::optional location; + }; + MRF mrf; +}; + +std::filesystem::path findSettings(const std::string& filename = "settings.json"); + +Settings loadSettings(const std::filesystem::path& filename = findSettings()); +void saveSettings(const Settings& settings, const std::filesystem::path& filename); + +} // namespace openspace + +#endif // __OPENSPACE_CORE___SETTINGS___H__ diff --git a/include/openspace/engine/syncengine.h b/include/openspace/engine/syncengine.h index 1b5107d4ba..9274130233 100644 --- a/include/openspace/engine/syncengine.h +++ b/include/openspace/engine/syncengine.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -36,72 +36,71 @@ namespace openspace { class Syncable; /** - * Manages a collection of `Syncable`s and ensures they are synchronized - * over SGCT nodes. Encoding/Decoding order is handles internally. + * Manages a collection of `Syncable`s and ensures they are synchronized over SGCT nodes. + * Encoding/Decoding order is handles internally. */ class SyncEngine { public: BooleanType(IsMaster); /** - * Creates a new SyncEngine which a buffer size of \p syncBufferSize + * Creates a new SyncEngine which a buffer size of \p syncBufferSize. + * * \pre syncBufferSize must be bigger than 0 */ SyncEngine(unsigned int syncBufferSize); /** - * Encodes all added Syncables in the injected `SyncBuffer`. - * This method is only called on the SGCT master node + * Encodes all added Syncables in the injected `SyncBuffer`. This method is only + * called on the SGCT master node. */ std::vector encodeSyncables(); /** - * Decodes the `SyncBuffer` into the added Syncables. - * This method is only called on the SGCT client nodes + * Decodes the `SyncBuffer` into the added Syncables. This method is only called on + * the SGCT client nodes. */ void decodeSyncables(std::vector data); /** - * Invokes the presync method of all added Syncables + * Invokes the presync method of all added Syncables. */ void preSynchronization(IsMaster isMaster); /** - * Invokes the postsync method of all added Syncables + * Invokes the postsync method of all added Syncables. */ void postSynchronization(IsMaster isMaster); /** * Add a Syncable to be synchronized over the SGCT cluster. - * \pre syncable must not be nullptr + * + * \pre syncable must not be `nullptr` */ void addSyncable(Syncable* syncable); /** - * Add multiple Syncables to be synchronized over the SGCT cluster + * Add multiple Syncables to be synchronized over the SGCT cluster. + * * \pre syncables must not contain any nullptr */ void addSyncables(const std::vector& syncables); /** - * Remove a Syncable from being synchronized over the SGCT cluster + * Remove a Syncable from being synchronized over the SGCT cluster. */ void removeSyncable(Syncable* syncable); /** - * Remove multiple Syncables from being synchronized over the SGCT cluster + * Remove multiple Syncables from being synchronized over the SGCT cluster. */ void removeSyncables(const std::vector& syncables); private: - /** - * Vector of Syncables. The vectors ensures consistent encode/decode order - */ + /// Vector of Syncables. The vectors ensures consistent encode/decode order. std::vector _syncables; - /** - * Databuffer used in encoding/decoding - */ + /// Databuffer used in encoding/decoding SyncBuffer _syncBuffer; }; diff --git a/include/openspace/engine/windowdelegate.h b/include/openspace/engine/windowdelegate.h index 13458e6e8c..73c6fa27fd 100644 --- a/include/openspace/engine/windowdelegate.h +++ b/include/openspace/engine/windowdelegate.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -34,6 +34,9 @@ namespace openspace { struct WindowDelegate { enum class Frustum { Mono, LeftEye, RightEye }; + enum class Cursor { Arrow, IBeam, CrossHair, PointingHand, ResizeEW, ResizeNS, + ResizeNWSE, ResizeNESW, ResizeAll, NotAllowed }; + void (*terminate)() = [](){}; void (*setBarrier)(bool enabled) = [](bool) {}; @@ -114,7 +117,7 @@ struct WindowDelegate { uint64_t (*swapGroupFrameNumber)() = []() { return uint64_t(0); }; - void (*setScreenshotFolder)(std::string) = [](std::string) {}; + void (*setScreenshotFolder)(std::filesystem::path) = [](std::filesystem::path) {}; void (*showStatistics)(bool) = [](bool) {}; @@ -122,8 +125,12 @@ struct WindowDelegate { int (*currentNode)() = []() { return 0; }; - glm::vec2 (*mousePositionViewportRelative)(glm::vec2 mousePosition) = - [](glm::vec2) { return glm::vec2(0); }; + glm::vec2 (*mousePositionViewportRelative)(const glm::vec2& mousePosition) = + [](const glm::vec2&) { return glm::vec2(0); }; + + void (*setStatisticsGraphScale)(float scale) = [](float) {}; + + void (*setMouseCursor)(Cursor cursor) = [](Cursor) {}; }; } // namespace openspace diff --git a/include/openspace/events/event.h b/include/openspace/events/event.h index 08f15512d9..c43f4978ed 100644 --- a/include/openspace/events/event.h +++ b/include/openspace/events/event.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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,21 +58,20 @@ struct Event { // if they are triggered by events // 6. Add the new enum entry into the `toString` and `fromString` methods enum class Type : uint8_t { - SceneGraphNodeAdded, - SceneGraphNodeRemoved, ParallelConnection, ProfileLoadingFinished, + AssetLoadingFinished, ApplicationShutdown, - ScreenSpaceRenderableAdded, - ScreenSpaceRenderableRemoved, CameraFocusTransition, TimeOfInterestReached, MissionEventReached, PlanetEclipsed, InterpolationFinished, FocusNodeChanged, - LayerAdded, - LayerRemoved, + PropertyTreeUpdated, + PropertyTreePruned, + ActionAdded, + ActionRemoved, SessionRecordingPlayback, PointSpacecraft, RenderableEnabled, @@ -80,7 +79,10 @@ struct Event { CameraPathStarted, CameraPathFinished, CameraMovedPosition, - Custom + ScheduledScriptExecuted, + GuiTreeUpdated, + Custom, + Last // sentinel value }; constexpr explicit Event(Type type_) : type(type_) {} @@ -110,43 +112,6 @@ void logAllEvents(const Event* e); // Events // -/** - * This event is created whenever a new scene graph node is added to the system. By the - * time this event is signalled, the scene graph node has already been created and added - * to the scene. - */ -struct EventSceneGraphNodeAdded : public Event { - static constexpr Type Type = Event::Type::SceneGraphNodeAdded; - - /** - * Creates an instance of an EventSceneGraphNodeAdded event. - * - * \param node_ The identifier of the node that was added - * - * \pre node_ must not be nullptr - */ - explicit EventSceneGraphNodeAdded(const SceneGraphNode* node_); - const tstring node; -}; - -/** - * This event is created whenever a scene graph node was removed. By the time this event - * is signalled, the scene graph node has already been removed. - */ -struct EventSceneGraphNodeRemoved : public Event { - static constexpr Type Type = Event::Type::SceneGraphNodeRemoved; - - /** - * Creates an instance of an EventSceneGraphNodeRemoved event. - * - * \param node_ The identifier of the node that was removed - * - * \pre node_ must not be nullptr - */ - explicit EventSceneGraphNodeRemoved(const SceneGraphNode* node_); - const tstring node; -}; - /** * This event is created whenever something in the parallel connection subsystem changes. * The new state is sent as an argument with this event. @@ -164,7 +129,7 @@ struct EventParallelConnection : public Event { /** * Creates an instance of an EventParallelConnection event. * - * \param state_ The new state of the parallel connection system; is one of + * \param state_ The new state of the parallel connection system; is one of * `Established`, `Lost`, `HostshipGained`, or `HostshipLost` */ explicit EventParallelConnection(State state_); @@ -184,6 +149,20 @@ struct EventProfileLoadingFinished : public Event { EventProfileLoadingFinished(); }; +/** +* This event is created when the loading of all assets are finished. This is emitted +* regardless of whether it is the initial startup of a profile, or any subsequent asset +* being loaded e.g., through add or drag-and-drop. +*/ +struct EventAssetLoadingFinished : public Event { + static constexpr Type Type = Event::Type::AssetLoadingFinished; + + /** + * Creates an instance of an AssetLoadingFinished event. + */ + EventAssetLoadingFinished(); +}; + /** * This event is created whenever some information about the application shutdown sequence * changes. This can either be that the seqeuence started, was aborted, or is finished, @@ -201,65 +180,30 @@ struct EventApplicationShutdown : public Event { /** * Creates an instance of an EventApplicationShutdown event. * - * \param state_ The next state of the application shutdown sequence; is one of - * `Started`, `Aborted`, or `Finished` + * \param state_ The next state of the application shutdown sequence; is one of + * `Started`, `Aborted`, or `Finished` */ explicit EventApplicationShutdown(State state_); const State state; }; -/** - * This event is created when a new screenspace renderable has been created. By the time - * this event is craeted, the screenspace renderable is already registered and available. - */ -struct EventScreenSpaceRenderableAdded : public Event { - static constexpr Type Type = Event::Type::ScreenSpaceRenderableAdded; - - /** - * Creates an instance of an EventScreenSpaceRenderableAdded event. - * - * \param renderable_ The the new screenspace renderable that was added to the system - * - * \pre renderable_ must not be nullptr - */ - explicit EventScreenSpaceRenderableAdded(const ScreenSpaceRenderable* renderable_); - const tstring renderable; -}; - -/** - * This event is created when a screenspace renderable has been removed from the system. - * When this event is created, the screenspace renderable has already been removed and is - * no longer available - */ -struct EventScreenSpaceRenderableRemoved : public Event { - static constexpr Type Type = Event::Type::ScreenSpaceRenderableRemoved; - - /** - * Creates an instance of an EventScreenSpaceRenderableRemoved event. - * - * \param renderable_ The the new screenspace renderable that was removed - */ - explicit EventScreenSpaceRenderableRemoved(const ScreenSpaceRenderable* renderable_); - const tstring renderable; -}; - /** * This event is created when the camera transitions between different interaction sphere * distances. Right now, only movement relative to camera's focus node is considered. * Each scene graph node has an interaction sphere radius that serves as the reference * distance for all spheres. -``` -Diagram of events for a camera moving from right-to-left. Interaction sphere is 'O' in -middle, and ')' are spherical boundaries. The approach factor, reach factor, and -interaction sphere radius are all taken from the current focus node. - -|<------------------->| Approach factor * Interaction sphere - |<------>| Reach Factor * Interaction sphere - -( ( O ) ) -^ ^ ^ ^ -Exiting Receding Reaching Approaching -``` + * ``` + * Diagram of events for a camera moving from right-to-left. Interaction sphere is 'O' in + * middle, and ')' are spherical boundaries. The approach factor, reach factor, and + * interaction sphere radius are all taken from the current focus node. + * + * |<------------------->| Approach factor * Interaction sphere + * |<------>| Reach Factor * Interaction sphere + * + * ( ( O ) ) + * ^ ^ ^ ^ + * Exiting Receding Reaching Approaching + * ``` */ struct EventCameraFocusTransition : public Event { static constexpr Type Type = Event::Type::CameraFocusTransition; @@ -347,7 +291,7 @@ struct EventPlanetEclipsed : public Event { /** * This event is created when the interpolation of a property value is finished. If the - * interpolation time of a property change is 0s, this event is not fired + * interpolation time of a property change is 0s, this event is not fired. */ struct EventInterpolationFinished : public Event { static constexpr Type Type = Event::Type::InterpolationFinished; @@ -387,53 +331,76 @@ struct EventFocusNodeChanged : public Event { }; /** - * This event is created when a layer is added to to a globe. + * This event is created a property owner or property has been added or has changed. */ -struct EventLayerAdded : public Event { - static constexpr Type Type = Event::Type::LayerAdded; +struct EventPropertyTreeUpdated : public Event { + static constexpr Type Type = Event::Type::PropertyTreeUpdated; /** - * Creates an instance of an EventLayerAdded event. + * Creates an instance of an EventPropertyTreeUpdated event. * - * \param node_ The identifier of the globe to which the layer is added - * \param layerGroup_ The identifier of the layer group to which the layer is added - * \param layer_ The identifier of the layer that was added + * \param uri_ A string with the uri of the property or property owner that was added * - * \pre node_ must not be empty - * \pre layerGroup_ must not be empty - * \pre layer_ must not be empty + * \pre uri_ must be a valid uri */ - explicit EventLayerAdded(std::string_view node_, std::string_view layerGroup_, - std::string_view layer_); + explicit EventPropertyTreeUpdated(std::string_view uri_); - const tstring node; - const tstring layerGroup; - const tstring layer; + const tstring uri; }; /** - * This event is created when a layer is removed from a globe. + * This event is created when a property owner or property is removed from a the property + * tree. */ -struct EventLayerRemoved : public Event { - static constexpr Type Type = Event::Type::LayerRemoved; +struct EventPropertyTreePruned : public Event { + static constexpr Type Type = Event::Type::PropertyTreePruned; /** - * Creates an instance of an EventLayerRemoved event. + * Creates an instance of an EventPropertyTreePruned event. * - * \param node_ The identifier of the globe to which the layer is removed - * \param layerGroup_ The identifier of the layer group to which the layer is removed - * \param layer_ The identifier of the layer that was removed + * \param uri_ The uri of the property or property owner that was removed * - * \pre node_ must not be empty - * \pre layerGroup_ must not be empty - * \pre layer_ must not be empty + * \pre uri_ must be a valid uri */ - explicit EventLayerRemoved(std::string_view node_, std::string_view layerGroup_, - std::string_view layer_); + explicit EventPropertyTreePruned(std::string_view uri_); - const tstring node; - const tstring layerGroup; - const tstring layer; + const tstring uri; +}; + +/** + * This event is created when an action is added. + */ +struct EventActionAdded : public Event { + static constexpr Type Type = Event::Type::ActionAdded; + + /** + * Creates an instance of an EventActionAdded event. + * + * \param uri_ A string with the uri of the action that was added + * + * \pre uri_ must be a valid uri + */ + explicit EventActionAdded(std::string_view uri_); + + const tstring uri; +}; + +/** + * This event is created when an action is removed. + */ +struct EventActionRemoved : public Event { + static constexpr Type Type = Event::Type::ActionRemoved; + + /** + * Creates an instance of an EventActionRemoved event. + * + * \param uri_ The uri of the action that was removed + * + * \pre uri_ must be a valid uri + */ + explicit EventActionRemoved(std::string_view uri_); + + const tstring uri; }; /** @@ -562,7 +529,7 @@ struct EventCameraPathFinished : public Event { }; /** - * This event is created when the a camera moves location + * This event is created when the a camera moves location. */ struct EventCameraMovedPosition : public Event { static constexpr Type Type = Event::Type::CameraMovedPosition; @@ -573,6 +540,33 @@ struct EventCameraMovedPosition : public Event { EventCameraMovedPosition(); }; +/** + * This event is created when a scheduled script is executed. + */ +struct EventScheduledScriptExecuted : public Event { + static constexpr Type Type = Event::Type::ScheduledScriptExecuted; + + /** + * Creates an instance of an ScheduledScriptExecuted event. + */ + EventScheduledScriptExecuted(std::string_view script_); + + const tstring script; +}; + +/** + * This event is created when the custom ordering for a specific branch in the Scene + * GUI tree is changed. It signals to the UI that the tree should be updated. + */ +struct EventGuiTreeUpdated : public Event { + static constexpr Type Type = Event::Type::GuiTreeUpdated; + + /** + * Creates an instance of an EventGuiTreeUpdated event. + */ + EventGuiTreeUpdated(); +}; + /** * A custom event type that can be used in a pinch when no explicit event type is * available. This should only be used in special circumstances and it should be diff --git a/include/openspace/events/eventengine.h b/include/openspace/events/eventengine.h index 212a0305af..1c3d484cd0 100644 --- a/include/openspace/events/eventengine.h +++ b/include/openspace/events/eventengine.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -36,6 +36,8 @@ namespace events { struct Event; } class EventEngine { public: + using ScriptCallback = std::function; + struct ActionInfo { events::Event::Type type; uint32_t id = std::numeric_limits::max(); @@ -44,11 +46,16 @@ public: std::optional filter; }; + struct TopicInfo { + uint32_t id = std::numeric_limits::max(); + ScriptCallback callback; + }; + /** * This function returns the first event stored in the EventEngine, or `nullptr` if * no event exists. To navigate the full list of events, you can access the returned * Event's next function. If the end of the list is reached, the next pointer will be - * a nullptr + * a `nullptr`. * * \return The first event stored in the EventEngine or nullptr if no event exists */ @@ -57,11 +64,11 @@ public: /** * Publish a new event of type T by providing optional arguments Args to the Event's * constructor. An example of usage is - * `engine.publishEvent("a", 2.0);` which would call the - * constructor of `MyEvent` with a `const char*` and `double` parameter. + * `engine.publishEvent("a", 2.0);` which would call the constructor of + * `MyEvent` with a `const char*` and `double` parameter. * - * \param args The arguments that are passed to the constructor of T * \tparam T The subclass of Event that is to be published + * \param args The arguments that are passed to the constructor of T */ template void publishEvent(Args&&... args); @@ -87,6 +94,16 @@ public: void registerEventAction(events::Event::Type type, std::string identifier, std::optional filter = std::nullopt); + /** + * Registers a new topic for a specific event type. + * + * \param topicId The id of the topic that will be triggered + * \param type The type for which a new topic is registered + * \param callback The callback function that will be called on triggered event + */ + void registerEventTopic(size_t topicId, events::Event::Type type, + ScriptCallback callback); + /** * Removing registration for a type/action combination. * @@ -96,15 +113,24 @@ public: */ void unregisterEventAction(events::Event::Type type, const std::string& identifier, - std::optional filter = std::nullopt); + const std::optional& filter = std::nullopt); /** * Removing registration for a specific event identified by the \p identifier. * - * \param identifier The unique identifier of the event that should be removed. + * \param identifier The unique identifier of the event that should be removed */ void unregisterEventAction(uint32_t identifier); + /** + * Removing registration for a topic/type combination, does nothing if topicId or type + * combination does not exist + * + * \param topicId The id of the topic that should be unregistered + * \param type The type of the topic that should be unregistered + */ + void unregisterEventTopic(size_t topicId, events::Event::Type type); + /** * Returns the list of all registered actions, sorted by their identifiers. * @@ -112,6 +138,14 @@ public: */ std::vector registeredActions() const; + /** + * Returns the list of all registered actions, grouped by their event type. + * + * \return The unordered map of all registered actions + */ + const std::unordered_map>& + eventActions() const; + /** * Enables the event identified by the \p identifier. If the event is already enabled, * this function does nothing. @@ -130,10 +164,16 @@ public: /** * Triggers all actions that are registered for events that are in the current event - * queue + * queue. */ void triggerActions() const; + /** + * Triggers all topics that are registered for events that are in the current event + * queue. + */ + void triggerTopics() const; + static scripting::LuaLibrary luaLibrary(); private: @@ -144,12 +184,13 @@ private: /// The last event in the chain of events stored in the memory pool events::Event* _lastEvent = nullptr; - - // The type is duplicated in the ActionInfo as well, but we want it in the ActionInfo - // to be able to return them to a caller and we want it in this unordered_map to make - // the lookup really fast. So having this extra wasted memory is probably worth it + /// The type is duplicated in the ActionInfo as well, but we want it in the ActionInfo + /// to be able to return them to a caller and we want it in this unordered_map to make + /// the lookup really fast. So having this extra wasted memory is probably worth it std::unordered_map> _eventActions; + std::unordered_map> _eventTopics; + static uint32_t nextRegisteredEventId; #ifdef _DEBUG diff --git a/include/openspace/events/eventengine.inl b/include/openspace/events/eventengine.inl index 510bb75db8..ac052670b0 100644 --- a/include/openspace/events/eventengine.inl +++ b/include/openspace/events/eventengine.inl @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * diff --git a/include/openspace/interaction/action.h b/include/openspace/interaction/action.h index a0f21bd76b..77b728ef8b 100644 --- a/include/openspace/interaction/action.h +++ b/include/openspace/interaction/action.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -63,7 +63,7 @@ struct Action { /// current OpenSpace instance. If it is `No`, it is synchronized to other OpenSpace /// instances, for example other nodes in a cluster environment, or to other OpenSpace /// instances using a parallel connection - IsLocal isLocal = IsLocal::Yes; + IsLocal isLocal = IsLocal::No; }; } // namespace openspace::interaction diff --git a/include/openspace/interaction/actionmanager.h b/include/openspace/interaction/actionmanager.h index 9054b3fc09..ef139163f3 100644 --- a/include/openspace/interaction/actionmanager.h +++ b/include/openspace/interaction/actionmanager.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -35,14 +35,18 @@ namespace openspace::interaction { class ActionManager { public: + BooleanType(ShouldBeSynchronized); + BooleanType(ShouldBeLogged); + bool hasAction(const std::string& identifier) const; void registerAction(Action action); void removeAction(const std::string& identifier); const Action& action(const std::string& identifier) const; std::vector actions() const; - void triggerAction(const std::string& identifier, - const ghoul::Dictionary& arguments) const; + void triggerAction(const std::string& identifier, const ghoul::Dictionary& arguments, + ShouldBeSynchronized shouldBeSynchronized, + ShouldBeLogged shouldBeLogged = ShouldBeLogged::No) const; static scripting::LuaLibrary luaLibrary(); private: diff --git a/include/openspace/interaction/camerainteractionstates.h b/include/openspace/interaction/camerainteractionstates.h index b220db6115..3f22a5eaf8 100644 --- a/include/openspace/interaction/camerainteractionstates.h +++ b/include/openspace/interaction/camerainteractionstates.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -33,9 +33,9 @@ namespace openspace::interaction { class CameraInteractionStates { public: /** - * \param sensitivity - * \param velocityScaleFactor can be set to 60 to remove the inertia of the - * interaction. Lower value will make it harder to move the camera. + * \param sensitivity Interaction sensitivity + * \param velocityScaleFactor Can be set to 60 to remove the inertia of the + * interaction. Lower value will make it harder to move the camera */ CameraInteractionStates(double sensitivity, double velocityScaleFactor); virtual ~CameraInteractionStates() = default; @@ -54,11 +54,11 @@ public: void resetVelocities(); - /* - * Returns true if any of the velocities are larger than zero, - * i.e. wether an interaction happened + /** + * Returns true if any of the velocities are larger than zero, i.e. wether an + * interaction happened. */ - bool hasNonZeroVelocities(bool checkOnlyMovement = false); + bool hasNonZeroVelocities(bool checkOnlyMovement = false) const; protected: struct InteractionState { diff --git a/include/openspace/interaction/delayedvariable.h b/include/openspace/interaction/delayedvariable.h index 7f71c8f13b..790e0d5ac5 100644 --- a/include/openspace/interaction/delayedvariable.h +++ b/include/openspace/interaction/delayedvariable.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 @@ namespace openspace::interaction { /** - * Class that acts as a smoothing filter to a variable. The filter has a step - * response on a form that resembles the function y = 1-e^(-t/scale). The variable - * will be updated as soon as it is set to a value (calling the set() function). + * Class that acts as a smoothing filter to a variable. The filter has a step response on + * a form that resembles the function y = 1-e^(-t/scale). The variable will be updated as + * soon as it is set to a value (calling the set() function). */ template class DelayedVariable { diff --git a/include/openspace/interaction/delayedvariable.inl b/include/openspace/interaction/delayedvariable.inl index e626610442..c7d99f4ddd 100644 --- a/include/openspace/interaction/delayedvariable.inl +++ b/include/openspace/interaction/delayedvariable.inl @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * diff --git a/include/openspace/interaction/interactionmonitor.h b/include/openspace/interaction/interactionmonitor.h index 9cd80e210d..5b634145fd 100644 --- a/include/openspace/interaction/interactionmonitor.h +++ b/include/openspace/interaction/interactionmonitor.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -52,7 +52,7 @@ public: /* * Called from all places we want to mark activity from. Updates the last registered - * interaction time + * interaction time. */ void markInteraction(); diff --git a/include/openspace/interaction/interpolator.h b/include/openspace/interaction/interpolator.h index 867b63ab66..616e512482 100644 --- a/include/openspace/interaction/interpolator.h +++ b/include/openspace/interaction/interpolator.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -29,7 +29,7 @@ namespace openspace::interaction { -/* +/** * Interpolates a typename T using a transfer function. */ template diff --git a/include/openspace/interaction/interpolator.inl b/include/openspace/interaction/interpolator.inl index 5f9d3f45cc..ad5312ac47 100644 --- a/include/openspace/interaction/interpolator.inl +++ b/include/openspace/interaction/interpolator.inl @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -59,7 +59,7 @@ void Interpolator::setInterpolationTime(float interpolationTime) { template void Interpolator::step() { _t += _scaledDeltaTime; - _t = glm::clamp(_t, 0.0f, 1.0f); + _t = glm::clamp(_t, 0.f, 1.f); } template diff --git a/include/openspace/interaction/joystickcamerastates.h b/include/openspace/interaction/joystickcamerastates.h index c3dcdd9ad9..edd4e86bc3 100644 --- a/include/openspace/interaction/joystickcamerastates.h +++ b/include/openspace/interaction/joystickcamerastates.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -88,14 +88,14 @@ public: void updateStateFromInput( const JoystickInputStates& joystickInputStates, double deltaTime); - void setAxisMapping(std::string joystickName, int axis, AxisType mapping, + void setAxisMapping(const std::string& joystickName, int axis, AxisType mapping, AxisInvert shouldInvert = AxisInvert::No, JoystickType joystickType = JoystickType::JoystickLike, bool isSticky = false, AxisFlip shouldFlip = AxisFlip::No, double sensitivity = 0.0 ); - void setAxisMappingProperty(std::string joystickName, int axis, + void setAxisMappingProperty(const std::string& joystickName, int axis, std::string propertyUri, float min = 0.f, float max = 1.f, AxisInvert shouldInvert = AxisInvert::No, bool isRemote = true ); @@ -163,19 +163,19 @@ inline std::string to_string( { using T = openspace::interaction::JoystickCameraStates::AxisType; switch (value) { - case T::None: return "None"; - case T::OrbitX: return "Orbit X"; - case T::OrbitY: return "Orbit Y"; - case T::ZoomIn: return "Zoom In"; - case T::ZoomOut: return "Zoom Out"; - case T::Zoom: return "Zoom In and Out"; + case T::None: return "None"; + case T::OrbitX: return "Orbit X"; + case T::OrbitY: return "Orbit Y"; + case T::ZoomIn: return "Zoom In"; + case T::ZoomOut: return "Zoom Out"; + case T::Zoom: return "Zoom In and Out"; case T::LocalRoll: return "LocalRoll"; case T::GlobalRoll: return "GlobalRoll"; - case T::PanX: return "Pan X"; - case T::PanY: return "Pan Y"; - case T::Property: return "Property"; - default: return ""; - } + case T::PanX: return "Pan X"; + case T::PanY: return "Pan Y"; + case T::Property: return "Property"; + default: return ""; + } } template <> @@ -196,7 +196,7 @@ from_string(std::string_view string) if (string == "Pan Y") { return T::PanY; } if (string == "Property") { return T::Property; } - throw RuntimeError("Unkonwn axis type '" + std::string(string) + "'"); + throw RuntimeError(std::format("Unknown axis type '{}'", string), "Joystick"); } template <> @@ -220,7 +220,7 @@ from_string(std::string_view string) if (string == "JoystickLike") { return T::JoystickLike; } if (string == "TriggerLike") { return T::TriggerLike; } - throw RuntimeError("Unkonwn joystick type '" + std::string(string) + "'"); + throw RuntimeError(std::format("Unknown joystick type '{}'", string), "Joystick"); } } // namespace ghoul diff --git a/include/openspace/interaction/joystickinputstate.h b/include/openspace/interaction/joystickinputstate.h index 76f68ff437..12b81e1ee4 100644 --- a/include/openspace/interaction/joystickinputstate.h +++ b/include/openspace/interaction/joystickinputstate.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -25,10 +25,10 @@ #ifndef __OPENSPACE_CORE___JOYSTICKINPUTSTATE___H__ #define __OPENSPACE_CORE___JOYSTICKINPUTSTATE___H__ +#include #include #include #include -#include #include #include #include @@ -37,7 +37,7 @@ namespace openspace::interaction { /** * Actions that any button of a joystick can have. Each button must be in one of these - * states + * states. */ enum class JoystickAction : uint8_t { /// Idle state if the button is unpressed and has been unpressed since last frame @@ -81,7 +81,7 @@ struct JoystickInputStates : public std::array static constexpr int MaxNumJoysticks = 16; /** - * This function return the number of axes the joystick with the given name has + * This function return the number of axes the joystick with the given name has. * * \param joystickName The name of the joystick to check how many axes it has, * if empty the max number of axes for all joysticks are returned @@ -90,7 +90,7 @@ struct JoystickInputStates : public std::array int numAxes(const std::string& joystickName = "") const; /** - * This function return the number of buttons the joystick with the given name has + * This function return the number of buttons the joystick with the given name has. * * \param joystickName The name of the joystick to check how many buttons it has, * if empty the max number of buttons for all joysticks are returned @@ -150,7 +150,7 @@ constexpr openspace::interaction::JoystickAction from_string(std::string_view st if (string == "Repeat") { return openspace::interaction::JoystickAction::Repeat; } if (string == "Release") { return openspace::interaction::JoystickAction::Release; } - throw RuntimeError(fmt::format("Unknown action '{}'", string)); + throw RuntimeError(std::format("Unknown action '{}'", string)); } } // namespace ghoul diff --git a/include/openspace/interaction/keybindingmanager.h b/include/openspace/interaction/keybindingmanager.h index cca79962c6..94707e68e4 100644 --- a/include/openspace/interaction/keybindingmanager.h +++ b/include/openspace/interaction/keybindingmanager.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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,8 +38,6 @@ namespace openspace::interaction { class KeybindingManager { public: - KeybindingManager(); - void resetKeyBindings(); void bindKey(Key key, KeyModifier modifier, std::string action); @@ -53,8 +51,6 @@ public: void keyboardCallback(Key key, KeyModifier modifier, KeyAction action); - nlohmann::json generateJson() const; - const std::multimap& keyBindings() const; private: diff --git a/include/openspace/interaction/keyboardinputstate.h b/include/openspace/interaction/keyboardinputstate.h index 0eb0fdf9ac..481ebae77c 100644 --- a/include/openspace/interaction/keyboardinputstate.h +++ b/include/openspace/interaction/keyboardinputstate.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * diff --git a/include/openspace/interaction/keyframerecordinghandler.h b/include/openspace/interaction/keyframerecordinghandler.h new file mode 100644 index 0000000000..64e96ed3b1 --- /dev/null +++ b/include/openspace/interaction/keyframerecordinghandler.h @@ -0,0 +1,62 @@ +/***************************************************************************************** + * * + * OpenSpace * + * * + * Copyright (c) 2014-2025 * + * * + * 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_CORE___KEYFRAMERECORDINGHANDLER___H__ +#define __OPENSPACE_CORE___KEYFRAMERECORDINGHANDLER___H__ + +#include + +#include +#include +#include +#include +#include + +namespace openspace::interaction { + +class KeyframeRecordingHandler : public properties::PropertyOwner { +public: + KeyframeRecordingHandler(); + + void newSequence(); + void addCameraKeyframe(double sequenceTime); + void addScriptKeyframe(double sequenceTime, std::string script); + void removeKeyframe(int index); + void updateKeyframe(int index); + void moveKeyframe(int index, double sequenceTime); + void saveSequence(std::filesystem::path filename); + void loadSequence(std::filesystem::path filename); + void play(); + bool hasKeyframeRecording() const; + std::vector keyframes() const; + + static openspace::scripting::LuaLibrary luaLibrary(); + +private: + SessionRecording _timeline; +}; + +} // namespace openspace + +#endif // __OPENSPACE_CORE___KEYFRAMERECORDINGHANDLER___H__ diff --git a/include/openspace/interaction/mousecamerastates.h b/include/openspace/interaction/mousecamerastates.h index 56f70f2085..55fe49e514 100644 --- a/include/openspace/interaction/mousecamerastates.h +++ b/include/openspace/interaction/mousecamerastates.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -36,8 +36,8 @@ class MouseCameraStates : public CameraInteractionStates { public: MouseCameraStates(double sensitivity, double velocityScaleFactor); - void updateStateFromInput(const MouseInputState& mouseinputState, - const KeyboardInputState& keyboardinputState, double deltaTime); + void updateStateFromInput(const MouseInputState& mouseState, + const KeyboardInputState& keyboardState, double deltaTime); void setInvertMouseButton(bool value); diff --git a/include/openspace/interaction/mouseinputstate.h b/include/openspace/interaction/mouseinputstate.h index 67809b94b7..0c7aaef1bc 100644 --- a/include/openspace/interaction/mouseinputstate.h +++ b/include/openspace/interaction/mouseinputstate.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * diff --git a/include/openspace/interaction/scriptcamerastates.h b/include/openspace/interaction/scriptcamerastates.h index 716e145670..2aebcc070f 100644 --- a/include/openspace/interaction/scriptcamerastates.h +++ b/include/openspace/interaction/scriptcamerastates.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * diff --git a/include/openspace/interaction/sessionrecording.h b/include/openspace/interaction/sessionrecording.h index 0741e4e6f6..4603fc2c55 100644 --- a/include/openspace/interaction/sessionrecording.h +++ b/include/openspace/interaction/sessionrecording.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -25,868 +25,62 @@ #ifndef __OPENSPACE_CORE___SESSIONRECORDING___H__ #define __OPENSPACE_CORE___SESSIONRECORDING___H__ -#include - #include -#include -#include +#include +#include +#include +#include +#include #include -#include namespace openspace::interaction { -struct ConversionError : public ghoul::RuntimeError { - explicit ConversionError(std::string msg); +enum class DataMode { + Ascii = 0, + Binary }; -class SessionRecording : public properties::PropertyOwner { -public: +struct SessionRecording { + struct Entry { + auto operator<=>(const SessionRecording::Entry&) const = default; - inline static const std::string FileHeaderTitle = "OpenSpace_record/playback"; - inline static const std::string HeaderCameraAscii = "camera"; - inline static const std::string HeaderTimeAscii = "time"; - inline static const std::string HeaderScriptAscii = "script"; - inline static const std::string HeaderCommentAscii = "#"; - inline static const char HeaderCameraBinary = 'c'; - inline static const char HeaderTimeBinary = 't'; - inline static const char HeaderScriptBinary = 's'; - inline static const std::string FileExtensionBinary = ".osrec"; - inline static const std::string FileExtensionAscii = ".osrectxt"; + using Camera = KeyframeNavigator::CameraPose; + using Script = std::string; - enum class DataMode { - Ascii = 0, - Binary, - Unknown + double timestamp = 0.0; + double simulationTime = 0.0; + std::variant value; }; - enum class SessionState { - Idle = 0, - Recording, - Playback, - PlaybackPaused - }; - - struct Timestamps { - double timeOs; - double timeRec; - double timeSim; - }; - - /* - * Struct for storing a script substring that, if found in a saved script, - * will be replaced by its substringReplacement counterpart. - */ - struct ScriptSubstringReplace { - std::string substringFound; - std::string substringReplacement; - ScriptSubstringReplace(std::string found, std::string replace) - : substringFound(found) - , substringReplacement(replace) {} - }; - - static const size_t FileHeaderVersionLength = 5; - char FileHeaderVersion[FileHeaderVersionLength+1] = "01.00"; - char TargetConvertVersion[FileHeaderVersionLength+1] = "01.00"; - static const char DataFormatAsciiTag = 'A'; - static const char DataFormatBinaryTag = 'B'; - static const size_t keyframeHeaderSize_bytes = 33; - static const size_t saveBufferCameraSize_min = 82; - static const size_t saveBufferStringSize_max = 2000; - static const size_t _saveBufferMaxSize_bytes = keyframeHeaderSize_bytes + - + saveBufferCameraSize_min + saveBufferStringSize_max; - - using CallbackHandle = int; - using StateChangeCallback = std::function; - - SessionRecording(); - SessionRecording(bool isGlobal); - - ~SessionRecording() override; - - /** - * Used to de-initialize the session recording feature. Any recording or playback - * in progress will be stopped, files closed, and keyframes in memory deleted. - */ - void deinitialize(); - - /** - * This is called with every rendered frame. If in recording state, the camera - * state will be saved to the recording file (if its state has changed since last). - * If in playback state, the next keyframe will be used (if it is time to do so). - */ - void preSynchronization(); - - /** - * If enabled, calling this function will render information about the session - * recording that is currently taking place to the screen. - */ - void render(); - - /** - * Current time based on playback mode - */ - double currentTime() const; - - /** - * Fixed delta time set by user for use during saving of frame during playback mode - */ - double fixedDeltaTimeDuringFrameOutput() const; - - /** - * Returns the number of microseconds that have elapsed since playback started, if - * playback is set to be in the mode where a screenshot is captured with every - * rendered frame (enableTakeScreenShotDuringPlayback() is used to enable this mode). - * At the start of playback, this timer is set to the current steady_clock value. - * However, during playback it is incremented by the fixed framerate of the playback - * rather than the actual clock value (as in normal operation). - * - * \returns number of microseconds elapsed since playback started in terms of the - * number of rendered frames multiplied by the fixed time increment per - * frame - */ - std::chrono::steady_clock::time_point currentPlaybackInterpolationTime() const; - - /** - * Returns the simulated application time. This simulated application time is only - * used when playback is set to be in the mode where a screenshot is captured with - * every rendered frame (enableTakeScreenShotDuringPlayback() is used to enable this - * mode). At the start of playback, this timer is set to the value of the current - * applicationTime function provided by the window delegate (used during normal - * mode or playback). However, during playback it is incremented by the fixed - * framerate of the playback rather than the actual clock value. - * - * \returns application time in seconds, for use in playback-with-frames mode - */ - double currentApplicationInterpolationTime() const; - - /** - * Starts a recording session, which will save data to the provided filename - * according to the data format specified, and will continue until recording is - * stopped using stopRecording() method. - * - * \param filename file saved with recorded keyframes. - * - * \returns true if recording to file starts without errors. - */ - bool startRecording(const std::string& filename); - - /** - * Starts a recording session, which will save data to the provided filename - * in ASCII data format until recording is stopped using stopRecording() method. - * - * \param dataMode The format in which the session recording is stored - */ - void setRecordDataFormat(DataMode dataMode); - - /** - * Used to stop a recording in progress. If open, the recording file will be closed, - * and all keyframes deleted from memory. - */ - void stopRecording(); - - /** - * Used to check if a session recording is in progress. - * - * \return true if recording is in progress - */ - bool isRecording() const; - - /** - * Starts a playback session, which can run in one of three different time modes. - * - * \param filename file containing recorded keyframes to play back. The file path - * is relative to the base recordings directory specified in the - * config file by the RECORDINGS variable - * \param timeMode which of the 3 time modes to use for time reference during - * \param forceSimTimeAtStart if true simulation time is forced to that of playback - * playback: recorded time, application time, or simulation time. See the - * LuaLibrary entry for SessionRecording for details on these time modes - * \param loop if true then the file will playback in loop mode, continuously - * looping back to the beginning until it is manually stopped - * \param shouldWaitForFinishedTiles if true, the playback will wait for tiles to be - * finished before progressing to the next frame. This value is only used when - * `enableTakeScreenShotDuringPlayback` was called before. Otherwise this value - * will be ignored - * - * \return `true` if recording to file starts without errors - */ - bool startPlayback(std::string& filename, KeyframeTimeRef timeMode, - bool forceSimTimeAtStart, bool loop, bool shouldWaitForFinishedTiles); - - /** - * Used to stop a playback in progress. If open, the playback file will be closed, - * and all keyframes deleted from memory. - */ - void stopPlayback(); - - /** - * Returns playback pause status. - * - * \return `true` if playback is paused - */ - bool isPlaybackPaused(); - - /** - * Pauses a playback session. This does both the normal pause functionality of - * setting simulation delta time to zero, and pausing the progression through the - * timeline. - * - * \param pause if true, then will set playback timeline progression to zero - */ - void setPlaybackPause(bool pause); - - /** - * Enables that rendered frames should be saved during playback - * \param fps Number of frames per second. - */ - void enableTakeScreenShotDuringPlayback(int fps); - - /** - * Used to disable that renderings are saved during playback - */ - void disableTakeScreenShotDuringPlayback(); - - /** - * Used to check if a session playback is in progress. - * \returns true if playback is in progress. - */ - bool isPlayingBack() const; - - /** - * Is saving frames during playback - */ - bool isSavingFramesDuringPlayback() const; - - bool shouldWaitForTileLoading() const; - - /** - * Used to obtain the state of idle/recording/playback. - * - * \return int value of state as defined by struct SessionState - */ - SessionState state() const; - - /** - * Used to trigger a save of the camera states (position, rotation, focus node, - * whether it is following the rotation of a node, and timestamp). The data will be - * saved to the recording file only if a recording is currently in progress. - */ - void saveCameraKeyframeToTimeline(); - - /** - * Used to trigger a save of the current timing states. The data will be saved to the - * recording file only if a recording is currently in progress. - */ - void saveTimeKeyframeToTimeline(); - - /** - * Used to trigger a save of a script to the recording file, but only if a recording - * is currently in progress. - * - * \param scriptToSave String of the Lua command to be saved - */ - void saveScriptKeyframeToTimeline(std::string scriptToSave); - - /** - * \return The Lua library that contains all Lua functions available to affect the - * interaction - */ - static openspace::scripting::LuaLibrary luaLibrary(); - - /** - * Used to request a callback for notification of playback state change. - * - * \param cb function handle for callback - * - * \return CallbackHandle value of callback number - */ - CallbackHandle addStateChangeCallback(StateChangeCallback cb); - - /** - * Removes the callback for notification of playback state change. - * - * \param callback function handle for the callback - */ - void removeStateChangeCallback(CallbackHandle callback); - - /** - * Provides list of available playback files. - * - * \return vector of filenames in recordings dir - */ - std::vector playbackList() const; - - /** - * Reads a camera keyframe from a binary format playback file, and populates input - * references with the parameters of the keyframe. - * - * \param times reference to a timestamps structure which contains recorded times - * \param kf reference to a camera keyframe which contains camera details - * \param file an ifstream reference to the playback file being read - * \param lineN keyframe number in playback file where this keyframe resides - * - * \return true if data read has no errors - */ - bool readCameraKeyframeBinary(Timestamps& times, - datamessagestructures::CameraKeyframe& kf, std::ifstream& file, int lineN); - - /** - * Reads a camera keyframe from an ascii format playback file, and populates input - * references with the parameters of the keyframe. - * - * \param times reference to a timestamps structure which contains recorded times - * \param kf reference to a camera keyframe which contains camera details - * \param currentParsingLine string containing the most current line that was read - * \param lineN line number in playback file where this keyframe resides - * - * \return true if data read has no errors - */ - bool readCameraKeyframeAscii(Timestamps& times, - datamessagestructures::CameraKeyframe& kf, std::string currentParsingLine, - int lineN); - - /** - * Reads a time keyframe from a binary format playback file, and populates input - * references with the parameters of the keyframe. - * - * \param times reference to a timestamps structure which contains recorded times - * \param kf reference to a time keyframe which contains time details - * \param file an ifstream reference to the playback file being read - * \param lineN keyframe number in playback file where this keyframe resides - * - * \return true if data read has no errors - */ - bool readTimeKeyframeBinary(Timestamps& times, - datamessagestructures::TimeKeyframe& kf, std::ifstream& file, int lineN); - - /** - * Reads a time keyframe from an ascii format playback file, and populates input - * references with the parameters of the keyframe. - * - * \param times reference to a timestamps structure which contains recorded times - * \param kf reference to a time keyframe which contains time details - * \param currentParsingLine string containing the most current line that was read - * \param lineN line number in playback file where this keyframe resides - * - * \return true if data read has no errors - */ - bool readTimeKeyframeAscii(Timestamps& times, - datamessagestructures::TimeKeyframe& kf, std::string currentParsingLine, - int lineN); - - /** - * Reads a script keyframe from a binary format playback file, and populates input - * references with the parameters of the keyframe. - * - * \param times reference to a timestamps structure which contains recorded times - * \param kf reference to a script keyframe which contains the size of the script - * (in chars) and the text itself - * \param file an ifstream reference to the playback file being read - * \param lineN keyframe number in playback file where this keyframe resides - * - * \return true if data read has no errors - */ - bool readScriptKeyframeBinary(Timestamps& times, - datamessagestructures::ScriptMessage& kf, std::ifstream& file, int lineN); - - /** - * Reads a script keyframe from an ascii format playback file, and populates input - * references with the parameters of the keyframe. - * - * \param times reference to a timestamps structure which contains recorded times - * \param kf reference to a script keyframe which contains the size of the script - * (in chars) and the text itself - * \param currentParsingLine string containing the most current line that was read - * \param lineN line number in playback file where this keyframe resides - * - * \return true if data read has no errors - */ - bool readScriptKeyframeAscii(Timestamps& times, - datamessagestructures::ScriptMessage& kf, std::string currentParsingLine, - int lineN); - - /** - * Writes a camera keyframe to a binary format recording file using a CameraKeyframe - * - * \param times reference to a timestamps structure which contains recorded times - * \param kf reference to a camera keyframe which contains the camera details - * \param kfBuffer a buffer temporarily used for preparing data to be written - * \param file an ofstream reference to the recording file being written-to - */ - void saveCameraKeyframeBinary(Timestamps& times, - datamessagestructures::CameraKeyframe& kf, unsigned char* kfBuffer, - std::ofstream& file); - - /** - * Writes a camera keyframe to an ascii format recording file using a CameraKeyframe - * - * \param times reference to a timestamps structure which contains recorded times - * \param kf reference to a camera keyframe which contains the camera details - * \param file an ofstream reference to the recording file being written-to - */ - void saveCameraKeyframeAscii(Timestamps& times, - datamessagestructures::CameraKeyframe& kf, std::ofstream& file); - - /** - * Writes a time keyframe to a binary format recording file using a TimeKeyframe - * - * \param times reference to a timestamps structure which contains recorded times - * \param kf reference to a time keyframe which contains the time details - * \param kfBuffer a buffer temporarily used for preparing data to be written - * \param file an ofstream reference to the recording file being written-to - */ - void saveTimeKeyframeBinary(Timestamps& times, - datamessagestructures::TimeKeyframe& kf, unsigned char* kfBuffer, - std::ofstream& file); - - /** - * Writes a time keyframe to an ascii format recording file using a TimeKeyframe - * - * \param times reference to a timestamps structure which contains recorded times - * \param kf reference to a time keyframe which contains the time details - * \param file an ofstream reference to the recording file being written-to - */ - void saveTimeKeyframeAscii(Timestamps& times, - datamessagestructures::TimeKeyframe& kf, std::ofstream& file); - - /** - * Writes a script keyframe to a binary format recording file using a ScriptMessage - * - * \param times reference to a timestamps structure which contains recorded times - * \param sm reference to a ScriptMessage object which contains the script details - * \param smBuffer a buffer temporarily used for preparing data to be written - * \param file an ofstream reference to the recording file being written-to - */ - void saveScriptKeyframeBinary(Timestamps& times, - datamessagestructures::ScriptMessage& sm, unsigned char* smBuffer, - std::ofstream& file); - - /** - * Writes a script keyframe to an ascii format recording file using a ScriptMessage - * - * \param times reference to a timestamps structure which contains recorded times - * \param sm reference to a ScriptMessage which contains the script details - * \param file an ofstream reference to the recording file being written-to - */ - void saveScriptKeyframeAscii(Timestamps& times, - datamessagestructures::ScriptMessage& sm, std::ofstream& file); - - /** - * Since session recordings only record changes, the initial conditions aren't - * preserved when a playback starts. This function is called whenever a property - * value is set and a recording is in progress. Before the set happens, this - * function will read the current value of the property and store it so that when - * the recording is finished, the initial state will be added as a set property - * command at the beginning of the recording file, to be applied when playback - * starts. - * - * \param prop The property being set - */ - void savePropertyBaseline(properties::Property& prop); - - /** - * Reads header information from a session recording file - * - * \param stream reference to ifstream that contains the session recording file data - * \param readLen_chars number of characters to be read, which may be the expected - * length of the header line, or an arbitrary number of characters within it - */ - static std::string readHeaderElement(std::ifstream& stream, size_t readLen_chars); - - /** - * Reads header information from a session recording file - * - * \param stream reference to ifstream that contains the session recording file - * data - * \param readLen_chars number of characters to be read, which may be the expected - * length of the header line, or an arbitrary number of characters within it - */ - static std::string readHeaderElement(std::stringstream& stream, size_t readLen_chars); - - /** - * Writes a header to a binary recording file buffer - * - * \param times reference to a timestamps structure which contains recorded times - * \param type single character signifying the keyframe type - * \param kfBuffer the char buffer holding the recording info to be written - * \param idx index into write buffer (this is updated with the num of chars written) - */ - static void saveHeaderBinary(Timestamps& times, char type, unsigned char* kfBuffer, - size_t& idx); - - /** - * Writes a header to an ascii recording file buffer - * - * \param times reference to a timestamps structure which contains recorded times - * \param type string signifying the keyframe type - * \param line the stringstream buffer being written to - */ - static void saveHeaderAscii(Timestamps& times, const std::string& type, - std::stringstream& line); - - /** - * Saves a keyframe to an ascii recording file - * - * \param entry the ascii string version of the keyframe (any type) - * \param file ofstream object to write to - */ - static void saveKeyframeToFile(std::string entry, std::ofstream& file); - - /** - * Checks if a specified recording file ends with a particular file extension - * - * \param filename the name of the file to record to - * \param extension the file extension to check for - */ - static bool hasFileExtension(std::string filename, std::string extension); - - /** - * Converts file format of a session recording file to the current format version - * (will determine the file format conversion to convert from based on the file's - * header version number). - * - * \param filename name of the file to convert - * \param depth iteration number to prevent runaway recursion (init call with zero) - * - * \return string containing the filename of the previous conversion step. This is - * used if there are multiple conversion steps where each step has to use - * the output of the previous. - */ - std::string convertFile(std::string filename, int depth = 0); - - /** - * Converts file format of a session recording file to the current format version - * (will determine the file format conversion to convert from based on the file's - * header version number). Accepts a relative path (currently from task runner dir) - * rather than a path assumed to be relative to ${RECORDINGS}. - * - * \param filenameRelative name of the file to convert - */ - void convertFileRelativePath(std::string filenameRelative); - - /** - * Goes to legacy session recording inherited class, and calls its convertFile() - * method, and then returns the resulting conversion filename. - * - * \param filename name of the file to convert - * \param depth iteration number to prevent runaway recursion (init call with zero) - * - * \return string containing the filename of the conversion - */ - virtual std::string getLegacyConversionResult(std::string filename, int depth); - - /* - * Version string for file format version currently supported by this class - * - * \return string of the file format version this class supports - */ - virtual std::string fileFormatVersion(); - - /* - * Version string for file format version that a conversion operation will convert - * to (e.g. upgrades to this version). This is only relevant for inherited classes - * that support conversion from legacy versions (if called in the base class, it - * will return its own current version). - * - * \return string of the file format version this class supports - */ - virtual std::string targetFileFormatVersion(); - - /* - * Determines a filename for the conversion result based on the original filename - * and the file format version number. - * - * \param filename source filename to be converted - * - * \return pathname of the converted version of the file - */ - std::string determineConversionOutFilename(const std::string filename, DataMode mode); - -protected: - properties::BoolProperty _renderPlaybackInformation; - properties::BoolProperty _ignoreRecordedScale; - - enum class RecordedType { - Camera = 0, - Time, - Script, - Invalid - }; - struct TimelineEntry { - RecordedType keyframeType; - unsigned int idxIntoKeyframeTypeArray; - Timestamps t3stamps; - }; - double _timestampRecordStarted = 0.0; - Timestamps _timestamps3RecordStarted{ 0.0, 0.0, 0.0 }; - double _timestampPlaybackStarted_application = 0.0; - double _timestampPlaybackStarted_simulation = 0.0; - double _timestampApplicationStarted_simulation = 0.0; - bool hasCameraChangedFromPrev(datamessagestructures::CameraKeyframe kfNew); - double appropriateTimestamp(Timestamps t3stamps); - double equivalentSimulationTime(double timeOs, double timeRec, double timeSim); - double equivalentApplicationTime(double timeOs, double timeRec, double timeSim); - void recordCurrentTimePauseState(); - void recordCurrentTimeRate(); - bool handleRecordingFile(std::string filenameIn); - static bool isPath(std::string& filename); - void removeTrailingPathSlashes(std::string& filename); - bool playbackCamera(); - bool playbackTimeChange(); - bool playbackScript(); - bool playbackAddEntriesToTimeline(); - void signalPlaybackFinishedForComponent(RecordedType type); - void handlePlaybackEnd(); - - bool findFirstCameraKeyframeInTimeline(); - Timestamps generateCurrentTimestamp3(double keyframeTime); - static void saveStringToFile(const std::string& s, unsigned char* kfBuffer, - size_t& idx, std::ofstream& file); - static void saveKeyframeToFileBinary(unsigned char* bufferSource, size_t size, - std::ofstream& file); - - bool addKeyframe(Timestamps t3stamps, - interaction::KeyframeNavigator::CameraPose keyframe, int lineNum); - bool addKeyframe(Timestamps t3stamps, - datamessagestructures::TimeKeyframe keyframe, int lineNum); - bool addKeyframe(Timestamps t3stamps, - std::string scriptToQueue, int lineNum); - bool addKeyframeToTimeline(std::vector& timeline, RecordedType type, - size_t indexIntoTypeKeyframes, Timestamps t3stamps, int lineNum); - - void initializePlayback_time(double now); - void initializePlayback_modeFlags(); - bool initializePlayback_timeline(); - void initializePlayback_triggerStart(); - void moveAheadInTime(); - void lookForNonCameraKeyframesThatHaveComeDue(double currTime); - void updateCameraWithOrWithoutNewKeyframes(double currTime); - bool isTimeToHandleNextNonCameraKeyframe(double currTime); - bool processNextNonCameraKeyframeAheadInTime(); - bool findNextFutureCameraIndex(double currTime); - bool processCameraKeyframe(double now); - bool processScriptKeyframe(); - bool readSingleKeyframeCamera(datamessagestructures::CameraKeyframe& kf, - Timestamps& times, DataMode mode, std::ifstream& file, - std::string& inLine, const int lineNum); - void saveSingleKeyframeCamera(datamessagestructures::CameraKeyframe& kf, - Timestamps& times, DataMode mode, std::ofstream& file, unsigned char* buffer); - bool readSingleKeyframeTime(datamessagestructures::TimeKeyframe& kf, - Timestamps& times, DataMode mode, std::ifstream& file, std::string& inLine, - const int lineNum); - void saveSingleKeyframeTime(datamessagestructures::TimeKeyframe& kf, - Timestamps& times, DataMode mode, std::ofstream& file, unsigned char* buffer); - bool readSingleKeyframeScript(datamessagestructures::ScriptMessage& kf, - Timestamps& times, DataMode mode, std::ifstream& file, std::string& inLine, - const int lineNum); - void saveSingleKeyframeScript(datamessagestructures::ScriptMessage& kf, - Timestamps& times, DataMode mode, std::ofstream& file, unsigned char* buffer); - void saveScriptKeyframeToPropertiesBaseline(std::string script); - bool isPropertyAllowedForBaseline(const std::string& propString); - unsigned int findIndexOfLastCameraKeyframeInTimeline(); - bool doesTimelineEntryContainCamera(unsigned int index) const; - bool doesStartWithSubstring(const std::string& s, const std::string& matchSubstr); - void trimCommandsFromScriptIfFound(std::string& script); - void replaceCommandsFromScriptIfFound(std::string& script); - - RecordedType getNextKeyframeType(); - RecordedType getPrevKeyframeType(); - double getNextTimestamp(); - double getPrevTimestamp(); - void cleanUpPlayback(); - void cleanUpRecording(); - void cleanUpTimelinesAndKeyframes(); - bool convertEntries(std::string& inFilename, std::stringstream& inStream, - DataMode mode, int lineNum, std::ofstream& outFile); - virtual bool convertCamera(std::stringstream& inStream, DataMode mode, int lineNum, - std::string& inputLine, std::ofstream& outFile, unsigned char* buff); - virtual bool convertTimeChange(std::stringstream& inStream, DataMode mode, - int lineNum, std::string& inputLine, std::ofstream& outFile, unsigned char* buff); - virtual bool convertScript(std::stringstream& inStream, DataMode mode, int lineNum, - std::string& inputLine, std::ofstream& outFile, unsigned char* buff); - DataMode readModeFromHeader(std::string filename); - void readPlaybackHeader_stream(std::stringstream& conversionInStream, - std::string& version, DataMode& mode); - void populateListofLoadedSceneGraphNodes(); - - void checkIfScriptUsesScenegraphNode(std::string s); - bool checkForScenegraphNodeAccessScene(std::string& s); - bool checkForScenegraphNodeAccessNav(std::string& navTerm); - std::string extractScenegraphNodeFromScene(std::string& s); - bool checkIfInitialFocusNodeIsLoaded(unsigned int firstCamIndex); - std::string isolateTermFromQuotes(std::string s); - void eraseSpacesFromString(std::string& s); - std::string getNameFromSurroundingQuotes(std::string& s); - - static void writeToFileBuffer(unsigned char* buf, size_t& idx, double src); - static void writeToFileBuffer(unsigned char* buf, size_t& idx, std::vector& cv); - static void writeToFileBuffer(unsigned char* buf, size_t& idx, unsigned char c); - static void writeToFileBuffer(unsigned char* buf, size_t& idx, bool b); - void readFileIntoStringStream(std::string filename, - std::ifstream& inputFstream, std::stringstream& stream); - - DataMode _recordingDataMode = DataMode::Binary; - SessionState _state = SessionState::Idle; - SessionState _lastState = SessionState::Idle; - std::string _playbackFilename; - std::ifstream _playbackFile; - std::string _playbackLineParsing; - std::ofstream _recordFile; - int _playbackLineNum = 1; - int _recordingEntryNum = 1; - KeyframeTimeRef _playbackTimeReferenceMode; - datamessagestructures::CameraKeyframe _prevRecordedCameraKeyframe; - bool _playbackActive_camera = false; - bool _playbackActive_time = false; - bool _playbackActive_script = false; - bool _hasHitEndOfCameraKeyframes = false; - bool _playbackPausedWithinDeltaTimePause = false; - bool _playbackLoopMode = false; - bool _playbackForceSimTimeAtStart = false; - double _playbackPauseOffset = 0.0; - double _previousTime = 0.0; - - bool _saveRenderingDuringPlayback = false; - double _saveRenderingDeltaTime = 1.0 / 30.0; - double _saveRenderingCurrentRecordedTime = 0.0; - bool _shouldWaitForFinishLoadingWhenPlayback = false; - std::chrono::steady_clock::duration _saveRenderingDeltaTime_interpolation_usec; - std::chrono::steady_clock::time_point _saveRenderingCurrentRecordedTime_interpolation; - double _saveRenderingCurrentApplicationTime_interpolation = 0.0; - long long _saveRenderingClockInterpolation_countsPerSec = 1; - bool _saveRendering_isFirstFrame = true; - - unsigned char _keyframeBuffer[_saveBufferMaxSize_bytes]; - - bool _cleanupNeededRecording = false; - bool _cleanupNeededPlayback = false; - const std::string scriptReturnPrefix = "return "; - - std::vector _keyframesCamera; - std::vector _keyframesTime; - std::vector _keyframesScript; - std::vector _timeline; - - std::vector _keyframesSavePropertiesBaseline_scripts; - std::vector _keyframesSavePropertiesBaseline_timeline; - std::vector _propertyBaselinesSaved; - const std::vector _propertyBaselineRejects = { - "NavigationHandler.OrbitalNavigator.Anchor", - "NavigationHandler.OrbitalNavigator.Aim", - "NavigationHandler.OrbitalNavigator.RetargetAnchor", - "NavigationHandler.OrbitalNavigator.RetargetAim" - }; - //A script that begins with an exact match of any of the strings contained in - // _scriptRejects will not be recorded - const std::vector _scriptRejects = { - "openspace.sessionRecording.enableTakeScreenShotDuringPlayback", - "openspace.sessionRecording.startPlayback", - "openspace.sessionRecording.stopPlayback", - "openspace.sessionRecording.startRecording", - "openspace.sessionRecording.stopRecording", - "openspace.scriptScheduler.clear" - }; - const std::vector _navScriptsUsingNodes = { - "RetargetAnchor", - "Anchor", - "Aim" - }; - //Any script snippet included in this vector will be trimmed from any script - // from the script manager, before it is recorded in the session recording file. - // The remainder of the script will be retained. - const std::vector _scriptsToBeTrimmed = { - "openspace.sessionRecording.togglePlaybackPause" - }; - //Any script snippet included in this vector will be trimmed from any script - // from the script manager, before it is recorded in the session recording file. - // The remainder of the script will be retained. - const std::vector _scriptsToBeReplaced = { - { - "openspace.time.pauseToggleViaKeyboard", - "openspace.time.interpolateTogglePause" - } - }; - std::vector _loadedNodes; - - unsigned int _idxTimeline_nonCamera = 0; - unsigned int _idxTime = 0; - unsigned int _idxScript = 0; - - unsigned int _idxTimeline_cameraPtrNext = 0; - unsigned int _idxTimeline_cameraPtrPrev = 0; - - unsigned int _idxTimeline_cameraFirstInTimeline = 0; - double _cameraFirstInTimeline_timestamp = 0; - - int _nextCallbackHandle = 0; - std::vector> _stateChangeCallbacks; - - DataMode _conversionDataMode = DataMode::Binary; - int _conversionLineNum = 1; - const int _maximumRecursionDepth = 50; -}; - -// Instructions for bumping the file format version with new changes: -// -// 1. Create a new subclass with the current version # in its name, such as: -// SessionRecording_legacy_####, which inherits from SessionRecording -// 2. Override any method that changes in the new version. This includes both -// methods in SessionRecording class and structs in -// openspace::datamessagestructure that do data read/writes. Make the modified -// method/struct virtual, and override it in the new legacy subclass. This -// override will contain the code as it is before the new changes. This will -// need to be done in every legacy subclass/struct that exists, but only if that -// subclass does NOT already contain an override of that method/struct. -// 3. Override FileHeaderVersion with the version # of the new subclass (which is -// the version being replaced by the new changes). -// 4. Override TargetConvertVersion with the version # with the new changes. This -// is now the version that this legacy subclass converts up to. -// 5. Override getLegacyConversionResult method so that it creates an instance of -// the new version subclass. This is how the current version looks back to the -// legacy version that preceded it. -// 6. The convert method for frame types that changed will need to be changed -// (for example SessionRecording_legacy_0085::convertScript uses its own -// override of script keyframe for the conversion functionality). - -class SessionRecording_legacy_0085 : public SessionRecording { -public: - SessionRecording_legacy_0085() : SessionRecording() {} - ~SessionRecording_legacy_0085() override {} - char FileHeaderVersion[FileHeaderVersionLength+1] = "00.85"; - char TargetConvertVersion[FileHeaderVersionLength+1] = "01.00"; - std::string fileFormatVersion() override { - return std::string(FileHeaderVersion); - } - std::string targetFileFormatVersion() override { - return std::string(TargetConvertVersion); - } - std::string getLegacyConversionResult(std::string filename, int depth) override; - - struct ScriptMessage_legacy_0085 : public datamessagestructures::ScriptMessage { - void read(std::istream* in) override { - size_t strLen; - //Read string length from file - in->read(reinterpret_cast(&strLen), sizeof(strLen)); - if (strLen > saveBufferStringSize_max) { - throw ConversionError("Invalid script size for conversion read"); + auto operator<=>(const SessionRecording&) const = default; + + std::vector entries; + + bool hasCameraFrame() const noexcept; + + // Call the provided \p function for all entries of the specified type \tparam T. The + // function calls will be ordered by the entries timestamps. If the callback function + // returns `true`, the loop is aborted + template + void forAll(std::function function) { + for (const Entry& e : entries) { + if (std::holds_alternative(e.value)) { + bool cont = function(std::get(e.value)); + if (cont) { + break; + } } - //Read back full string - std::vector temp(strLen + 1); - in->read(temp.data(), strLen); - temp[strLen] = '\0'; - - _script.erase(); - _script = temp.data(); } - }; - -protected: - bool convertScript(std::stringstream& inStream, DataMode mode, int lineNum, - std::string& inputLine, std::ofstream& outFile, unsigned char* buffer) override; + } }; -} // namespace openspace +SessionRecording loadSessionRecording(const std::filesystem::path& filename); +void saveSessionRecording(const std::filesystem::path& filename, + const SessionRecording& sessionRecording, DataMode dataMode); -#include "sessionrecording.inl" +std::vector sessionRecordingToDictionary( + const SessionRecording& recording); + +} // namespace openspace::interaction #endif // __OPENSPACE_CORE___SESSIONRECORDING___H__ diff --git a/include/openspace/interaction/sessionrecordinghandler.h b/include/openspace/interaction/sessionrecordinghandler.h new file mode 100644 index 0000000000..7b1a8aeb69 --- /dev/null +++ b/include/openspace/interaction/sessionrecordinghandler.h @@ -0,0 +1,288 @@ +/***************************************************************************************** + * * + * OpenSpace * + * * + * Copyright (c) 2014-2025 * + * * + * 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_CORE___SESSIONRECORDINGHANDLER___H__ +#define __OPENSPACE_CORE___SESSIONRECORDINGHANDLER___H__ + +#include + +#include +#include +#include + +namespace openspace::interaction { + +class SessionRecordingHandler : public properties::PropertyOwner { +public: + enum class SessionState { + Idle = 0, + Recording, + Playback, + PlaybackPaused + }; + + using CallbackHandle = int; + using StateChangeCallback = std::function; + + SessionRecordingHandler(); + ~SessionRecordingHandler() override = default; + + /** + * This is called with every rendered frame. If in recording state, the camera state + * will be saved to the recording file (if its state has changed since last). If in + * playback state, the next keyframe will be used (if it is time to do so). + */ + void preSynchronization(double dt); + + /** + * If enabled, calling this function will render information about the session + * recording that is currently taking place to the screen. + */ + void render() const; + + /** + * Fixed delta time set by user for use during saving of frame during playback mode. + */ + double fixedDeltaTimeDuringFrameOutput() const; + + /** + * Returns the number of microseconds that have elapsed since playback started, if + * playback is set to be in the mode where a screenshot is captured with every + * rendered frame (enableTakeScreenShotDuringPlayback() is used to enable this mode). + * At the start of playback, this timer is set to the current steady_clock value. + * However, during playback it is incremented by the fixed framerate of the playback + * rather than the actual clock value (as in normal operation). + * + * \return Number of microseconds elapsed since playback started in terms of the + * number of rendered frames multiplied by the fixed time increment per frame + */ + std::chrono::steady_clock::time_point currentPlaybackInterpolationTime() const; + + /** + * Returns the simulated application time. This simulated application time is only + * used when playback is set to be in the mode where a screenshot is captured with + * every rendered frame (enableTakeScreenShotDuringPlayback() is used to enable this + * mode). At the start of playback, this timer is set to the value of the current + * applicationTime function provided by the window delegate (used during normal mode + * or playback). However, during playback it is incremented by the fixed framerate of + * the playback rather than the actual clock value. + * + * \return Application time in seconds, for use in playback-with-frames mode + */ + double currentApplicationInterpolationTime() const; + + /** + * Starts a recording session, which will save data to the provided filename according + * to the data format specified, and will continue until recording is stopped using + * stopRecording() method. + * + * \return `true` if recording to file starts without errors + */ + void startRecording(); + + /** + * Used to stop a recording in progress. If open, the recording file will be closed, + * and all keyframes deleted from memory. + * \param filename File saved with recorded keyframes + */ + void stopRecording(const std::filesystem::path& filename, DataMode dataMode); + + /** + * Used to check if a session recording is in progress. + * + * \return `true` if recording is in progress + */ + bool isRecording() const; + + /** + * Starts a playback session, which can run in one of three different time modes. + * + * \param filename File containing recorded keyframes to play back. The file path is + * relative to the base recordings directory specified in the config + * file by the RECORDINGS variable + * \param timeMode Which of the 3 time modes to use for time reference during + * \param loop If true then the file will playback in loop mode, continuously looping + * back to the beginning until it is manually stopped + * \param shouldWaitForFinishedTiles If true, the playback will wait for tiles to be + * finished before progressing to the next frame. This value is only used when + * `enableTakeScreenShotDuringPlayback` was called before. Otherwise this value + * will be ignored + */ + void startPlayback(SessionRecording timeline, bool loop, + bool shouldWaitForFinishedTiles, std::optional saveScreenshotFps); + + /** + * Used to stop a playback in progress. If open, the playback file will be closed, and + * all keyframes deleted from memory. + */ + void stopPlayback(); + + /** + * Returns playback pause status. + * + * \return `true` if playback is paused + */ + bool isPlaybackPaused() const; + + /** + * Pauses a playback session. This does both the normal pause functionality of setting + * simulation delta time to zero, and pausing the progression through the timeline. + * + * \param pause If `true`, then will set playback timeline progression to zero + */ + void setPlaybackPause(bool pause); + + /** + * Enables that rendered frames should be saved during playback. + * + * \param fps Number of frames per second. + */ + //void enableTakeScreenShotDuringPlayback(int fps); + + /** + * Used to disable that renderings are saved during playback. + */ + //void disableTakeScreenShotDuringPlayback(); + + /** + * Used to check if a session playback is in progress. + * + * \return `true` if playback is in progress + */ + bool isPlayingBack() const; + + void seek(double recordingTime); + + /** + * Is saving frames during playback. + */ + bool isSavingFramesDuringPlayback() const; + + bool shouldWaitForTileLoading() const; + + /** + * Used to obtain the state of idle/recording/playback. + * + * \return int value of state as defined by struct SessionState + */ + SessionState state() const; + + /** + * Used to trigger a save of a script to the recording file, but only if a recording + * is currently in progress. + * + * \param script String of the Lua command to be saved + */ + void saveScriptKeyframeToTimeline(std::string script); + + /** + * \return The Lua library that contains all Lua functions available to affect the + * interaction + */ + static openspace::scripting::LuaLibrary luaLibrary(); + + /** + * Used to request a callback for notification of playback state change. + * + * \param cb Function handle for callback + * \return CallbackHandle value of callback number + */ + CallbackHandle addStateChangeCallback(StateChangeCallback cb); + + /** + * Removes the callback for notification of playback state change. + * + * \param callback Function handle for the callback + */ + void removeStateChangeCallback(CallbackHandle handle); + + /** + * Provides list of available playback files. + * + * \return Vector of filenames in recordings dir + */ + std::vector playbackList() const; + + /** + * Since session recordings only record changes, the initial conditions aren't + * preserved when a playback starts. This function is called whenever a property value + * is set and a recording is in progress. Before the set happens, this function will + * read the current value of the property and store it so that when the recording is + * finished, the initial state will be added as a set property command at the + * beginning of the recording file, to be applied when playback starts. + * + * \param prop The property being set + */ + void savePropertyBaseline(properties::Property& prop); + +private: + void tickPlayback(double dt); + void tickRecording(double dt); + + void setupPlayback(double startTime); + + void cleanUpTimelinesAndKeyframes(); + + void checkIfScriptUsesScenegraphNode(std::string_view s) const; + + + properties::BoolProperty _renderPlaybackInformation; + properties::BoolProperty _ignoreRecordedScale; + properties::BoolProperty _addModelMatrixinAscii; + + struct { + double elapsedTime = 0.0; + bool isLooping = false; + bool playbackPausedWithDeltaTimePause = false; + bool waitForLoading = false; + + struct { + bool enabled = false; + double deltaTime = 1.0 / 30.0; + std::chrono::steady_clock::time_point currentRecordedTime; + double currentApplicationTime = 0.0; + } saveScreenshots; + } _playback; + + struct { + double elapsedTime = 0.0; + } _recording; + + SessionState _state = SessionState::Idle; + SessionState _lastState = SessionState::Idle; + + + SessionRecording _timeline; + std::vector::const_iterator _currentEntry = + _timeline.entries.end(); + std::unordered_map _savePropertiesBaseline; + std::vector _loadedNodes; + + int _nextCallbackHandle = 0; + std::vector> _stateChangeCallbacks; +}; + +} // namespace openspace::interaction + +#endif // __OPENSPACE_CORE___SESSIONRECORDINGHANDLER___H__ diff --git a/include/openspace/interaction/tasks/convertrecformattask.h b/include/openspace/interaction/tasks/convertrecformattask.h index 538f8324a7..385e73f9cd 100644 --- a/include/openspace/interaction/tasks/convertrecformattask.h +++ b/include/openspace/interaction/tasks/convertrecformattask.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -26,7 +26,7 @@ #define __OPENSPACE_CORE___CONVERTRECFORMATTASK___H__ #include -#include +#include #include #include @@ -41,26 +41,15 @@ public: ToBinary }; ConvertRecFormatTask(const ghoul::Dictionary& dictionary); - ~ConvertRecFormatTask() override; + ~ConvertRecFormatTask() override = default; std::string description() override; void perform(const Task::ProgressCallback& progressCallback) override; static documentation::Documentation documentation(); - void convert(); private: - void convertToAscii(); - void convertToBinary(); - void determineFormatType(); - std::string addFileSuffix(const std::string& filePath, const std::string& suffix); std::filesystem::path _inFilePath; std::filesystem::path _outFilePath; - std::ifstream _iFile; - std::ofstream _oFile; - SessionRecording::DataMode _fileFormatType; - std::string _version; - - std::string _valueFunctionLua; - SessionRecording* sessRec; + DataMode _dataMode; }; } // namespace openspace::interaction diff --git a/include/openspace/interaction/touchbar.h b/include/openspace/interaction/touchbar.h index f27b738332..68c9263dba 100644 --- a/include/openspace/interaction/touchbar.h +++ b/include/openspace/interaction/touchbar.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * diff --git a/include/openspace/interaction/websocketcamerastates.h b/include/openspace/interaction/websocketcamerastates.h index 1ed1e933a8..2fc50547bf 100644 --- a/include/openspace/interaction/websocketcamerastates.h +++ b/include/openspace/interaction/websocketcamerastates.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * diff --git a/include/openspace/interaction/websocketinputstate.h b/include/openspace/interaction/websocketinputstate.h index af010226e7..593fb22394 100644 --- a/include/openspace/interaction/websocketinputstate.h +++ b/include/openspace/interaction/websocketinputstate.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -37,7 +37,7 @@ namespace openspace::interaction { /** * Actions that any button of a websocket can have. Each button must be in one of these - * states + * states. */ enum class WebsocketAction : uint8_t { /// Idle state if the button is unpressed and has been unpressed since last frame diff --git a/include/openspace/json.h b/include/openspace/json.h index ff3a2a6458..0ee0f7f992 100644 --- a/include/openspace/json.h +++ b/include/openspace/json.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * diff --git a/include/openspace/mission/mission.h b/include/openspace/mission/mission.h index 281fe107ae..f959cbc913 100644 --- a/include/openspace/mission/mission.h +++ b/include/openspace/mission/mission.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -51,8 +51,8 @@ struct Milestone { * phases within phases. Designed for WORM usage (Write Once, Read Multiple), and, * therefore, has only accessors. * - * Each MissionPhase is characterized by its MissionPhase::name, a TimeRange, an - * optional MissionPhase::description, and optional subphases. + * Each MissionPhase is characterized by its MissionPhase::name, a TimeRange, an optional + * MissionPhase::description, and optional subphases. */ class MissionPhase { public: @@ -147,6 +147,7 @@ public: /** * Returns the Documentation that describes the ghoul::Dictionarty that this * MissionPhase can be constructed from. + * * \return The Documentation that describes the required structure for a Dictionary */ static documentation::Documentation Documentation(); @@ -161,7 +162,7 @@ protected: * \param trace The list of MissionPhase%s that are active during the time \p time * \param maxDepth The maximum depth of levels that will be considered * - * \pre maxDepth must not be negative + * \pre \p maxDepth must not be negative */ void phaseTrace(double time, Trace& trace, int maxDepth) const; diff --git a/include/openspace/mission/missionmanager.h b/include/openspace/mission/missionmanager.h index 4942941853..b07dcd5973 100644 --- a/include/openspace/mission/missionmanager.h +++ b/include/openspace/mission/missionmanager.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -48,15 +48,11 @@ public: MissionManager(); /** - * Reads a mission from file and maps the mission name to the Mission object. If - * this is the first mission to be loaded, the mission will also be set as the - * current active mission. + * Loads the provided mission. If this is the first mission to be loaded, the mission + * will also be set as the current active mission. * - * \param filename The file that contains the mission that is to be loaded + * \param mission The file that contains the mission that is to be loaded * \return The name of the mission that was loaded - * \pre \p filename must not be empty - * \pre \p filename must not contain tokens - * \pre \p filename must exist */ std::string loadMission(Mission mission); @@ -64,7 +60,7 @@ public: * Unloads a previously loaded mission identified by the provided \p missionName. * * \param missionName The name of the mission that should be unloded - * \pre \p filename must not be empty + * * \pre \p missionName must be a valid mission that has previously been loaded */ void unloadMission(const std::string& missionName); @@ -82,18 +78,18 @@ public: * Sets the mission with the name \p missionName as the current mission. The current * mission is what is return by `currentMission()`. * - * \pre missionName must not be empty + * \pre \p missionName must not be empty */ void setCurrentMission(const std::string& missionName); /** - * Returns true if a current mission exists + * Returns true if a current mission exists. */ bool hasCurrentMission() const; /** - * Returns the latest mission specified to `setCurrentMission()`. If no mission has - * been specified, the first mission loaded will be returned. If no mission has been + * Returns the latest mission specified to #setCurrentMission. If no mission has been + * specified, the first mission loaded will be returned. If no mission has been * loaded, a warning will be printed and a dummy mission will be returned. */ const Mission& currentMission(); @@ -103,7 +99,6 @@ public: */ const std::map& missionMap(); - static scripting::LuaLibrary luaLibrary(); private: diff --git a/include/openspace/navigation/keyframenavigator.h b/include/openspace/navigation/keyframenavigator.h index e38fba0bfb..fd979f5a83 100644 --- a/include/openspace/navigation/keyframenavigator.h +++ b/include/openspace/navigation/keyframenavigator.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -57,19 +57,21 @@ public: CameraPose() = default; CameraPose(datamessagestructures::CameraKeyframe&& kf); + auto operator<=>(const CameraPose&) const = default; }; /** - * Update camera position using the next camera pose keyframe from the timeline. - * Returns true if camera was set to a pose from the next keyframe. - * Returns false if no keyframes are available after the current time. - * \param camera A reference to the camera object to have its pose updated. - * \param ignoreFutureKeyframes true if only past keyframes are to be used. - * \returns true only if a new future keyframe is available to set camera pose. - */ - bool updateCamera(Camera& camera, bool ignoreFutureKeyframes); - static bool updateCamera(Camera* camera, const CameraPose prevPose, - const CameraPose nextPose, double t, bool ignoreFutureKeyframes); + * Update camera position using the next camera pose keyframe from the timeline. + * Returns true if camera was set to a pose from the next keyframe. Returns false if + * no keyframes are available after the current time. + * + * \param camera A reference to the camera object to have its pose updated + * \param ignoreFutureKeyframes `true` if only past keyframes are to be used + * \return true only if a new future keyframe is available to set camera pose + */ + void updateCamera(Camera& camera, bool ignoreFutureKeyframes); + static void updateCamera(Camera* camera, const CameraPose& prevPose, + const CameraPose& nextPose, double t, bool ignoreFutureKeyframes); Timeline& timeline(); void addKeyframe(double timestamp, KeyframeNavigator::CameraPose pose); diff --git a/include/openspace/navigation/navigationhandler.h b/include/openspace/navigation/navigationhandler.h index fa32df0e4d..d9e37bcae9 100644 --- a/include/openspace/navigation/navigationhandler.h +++ b/include/openspace/navigation/navigationhandler.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -85,7 +85,9 @@ public: OrbitalNavigator& orbitalNavigator(); KeyframeNavigator& keyframeNavigator(); PathNavigator& pathNavigator(); + bool isKeyFrameInteractionEnabled() const; + float jumpToFadeDuration() const; float interpolationTime() const; // Callback functions @@ -143,15 +145,15 @@ public: NavigationState navigationState(const SceneGraphNode& referenceFrame) const; void saveNavigationState(const std::filesystem::path& filepath, - const std::string& referenceFrameIdentifier); + const std::string& referenceFrameIdentifier) const; - void loadNavigationState(const std::string& filepath); + void loadNavigationState(const std::string& filepath, bool useTimeStamp); /** * Set camera state from a provided navigation state next frame. The actual position * will computed from the scene in the same frame as it is set. * - * \param state the navigation state to compute a camera positon from + * \param state The navigation state to compute a camera positon from */ void setNavigationStateNextFrame(const NavigationState& state); @@ -161,14 +163,26 @@ public: * node info. The actual position will computed from the scene in the same frame as * it is set. * - * \param spec the node specification from which to compute the resulting camera pose + * \param spec The node specification from which to compute the resulting camera pose */ void setCameraFromNodeSpecNextFrame(NodeCameraStateSpec spec); /** - * \return The Lua library that contains all Lua functions available to affect the - * interaction - */ + * Trigger a transition script after first fading out the rendering, and fading in + * the rendering when the script is finished. One example use case could be to fade + * out, move the camera to another focus node, and then fade in + * + * \param transitionScript The Lua script to handle the transition. Can be anything + * \param fadeDuration An optional duration for the fading. If unspecified, use the + * JumpToFadeDuration property + */ + void triggerFadeToTransition(const std::string& transitionScript, + std::optional fadeDuration = std::nullopt); + + /** + * \return The Lua library that contains all Lua functions available to affect the + * interaction + */ static scripting::LuaLibrary luaLibrary(); private: @@ -181,9 +195,9 @@ private: Camera* _camera = nullptr; std::function _playbackEndCallback; - static constexpr double InteractionHystersis = 0.0125; bool _inAnchorApproachSphere = false; bool _inAnchorReachSphere = false; + const SceneGraphNode* _lastAnchor = nullptr; OrbitalNavigator _orbitalNavigator; KeyframeNavigator _keyframeNavigator; @@ -195,6 +209,7 @@ private: properties::BoolProperty _disableMouseInputs; properties::BoolProperty _disableJoystickInputs; properties::BoolProperty _useKeyFrameInteraction; + properties::FloatProperty _jumpToFadeDuration; }; } // namespace openspace::interaction diff --git a/include/openspace/navigation/navigationstate.h b/include/openspace/navigation/navigationstate.h index 5418d322a6..ced0f6dd3b 100644 --- a/include/openspace/navigation/navigationstate.h +++ b/include/openspace/navigation/navigationstate.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -26,6 +26,7 @@ #define __OPENSPACE_CORE___NAVIGATIONSTATE___H__ #include +#include #include namespace openspace { @@ -37,12 +38,15 @@ namespace openspace::interaction { struct NavigationState { NavigationState() = default; explicit NavigationState(const ghoul::Dictionary& dictionary); + explicit NavigationState(const nlohmann::json& json); NavigationState(std::string anchor, std::string aim, std::string referenceFrame, glm::dvec3 position, std::optional up = std::nullopt, - double yaw = 0.0, double pitch = 0.0); + double yaw = 0.0, double pitch = 0.0, + std::optional timestamp = std::nullopt); CameraPose cameraPose() const; ghoul::Dictionary dictionary() const; + nlohmann::json toJson() const; static documentation::Documentation Documentation(); std::string anchor; @@ -52,6 +56,8 @@ struct NavigationState { std::optional up; double yaw = 0.0; double pitch = 0.0; + + std::optional timestamp; }; } // namespace openspace::interaction diff --git a/include/openspace/navigation/orbitalnavigator.h b/include/openspace/navigation/orbitalnavigator.h index b269eb79a9..ab84fad1fd 100644 --- a/include/openspace/navigation/orbitalnavigator.h +++ b/include/openspace/navigation/orbitalnavigator.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -37,16 +37,16 @@ #include #include #include -#include #include +#include #include #include #include namespace openspace { - class SceneGraphNode; class Camera; struct CameraPose; + class SceneGraphNode; struct SurfacePositionHandle; } // namespace @@ -88,10 +88,10 @@ public: void updateCameraScalingFromAnchor(double deltaTime); void resetVelocities(); - /* + /** * This function should be called on every camera interaction: for example when - * navigating using an input device, changing the focus node or starting a path or - * a session recording playback + * navigating using an input device, changing the focus node or starting a path or a + * session recording playback */ void updateOnCameraInteraction(); @@ -144,16 +144,18 @@ public: glm::quat anchorNodeToCameraRotation() const; /** - * Compute a camera position that pushed the camera position to - * a valid position over the anchor node, accounting for the - * minimal allowed distance + * Compute a camera position that pushed the camera position to a valid position over + * the anchor node, accounting for the minimal allowed distance */ glm::dvec3 pushToSurfaceOfAnchor(const glm::dvec3& cameraPosition) const; + void updateAnchor(); + std::vector syncables(); + /** - * \return the Lua library that contains all Lua functions available to affect the - * OrbitalNavigator - */ + * \return The Lua library that contains all Lua functions available to affect the + * OrbitalNavigator + */ static scripting::LuaLibrary luaLibrary(); private: @@ -185,12 +187,11 @@ private: Friction _friction; - // Anchor: Node to follow and orbit + /// Anchor: Node to follow and orbit properties::StringProperty _anchor; - // Aim: Node to look at (when camera direction is reset), - // Empty string means same as anchor. - // If these are the same node we call it the `focus` node + /// Aim: Node to look at (when camera direction is reset), empty string means same as + /// anchor. If these are the same node we call it the `focus` node properties::StringProperty _aim; // Reset camera direction to the anchor node. @@ -214,6 +215,9 @@ private: LimitZoom _limitZoom; + properties::BoolProperty _disableZoom; + properties::BoolProperty _disableRoll; + properties::FloatProperty _mouseSensitivity; properties::FloatProperty _joystickSensitivity; properties::FloatProperty _websocketSensitivity; @@ -230,11 +234,21 @@ private: properties::BoolProperty _invertMouseButtons; + properties::BoolProperty _shouldRotateAroundUp; + + enum class UpDirectionChoice { + XAxis = 0, + YAxis, + ZAxis + }; + properties::OptionProperty _upToUseForRotation; + MouseCameraStates _mouseStates; JoystickCameraStates _joystickStates; WebsocketCameraStates _websocketStates; ScriptCameraStates _scriptStates; + SyncData _syncedAnchorNode; const SceneGraphNode* _anchorNode = nullptr; const SceneGraphNode* _aimNode = nullptr; @@ -265,92 +279,107 @@ private: * from the global to the current total rotation so that * `cameraRotation = globalRotation * localRotation`. */ - CameraRotationDecomposition decomposeCameraRotationSurface(const CameraPose pose, - const SceneGraphNode& reference); + CameraRotationDecomposition decomposeCameraRotationSurface( + const CameraPose& cameraPose, const SceneGraphNode& reference); /** * Decomposes the camera's rotation in to a global and a local rotation defined by * CameraRotationDecomposition. The global rotation defines the rotation so that the * camera points towards the reference position. + * * The local rotation defines the differential from the global to the current total * rotation so that `cameraRotation = globalRotation * localRotation`. */ - CameraRotationDecomposition decomposeCameraRotation(const CameraPose pose, - glm::dvec3 reference); + CameraRotationDecomposition decomposeCameraRotation(const CameraPose& cameraPose, + const glm::dvec3& reference); /** - * Composes a pair of global and local rotations into a quaternion that can be used - * as the world rotation for a camera. + * Composes a pair of global and local rotations into a quaternion that can be used as + * the world rotation for a camera. */ - glm::dquat composeCameraRotation(const CameraRotationDecomposition& composition); + glm::dquat composeCameraRotation( + const CameraRotationDecomposition& decomposition) const; - /* - * Moves and rotates the camera around the anchor node in order to maintain the - * screen space position of the aim node. Also interpolates to the aim node, when - * retargeting the aim. + /** + * Moves and rotates the camera around the anchor node in order to maintain the screen + * space position of the aim node. Also interpolates to the aim node, when retargeting + * the aim. */ - CameraPose followAim(CameraPose pose, glm::dvec3 cameraToAnchor, - Displacement anchorToAim); + CameraPose followAim(CameraPose pose, const glm::dvec3& cameraToAnchor, + const Displacement& anchorToAim); - /* - * Perform a camera roll on the local camera rotation - * \returns a local camera rotation modified with a roll. + /** + * Perform a camera roll on the local camera rotation. + * + * \return A local camera rotation modified with a roll */ glm::dquat roll(double deltaTime, const glm::dquat& localCameraRotation) const; /** * Performs rotation around the cameras x and y axes. - * \returns a local camera rotation modified with two degrees of freedom. + * + * \return A local camera rotation modified with two degrees of freedom */ glm::dquat rotateLocally(double deltaTime, const glm::dquat& localCameraRotation) const; /** * Interpolates the camera rotation based on active interpolators. - * \returns a new rotation quaternion + * + * \return A new rotation quaternion */ glm::dquat interpolateLocalRotation(double deltaTime, const glm::dquat& localCameraRotation); - - Displacement interpolateRetargetAim(double deltaTime, CameraPose pose, - glm::dvec3 cameraToAnchor, Displacement anchorToAim); + Displacement interpolateRetargetAim(double deltaTime, const CameraPose& pose, + const glm::dvec3& prevCameraToAnchor, Displacement anchorToAim); double interpolateCameraToSurfaceDistance(double deltaTime, double currentDistance, double targetDistance); + /** + * Modify the camera position and global rotation to rotate around the up vector + * of the current anchor based on x-wise input. + * + * The up-vector to rotate around is determined by the "_upToUseForRotation" property + */ + void rotateAroundAnchorUp(double deltaTime, double speedScale, + glm::dvec3& cameraPosition, glm::dquat& globalCameraRotation); + /** * Translates the horizontal direction. If far from the anchor object, this will * result in an orbital rotation around the object. This function does not affect the * rotation but only the position. * - * \return a position vector adjusted in the horizontal direction. + * \return A position vector adjusted in the horizontal direction. */ - glm::dvec3 translateHorizontally(double deltaTime, const glm::dvec3& cameraPosition, - const glm::dvec3& objectPosition, const glm::dquat& globalCameraRotation, + glm::dvec3 translateHorizontally(double deltaTime, double speedScale, + const glm::dvec3& cameraPosition, const glm::dvec3& objectPosition, + const glm::dquat& globalCameraRotation, const SurfacePositionHandle& positionHandle) const; - /* + /** * Adds rotation to the camera position so that it follows the rotation of the anchor - * node defined by the differential anchorNodeRotationDiff. + * node defined by the differential \p focusNodeRotationDiff. * - * \return a position updated with the rotation defined by anchorNodeRotationDiff + * \return A position updated with the rotation defined by \p anchorNodeRotationDiff */ glm::dvec3 followAnchorNodeRotation(const glm::dvec3& cameraPosition, - const glm::dvec3& objectPosition, const glm::dquat& anchorNodeRotationDiff) const; + const glm::dvec3& objectPosition, const glm::dquat& focusNodeRotationDiff) const; /** * Updates the global rotation so that it points towards the anchor node. * - * \return a global rotation quaternion defining a rotation towards the anchor node + * \return A global rotation quaternion defining a rotation towards the anchor node */ glm::dquat rotateGlobally(const glm::dquat& globalCameraRotation, - const glm::dquat& aimNodeRotationDiff, + const glm::dquat& focusNodeRotationDiff, const SurfacePositionHandle& positionHandle) const; /** * Translates the camera position towards or away from the anchor node. - * \returns a position vector adjusted in the vertical direction. + * + * \return A position vector adjusted in the vertical direction. */ glm::dvec3 translateVertically(double deltaTime, const glm::dvec3& cameraPosition, const glm::dvec3& objectPosition, @@ -359,7 +388,7 @@ private: /** * Rotates the camera around the out vector of the surface. * - * \return a quaternion adjusted to rotate around the out vector of the surface + * \return A quaternion adjusted to rotate around the out vector of the surface */ glm::dquat rotateHorizontally(double deltaTime, const glm::dquat& globalCameraRotation, @@ -368,7 +397,7 @@ private: /** * Push the camera out to the surface of the object. * - * \return a position vector adjusted to be at least _minimumAllowedDistance meters + * \return A position vector adjusted to be at least _minimumAllowedDistance meters * above the actual surface of the object */ glm::dvec3 pushToSurface(const glm::dvec3& cameraPosition, @@ -387,16 +416,10 @@ private: glm::dvec3 cameraToSurfaceVector(const glm::dvec3& cameraPos, const glm::dvec3& centerPos, const SurfacePositionHandle& posHandle); - /** - * Calculates a SurfacePositionHandle given a camera position in world space. - */ - SurfacePositionHandle calculateSurfacePositionHandle(const SceneGraphNode& node, - const glm::dvec3& cameraPositionWorldSpace) const; - void resetIdleBehavior(); /** - * Apply the currently selected idle behavior to the position and rotations + * Apply the currently selected idle behavior to the position and rotations. */ void applyIdleBehavior(double deltaTime, glm::dvec3& position, glm::dquat& localRotation, glm::dquat& globalRotation); @@ -407,13 +430,11 @@ private: * * Used for IdleBehavior::Behavior::Orbit * - * \param deltaTime The time step to use for the motion. Controls the rotation angle + * \param angle The rotation angle to use for the motion * \param position The position of the camera. Will be changed by the function * \param globalRotation The camera's global rotation. Will be changed by the function - * \param speedScale A speed scale that controls the speed of the motion */ - void orbitAnchor(double deltaTime, glm::dvec3& position, - glm::dquat& globalRotation, double speedScale); + void orbitAnchor(double angle, glm::dvec3& position, glm::dquat& globalRotation); /** * Orbit the current anchor node, by adding a rotation around the given axis. For @@ -422,17 +443,19 @@ private: * vector coincides with the axis, and should be used with care. * * Used for: - * IdleBehavior::Behavior::OrbitAtConstantLat (axis = north = z-axis) and - * IdleBehavior::Behavior::OrbitAroundUp (axis = up = y-axis) + * - IdleBehavior::Behavior::OrbitAtConstantLat (axis = north = z-axis) and + * - IdleBehavior::Behavior::OrbitAroundUp (axis = up = y-axis) * * \param axis The axis to arbit around, given in model coordinates of the anchor - * \param deltaTime The time step to use for the motion. Controls the rotation angle + * \param angle The rotation angle to use for the motion * \param position The position of the camera. Will be changed by the function * \param globalRotation The camera's global rotation. Will be changed by the function - * \param speedScale A speed scale that controls the speed of the motion */ - void orbitAroundAxis(const glm::dvec3 axis, double deltaTime, glm::dvec3& position, - glm::dquat& globalRotation, double speedScale); + void orbitAroundAxis(const glm::dvec3& axis, double angle, glm::dvec3& position, + glm::dquat& globalRotation); + + double rotationSpeedScaleFromCameraHeight(const glm::dvec3& cameraPosition, + const SurfacePositionHandle& positionHandle) const; }; } // namespace openspace::interaction diff --git a/include/openspace/navigation/path.h b/include/openspace/navigation/path.h index 4c984dd10c..ffa0661a57 100644 --- a/include/openspace/navigation/path.h +++ b/include/openspace/navigation/path.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -25,6 +25,7 @@ #ifndef __OPENSPACE_CORE___PATH___H__ #define __OPENSPACE_CORE___PATH___H__ +#include #include #include #include @@ -43,119 +44,136 @@ public: AvoidCollision = 0, ZoomOutOverview, Linear, - AvoidCollisionWithLookAt // @TODO (2021-08-13, emmbr) This type right now leads - // to rapid rotations, but is useful in specific - // scenarios, e.g. close to surfaces. Later we want to - // remove it, and create a curve type that looks nicely - // at the targets when moving, avoids collisions and - // doesn't introduce sudden large changes in rotation + + // @TODO (2021-08-13, emmbr) This type right now leads to rapid rotations, but is + // useful in specific scenarios, e.g. close to surfaces. Later we want to remove + // it, and create a curve type that looks nicely at the targets when moving, + // avoids collisions and doesn't introduce sudden large changes in rotation + AvoidCollisionWithLookAt }; Path(Waypoint start, Waypoint end, Type type, - std::optional duration = std::nullopt); + std::optional duration = std::nullopt); Waypoint startPoint() const; Waypoint endPoint() const; /** - * Return the total length of the the curve for the path, in meters + * Return the total length of the the curve for the path, in meters. */ double pathLength() const; + /** + * Return the remaining distance to traverse, in meters. + */ + double remainingDistance() const; + + /** + * Estimate a value for the remaining time to reach the target, based on the + * currently progressed time and the estimation for how long the path will + * take to traverse. Note that the computation is not exact. + * + * \param speedScale The speed scale factor that may affect how fast the camera moves + * \return The estimated remaining time + */ + float estimatedRemainingTime(float speedScale) const; + /** * Return a vector of positions corresponding to the control points of the path's - * spline curve + * spline curve. */ std::vector controlPoints() const; /** * Take a step along the current path, corresponding to the delta time step \p dt, and * return the resulting camera pose. The \p speedScale is a factor that will be - * multiplied with the traversal speed + * multiplied with the traversal speed. */ CameraPose traversePath(double dt, float speedScale = 1.f); /** * Function that can be used to permaturely quit a path, for example when skipping - * to the end + * to the end. */ void quitPath(); /** * Return the identifer of the node that is the current appropriate anchor node, of * the start and end waypoint's reference node. Dtermined based on how far along the - * path we have traveled + * path we have traveled. */ std::string currentAnchor() const; /** - * Return wether the path has reached its end point or not + * Return wether the path has reached its end point or not. */ bool hasReachedEnd() const; /** * Compute the interpolated camera pose at a certain distance along a *linear* * path. Note that the linear path is a special case, to avoid risks of precision - * problems for long paths + * problems for long paths. */ CameraPose linearInterpolatedPose(double distance, double displacement); /** - * Compute the interpolated camera pose at a certain distance along the path + * Compute the interpolated camera pose at a certain distance along the path. */ CameraPose interpolatedPose(double distance) const; /** - * Reset variables used to play back path + * Reset variables used to play back path. */ void resetPlaybackVariables(); + static documentation::Documentation Documentation(); + private: /** * Interpolate between the paths start and end rotation using the approach that - * corresponds to the path's curve type. The interpolation parameter \p t is the - * same as for the position interpolation, i.e. the relative traveled distance - * along the path, in [0, 1] + * corresponds to the path's curve type. The interpolation parameter \p t is the same + * as for the position interpolation, i.e. the relative traveled distance along the + * path, in [0, 1]. * - * \param t The interpolation parameter, given as the relative traveled distance - along the path, in [0, 1] + * \param t The interpolation parameter, given as the relative traveled distance along + * the path, in [0, 1] */ glm::dquat interpolateRotation(double t) const; /** - * Compute the interpolated rotation quaternion using an eased SLERP approach + * Compute the interpolated rotation quaternion using an eased SLERP approach. * - * \param t The interpolation variable for the rotatation interpolation. - * Should be the relative traveled distance, in [0, 1] + * \param t The interpolation variable for the rotatation interpolation. Should be the + * relative traveled distance, in [0, 1] */ glm::dquat easedSlerpRotation(double t) const; /** - * Compute the interpolated rotation quaternion using a method that is customized - * for linear paths. The camera will first interpoalte to look at the targetted - * node, and keep doing so for most of the path. At the end, when within a certain - * distance from the target, the rotation is interpolated so that the camera ends up - * in the target pose at the end of the path. + * Compute the interpolated rotation quaternion using a method that is customized for + * linear paths. The camera will first interpoalte to look at the targetted node, and + * keep doing so for most of the path. At the end, when within a certain distance from + * the target, the rotation is interpolated so that the camera ends up in the target + * pose at the end of the path. * - * \param t The interpolation variable for the rotatation interpolation. - * Should be the relative traveled distance, in [0, 1] + * \param t The interpolation variable for the rotatation interpolation. Should be the + * relative traveled distance, in [0, 1] */ glm::dquat linearPathRotation(double t) const; /** * Compute the interpolated rotation quaternion using an approach that first - * interpolates to look at the start node, and then the end node, before - * interpolating to the end rotation + * interpolates to look at the start node, and then the end node, before interpolating + * to the end rotation. * - * \param t The interpolation variable for the rotatation interpolation. - * Should be the relative traveled distance, in [0, 1] + * \param t The interpolation variable for the rotatation interpolation. Should be the + * relative traveled distance, in [0, 1] */ glm::dquat lookAtTargetsRotation(double t) const; /** * Evaluate the current traversal speed along the path, based on the currently - * traveled distance. The final speed will be scaled to match the desired duration - * for the path (which might have been specified by the user) + * traveled distance. The final speed will be scaled to match the desired duration for + * the path (which might have been specified by the user). * * \param traveledDistance The current distance traveled along the path, in meters */ @@ -167,23 +185,24 @@ private: std::unique_ptr _curve; - double _speedFactorFromDuration = 1.0; + float _speedFactorFromDuration = 1.f; + float _expectedDuration = 0.f; // Playback variables double _traveledDistance = 0.0; // Meters - double _progressedTime = 0.0; // Time since playback started (seconds) + float _progressedTime = 0.f; // Time since playback started (seconds) bool _shouldQuit = false; CameraPose _prevPose; }; /** - * Create a path based on an instruction given as a dictionary. (See top of cpp file - * for documentation on keys and values for the dictionary.) - * If /p forceType is specified, that type will primarily be used as the type for the - * created path. Secondly, the type will be read from the dictionary, and lastly it will - * use the default from PathNavigator. + * Create a path based on an instruction given as a dictionary (see top of cpp file + * for documentation on keys and values for the dictionary). If \p forceType is specified, + * that type will primarily be used as the type for the created path. Secondly, the type + * will be read from the dictionary, and lastly it will use the default from + * PathNavigator. * - * \return the created path + * \return The created path */ Path createPathFromDictionary(const ghoul::Dictionary& dictionary, std::optional forceType = std::nullopt); diff --git a/include/openspace/navigation/pathcurve.h b/include/openspace/navigation/pathcurve.h index 7e8e549e71..f379f24304 100644 --- a/include/openspace/navigation/pathcurve.h +++ b/include/openspace/navigation/pathcurve.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -36,17 +36,17 @@ class Waypoint; class PathCurve { public: struct InsufficientPrecisionError : public ghoul::RuntimeError { - explicit InsufficientPrecisionError(std::string msg); + explicit InsufficientPrecisionError(std::string error); }; struct TooShortPathError : public ghoul::RuntimeError { - explicit TooShortPathError(std::string msg); + explicit TooShortPathError(std::string error); }; virtual ~PathCurve() = 0; /** - * Return the length of the curve, in meters + * Return the length of the curve, in meters. */ double length() const; @@ -56,7 +56,7 @@ public: * the full length of the path. * * Can be overridden by subclasses that want more control over the position - * interpolation + * interpolation. */ virtual glm::dvec3 positionAt(double relativeDistance) const; @@ -66,27 +66,26 @@ public: * position. Note that u does not correspond to the relatively traveled distance. * * Can be overridden by subclasses that want more control over the position - * interpolation + * interpolation. */ virtual glm::dvec3 interpolate(double u) const; /** - * Return the positions defining the control points for the spline interpolation + * Return the positions defining the control points for the spline interpolation. */ std::vector points() const; protected: /** - * Precompute information related to the spline parameters that are - * needed for arc length reparameterization. Must be called after - * control point creation. + * Precompute information related to the spline parameters that are needed for arc + * length reparameterization. Must be called after control point creation. */ void initializeParameterData(); /** - * Compute curve parameter u that matches the input arc length s. - * Input s is a length value in meters, in the range [0, _totalLength]. - * The returned curve parameter u is in range [0, 1]. + * Compute curve parameter u that matches the input arc length s. Input s is a length + * value in meters, in the range [0, _totalLength]. The returned curve parameter u is + * in range [0, 1]. */ double curveParameter(double s) const; diff --git a/include/openspace/navigation/pathcurves/avoidcollisioncurve.h b/include/openspace/navigation/pathcurves/avoidcollisioncurve.h index e4af29a49e..f42257f2f3 100644 --- a/include/openspace/navigation/pathcurves/avoidcollisioncurve.h +++ b/include/openspace/navigation/pathcurves/avoidcollisioncurve.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * diff --git a/include/openspace/navigation/pathcurves/zoomoutoverviewcurve.h b/include/openspace/navigation/pathcurves/zoomoutoverviewcurve.h index b040da1d88..32ee9ee5d8 100644 --- a/include/openspace/navigation/pathcurves/zoomoutoverviewcurve.h +++ b/include/openspace/navigation/pathcurves/zoomoutoverviewcurve.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * diff --git a/include/openspace/navigation/pathnavigator.h b/include/openspace/navigation/pathnavigator.h index 97a19ba703..97e95f1053 100644 --- a/include/openspace/navigation/pathnavigator.h +++ b/include/openspace/navigation/pathnavigator.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -64,6 +64,9 @@ public: bool hasCurrentPath() const; bool hasFinished() const; bool isPlayingPath() const; + bool isPaused() const; + + float estimatedRemainingTimeInPath() const; void updateCamera(double deltaTime); void createPath(const ghoul::Dictionary& dictionary); @@ -78,30 +81,33 @@ public: double minValidBoundingSphere() const; double findValidBoundingSphere(const SceneGraphNode* node) const; + double defaultArrivalHeight(const std::string& sgnIdentifier) const; + const std::vector& relevantNodes(); /** - * Find a node close to the given node. Closeness is determined by a factor times - * the bounding sphere of the object - * \return pointer to the SGN if one was found, nullptr otherwise - */ + * Find a node close to the given node. Closeness is determined by a factor times + * the bounding sphere of the object. + * + * \return Pointer to the SGN if one was found, nullptr otherwise + */ static SceneGraphNode* findNodeNearTarget(const SceneGraphNode* node); /** - * \return The Lua library that contains all Lua functions available to affect the - * path navigation - */ + * \return The Lua library that contains all Lua functions available to affect the + * path navigation + */ static scripting::LuaLibrary luaLibrary(); private: void handlePathEnd(); /** - * Populate list of nodes that are relevant for collision checks, etc - */ + * Populate list of nodes that are relevant for collision checks, etc. + */ void findRelevantNodes(); - void removeRollRotation(CameraPose& pose, double deltaTime); + void removeRollRotation(CameraPose& pose) const; std::unique_ptr _currentPath = nullptr; bool _isPlaying = false; diff --git a/include/openspace/navigation/waypoint.h b/include/openspace/navigation/waypoint.h index 34c6e4151e..e1bc04a8b9 100644 --- a/include/openspace/navigation/waypoint.h +++ b/include/openspace/navigation/waypoint.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -39,7 +39,7 @@ struct NavigationState; class Waypoint { public: Waypoint() = default; - Waypoint(const glm::dvec3& pos, const glm::dquat& rot, const std::string& ref); + Waypoint(const glm::dvec3& pos, const glm::dquat& rot, std::string ref); explicit Waypoint(const NavigationState& ns); CameraPose pose() const; @@ -47,6 +47,7 @@ public: glm::dquat rotation() const; SceneGraphNode* node() const; std::string nodeIdentifier() const; + std::optional aimIdentifier() const; double validBoundingSphere() const; private: @@ -54,12 +55,17 @@ private: std::string _nodeIdentifier; // To be able to handle nodes with faulty bounding spheres double _validBoundingSphere = 0.0; + + // Keep track of if there was an aim node, specified in for example the + // navigation state used to create this waypoint. It may be required in + // certain situations + std::optional _aimNodeIdentifier; }; /** * Compute a waypoint from the current camera position. * - * \return the computed WayPoint + * \return The computed WayPoint */ Waypoint waypointFromCamera(); @@ -76,17 +82,17 @@ struct NodeCameraStateSpec { * where the camera will be facing the given node. If there is a 'Sun' node in the scene, * it will possibly be used to compute a position on the lit side of the object. * - * \param spec details about the node and state to create the waypoint from. Minimal - * information is the identifier of the node, but a position or height - * above the bounding sphere may also be given. - * \param startPoint an optional previous waypoint. If not specified, the current camera + * \param spec Details about the node and state to create the waypoint from. Minimal + * information is the identifier of the node, but a position or height above + * the bounding sphere may also be given. + * \param startPoint An optional previous waypoint. If not specified, the current camera * position will be used. - * \param userLinear if true, the new waypoint will be computed along a straight line - * from the start waypoint to the scene graph node or position. - * \return the computed WayPoint + * \param useLinear If `true`, the new waypoint will be computed along a straight line + * from the start waypoint to the scene graph node or position. + * \return The computed WayPoint */ Waypoint computeWaypointFromNodeInfo(const NodeCameraStateSpec& spec, - std::optional startPoint = std::nullopt, bool useLinear = false); + const std::optional& startPoint = std::nullopt, bool useLinear = false); } // namespace openspace::interaction diff --git a/include/openspace/network/messagestructures.h b/include/openspace/network/messagestructures.h index 909e7284bd..045b9f2b1f 100644 --- a/include/openspace/network/messagestructures.h +++ b/include/openspace/network/messagestructures.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -25,9 +25,10 @@ #ifndef __OPENSPACE_CORE___MESSAGESTRUCTURES___H__ #define __OPENSPACE_CORE___MESSAGESTRUCTURES___H__ -#include +#include #include #include +#include #include #include #include @@ -49,8 +50,8 @@ struct CameraKeyframe { CameraKeyframe(const std::vector& buffer) { deserialize(buffer); } - CameraKeyframe(glm::dvec3&& pos, glm::dquat&& rot, std::string&& focusNode, - bool&& followNodeRot, float&& scale) + CameraKeyframe(glm::dvec3 pos, glm::dquat rot, std::string focusNode, + bool followNodeRot, float scale) : _position(pos) , _rotation(rot) , _followNodeRotation(followNodeRot) @@ -66,7 +67,7 @@ struct CameraKeyframe { double _timestamp = 0.0; - void serialize(std::vector &buffer) const { + void serialize(std::vector& buffer) const { // Add position buffer.insert( buffer.end(), @@ -188,17 +189,14 @@ struct CameraKeyframe { void write(std::stringstream& out) const { // Add camera position - out << std::fixed << std::setprecision(7) << _position.x << ' ' - << std::fixed << std::setprecision(7) << _position.y << ' ' - << std::fixed << std::setprecision(7) << _position.z << ' '; + out << std::setprecision(std::numeric_limits::max_digits10); + out << _position.x << ' ' << _position.y << ' ' << _position.z << ' '; // Add camera rotation - out << std::fixed << std::setprecision(7) << _rotation.x << ' ' - << std::fixed << std::setprecision(7) << _rotation.y << ' ' - << std::fixed << std::setprecision(7) << _rotation.z << ' ' - << std::fixed << std::setprecision(7) << _rotation.w << ' '; - out << std::fixed - << std::setprecision(std::numeric_limits::max_digits10) - << _scale << ' '; + out << _rotation.x << ' ' + << _rotation.y << ' ' + << _rotation.z << ' ' + << _rotation.w << ' '; + out << std::scientific << _scale << ' '; if (_followNodeRotation) { out << "F "; } @@ -407,7 +405,7 @@ struct ScriptMessage { if (buffer.size() != (sizeof(uint32_t) + len)) { LERRORC( "ParallelPeer", - fmt::format( + std::format( "Received buffer with wrong size. Expected {} got {}", len, buffer.size() ) @@ -468,7 +466,7 @@ struct ScriptMessage { std::string tmpReadbackScript; _script.erase(); for (int i = 0; i < numScriptLines; ++i) { - std::getline(iss, tmpReadbackScript); + ghoul::getline(iss, tmpReadbackScript); size_t start = tmpReadbackScript.find_first_not_of(" "); tmpReadbackScript = tmpReadbackScript.substr(start); _script.append(tmpReadbackScript); diff --git a/include/openspace/network/messagestructureshelper.h b/include/openspace/network/messagestructureshelper.h index 3c0c2678d2..dac6cd0504 100644 --- a/include/openspace/network/messagestructureshelper.h +++ b/include/openspace/network/messagestructureshelper.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -30,25 +30,27 @@ namespace openspace::datamessagestructures { /** - * Method that creates a CameraKeyframe object and populates - * it with the current properties of the camera from the navigation handler. - * \returns CameraKeyframe with current state from NavigationHandler + * Method that creates a CameraKeyframe object and populates it with the current + * properties of the camera from the navigation handler. + * + * \return CameraKeyframe with current state from NavigationHandler */ CameraKeyframe generateCameraKeyframe(); /** - * Method that creates a TimeKeyframe object and populates - * it with the current time values from the application time manager. - * \returns TimeKeyframe The time keyframe + * Method that creates a TimeKeyframe object and populates it with the current time values + * from the application time manager. + * + * \return TimeKeyframe The time keyframe */ TimeKeyframe generateTimeKeyframe(); /** - * Method that creates a ScriptMessage object from a given script - * string, and populates the ScriptMessage with the script and timestamp - * of the current application time. + * Method that creates a ScriptMessage object from a given script string, and populates + * the ScriptMessage with the script and timestamp of the current application time. + * * \param script The script to execute in std::string form - * \returns ScriptMessage The ScriptMessage data structure with script + * \return ScriptMessage The ScriptMessage data structure with script */ ScriptMessage generateScriptMessage(std::string script); diff --git a/include/openspace/network/parallelconnection.h b/include/openspace/network/parallelconnection.h index d3468f7a4a..7ccdda42f7 100644 --- a/include/openspace/network/parallelconnection.h +++ b/include/openspace/network/parallelconnection.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -61,7 +61,7 @@ public: struct DataMessage { DataMessage() = default; - DataMessage(datamessagestructures::Type t, double timestamp, std::vector c); + DataMessage(datamessagestructures::Type t, double time, std::vector c); datamessagestructures::Type type; double timestamp; @@ -70,7 +70,7 @@ public: class ConnectionLostError : public ghoul::RuntimeError { public: - explicit ConnectionLostError(bool shouldLogError = true); + explicit ConnectionLostError(bool shouldLogError_ = true); bool shouldLogError; }; @@ -86,7 +86,7 @@ public: ParallelConnection::Message receiveMessage(); // Gonna do some UTF-like magic once we reach 255 to introduce a second byte or so - static constexpr uint8_t ProtocolVersion = 6; + static constexpr uint8_t ProtocolVersion = 7; private: std::unique_ptr _socket; diff --git a/include/openspace/network/parallelpeer.h b/include/openspace/network/parallelpeer.h index 9a0d3ab599..6882550974 100644 --- a/include/openspace/network/parallelpeer.h +++ b/include/openspace/network/parallelpeer.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -52,6 +52,7 @@ public: void connect(); void setPort(std::string port); void setAddress(std::string address); + void setServerName(std::string name); void setName(std::string name); bool isHost(); const std::string& hostName(); @@ -66,9 +67,9 @@ public: double latencyStandardDeviation() const; /** - * Returns the Lua library that contains all Lua functions available to affect the - * remote OS parallel connection. - */ + * Returns the Lua library that contains all Lua functions available to affect the + * remote OS parallel connection. + */ static scripting::LuaLibrary luaLibrary(); ParallelConnection::Status status(); int nConnections(); @@ -97,6 +98,7 @@ private: properties::StringProperty _password; properties::StringProperty _hostPassword; + properties::StringProperty _serverName; // While the port should in theory be an int, // we use a StringProperty to avoid a slider in the GUI. diff --git a/include/openspace/properties/list/doublelistproperty.h b/include/openspace/properties/list/doublelistproperty.h index 03ee240b7b..3fbebed9c1 100644 --- a/include/openspace/properties/list/doublelistproperty.h +++ b/include/openspace/properties/list/doublelistproperty.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * diff --git a/include/openspace/properties/list/intlistproperty.h b/include/openspace/properties/list/intlistproperty.h index c898232d98..a462752a67 100644 --- a/include/openspace/properties/list/intlistproperty.h +++ b/include/openspace/properties/list/intlistproperty.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * diff --git a/include/openspace/properties/list/stringlistproperty.h b/include/openspace/properties/list/stringlistproperty.h index 4d6c1e2e53..d7590ca5be 100644 --- a/include/openspace/properties/list/stringlistproperty.h +++ b/include/openspace/properties/list/stringlistproperty.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * diff --git a/include/openspace/properties/listproperty.h b/include/openspace/properties/listproperty.h index 061f5f9014..dc10f3fc25 100644 --- a/include/openspace/properties/listproperty.h +++ b/include/openspace/properties/listproperty.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * diff --git a/include/openspace/properties/listproperty.inl b/include/openspace/properties/listproperty.inl index b2c6fbcf2b..6d17be9a39 100644 --- a/include/openspace/properties/listproperty.inl +++ b/include/openspace/properties/listproperty.inl @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * diff --git a/include/openspace/properties/matrix/dmat2property.h b/include/openspace/properties/matrix/dmat2property.h index 18fbfe7155..0cadb496ba 100644 --- a/include/openspace/properties/matrix/dmat2property.h +++ b/include/openspace/properties/matrix/dmat2property.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * diff --git a/include/openspace/properties/matrix/dmat3property.h b/include/openspace/properties/matrix/dmat3property.h index e98ac3a1cf..9a15bbf7a6 100644 --- a/include/openspace/properties/matrix/dmat3property.h +++ b/include/openspace/properties/matrix/dmat3property.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * diff --git a/include/openspace/properties/matrix/dmat4property.h b/include/openspace/properties/matrix/dmat4property.h index 6a1ae2f87e..9828026526 100644 --- a/include/openspace/properties/matrix/dmat4property.h +++ b/include/openspace/properties/matrix/dmat4property.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * diff --git a/include/openspace/properties/matrix/mat2property.h b/include/openspace/properties/matrix/mat2property.h index 14a7936200..c8a62f2f5d 100644 --- a/include/openspace/properties/matrix/mat2property.h +++ b/include/openspace/properties/matrix/mat2property.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * diff --git a/include/openspace/properties/matrix/mat3property.h b/include/openspace/properties/matrix/mat3property.h index 26319be8ea..7f033f1333 100644 --- a/include/openspace/properties/matrix/mat3property.h +++ b/include/openspace/properties/matrix/mat3property.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * diff --git a/include/openspace/properties/matrix/mat4property.h b/include/openspace/properties/matrix/mat4property.h index ba6a3ecba6..e84a193c89 100644 --- a/include/openspace/properties/matrix/mat4property.h +++ b/include/openspace/properties/matrix/mat4property.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * diff --git a/include/openspace/properties/numericalproperty.h b/include/openspace/properties/numericalproperty.h index 2ae25ae160..d91a4bc573 100644 --- a/include/openspace/properties/numericalproperty.h +++ b/include/openspace/properties/numericalproperty.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -73,9 +73,10 @@ protected: std::string generateAdditionalJsonDescription() const override; /** - * convert a lua formatted value to a JSON formatted value - * @param luaValue - * @return a json formatted string representation of the given lua value + * convert a lua formatted value to a JSON formatted value. + * + * \param luaValue + * \return A JSON formatted string representation of the given Lua value */ std::string luaToJson(std::string luaValue) const; diff --git a/include/openspace/properties/numericalproperty.inl b/include/openspace/properties/numericalproperty.inl index 29c4a17458..2bcc81f9a8 100644 --- a/include/openspace/properties/numericalproperty.inl +++ b/include/openspace/properties/numericalproperty.inl @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -110,10 +110,10 @@ void NumericalProperty::setExponent(float exponent) { if (!isValidRange(_minimumValue, _maximumValue)) { LWARNINGC( "NumericalProperty: setExponent", - fmt::format( + std::format( "Setting exponent for properties with negative values in " "[min, max] range is not yet supported. Property: {}", - this->fullyQualifiedIdentifier() + this->uri() ) ); _exponent = 1.f; diff --git a/include/openspace/properties/optionproperty.h b/include/openspace/properties/optionproperty.h index 2bb2366324..f46826b811 100644 --- a/include/openspace/properties/optionproperty.h +++ b/include/openspace/properties/optionproperty.h @@ -2,7 +2,7 @@ * * * OpenSpace * * * - * Copyright (c) 2014-2023 * + * Copyright (c) 2014-2025 * * * * 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 * @@ -33,15 +33,15 @@ namespace openspace::properties { /** * The OptionProperty is a property that provides a number of predefined (using the - * addOption method) options consisting of a `description` and a `value`. The available + * #addOption method) options consisting of a `description` and a `value`. The available * options can be queried using the options method. Only values representing valid options - * can be used to set this property, or an error will be logged + * can be used to set this property, or an error will be logged. */ class OptionProperty : public IntProperty { public: /** - * The struct storing a single option consisting of an integer `value` and a - * `string` description. + * The struct storing a single option consisting of an integer `value` and a `string` + * description. */ struct Option { int value; @@ -57,7 +57,8 @@ public: * The constructor delegating the `identifier` and the `guiName` to its super class. * * \param info The PropertyInfo structure that contains all the required static - * information for initializing this Property. + * information for initializing this Property + * * \pre \p info.identifier must not be empty * \pre \p info.guiName must not be empty */ @@ -67,7 +68,7 @@ public: * The constructor delegating the `identifier` and the `guiName` to its super class. * * \param info The PropertyInfo structure that contains all the required static - * information for initializing this Property. + * information for initializing this Property * \param displayType Optional DisplayType for GUI (default RADIO) * * \pre \p info.identifier must not be empty @@ -123,7 +124,7 @@ public: const std::vector