summaryrefslogtreecommitdiffstats
path: root/util/qt3d/modeltweak/qml/ModelViewport.qml
diff options
context:
space:
mode:
Diffstat (limited to 'util/qt3d/modeltweak/qml/ModelViewport.qml')
-rw-r--r--util/qt3d/modeltweak/qml/ModelViewport.qml306
1 files changed, 305 insertions, 1 deletions
diff --git a/util/qt3d/modeltweak/qml/ModelViewport.qml b/util/qt3d/modeltweak/qml/ModelViewport.qml
index 875c11624..c3b7712ea 100644
--- a/util/qt3d/modeltweak/qml/ModelViewport.qml
+++ b/util/qt3d/modeltweak/qml/ModelViewport.qml
@@ -1,5 +1,6 @@
import QtQuick 1.0
import Qt3D 1.0
+import Qt3D.Shapes 1.0
import ModelTweak 1.0
import "Widgets"
@@ -34,7 +35,10 @@ Rectangle {
property double scaleSensitivity: 32;
// the name of this viewport's state
- property string stateName
+ property string stateName;
+
+ property variant upVector: Qt.vector3d(0, 1, 0)
+ property variant rightVector: Qt.vector3d(0, 1, 0)
// the smoothness values for the state change transformations
// TODO: this should be alterable via the gui and saved in a settings file
@@ -50,6 +54,8 @@ Rectangle {
signal mouseScaleX(variant mouse)
signal mouseScaleY(variant mouse)
+ property real cameraZoom: 1.0
+
Viewport {
id: viewport
anchors.fill: parent
@@ -59,6 +65,8 @@ Rectangle {
// TODO: camera's position/rotation-around-origin/farplane should be alterable via gui
camera: Camera {
farPlane: 2000 // debugging
+ projectionType: Camera.Orthographic
+ viewSize: Qt.size(2*cameraZoom, 2*cameraZoom)
}
navigation: false
@@ -73,6 +81,166 @@ Rectangle {
transformTranslate,
]
}
+
+ Effect {
+ id: coordLinesThickEffect
+ color: "white"
+ }
+ Effect {
+ id: coordLinesThinEffect
+ color: "black"
+ }
+
+ // horizontal lines
+ Line {
+ id: lineAxisRight
+ width: 3.0
+ vertices: [
+ cameraZoom*(-10*rightVector.x), cameraZoom*(-10*rightVector.y), cameraZoom*(-10*rightVector.z),
+ cameraZoom*(10*rightVector.x), cameraZoom*(10*rightVector.y), cameraZoom*(10*rightVector.z),
+ cameraZoom*(10*rightVector.x + 0.001*upVector.x), cameraZoom*(10*rightVector.y + 0.001*upVector.y), cameraZoom*(10*rightVector.z + 0.001*upVector.z)
+ ]
+ effect: coordLinesThickEffect
+ }
+ Line {
+ width: 1.0
+ vertices: [
+ cameraZoom*(-10*rightVector.x + 0.25*upVector.x), cameraZoom*(-10*rightVector.y + 0.25*upVector.y), cameraZoom*(-10*rightVector.z + 0.25*upVector.z),
+ cameraZoom*(10*rightVector.x + 0.25*upVector.x), cameraZoom*(10*rightVector.y + 0.25*upVector.y), cameraZoom*(10*rightVector.z + 0.25*upVector.z),
+ cameraZoom*(10*rightVector.x + 0.251*upVector.x), cameraZoom*(10*rightVector.y + 0.251*upVector.y), cameraZoom*(10*rightVector.z + 0.251*upVector.z)
+ ]
+ effect: coordLinesThinEffect
+ }
+ Line {
+ width: 1.0
+ vertices: [
+ cameraZoom*(-10*rightVector.x + 0.5*upVector.x), cameraZoom*(-10*rightVector.y + 0.5*upVector.y), cameraZoom*(-10*rightVector.z + 0.5*upVector.z),
+ cameraZoom*(10*rightVector.x + 0.5*upVector.x), cameraZoom*(10*rightVector.y + 0.5*upVector.y), cameraZoom*(10*rightVector.z + 0.5*upVector.z),
+ cameraZoom*(10*rightVector.x + 0.501*upVector.x), cameraZoom*(10*rightVector.y + 0.501*upVector.y), cameraZoom*(10*rightVector.z + 0.501*upVector.z)
+ ]
+ effect: coordLinesThinEffect
+ }
+ Line {
+ width: 1.0
+ vertices: [
+ cameraZoom*(-10*rightVector.x + 0.75*upVector.x), cameraZoom*(-10*rightVector.y + 0.75*upVector.y), cameraZoom*(-10*rightVector.z + 0.75*upVector.z),
+ cameraZoom*(10*rightVector.x + 0.75*upVector.x), cameraZoom*(10*rightVector.y + 0.75*upVector.y), cameraZoom*(10*rightVector.z + 0.75*upVector.z),
+ cameraZoom*(10*rightVector.x + 0.751*upVector.x), cameraZoom*(10*rightVector.y + 0.751*upVector.y), cameraZoom*(10*rightVector.z + 0.751*upVector.z)
+ ]
+ effect: coordLinesThinEffect
+ }
+ Line {
+ width: 1.0
+ vertices: [
+ cameraZoom*(-10*rightVector.x - 0.25*upVector.x), cameraZoom*(-10*rightVector.y - 0.25*upVector.y), cameraZoom*(-10*rightVector.z - 0.25*upVector.z),
+ cameraZoom*(10*rightVector.x - 0.25*upVector.x), cameraZoom*(10*rightVector.y - 0.25*upVector.y), cameraZoom*(10*rightVector.z - 0.25*upVector.z),
+ cameraZoom*(10*rightVector.x - 0.251*upVector.x), cameraZoom*(10*rightVector.y - 0.251*upVector.y), cameraZoom*(10*rightVector.z - 0.251*upVector.z)
+ ]
+ effect: coordLinesThinEffect
+ }
+ Line {
+ width: 1.0
+ vertices: [
+ cameraZoom*(-10*rightVector.x - 0.5*upVector.x), cameraZoom*(-10*rightVector.y - 0.5*upVector.y), cameraZoom*(-10*rightVector.z - 0.5*upVector.z),
+ cameraZoom*(10*rightVector.x - 0.5*upVector.x), cameraZoom*(10*rightVector.y - 0.5*upVector.y), cameraZoom*(10*rightVector.z - 0.5*upVector.z),
+ cameraZoom*(10*rightVector.x - 0.501*upVector.x), cameraZoom*(10*rightVector.y - 0.501*upVector.y), cameraZoom*(10*rightVector.z - 0.501*upVector.z)
+ ]
+ effect: coordLinesThinEffect
+ }
+ Line {
+ width: 1.0
+ vertices: [
+ cameraZoom*(-10*rightVector.x - 0.75*upVector.x), cameraZoom*(-10*rightVector.y - 0.75*upVector.y), cameraZoom*(-10*rightVector.z - 0.75*upVector.z),
+ cameraZoom*(10*rightVector.x - 0.75*upVector.x), cameraZoom*(10*rightVector.y - 0.75*upVector.y), cameraZoom*(10*rightVector.z - 0.75*upVector.z),
+ cameraZoom*(10*rightVector.x - 0.751*upVector.x), cameraZoom*(10*rightVector.y - 0.751*upVector.y), cameraZoom*(10*rightVector.z - 0.751*upVector.z)
+ ]
+ effect: coordLinesThinEffect
+ }
+
+ // vertical lines
+ Line {
+ id: lineAxisUp
+ width: 3.0
+ vertices: [
+ cameraZoom*(-10*upVector.x), cameraZoom*(-10*upVector.y), cameraZoom*(-10*upVector.z),
+ cameraZoom*(10*upVector.x), cameraZoom*(10*upVector.y), cameraZoom*(10*upVector.z),
+ cameraZoom*(10*upVector.x + 0.01*rightVector.x), cameraZoom*(10*upVector.y + 0.01*rightVector.y), cameraZoom*(10*upVector.z + 0.01*rightVector.z)
+ ]
+ effect: coordLinesThickEffect
+ }
+ Line {
+ width: 1.0
+ vertices: [
+ cameraZoom*(-10*upVector.x + 0.25*rightVector.x), cameraZoom*(-10*upVector.y + 0.25*rightVector.y), cameraZoom*(-10*upVector.z + 0.25*rightVector.z),
+ cameraZoom*(10*upVector.x + 0.25*rightVector.x), cameraZoom*(10*upVector.y + 0.25*rightVector.y), cameraZoom*(10*upVector.z + 0.25*rightVector.z),
+ cameraZoom*(10*upVector.x + 0.251*rightVector.x), cameraZoom*(10*upVector.y + 0.251*rightVector.y), cameraZoom*(10*upVector.z + 0.251*rightVector.z)
+ ]
+ effect: coordLinesThinEffect
+ }
+ Line {
+ width: 1.0
+ vertices: [
+ cameraZoom*(-10*upVector.x + 0.5*rightVector.x), cameraZoom*(-10*upVector.y + 0.5*rightVector.y), cameraZoom*(-10*upVector.z + 0.5*rightVector.z),
+ cameraZoom*(10*upVector.x + 0.5*rightVector.x), cameraZoom*(10*upVector.y + 0.5*rightVector.y), cameraZoom*(10*upVector.z + 0.5*rightVector.z),
+ cameraZoom*(10*upVector.x + 0.501*rightVector.x), cameraZoom*(10*upVector.y + 0.501*rightVector.y), cameraZoom*(10*upVector.z + 0.501*rightVector.z)
+ ]
+ effect: coordLinesThinEffect
+ }
+ Line {
+ width: 1.0
+ vertices: [
+ cameraZoom*(-10*upVector.x + 0.75*rightVector.x), cameraZoom*(-10*upVector.y + 0.75*rightVector.y), cameraZoom*(-10*upVector.z + 0.75*rightVector.z),
+ cameraZoom*(10*upVector.x + 0.75*rightVector.x), cameraZoom*(10*upVector.y + 0.75*rightVector.y), cameraZoom*(10*upVector.z + 0.75*rightVector.z),
+ cameraZoom*(10*upVector.x + 0.751*rightVector.x), cameraZoom*(10*upVector.y + 0.751*rightVector.y), cameraZoom*(10*upVector.z + 0.751*rightVector.z)
+ ]
+ effect: coordLinesThinEffect
+ }
+ Line {
+ width: 1.0
+ vertices: [
+ cameraZoom*(-10*upVector.x + 1.00*rightVector.x), cameraZoom*(-10*upVector.y + 1.00*rightVector.y), cameraZoom*(-10*upVector.z + 1.00*rightVector.z),
+ cameraZoom*(10*upVector.x + 1.00*rightVector.x), cameraZoom*(10*upVector.y + 1.00*rightVector.y), cameraZoom*(10*upVector.z + 1.00*rightVector.z),
+ cameraZoom*(10*upVector.x + 1.001*rightVector.x), cameraZoom*(10*upVector.y + 1.001*rightVector.y), cameraZoom*(10*upVector.z + 1.001*rightVector.z)
+ ]
+ effect: coordLinesThinEffect
+ }
+ Line {
+ width: 1.0
+ vertices: [
+ cameraZoom*(-10*upVector.x - 0.25*rightVector.x), cameraZoom*(-10*upVector.y - 0.25*rightVector.y), cameraZoom*(-10*upVector.z - 0.25*rightVector.z),
+ cameraZoom*(10*upVector.x - 0.25*rightVector.x), cameraZoom*(10*upVector.y - 0.25*rightVector.y), cameraZoom*(10*upVector.z - 0.25*rightVector.z),
+ cameraZoom*(10*upVector.x - 0.251*rightVector.x), cameraZoom*(10*upVector.y - 0.251*rightVector.y), cameraZoom*(10*upVector.z - 0.251*rightVector.z)
+ ]
+ effect: coordLinesThinEffect
+ }
+ Line {
+ width: 1.0
+ vertices: [
+ cameraZoom*(-10*upVector.x - 0.5*rightVector.x), cameraZoom*(-10*upVector.y - 0.5*rightVector.y), cameraZoom*(-10*upVector.z - 0.5*rightVector.z),
+ cameraZoom*(10*upVector.x - 0.5*rightVector.x), cameraZoom*(10*upVector.y - 0.5*rightVector.y), cameraZoom*(10*upVector.z - 0.5*rightVector.z),
+ cameraZoom*(10*upVector.x - 0.501*rightVector.x), cameraZoom*(10*upVector.y - 0.501*rightVector.y), cameraZoom*(10*upVector.z - 0.501*rightVector.z)
+ ]
+ effect: coordLinesThinEffect
+ }
+ Line {
+ width: 1.0
+ vertices: [
+ cameraZoom*(-10*upVector.x - 0.75*rightVector.x), cameraZoom*(-10*upVector.y - 0.75*rightVector.y), cameraZoom*(-10*upVector.z - 0.75*rightVector.z),
+ cameraZoom*(10*upVector.x - 0.75*rightVector.x), cameraZoom*(10*upVector.y - 0.75*rightVector.y), cameraZoom*(10*upVector.z - 0.75*rightVector.z),
+ cameraZoom*(10*upVector.x - 0.751*rightVector.x), cameraZoom*(10*upVector.y - 0.751*rightVector.y), cameraZoom*(10*upVector.z - 0.751*rightVector.z)
+ ]
+ effect: coordLinesThinEffect
+ }
+ Line {
+ width: 1.0
+ vertices: [
+ cameraZoom*(-10*upVector.x - 1.00*rightVector.x), cameraZoom*(-10*upVector.y - 1.00*rightVector.y), cameraZoom*(-10*upVector.z - 1.00*rightVector.z),
+ cameraZoom*(10*upVector.x - 1.00*rightVector.x), cameraZoom*(10*upVector.y - 1.00*rightVector.y), cameraZoom*(10*upVector.z - 1.00*rightVector.z),
+ cameraZoom*(10*upVector.x - 1.001*rightVector.x), cameraZoom*(10*upVector.y - 1.001*rightVector.y), cameraZoom*(10*upVector.z - 1.001*rightVector.z)
+ ]
+ effect: coordLinesThinEffect
+ }
+
}
MouseArea {
@@ -122,6 +290,19 @@ Rectangle {
}
}
+ ZoomControls {
+ anchors {
+ top: view.top; topMargin: 24;
+ right: view.right; rightMargin: 2;
+ }
+ onZoomIn: {
+ cameraZoom = 0.5 * cameraZoom;
+ }
+ onZoomOut: {
+ cameraZoom = 2.0 * cameraZoom;
+ }
+ }
+
Text {
id: viewportText
anchors {
@@ -131,4 +312,127 @@ Rectangle {
color: "white"
font.pixelSize: 16
}
+
+
+ Text {
+ id: h_minus100
+ text: -1.0*cameraZoom
+ x: (view.width/10) - 6
+ y: (view.height/2) - 14
+ color: "white"
+ font.pixelSize: 12
+ }
+ Text {
+ id: h_minus075
+ text: -0.75*cameraZoom
+ x: 2*(view.width/10) - 7
+ y: (view.height/2) - 14
+ color: "white"
+ font.pixelSize: 12
+ }
+ Text {
+ id: h_minus050
+ text: -0.5*cameraZoom
+ x: 3*(view.width/10) - 8
+ y: (view.height/2) - 14
+ color: "white"
+ font.pixelSize: 12
+ }
+ Text {
+ id: h_minus025
+ text: -0.25*cameraZoom
+ x: 4*(view.width/10) - 9
+ y: (view.height/2) - 14
+ color: "white"
+ font.pixelSize: 12
+ }
+ Text {
+ id: h_zero
+ text: "0.0"
+ x: (view.width/2) - 10
+ y: (view.height/2) - 14
+ color: "white"
+ font.pixelSize: 12
+ }
+ Text {
+ id: h_plus025
+ text: 0.25*cameraZoom
+ x: 6*(view.width/10) - 11
+ y: (view.height/2) - 14
+ color: "white"
+ font.pixelSize: 12
+ }
+ Text {
+ id: h_plus050
+ text: 0.5*cameraZoom
+ x: 7*(view.width/10) - 12
+ y: (view.height/2) - 14
+ color: "white"
+ font.pixelSize: 12
+ }
+ Text {
+ id: h_plus075
+ text: 0.75*cameraZoom
+ x: 8*(view.width/10) - 13
+ y: (view.height/2) - 14
+ color: "white"
+ font.pixelSize: 12
+ }
+ Text {
+ id: h_plus100
+ text: 1.0*cameraZoom
+ x: 9*(view.width/10) - 14
+ y: (view.height/2) - 14
+ color: "white"
+ font.pixelSize: 12
+ }
+
+ Text {
+ id: v_minus075
+ text: -0.75*cameraZoom
+ x: (view.width/2)
+ y: (view.height/8) - 12
+ color: "white"
+ font.pixelSize: 12
+ }
+ Text {
+ id: v_minus050
+ text: -0.5*cameraZoom
+ x: (view.width/2)
+ y: 2*(view.height/8) - 12
+ color: "white"
+ font.pixelSize: 12
+ }
+ Text {
+ id: v_minus025
+ text: -0.25*cameraZoom
+ x: (view.width/2)
+ y: 3*(view.height/8) - 12
+ color: "white"
+ font.pixelSize: 12
+ }
+ Text {
+ id: v_plus025
+ text: 0.25*cameraZoom
+ x: (view.width/2)
+ y: 5*(view.height/8) - 12
+ color: "white"
+ font.pixelSize: 12
+ }
+ Text {
+ id: v_plus050
+ text: 0.5*cameraZoom
+ x: (view.width/2)
+ y: 6*(view.height/8) - 12
+ color: "white"
+ font.pixelSize: 12
+ }
+ Text {
+ id: v_plus075
+ text: 0.75*cameraZoom
+ x: (view.width/2)
+ y: 7*(view.height/8) - 12
+ color: "white"
+ font.pixelSize: 12
+ }
}