Merged in f5soh/librepilot/LP-575_fedora_package (pull request #491)
[librepilot.git] / ground / gcs / src / share / qml / model / ModelTerrainView.qml
blob2f5a124107c74fed2b04076046f39543b42e586e
1 /*
2  * Copyright (C) 2016 The LibrePilot Project
3  * Contact: http://www.librepilot.org
4  *
5  * This file is part of LibrePilot GCS.
6  *
7  * LibrePilot GCS is free software: you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation, either version 3 of the License, or
10  * (at your option) any later version.
11  *
12  * LibrePilot GCS is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with LibrePilot GCS.  If not, see <http://www.gnu.org/licenses/>.
19  */
20 import QtQuick 2.4
21 import QtQuick.Controls 1.4
23 import Pfd 1.0
24 import OsgQtQuick 1.0
26 import "../js/common.js" as Utils
27 import "../js/uav.js" as UAV
29 Item {
30     OSGViewport {
31         id: osgViewport
33         anchors.fill: parent
34         focus: true
36         sceneNode: skyNode
37         camera: camera
38         manipulator: nodeTrackerManipulator
39         //incrementalCompile: true
41         OSGCamera {
42             id: camera
43             fieldOfView: 90
44             logarithmicDepthBuffer: true
45         }
47         OSGNodeTrackerManipulator {
48             id: nodeTrackerManipulator
49             // use model to compute camera home position
50             sceneNode: modelTransformNode
51             // model will be tracked
52             trackNode: modelTransformNode
53         }
55         OSGSkyNode {
56             id: skyNode
57             sceneNode: sceneGroup
58             viewport: osgViewport
59             dateTime: Utils.getDateTime()
60             minimumAmbientLight: pfdContext.minimumAmbientLight
61         }
63         OSGGroup {
64             id: sceneGroup
65             children: [ terrainFileNode, modelNode ]
66         }
68         OSGGeoTransformNode {
69             id: modelNode
71             sceneNode: terrainFileNode
72             children: [ modelTransformNode ]
74             clampToTerrain: true
76             position: UAV.position()
77         }
79         OSGTransformNode {
80             id: modelTransformNode
82             children: [ modelFileNode ]
84             // model dimensions are in mm, scale to meters
85             scale: Qt.vector3d(0.001, 0.001, 0.001)
86             attitude: UAV.attitude()
87         }
89         OSGFileNode {
90             id: terrainFileNode
91             source: pfdContext.terrainFile
92         }
94         OSGFileNode {
95             id: modelFileNode
97             // use ShaderGen pseudoloader to generate the shaders expected by osgEarth
98             // see http://docs.osgearth.org/en/latest/faq.html#i-added-a-node-but-it-has-no-texture-lighting-etc-in-osgearth-why
99             source: pfdContext.modelFile + ".osgearth_shadergen"
101             optimizeMode: OptimizeMode.OptimizeAndCheck
102         }
104         Keys.onUpPressed: {
105             pfdContext.nextModel();
106         }
108         Keys.onDownPressed: {
109             pfdContext.previousModel();
110         }
112         BusyIndicator {
113             width: 24
114             height: 24
115             anchors.right: parent.right
116             anchors.top: parent.top
117             anchors.margins: 4
119             running: osgViewport.busy
120         }
122     }