| 
									
										
										
										
											2020-09-10 16:02:31 +03:00
										 |  |  | /**************************************************************************** | 
					
						
							|  |  |  | ** | 
					
						
							|  |  |  | ** Copyright (C) 2020 The Qt Company Ltd. | 
					
						
							|  |  |  | ** Contact: https://www.qt.io/licensing/
 | 
					
						
							|  |  |  | ** | 
					
						
							|  |  |  | ** This file is part of Qt Creator. | 
					
						
							|  |  |  | ** | 
					
						
							|  |  |  | ** 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.
 | 
					
						
							|  |  |  | ** | 
					
						
							|  |  |  | ** GNU General Public License Usage | 
					
						
							|  |  |  | ** Alternatively, this file may be used under the terms of the GNU | 
					
						
							|  |  |  | ** General Public License version 3 as published by the Free Software | 
					
						
							|  |  |  | ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT | 
					
						
							|  |  |  | ** included in the packaging of this file. Please review the following | 
					
						
							|  |  |  | ** information to ensure the GNU General Public License requirements will | 
					
						
							|  |  |  | ** be met: https://www.gnu.org/licenses/gpl-3.0.html.
 | 
					
						
							|  |  |  | ** | 
					
						
							|  |  |  | ****************************************************************************/ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-06-28 14:04:43 +03:00
										 |  |  | import QtQuick 6.0 | 
					
						
							|  |  |  | import QtQuick3D 6.0 | 
					
						
							| 
									
										
										
										
											2020-09-10 16:02:31 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | Item { | 
					
						
							|  |  |  |     id: root | 
					
						
							|  |  |  |     width: 150 | 
					
						
							|  |  |  |     height: 150 | 
					
						
							|  |  |  |     visible: true | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     property View3D view: null | 
					
						
							|  |  |  |     property alias contentItem: contentItem | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-18 12:56:24 +03:00
										 |  |  |     property var previewObject | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-10 16:02:31 +03:00
										 |  |  |     property var materialViewComponent | 
					
						
							| 
									
										
										
										
											2020-09-18 12:56:24 +03:00
										 |  |  |     property var modelViewComponent | 
					
						
							| 
									
										
										
										
											2020-09-22 11:30:05 +03:00
										 |  |  |     property var nodeViewComponent | 
					
						
							| 
									
										
										
										
											2020-09-18 12:56:24 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  |     property bool ready: false | 
					
						
							| 
									
										
										
										
											2020-09-10 16:02:31 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  |     function destroyView() | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2020-09-18 12:56:24 +03:00
										 |  |  |         previewObject = null; | 
					
						
							| 
									
										
										
										
											2020-11-02 10:57:25 +02:00
										 |  |  |         if (view) | 
					
						
							| 
									
										
										
										
											2020-09-10 16:02:31 +03:00
										 |  |  |             view.destroy(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-17 17:56:45 +02:00
										 |  |  |     function createViewForObject(obj) | 
					
						
							| 
									
										
										
										
											2020-09-10 16:02:31 +03:00
										 |  |  |     { | 
					
						
							|  |  |  |         if (obj instanceof Material) | 
					
						
							|  |  |  |             createViewForMaterial(obj); | 
					
						
							| 
									
										
										
										
											2020-09-18 12:56:24 +03:00
										 |  |  |         else if (obj instanceof Model) | 
					
						
							|  |  |  |             createViewForModel(obj); | 
					
						
							| 
									
										
										
										
											2020-09-22 11:30:05 +03:00
										 |  |  |         else if (obj instanceof Node) | 
					
						
							|  |  |  |             createViewForNode(obj); | 
					
						
							| 
									
										
										
										
											2020-09-18 12:56:24 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  |         previewObject = obj; | 
					
						
							| 
									
										
										
										
											2020-09-10 16:02:31 +03:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function createViewForMaterial(material) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         if (!materialViewComponent) | 
					
						
							|  |  |  |             materialViewComponent = Qt.createComponent("MaterialNodeView.qml"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // Always recreate the view to ensure material is up to date
 | 
					
						
							|  |  |  |         if (materialViewComponent.status === Component.Ready) | 
					
						
							|  |  |  |             view = materialViewComponent.createObject(viewRect, {"previewMaterial": material}); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-18 12:56:24 +03:00
										 |  |  |     function createViewForModel(model) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         if (!modelViewComponent) | 
					
						
							|  |  |  |             modelViewComponent = Qt.createComponent("ModelNodeView.qml"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // Always recreate the view to ensure model is up to date
 | 
					
						
							|  |  |  |         if (modelViewComponent.status === Component.Ready) | 
					
						
							|  |  |  |             view = modelViewComponent.createObject(viewRect, {"sourceModel": model}); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-22 11:30:05 +03:00
										 |  |  |     function createViewForNode(node) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         if (!nodeViewComponent) | 
					
						
							|  |  |  |             nodeViewComponent = Qt.createComponent("NodeNodeView.qml"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // Always recreate the view to ensure node is up to date
 | 
					
						
							|  |  |  |         if (nodeViewComponent.status === Component.Ready) | 
					
						
							|  |  |  |             view = nodeViewComponent.createObject(viewRect, {"importScene": node}); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-18 12:56:24 +03:00
										 |  |  |     function afterRender() | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2020-09-22 11:30:05 +03:00
										 |  |  |         if (previewObject instanceof Node) { | 
					
						
							|  |  |  |             view.fitToViewPort(); | 
					
						
							| 
									
										
										
										
											2020-09-18 12:56:24 +03:00
										 |  |  |             ready = view.ready; | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             ready = true; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-08 10:50:15 +03:00
										 |  |  |     View3D { | 
					
						
							|  |  |  |         // Dummy view to hold the context
 | 
					
						
							|  |  |  |         // TODO remove when QTBUG-87678 is fixed
 | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-10 16:02:31 +03:00
										 |  |  |     Item { | 
					
						
							|  |  |  |         id: contentItem | 
					
						
							|  |  |  |         anchors.fill: parent | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         Rectangle { | 
					
						
							|  |  |  |             id: viewRect | 
					
						
							|  |  |  |             anchors.fill: parent | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             gradient: Gradient { | 
					
						
							|  |  |  |                 GradientStop { position: 1.0; color: "#222222" } | 
					
						
							|  |  |  |                 GradientStop { position: 0.0; color: "#999999" } | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } |