forked from qt-creator/qt-creator
Replace the current license disclaimer in files by a SPDX-License-Identifier. Task-number: QTBUG-67283 Change-Id: I708fd1f9f2b73d60f57cc3568646929117825813 Reviewed-by: Eike Ziller <eike.ziller@qt.io>
113 lines
3.6 KiB
QML
113 lines
3.6 KiB
QML
// Copyright (C) 2022 The Qt Company Ltd.
|
|
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0 WITH Qt-GPL-exception-1.0
|
|
|
|
import QtQuick
|
|
import QtQuick3D
|
|
import QtQuick3D.Particles3D
|
|
|
|
// Note: This gizmo is also used to visualize Attractor3D in addition to ParticleEmitter3D,
|
|
// as the two are very similar.
|
|
|
|
Node {
|
|
id: root
|
|
|
|
property Node targetNode: null
|
|
property var selectedNodes: []
|
|
property Node activeParticleSystem: null
|
|
property Node scene: null
|
|
property Node activeScene: null
|
|
property bool hidden: false
|
|
property bool systemHidden: false
|
|
property Node shapeModel: null
|
|
property bool globalShow: false
|
|
property bool canBeVisible: activeScene === scene && targetNode && !hidden && !systemHidden
|
|
property bool partOfActiveSystem: root.targetNode && root.targetNode.system === activeParticleSystem
|
|
property bool isEmitter: targetNode && targetNode instanceof ParticleEmitter3D
|
|
|
|
opacity: 0.15
|
|
|
|
readonly property bool selected: selectedNodes.includes(targetNode)
|
|
|
|
visible: canBeVisible && (globalShow || selected)
|
|
|
|
position: targetNode ? targetNode.scenePosition : Qt.vector3d(0, 0, 0)
|
|
rotation: targetNode ? targetNode.sceneRotation : Qt.quaternion(1, 0, 0, 0)
|
|
scale: targetNode ? targetNode.sceneScale : Qt.vector3d(1, 1, 1)
|
|
|
|
function basicShape()
|
|
{
|
|
if (targetNode && targetNode.shape && targetNode.shape instanceof ParticleShape3D) {
|
|
if (targetNode.shape.type === ParticleShape3D.Cube)
|
|
return "#Cube";
|
|
else if (targetNode.shape.type === ParticleShape3D.Cylinder)
|
|
return "#Cylinder";
|
|
}
|
|
return "#Sphere";
|
|
}
|
|
|
|
function updateShape()
|
|
{
|
|
if (shapeModel)
|
|
shapeModel.destroy();
|
|
|
|
if (!targetNode)
|
|
return;
|
|
|
|
if (targetNode.shape instanceof ParticleModelShape3D) {
|
|
shapeModel = _generalHelper.createParticleEmitterGizmoModel(targetNode, defaultMaterial);
|
|
shapeModel.parent = root;
|
|
}
|
|
}
|
|
|
|
Component.onCompleted: {
|
|
updateShape();
|
|
}
|
|
|
|
Connections {
|
|
target: targetNode
|
|
function onSystemChanged() { systemHidden = _generalHelper.isHidden(system); }
|
|
}
|
|
|
|
Connections {
|
|
target: targetNode
|
|
function onShapeChanged() { updateShape(); }
|
|
}
|
|
|
|
Connections {
|
|
target: targetNode.shape instanceof ParticleModelShape3D ? targetNode.shape
|
|
:null
|
|
function onDelegateChanged() { updateShape(); }
|
|
}
|
|
|
|
Connections {
|
|
target: targetNode.shape instanceof ParticleModelShape3D ? targetNode.shape.delegate
|
|
: null
|
|
function onSourceChanged() { updateShape(); }
|
|
}
|
|
|
|
Model {
|
|
readonly property Node _pickTarget: root.targetNode
|
|
materials: [defaultMaterial]
|
|
source: basicShape()
|
|
scale: root.targetNode && root.targetNode.shape && targetNode.shape instanceof ParticleShape3D
|
|
? root.targetNode.shape.extents.times(0.02) // default extent is 50
|
|
: autoScale.getScale(Qt.vector3d(0.1, 0.1, 0.1))
|
|
visible: !shapeModel
|
|
}
|
|
|
|
AutoScaleHelper {
|
|
id: autoScale
|
|
view3D: overlayView
|
|
}
|
|
|
|
DefaultMaterial {
|
|
id: defaultMaterial
|
|
diffuseColor: root.selected ? "#FF0000"
|
|
: root.partOfActiveSystem
|
|
? root.isEmitter ? "#FFFF00" : "#0000FF"
|
|
: "#AAAAAA"
|
|
lighting: DefaultMaterial.NoLighting
|
|
cullMode: Material.NoCulling
|
|
}
|
|
}
|