diff options
author | Sergey Dubitskiy <sergey.dubitskiy@nokia.com> | 2012-01-17 10:38:12 +1000 |
---|---|---|
committer | Danny Pope <daniel.pope@nokia.com> | 2012-02-01 03:03:09 +0100 |
commit | f6cb01a4d0f439c8f746cd341acdbd6af671c645 (patch) | |
tree | 1b496c90d6dd89fcfb911dd49ea58097db25f863 | |
parent | 6dfd2cc32bd631681e6a2e33bd489c1732a0af03 (diff) |
QTBUG-23454. Added reference grid. Added zoomin/zoomout controls.
Change-Id: Ifdaad630cee1f9445325d7fb61012c76d44a38b0
Reviewed-by: Danny Pope <daniel.pope@nokia.com>
-rw-r--r-- | src/imports/shapes/line.cpp | 7 | ||||
-rw-r--r-- | src/threed/viewing/qglcamera.h | 2 | ||||
-rw-r--r-- | util/qt3d/modeltweak/qml/ModelTweak.qml | 9 | ||||
-rw-r--r-- | util/qt3d/modeltweak/qml/ModelViewport.qml | 306 | ||||
-rw-r--r-- | util/qt3d/modeltweak/qml/Widgets/ZoomControls.qml | 41 | ||||
-rw-r--r-- | util/qt3d/modeltweak/qml/Widgets/images/zoomin.png | bin | 0 -> 187 bytes | |||
-rw-r--r-- | util/qt3d/modeltweak/qml/Widgets/images/zoomout.png | bin | 0 -> 155 bytes |
7 files changed, 359 insertions, 6 deletions
diff --git a/src/imports/shapes/line.cpp b/src/imports/shapes/line.cpp index ef7c90716..f93a2b006 100644 --- a/src/imports/shapes/line.cpp +++ b/src/imports/shapes/line.cpp @@ -84,6 +84,7 @@ Line::Line(QObject *parent) : QDeclarativeItem3D(parent) ,m_width(3.0) + ,m_geometry(0) ,m_changeFlag(false) { //meh @@ -142,13 +143,11 @@ void Line::drawItem(QGLPainter *painter) if (m_changeFlag || !m_geometry) { if (m_geometry) delete m_geometry; - QGLBuilder builder; - QGeometryData lineCollection; - builder.newSection(); - lineCollection.appendVertexArray(m_vertexArray); + QGLBuilder builder; + builder.newSection(); builder.addTriangles(lineCollection); builder.currentNode()->setDrawingMode(QGL::LineStrip); builder.currentNode()->setDrawingWidth(m_width); diff --git a/src/threed/viewing/qglcamera.h b/src/threed/viewing/qglcamera.h index 87f7cf117..d943d2836 100644 --- a/src/threed/viewing/qglcamera.h +++ b/src/threed/viewing/qglcamera.h @@ -67,7 +67,7 @@ class Q_QT3D_EXPORT QGLCamera : public QObject Q_PROPERTY(qreal fieldOfView READ fieldOfView WRITE setFieldOfView NOTIFY projectionChanged) Q_PROPERTY(qreal nearPlane READ nearPlane WRITE setNearPlane NOTIFY projectionChanged) Q_PROPERTY(qreal farPlane READ farPlane WRITE setFarPlane NOTIFY projectionChanged) - Q_PROPERTY(QSizeF viewSize READ viewSize WRITE setViewSize NOTIFY projectionChanged SCRIPTABLE false) + Q_PROPERTY(QSizeF viewSize READ viewSize WRITE setViewSize NOTIFY projectionChanged) Q_PROPERTY(QSizeF minViewSize READ minViewSize WRITE setMinViewSize NOTIFY projectionChanged SCRIPTABLE false) Q_PROPERTY(int screenRotation READ screenRotation WRITE setScreenRotation NOTIFY projectionChanged SCRIPTABLE false) Q_PROPERTY(QVector3D eye READ eye WRITE setEye NOTIFY viewChanged) diff --git a/util/qt3d/modeltweak/qml/ModelTweak.qml b/util/qt3d/modeltweak/qml/ModelTweak.qml index f3b1bc6cc..0741a7944 100644 --- a/util/qt3d/modeltweak/qml/ModelTweak.qml +++ b/util/qt3d/modeltweak/qml/ModelTweak.qml @@ -74,6 +74,9 @@ Rectangle { stateName: "ZYMaximised" viewportName: "Z,Y axis (right)" + rightVector: Qt.vector3d(0, 0, -1) + upVector: Qt.vector3d(0, 1, 0) + property alias position: transformTranslate.translate; onMouseTranslateX: if (!modelPropertiesPane.translateLocked) position = Qt.vector3d(position.x, position.y, translate.z + (down.x - mouse.x)/translateSensitivity) @@ -98,6 +101,9 @@ Rectangle { stateName: "XYMaximised" viewportName: "X,Y axis (front)" + rightVector: Qt.vector3d(1, 0, 0) + upVector: Qt.vector3d(0, 1, 0) + property alias position: transformTranslate.translate; onMouseTranslateX: if (!modelPropertiesPane.translateLocked)position = Qt.vector3d(translate.x - (down.x - mouse.x)/translateSensitivity, position.y, position.z) @@ -123,6 +129,9 @@ Rectangle { stateName: "XZMaximised" viewportName: "X,Z axis (top)" + rightVector: Qt.vector3d(1, 0, 0) + upVector: Qt.vector3d(0, 0, -1) + property alias position: transformTranslate.translate; onMouseTranslateX: if (!modelPropertiesPane.translateLocked)position = Qt.vector3d(translate.x - (down.x - mouse.x)/translateSensitivity, position.y, position.z) 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 + } } diff --git a/util/qt3d/modeltweak/qml/Widgets/ZoomControls.qml b/util/qt3d/modeltweak/qml/Widgets/ZoomControls.qml new file mode 100644 index 000000000..accdb54b5 --- /dev/null +++ b/util/qt3d/modeltweak/qml/Widgets/ZoomControls.qml @@ -0,0 +1,41 @@ +import QtQuick 1.0 +import Qt3D 1.0 +import ModelTweak 1.0 + +Rectangle { + radius: 4 + border.width: 1 + border.color: "#191919" + width: 16 + 2 + height: 16 + 2 + 16 + 2 + color: "#999999" + + signal zoomIn() + signal zoomOut() + + Image { + id: imgIn + source: "images/zoomin.png" + x: 2 + y: 2 + MouseArea { + anchors.fill: parent + onClicked: { + zoomIn() + } + } + } + + Image { + id: imgOut + source: "images/zoomout.png" + x: 2 + y: 20 + MouseArea { + anchors.fill: parent + onClicked: { + zoomOut() + } + } + } +} diff --git a/util/qt3d/modeltweak/qml/Widgets/images/zoomin.png b/util/qt3d/modeltweak/qml/Widgets/images/zoomin.png Binary files differnew file mode 100644 index 000000000..e4434a075 --- /dev/null +++ b/util/qt3d/modeltweak/qml/Widgets/images/zoomin.png diff --git a/util/qt3d/modeltweak/qml/Widgets/images/zoomout.png b/util/qt3d/modeltweak/qml/Widgets/images/zoomout.png Binary files differnew file mode 100644 index 000000000..4c853bc6b --- /dev/null +++ b/util/qt3d/modeltweak/qml/Widgets/images/zoomout.png |