summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSergey Dubitskiy <sergey.dubitskiy@nokia.com>2012-01-17 10:38:12 +1000
committerDanny Pope <daniel.pope@nokia.com>2012-02-01 03:03:09 +0100
commitf6cb01a4d0f439c8f746cd341acdbd6af671c645 (patch)
tree1b496c90d6dd89fcfb911dd49ea58097db25f863
parent6dfd2cc32bd631681e6a2e33bd489c1732a0af03 (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.cpp7
-rw-r--r--src/threed/viewing/qglcamera.h2
-rw-r--r--util/qt3d/modeltweak/qml/ModelTweak.qml9
-rw-r--r--util/qt3d/modeltweak/qml/ModelViewport.qml306
-rw-r--r--util/qt3d/modeltweak/qml/Widgets/ZoomControls.qml41
-rw-r--r--util/qt3d/modeltweak/qml/Widgets/images/zoomin.pngbin0 -> 187 bytes
-rw-r--r--util/qt3d/modeltweak/qml/Widgets/images/zoomout.pngbin0 -> 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
new file mode 100644
index 000000000..e4434a075
--- /dev/null
+++ b/util/qt3d/modeltweak/qml/Widgets/images/zoomin.png
Binary files differ
diff --git a/util/qt3d/modeltweak/qml/Widgets/images/zoomout.png b/util/qt3d/modeltweak/qml/Widgets/images/zoomout.png
new file mode 100644
index 000000000..4c853bc6b
--- /dev/null
+++ b/util/qt3d/modeltweak/qml/Widgets/images/zoomout.png
Binary files differ