planets.js Example File | Qt 3D 5.12.10

- Qt 5.12
- Qt 3D
- Qt 3D: Planets QML Example
- planets.js Example File
- Qt 5.12.10 Reference Documentation

# planets.js Example File

planets-qml/planets.js

     /****************************************************************************
     **
     ** Copyright (C) 2016 The Qt Company Ltd.
     ** Contact: https://www.qt.io/licensing/
     **
     ** This file is part of the Qt3D module of the Qt Toolkit.
     **
     ** $QT_BEGIN_LICENSE:BSD$
     ** Commercial License Usage
     ** Licensees holding valid commercial Qt licenses may use this file in
     ** accordance with the commercial license agreement provided with the
     ** Software or, alternatively, in accordance with the terms contained in
     ** a written agreement between you and The Qt Company. For licensing terms
     ** and conditions see https://www.qt.io/terms-conditions. For further
     ** information use the contact form at https://www.qt.io/contact-us.
     **
     ** BSD License Usage
     ** Alternatively, you may use this file under the terms of the BSD license
     ** as follows:
     **
     ** "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 Qt Company Ltd 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."
     **
     ** $QT_END_LICENSE$
     **
     ****************************************************************************/

     .pragma library

     var SUN = 0;
     var MERCURY = 1;
     var VENUS = 2;
     var EARTH = 3;
     var MARS = 4;
     var JUPITER = 5;
     var SATURN = 6;
     var URANUS = 7;
     var NEPTUNE = 8;
     var NUM_SELECTABLE_PLANETS = 9;
     var MOON = 9;
     var SOLAR_SYSTEM = 100;

     function planetId(planetName) {
         switch (planetName) {
         case "Sun":
             return SUN
         case "Mercury":
             return MERCURY
         case "Venus":
             return VENUS
         case "Earth":
             return EARTH
         case "Mars":
             return MARS
         case "Jupiter":
             return JUPITER
         case "Saturn":
             return SATURN
         case "Uranus":
             return URANUS
         case "Neptune":
             return NEPTUNE
         case "Solar System":
             return SOLAR_SYSTEM
         }
     }

     function planetIndex(planetName) {
         switch (planetName) {
         case "Sun":
             return 0
         case "Mercury":
             return 1
         case "Venus":
             return 2
         case "Earth":
             return 3
         case "Mars":
             return 4
         case "Jupiter":
             return 5
         case "Saturn":
             return 6
         case "Uranus":
             return 7
         case "Neptune":
             return 8
         case "Solar System":
             return 9
         }
     }

     var planets = []; // Planet data info

     var solarDistance = 2600000;
     var saturnOuterRadius = 120.700;
     var uranusOuterRadius = 40;

     var auScale = 149597.870700; // AU in thousands of kilometers

     function loadPlanetData() {

         // Planet Data
         // radius - planet radius
         // tilt - planet axis angle
         // N1/2 - longitude of the ascending node
         // i1/2 - inclination to the ecliptic (plane of the Earth's orbit)
         // w1/2 - argument of perihelion
         // a1/2 - semi-major axis, or mean distance from Sun
         // e1/2 - eccentricity (0=circle, 0-1=ellipse, 1=parabola)
         // M1/2 - mean anomaly (0 at perihelion; increases uniformly with time)
         // period - sidereal rotation period
         // centerOfOrbit - the planet in the center of the orbit
         // (orbital elements based on http://www.stjarnhimlen.se/comp/ppcomp.html)

         var sun = { radius: 694.439, tilt: 63.87, period: 25.05, x: 0, y: 0, z: 0,
             roll: 0 };
         planets.push(sun);
         var mercury = {
             radius: 2.433722, tilt: 0.04, N1: 48.3313, N2: 0.0000324587,
             i1: 7.0047, i2: 0.0000000500, w1: 29.1241, w2: 0.0000101444,
             a1: 0.387098, a2: 0, e1: 0.205635, e2: 0.000000000559,
             M1: 168.6562, M2: 4.0923344368, period: 58.646, x: 0, y: 0, z: 0,
             roll: 0, centerOfOrbit: SUN
         };
         planets.push(mercury);
         var venus = {
             radius: 6.046079, tilt: 177.36, N1: 76.6799, N2: 0.0000246590,
             i1: 3.3946, i2: 0.0000000275, w1: 54.8910, w2: 0.0000138374,
             a1: 0.723330, a2: 0, e1: 0.006773, e2: -0.000000001302,
             M1: 48.0052, M2: 1.6021302244, period: 243.0185, x: 0, y: 0, z: 0,
             roll: 0, centerOfOrbit: SUN
         };
         planets.push(venus);
         var earth = {
             radius: 6.371, tilt: 25.44, N1: 174.873, N2: 0,
             i1: 0.00005, i2: 0, w1: 102.94719, w2: 0,
             a1: 1, a2: 0, e1: 0.01671022, e2: 0,
             M1: 357.529, M2: 0.985608, period: 0.997, x: 0, y: 0, z: 0,
             roll: 0, centerOfOrbit: SUN
         };
         planets.push(earth);
         var mars = {
             radius: 3.389372, tilt: 25.19, N1: 49.5574, N2: 0.0000211081,
             i1: 1.8497, i2: -0.0000000178, w1: 286.5016, w2: 0.0000292961,
             a1: 1.523688, a2: 0, e1: 0.093405, e2: 0.000000002516,
             M1: 18.6021, M2: 0.5240207766, period: 1.025957, x: 0, y: 0, z: 0,
             roll: 0, centerOfOrbit: SUN
         };
         planets.push(mars);
         var jupiter = {
             radius: 71.41254, tilt: 3.13, N1: 100.4542, N2: 0.0000276854,
             i1: 1.3030, i2: -0.0000001557, w1: 273.8777, w2: 0.0000164505,
             a1: 5.20256, a2: 0, e1: 0.048498, e2: 0.000000004469,
             M1: 19.8950, M2: 0.0830853001, period: 0.4135, x: 0, y: 0, z: 0,
             roll: 0, centerOfOrbit: SUN
         };
         planets.push(jupiter);
         var saturn = {
             radius: 60.19958, tilt: 26.73, N1: 113.6634, N2: 0.0000238980,
             i1: 2.4886, i2: -0.0000001081, w1: 339.3939, w2: 0.0000297661,
             a1: 9.55475, a2: 0, e1: 0.055546, e2: -0.000000009499,
             M1: 316.9670, M2: 0.0334442282, period: 0.4395, x: 0, y: 0, z: 0,
             roll: 0, centerOfOrbit: SUN
         };
         planets.push(saturn);
         var uranus = {
             radius: 25.5286, tilt: 97.77, N1: 74.0005, N2: 0.000013978,
             i1: 0.7733, i2: 0.000000019, w1: 96.6612, w2: 0.000030565,
             a1: 19.18171, a2: -0.0000000155, e1: 0.047318, e2: 0.00000000745,
             M1: 142.5905, M2: 0.011725806, period: 0.71833, x: 0, y: 0, z: 0,
             roll: 0, centerOfOrbit: SUN
         };
         planets.push(uranus);
         var neptune = {
             radius: 24.73859, tilt: 28.32, N1: 131.7806, N2: 0.000030173,
             i1: 1.7700, i2: -0.000000255, w1: 272.8461, w2: 0.000006027,
             a1: 30.05826, a2: 0.00000003313, e1: 0.008606, e2: 0.00000000215,
             M1: 260.2471, M2: 0.005995147, period: 0.6713, x: 0, y: 0, z: 0,
             roll: 0, centerOfOrbit: SUN
         };
         planets.push(neptune);
         var moon = {
             radius: 1.5424, tilt: 28.32, N1: 125.1228, N2: -0.0529538083,
             i1: 5.1454, i2: 0, w1: 318.0634, w2: 0.1643573223,
             a1: 0.273, a2: 0, e1: 0.054900, e2: 0,
             M1: 115.3654, M2: 13.0649929509, period: 27.321582, x: 0, y: 0, z: 0,
             roll: 0, centerOfOrbit: EARTH
         };
         planets.push(moon);

         return planets;
     }

     function getOuterRadius(planet) {
         var outerRadius = solarDistance;
         if (planet !== SOLAR_SYSTEM) {
             outerRadius = planets[planet]["radius"];
             if (planet === SATURN) {
                 outerRadius =+ saturnOuterRadius;
             } else if (planet === URANUS) {
                 outerRadius =+ uranusOuterRadius;
             } else if (planet === SUN) {
                 outerRadius = planets[planet]["radius"] / 100;
             }
         }

         return outerRadius;
     }