diff options
Diffstat (limited to 'util/qt3d/modeltweak/qml/ModelViewport.qml')
-rw-r--r-- | util/qt3d/modeltweak/qml/ModelViewport.qml | 306 |
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 + } } |