summaryrefslogtreecommitdiffstats
path: root/util
diff options
context:
space:
mode:
Diffstat (limited to 'util')
-rw-r--r--util/gencube/gencube.cpp152
-rw-r--r--util/gencube/genobjcube.cpp106
-rw-r--r--util/meshcvt/README32
-rw-r--r--util/meshcvt/meshcvt.cpp216
-rw-r--r--util/meshcvt/meshcvt.pro8
-rw-r--r--util/meshcvt/teapot.txt340
-rw-r--r--util/qt3d/assetviewer/assetviewer.desktop7
-rw-r--r--util/qt3d/assetviewer/assetviewer.pro25
-rw-r--r--util/qt3d/assetviewer/assetviewer.rc1
-rw-r--r--util/qt3d/assetviewer/main.cpp100
-rw-r--r--util/qt3d/assetviewer/qml/AssetViewer.qml292
-rw-r--r--util/qt3d/assetviewer/qml/BlenderValueSlider.qml175
-rw-r--r--util/qt3d/assetviewer/qml/ButtonBarPane.qml51
-rw-r--r--util/qt3d/assetviewer/qml/CheckBox.qml45
-rw-r--r--util/qt3d/assetviewer/qml/ColorPicker.qml286
-rw-r--r--util/qt3d/assetviewer/qml/ColorUtils.js61
-rw-r--r--util/qt3d/assetviewer/qml/HelpOverlay.qml56
-rw-r--r--util/qt3d/assetviewer/qml/ModelPropertiesPane.qml543
-rw-r--r--util/qt3d/assetviewer/qml/ModelViewport.qml452
-rw-r--r--util/qt3d/assetviewer/qml/SaveButton.qml12
-rw-r--r--util/qt3d/assetviewer/qml/Widgets/BlenderToggle.qml48
-rw-r--r--util/qt3d/assetviewer/qml/Widgets/Checkered.qml27
-rw-r--r--util/qt3d/assetviewer/qml/Widgets/ColorSelector.qml72
-rw-r--r--util/qt3d/assetviewer/qml/Widgets/ColorWidget.qml37
-rw-r--r--util/qt3d/assetviewer/qml/Widgets/HSVColor.qml15
-rw-r--r--util/qt3d/assetviewer/qml/Widgets/InputBox.qml39
-rw-r--r--util/qt3d/assetviewer/qml/Widgets/ModelViewportResize.qml30
-rw-r--r--util/qt3d/assetviewer/qml/Widgets/SliderHandle.qml76
-rw-r--r--util/qt3d/assetviewer/qml/Widgets/ZoomControls.qml41
-rw-r--r--util/qt3d/assetviewer/qml/Widgets/images/grow.pngbin252 -> 0 bytes
-rw-r--r--util/qt3d/assetviewer/qml/Widgets/images/shrink.pngbin249 -> 0 bytes
-rw-r--r--util/qt3d/assetviewer/qml/Widgets/images/zoomin.pngbin187 -> 0 bytes
-rw-r--r--util/qt3d/assetviewer/qml/Widgets/images/zoomout.pngbin155 -> 0 bytes
-rw-r--r--util/qt3d/assetviewer/qml/fileHandling.js106
-rw-r--r--util/qt3d/assetviewer/qml/images/help.pngbin737 -> 0 bytes
-rw-r--r--util/qt3d/assetviewer/qml/images/lock.pngbin273 -> 0 bytes
-rw-r--r--util/qt3d/assetviewer/qml/images/minus.pngbin224 -> 0 bytes
-rw-r--r--util/qt3d/assetviewer/qml/images/model.pngbin754 -> 0 bytes
-rw-r--r--util/qt3d/assetviewer/qml/images/open.pngbin596 -> 0 bytes
-rw-r--r--util/qt3d/assetviewer/qml/images/plus.pngbin224 -> 0 bytes
-rw-r--r--util/qt3d/assetviewer/qml/images/save.pngbin706 -> 0 bytes
-rw-r--r--util/qt3d/assetviewer/qml/images/unlock.pngbin292 -> 0 bytes
-rw-r--r--util/qt3d/assetviewer/qml/meshes/monkey.3dsbin13886 -> 0 bytes
-rw-r--r--util/qt3d/assetviewer/qml/meshes/penguin.3dsbin36301 -> 0 bytes
-rw-r--r--util/qt3d/assetviewer/qtquick3d.icobin67646 -> 0 bytes
-rw-r--r--util/qt3d/assetviewer/qtquick3d.pngbin4050 -> 0 bytes
-rw-r--r--util/qt3d/assetviewer/quickfile.cpp163
-rw-r--r--util/qt3d/assetviewer/quickfile.h46
-rw-r--r--util/qt3d/qglinfo/aboutdialog.cpp72
-rw-r--r--util/qt3d/qglinfo/aboutdialog.h67
-rw-r--r--util/qt3d/qglinfo/aboutdialog.ui54
-rw-r--r--util/qt3d/qglinfo/fpswidget.cpp279
-rw-r--r--util/qt3d/qglinfo/fpswidget.h93
-rw-r--r--util/qt3d/qglinfo/images/teapot-logo.pngbin3322 -> 0 bytes
-rw-r--r--util/qt3d/qglinfo/main.cpp64
-rw-r--r--util/qt3d/qglinfo/qglinfo.cpp344
-rw-r--r--util/qt3d/qglinfo/qglinfo.h78
-rw-r--r--util/qt3d/qglinfo/qglinfo.pro25
-rw-r--r--util/qt3d/qglinfo/qglinfo.qrc5
-rw-r--r--util/qt3d/qglinfo/qglinfo.rc1
-rw-r--r--util/qt3d/qglinfo/qglinfowindow.cpp162
-rw-r--r--util/qt3d/qglinfo/qglinfowindow.h77
-rw-r--r--util/qt3d/qglinfo/qglinfowindow.ui218
-rw-r--r--util/qt3d/qglinfo/qtquick3d.icobin51262 -> 0 bytes
-rw-r--r--util/qt3d/qt3d.pro2
-rw-r--r--util/qt3d/qt3d.svg32
-rw-r--r--util/qt3d/qtquick3d.svg23
-rw-r--r--util/util.pro4
68 files changed, 0 insertions, 5260 deletions
diff --git a/util/gencube/gencube.cpp b/util/gencube/gencube.cpp
deleted file mode 100644
index 9cfa3f8e..00000000
--- a/util/gencube/gencube.cpp
+++ /dev/null
@@ -1,152 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtQuick3D module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-// Used to generate the cube vertex arrays for qglcube.cpp.
-
-#include <stdio.h>
-
-static float const normals[6 * 3] = {
- -1.0f, 0.0f, 0.0f,
- 0.0f, 1.0f, 0.0f,
- 1.0f, 0.0f, 0.0f,
- 0.0f, -1.0f, 0.0f,
- 0.0f, 0.0f, 1.0f,
- 0.0f, 0.0f, -1.0f
-};
-
-static float const vertices[8 * 3] = {
- -0.5f, -0.5f, -0.5f,
- -0.5f, -0.5f, 0.5f,
- -0.5f, 0.5f, 0.5f,
- -0.5f, 0.5f, -0.5f,
- 0.5f, -0.5f, -0.5f,
- 0.5f, -0.5f, 0.5f,
- 0.5f, 0.5f, 0.5f,
- 0.5f, 0.5f, -0.5f
-};
-
-static float const texCoords[4 * 2] = {
- 1.0f, 0.0f,
- 1.0f, 1.0f,
- 0.0f, 1.0f,
- 0.0f, 0.0f
-};
-
-static unsigned short const indices[6 * 4] = {
- 0, 1, 2, 3, 3, 2, 6, 7, 7, 6, 5, 4,
- 4, 5, 1, 0, 5, 6, 2, 1, 7, 4, 0, 3
-};
-
-int main(int argc, char *argv[])
-{
- float vert[6][6][3];
- float norm[6][6][3];
- float tcoords[6][6][2];
- for (int face = 0; face < 6; ++face) {
- norm[face][0][0] = normals[face * 3 + 0];
- norm[face][0][1] = normals[face * 3 + 1];
- norm[face][0][2] = normals[face * 3 + 2];
- norm[face][1][0] = normals[face * 3 + 0];
- norm[face][1][1] = normals[face * 3 + 1];
- norm[face][1][2] = normals[face * 3 + 2];
- norm[face][2][0] = normals[face * 3 + 0];
- norm[face][2][1] = normals[face * 3 + 1];
- norm[face][2][2] = normals[face * 3 + 2];
- norm[face][3][0] = normals[face * 3 + 0];
- norm[face][3][1] = normals[face * 3 + 1];
- norm[face][3][2] = normals[face * 3 + 2];
- norm[face][4][0] = normals[face * 3 + 0];
- norm[face][4][1] = normals[face * 3 + 1];
- norm[face][4][2] = normals[face * 3 + 2];
- norm[face][5][0] = normals[face * 3 + 0];
- norm[face][5][1] = normals[face * 3 + 1];
- norm[face][5][2] = normals[face * 3 + 2];
-
- vert[face][0][0] = vertices[indices[face * 4] * 3 + 0];
- vert[face][0][1] = vertices[indices[face * 4] * 3 + 1];
- vert[face][0][2] = vertices[indices[face * 4] * 3 + 2];
- vert[face][1][0] = vertices[indices[face * 4 + 1] * 3 + 0];
- vert[face][1][1] = vertices[indices[face * 4 + 1] * 3 + 1];
- vert[face][1][2] = vertices[indices[face * 4 + 1] * 3 + 2];
- vert[face][2][0] = vertices[indices[face * 4 + 2] * 3 + 0];
- vert[face][2][1] = vertices[indices[face * 4 + 2] * 3 + 1];
- vert[face][2][2] = vertices[indices[face * 4 + 2] * 3 + 2];
- vert[face][3][0] = vertices[indices[face * 4] * 3 + 0];
- vert[face][3][1] = vertices[indices[face * 4] * 3 + 1];
- vert[face][3][2] = vertices[indices[face * 4] * 3 + 2];
- vert[face][4][0] = vertices[indices[face * 4 + 2] * 3 + 0];
- vert[face][4][1] = vertices[indices[face * 4 + 2] * 3 + 1];
- vert[face][4][2] = vertices[indices[face * 4 + 2] * 3 + 2];
- vert[face][5][0] = vertices[indices[face * 4 + 3] * 3 + 0];
- vert[face][5][1] = vertices[indices[face * 4 + 3] * 3 + 1];
- vert[face][5][2] = vertices[indices[face * 4 + 3] * 3 + 2];
-
- tcoords[face][0][0] = texCoords[0];
- tcoords[face][0][1] = texCoords[1];
- tcoords[face][1][0] = texCoords[2];
- tcoords[face][1][1] = texCoords[3];
- tcoords[face][2][0] = texCoords[4];
- tcoords[face][2][1] = texCoords[5];
- tcoords[face][3][0] = texCoords[0];
- tcoords[face][3][1] = texCoords[1];
- tcoords[face][4][0] = texCoords[4];
- tcoords[face][4][1] = texCoords[5];
- tcoords[face][5][0] = texCoords[6];
- tcoords[face][5][1] = texCoords[7];
- }
- printf("#define QGL_CUBE_SIZE (6 * 6 * (3 + 3 + 2))\n");
- printf("static float const cubeVertices[QGL_CUBE_SIZE] = {\n");
- for (int face = 0; face < 6; ++face) {
- for (int index = 0; index < 6; ++index) {
- printf(" %.1ff, %.1ff, %.1ff, ",
- vert[face][index][0], vert[face][index][1],
- vert[face][index][2]);
- printf("%.1ff, %.1ff, %.1ff, ",
- norm[face][index][0], norm[face][index][1],
- norm[face][index][2]);
- printf("%.1ff, %.1ff,\n",
- tcoords[face][index][0], tcoords[face][index][1]);
- }
- printf("\n");
- }
- printf("};\n\n");
- return 0;
-}
diff --git a/util/gencube/genobjcube.cpp b/util/gencube/genobjcube.cpp
deleted file mode 100644
index dc78837a..00000000
--- a/util/gencube/genobjcube.cpp
+++ /dev/null
@@ -1,106 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtQuick3D module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-// Used to generate cube.obj.
-
-#include <stdio.h>
-
-static float const normals[6 * 3] = {
- -1.0f, 0.0f, 0.0f,
- 0.0f, 1.0f, 0.0f,
- 1.0f, 0.0f, 0.0f,
- 0.0f, -1.0f, 0.0f,
- 0.0f, 0.0f, 1.0f,
- 0.0f, 0.0f, -1.0f
-};
-
-static float const vertices[8 * 3] = {
- -0.5f, -0.5f, -0.5f,
- -0.5f, -0.5f, 0.5f,
- -0.5f, 0.5f, 0.5f,
- -0.5f, 0.5f, -0.5f,
- 0.5f, -0.5f, -0.5f,
- 0.5f, -0.5f, 0.5f,
- 0.5f, 0.5f, 0.5f,
- 0.5f, 0.5f, -0.5f
-};
-
-static float const texCoords[4 * 2] = {
- 1.0f, 0.0f,
- 1.0f, 1.0f,
- 0.0f, 1.0f,
- 0.0f, 0.0f
-};
-
-static unsigned short const indices[6 * 4] = {
- 0, 1, 2, 3, 3, 2, 6, 7, 7, 6, 5, 4,
- 4, 5, 1, 0, 5, 6, 2, 1, 7, 4, 0, 3
-};
-
-int main(int argc, char *argv[])
-{
- printf("s 0\n");
- for (int vert = 0; vert < 8; ++vert) {
- printf("v %.1f %.1f %.1f\n",
- vertices[vert * 3 + 0],
- vertices[vert * 3 + 1],
- vertices[vert * 3 + 2]);
- }
- for (int norm = 0; norm < 6; ++norm) {
- printf("vn %.1f %.1f %.1f\n",
- normals[norm * 3 + 0],
- normals[norm * 3 + 1],
- normals[norm * 3 + 2]);
- }
- for (int tex = 0; tex < 4; ++tex) {
- printf("vt %.1f %.1f\n",
- texCoords[tex * 2 + 0],
- texCoords[tex * 2 + 1]);
- }
- for (int face = 0; face < 6; ++face) {
- printf("f %d/%d/%d %d/%d/%d %d/%d/%d %d/%d/%d\n",
- indices[face * 4 + 0] + 1, 1, face + 1,
- indices[face * 4 + 1] + 1, 2, face + 1,
- indices[face * 4 + 2] + 1, 3, face + 1,
- indices[face * 4 + 3] + 1, 4, face + 1);
- }
- return 0;
-}
diff --git a/util/meshcvt/README b/util/meshcvt/README
deleted file mode 100644
index 71679eff..00000000
--- a/util/meshcvt/README
+++ /dev/null
@@ -1,32 +0,0 @@
-This program converts an object defined as a set of Bezier patches
-into vertex array data that can be used to draw it. A Bezier patch
-is a curved surface defined in terms of 16 control points.
-The object is decomposed into triangles for rendering.
-
-The primary use for this program is to convert the patch data from
-http://www.sjbaker.org/teapot/teaset.tgz for the classic 3D teapot,
-but it should work on other objects defined as Bezier patches
-or triangle meshes.
-
-The usage for this utility is:
-
- meshcvt mesh-filename name [depth]
-
-The data to represent the object will be written to standard output.
-The "depth" parameter indicates the recursive depth for sub-dividing
-Bezier patches into triangles. The default value is 4.
-
-The input file format starts with the number of patches.
-The following lines contain 16 indices to define a patch.
-The indices should be comma-separated.
-
-Following the index groups is the number of vertices, and then that
-many vertex definitions. Each vertex definition consists of three
-floating-point values, comma-separated. Three more comma-separated
-floating-point values can appear on the line after the vertex
-co-ordinates to define a vertex normal.
-
-The teapot.txt file provides the data for the classic 3D teapot
-from the above URL as an example of what a Bezier patch definition
-file looks like. The above URL also has Bezier patch data for a
-teacup and a teaspoon, to complete your tea service.
diff --git a/util/meshcvt/meshcvt.cpp b/util/meshcvt/meshcvt.cpp
deleted file mode 100644
index e01b0452..00000000
--- a/util/meshcvt/meshcvt.cpp
+++ /dev/null
@@ -1,216 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtQuick3D module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <QtGui/qvector3d.h>
-#include "qarray.h"
-
-static void meshError(const char *filename)
-{
- qWarning("%s: does not contain valid mesh data\n", filename);
- exit(1);
-}
-
-static int numPatches = 0;
-static int numVertices = 0;
-static int *patches = 0;
-
-int main(int argc, char *argv[])
-{
- int depth = 4;
- int teapotAdjust = 0;
- int reversePatches = 0;
- char buffer[BUFSIZ];
- char *filename;
- char *name;
- QArray<QVector3D> vertices;
-
- // Validate the command-line arguments.
- if (argc < 3) {
- qWarning("Usage: %s [--teapot-adjust] [--reverse-patches] mesh-filename name [depth]\n", argv[0]);
- return 1;
- }
- if (!strcmp(argv[1], "--teapot-adjust")) {
- // Adjust the vertices to correctly size and position the teapot.
- ++argv;
- --argc;
- teapotAdjust = 1;
- }
- if (!strcmp(argv[1], "--reverse-patches")) {
- // Reverse the coordinate order of patches (fixes teacup).
- ++argv;
- --argc;
- reversePatches = 1;
- }
- filename = argv[1];
- name = argv[2];
- if (argc > 3)
- depth = atoi(argv[3]);
-
- // Read the mesh data from the input file and determine
- // if it is a Bezier patch mesh or a triangle mesh.
- FILE *file;
- if ((file = fopen(filename, "r")) == NULL) {
- perror(filename);
- return 1;
- }
- if (fscanf(file, "%i\n", &numPatches) != 1)
- meshError(filename);
- patches = new int [numPatches * 17];
- for (int patch = 0; patch < numPatches; ++patch) {
- int *p = patches + patch * 17;
- if (!fgets(buffer, sizeof(buffer), file))
- meshError(filename);
- if (sscanf(buffer, "%i, %i, %i, %i, %i, %i, %i, %i, "
- "%i, %i, %i, %i, %i, %i, %i, %i, %i\n",
- p, p + 1, p + 2, p + 3,
- p + 4, p + 5, p + 6, p + 7,
- p + 8, p + 9, p + 10, p + 11,
- p + 12, p + 13, p + 14, p + 15, p + 16) != 17) {
- if (sscanf(buffer, "%i, %i, %i, %i, %i, %i, %i, %i, "
- "%i, %i, %i, %i, %i, %i, %i, %i\n",
- p, p + 1, p + 2, p + 3,
- p + 4, p + 5, p + 6, p + 7,
- p + 8, p + 9, p + 10, p + 11,
- p + 12, p + 13, p + 14, p + 15) != 16) {
- meshError(filename);
- } else {
- p[16] = -1; // Use the default minimum depth value.
- }
- }
- if (reversePatches) {
- int reversed[16];
- for (int i = 0; i < 16; ++i)
- reversed[i] = p[(i & 0x0C) + (3 - (i % 4))];
- for (int i = 0; i < 16; ++i)
- p[i] = reversed[i];
- }
- // The standard patch indices are 1-based, not 0-based.
- // Correct for that problem here.
- for (int offset = 0; offset < 16; ++offset)
- --(p[offset]);
- }
- if (fscanf(file, "%i\n", &numVertices) != 1)
- meshError(filename);
- for (int vertex = 0; vertex < numVertices; ++vertex) {
- float x, y, z, xnormal, ynormal, znormal;
- if (!fgets(buffer, sizeof(buffer), file))
- meshError(filename);
- if (sscanf(buffer, "%f, %f, %f, %f, %f, %f\n",
- &x, &y, &z, &xnormal, &ynormal, &znormal) != 6) {
- if (sscanf(buffer, "%f, %f, %f\n", &x, &y, &z) != 3)
- meshError(filename);
- }
- if (teapotAdjust) {
- // Do the equivalent of the following transformation:
- // matrix.rotate(270.0f, 1.0f, 0.0f, 0.0f);
- // matrix.scale(0.5f, 0.5f, 0.5f);
- // matrix.translate(0.0f, 0.0f, -1.5f);
- z -= 1.5f;
- x *= 0.5f;
- y *= 0.5f;
- z *= 0.5f;
- float y2 = z;
- float z2 = -y;
- y = y2;
- z = z2;
- }
- vertices.append(QVector3D(x, y, z));
- }
- fclose(file);
-
- // Generate the output data.
- printf("// Generated from %s by meshcvt, depth = %d\n\n", filename, depth);
- printf("#define %sBezierVertexCount %d\n", name, numVertices);
- printf("#define %sPatchCount %d\n", name, numPatches);
- printf("#define %sDepth %d\n", name, depth);
- printf("static float const %sBezierVertexData[] = {\n", name);
- for (int vertex = 0; vertex < vertices.count(); ++vertex) {
- QVector3D v = vertices[vertex];
- printf(" %ff, %ff, %ff", v.x(), v.y(), v.z());
- if (vertex < (vertices.count() - 1))
- printf(",\n");
- else
- printf("\n");
- }
- printf("};\n\n");
- printf("static ushort const %sPatchData[] = {\n", name);
- for (int patch = 0; patch < numPatches; ++patch) {
- int *p = patches + patch * 17;
- printf(" %d, %d, %d, %d, %d, %d, %d, %d, "
- "%d, %d, %d, %d, %d, %d, %d, %d",
- p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7],
- p[8], p[9], p[10], p[11], p[12], p[13], p[14], p[15]);
- if (patch < (numPatches - 1))
- printf(",\n");
- else
- printf("\n");
- }
- printf("};\n");
- printf("\n");
- printf("class %sPatches : public QGLBezierPatches\n{\n", name);
- printf("public:\n");
- printf(" %sPatches()\n", name);
- printf(" {\n");
- printf(" QVector3DArray positions;\n");
- printf(" for (int pindex = 0; pindex < %sPatchCount * 16; ++pindex) {\n", name);
- printf(" int vindex = %sPatchData[pindex];\n", name);
- printf(" positions.append(%sBezierVertexData[vindex * 3],\n", name);
- printf(" %sBezierVertexData[vindex * 3 + 1],\n", name);
- printf(" %sBezierVertexData[vindex * 3 + 2]);\n", name);
- printf(" }\n");
- printf(" setPositions(positions);\n");
- printf(" setSubdivisionDepth(%sDepth);\n", name);
- printf(" }\n");
- printf("};\n");
-
- // Dump some statistics to stderr.
- qWarning("Depth: %d\n", depth);
- qWarning("Number of vertices: %d\n", numVertices);
- qWarning("Number of patches: %d\n", numPatches);
- int storage = numVertices * sizeof(float) * 3;
- storage += numPatches * sizeof(ushort);
- qWarning("Bezier storage: %d bytes\n", storage);
-
- return 0;
-}
diff --git a/util/meshcvt/meshcvt.pro b/util/meshcvt/meshcvt.pro
deleted file mode 100644
index 53f336af..00000000
--- a/util/meshcvt/meshcvt.pro
+++ /dev/null
@@ -1,8 +0,0 @@
-TARGET = meshcvt
-
-CONFIG += qt3d
-
-SOURCES += \
- meshcvt.cpp \
-
-win32:DEFINES+=_CRT_SECURE_NO_WARNINGS
diff --git a/util/meshcvt/teapot.txt b/util/meshcvt/teapot.txt
deleted file mode 100644
index 9f62bb5e..00000000
--- a/util/meshcvt/teapot.txt
+++ /dev/null
@@ -1,340 +0,0 @@
-32
-1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16
-4,17,18,19,8,20,21,22,12,23,24,25,16,26,27,28
-19,29,30,31,22,32,33,34,25,35,36,37,28,38,39,40
-31,41,42,1,34,43,44,5,37,45,46,9,40,47,48,13
-13,14,15,16,49,50,51,52,53,54,55,56,57,58,59,60
-16,26,27,28,52,61,62,63,56,64,65,66,60,67,68,69
-28,38,39,40,63,70,71,72,66,73,74,75,69,76,77,78
-40,47,48,13,72,79,80,49,75,81,82,53,78,83,84,57
-57,58,59,60,85,86,87,88,89,90,91,92,93,94,95,96
-60,67,68,69,88,97,98,99,92,100,101,102,96,103,104,105
-69,76,77,78,99,106,107,108,102,109,110,111,105,112,113,114
-78,83,84,57,108,115,116,85,111,117,118,89,114,119,120,93
-121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136
-124,137,138,121,128,139,140,125,132,141,142,129,136,143,144,133
-133,134,135,136,145,146,147,148,149,150,151,152,69,153,154,155
-136,143,144,133,148,156,157,145,152,158,159,149,155,160,161,69
-162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177
-165,178,179,162,169,180,181,166,173,182,183,170,177,184,185,174
-174,175,176,177,186,187,188,189,190,191,192,193,194,195,196,197
-177,184,185,174,189,198,199,186,193,200,201,190,197,202,203,194
-204,204,204,204,207,208,209,210,211,211,211,211,212,213,214,215,4
-204,204,204,204,210,217,218,219,211,211,211,211,215,220,221,222,4
-204,204,204,204,219,224,225,226,211,211,211,211,222,227,228,229,4
-204,204,204,204,226,230,231,207,211,211,211,211,229,232,233,212,4
-212,213,214,215,234,235,236,237,238,239,240,241,242,243,244,245
-215,220,221,222,237,246,247,248,241,249,250,251,245,252,253,254
-222,227,228,229,248,255,256,257,251,258,259,260,254,261,262,263
-229,232,233,212,257,264,265,234,260,266,267,238,263,268,269,242
-270,270,270,270,279,280,281,282,275,276,277,278,271,272,273,274,4
-270,270,270,270,282,289,290,291,278,286,287,288,274,283,284,285,4
-270,270,270,270,291,298,299,300,288,295,296,297,285,292,293,294,4
-270,270,270,270,300,305,306,279,297,303,304,275,294,301,302,271,4
-306
-1.4,0.0,2.4
-1.4,-0.784,2.4
-0.784,-1.4,2.4
-0.0,-1.4,2.4
-1.3375,0.0,2.53125
-1.3375,-0.749,2.53125
-0.749,-1.3375,2.53125
-0.0,-1.3375,2.53125
-1.4375,0.0,2.53125
-1.4375,-0.805,2.53125
-0.805,-1.4375,2.53125
-0.0,-1.4375,2.53125
-1.5,0.0,2.4
-1.5,-0.84,2.4
-0.84,-1.5,2.4
-0.0,-1.5,2.4
--0.784,-1.4,2.4
--1.4,-0.784,2.4
--1.4,0.0,2.4
--0.749,-1.3375,2.53125
--1.3375,-0.749,2.53125
--1.3375,0.0,2.53125
--0.805,-1.4375,2.53125
--1.4375,-0.805,2.53125
--1.4375,0.0,2.53125
--0.84,-1.5,2.4
--1.5,-0.84,2.4
--1.5,0.0,2.4
--1.4,0.784,2.4
--0.784,1.4,2.4
-0.0,1.4,2.4
--1.3375,0.749,2.53125
--0.749,1.3375,2.53125
-0.0,1.3375,2.53125
--1.4375,0.805,2.53125
--0.805,1.4375,2.53125
-0.0,1.4375,2.53125
--1.5,0.84,2.4
--0.84,1.5,2.4
-0.0,1.5,2.4
-0.784,1.4,2.4
-1.4,0.784,2.4
-0.749,1.3375,2.53125
-1.3375,0.749,2.53125
-0.805,1.4375,2.53125
-1.4375,0.805,2.53125
-0.84,1.5,2.4
-1.5,0.84,2.4
-1.75,0.0,1.875
-1.75,-0.98,1.875
-0.98,-1.75,1.875
-0.0,-1.75,1.875
-2.0,0.0,1.35
-2.0,-1.12,1.35
-1.12,-2.0,1.35
-0.0,-2.0,1.35
-2.0,0.0,0.9
-2.0,-1.12,0.9
-1.12,-2.0,0.9
-0.0,-2.0,0.9
--0.98,-1.75,1.875
--1.75,-0.98,1.875
--1.75,0.0,1.875
--1.12,-2.0,1.35
--2.0,-1.12,1.35
--2.0,0.0,1.35
--1.12,-2.0,0.9
--2.0,-1.12,0.9
--2.0,0.0,0.9
--1.75,0.98,1.875
--0.98,1.75,1.875
-0.0,1.75,1.875
--2.0,1.12,1.35
--1.12,2.0,1.35
-0.0,2.0,1.35
--2.0,1.12,0.9
--1.12,2.0,0.9
-0.0,2.0,0.9
-0.98,1.75,1.875
-1.75,0.98,1.875
-1.12,2.0,1.35
-2.0,1.12,1.35
-1.12,2.0,0.9
-2.0,1.12,0.9
-2.0,0.0,0.45
-2.0,-1.12,0.45
-1.12,-2.0,0.45
-0.0,-2.0,0.45
-1.5,0.0,0.225
-1.5,-0.84,0.225
-0.84,-1.5,0.225
-0.0,-1.5,0.225
-1.5,0.0,0.15
-1.5,-0.84,0.15
-0.84,-1.5,0.15
-0.0,-1.5,0.15
--1.12,-2.0,0.45
--2.0,-1.12,0.45
--2.0,0.0,0.45
--0.84,-1.5,0.225
--1.5,-0.84,0.225
--1.5,0.0,0.225
--0.84,-1.5,0.15
--1.5,-0.84,0.15
--1.5,0.0,0.15
--2.0,1.12,0.45
--1.12,2.0,0.45
-0.0,2.0,0.45
--1.5,0.84,0.225
--0.84,1.5,0.225
-0.0,1.5,0.225
--1.5,0.84,0.15
--0.84,1.5,0.15
-0.0,1.5,0.15
-1.12,2.0,0.45
-2.0,1.12,0.45
-0.84,1.5,0.225
-1.5,0.84,0.225
-0.84,1.5,0.15
-1.5,0.84,0.15
--1.6,0.0,2.025
--1.6,-0.3,2.025
--1.5,-0.3,2.25
--1.5,0.0,2.25
--2.3,0.0,2.025
--2.3,-0.3,2.025
--2.5,-0.3,2.25
--2.5,0.0,2.25
--2.7,0.0,2.025
--2.7,-0.3,2.025
--3.0,-0.3,2.25
--3.0,0.0,2.25
--2.7,0.0,1.8
--2.7,-0.3,1.8
--3.0,-0.3,1.8
--3.0,0.0,1.8
--1.5,0.3,2.25
--1.6,0.3,2.025
--2.5,0.3,2.25
--2.3,0.3,2.025
--3.0,0.3,2.25
--2.7,0.3,2.025
--3.0,0.3,1.8
--2.7,0.3,1.8
--2.7,0.0,1.575
--2.7,-0.3,1.575
--3.0,-0.3,1.35
--3.0,0.0,1.35
--2.5,0.0,1.125
--2.5,-0.3,1.125
--2.65,-0.3,0.9375
--2.65,0.0,0.9375
--2.0,-0.3,0.9
--1.9,-0.3,0.6
--1.9,0.0,0.6
--3.0,0.3,1.35
--2.7,0.3,1.575
--2.65,0.3,0.9375
--2.5,0.3,1.125
--1.9,0.3,0.6
--2.0,0.3,0.9
-1.7,0.0,1.425
-1.7,-0.66,1.425
-1.7,-0.66,0.6
-1.7,0.0,0.6
-2.6,0.0,1.425
-2.6,-0.66,1.425
-3.1,-0.66,0.825
-3.1,0.0,0.825
-2.3,0.0,2.1
-2.3,-0.25,2.1
-2.4,-0.25,2.025
-2.4,0.0,2.025
-2.7,0.0,2.4
-2.7,-0.25,2.4
-3.3,-0.25,2.4
-3.3,0.0,2.4
-1.7,0.66,0.6
-1.7,0.66,1.425
-3.1,0.66,0.825
-2.6,0.66,1.425
-2.4,0.25,2.025
-2.3,0.25,2.1
-3.3,0.25,2.4
-2.7,0.25,2.4
-2.8,0.0,2.475
-2.8,-0.25,2.475
-3.525,-0.25,2.49375
-3.525,0.0,2.49375
-2.9,0.0,2.475
-2.9,-0.15,2.475
-3.45,-0.15,2.5125
-3.45,0.0,2.5125
-2.8,0.0,2.4
-2.8,-0.15,2.4
-3.2,-0.15,2.4
-3.2,0.0,2.4
-3.525,0.25,2.49375
-2.8,0.25,2.475
-3.45,0.15,2.5125
-2.9,0.15,2.475
-3.2,0.15,2.4
-2.8,0.15,2.4
-0.0,0.0,3.15
-0.0,-0.002,3.15
-0.002,0.0,3.15
-0.8,0.0,3.15
-0.8,-0.45,3.15
-0.45,-0.8,3.15
-0.0,-0.8,3.15
-0.0,0.0,2.85,0.0,0.0,1.0
-0.2,0.0,2.7
-0.2,-0.112,2.7
-0.112,-0.2,2.7
-0.0,-0.2,2.7
--0.002,0.0,3.15
--0.45,-0.8,3.15
--0.8,-0.45,3.15
--0.8,0.0,3.15
--0.112,-0.2,2.7
--0.2,-0.112,2.7
--0.2,0.0,2.7
-0.0,0.002,3.15
--0.8,0.45,3.15
--0.45,0.8,3.15
-0.0,0.8,3.15
--0.2,0.112,2.7
--0.112,0.2,2.7
-0.0,0.2,2.7
-0.45,0.8,3.15
-0.8,0.45,3.15
-0.112,0.2,2.7
-0.2,0.112,2.7
-0.4,0.0,2.55
-0.4,-0.224,2.55
-0.224,-0.4,2.55
-0.0,-0.4,2.55
-1.3,0.0,2.55
-1.3,-0.728,2.55
-0.728,-1.3,2.55
-0.0,-1.3,2.55
-1.3,0.0,2.4
-1.3,-0.728,2.4
-0.728,-1.3,2.4
-0.0,-1.3,2.4
--0.224,-0.4,2.55
--0.4,-0.224,2.55
--0.4,0.0,2.55
--0.728,-1.3,2.55
--1.3,-0.728,2.55
--1.3,0.0,2.55
--0.728,-1.3,2.4
--1.3,-0.728,2.4
--1.3,0.0,2.4
--0.4,0.224,2.55
--0.224,0.4,2.55
-0.0,0.4,2.55
--1.3,0.728,2.55
--0.728,1.3,2.55
-0.0,1.3,2.55
--1.3,0.728,2.4
--0.728,1.3,2.4
-0.0,1.3,2.4
-0.224,0.4,2.55
-0.4,0.224,2.55
-0.728,1.3,2.55
-1.3,0.728,2.55
-0.728,1.3,2.4
-1.3,0.728,2.4
-0.0,0.0,0.0,0.0,0.0,-1.0
-1.5,0.0,0.15
-1.5,0.84,0.15
-0.84,1.5,0.15
-0.0,1.5,0.15
-1.5,0.0,0.075
-1.5,0.84,0.075
-0.84,1.5,0.075
-0.0,1.5,0.075
-1.425,0.0,0.0
-1.425,0.798,0.0
-0.798,1.425,0.0
-0.0,1.425,0.0
--0.84,1.5,0.15
--1.5,0.84,0.15
--1.5,0.0,0.15
--0.84,1.5,0.075
--1.5,0.84,0.075
--1.5,0.0,0.075
--0.798,1.425,0.0
--1.425,0.798,0.0
--1.425,0.0,0.0
--1.5,-0.84,0.15
--0.84,-1.5,0.15
-0.0,-1.5,0.15
--1.5,-0.84,0.075
--0.84,-1.5,0.075
-0.0,-1.5,0.075
--1.425,-0.798,0.0
--0.798,-1.425,0.0
-0.0,-1.425,0.0
-0.84,-1.5,0.15
-1.5,-0.84,0.15
-0.84,-1.5,0.075
-1.5,-0.84,0.075
-0.798,-1.425,0.0
-1.425,-0.798,0.0
diff --git a/util/qt3d/assetviewer/assetviewer.desktop b/util/qt3d/assetviewer/assetviewer.desktop
deleted file mode 100644
index 1d682515..00000000
--- a/util/qt3d/assetviewer/assetviewer.desktop
+++ /dev/null
@@ -1,7 +0,0 @@
-[Desktop Entry]
-Type=Application
-Name=3D Asset Viewer
-Icon=/usr/share/icons/hicolor/80x80/apps/qtquick3d.png
-Exec=/usr/bin/invoker --type=e -s /usr/bin/modeltweak -fullscreen
-OnlyShowIn=X-MeeGo;
-X-MeeGo-Logical-Id=qtn_comm_appname_assetviewer
diff --git a/util/qt3d/assetviewer/assetviewer.pro b/util/qt3d/assetviewer/assetviewer.pro
deleted file mode 100644
index ee4737d3..00000000
--- a/util/qt3d/assetviewer/assetviewer.pro
+++ /dev/null
@@ -1,25 +0,0 @@
-TEMPLATE = app
-TARGET = assetviewer
-CONFIG += qt warn_on
-
-INSTALL_DIRS = qml
-CONFIG += qt3d_deploy_qml qt3dquick_deploy_pkg
-include(../../../pkg.pri)
-qtcAddDeployment()
-
-SOURCES += main.cpp \
- quickfile.cpp
-
-symbian {
- qmlDeployment2.sources = qml\meshes\*
- qmlDeployment2.path = qml\meshes
- DEPLOYMENT += qmlDeployment2
-}
-
-OTHER_FILES += \
- assetviewer.rc
-
-RC_FILE = assetviewer.rc
-
-HEADERS += \
- quickfile.h
diff --git a/util/qt3d/assetviewer/assetviewer.rc b/util/qt3d/assetviewer/assetviewer.rc
deleted file mode 100644
index 1b6228c9..00000000
--- a/util/qt3d/assetviewer/assetviewer.rc
+++ /dev/null
@@ -1 +0,0 @@
-IDI_ICON1 ICON DISCARDABLE "qtquick3d.ico"
diff --git a/util/qt3d/assetviewer/main.cpp b/util/qt3d/assetviewer/main.cpp
deleted file mode 100644
index 954ed4c6..00000000
--- a/util/qt3d/assetviewer/main.cpp
+++ /dev/null
@@ -1,100 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtQuick3D module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtGui/QApplication>
-#include "qdeclarativeview3d.h"
-#include <QGraphicsObject>
-#include <QDebug>
-#include <QtDeclarative>
-
-#include "../../../demos/quick3d/qmlres.h"
-#include "quickfile.h"
-
-QString filename;
-
-int main(int argc, char *argv[])
-{
- qmlRegisterType<QuickFile>("AssetViewer", 1, 0, "QuickFile");
-
- QApplication app(argc, argv);
- QDeclarativeView3D view;
-
- QString qml = q_get_qmldir(QLatin1String("qml/AssetViewer.qml"));
- view.setSource(QUrl::fromLocalFile(qml));
- view.setWindowTitle(QString("3D Asset Viewer"));
-
- //disable close button
- // view.setWindowFlags(Qt::CustomizeWindowHint | Qt::WindowMaximizeButtonHint | Qt::WindowMinimizeButtonHint);
-
- QString fn;
- QStringList args = QApplication::arguments();
- for (int i = 0; i < args.size(); ++i)
- {
- //FIXME: QML likes files relative to QML directory above, or full paths.
- // We need to sort out how this is implemented once we've worked how how it's going to
- // be called via Qt Creator.
- if (args.at(i).startsWith(QLatin1String("-model")) && (i+1 < args.size()))
- {
- fn = args.at(i+1);
- qDebug() << fn;
- QGraphicsObject *object = view.rootObject();
- object->setProperty("targetMesh", args.at(i+1));
- break;
- }
- }
-
- view.setResizeMode(QDeclarativeView::SizeRootObjectToView);
-
-#ifdef Q_OS_SYMBIAN
- view.setAttribute(Qt::WA_LockLandscapeOrientation, true);
- view.setResizeMode(QDeclarativeView::SizeRootObjectToView);
- view.showFullScreen();
-#else
- if (QApplication::arguments().contains(QLatin1String("-maximize")))
- view.showMaximized();
- else if (QApplication::arguments().contains(QLatin1String("-fullscreen")))
- view.showFullScreen();
- else
- view.show();
-#endif
-
- return app.exec();
-}
diff --git a/util/qt3d/assetviewer/qml/AssetViewer.qml b/util/qt3d/assetviewer/qml/AssetViewer.qml
deleted file mode 100644
index af5b4b96..00000000
--- a/util/qt3d/assetviewer/qml/AssetViewer.qml
+++ /dev/null
@@ -1,292 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtQuick3D examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
-** the names of its contributors may be used to endorse or promote
-** products derived from this software without specific prior written
-** permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 1.0
-import Qt3D 1.0
-import AssetViewer 1.0
-import "fileHandling.js" as FileHandler
-import "Widgets"
-import "ColorUtils.js" as ColorUtils
-
-Rectangle {
- id: outerWindow;
- width: 1024
- height: 768
- property alias modelEffect: customEffect
- property alias modelMaterial: customMaterial
- property bool useCustomEffect: false
- property bool useCustomMaterial: false
-
- property bool changed: false
- Component.onCompleted: {
- outerWindow.changed = false;
- }
-
- Component.onDestruction: {
- if (outerWindow.changed)
- {
- FileHandler.save_qml(true);
- }
- }
-
- Rectangle {
- id: menu
- x: parent.x
- y: parent.y
- height: 24
- anchors.left: parent.left
- anchors.right: parent.right
- anchors.top: parent.top
-
- color: "#B4B4B4"
- border.color: "black"
-
- ButtonBarPane {
- id: buttonBarPane
- anchors.fill: parent
- }
- }
-
- Rectangle {
- id: mainwindow
- anchors.left: parent.left
- anchors.right: parent.right
- anchors.top: menu.bottom
- anchors.bottom: outerWindow.bottom
-
- color: "#444444"
- border.color: "black"
-
- property alias targetMesh: quickFile.filename
-
- QuickFile {
- id: quickFile
- filename: "meshes/penguin.3ds"
- title: "Open 3D Asset File"
- filter: "Asset files (*.*)"
- }
-
- QuickFile {
- id: textureFile
- filename: ""
- title: "Open Texture File"
- filter: "Images (*.gif *.png *.jpg *.tif *.bmp)"
- }
-
- Mesh {
- id: source_mesh
- source: quickFile.filename
- }
-
- Translation3D { id: transformTranslate; translate: Qt.vector3d(0, 0, 0); }
- Rotation3D { id: transformRotateX; axis: Qt.vector3d(1, 0, 0); angle: 0; }
- Rotation3D { id: transformRotateY; axis: Qt.vector3d(0, 1, 0); angle: 0; }
- Rotation3D { id: transformRotateZ; axis: Qt.vector3d(0, 0, 1); angle: 0; }
- Scale3D { id: transformScale; scale: Qt.vector3d(1, 1, 1); }
-
- Effect {
- id: customEffect;
- property alias hsv: hsvColor
- material: useCustomMaterial ? customMaterial : null;
- color: hsv.color
- blending: (hsv.alpha < 1.0)
- || (useCustomMaterial && (hsvAmbColor.alpha*hsvDifColor.alpha*hsvSpecColor.alpha < 1.0))
- texture: textureFile.filename
- }
- Material {
- id: customMaterial
- property alias amb_hsv: hsvAmbColor
- property alias dif_hsv: hsvDifColor
- property alias spec_hsv: hsvSpecColor
- ambientColor: hsvAmbColor.color
- diffuseColor: hsvDifColor.color
- specularColor: hsvSpecColor.color
- textureUrl: textureFile.filename
- }
- HSVColor { id: hsvColor }
- HSVColor { id: hsvAmbColor }
- HSVColor { id: hsvDifColor }
- HSVColor { id: hsvSpecColor }
-
- ModelViewport {
- id: mvpZY
- x: 0;
- y: 0;
- camera.eye: Qt.vector3d(20, 0, 0);
- 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)
- onMouseTranslateY: if (!modelPropertiesPane.translateLocked)position = Qt.vector3d(position.x, translate.y + (down.y - mouse.y)/translateSensitivity, position.z)
- onMouseRotateX: if (!modelPropertiesPane.rotateLocked)transformRotateY.angle = rotate.y - (down.x - mouse.x)/rotateSensitivity
- onMouseRotateY: if (!modelPropertiesPane.rotateLocked)transformRotateZ.angle = rotate.z - (down.y - mouse.y)/rotateSensitivity
- onMouseScaleX: if (!modelPropertiesPane.scaleLocked) {
- var s = scale3d.z - (down.x - mouse.x)/scaleSensitivity;
- transformScale.scale = Qt.vector3d(transformScale.scale.x, transformScale.scale.y, s<0 ? 0 : s)
- }
- onMouseScaleY: if (!modelPropertiesPane.scaleLocked) {
- var s = scale3d.y + (down.y - mouse.y)/scaleSensitivity;
- transformScale.scale = Qt.vector3d(transformScale.scale.x, s<0 ? 0 : s, transformScale.scale.z)
- }
- }
-
- ModelViewport {
- id: mvpXY
- x: parent.width/2
- y: 0;
- camera.eye: Qt.vector3d(0, 0, 20);
- 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)
- onMouseTranslateY: if (!modelPropertiesPane.translateLocked)position = Qt.vector3d(position.x, translate.y + (down.y - mouse.y)/translateSensitivity, position.z)
- onMouseRotateX: if (!modelPropertiesPane.rotateLocked) transformRotateY.angle = rotate.y - (down.x - mouse.x)/rotateSensitivity
- onMouseRotateY: if (!modelPropertiesPane.rotateLocked) transformRotateX.angle = rotate.x - (down.y - mouse.y)/rotateSensitivity
- onMouseScaleX: if (!modelPropertiesPane.scaleLocked) {
- var s = scale3d.x - (down.x - mouse.x)/scaleSensitivity
- transformScale.scale = Qt.vector3d(s<0 ? 0 : s, transformScale.scale.y, transformScale.scale.z)
- }
- onMouseScaleY: if (!modelPropertiesPane.scaleLocked) {
- var s = scale3d.y + (down.y - mouse.y)/scaleSensitivity
- transformScale.scale = Qt.vector3d(transformScale.scale.x, s<0 ? 0 : s, transformScale.scale.z)
- }
- }
-
- ModelViewport {
- id: mvpXZ
- x: parent.width/2;
- y: parent.height/2;
- camera.eye: Qt.vector3d(0, 20, 0);
- camera.upVector: Qt.vector3d(0, 0, -1);
- 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)
- onMouseTranslateY: if (!modelPropertiesPane.translateLocked)position = Qt.vector3d(position.x, position.y, translate.z - (down.y - mouse.y)/translateSensitivity)
- onMouseRotateX: if (!modelPropertiesPane.rotateLocked)transformRotateZ.angle = rotate.z + (down.x - mouse.x)/rotateSensitivity
- onMouseRotateY: if (!modelPropertiesPane.rotateLocked)transformRotateX.angle = rotate.x - (down.y - mouse.y)/rotateSensitivity
- onMouseScaleX: if (!modelPropertiesPane.scaleLocked) {
- var s = scale3d.x - (down.x - mouse.x)/scaleSensitivity;
- transformScale.scale = Qt.vector3d(s<0 ? 0 : s, transformScale.scale.y, transformScale.scale.z)
- }
- onMouseScaleY: if (!modelPropertiesPane.scaleLocked) {
- var s = scale3d.z + (down.y - mouse.y)/scaleSensitivity;
- transformScale.scale = Qt.vector3d(transformScale.scale.x, transformScale.scale.y, s<0 ? 0 : s)
- }
- }
-
- Rectangle {
- id: meshName
- anchors.horizontalCenter: parent.horizontalCenter
- anchors.bottomMargin: 10
- anchors.bottom: parent.bottom
- radius: 10
- border.width: 1
- border.color: "black"
- color: "white"
- width: parent.width - 20
- height: 20
-
- Text {
- anchors.verticalCenter: parent.verticalCenter
- anchors.horizontalCenter: parent.horizontalCenter
- text: "Hold left mouse button to move, middle button to scale, and right button to rotate the asset."
- }
- }
-
- ModelPropertiesPane {
- id: modelPropertiesPane
- x: 16;
- y: parent.height / 2 + 16
- onChanged: {outerWindow.changed=true}
- }
-
- ColorPicker {
- id: colorPicker
- visible: false
- }
-
- HelpOverlay {
- id: helpOverlay
- visible: false
- }
-
- states: [
- State {
- name: "3Views"
- },
- State {
- name: "ZYMaximised"
- PropertyChanges { target: mvpZY; x: 0; y: 0; width: mainwindow.width; height: mainwindow.height; }
- PropertyChanges { target: mvpXY; x: mainwindow.width; y: 0; width: 0; height: mainwindow.height/2; }
- PropertyChanges { target: mvpXZ; x: mainwindow.width; y: mainwindow.height; width: 0; height: 0; }
- },
- State {
- name: "XYMaximised"
- PropertyChanges { target: mvpZY; x: 0; y: 0; width: 0; height: mainwindow.height/2; }
- PropertyChanges { target: mvpXY; x: 0; y: 0; width: mainwindow.width; height: mainwindow.height; }
- PropertyChanges { target: mvpXZ; x: mainwindow.width/2; y: mainwindow.height; width: mainwindow.width/2; height: 0; }
- },
- State {
- name: "XZMaximised"
- PropertyChanges { target: mvpZY; x: 0; y: 0; width: 0; height: 0; }
- PropertyChanges { target: mvpXY; x: mainwindow.width/2; y: 0; width: mainwindow.width/2; height: 0; }
- PropertyChanges { target: mvpXZ; x: 0; y: 0; width: mainwindow.width; height: mainwindow.height; }
- }
- ]
-
- state: "3Views"
- }
-}
diff --git a/util/qt3d/assetviewer/qml/BlenderValueSlider.qml b/util/qt3d/assetviewer/qml/BlenderValueSlider.qml
deleted file mode 100644
index 2f223380..00000000
--- a/util/qt3d/assetviewer/qml/BlenderValueSlider.qml
+++ /dev/null
@@ -1,175 +0,0 @@
-import QtQuick 1.0
-import Qt3D 1.0
-import AssetViewer 1.0
-
-Item {
- id: valueSlider
-
- property string label: "";
- property alias value: textInput.text;
- property double delta: 0.1;
- property double max: 1;
- property double min: -1;
- property bool limitMax: false;
- property bool limitMin: false;
- property bool locked: false
-
- width: rect.width
- height: 20
-
- property int textWidth: 80
-
- signal next
- signal prev
- signal gotFocus
- signal fail
- signal changed
-
- Rectangle {
- id: rect
- radius: 8
- border.width: 1
- border.color: "#191919"
- color: "#B4B4B4"
- width: radius/2 + valueSlider.textWidth + plus.width + minus.width
- height: parent.height
-
-
- Text {
- id: textLabel
- color: "black"
- width: textInput.width
- height: textInput.height
- anchors.horizontalCenter: parent.horizontalCenter
- anchors.verticalCenter: parent.verticalCenter
- horizontalAlignment: Text.AlignHCenter
- verticalAlignment: Text.AlignVCenter
- text: valueSlider.label + " " + textInput.text
- visible: true
- onTextChanged: changed();
- }
-
-
- TextInput {
- id: textInput
- readOnly: valueSlider.locked
- anchors.horizontalCenter: parent.horizontalCenter
- anchors.verticalCenter: parent.verticalCenter
- horizontalAlignment: TextInput.AlignHCenter
- width: valueSlider.textWidth
- validator: DoubleValidator{}
- onAccepted: {
- parent.parent.update(text)
- focus = false
- }
- visible: false
- onFocusChanged: {
- if (focus == false) {
- parent.parent.update(text)
- visible = false
- textLabel.visible = true
- }
- else {
- visible = true
- textLabel.visible = false
- }
- }
-
- Keys.onTabPressed: valueSlider.next()
- Keys.onBacktabPressed: valueSlider.prev()
- }
- Image {
- id: plus
- source: "images/plus.png"
- anchors.left: textInput.right
- anchors.verticalCenter: parent.verticalCenter
- }
- Image {
- id: minus
- source: "images/minus.png"
- anchors.right: textInput.left
- anchors.verticalCenter: parent.verticalCenter
- }
- MouseArea {
- id: mouseArea
- anchors.fill: parent
- onEntered: parent.color = "#999999"
- onExited: parent.color = "#B4B4B4"
- hoverEnabled: true
- onClicked: {
- if (!valueSlider.locked)
- {
- if (mouse.x<width/3)
- decDelta();
- else if (mouse.x>width/3*2)
- incDelta();
- else {
- valueSlider.gotFocus()
- }
- } else {
- valueSlider.fail();
- }
-
- }
- onPressed: parent.color = "#808080"
- onReleased: parent.color = "#999999"
- }
- }
-
- Timer {
- interval: 100;
- running: mouseArea.pressedButtons & Qt.LeftButton && (mouseArea.mouseX > valueSlider.width/3*2)
- repeat: true
- onTriggered: if (!valueSlider.locked) incDelta()
- }
-
- Timer {
- interval: 100;
- running: mouseArea.pressedButtons & Qt.LeftButton && (mouseArea.mouseX < valueSlider.width/3)
- repeat: true
- onTriggered: if (!valueSlider.locked) decDelta()
- }
-
- function updateMe() {
- update(textInput.text)
- }
-
- function incDelta() {
- var t = value*1 + delta;
- if (limitMax)
- update(t>max ? max : t);
- else
- update(t);
-
- }
-
- function decDelta() {
- var t = value*1 - delta;
- if (limitMin)
- update(t<min ? min : t);
- else
- update(t);
- }
-
- onGotFocus: {
- textLabel.visible = false;
- textInput.visible = true;
- textInput.focus = true;
- textInput.selectAll();
- }
-
- onFocusChanged: if (focus) valueSlider.gotFocus()
-
- Keys.onUpPressed: {
- if (!valueSlider.locked) incDelta();
- else valueSlider.fail();
- }
- Keys.onDownPressed: {
- if (!valueSlider.locked) decDelta();
- else valueSlider.fail();
- }
- Keys.onReturnPressed: {
- if (!valueSlider.locked) updateMe();
- else valueSlider.fail();
- }
-}
diff --git a/util/qt3d/assetviewer/qml/ButtonBarPane.qml b/util/qt3d/assetviewer/qml/ButtonBarPane.qml
deleted file mode 100644
index bd85d5c8..00000000
--- a/util/qt3d/assetviewer/qml/ButtonBarPane.qml
+++ /dev/null
@@ -1,51 +0,0 @@
-import QtQuick 1.0
-import Qt3D 1.0
-import AssetViewer 1.0
-import "fileHandling.js" as FileHandler
-import "Widgets"
-
-Flow {
- id: menu
- anchors.left: parent.left
- anchors.leftMargin: 2
- anchors.top: parent.top
- anchors.topMargin: 2
- width: buttonWidth * 4 + spacing * 3
- height: parent.height
- spacing: 5
-
- property double buttonWidth: 105
-
- SaveButton {
- id: save
- width: buttonWidth
- buttonText: "Save QML"
- imageSrc: "images/save.png"
- }
-
- BlenderToggle {
- id: load
- width: buttonWidth
- onClicked:
- {
- if (outerWindow.changed)
- {
- FileHandler.save_qml(true);
- }
- var useEffect = useCustomEffect;
- useCustomEffect = false;
- quickFile.load();
- useCustomEffect = useEffect;
- }
- buttonText: "Load Asset"
- imageSrc: "images/model.png"
- }
-
- BlenderToggle {
- id: help
- width: buttonWidth
- onClicked: helpOverlay.visible = true
- buttonText: "Help!"
- imageSrc: "images/help.png"
- }
-}
diff --git a/util/qt3d/assetviewer/qml/CheckBox.qml b/util/qt3d/assetviewer/qml/CheckBox.qml
deleted file mode 100644
index efadd539..00000000
--- a/util/qt3d/assetviewer/qml/CheckBox.qml
+++ /dev/null
@@ -1,45 +0,0 @@
-import QtQuick 1.0
-
-Item {
- id: checkBox
- height: Math.max (textBox.height, check.height)
- width: textBox.width + check.width
- property alias text: textBox.text
- property bool checked: false
- signal clicked(bool checked)
- property variant color: Qt.rgba(1,1,1,1)
-
- Text {
- id: textBox
- anchors.left: parent.left
- color: checkBox.color
- }
-
- Rectangle {
- id: check
- width: 16
- height: 16
- anchors.right: parent.right
-
- border.color: checkBox.color
- border.width: 1
- color: Qt.rgba(0,0,0,0)
-
- Rectangle {
- anchors.centerIn: parent
-
- border.color: checkBox.color
- border.width: 1
-
- width: parent.width - 6
- height: parent.height - 6
- color: checkBox.color
- opacity: checked
- }
- }
-
- MouseArea {
- anchors.fill: parent
- onClicked: { checked = !checked; checkBox.clicked(checked) }
- }
-}
diff --git a/util/qt3d/assetviewer/qml/ColorPicker.qml b/util/qt3d/assetviewer/qml/ColorPicker.qml
deleted file mode 100644
index 641a6acc..00000000
--- a/util/qt3d/assetviewer/qml/ColorPicker.qml
+++ /dev/null
@@ -1,286 +0,0 @@
-import QtQuick 1.0
-import "Widgets"
-import "ColorUtils.js" as ColorUtils
-
-Rectangle {
- id: picker
- property alias alpha: alphaSlider.value
- property alias hue: hueSlider.value
- property alias sat: colorSelector.sat
- property alias val: colorSelector.val
- property variant colorSelect: Qt.hsla(hsl_hue, hsl_sat, hsl_lum, alpha)
- property HSVColor targetColor
-
- HSVColor { id: oldColor }
-
- property real hsl_hue: hue
- property real hsl_sat: sat*val*((hsl_lum <= 2) ? hsl_lum*2 : 2*(1 - hsl_lum))
- property real hsl_lum: ((2.0 - sat)*val)/2
-
- property int red: rgb[0]
- property int green: rgb[1]
- property int blue: rgb[2]
-
- property variant rgb: ColorUtils.hsvToRgb(hue, sat, val)
-
- onRgbChanged: updateTarget()
- onAlphaChanged: updateTarget()
-
- anchors.fill: parent
- property real bgAlpha: 0.5
- color: Qt.rgba(1,1,1,bgAlpha)
-
- function apply() {
- updateTarget();
- picker.visible = false;
- }
-
- function cancel() {
- resetTarget();
- picker.visible = false;
- }
-
- function setTarget(target) {
- targetColor = target;
- hue = target.hue;
- sat = target.sat;
- val = target.val;
- alpha = target.alpha;
- oldColor.hue = target.hue;
- oldColor.sat = target.sat;
- oldColor.val = target.val;
- oldColor.alpha = target.alpha
- }
-
- function updateTarget() {
- if (targetColor === null || !picker.visible) return;
- targetColor.hue = hue;
- targetColor.sat = sat;
- targetColor.val = val;
- targetColor.alpha = alpha;
- }
-
- function resetTarget() {
- if (targetColor === null) return;
- targetColor.hue = oldColor.hue;
- targetColor.sat = oldColor.sat;
- targetColor.val = oldColor.val;
- targetColor.alpha = oldColor.alpha;
- }
-
- MouseArea {
- anchors.fill: parent
- onClicked: {}
- }
-
- Rectangle {
- width: pickerLayout.implicitWidth+20
- height: 250
- anchors.centerIn: parent
-
- border.width: 2
- border.color: "white"
- color: mainwindow.color
-
- Row {
- id: pickerLayout
- anchors {
- top: parent.top
- horizontalCenter: parent.horizontalCenter
- margins: 10
- }
- height: 200
- spacing: 10
-
- Item {
- id: colorViewer
- width: height
- height: parent.height
- Rectangle {
- anchors.fill: parent
- rotation: -90
- gradient: Gradient {
- GradientStop { position: 0.0; color: Qt.hsla(hueSlider.value, 1.0, 1.0) }
- GradientStop { position: 1.0; color: Qt.hsla(hueSlider.value, 1.0, 0.5) }
- }
- }
- Rectangle {
- anchors.fill: parent
- border.color: "lightgray"
- gradient: Gradient {
- GradientStop { position: 0.0; color: Qt.rgba(0,0,0,0) }
- GradientStop { position: 1.0; color: Qt.rgba(0,0,0,1) }
- }
- }
-
- ColorSelector {
- id: colorSelector
- anchors.fill: parent
- }
- }
-
- Item {
- width: 20
- height: parent.height
- Rectangle {
- anchors.fill: parent
- border.color: "lightgray"
- gradient: Gradient {
- GradientStop { position: 1.0; color: Qt.hsla(1.0, 1.0, 0.5) }
- GradientStop { position: 0.85; color: Qt.hsla(0.85, 1.0, 0.5) }
- GradientStop { position: 0.76; color: Qt.hsla(0.76, 1.0, 0.5) }
- GradientStop { position: 0.5; color: Qt.hsla(0.5, 1.0, 0.5) }
- GradientStop { position: 0.33; color: Qt.hsla(0.33, 1.0, 0.5) }
- GradientStop { position: 0.16; color: Qt.hsla(0.16, 1.0, 0.5) }
- GradientStop { position: 0.0; color: Qt.hsla(0.0, 1.0, 0.5) }
- }
- }
-
- SliderHandle {
- id: hueSlider
- anchors.fill: parent
- }
- }
-
- Item {
- width: 20
- height: parent.height
-
- Checkered {
- anchors.fill: parent
- }
-
- Rectangle {
- anchors.fill: parent
- border.color: "lightgray"
- gradient: Gradient {
- GradientStop {
- position: 0.0;
- color: Qt.hsla(picker.hsl_hue, picker.hsl_sat, picker.hsl_lum)
- }
- GradientStop {
- position: 1.0;
- color: Qt.hsla(picker.hsl_hue, picker.hsl_sat, picker.hsl_lum, 0)
- }
- }
- }
-
- SliderHandle {
- id: alphaSlider
- anchors.fill: parent
- inverted: true
- }
- }
-
- Item {
- width: 60
- height: parent.height
-
- Item {
- id: preview
- width: parent.width; height: 40
- Checkered {
- anchors.fill: parent
- }
- Rectangle {
- anchors.fill: parent
- border.color: "lightgray"
- color: picker.colorSelect
- }
- }
-
- Column {
- anchors.top: preview.bottom
- anchors.topMargin: 5
- spacing: 3
- width: parent.width
-
- InputBox {
- id: redIn
- width: parent.width; height: 20
- label: "R:"
- }
-
- InputBox {
- id: greenIn
- width: parent.width; height: 20
- label: "G:"
- }
-
- InputBox {
- id: blueIn
- width: parent.width; height: 20
- label: "B:"
- }
-
- Binding {
- target: redIn.input; property: "text"
- value: Math.round(rgb[0])
- }
- Binding {
- target: greenIn.input; property: "text"
- value: Math.round(rgb[1])
- }
- Binding {
- target: blueIn.input; property: "text"
- value: Math.round(rgb[2])
- }
-
- Item {
- width: 5; height: 5
- }
-
- InputBox {
- id: hueIn
- width: parent.width; height: 20
- label: "H:"
- }
-
- InputBox {
- id: satIn
- width: parent.width; height: 20
- label: "S:"
- }
-
- InputBox {
- id: valIn
- width: parent.width; height: 20
- label: "V:"
- }
-
- Binding {
- target: hueIn.input; property: "text"
- value: Math.round(picker.hue*100)/100
- }
- Binding {
- target: satIn.input; property: "text"
- value: Math.round(picker.sat*100)/100
- }
- Binding {
- target: valIn.input; property: "text"
- value: Math.round(picker.val*100)/100
- }
- }
- }
- }
-
- Row {
- anchors {
- margins: 5
- top: pickerLayout.bottom
- horizontalCenter: parent.horizontalCenter
- }
- spacing: 10
- BlenderToggle {
- width: 80
- buttonText: "Apply"
- onClicked: picker.apply()
- }
- BlenderToggle {
- width: 80
- buttonText: "Cancel"
- onClicked: picker.cancel()
- }
- }
- }
-}
diff --git a/util/qt3d/assetviewer/qml/ColorUtils.js b/util/qt3d/assetviewer/qml/ColorUtils.js
deleted file mode 100644
index 5addf394..00000000
--- a/util/qt3d/assetviewer/qml/ColorUtils.js
+++ /dev/null
@@ -1,61 +0,0 @@
-.pragma library
-
-function rgbToHsv(r, g, b) {
- r = r/255; g = g/255; b = b/255;
- var max = Math.max(r, g, b), min = Math.min(r, g, b);
- var h, s, v = max;
-
- var d = max - min;
- s = max == 0 ? 0 : d / max;
-
- if (max == min){
- h = 0; // achromatic
- } else {
- switch (max) {
- case r: h = (g - b) / d + (g < b ? 6 : 0); break;
- case g: h = (b - r) / d + 2; break;
- case b: h = (r - g) / d + 4; break;
- }
- h /= 6;
- }
-
- return new Array(h, s, v);
-}
-
-function hsvToRgb(h, s, v) {
- var r, g, b;
-
- var i = Math.floor(h * 6);
- var f = h * 6 - i;
- var p = v * (1 - s);
- var q = v * (1 - f * s);
- var t = v * (1 - (1 - f) * s);
-
- switch (i % 6){
- case 0: r = v; g = t; b = p; break;
- case 1: r = q; g = v; b = p; break;
- case 2: r = p; g = v; b = t; break;
- case 3: r = p; g = q; b = v; break;
- case 4: r = t; g = p; b = v; break;
- case 5: r = v; g = p; b = q; break;
- }
-
- return new Array(r * 255, g * 255, b * 255);
-}
-
-function hsvToHsl(h, s, v) {
- var ss, l;
-
- l = ((2.0 - s)*v);
-
- ss = s*v*((l <= 1) ? l : 2 - l);
-
- l /= 2;
-
- return new Array(h, ss, l);
-}
-
-function hsvToColor(h, s, v, a) {
- var hsl = hsvToHsl(h,s,v);
- return Qt.hsla(hsl[0], hsl[1], hsl[2], a);
-}
diff --git a/util/qt3d/assetviewer/qml/HelpOverlay.qml b/util/qt3d/assetviewer/qml/HelpOverlay.qml
deleted file mode 100644
index 7b233e6f..00000000
--- a/util/qt3d/assetviewer/qml/HelpOverlay.qml
+++ /dev/null
@@ -1,56 +0,0 @@
-import QtQuick 1.0
-import Qt3D 1.0
-import AssetViewer 1.0
-
-Rectangle {
- anchors.fill: parent
- color: "#00000000"
-
- Rectangle {
- id: helpScreen
- width: parent.width/2
- height: parent.height/2
- anchors.horizontalCenter: parent.horizontalCenter
- anchors.verticalCenter: parent.verticalCenter
-
- border.width: 4
- radius: 4
- color: "lightyellow"
-
- Text {
- id: header
- font { pixelSize: 32; italic: true }
- text: "3D Asset Viewer Help"
- anchors.top: parent.top
- anchors.topMargin: 16
- anchors.horizontalCenter: parent.horizontalCenter
- }
- Text {
- anchors.top: header.bottom
- anchors.topMargin: 16
- anchors.left: parent.left
- anchors.leftMargin: 16
- anchors.right: parent.right
- anchors.rightMargin: 16
- textFormat: Text.RichText
- wrapMode: Text.WordWrap
- text: "Altering model parameters with the mouse:" +
- "<ul><li>Clicking on one of the panes with the <b>Left Mouse Button</b> and dragging will translate the position.</li>" +
- "<li>Clicking on one of the panes with the <b>Right Mouse Button</b> and dragging will rotate the position.</li>" +
- "<li>Clicking on one of the panes with the <b>Middle Mouse Button</b> and dragging will resize the model."
- }
-
- Text {
- anchors.bottom: parent.bottom
- anchors.bottomMargin: 16
- anchors.horizontalCenter: parent.horizontalCenter
- text: "[ Click to Close ]"
- }
- }
- MouseArea {
- anchors.fill: parent
- acceptedButtons: Qt.LeftButton | Qt.RightButton | Qt.MiddleButton
- onClicked: parent.visible = false
- }
-}
-
diff --git a/util/qt3d/assetviewer/qml/ModelPropertiesPane.qml b/util/qt3d/assetviewer/qml/ModelPropertiesPane.qml
deleted file mode 100644
index 384a8b6e..00000000
--- a/util/qt3d/assetviewer/qml/ModelPropertiesPane.qml
+++ /dev/null
@@ -1,543 +0,0 @@
-import QtQuick 1.0
-import Qt3D 1.0
-import AssetViewer 1.0
-import "Widgets"
-import "ColorUtils.js" as ColorUtils
-
-Row {
- id: properties
- spacing: 30
- property alias rotateLocked: imageR.isLocked
- property alias scaleLocked: imageS.isLocked
- property alias translateLocked: imageP.isLocked;
-
- signal changed;
- Column {
- width: posX.width
- height: parent.height
- spacing: 4
-
- // POSITION
- Item {
- id: positionPanel
- width: parent.width
- height: imageP.height
-
- Text {
- anchors.left: parent.left
- anchors.leftMargin: 8
- text: "Position";
- color: "#FFFFFF";
- font.bold: true;
- }
- Image {
- id: imageP
- anchors.right: parent.right
- anchors.rightMargin: 8
-
- //Animation to pulse the lock icon if attempting to modify while locked.
- property bool bounce: false
-
- SequentialAnimation on scale{
- running: imageP.bounce
- NumberAnimation { to : 2.0; duration: 150; easing.type: "OutQuad" }
- NumberAnimation { to : 1.0; duration: 150; easing.type: "OutQuad" }
- NumberAnimation { to : 2.0; duration: 150; easing.type: "OutQuad" }
- NumberAnimation { to : 1.0; duration: 150; easing.type: "OutQuad" }
- onCompleted: imageP.bounce = false
- }
-
- //Manage locked/unlocked state
- state: "UNLOCKED"
- property bool isLocked: false
-
- states: [
- State {
- name: "UNLOCKED"
- PropertyChanges { target: imageP; source: "images/unlock.png"}
- PropertyChanges { target: imageP; isLocked: false;}
- },
- State {
- name: "LOCKED"
- PropertyChanges { target: imageP; source: "images/lock.png"}
- PropertyChanges { target: imageP; isLocked: true;}
- }
- ]
-
- MouseArea {
- anchors.fill: parent
- onDoubleClicked: {
- if (parent.state=="LOCKED")
- parent.state="UNLOCKED"
- else
- parent.state="LOCKED"
- }
- }
- }
- }
- BlenderValueSlider {
- focus: true
- id: posX
- label: "X:"
- locked: imageP.isLocked
- value: transformTranslate.translate.x.toFixed(3)
- function update (f) {
- transformTranslate.translate = Qt.vector3d(f, transformTranslate.translate.y, transformTranslate.translate.z);
- }
- onNext: { updateMe(); focus = false; posY.focus = true; }
- onPrev: { updateMe(); focus = false; scaleZ.focus = true; }
- onFail: { imageP.bounce=true; }
- onChanged: { properties.changed(); }
- }
- BlenderValueSlider {
- id: posY
- label: "Y:"
- locked: imageP.isLocked
- value: transformTranslate.translate.y.toFixed(3)
- function update (f) {
- transformTranslate.translate = Qt.vector3d(transformTranslate.translate.x, f, transformTranslate.translate.z);
- }
- onNext: { updateMe(); focus = false; posZ.focus = true; }
- onPrev: { updateMe(); focus = false; posX.focus = true; }
- onFail: { imageP.bounce=true; }
- onChanged: { properties.changed(); }
- }
- BlenderValueSlider {
- id: posZ
- label: "Z:"
- locked: imageP.isLocked
- value: transformTranslate.translate.z.toFixed(3)
- function update (f) {
- transformTranslate.translate = Qt.vector3d(transformTranslate.translate.x, transformTranslate.translate.y, f);
- }
- onNext: { updateMe(); focus = false; rotX.focus = true; }
- onPrev: { updateMe(); focus = false; posY.focus = true; }
- onFail: { imageP.bounce=true; }
- onChanged: { properties.changed(); }
- }
-
- // ROTATE
- Item {
- id: rotationPanel
- width: parent.width
- height: imageR.height
- property bool dirty: false
- Text {
- anchors.left: parent.left
- anchors.leftMargin: 8
- text: "Rotation";
- color: "#FFFFFF"
- font.bold: true
- }
-
- Image {
- id: imageR
- anchors.right: parent.right
- anchors.rightMargin: 8
-
- //Animation to pulse the lock icon if attempting to modify while locked.
- property bool bounce: false
-
- SequentialAnimation on scale{
- running: imageR.bounce
- NumberAnimation { to : 2.0; duration: 150; easing.type: "OutQuad" }
- NumberAnimation { to : 1.0; duration: 150; easing.type: "OutQuad" }
- NumberAnimation { to : 2.0; duration: 150; easing.type: "OutQuad" }
- NumberAnimation { to : 1.0; duration: 150; easing.type: "OutQuad" }
- onCompleted: imageR.bounce = false
- }
-
- //Manage locked/unlocked state
- state: "UNLOCKED"
- property bool isLocked: false
-
- states: [
- State {
- name: "UNLOCKED"
- PropertyChanges { target: imageR; source: "images/unlock.png"}
- PropertyChanges { target: imageR; isLocked: false;}
- },
- State {
- name: "LOCKED"
- PropertyChanges { target: imageR; source: "images/lock.png"}
- PropertyChanges { target: imageR; isLocked: true;}
- }
- ]
-
- MouseArea {
- anchors.fill: parent
- onDoubleClicked: {
- if (parent.state=="LOCKED")
- parent.state="UNLOCKED"
- else
- parent.state="LOCKED"
- }
- }
- }
- }
- BlenderValueSlider {
- id: rotX
- label: "X:"
- delta: 1
- locked: imageR.isLocked
- min: 0; limitMin: true
- max: 360; limitMax: true
- value: transformRotateX.angle.toFixed(3)
- function update (f) { transformRotateX.angle = f }
- onNext: { updateMe(); focus = false; rotY.focus = true; }
- onPrev: { updateMe(); focus = false; posZ.focus = true; }
- onFail: { imageR.bounce=true; }
- onChanged: { properties.changed(); }
- }
- BlenderValueSlider {
- id: rotY
- label: "Y:"
- delta: 1
- locked: imageR.isLocked
- min: 0; limitMin: true
- max: 360; limitMax: true
- value: transformRotateY.angle.toFixed(3)
- function update (f) { transformRotateY.angle = f }
- onNext: { updateMe(); focus = false; rotZ.focus = true; }
- onPrev: { updateMe(); focus = false; rotX.focus = true; }
- onFail: { imageR.bounce=true; }
- onChanged: { properties.changed(); }
- }
- BlenderValueSlider {
- id: rotZ
- label: "Z:"
- delta: 1
- locked: imageR.isLocked
- min: 0; limitMin: true
- max: 360; limitMax: true
- value: transformRotateZ.angle.toFixed(3)
- function update (f) { transformRotateZ.angle = f }
- onNext: { updateMe(); focus = false; scaleX.focus = true; }
- onPrev: { updateMe(); focus = false; rotY.focus = true; }
- onFail: { imageR.bounce=true; }
- onChanged: { properties.changed(); }
- }
-
- // SCALE
- Item {
- id: scalePanel
- width: parent.width
- height: imageS.height
- property bool dirty: false
-
- Item {
- width: parent.width
- height: scaleText.height
- Text {
- id: scaleText
- anchors.left: parent.left
- anchors.leftMargin: 8
- text: "Scale";
- color: "#FFFFFF"
- font.bold: true
- }
- }
-
- Image {
- id: imageS
- anchors.right: parent.right
- anchors.rightMargin: 8
-
- //Animation to pulse the lock icon if attempting to modify while locked.
- property bool bounce: false
-
- SequentialAnimation on scale{
- running: imageS.bounce
- NumberAnimation { to : 2.0; duration: 150; easing.type: "OutQuad" }
- NumberAnimation { to : 1.0; duration: 150; easing.type: "OutQuad" }
- NumberAnimation { to : 2.0; duration: 150; easing.type: "OutQuad" }
- NumberAnimation { to : 1.0; duration: 150; easing.type: "OutQuad" }
- onCompleted: imageS.bounce = false
- }
-
- //Manage locked/unlocked state
- state: "UNLOCKED"
- property bool isLocked: false
-
- states: [
- State {
- name: "UNLOCKED"
- PropertyChanges { target: imageS; source: "images/unlock.png"}
- PropertyChanges { target: imageS; isLocked: false;}
- },
- State {
- name: "LOCKED"
- PropertyChanges { target: imageS; source: "images/lock.png"}
- PropertyChanges { target: imageS; isLocked: true;}
- }
- ]
-
- MouseArea {
- anchors.fill: parent
- onDoubleClicked: {
- if (parent.state=="LOCKED")
- parent.state="UNLOCKED"
- else
- parent.state="LOCKED"
- }
- }
- }
- }
- BlenderValueSlider {
- id: scaleX
- label: "X:"
- locked: imageS.isLocked
- min: 0; limitMin: true
- value: transformScale.scale.x.toFixed(3)
- function update (f) { transformScale.scale = Qt.vector3d(f, transformScale.scale.y, transformScale.scale.z); }
- onNext: { updateMe(); focus = false; scaleY.focus = true; }
- onPrev: { updateMe(); focus = false; rotZ.focus = true; }
- onFail: { imageS.bounce=true; }
- onChanged: { properties.changed(); }
- }
- BlenderValueSlider {
- id: scaleY
- label: "Y:"
- locked: imageS.isLocked
- min: 0; limitMin: true
- value: transformScale.scale.y.toFixed(3)
- function update (f) { transformScale.scale = Qt.vector3d(transformScale.scale.x, f, transformScale.scale.z); }
- onNext: { updateMe(); focus = false; scaleZ.focus = true; }
- onPrev: { updateMe(); focus = false; scaleX.focus = true; }
- onFail: { imageS.bounce=true; }
- onChanged: { properties.changed(); }
- }
- BlenderValueSlider {
- id: scaleZ
- label: "Z:"
- locked: imageS.isLocked
- min: 0; limitMin: true
- value: transformScale.scale.z.toFixed(3)
- function update (f) { transformScale.scale = Qt.vector3d(transformScale.scale.x, transformScale.scale.y, f); }
- onNext: { updateMe(); focus = false; posX.focus = true; }
- onPrev: { updateMe(); focus = false; scaleY.focus = true; }
- onFail: { imageS.bounce=true; }
- onChanged: { properties.changed(); }
- }
- }
-
- // Material, Effect
- Column {
- width: 150
- spacing: 5
- Item {
- id: effectPanel
- width: parent.width
- height: imageS.height
- property bool dirty: false
-
- Item {
- width: parent.width
- height: effectText.height
- Text {
- id: effectText
- anchors.left: parent.left
- anchors.leftMargin: 8
- text: "Effect";
- color: "#FFFFFF"
- font.bold: true
- }
- }
- }
-
-
- CheckBox {
- id: fromMesh
- width: parent.width
- text: "From Mesh"
- checked: true
- onClicked: {
- useCustomEffect = !checked;
- if (checked) {
- // A horrible hack to reload the default mesh material
- // TODO: Find a better way of doing this (i.e. no runtime errors)
- source_mesh.source = "";
- source_mesh.source = targetMesh;
- }
- }
- }
-
- Column {
- enabled: !fromMesh.checked
- opacity: enabled ? 1.0: 0.5
- width: parent.width; spacing: 5
-
- move: Transition {
- NumberAnimation {
- properties: "y"
- easing.type: Easing.InOutQuad;
- duration: 150
- }
- }
-
- Behavior on opacity {
- NumberAnimation { easing.type: Easing.InOutQuad; duration: 100 }
- }
-
- CheckBox {
- width: parent.width
- text: "Decal"
- checked: false
- onClicked: {
- modelEffect.decal = checked
- }
- }
-
- Item {
- width: parent.width
- height: colorText.height
- Text {
- id: colorText
- anchors.left: parent.left
- anchors.leftMargin: 8
- text: "- Color";
- color: "#FFFFFF"
- font.bold: true
- }
- }
-
- CheckBox {
- id: simpleColor
- width: parent.width
- text: "Simple"
- checked: true
- onClicked: {
- useCustomMaterial = !checked;
- }
- }
-
- ColorWidget {
- id: flat
- visible: opacity != 0
- opacity: simpleColor.checked
- width: parent.width; height: 16
- targetColor: modelEffect.hsv
- text: "Flat Color"
- Behavior on opacity {
- NumberAnimation { easing.type: Easing.InOutQuad; duration: 100 }
- }
- }
-
- ColorWidget {
- id: ambient
- visible: opacity != 0
- opacity: !flat.visible
- width: parent.width; height: 16
- targetColor: modelMaterial.amb_hsv
- text: "Ambient Color"
- Behavior on opacity {
- NumberAnimation { easing.type: Easing.InOutQuad; duration: 100 }
- }
- }
-
- ColorWidget {
- id: diffuse
- visible: opacity != 0
- opacity: !flat.visible
- width: parent.width; height: 16
- targetColor: modelMaterial.dif_hsv
- text: "Diffuse Color"
- Behavior on opacity {
- NumberAnimation { easing.type: Easing.InOutQuad; duration: 100 }
- }
- }
-
- ColorWidget {
- id: specular
- visible: opacity != 0
- opacity: !flat.visible
- width: parent.width; height: 16
- targetColor: modelMaterial.spec_hsv
- text: "Specular Color"
- Behavior on opacity {
- NumberAnimation { easing.type: Easing.InOutQuad; duration: 100 }
- }
- }
-
- Item { width: parent.width; height: 5 }
-
- Item {
- visible: opacity != 0
- opacity: !flat.visible
- height: shineText.height + shinyValue.height + 5
- width: parent.width
-
- Behavior on opacity {
- NumberAnimation { easing.type: Easing.InOutQuad; duration: 100 }
- }
-
- Text {
- id: shineText
- text: "Shininess:"
- color: "white"
- }
- InputBox {
- anchors.right: parent.right
- width: parent.width - shineText.width - 5
- height: shineText.height
- input.text: modelMaterial.shininess
- }
- Rectangle {
- width: parent.width - 8; height: 1
- anchors.centerIn: shinyValue
- color: "gray"
- }
-
- SliderHandle {
- id: shinyValue
- width: parent.width; height: 10
- anchors { top: shineText.bottom; topMargin: 5 }
- horizontal: true
- onValueChanged: {
- modelMaterial.shininess = Math.round(value * 128)
- }
- }
- }
-
- Item { width: parent.width; height: 5 }
-
- Item {
- width: parent.width
- height: textureText.height
- Text {
- id: textureText
- anchors.left: parent.left
- anchors.leftMargin: 8
- text: "- Texture";
- color: "#FFFFFF"
- font.bold: true
- }
- }
-
- Item {
- width: parent.width
- height: texturePreview.height
- Image {
- id: texturePreview
- width: 60; height: width
- source: textureFile.filename
- }
- Rectangle {
- anchors.fill: texturePreview
- border.color: "white"
- border.width: 1
- color: "transparent"
- }
-
- BlenderToggle {
- width: 60; height: 20
- anchors.right: parent.right
- buttonText: "Open..."
- onClicked: {
- textureFile.load();
- }
- }
- }
- }
- }
-}
diff --git a/util/qt3d/assetviewer/qml/ModelViewport.qml b/util/qt3d/assetviewer/qml/ModelViewport.qml
deleted file mode 100644
index 541c147a..00000000
--- a/util/qt3d/assetviewer/qml/ModelViewport.qml
+++ /dev/null
@@ -1,452 +0,0 @@
-import QtQuick 1.0
-import Qt3D 1.0
-import Qt3D.Shapes 1.0
-import AssetViewer 1.0
-import "Widgets"
-
-Rectangle {
- id: view
- width: parent.width/2;
- height: parent.height/2
-
- color: parent.color
- border.color: parent.border.color
-
- property alias itemPosition: mainItem.position;
- property alias itemScale: mainItem.scale;
- property alias camera: viewport.camera
- property alias viewportName: viewportText.text;
-
- // the current x/y positions of the mouse when the onPressed event was triggered;
- // values are invalid if onRelease has occured
- property variant down;
-
- // current xyz values of the Translation3D/Rotation3Ds/Scale3D when onPressed was triggered;
- // values are invalid if onRelease has occured
- property variant translate;
- property variant rotate;
- property variant scale3d;
-
- // the pixel sensitivity values of the mousemovements
- // TODO: expose via api
- // TODO: maybe save in settings api?
- property double translateSensitivity: 32;
- property double rotateSensitivity: 8;
- property double scaleSensitivity: 32;
-
- // the name of this viewport's state
- 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
- Behavior on x { NumberAnimation { duration: 300 } }
- Behavior on y { NumberAnimation { duration: 300 } }
- Behavior on width { NumberAnimation { duration: 300 } }
- Behavior on height { NumberAnimation { duration: 300 } }
-
- signal mouseTranslateX(variant mouse)
- signal mouseTranslateY(variant mouse)
- signal mouseRotateX(variant mouse)
- signal mouseRotateY(variant mouse)
- signal mouseScaleX(variant mouse)
- signal mouseScaleY(variant mouse)
-
- property real cameraZoom: 1.0
-
- Viewport {
- id: viewport
- anchors.fill: parent
- picking: false
- blending: true
-
- // 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
-
- Item3D {
- id: mainItem
- mesh: source_mesh
- transform: [
- transformScale,
- transformRotateX,
- transformRotateY,
- transformRotateZ,
- transformTranslate,
- ]
- effect: useCustomEffect ? modelEffect : null;
- }
-
- 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 {
- property int mouseDown: Qt.NoButton
-
- anchors.fill: parent
- acceptedButtons: Qt.LeftButton | Qt.RightButton | Qt.MiddleButton
-
- onMouseXChanged: {
- if (mouseDown & Qt.LeftButton)
- mouseTranslateX(mouse)
- else if (mouseDown === Qt.RightButton)
- mouseRotateX(mouse);
- else if (mouseDown === Qt.MiddleButton)
- mouseScaleX(mouse)
- }
-
- onMouseYChanged: {
- if (mouseDown & Qt.LeftButton)
- mouseTranslateY(mouse)
- else if (mouseDown === Qt.RightButton)
- mouseRotateY(mouse);
- else if (mouseDown === Qt.MiddleButton)
- mouseScaleY(mouse)
- }
-
- onPressed: {
- // if we already have a mouse button down we don't want to do anything else until it's up again
- if (mouseDown !== Qt.NoButton)
- return;
-
- mouseDown = mouse.button;
- down = Qt.point(mouse.x, mouse.y)
- translate = transformTranslate.translate
- rotate = Qt.vector3d(transformRotateX.angle, transformRotateY.angle, transformRotateZ.angle)
- scale3d = transformScale.scale
- }
-
- // clear the current mouse button upon release
- onReleased: { mouseDown = Qt.NoButton }
- }
-
- ModelViewportResize {
- anchors {
- top: view.top; topMargin: 2;
- right: view.right; rightMargin: 2;
- }
- }
-
- 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 {
- top: view.top; topMargin: 4;
- left: view.left; leftMargin: 4;
- }
- color: "white"
- font.pixelSize: 16
- }
-
- // --------- grid text begin ---------
-
- property bool bTall: view.width<view.height;
- property int minimalDimension: (bTall) ? view.width : view.height;
- property int textStep: minimalDimension/8;
-
- // horizontal
-
- Text {
- id: h_minus100
- text: -1.0*cameraZoom
- x: view.width/2 - 4*textStep - 10
- y: (view.height/2) - 14
- color: "white"
- font.pixelSize: 12
- visible: bTall==false
- }
- Text {
- id: h_minus075
- text: -0.75*cameraZoom
- x: view.width/2 - 3*textStep - 10
- y: (view.height/2) - 14
- color: "white"
- font.pixelSize: 12
- }
- Text {
- id: h_minus050
- text: -0.5*cameraZoom
- x: view.width/2 - 2*textStep - 10
- y: (view.height/2) - 14
- color: "white"
- font.pixelSize: 12
- }
- Text {
- id: h_minus025
- text: -0.25*cameraZoom
- x: view.width/2 - textStep - 10
- 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: view.width/2 + textStep - 5
- y: (view.height/2) - 14
- color: "white"
- font.pixelSize: 12
- }
- Text {
- id: h_plus050
- text: 0.5*cameraZoom
- x: view.width/2 + 2*textStep - 5
- y: (view.height/2) - 14
- color: "white"
- font.pixelSize: 12
- }
- Text {
- id: h_plus075
- text: 0.75*cameraZoom
- x: view.width/2 + 3*textStep - 5
- y: (view.height/2) - 14
- color: "white"
- font.pixelSize: 12
- }
- Text {
- id: h_plus100
- text: 1.0*cameraZoom
- x: view.width/2 + 4*textStep
- y: (view.height/2) - 14
- color: "white"
- font.pixelSize: 12
- visible: bTall==false
- }
-
- // vertical
-
- Text {
- id: v_minus075
- text: -0.75*cameraZoom
- x: (view.width/2)
- y: view.height/2 - 3*textStep - 5
- color: "white"
- font.pixelSize: 12
- }
- Text {
- id: v_minus050
- text: -0.5*cameraZoom
- x: (view.width/2)
- y: view.height/2 - 2*textStep - 6
- color: "white"
- font.pixelSize: 12
- }
- Text {
- id: v_minus025
- text: -0.25*cameraZoom
- x: (view.width/2)
- y: view.height/2 - textStep - 7
- color: "white"
- font.pixelSize: 12
- }
- Text {
- id: v_plus025
- text: 0.25*cameraZoom
- x: (view.width/2)
- y: view.height/2 + textStep - 8
- color: "white"
- font.pixelSize: 12
- }
- Text {
- id: v_plus050
- text: 0.5*cameraZoom
- x: (view.width/2)
- y: view.height/2 + 2*textStep - 9
- color: "white"
- font.pixelSize: 12
- }
- Text {
- id: v_plus075
- text: 0.75*cameraZoom
- x: (view.width/2)
- y: view.height/2 + 3*textStep - 10
- color: "white"
- font.pixelSize: 12
- }
-
- // --------- grid text end ---------
-}
diff --git a/util/qt3d/assetviewer/qml/SaveButton.qml b/util/qt3d/assetviewer/qml/SaveButton.qml
deleted file mode 100644
index 7cf788b1..00000000
--- a/util/qt3d/assetviewer/qml/SaveButton.qml
+++ /dev/null
@@ -1,12 +0,0 @@
-import QtQuick 1.0
-import Qt3D 1.0
-import AssetViewer 1.0
-import "Widgets"
-import "fileHandling.js" as FileHandler
-
-
-BlenderToggle {
- onClicked: {
- FileHandler.save_qml(false);
- }
-}
diff --git a/util/qt3d/assetviewer/qml/Widgets/BlenderToggle.qml b/util/qt3d/assetviewer/qml/Widgets/BlenderToggle.qml
deleted file mode 100644
index a9258fc8..00000000
--- a/util/qt3d/assetviewer/qml/Widgets/BlenderToggle.qml
+++ /dev/null
@@ -1,48 +0,0 @@
-import QtQuick 1.0
-import Qt3D 1.0
-import AssetViewer 1.0
-
-Rectangle {
- anchors.topMargin: 15
- anchors.leftMargin: 15
- border.width: 1
- border.color: "#191919"
- radius: 8
- height: 20
- color: "#999999"
-
- property alias buttonText: text.text
- property alias imageSrc: img.source
- property alias textColor: text.color
-
- signal clicked
-
-
- Image {
- id: img
- anchors.left: parent.left
- anchors.leftMargin: 5
- anchors.verticalCenter: parent.verticalCenter
- }
-
- Text {
- id: text
- anchors.fill: parent
- font.pixelSize: 12
- anchors.left: img.left
- anchors.leftMargin: 5
- horizontalAlignment: Text.AlignHCenter
- verticalAlignment: Text.AlignVCenter
- }
-
- MouseArea {
- anchors.fill: parent
- onClicked: parent.clicked()
- onPressed: parent.color = "#646464"
- onReleased: parent.color = "#999999"
- hoverEnabled: true
- onEntered: parent.color = "#BEBEBE"
- onExited: parent.color = "#999999"
- }
-}
-
diff --git a/util/qt3d/assetviewer/qml/Widgets/Checkered.qml b/util/qt3d/assetviewer/qml/Widgets/Checkered.qml
deleted file mode 100644
index 49bf1d82..00000000
--- a/util/qt3d/assetviewer/qml/Widgets/Checkered.qml
+++ /dev/null
@@ -1,27 +0,0 @@
-import QtQuick 1.0
-
-Grid {
- property variant color1: "#FFFFFF"
- property variant color2: "#BBBBBB"
- property variant cellSize: 10
- width: 20
- height: parent.height
- clip: true
-
- rows: height/cellSize
- columns: width/cellSize
- Repeater {
- model: parent.rows * parent.columns
- Rectangle {
- width: cellSize; height: cellSize;
- color: {
- var check;
- if (columns%2) check = index;
- else check = Math.floor(index/columns)%2 + index;
-
- if (check%2) return color1;
- else return color2;
- }
- }
- }
-}
diff --git a/util/qt3d/assetviewer/qml/Widgets/ColorSelector.qml b/util/qt3d/assetviewer/qml/Widgets/ColorSelector.qml
deleted file mode 100644
index a55a743f..00000000
--- a/util/qt3d/assetviewer/qml/Widgets/ColorSelector.qml
+++ /dev/null
@@ -1,72 +0,0 @@
-import QtQuick 1.0
-
-Item {
- id: select
- property real sat: 1.0
- property real val: 1.0
- width: parent.width
- height: parent.height
-
- Binding {
- target: handle; property: "x"
- value: select.sat * select.width
- }
- Binding {
- target: select; property: "sat"
- value: handle.x/width
- }
-
- Binding {
- target: handle; property: "y"
- value: (1.0 - select.val) * select.height
- }
- Binding {
- target: select; property: "val"
- value: 1.0 - handle.y/height
- }
-
- Item {
- id: handle
- width: 20
- height: width
- x: 0.0; y: 0.0
-
- Rectangle {
- x: -width/2
- y: x
- width: parent.width-2
- height: width
- radius: width/2
-
- border.color: "white"
- color: "transparent"
- }
- Rectangle {
- x: -width/2
- y: x
- width: parent.width
- height: width
- radius: width/2
-
- border.width: 2
- border.color: "black"
- color: "transparent"
- }
- }
-
- MouseArea {
- anchors.fill: parent
- function mouseEvent(mouse) {
- if (mouse.buttons & Qt.LeftButton) {
- handle.x = Math.max(0, Math.min(height, mouse.x))
- handle.y = Math.max(0, Math.min(height, mouse.y))
- }
- }
- onPressed: mouseEvent(mouse);
- onPositionChanged: mouseEvent(mouse);
- hoverEnabled: true
- onEntered: handle.opacity = 0.5;
- onExited: { if (!pressed) handle.opacity = 1.0 }
- onReleased: { if (!containsMouse) handle.opacity = 1.0 }
- }
-}
diff --git a/util/qt3d/assetviewer/qml/Widgets/ColorWidget.qml b/util/qt3d/assetviewer/qml/Widgets/ColorWidget.qml
deleted file mode 100644
index f60ff1b0..00000000
--- a/util/qt3d/assetviewer/qml/Widgets/ColorWidget.qml
+++ /dev/null
@@ -1,37 +0,0 @@
-import QtQuick 1.0
-
-Item {
- id: colorWidget
- width: parent.width; height: 16
-
- property variant targetColor
- property alias text: flatText.text
-
- Rectangle {
- height: 2
- anchors {
- left: parent.left; right: flatSet.right
- bottom: parent.bottom
- rightMargin: flatSet.width/2
- }
- color: colorWidget.targetColor.color
- }
- Text {
- id: flatText
- anchors { top: parent.top; left: parent.left }
- text:"Color"
- color: "white"
- }
- BlenderToggle {
- id: flatSet
- width: 32
- anchors { right: parent.right }
- height: parent.height
- buttonText: "Set"
- radius: 6
- onClicked: {
- colorPicker.setTarget(colorWidget.targetColor);
- colorPicker.visible = true
- }
- }
-}
diff --git a/util/qt3d/assetviewer/qml/Widgets/HSVColor.qml b/util/qt3d/assetviewer/qml/Widgets/HSVColor.qml
deleted file mode 100644
index 9e137428..00000000
--- a/util/qt3d/assetviewer/qml/Widgets/HSVColor.qml
+++ /dev/null
@@ -1,15 +0,0 @@
-import QtQuick 1.0
-import "../ColorUtils.js" as ColorUtils
-
-Item {
- property real hue: 0.0
- property real sat: 0.0
- property real val: 1.0
- property real alpha: 1.0
- property color color: ColorUtils.hsvToColor(hue, sat, val, alpha)
- property int red: rgb[0]
- property int green: rgb[1]
- property int blue: rgb[2]
-
- property variant rgb: ColorUtils.hsvToRgb(hue, sat, val)
-}
diff --git a/util/qt3d/assetviewer/qml/Widgets/InputBox.qml b/util/qt3d/assetviewer/qml/Widgets/InputBox.qml
deleted file mode 100644
index d3d31837..00000000
--- a/util/qt3d/assetviewer/qml/Widgets/InputBox.qml
+++ /dev/null
@@ -1,39 +0,0 @@
-import QtQuick 1.0
-
-Item {
- id: textInput
- width: 60
- height: 20
- property alias label: lbl.text
- property alias input: inputBox
-
-// Binding {
-// target: textInput; property: "value"
-// value: inputBox.text
-// }
-// Binding {
-// target: inputBox; property: "text"
-// value: { var result = textInput.value*100; return Math.round(result)/100 }
-// }
-
- Text {
- id: lbl
- color: "lightgray"
- anchors.left: parent.left
- }
-
- Rectangle {
- border.color: "gray"
- color: "transparent"
- width: 40
- height: inputBox.height
- anchors.right: parent.right
- TextInput {
- id: inputBox
- anchors { fill: parent; leftMargin: 5 }
- color: "white"
- text: { var result = textInput.value*100; return Math.round(result)/100 }
- selectByMouse: true; readOnly: true
- }
- }
-}
diff --git a/util/qt3d/assetviewer/qml/Widgets/ModelViewportResize.qml b/util/qt3d/assetviewer/qml/Widgets/ModelViewportResize.qml
deleted file mode 100644
index 96e8a2d6..00000000
--- a/util/qt3d/assetviewer/qml/Widgets/ModelViewportResize.qml
+++ /dev/null
@@ -1,30 +0,0 @@
-import QtQuick 1.0
-import Qt3D 1.0
-import AssetViewer 1.0
-
-Rectangle {
- radius: 4
- border.width: 1
- border.color: "#191919"
- width: 16 + 2
- height: 16 + 2
- color: "#999999"
-
- Image {
- id: img
- source: mainwindow.state !== "3Views" ? "images/shrink.png" : "images/grow.png"
- x: 2
- y: 2
- MouseArea {
- anchors.fill: parent
- onClicked: {
- if (view.stateName) {
- if (mainwindow.state !== "3Views")
- mainwindow.state = "3Views"
- else
- mainwindow.state = view.stateName
- }
- }
- }
- }
-}
diff --git a/util/qt3d/assetviewer/qml/Widgets/SliderHandle.qml b/util/qt3d/assetviewer/qml/Widgets/SliderHandle.qml
deleted file mode 100644
index 9f72cabc..00000000
--- a/util/qt3d/assetviewer/qml/Widgets/SliderHandle.qml
+++ /dev/null
@@ -1,76 +0,0 @@
-import QtQuick 1.0
-
-Item {
- id: slider
- width: parent.width
- height: parent.height
- property real value: 0.0
- property bool inverted: false
- property bool horizontal: false
-
- signal changed;
-
- Binding {
- target: slider; property: "value"
- value: {
- var res;
- var pos = horizontal ? handle.x : handle.y;
- var delta = horizontal ? width-handle.width : height-handle.height;
- res = pos/delta;
- return inverted ? 1-res : res
- }
- }
- Binding {
- target: handle; property: "y"
- value: {
- var res = inverted ? 1 - slider.value : slider.value
- if (!horizontal) return res*(height-handle.height);
- }
- }
- Binding {
- target: handle; property: "x"
- value: {
- var res = inverted ? 1 - slider.value : slider.value
- if (horizontal) return res*(width-handle.width);
- }
- }
-
- Rectangle {
- id: handle
- width: 8 + (horizontal ? 0 : parent.width)
- height: 8 + (!horizontal ? 0 : parent.height)
- anchors.horizontalCenter: horizontal ? undefined : parent.horizontalCenter
- anchors.verticalCenter: !horizontal ? undefined : parent.verticalCenter
- radius: 2
- Behavior on opacity {
- NumberAnimation { easing.type: Easing.InOutQuad; duration: 80 }
- }
- gradient: Gradient {
- GradientStop { position: 0.0; color: "#FFFFFF" }
- GradientStop { position: 1.0; color: "#FFFFFF" }
- }
- border.width: 1
- border.color: "darkgray"
- onXChanged: slider.changed()
- onYChanged: slider.changed()
- }
-
- MouseArea {
- id: mouseArea
- anchors.fill: parent
- function mouseEvent(mouse) {
- if (mouse.buttons & Qt.LeftButton) {
- if (horizontal)
- handle.x = Math.max(0, Math.min(width-handle.width, mouse.x-handle.width/2))
- else
- handle.y = Math.max(0, Math.min(height-handle.height, mouse.y-handle.height/2));
- }
- }
- onPressed: mouseEvent(mouse);
- onPositionChanged: mouseEvent(mouse);
- hoverEnabled: true
- onEntered: handle.opacity = 0.5;
- onExited: { if (!pressed) handle.opacity = 1.0 }
- onReleased: { if (!containsMouse) handle.opacity = 1.0 }
- }
-}
diff --git a/util/qt3d/assetviewer/qml/Widgets/ZoomControls.qml b/util/qt3d/assetviewer/qml/Widgets/ZoomControls.qml
deleted file mode 100644
index 7ad01ce0..00000000
--- a/util/qt3d/assetviewer/qml/Widgets/ZoomControls.qml
+++ /dev/null
@@ -1,41 +0,0 @@
-import QtQuick 1.0
-import Qt3D 1.0
-import AssetViewer 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/assetviewer/qml/Widgets/images/grow.png b/util/qt3d/assetviewer/qml/Widgets/images/grow.png
deleted file mode 100644
index df154010..00000000
--- a/util/qt3d/assetviewer/qml/Widgets/images/grow.png
+++ /dev/null
Binary files differ
diff --git a/util/qt3d/assetviewer/qml/Widgets/images/shrink.png b/util/qt3d/assetviewer/qml/Widgets/images/shrink.png
deleted file mode 100644
index 285d3a9d..00000000
--- a/util/qt3d/assetviewer/qml/Widgets/images/shrink.png
+++ /dev/null
Binary files differ
diff --git a/util/qt3d/assetviewer/qml/Widgets/images/zoomin.png b/util/qt3d/assetviewer/qml/Widgets/images/zoomin.png
deleted file mode 100644
index e4434a07..00000000
--- a/util/qt3d/assetviewer/qml/Widgets/images/zoomin.png
+++ /dev/null
Binary files differ
diff --git a/util/qt3d/assetviewer/qml/Widgets/images/zoomout.png b/util/qt3d/assetviewer/qml/Widgets/images/zoomout.png
deleted file mode 100644
index 4c853bc6..00000000
--- a/util/qt3d/assetviewer/qml/Widgets/images/zoomout.png
+++ /dev/null
Binary files differ
diff --git a/util/qt3d/assetviewer/qml/fileHandling.js b/util/qt3d/assetviewer/qml/fileHandling.js
deleted file mode 100644
index 6ccfb1a1..00000000
--- a/util/qt3d/assetviewer/qml/fileHandling.js
+++ /dev/null
@@ -1,106 +0,0 @@
-function save_qml(closePrompt) {
-
- var effectData = "";
- if (useCustomEffect) {
- effectData +=
- " effect: Effect {\n" +
- " decal: " + customEffect.decal + "\n" +
- " blending: " + customEffect.blending + "\n";
-
- if (useCustomMaterial) {
- effectData +=
- " material: Material {\n" +
- " ambientColor: \"" + modelMaterial.ambientColor + "\"\n" +
- " diffuseColor: \"" + modelMaterial.diffuseColor + "\"\n" +
- " specularColor: \"" + modelMaterial.specularColor + "\"\n" +
- " shininess: " + modelMaterial.shininess + "\n" +
- " textureUrl: \"" + modelMaterial.textureUrl + "\"\n" +
- " }\n"
- } else {
- effectData +=
- " color: \"" + modelEffect.color + "\"\n" +
- " texture: \"" + modelEffect.texture + "\"\n"
- }
-
- effectData += " }\n"
- }
-
- var saveData =
- "// --------| WARNING |--------!!\n" +
- "// This is a generated file. Modifying the text or layout of \n" +
- "// this file will mean that the 3D Asset Viewer application will no \n" +
- "// longer be able to read it. \n\n" +
- "// Changing numeric values is allowable, though care should be taken\n" +
- "// not to inadvertantly change the file structure.\n\n" +
- "import QtQuick 1.0\n" +
- "import Qt3D 1.0\n" +
- "\n" +
- "Item3D {\n" +
- " property double translateX: 0; \n"+
- " property double translateY: 0; \n"+
- " property double translateZ: 0; \n"+
- " property double rotationX: 0; \n"+
- " property double rotationY: 0; \n"+
- " property double rotationZ: 0; \n"+
- " property double assetScale: 1.0; \n"+
-
- " Translation3D {\n" +
- " id: transformTranslate\n" +
- " translate: Qt.vector3d(" +
- transformTranslate.translate.x + "+translateX, " +
- transformTranslate.translate.y + "+translateY, " +
- transformTranslate.translate.z + "+translateZ)\n" +
- " }\n" +
- "\n" +
- " Rotation3D {\n" +
- " id: transformRotateX\n" +
- " angle: " + transformRotateX.angle + "+rotationX\n" +
- " axis: Qt.vector3d(1, 0, 0)\n" +
- " }\n" +
- "\n" +
- " Rotation3D {\n" +
- " id: transformRotateY\n" +
- " angle: " + transformRotateY.angle + "+rotationY\n" +
- " axis: Qt.vector3d(0, 1, 0)\n" +
- " }\n" +
- "\n" +
- " Rotation3D {\n" +
- " id: transformRotateZ\n" +
- " angle: " + transformRotateZ.angle + "+rotationZ\n" +
- " axis: Qt.vector3d(0, 0, 1)\n" +
- " }\n" +
- "\n" +
- " Scale3D {\n" +
- " id: transformScale\n" +
- " scale: Qt.vector3d(" +
- transformScale.scale.x + "*assetScale, " +
- transformScale.scale.y + "*assetScale, " +
- transformScale.scale.z + "*assetScale)\n" +
- " }\n" +
- "\n" +
- " Mesh {\n" +
- " id: source_mesh\n" +
- " source: \"%1\"\n" +
- " }\n" +
- "\n" +
- " mesh: source_mesh\n" +
- " transform: [\n" +
- " transformScale,\n" +
- " transformRotateX,\n" +
- " transformRotateY,\n" +
- " transformRotateZ,\n" +
- " transformTranslate,\n" +
- " ]\n" +
- effectData +
- "}\n";
-
- quickFile.filename = source_mesh.source
- quickFile.data = saveData
- if (closePrompt)
- var result = quickFile.promptSave()
- else
- result = quickFile.save()
-
- if (result !== "")
- console.log("If there was an error it will be after here:" + result)
-}
diff --git a/util/qt3d/assetviewer/qml/images/help.png b/util/qt3d/assetviewer/qml/images/help.png
deleted file mode 100644
index 452ac525..00000000
--- a/util/qt3d/assetviewer/qml/images/help.png
+++ /dev/null
Binary files differ
diff --git a/util/qt3d/assetviewer/qml/images/lock.png b/util/qt3d/assetviewer/qml/images/lock.png
deleted file mode 100644
index cafd8fc5..00000000
--- a/util/qt3d/assetviewer/qml/images/lock.png
+++ /dev/null
Binary files differ
diff --git a/util/qt3d/assetviewer/qml/images/minus.png b/util/qt3d/assetviewer/qml/images/minus.png
deleted file mode 100644
index a93156ea..00000000
--- a/util/qt3d/assetviewer/qml/images/minus.png
+++ /dev/null
Binary files differ
diff --git a/util/qt3d/assetviewer/qml/images/model.png b/util/qt3d/assetviewer/qml/images/model.png
deleted file mode 100644
index 62054e3c..00000000
--- a/util/qt3d/assetviewer/qml/images/model.png
+++ /dev/null
Binary files differ
diff --git a/util/qt3d/assetviewer/qml/images/open.png b/util/qt3d/assetviewer/qml/images/open.png
deleted file mode 100644
index 5db00d52..00000000
--- a/util/qt3d/assetviewer/qml/images/open.png
+++ /dev/null
Binary files differ
diff --git a/util/qt3d/assetviewer/qml/images/plus.png b/util/qt3d/assetviewer/qml/images/plus.png
deleted file mode 100644
index b1ba3774..00000000
--- a/util/qt3d/assetviewer/qml/images/plus.png
+++ /dev/null
Binary files differ
diff --git a/util/qt3d/assetviewer/qml/images/save.png b/util/qt3d/assetviewer/qml/images/save.png
deleted file mode 100644
index e1db4498..00000000
--- a/util/qt3d/assetviewer/qml/images/save.png
+++ /dev/null
Binary files differ
diff --git a/util/qt3d/assetviewer/qml/images/unlock.png b/util/qt3d/assetviewer/qml/images/unlock.png
deleted file mode 100644
index 80c3f945..00000000
--- a/util/qt3d/assetviewer/qml/images/unlock.png
+++ /dev/null
Binary files differ
diff --git a/util/qt3d/assetviewer/qml/meshes/monkey.3ds b/util/qt3d/assetviewer/qml/meshes/monkey.3ds
deleted file mode 100644
index e9a007b2..00000000
--- a/util/qt3d/assetviewer/qml/meshes/monkey.3ds
+++ /dev/null
Binary files differ
diff --git a/util/qt3d/assetviewer/qml/meshes/penguin.3ds b/util/qt3d/assetviewer/qml/meshes/penguin.3ds
deleted file mode 100644
index 26c09ac0..00000000
--- a/util/qt3d/assetviewer/qml/meshes/penguin.3ds
+++ /dev/null
Binary files differ
diff --git a/util/qt3d/assetviewer/qtquick3d.ico b/util/qt3d/assetviewer/qtquick3d.ico
deleted file mode 100644
index c695ac72..00000000
--- a/util/qt3d/assetviewer/qtquick3d.ico
+++ /dev/null
Binary files differ
diff --git a/util/qt3d/assetviewer/qtquick3d.png b/util/qt3d/assetviewer/qtquick3d.png
deleted file mode 100644
index 8351083e..00000000
--- a/util/qt3d/assetviewer/qtquick3d.png
+++ /dev/null
Binary files differ
diff --git a/util/qt3d/assetviewer/quickfile.cpp b/util/qt3d/assetviewer/quickfile.cpp
deleted file mode 100644
index 3fead170..00000000
--- a/util/qt3d/assetviewer/quickfile.cpp
+++ /dev/null
@@ -1,163 +0,0 @@
-#include "quickfile.h"
-#include <QFileDialog>
-#include <QUrl>
- #include <QMessageBox>
-
-/*!
- \qmlclass QuickFile QuickFile
- \brief QuickFile is a quick-and-dirty file handling object that supports file-io that QML/Javascript doesn't.
- \inherits QObject
-
- The QuickFile element is part of the \c{ModelTweak} namespace,
- so the following must appear at the top of any QML file that
- references it:
-
- \code
- import ModelTweak 1.0
- \endcode
-
- \sa QObject
-*/
-
-/*!
- \internal
-*/
-QuickFile::QuickFile(QObject *parent) :
- QObject(parent)
-{
-}
-
-/*!
- Prompts for a location and filename to save the qml \c{QuickFile::data} generated by ModelTweaker.
- Returns an error message if the file was unsuccessfully saved,
- or an empty string if the save was successful/cancelled.
-*/
-QString QuickFile::save() const
-{
- QString filename = QFileDialog::getSaveFileName(0, tr("Save QML File"), "",tr("Files (*.qml)"));
-
- //If cancel button pressed (ie. filename empty), we can just drop out immediately
- if (filename.isEmpty()) {
- return QString();
- }
-
- // FIXME: ensure fileName is appropriate as a qml Component
- if (!filename.endsWith(".qml"))
- filename.append(".qml");
-
- QDir outputDir = QFileInfo(filename).absoluteDir();
-
- QString modelFilename = QUrl(_filename).toLocalFile();
- QString modelFN = QFileInfo(modelFilename).fileName();
-
- QString dstModelLocation = outputDir.path() + QDir::separator() + modelFN;
- if (dstModelLocation.compare(modelFilename,Qt::CaseInsensitive) != 0) {
- // src and dst model paths are different.
- // Copy model file over.
- qDebug("Attempting to copy:");
- qDebug(" from: %s",modelFilename.toAscii().constData());
- qDebug(" to : %s",dstModelLocation.toAscii().constData());
- QFile dstModelFile(dstModelLocation);
- if (dstModelFile.exists()) {
- if (!dstModelFile.remove()) {
- qDebug(" failed to remove dst file!");
- }
- }
- QFile srcModelFile(modelFilename);
- if (srcModelFile.copy(dstModelLocation)) {
- qDebug(" Model was copied successfully.");
- } else {
- qDebug(" failed to copy model file !");
- }
- }
-
- QFile file(filename);
-
- qDebug("Attempting to write: %s", file.fileName().toAscii().constData());
-
- if (!file.open(QFile::WriteOnly))
- return file.errorString();
-
- QString dataToWrite = _data.arg(modelFN);
-
- file.write(dataToWrite.toUtf8());
-
- file.close();
-
- return QString();
-}
-
-/*!
- Save/Close dialog for unsaved changes to QML files. This is shown if the user
- closes the app without saving the modifications they have made.
-
- Returns an error message if the file was unsuccessfully saved,
- or an empty string if the save was successful/cancelled.
-*/
-QString QuickFile::promptSave() const
-{
- QMessageBox msgBox;
- msgBox.setText("The document has been modified.");
- msgBox.setInformativeText("Do you want to save your changes?");
- msgBox.setStandardButtons(QMessageBox::Save | QMessageBox::Discard);
- msgBox.setDefaultButton(QMessageBox::Save);
- int ret = msgBox.exec();
-
- if (ret==QMessageBox::Save) {
- return save();
- } else {
- return QString();
- }
-}
-
-/*!
- Prompts for a location to load a model file from and stores it into the the \c{QuickFile::filename}
- variable.
-*/
-void QuickFile::load()
-{
- QString qmlFilename = QFileDialog::getOpenFileName(0, _title, "", _filter);
- setFilename(qmlFilename);
-}
-
-
-QString QuickFile::filename() const {
- return _filename;
-}
-
-void QuickFile::setFilename(const QString filename) {
- if (_filename != filename)
- _filename = filename;
- emit filenameChanged(filename);
-}
-
-QString QuickFile::title() const {
- return _title;
-}
-
-void QuickFile::setTitle(const QString title) {
- if (_title != title)
- _title = title;
- emit titleChanged(title);
-}
-
-QString QuickFile::filter() const {
- return _filter;
-}
-
-void QuickFile::setFilter(const QString filter) {
- if (_filter != filter)
- _filter = filter;
- emit filterChanged(filter);
-}
-
-QString QuickFile::data() const {
- return _data;
-}
-
-void QuickFile::setData(const QString data) {
- if (_data != data)
- _data = data;
- emit dataChanged(data);
-}
-
diff --git a/util/qt3d/assetviewer/quickfile.h b/util/qt3d/assetviewer/quickfile.h
deleted file mode 100644
index 1c66c60b..00000000
--- a/util/qt3d/assetviewer/quickfile.h
+++ /dev/null
@@ -1,46 +0,0 @@
-#ifndef QUICKFILE_H
-#define QUICKFILE_H
-
-#include <QObject>
-
-class QuickFile : public QObject
-{
- Q_OBJECT
-
- QString _filename;
- QString _title;
- QString _filter;
- QString _data;
-
- Q_PROPERTY(QString filename READ filename WRITE setFilename NOTIFY filenameChanged)
- Q_PROPERTY(QString title READ title WRITE setTitle NOTIFY titleChanged)
- Q_PROPERTY(QString filter READ filter WRITE setFilter NOTIFY filterChanged)
- Q_PROPERTY(QString data READ data WRITE setData NOTIFY dataChanged)
-
-public:
- explicit QuickFile(QObject *parent = 0);
-
- QString filename() const;
- void setFilename(const QString filename);
-
- QString title() const;
- void setTitle(const QString title);
-
- QString filter() const;
- void setFilter(const QString filter);
-
- QString data() const;
- void setData(const QString data);
-
- Q_INVOKABLE QString save() const;
- Q_INVOKABLE void load();
- Q_INVOKABLE QString promptSave() const;
-
-signals:
- void filenameChanged(const QString newFilename);
- void titleChanged(const QString newTitle);
- void filterChanged(const QString newFilter);
- void dataChanged(const QString newData);
-};
-
-#endif // QUICKFILE_H
diff --git a/util/qt3d/qglinfo/aboutdialog.cpp b/util/qt3d/qglinfo/aboutdialog.cpp
deleted file mode 100644
index 8598cd55..00000000
--- a/util/qt3d/qglinfo/aboutdialog.cpp
+++ /dev/null
@@ -1,72 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtQuick3D module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "aboutdialog.h"
-#include "ui_aboutdialog.h"
-
-AboutDialog::AboutDialog(QWidget *parent) :
- QDialog(parent),
- ui(new Ui::AboutDialog)
-{
- ui->setupUi(this);
-}
-
-AboutDialog::~AboutDialog()
-{
- delete ui;
-}
-
-void AboutDialog::changeEvent(QEvent *e)
-{
- QDialog::changeEvent(e);
- switch (e->type()) {
- case QEvent::LanguageChange:
- ui->retranslateUi(this);
- break;
- default:
- break;
- }
-}
-
-void AboutDialog::on_pushButton_clicked()
-{
- close();
-}
diff --git a/util/qt3d/qglinfo/aboutdialog.h b/util/qt3d/qglinfo/aboutdialog.h
deleted file mode 100644
index fee94a28..00000000
--- a/util/qt3d/qglinfo/aboutdialog.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtQuick3D module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef ABOUTDIALOG_H
-#define ABOUTDIALOG_H
-
-#include <QDialog>
-
-namespace Ui {
- class AboutDialog;
-}
-
-class AboutDialog : public QDialog {
- Q_OBJECT
-public:
- AboutDialog(QWidget *parent = 0);
- ~AboutDialog();
-
-protected:
- void changeEvent(QEvent *e);
-
-private:
- Ui::AboutDialog *ui;
-
-private slots:
- void on_pushButton_clicked();
-};
-
-#endif // ABOUTDIALOG_H
diff --git a/util/qt3d/qglinfo/aboutdialog.ui b/util/qt3d/qglinfo/aboutdialog.ui
deleted file mode 100644
index 7408bc1e..00000000
--- a/util/qt3d/qglinfo/aboutdialog.ui
+++ /dev/null
@@ -1,54 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>AboutDialog</class>
- <widget class="QDialog" name="AboutDialog">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>157</width>
- <height>170</height>
- </rect>
- </property>
- <property name="windowTitle">
- <string>About</string>
- </property>
- <layout class="QVBoxLayout" name="verticalLayout">
- <item>
- <widget class="QLabel" name="label">
- <property name="text">
- <string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
-&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
-p, li { white-space: pre-wrap; }
-&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:20pt;&quot;&gt;QGL Info Tool&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="label_2">
- <property name="text">
- <string/>
- </property>
- <property name="pixmap">
- <pixmap resource="qglinfo.qrc">:/images/teapot</pixmap>
- </property>
- <property name="alignment">
- <set>Qt::AlignCenter</set>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QPushButton" name="pushButton">
- <property name="text">
- <string>Ok</string>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- <resources>
- <include location="qglinfo.qrc"/>
- </resources>
- <connections/>
-</ui>
diff --git a/util/qt3d/qglinfo/fpswidget.cpp b/util/qt3d/qglinfo/fpswidget.cpp
deleted file mode 100644
index 3c9ee1e8..00000000
--- a/util/qt3d/qglinfo/fpswidget.cpp
+++ /dev/null
@@ -1,279 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtQuick3D module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "fpswidget.h"
-
-#include <QtCore/qtimer.h>
-#include <QtCore/qdatetime.h>
-
-static GLfloat materialColor[] = { 0.1f, 0.85f, 0.25f, 1.0f };
-
-// dont drive the updates any faster than every this many millisecondss
-#define MAX_ANIM_FREQUENCY 5
-
-#define QGL_CUBE_SIZE (6 * 6 * (3 + 3))
-static float const cubeVertices[QGL_CUBE_SIZE] = {
- -0.5f, -0.5f, -0.5f, -1.0f, 0.0f, 0.0f,
- -0.5f, -0.5f, 0.5f, -1.0f, 0.0f, 0.0f,
- -0.5f, 0.5f, 0.5f, -1.0f, 0.0f, 0.0f,
- -0.5f, -0.5f, -0.5f, -1.0f, 0.0f, 0.0f,
- -0.5f, 0.5f, 0.5f, -1.0f, 0.0f, 0.0f,
- -0.5f, 0.5f, -0.5f, -1.0f, 0.0f, 0.0f,
-
- -0.5f, 0.5f, -0.5f, 0.0f, 1.0f, 0.0f,
- -0.5f, 0.5f, 0.5f, 0.0f, 1.0f, 0.0f,
- 0.5f, 0.5f, 0.5f, 0.0f, 1.0f, 0.0f,
- -0.5f, 0.5f, -0.5f, 0.0f, 1.0f, 0.0f,
- 0.5f, 0.5f, 0.5f, 0.0f, 1.0f, 0.0f,
- 0.5f, 0.5f, -0.5f, 0.0f, 1.0f, 0.0f,
-
- 0.5f, 0.5f, -0.5f, 1.0f, 0.0f, 0.0f,
- 0.5f, 0.5f, 0.5f, 1.0f, 0.0f, 0.0f,
- 0.5f, -0.5f, 0.5f, 1.0f, 0.0f, 0.0f,
- 0.5f, 0.5f, -0.5f, 1.0f, 0.0f, 0.0f,
- 0.5f, -0.5f, 0.5f, 1.0f, 0.0f, 0.0f,
- 0.5f, -0.5f, -0.5f, 1.0f, 0.0f, 0.0f,
-
- 0.5f, -0.5f, -0.5f, 0.0f, -1.0f, 0.0f,
- 0.5f, -0.5f, 0.5f, 0.0f, -1.0f, 0.0f,
- -0.5f, -0.5f, 0.5f, 0.0f, -1.0f, 0.0f,
- 0.5f, -0.5f, -0.5f, 0.0f, -1.0f, 0.0f,
- -0.5f, -0.5f, 0.5f, 0.0f, -1.0f, 0.0f,
- -0.5f, -0.5f, -0.5f, 0.0f, -1.0f, 0.0f,
-
- 0.5f, -0.5f, 0.5f, 0.0f, 0.0f, 1.0f,
- 0.5f, 0.5f, 0.5f, 0.0f, 0.0f, 1.0f,
- -0.5f, 0.5f, 0.5f, 0.0f, 0.0f, 1.0f,
- 0.5f, -0.5f, 0.5f, 0.0f, 0.0f, 1.0f,
- -0.5f, 0.5f, 0.5f, 0.0f, 0.0f, 1.0f,
- -0.5f, -0.5f, 0.5f, 0.0f, 0.0f, 1.0f,
-
- 0.5f, 0.5f, -0.5f, 0.0f, 0.0f, -1.0f,
- 0.5f, -0.5f, -0.5f, 0.0f, 0.0f, -1.0f,
- -0.5f, -0.5f, -0.5f, 0.0f, 0.0f, -1.0f,
- 0.5f, 0.5f, -0.5f, 0.0f, 0.0f, -1.0f,
- -0.5f, -0.5f, -0.5f, 0.0f, 0.0f, -1.0f,
- -0.5f, 0.5f, -0.5f, 0.0f, 0.0f, -1.0f,
-};
-
-FPSWidget::FPSWidget(QWidget *parent)
- : QGLWidget(parent)
- , time(new QTime())
- , frameTime(new QTime())
- , timer(new QTimer(this))
- , goAwayTimer(new QTimer(this))
- , xrot(0)
- , yrot(0)
- , zrot(0)
- , frameElapsed(0)
- , frameCount(0)
- , totalFrameTime(0)
-{
- setAttribute(Qt::WA_DeleteOnClose);
- setWindowTitle(tr("Generating Frames/Second"));
- time->start();
- frameTime->start();
- connect(timer, SIGNAL(timeout()),
- this, SLOT(animate()));
- timer->start(0); // call the animation as soon as we return to the event loop
- goAwayTimer = new QTimer(this);
- connect(goAwayTimer, SIGNAL(timeout()),
- this, SLOT(close()));
- goAwayTimer->start(30000);
-}
-
-FPSWidget::~FPSWidget()
-{
- delete time;
-}
-
-#if defined(QT_OPENGL_ES_2)
-
-void FPSWidget::setupShaders()
-{
- QGLShader *vshader = new QGLShader(QGLShader::Vertex, this);
- const char *vsrc = {
- "attribute highp vec4 vertex;\n"
- "attribute mediump vec3 normal;\n"
- "uniform mediump mat4 matrix;\n"
- "varying mediump float angle;\n"
- "void main(void)\n"
- "{\n"
- " vec3 toLight = normalize(vec3(0.5, 5.0, 7.0));\n"
- " angle = max(dot(normal, toLight), 0.0);\n"
- " gl_Position = matrix * vertex;\n"
- "}\n"
- };
- vshader->compileSourceCode(vsrc);
-
- QGLShader *fshader = new QGLShader(QGLShader::Fragment, this);
- const char *fsrc = {
- "uniform mediump vec4 material;\n"
- "varying mediump float angle;\n"
- "void main(void)\n"
- "{\n"
- " gl_FragColor = material * 0.2 + material * 0.8 * angle;\n"
- "}\n"
- };
- fshader->compileSourceCode(fsrc);
-
- program.addShader(vshader);
- program.addShader(fshader);
- program.link();
-
- vertexAttr = program.attributeLocation("vertex");
- normalAttr = program.attributeLocation("normal");
- matrixUniform = program.uniformLocation("matrix");
- materialUniform = program.uniformLocation("material");
-
- program.bind();
-}
-
-#endif
-
-#ifndef GL_MULTISAMPLE
-#define GL_MULTISAMPLE 0x809D
-#endif
-
-void FPSWidget::initializeGL()
-{
- glClearColor(0.9f, 0.95f, 0.8f, 1.0f);
- glEnable(GL_DEPTH_TEST);
- glEnable(GL_CULL_FACE);
-#if defined(QT_OPENGL_ES_2)
- setupShaders();
-#else
- glShadeModel(GL_SMOOTH);
- glEnable(GL_LIGHTING);
- glEnable(GL_LIGHT0);
- glEnable(GL_MULTISAMPLE);
- static GLfloat lightPosition[4] = { 0.5, 5.0, 7.0, 1.0 };
- glLightfv(GL_LIGHT0, GL_POSITION, lightPosition);
-#endif
-}
-
-void FPSWidget::resizeGL(int w, int h)
-{
- glViewport(0, 0, w, h);
-#if !defined(QT_OPENGL_ES_2)
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
-#endif
- int side = qMin(w, h);
- qreal ws = (qreal)w / (qreal)side;
- qreal hs = (qreal)h / (qreal)side;
-#if defined(QT_OPENGL_ES_2)
- projection.setToIdentity();
- projection.ortho(-ws, ws, -hs, hs, -10.0f, 10.0f);
-#else
- glOrtho(-ws, ws, -hs, hs, -10.0f, 10.0f);
-#endif
-}
-
-void FPSWidget::paintGL()
-{
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-
-#if !defined(QT_OPENGL_ES_2)
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
-
- glRotatef(xrot, 1.0, 0.0, 0.0);
- glRotatef(yrot, 0.0, 1.0, 0.0);
- glRotatef(zrot, 0.0, 0.0, 1.0);
-
- glVertexPointer(3, GL_FLOAT, 6 * sizeof(GLfloat), cubeVertices);
- glEnableClientState(GL_VERTEX_ARRAY);
- glNormalPointer(GL_FLOAT, 6 * sizeof(GLfloat), cubeVertices);
- glEnableClientState(GL_NORMAL_ARRAY);
-
- glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, materialColor);
- glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, materialColor);
-#else
- modelView.setToIdentity();
- modelView.rotate(xrot, 1.0f, 0.0f, 0.0f);
- modelView.rotate(yrot, 0.0f, 1.0f, 0.0f);
- modelView.rotate(zrot, 0.0f, 0.0f, 1.0f);
- program.setUniformValue(matrixUniform, projection * modelView);
-
- QVector4D mat(materialColor[0], materialColor[1],
- materialColor[2], materialColor[3]);
- program.setUniformValue(materialUniform, mat);
-
- program.setAttributeArray(vertexAttr, cubeVertices, 3, 6 * sizeof(GLfloat));
- program.setAttributeArray(normalAttr, cubeVertices+3, 3, 6 * sizeof(GLfloat));
- program.enableAttributeArray(vertexAttr);
- program.enableAttributeArray(normalAttr);
-#endif
-
- glDrawArrays(GL_TRIANGLES, 0, 36);
-
-#if !defined(QT_OPENGL_ES_2)
- glDisableClientState(GL_VERTEX_ARRAY);
- glDisableClientState(GL_NORMAL_ARRAY);
-#else
- program.disableAttributeArray(vertexAttr);
- program.disableAttributeArray(normalAttr);
-#endif
- QString framesPerSecond = QString::fromLatin1("%1 fps").arg(1000.0f / ((qreal)totalFrameTime / (qreal)frameCount));
-}
-
-void FPSWidget::animate()
-{
- int elapsed = time->restart();
- frameElapsed += elapsed;
- if (frameElapsed > MAX_ANIM_FREQUENCY)
- {
- frameElapsed += elapsed;
- int adv = frameElapsed / 10;
- if (adv > 0)
- {
- frameCount += 1;
- totalFrameTime += frameElapsed;
- emit fps(1000.0f / ((qreal)frameTime->elapsed() / (qreal)frameCount));
- xrot = (xrot + adv) % 360;
- yrot = (xrot + adv) % 360;
- zrot = (xrot + adv) % 360;
- update();
- frameElapsed = 0;
- }
- }
-}
diff --git a/util/qt3d/qglinfo/fpswidget.h b/util/qt3d/qglinfo/fpswidget.h
deleted file mode 100644
index 495de4b9..00000000
--- a/util/qt3d/qglinfo/fpswidget.h
+++ /dev/null
@@ -1,93 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtQuick3D module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef FPSWIDGET_H
-#define FPSWIDGET_H
-
-#include <QGLWidget>
-#if defined(QT_OPENGL_ES_2)
-#include <QtGui/qvector3d.h>
-#include <QtGui/qmatrix4x4.h>
-#include <QtOpenGL/qglshaderprogram.h>
-#endif
-
-class QTime;
-class QTimer;
-
-class FPSWidget : public QGLWidget
-{
- Q_OBJECT
-public:
- FPSWidget(QWidget *parent = 0);
- ~FPSWidget();
- void initializeGL();
- void resizeGL(int, int);
- void paintGL();
-protected:
- void keyPressEvent(QKeyEvent *) { close(); }
- void mousePressEvent(QMouseEvent *) { close(); }
-signals:
- void fps(int);
-private slots:
- void animate();
-private:
- QTime *time;
- QTime *frameTime;
- QTimer *timer;
- QTimer *goAwayTimer;
- int xrot, yrot, zrot;
- int frameElapsed;
- int frameCount;
- int totalFrameTime;
-#if defined(QT_OPENGL_ES_2)
- void setupShaders();
-
- QGLShaderProgram program;
- QMatrix4x4 projection;
- QMatrix4x4 modelView;
- int vertexAttr;
- int normalAttr;
- int matrixUniform;
- int materialUniform;
-#endif
-};
-
-#endif // FPSWIDGET_H
diff --git a/util/qt3d/qglinfo/images/teapot-logo.png b/util/qt3d/qglinfo/images/teapot-logo.png
deleted file mode 100644
index a82c33c1..00000000
--- a/util/qt3d/qglinfo/images/teapot-logo.png
+++ /dev/null
Binary files differ
diff --git a/util/qt3d/qglinfo/main.cpp b/util/qt3d/qglinfo/main.cpp
deleted file mode 100644
index 317676c4..00000000
--- a/util/qt3d/qglinfo/main.cpp
+++ /dev/null
@@ -1,64 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtQuick3D module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QApplication>
-
-#include "qglinfowindow.h"
-
-int main(int argc, char *argv[])
-{
- QApplication app(argc, argv);
-
- // for QSettings
- QCoreApplication::setOrganizationName("Nokia");
- QCoreApplication::setOrganizationDomain("nokia.com");
- QCoreApplication::setApplicationName("qglinfo");
-
- QGLInfoWindow w;
- if (QApplication::arguments().contains(QLatin1String("-maximize")))
- w.showMaximized();
- else if (QApplication::arguments().contains(QLatin1String("-fullscreen")))
- w.showFullScreen();
- else
- w.show();
-
- return app.exec();
-}
diff --git a/util/qt3d/qglinfo/qglinfo.cpp b/util/qt3d/qglinfo/qglinfo.cpp
deleted file mode 100644
index e58d1005..00000000
--- a/util/qt3d/qglinfo/qglinfo.cpp
+++ /dev/null
@@ -1,344 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtQuick3D module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qglinfo.h"
-
-#include <QtOpenGL/qgl.h>
-#include <QtOpenGL/qglpixelbuffer.h>
-#include <QtOpenGL/qglframebufferobject.h>
-#include <QtOpenGL/qglshaderprogram.h>
-
-#include <QtCore/qtimer.h>
-#include <QtCore/qdatetime.h>
-
-#include <QtCore/qsettings.h>
-
-#if !defined(QT_NO_EGL) && defined(QT_BUILD_INTERNAL)
-#include <QtGui/private/qegl_p.h>
-#include <QtGui/private/qeglproperties_p.h>
-#endif
-
-QGLInfo::QGLInfo(QObject *parent)
- : QObject(parent)
-{
- QTimer::singleShot(0, this, SLOT(initialize()));
-}
-
-static QString nice(const QString &s)
-{
- QString r(s);
- r.replace(QLatin1String("\n"), QLatin1String("<br>\n"));
- r.replace(QLatin1String("true"), QLatin1String("<span style=\"color: green\">true</span>"));
- r.replace(QLatin1String("false"), QLatin1String("<span style=\"color: red\">false</span>"));
- return r;
-}
-
-void QGLInfo::initialize()
-{
- QWidget *win = qobject_cast<QGLWidget *>(parent());
- // We need some kind of GL context to do the querying.
- QGLWidget *glWidget = new QGLWidget(win);
- glWidget->makeCurrent();
- m_qtGLVersionInfo = reportQtGLVersionInfo();
- m_qtGLFeatures = reportQtGLFeatures();
- m_glVersionInfo = reportGLVersionInfo();
- m_glExtensionInfo = reportGLExtensionInfo();
- m_eglVersionInfo = reportEGLVersionInfo();
- m_eglExtensionInfo = reportEGLExtensionInfo();
- m_eglConfigInfo = reportEGLConfigInfo();
- glWidget->doneCurrent();
- delete glWidget;
-
- QString welcome;
- {
- QSettings freshStart;
- if (!freshStart.contains(QLatin1String("new_install")))
- {
- welcome = QLatin1String("<h1>Welcome to QtQuick 3D!</h1>"
- "<p>Try running the FPS test from the "
- "View menu above to confirm that Qt3Quick 3D "
- "is installed correctly.</p><hr>");
- }
- freshStart.setValue(QLatin1String("new_install"), true);
- }
-
- QString html = tr("<h1>Qt GL Info Report</h1>"
- "<p>Generated at: %1</p>"
- "<h2>Qt GL Version Info</h2>"
- "<p>%2</p>"
- "<h2>Qt GL Features</h2>"
- "<p>%3</p>"
- "<h2>GL Version Info</h2>"
- "<p>%4</p>"
- "<h2>GL Extension Info</h2>"
- "<p>%5</p>")
- .arg(QDateTime::currentDateTime().toString())
- .arg(nice(m_qtGLVersionInfo))
- .arg(nice(m_qtGLFeatures))
- .arg(nice(m_glVersionInfo))
- .arg(nice(m_glExtensionInfo));
- if (!welcome.isEmpty())
- html.prepend(welcome);
-
-#if !defined(QT_NO_EGL)
- html += tr("<h2>EGL Version Info</h2>"
- "<p>%1</p>"
- "<h2>EGL Extension Info</h2>"
- "<p>%2</p>"
- "<h2>EGL Configurations</h2>"
- "<p>%3</p>")
- .arg(nice(m_eglVersionInfo))
- .arg(nice(m_eglExtensionInfo))
- .arg(nice(m_eglConfigInfo));
-#endif
- emit reportHtml(html);
-}
-
-QString QGLInfo::report() const
-{
- QString report;
- report += m_qtGLVersionInfo;
- report += QLatin1Char('\n');
- report += m_qtGLFeatures;
- report += m_glVersionInfo;
- report += tr("OpenGL extensions:\n");
- report += m_glExtensionInfo;
-#if !defined(QT_NO_EGL)
- report += m_eglVersionInfo;
- report += tr("EGL extensions:\n");
- report += m_eglExtensionInfo;
- report += tr("EGL configurations:\n");
- report += m_eglConfigInfo;
-#endif
- return report;
-}
-
-QString QGLInfo::reportQtGLVersionInfo() const
-{
- // Dump what Qt thinks the version is.
- QGLFormat::OpenGLVersionFlags flags = QGLFormat::openGLVersionFlags();
- QByteArray version;
- if ((flags & QGLFormat::OpenGL_Version_1_1) != 0)
- version += "1.1 ";
- if ((flags & QGLFormat::OpenGL_Version_1_2) != 0)
- version += "1.2 ";
- if ((flags & QGLFormat::OpenGL_Version_1_3) != 0)
- version += "1.3 ";
- if ((flags & QGLFormat::OpenGL_Version_1_4) != 0)
- version += "1.4 ";
- if ((flags & QGLFormat::OpenGL_Version_1_5) != 0)
- version += "1.5 ";
- if ((flags & QGLFormat::OpenGL_Version_2_0) != 0)
- version += "2.0 ";
- if ((flags & QGLFormat::OpenGL_Version_2_1) != 0)
- version += "2.1 ";
- if ((flags & QGLFormat::OpenGL_Version_3_0) != 0)
- version += "3.0 ";
- if ((flags & QGLFormat::OpenGL_Version_3_1) != 0)
- version += "3.1 ";
- if ((flags & QGLFormat::OpenGL_Version_3_2) != 0)
- version += "3.2 ";
- if ((flags & QGLFormat::OpenGL_Version_3_3) != 0)
- version += "3.3 ";
- if ((flags & QGLFormat::OpenGL_Version_4_0) != 0)
- version += "4.0 ";
- if ((flags & QGLFormat::OpenGL_ES_Common_Version_1_0) != 0)
- version += "ES/1.0 ";
- if ((flags & QGLFormat::OpenGL_ES_CommonLite_Version_1_0) != 0)
- version += "ES/1.0CL ";
- if ((flags & QGLFormat::OpenGL_ES_Common_Version_1_1) != 0)
- version += "ES/1.1 ";
- if ((flags & QGLFormat::OpenGL_ES_CommonLite_Version_1_1) != 0)
- version += "ES/1.1CL ";
- if ((flags & QGLFormat::OpenGL_ES_Version_2_0) != 0)
- version += "ES/2.0 ";
- flags &= ~(QGLFormat::OpenGL_Version_1_1 |
- QGLFormat::OpenGL_Version_1_2 |
- QGLFormat::OpenGL_Version_1_3 |
- QGLFormat::OpenGL_Version_1_4 |
- QGLFormat::OpenGL_Version_1_5 |
- QGLFormat::OpenGL_Version_2_0 |
- QGLFormat::OpenGL_Version_2_1 |
- QGLFormat::OpenGL_Version_3_0 |
- QGLFormat::OpenGL_Version_3_1 |
- QGLFormat::OpenGL_Version_3_2 |
- QGLFormat::OpenGL_Version_3_3 |
- QGLFormat::OpenGL_Version_4_0 |
- QGLFormat::OpenGL_ES_Common_Version_1_0 |
- QGLFormat::OpenGL_ES_CommonLite_Version_1_0 |
- QGLFormat::OpenGL_ES_Common_Version_1_1 |
- QGLFormat::OpenGL_ES_CommonLite_Version_1_1 |
- QGLFormat::OpenGL_ES_Version_2_0);
- if (flags != 0)
- version += "Other=0x" + QByteArray::number(int(flags), 16);
- return QLatin1String("QGLFormat::openGLVersionFlags: ") +
- QString::fromLatin1(version.constData());
-}
-
-static QString printBool(const char *text, bool value)
-{
- return QLatin1String(text) + (value ? QLatin1String("true\n") : QLatin1String("false\n"));
-}
-
-QString QGLInfo::reportQtGLFeatures() const
-{
- QString d;
- d += printBool("QGLFormat::hasOpenGL: ", QGLFormat::hasOpenGL());
- d += printBool("QGLFormat::hasOpenGLOverlays: ", QGLFormat::hasOpenGLOverlays());
- d += printBool("QGLPixelBuffer::hasOpenGLPbuffers: ", QGLPixelBuffer::hasOpenGLPbuffers());
- d += printBool("QGLFramebufferObject::hasOpenGLFramebufferObjects: ",
- QGLFramebufferObject::hasOpenGLFramebufferObjects());
- d += printBool("QGLFramebufferObject::hasOpenGLFramebufferBlit: ",
- QGLFramebufferObject::hasOpenGLFramebufferBlit());
- d += printBool("QGLShaderProgram::hasOpenGLShaderPrograms: ",
- QGLShaderProgram::hasOpenGLShaderPrograms());
- return d;
-}
-
-QString QGLInfo::reportGLVersionInfo() const
-{
- QString d;
- d += QLatin1String("OpenGL vendor string: ");
- d += QLatin1String(reinterpret_cast<const char *>(glGetString(GL_VENDOR)));
- d += QLatin1String("\n");
- d += QLatin1String("OpenGL renderer string: ");
- d += QLatin1String(reinterpret_cast<const char *>(glGetString(GL_RENDERER)));
- d += QLatin1String("\n");
- d += QLatin1String("OpenGL version string: ");
- d += QLatin1String(reinterpret_cast<const char *>(glGetString(GL_VERSION)));
- d += QLatin1String("\n");
- return d;
-}
-
-QString QGLInfo::reportGLExtensionInfo() const
-{
- QByteArray extString
- (reinterpret_cast<const char *>(glGetString(GL_EXTENSIONS)));
- return formatExtensions(extString);
-}
-
-QString QGLInfo::formatExtensions(const QByteArray& extString) const
-{
- QString d;
- QList<QByteArray> extns = extString.split(' ');
- qSort(extns);
- QByteArray line;
- foreach (QByteArray extn, extns) {
- if (extn.isEmpty())
- continue;
- if (!line.isEmpty() && (line.size() + extn.size() + 1) > 70) {
- d += QLatin1String(" ") +
- QString::fromLatin1(line.constData()) +
- QLatin1String("\n");
- line = QByteArray();
- }
- line += extn;
- line += char(' ');
- }
- if (!line.isEmpty()) {
- d += QLatin1String(" ") +
- QString::fromLatin1(line.constData()) +
- QLatin1String("\n");
- }
- return d;
-}
-
-QString QGLInfo::reportEGLVersionInfo() const
-{
-#if !defined(QT_NO_EGL) && defined(QT_BUILD_INTERNAL)
- QString d;
- EGLDisplay dpy = eglGetCurrentDisplay();
- d += "EGL vendor string: ";
- d += reinterpret_cast<const char *>(eglQueryString(dpy, EGL_VENDOR));
- d += "\n";
- d += "EGL version string: ";
- d += reinterpret_cast<const char *>(eglQueryString(dpy, EGL_VERSION));
- d += "\n";
-#ifdef EGL_CLIENT_APIS
- d += "EGL client API's: ";
- d += reinterpret_cast<const char *>(eglQueryString(dpy, EGL_CLIENT_APIS));
- d += "\n";
-#endif
- return d;
-#else
- return QString();
-#endif
-}
-
-QString QGLInfo::reportEGLExtensionInfo() const
-{
-#if !defined(QT_NO_EGL) && defined(QT_BUILD_INTERNAL)
- EGLDisplay dpy = eglGetCurrentDisplay();
- QByteArray extString
- (reinterpret_cast<const char *>(eglQueryString(dpy, EGL_EXTENSIONS)));
- return formatExtensions(extString);
-#else
- return QString();
-#endif
-}
-
-QString QGLInfo::reportEGLConfigInfo() const
-{
-#if !defined(QT_NO_EGL) && defined(QT_BUILD_INTERNAL)
- QString d;
- QEglProperties props;
- EGLint count = 0;
- EGLDisplay dpy = eglGetCurrentDisplay();
- EGLContext ctx = eglGetCurrentContext();
- EGLint cfgnum = 0;
- if (eglQueryContext(dpy, ctx, EGL_CONFIG_ID, &cfgnum)) {
- d += QLatin1String("Window configuration in use: ") + QString::number(cfgnum) +
- QLatin1String("\n\n");
- }
- if (!eglGetConfigs(dpy, 0, 0, &count) || count < 1)
- return d;
- EGLConfig *configs = new EGLConfig [count];
- eglGetConfigs(dpy, configs, count, &count);
- for (EGLint index = 0; index < count; ++index) {
- props = QEglProperties(configs[index]);
- d += props.toString() + QLatin1String("\n\n");
- }
- delete [] configs;
- return d;
-#else
- return QString();
-#endif
-}
diff --git a/util/qt3d/qglinfo/qglinfo.h b/util/qt3d/qglinfo/qglinfo.h
deleted file mode 100644
index 53aa47dc..00000000
--- a/util/qt3d/qglinfo/qglinfo.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtQuick3D module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QGLINFO_H
-#define QGLINFO_H
-
-#include <QtCore/qstring.h>
-#include <QtCore/qobject.h>
-#include <QtCore/qbytearray.h>
-
-class QGLInfo : public QObject
-{
- Q_OBJECT
-public:
- QGLInfo(QObject *parent = 0);
- QString report() const;
-signals:
- void reportHtml(const QString &);
-private slots:
- void initialize();
-private:
- QString reportQtGLVersionInfo() const;
- QString reportQtGLFeatures() const;
- QString reportGLVersionInfo() const;
- QString reportGLExtensionInfo() const;
- QString reportEGLVersionInfo() const;
- QString reportEGLExtensionInfo() const;
- QString reportEGLConfigInfo() const;
- QString formatExtensions(const QByteArray& extString) const;
-
- QString m_qtGLVersionInfo;
- QString m_qtGLFeatures;
- QString m_glVersionInfo;
- QString m_glExtensionInfo;
- QString m_eglVersionInfo;
- QString m_eglExtensionInfo;
- QString m_eglConfigInfo;
-};
-
-#endif // QGLINFO_H
diff --git a/util/qt3d/qglinfo/qglinfo.pro b/util/qt3d/qglinfo/qglinfo.pro
deleted file mode 100644
index a2b6a140..00000000
--- a/util/qt3d/qglinfo/qglinfo.pro
+++ /dev/null
@@ -1,25 +0,0 @@
-TARGET = qglinfo
-
-CONFIG += qt3d_deploy_pkg
-include(../../../pkg.pri)
-
-SOURCES += main.cpp \
- qglinfowindow.cpp \
- qglinfo.cpp \
- aboutdialog.cpp \
- fpswidget.cpp
-
-FORMS += qglinfowindow.ui \
- aboutdialog.ui
-HEADERS += qglinfowindow.h \
- qglinfo.h \
- aboutdialog.h \
- fpswidget.h
-RESOURCES += qglinfo.qrc
-
-!contains(QT_CONFIG, egl):DEFINES += QT_NO_EGL
-
-OTHER_FILES += \
- qglinfo.rc
-
-RC_FILE = qglinfo.rc
diff --git a/util/qt3d/qglinfo/qglinfo.qrc b/util/qt3d/qglinfo/qglinfo.qrc
deleted file mode 100644
index 1406cc27..00000000
--- a/util/qt3d/qglinfo/qglinfo.qrc
+++ /dev/null
@@ -1,5 +0,0 @@
-<RCC>
- <qresource prefix="/images">
- <file alias="teapot">images/teapot-logo.png</file>
- </qresource>
-</RCC>
diff --git a/util/qt3d/qglinfo/qglinfo.rc b/util/qt3d/qglinfo/qglinfo.rc
deleted file mode 100644
index 1b6228c9..00000000
--- a/util/qt3d/qglinfo/qglinfo.rc
+++ /dev/null
@@ -1 +0,0 @@
-IDI_ICON1 ICON DISCARDABLE "qtquick3d.ico"
diff --git a/util/qt3d/qglinfo/qglinfowindow.cpp b/util/qt3d/qglinfo/qglinfowindow.cpp
deleted file mode 100644
index ba189ba6..00000000
--- a/util/qt3d/qglinfo/qglinfowindow.cpp
+++ /dev/null
@@ -1,162 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtQuick3D module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qglinfowindow.h"
-#include "qglinfo.h"
-#include "ui_qglinfowindow.h"
-#include "aboutdialog.h"
-#include "fpswidget.h"
-
-#include <QtOpenGL/qgl.h>
-#include <QtGui/qfiledialog.h>
-#include <QtGui/qfont.h>
-#include <QtCore/qdir.h>
-#include <QtCore/qfile.h>
-#include <QtCore/QTextStream>
-
-QGLInfoWindow::QGLInfoWindow(QWidget *parent) :
- QMainWindow(parent),
- ui(new Ui::QGLInfoWindow)
-{
- ui->setupUi(this);
- setStatusBar(0);
- if (QApplication::arguments().contains(QLatin1String("-maximize")) ||
- QApplication::arguments().contains(QLatin1String("-fullscreen")))
- {
- ui->verticalLayout->setMargin(1);
- ui->verticalLayout->setContentsMargins(1, 1, 1, 1);
- ui->verticalLayout_2->setMargin(1);
- ui->verticalLayout_2->setContentsMargins(1, 1, 1, 1);
- ui->menubar->setVisible(false);
- connect(ui->quitPushButton, SIGNAL(clicked()),
- this, SLOT(on_actionQuit_triggered()));
- connect(ui->runFPSTestPushButton, SIGNAL(clicked()),
- this, SLOT(on_actionRun_FPS_Test_triggered()));
- connect(ui->saveAsPushButton, SIGNAL(clicked()),
- this, SLOT(on_action_Save_As_triggered()));
- QFont f = font();
- f.setPointSize(f.pointSize() * 1.4);
- setFont(f);
- }
- else
- {
- ui->buttonsWidget->setVisible(false);
- }
- info = new QGLInfo();
- connect(info, SIGNAL(reportHtml(QString)),
- ui->textBrowser, SLOT(setHtml(QString)));
- ui->fpsWidget->setVisible(false);
-}
-
-QGLInfoWindow::~QGLInfoWindow()
-{
- delete ui;
- delete info;
-}
-
-void QGLInfoWindow::changeEvent(QEvent *e)
-{
- QMainWindow::changeEvent(e);
- switch (e->type()) {
- case QEvent::LanguageChange:
- ui->retranslateUi(this);
- break;
- default:
- break;
- }
-}
-
-void QGLInfoWindow::on_actionQuit_triggered()
-{
- qApp->quit();
-}
-
-void QGLInfoWindow::on_action_Save_As_triggered()
-{
- QString defName = QDir::home().absoluteFilePath(QLatin1String("qglinfo.txt"));
-
- QString fileName = QFileDialog::getSaveFileName(this, tr("Save File"),
- defName,
- tr("Text (*.txt)"));
- if (!fileName.isEmpty())
- {
- QFile saveFile(fileName);
- saveFile.open(QFile::WriteOnly);
- {
- QTextStream s(&saveFile);
- s << info->report();
- }
- saveFile.close();
- }
-}
-
-void QGLInfoWindow::on_actionAbout_triggered()
-{
- AboutDialog *about = new AboutDialog(this);
- about->exec();
-}
-
-void QGLInfoWindow::on_actionRun_FPS_Test_triggered()
-{
- fps = new FPSWidget(0);
- fps->setGeometry(rect());
- fps->move(this->pos());
- connect(fps, SIGNAL(fps(int)),
- ui->fpsLcdNumber, SLOT(display(int)));
- ui->fpsWidget->setVisible(true);
- fps->show();
-}
-
-void QGLInfoWindow::on_actionCopy_triggered()
-{
- if (ui->textBrowser->textCursor().hasSelection()) {
- ui->textBrowser->copy();
- }
- else {
- ui->textBrowser->selectAll();
- ui->textBrowser->copy();
-
- QTextCursor tc(ui->textBrowser->textCursor());
- tc.clearSelection();
- tc.setPosition(0);
- ui->textBrowser->setTextCursor(tc);
- }
-}
diff --git a/util/qt3d/qglinfo/qglinfowindow.h b/util/qt3d/qglinfo/qglinfowindow.h
deleted file mode 100644
index 84f7d41a..00000000
--- a/util/qt3d/qglinfo/qglinfowindow.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtQuick3D module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QGLINFOWINDOW_H
-#define QGLINFOWINDOW_H
-
-#include <QMainWindow>
-
-namespace Ui {
- class QGLInfoWindow;
-}
-
-class QGLInfo;
-class FPSWidget;
-
-class QGLInfoWindow : public QMainWindow {
- Q_OBJECT
-public:
- QGLInfoWindow(QWidget *parent = 0);
- ~QGLInfoWindow();
-public slots:
- void on_actionQuit_triggered();
- void on_action_Save_As_triggered();
-
-protected:
- void changeEvent(QEvent *e);
-
-private:
- Ui::QGLInfoWindow *ui;
- QGLInfo *info;
- FPSWidget *fps;
-
-private slots:
- void on_actionRun_FPS_Test_triggered();
- void on_actionAbout_triggered();
- void on_actionCopy_triggered();
-};
-
-#endif // QGLINFOWINDOW_H
diff --git a/util/qt3d/qglinfo/qglinfowindow.ui b/util/qt3d/qglinfo/qglinfowindow.ui
deleted file mode 100644
index 67723d35..00000000
--- a/util/qt3d/qglinfo/qglinfowindow.ui
+++ /dev/null
@@ -1,218 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>QGLInfoWindow</class>
- <widget class="QMainWindow" name="QGLInfoWindow">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>555</width>
- <height>584</height>
- </rect>
- </property>
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="windowTitle">
- <string>QGLInfo Window</string>
- </property>
- <widget class="QWidget" name="centralwidget">
- <layout class="QVBoxLayout" name="verticalLayout_2">
- <item>
- <widget class="QScrollArea" name="scrollArea">
- <property name="widgetResizable">
- <bool>true</bool>
- </property>
- <widget class="QWidget" name="scrollAreaWidgetContents">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>527</width>
- <height>420</height>
- </rect>
- </property>
- <layout class="QVBoxLayout" name="verticalLayout">
- <item>
- <widget class="QTextBrowser" name="textBrowser"/>
- </item>
- </layout>
- </widget>
- </widget>
- </item>
- <item>
- <widget class="QWidget" name="fpsWidget" native="true">
- <layout class="QHBoxLayout" name="horizontalLayout">
- <item>
- <widget class="QLabel" name="fpsLabel">
- <property name="text">
- <string>Frames Per Second:</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QLCDNumber" name="fpsLcdNumber">
- <property name="layoutDirection">
- <enum>Qt::RightToLeft</enum>
- </property>
- <property name="frameShape">
- <enum>QFrame::Panel</enum>
- </property>
- <property name="frameShadow">
- <enum>QFrame::Sunken</enum>
- </property>
- <property name="lineWidth">
- <number>1</number>
- </property>
- <property name="midLineWidth">
- <number>3</number>
- </property>
- <property name="segmentStyle">
- <enum>QLCDNumber::Flat</enum>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="horizontalSpacer_2">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>301</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </widget>
- </item>
- <item>
- <widget class="QWidget" name="buttonsWidget" native="true">
- <layout class="QHBoxLayout" name="horizontalLayout_2">
- <item>
- <widget class="QPushButton" name="saveAsPushButton">
- <property name="text">
- <string>Save As</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QPushButton" name="runFPSTestPushButton">
- <property name="text">
- <string> FPS Test</string>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="horizontalSpacer">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>241</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QPushButton" name="quitPushButton">
- <property name="text">
- <string>Quit</string>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </item>
- </layout>
- </widget>
- <widget class="QMenuBar" name="menubar">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>555</width>
- <height>22</height>
- </rect>
- </property>
- <widget class="QMenu" name="menuFile">
- <property name="title">
- <string>File</string>
- </property>
- <addaction name="action_Save_As"/>
- <addaction name="actionQuit"/>
- </widget>
- <widget class="QMenu" name="menuEdit">
- <property name="title">
- <string>Edit</string>
- </property>
- <addaction name="actionCopy"/>
- </widget>
- <widget class="QMenu" name="menuAbout">
- <property name="title">
- <string>Help</string>
- </property>
- <addaction name="actionAbout"/>
- </widget>
- <widget class="QMenu" name="menuView">
- <property name="title">
- <string>View</string>
- </property>
- <addaction name="actionRun_FPS_Test"/>
- </widget>
- <addaction name="menuFile"/>
- <addaction name="menuEdit"/>
- <addaction name="menuView"/>
- <addaction name="menuAbout"/>
- </widget>
- <action name="action_Save_As">
- <property name="text">
- <string>&amp;Save As</string>
- </property>
- <property name="shortcut">
- <string>Ctrl+S</string>
- </property>
- </action>
- <action name="actionQuit">
- <property name="text">
- <string>&amp;Quit</string>
- </property>
- <property name="shortcut">
- <string>Ctrl+Q</string>
- </property>
- </action>
- <action name="actionCopy">
- <property name="text">
- <string>&amp;Copy</string>
- </property>
- <property name="shortcut">
- <string>Ctrl+C</string>
- </property>
- </action>
- <action name="actionAbout">
- <property name="text">
- <string>About</string>
- </property>
- </action>
- <action name="actionRun_FPS_Test">
- <property name="text">
- <string>&amp;Run FPS Test</string>
- </property>
- <property name="shortcut">
- <string>Ctrl+R</string>
- </property>
- </action>
- </widget>
- <resources/>
- <connections/>
-</ui>
diff --git a/util/qt3d/qglinfo/qtquick3d.ico b/util/qt3d/qglinfo/qtquick3d.ico
deleted file mode 100644
index b3b85e37..00000000
--- a/util/qt3d/qglinfo/qtquick3d.ico
+++ /dev/null
Binary files differ
diff --git a/util/qt3d/qt3d.pro b/util/qt3d/qt3d.pro
deleted file mode 100644
index 4539ef6f..00000000
--- a/util/qt3d/qt3d.pro
+++ /dev/null
@@ -1,2 +0,0 @@
-TEMPLATE = subdirs
-SUBDIRS = qglinfo assetviewer
diff --git a/util/qt3d/qt3d.svg b/util/qt3d/qt3d.svg
deleted file mode 100644
index 4b25ec50..00000000
--- a/util/qt3d/qt3d.svg
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0"?>
-<!-- Converted with SVG Converter - Version 0.9.5 (Compiled Mon May 30 09:08:51 2011) - Copyright (C) 2011 Nokia -->
-<svg xmlns="http://www.w3.org/2000/svg" width="287" version="1.1" height="286" xmlns:xlink="http://www.w3.org/1999/xlink" baseProfile="tiny" id="svg2">
- <defs id="defs4">
- <linearGradient id="linearGradient4309">
- <stop offset="0" style="stop-color:#d4f301;stop-opacity:1;" id="stop4311"/>
- <stop offset="1" style="stop-color:#d4f301;stop-opacity:0;" id="stop4313"/>
- </linearGradient>
- <linearGradient gradientTransform="matrix(1.0104795,0,0,1.004441,23.387309,76.758859)" id="linearGradient3730-2" y1="131.35715" y2="156.39526" x1="23.626827" gradientUnits="userSpaceOnUse" x2="303.57144">
- <stop offset="0" style="stop-color:#038d30;stop-opacity:1;" id="stop3726-7"/>
- <stop offset="1" style="stop-color:#038d30;stop-opacity:0;" id="stop3728-1"/>
- </linearGradient>
- <linearGradient id="linearGradient3724-7">
- <stop offset="0" style="stop-color:#038d30;stop-opacity:1;" id="stop3726-7"/>
- <stop offset="1" style="stop-color:#038d30;stop-opacity:0;" id="stop3728-1"/>
- </linearGradient>
- <linearGradient id="linearGradient4315" y1="62.920685" y2="62.920685" x1="72.492188" gradientUnits="userSpaceOnUse" x2="165.83203">
- <stop offset="0" style="stop-color:#d4f301;stop-opacity:1;" id="stop4311"/>
- <stop offset="1" style="stop-color:#d4f301;stop-opacity:0;" id="stop4313"/>
- </linearGradient>
- </defs>
- <metadata id="metadata7"/>
- <g id="layer1" transform="translate(-25.071424,-77.933617)">
- <path style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#d4f301;stroke-width:8.85648727;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" id="path3722" d="M 149.39285,339.37194 C 118.29002,338.06386 93.410274,329.21846 78.267585,314.08502 66.239667,302.06444 58.159936,285.11057 54.818135,264.88047 c -1.962614,-11.881 -2.442596,-20.11519 -2.455216,-42.1199 -0.01051,-18.36712 0.160997,-23.0644 1.239861,-33.95521 2.529982,-25.53941 11.482605,-46.43472 25.677112,-59.93007 16.042727,-15.25252 39.462148,-23.21337 72.203768,-24.54383 6.77105,-0.27512 31.97542,0.38686 41.46813,1.08915 17.85829,1.32123 29.86273,4.01251 41.92069,9.39824 16.71724,7.46685 28.60768,18.52238 36.44553,33.88638 5.7477,11.26691 9.34961,23.29707 11.69339,39.05536 2.22754,14.97664 2.81073,44.00559 1.22086,60.77114 -2.76934,29.20404 -10.704,50.36949 -24.19378,64.53629 -8.65346,9.08774 -21.29946,16.39504 -35.37578,20.44137 -13.11053,3.76868 -25.14568,5.0858 -52.44498,5.73944 -13.81368,0.33078 -17.4242,0.35023 -22.82487,0.12311 l 0,0 z"/>
- <rect width="236.93414" x="49.282932" y="102.78797" rx="95.84404" ry="92.255867" height="239.43414" style="opacity:0;fill:none;stroke:#008000;stroke-width:3.29858350999999980;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" id="rect2852"/>
- <rect width="175" x="28.571428" y="19.214285" rx="95.84404" ry="92.255867" height="206.07143" style="opacity:0;fill:#b94b4b;fill-opacity:1;stroke:#05d105;stroke-width:4.147;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" id="rect3704" transform="translate(25.071424,77.933617)"/>
- <image width="172.71428" x="86.571419" y="214.50505" height="93.14286" xlink:href="data:image/png;base64,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 " id="image3149"/>
- <image width="156.57143" x="89.857132" y="140.67836" height="65.897751" id="image3075" xlink:href="data:image/png;base64,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 "/>
- <rect width="285.97864" x="26.028843" y="78.512794" rx="0" height="284.96848" ry="0" style="fill:#000000;fill-opacity:1;stroke:none;opacity:0" id="rect2995"/>
- </g>
- <g id="layer2"/>
-</svg>
diff --git a/util/qt3d/qtquick3d.svg b/util/qt3d/qtquick3d.svg
deleted file mode 100644
index 3b8a5c7a..00000000
--- a/util/qt3d/qtquick3d.svg
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0"?>
-<!-- Converted with SVG Converter - Version 0.9.5 (Compiled Mon May 30 09:08:51 2011) - Copyright (C) 2011 Nokia -->
-<svg xmlns="http://www.w3.org/2000/svg" width="287" version="1.1" height="286" xmlns:xlink="http://www.w3.org/1999/xlink" baseProfile="tiny" id="svg2">
- <defs id="defs4">
- <linearGradient gradientTransform="matrix(1.0104795,0,0,1.004441,23.387309,76.758859)" id="linearGradient3730-2" y1="131.35715" y2="156.39526" x1="23.626827" gradientUnits="userSpaceOnUse" x2="303.57144">
- <stop offset="0" style="stop-color:#038d30;stop-opacity:1;" id="stop3726-7"/>
- <stop offset="1" style="stop-color:#038d30;stop-opacity:0;" id="stop3728-1"/>
- </linearGradient>
- <linearGradient id="linearGradient3724-7">
- <stop offset="0" style="stop-color:#038d30;stop-opacity:1;" id="stop3726-7"/>
- <stop offset="1" style="stop-color:#038d30;stop-opacity:0;" id="stop3728-1"/>
- </linearGradient>
- </defs>
- <metadata id="metadata7"/>
- <g id="layer1" transform="translate(-25.071424,-77.933617)">
- <path style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#00ffff;stroke-width:8.85648727000000060;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" id="path3722" d="M 149.39285,339.37194 C 118.29002,338.06386 93.410274,329.21846 78.267585,314.08502 66.239667,302.06444 58.159936,285.11057 54.818135,264.88047 c -1.962614,-11.881 -2.442596,-20.11519 -2.455216,-42.1199 -0.01051,-18.36712 0.160997,-23.0644 1.239861,-33.95521 2.529982,-25.53941 11.482605,-46.43472 25.677112,-59.93007 16.042727,-15.25252 39.462148,-23.21337 72.203768,-24.54383 6.77105,-0.27512 31.97542,0.38686 41.46813,1.08915 17.85829,1.32123 29.86273,4.01251 41.92069,9.39824 16.71724,7.46685 28.60768,18.52238 36.44553,33.88638 5.7477,11.26691 9.34961,23.29707 11.69339,39.05536 2.22754,14.97664 2.81073,44.00559 1.22086,60.77114 -2.76934,29.20404 -10.704,50.36949 -24.19378,64.53629 -8.65346,9.08774 -21.29946,16.39504 -35.37578,20.44137 -13.11053,3.76868 -25.14568,5.0858 -52.44498,5.73944 -13.81368,0.33078 -17.4242,0.35023 -22.82487,0.12311 l 0,0 z"/>
- <rect width="236.93414" x="49.282932" y="102.78797" rx="95.84404" ry="92.255867" height="239.43414" style="opacity:0;fill:none;stroke:#008000;stroke-width:3.29858350999999980;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" id="rect2852"/>
- <rect width="175" x="28.571428" y="19.214285" rx="95.84404" ry="92.255867" height="206.07143" style="opacity:0;fill:#b94b4b;fill-opacity:1;stroke:#05d105;stroke-width:4.147;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" id="rect3704" transform="translate(25.071424,77.933617)"/>
- <image width="191.18274" x="73.931854" y="148.93103" height="144.13199" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAK0AAACDCAYAAAD/CZsFAAAABHNCSVQICAgIfAhkiAAAIABJREFU&#xa;eJzsvXmUXdV5L/jb+0x3qltzqVSTZglJIECI0QYMjTEE45jwVszCcUgcp1fil3ZC2unl9PJb7tXL&#xa;dl4Sk7x46DhJ20mcvNjQL7Ed2wkewIARYIVJDJoQmkpIVarxzveeYe/+Yw9nn3NvSaUBnO7w2YXu&#xa;PfecPX77+37fsPchADjeprfp/0NEf9YNeJveprMl+2fdgNMRIUR/5vxthfA2Cfp3LWkVoxJCEgz8&#xa;Nv3Hpn93kra7uxvr1q3DwMAABgYGYFkWbNtGFEWYnZ1FqVRCqVTC3r17EUXRz7q5b9PPgP5dMO3Y&#xa;2BjGxsZwzTXXYGhoCFu3btVMSymFZVngnGNmZgblchmlUgkvvPAC9uzZg/3792Pfvn1vw4f/QETw&#xa;M/QeZLNZbNu2DR/4wAewefNmXH311chkMshkMvoexYyUUjDG9PVWq4V9+/Zhz5492LNnD772ta+h&#xa;XC6jXC6/5f14m9564j+rv76+Pv6xj32MT05OcsYYZ4zxKIp4FEVt3znnPAxD/ad+bzabvFwu86uv&#xa;vpqPjY39zPry9t9b+vfWVkgI4ZlMhheLRT43N8er1SoPw1Azp/mnGFR9Nhk6fQ/nnH/1q1/lq1at&#xa;+lkP6Nt/b/LfW+49cBwH999/P15//XX09vYil8t19AwQQkApBSEEnHNQGjfV9CpQSkEpBecc9957&#xa;L+677z7kcrm3rD9v01tPbzmmffrpp7XhZRpPijnTZDJo+n71u2Jqzjmmp6dx6tQpXH755Ynnz0SE&#xa;EHz4wx/Gr/7qr2J6ehpzc3M4dOgQFhcXceLECUxOTuLYsWOYm5s7574DgOu6GBkZwcjICIaGhlCv&#xa;1zE1NYWpqSmcOnXqvMr+j0Jvqffg6quvxujoKLq6ujQzcc4TDLkUk6WvL3VfPp/H0NAQNmzYgLm5&#xa;uWUzmWVZ6O3txfj4OPr6+lCv17FmzRo0m01UKhU89dRTIIScNdOqxTU6OorR0VHccccd6OrqQldX&#xa;F/L5PIIgQLVaRbVaxbPPPov9+/fj1VdfRRiGZ1XPfyR6S5jWcRzYto1PfvKTGB0dBRAz61K01O+m&#xa;5FWkgg+cc+TzeeRyOdx///34l3/5F3zve9/T0vhMbRwYGMD4+HjHunzfx969e5ffaYOuuOIK3Hvv&#xa;vdi0aRNuv/32JbXHvn378Oqrr+Kv/uqv8NRTT6FWq51Tff9/p7eEabds2YJLL70Ut912WxvTLcW4&#xa;CsMGQYAwDEEpheu6p2V0xQSEEHzwgx9EvV7HM888g9nZ2TO20XVdOI6jv6eZvNFonBM0+MhHPoJ3&#xa;vetdeO9734tCodD2u7k4N2/ejA0bNqCvrw87d+7EZz7zGURR9JYHUbZv3w7f91EqlVCv17GwsLCs&#xa;hf9W0VtiiG3atAl33nknLMtaVkhW3UMIQRRFaDabaLVaietLlaMMs66uLqxcuRJ9fX3LGmwVxEiX&#xa;abaj1WqdXcchmPbGG29EV1dXW5nqs/mvbdu47rrr8Fu/9VtwHAeWZZ11nedLl19+OS6++GKMjY2h&#xa;r6/v310Y/U2TtKqTfX192LZtG+644w5EUaQl6OlU/+HDh3H48GH89m//NmZnZzEzMwPOOa699lrc&#xa;dtttuO2227Bjx46Oq9/Extu3b8cVV1yB/fv3n7G9StIuZQy2Wi1UKpVl9/+6667DddddhyuvvLKt&#xa;nemcCvW7GhMVYPnsZz+Lhx9+GP/6r/+67HovBD3wwAPwPE8HeS6//HJtLP57oTfVp/bVr36VP//8&#xa;823BAtPPqnyvnHO+a9cufscdd5yx3EcffbQt+GCWF4Yh932ff/rTn+bd3d1nLG/16tX8r//6rzsG&#xa;OGZnZ/l/+S//hReLxWX1ua+vj//Zn/2ZLssMipj97eSPNr8zxviXvvQlPjQ09Jb6QZvNJg+CgCta&#xa;v3497+vrO+fy8vk8Hx8f5+vXr+ee53Hbts+rfW8aPMjlcujv78d9992Hbdu2gTHWUYqZEvfHP/4x&#xa;vvSlL+F73/veGcu/55579GclqdIuMcuysGbNGlx//fVnLK+vrw99fX2Ja6q8crmMSqWCarV6xnIA&#xa;4IYbbsD111+fCDub7TLL7kSmOr7mmmtwzTXXLKve8yXHcZDNZuG6bgKWNBqN8/JmbNu2DX/+53+O&#xa;V155BaVSCZ/73OcwODh4zuW9aUzb29uLdevWnRUe+uY3v4l9+/Yt6/5arYannnoKk5OTpzXqBgYG&#xa;sHnz5jOWl81mkc1mE9dUeY1GA0EQLIvRuru7sWrVKqxYsaKjp8O8f3p6GtVqFUEQtPmd1eeenh70&#xa;9vaesf0XghzHQT6f199VW4IgOC9j0LIsjc8tywJj7LwWwZuGabdt24bbbrsNQLt7Kj35J0+exIkT&#xa;J/C3f/u3yzZ2arUaPv/5z+Puu+9OuKlMnAgAa9euxS233II//uM/TjyvjC5KKXzfR09PD7q7uzvW&#xa;deLECVQqlTY3XCcmvu222/COd7wDw8PDievqOd/38dxzz+G5557D3r17kc/ncfHFF+Piiy/G9u3b&#xa;2xh85cqV2LRpEyYmJnDs2LFljc25UldXF1asWNF2/XwlbSaTQS6X09K71Wqh0Wicc3lvCtO6rotL&#xa;L70Ud99995I+SXUtiiI8+uijeOihh846Q+uxxx7D9u3bEUURbLtzV3p7e7F27dq261dddRXWr1+P&#xa;9evXo1KpaGs5HewAgFKpBMdxsHLlSgRBgHq9jiAIEASBvkfdf99992H9+vVtMIBzDsYY/uiP/gg/&#xa;/elP8cwzz2B+fh6A8K5s3LgRX/jCF9Dd3Y1isajLzWQy2LJlC9797nfjK1/5ylmNz9lSp7EihKDV&#xa;ap2XpM3lcjq0roxa3/fPubw3jWn7+/sxMjJyxkgWYwz79+/Hd7/73bOup1arwff906pt27YTqY6K&#xa;duzYgXe/+9249dZbsbi4CNd1kc/nO7q8lAtteHgY9Xpd43OTaRVt3LgRPT09mvlVecrf+vnPfx6N&#xa;RgP1el0/s3//fuzfvx+/93u/h4mJCc206tmBgQFs2rTprMfnbCmbzSZwvdn28/HROo6jfeCMMf13&#xa;rvSmMK2SYMvJF1DQ4FyoXq9jbm4Ok5OTWLt2bcJ9pCjNjOq3DRs2YGhoCJ7nYWhoqK1ss6y77roL&#xa;d911FwBoKRGGIcIwxNe+9jV8/OMf10nrnaQ6ALz66qvYvXt3xwCFatsf/MEf4IMf/CDuvffexO8b&#xa;N25EX18fPvGJT7ypTv5XXnkF+/fvx5NPPgnP81AsFpHJZM47uKEkLSEECwsL5wUNgDeJadesWYM1&#xa;a9YAgE5kAdCRgV988UW8+OKL51QP5xyTk5N4+umnsW7duoR0U5Nr27YeMLN+FXlK50Ck/abmd1We&#xa;GSRRSS47duzAe97zno4LBwB+9KMf4U/+5E+W7AshBDt37sRVV12FZrMJ13W1T7tQKMC2bb3tyGQi&#xa;Fbau1WpoNpvnxdRhGCKKIhw8ePCCLg7VRs45pqamlu2FWYreFO/B+Pg4xsbGtBroNACKaV999VW8&#xa;+uqr51zX3NwcXnvtNQAxboyiSNerLNdCoQDXdfVzmzZtwsDAgH5OPWuqLXUtHQwwIcSxY8dAKcW2&#xa;bdvaJKS67/XXX8fu3btx8uTJjn1Q9ZTLZRw5cgRvvPGGVslKIzmO0+aKIoTg/vvvx9GjR1GtVtFo&#xa;NPDiiy/iwQcfbKujt7cXl19+OW655RZcffXVuOiii7BixYpE6NociwtFlFLk83ntlZienj7vnIoL&#xa;LmkzmQyy2WzbYABJaQaICZ+fnz8v9eP7/mkjVapOx3G0BUwIged5eu/Z+VC9Xkcmk4HnefA8r81l&#xa;BYiJmp6eXnZ5jUajY0KQbdsJKz6Nv5Vk7oQXx8fHce211+Kqq66C7/toNpt44okn8MQTT2htsX79&#xa;emzYsAGDg4NoNps4evQopqencfjw4SXbOzo6ik2bNmm49G//9m8JrG9ZFlzX1YZytVo9LyMMeBOY&#xa;dv369RgdHW3zeSoyB/rpp5/G0aNHz4tpFa5N+0TT37PZrB7MbDaLrq4unYCzHFfWUn2Ym5tDb28v&#xa;urq62pLPlZQ8dOgQXn/99WX1Z25uDvPz8xqCqLbZtg3P8xJMm8/n4XkebNvWWqXZbHbEzZs3b8a7&#xa;3vUu3H333fpaFEV47rnndJ+uuOIKfOADH8C2bdvQbDbx4x//GE899VRHplUQ8J577kkw7eOPP46/&#xa;+Zu/QaVSQaVS0QELz/MAAKdOnUpIWpWTQQhJuNZOa1wvayTPgq6++mpMTEzolZXGsSaD7Nq1C2+8&#xa;8cZ51ReGIZrNZqJ8sz51Te2CAET0K5PJJPIgTjdIp+vD7OwsNm3ahMHBwbbkFkIIyuUyjh07tmxJ&#xa;22lzpmqn67q6r4CQct3d3Yl6FxYWOjLZ2NgYisViYsGZWooQgr6+Pqxdu1bbIwcOHEhAKkVbt27F&#xa;HXfcgTvuuCMRbeSc47rrrgMA/OQnP8GTTz6pF5bqgwqoqMSmj3/84zrvo1qt4tOf/vSS0VNFF5xp&#xa;R0ZGEhlNS0WFCCE4fvz4ee+e5ZwjiqIzMp45ENlsVkuntJRVbTPVvFK3naR4tVrFxMSEDkyk21Aq&#xa;lTA/P79sHNdqtdBqtdoMQRWWNtva29uLbDab6Huz2cTCwkJbucViUcMXdX8YhlpVq/JNWLdUWVu3&#xa;bsWOHTtw/fXXa4GgxjeXy+HWW2/FyZMntRfC9KEreKCy6n7zN39Texd838dnPvOZM0ZELzjTXnLJ&#xa;JRgaGupofQNJ5t23b9+ycl1PR8pIAZKuNNPiJ0QkcSsYUqlU8Id/+If6IJBbbrkFQ0NDba4v9fzU&#xa;1BRc14XnecjlctqKZ4xhZmYG119/PVatWtVx4ezZswczMzPL7o/v+/B9f8m0S/O6WizmwiuVSpic&#xa;nGx71lxYilSgBBDz4rouCoWCLq/RaOgACAAdhv3Sl76EbDar+6rGVbXh4MGDGrL19vYm/OSzs7Oo&#xa;1+sYGxvD6tWrdeojAHz961/v6PtO0wVhWtOqTlvlpuGVntC5uTk0m822Mw3OhhzH0VjSrMdkXMYY&#xa;arWaHpCpqSn8/u//vi7jy1/+Mq644ooE0yqf4tzcHC699FK9+0I5ylW/fN/H1q1bl/T1ni0E6mTI&#xa;LTV+a9asQW9vb4KRl0pWHx0dTcCDxcXFBIaklMLzPG3lM8ZQr9dRKpV0GZs3b8bWrVvR39/f0X2p&#xa;/p2ZmdGLoa+vL8Hg5XIZrVYLN954I+67775E2z/72c8ua4wumKRVGGXVqlUJHJSWtEotqUE5UyLK&#xa;mSiXy+lFkq5T1ccYQ6PRWLKe9evXJyJB6r5SqYSjR4/C9/3TSoCVK1cmJJRZ9+7du88qD1VJM3My&#xa;lepNY71Vq1YlpKdKmO/kTenp6UlIvDQ0S8ODKIpQr9exuLio77n66qvx4Q9/WMMxhVNPnTql57+v&#xa;r09LU0Awreknn5mZQTabxY4dO3DTTTeBMYaDBw/i4MGD2nV5JrpgTGt2wiRTWqjPKmHifLOHAOjI&#xa;zVL+xeVkFJkY12SWer1+RviSzWaRyWQ6Gp6A0CZnEwFSkEWRuQAUJFFkMqL6PQiChEtJ9cdsIyAW&#xa;pGnUKc2h5pBzrl1jykU4NDSE8fHxhPacnp7GAw88oK/9zu/8DprNph7zfD6fwMmlUglDQ0M6xE8I&#xa;wdGjR/HEE08se4wuCNOahoJacaZKM9UH5xz1eh0zMzM6gnM+1NPTg1WrVrVdV3Uq78Lp6unp6dEu&#xa;GdPwmZ+fTwQulnq2WCy2uajUInrjjTfOythUPl+TVFlBECSYdmRkRKt8pcE6SVpCiHbxqe/Hjh1L&#xa;qP5MJpPwpyrtpNo+ODiIdevWYXx8PGEv/Omf/ik+97nPJeqamZnRhufg4GACvpXLZdx8883Yvn07&#xa;OOcol8t49tln8Q//8A/LHqMLJmlVYkp68gC0STC1dUVJ2XNlXEII+vv7sXHjxrbfVJlhGC4p6cz9&#xa;ZIpRzLbOz8+f0b+qnk1DIBOWnE1an5kRpfqoonymMUkp1UaOqjcIgra0PyUB09ogzbRDQ0MoFAra&#xa;FlBSW8G3sbExjI6O6roWFhYwPz+PL3/5y4n2/8Vf/AUGBwe1Adff369DuICAGFdddRVGR0dBCMGD&#xa;Dz6Ip59+GsePH1/2GF0wplWRjzRESDvtTVfL+UpZQggKhQKGhoaWdHlFUYQwDDv+RinVTvtOGwjT&#xa;1nMnMgMU6YXaCYeeiVzX7egbVTDHdL+l2326DKq0MCmVSoncZeUSU+1Ph9+LxWICPy8sLODQoUNt&#xa;WmRxcTGBg3O5XMK7c+WVVyb8+N///vd1rsNy6YJL2rRbxmQmdf1cd7amyXVd9PT0JCRA2lvh+/6S&#xa;CRr5fB7FYjGh3s32Li4u4ujRo6dtQ9pzkXZVpXHomUi1hzGmw8xK0pplZTKZNuNK3ZO2E5Q7y7Zt&#xa;3b7JycmEpFWBCjMUbJaTdgnu3bt3Wemkynug6v3gBz+IXC6Her2Oer2O73znO2ftObqgTGuGbtOW&#xa;tLoGQKu68yUlHYB4cTDGtAtNSZSlGE95HpSKTRuNCnufjpRUXMoQPFttojCyuXOZMaZVtcm0XV1d&#xa;ifyJ020LUlEpNS/pbKvx8XF0d3frvjebTW0LUEqxYsUKzbTKd/3SSy+dsT9pCKP2hj3++ON4/PHH&#xa;z2lHxAWFB47jaEmbxrVAUhp18jScLQ0ODiKfzyfSH9MS7/jx43jmmWc6Pp/P59u2l5gMUC6XzxjJ&#xa;Uup5qSjOUsxsknrWtm309vYmmIcQgmazicXFxUQyttpmbvZbGX1mfdlsVm91MTXQwsJCwnug3Haq&#xa;rFqtppk6l8uht7c34darVCrLwqHd3d0Jw1Lh/IcffhgPPPDAGZ/vRG/pqYnmAF+IQyjGxsb0BC9F&#xa;5XK5Y4QIEBOa3jRoeh1ardYZIzRnCjmacOVM9ylokMlkEs9Vq1WcPHkywYyd3GLKcW+S53l6jNRC&#xa;SBt1ALR3QUlyczuRiUsVBUGwLFdeOp0SQBvUOVu6YEyrMFBazSoyB9zzPBQKhWVP6FJ0++23Y8OG&#xa;DW0BDLPu48ePY9euXR2f7+vrw/r169ueAUTcXW3nOR2lPQbp/qQx/ulo9erVGB4eRjabTUz05OQk&#xa;nnrqqUQfFWObbVA41RwHte9LtUNBjTSDDw8PI5/P62er1arezKk0mjlGrVZrWa68QqGQMPA453Ac&#xa;B319fRgZGVnWuKTpgjGtimObid+K0uoxl8thcHBQbys+F8Z1XRd33HEHNmzY0LEuzjmq1SomJydx&#xa;6NChjmX09fUlnjf/VXmtZ6I0hkwbhAoynY4UFr/yyisTE6nKOnbsGHbu3Jl4RuUcmHV3YtrBwUFs&#xa;3rxZt0d5U9LBhYGBAe2aUmOnoJHKilOkBNRy8gSUBFf8wTmH53nYvHkzbrnlljM+34kuGKZVKud0&#xa;/ln1WSVmqKTmc4mKua6LiYmJ0x6zVKlUsLi4mJgck0x4kF5YKj/0THS6pGyF3Ze7KNesWYOenp62&#xa;65VKpS1/wTyfQFEneKCOPlWkFkh6h62KCioy4UFaxZ+tC8+yLA0nFL4dGBjARRddtOxyTLpgkrbV&#xa;aqFUKiX8iOnJUkzc1dWlUxhN1XE2dNNNN51WUlNKceLEiSWTVSilGBgYwMaNG3VbVTmUUrRarSWZ&#xa;3aRyuZx4Nm1sqqSW5ZDKFlPEOUetVsORI0fwyiuvJO5VznmzbpWoYo7HyMgIduzYob8reGBqQ9d1&#xa;EzkChBDtkgLQdhDe2WhHBQ9effVVPPjgg3phbdq0Ce973/t0FPVseOCCMK2JlUzJaQ6qOZnq88qV&#xa;K5HP588JkP/Kr/wKgFhydOr0gQMHcODAgY7PU0r10U1pycE5b3OSL0Xz8/M68SfdR0II3vWud2H1&#xa;6tWnLUO1Q8EDE2IsLCxgZmamTYKuXLmyrZzFxUW0Wi2tfRzHwcjICLZu3ZoIdqgghRIimUxG+1MV&#xa;mUxr7rlTbTOz605HKhJXrVYxPT2Nl19+GdPT0ygWixgfH0/kfSyXLqghFoZhYjvFmdw9t956K9at&#xa;W7fsOszzB9773vcmIkRmO1SG0pEjR3DixImOmFLtbjUd7qYxtVymPXXqlI61mzF51e+77rrrjGrw&#xa;hhtuwCc/+UnYtp1oKyEEr732Wsfsp+UcYVosFjEyMqIZXAVbzIw3FVlT4VY1FqbLS6V1muPU3d19&#xa;2sWotKmSyiq6+MQTT+Do0aN6a/873/lOTExMnLYfabogTKvcKGEYYteuXThx4kSbhAXazz34+Z//&#xa;+bPCNYwx3H777fjiF7+oIzxKvajyVT7Bd77zHbz44ouo1WpLhjXVn3rWdAuZhsiZaM+ePZidnW3r&#xa;M2MMl156KS6++OLTHri2fft2fOQjH0kwu1o8S+0vMzGtqm9kZASFQkFrussuuwyXX355AvbUajWc&#xa;OHGizZdrUhAEqFQqWtKqLTLmol69ejVuvPFG/UyhUMDw8DA++tGPJr4r1a/g40MPPYQ9e/bocXrf&#xa;+9531geRXHA/7eTkpHaFpCVPWjKMj4/r5OTl0ODgICYmJrBp06aO5Zrfd+7cuaR/FkBbECRdlloQ&#xa;y6HXXntNZ+p3atPExMSS0uSee+7Btm3bOu5enpubw/T0dEfXkhlQUXT55ZfrM8SGh4exZcsWnZWl&#xa;qNVqaQmq2pk+Ukrlhigj00ygV+O1Zs0a3HzzzVixYgWGh4dx44034td//dd1hFAZ22aZrVYLMzMz&#xa;WFxc1Eb7JZdcguHh4bPy21/w7TaPPPIIVqxYgWuvvbZNyqpVqgZrbGwMt9xyC3bu3IlHHnmkze8I&#xa;9TznKBaL+NSnPoUrrriiTTqbTKK2q3zzm988rR9RSdml3FFjY2MYHx/Hyy+/3GYopL0d3/nud9Hd&#xa;3Y0rr7yyzSDjXCSJfOhDH8L4xAR+9KMf6d0P7//5n8f999+P/v7+tgOdCSH41re+hV27di3LH8o5&#xa;x5133onBwUFcdNFFWLt2LXbs2KEXi2pPpVJNnOjDOU9IWhWBq1Qq0uVHdEZXo9HQbrENGzZgzZo1&#xa;+NSnPgVCCC655BJcfPHF+MQnPgEA+iR2RQoenDp1CocPH8apU6cwOjqKK6+8Ejt37sTg4OCyk+Uv&#xa;ONPu2rULV111Fer1ets7BswJVYy2fft2/NpHPoJVq1bh7/7+78FSCR9Dg4MYHBzEhz70IXz0ox9t&#xa;C16YbjVCCA4cOICXXnqpLYIkWyD/5SCGpE2XwznHRRddhF/7tV/TZ+uq++bn5/GXf/mX8YIC8Pzz&#xa;z+Omm25CFEUdJeaKFSvwi7/4i7jxxhtx7TXX6Eyu97///Vi5cmXH/hBC8JWvfEWEStNGJueoSS+B&#xa;2cfR0VHceeedeM973rPk+9mq1QpOnEiOTa/ctaHKqzcaMo9BSNpWq4Xjx4/j5MkprF0rduoqe+A3&#xa;fuM3EvOrdh0rTAsImFStVvU2oEOHDuHQoUMYGxuD67oYHR3FZZddhocffritvZ3ogjNtqVTSvlEV&#xa;9eoULVKfc7kc3nHddRgfH8fXv/ENhBIfAwBkNGbLli342Mc+lqgnPWGKDh8+jEcfffS8dkSokOrt&#xa;t9+Om2++OfG+h9dff10wrbgR4ByNeh2+9HummVa1U6nRrVu3atwtutienaZo3/79aJoBDlkfgMSB&#xa;HuY4qA2YpkfF/N33fdRqyay3vBQu6r4gCBCl7IBSuYxSuZS4ll7sql2qHQWjXN/3NUZOG7nd3d1n&#xa;ZYydG9PGAku1Pv6Nc+zduw979+5NnIbdicnUtfHxcUxMTOD48eM4ceIEjh8/Ds441q1fh76+PvRL&#xa;S1ntTVIutjSVSiV9WIRul9FWMbgEnDNETPylXTnmRJvvHVCkomuEUIBSECos4xd378Y3HnoIv/LL&#xa;vyzK4lyPi4lv0056NQYqOw0Anty5E0/ufBIL8/MglILatmg3IUAUgUchDh87lsDPnbSOeiuNmXJY&#xa;q9VwamYG1LLBOQNnDEMrku4z5UslhACy3D179mLPnj3Yfvnlif4ASCwQxYxmUCOKIlSrVZ2bfOTI&#xa;ERw5ckS3fePGjbjzzjtjYXAGOnumNTEbEd/lFdmBCLtf2o3dL72EG264IfFoelWaTMw5R3exiO5i&#xa;EVtk2FExpqkyTYmUllKPPfY4HnvscXHNUjiU6narNvOII/R9RGGIMLX9eakFoeiExF2CmRwQm4LY&#xa;Dh576mk8u/tl/PIv/VJbeWZbO2WkmZ+r1Sq+/e1v44EH/gTUcUCoBWI7cTkAGOd4/oUXE1rMlNxq&#xa;vJ7+6S6Ac9x+23v0tXqzidn5eVDHAQtDcMYwPJrMASiVymg1W4BFAcuG7bg4cvwNPP/Ci7juundg&#xa;9aqJhPAw50Wlcvb09OhDPwCRy6GYtlQq4dChQzhw4ICOjC512mQnWh7TJgaX6hUIQGNDyEGzCMFi&#xa;qYyf/ORJDK8cwX/6hbsSE3Y6SlvE6Qk2t4Wnmf/7P/gB/vEf/wdeevklWI4LYlkglIBod5gRxaEU&#xa;rUoJ9XoD1UoVxQ5vkFyKXj90CAABdRxYmSyo42pmKC2ewP/zzW9h6+bNuHjLZl2eSWZ/1ISbVvw/&#xa;fevb+OZ3vgvL80C9DKhlgdoOQCk4AZSIOPbGSVSqVbjyYLp4fsTvP3z0x/jRI49g7erVIITADwLY&#xa;loV6vYGZuXlQLwNOAoARjIynjLVaFa3AF4vFywK2DTCGL//N3+Irf/d3OLxvr0h5zGb1nD744IN4&#xa;8KGHtHvuhz/8IV584UX87u/+btvRVVEU4Qtf+AK++MUvto3LcujMTKslm5BShFDBCFLCCokm/kBi&#xa;Jj72xgk89pMn8Z9+4a62yUpbyer3paSw+p6WzOa/3/72t7H/tddAbQeUWqC2nWRaasmFJq5F2Tym&#xa;5ufx/EsvYeXK4UQblhpAQgjK1SqI64K6nmAsxxN9th3YmSy+96NHAEqxcf260x7Cl24/IQTff+QR&#xa;PPv8cyiVyqCOC9vLiMXnuMY8CGnrt3zs/LdnsW71KqxfvTouV9bz7X8ukJBoAAAgAElEQVT+Z5yc&#xa;msK69euxWC6jXKmAcY6p2VlUanUQKcXhuJhZWMSTu8TBcWEQ4ImnnsHRN06CuB6o54HYDsAYOIsQ&#xa;co7/9vkviBer9PYC4Dg1NYUXXngB+/bt08KsXq9jZnYmESlNj8Ppvp+OCGJkmp4hPZiCEQWjUouC&#xa;UMEQIEQwB6GgaruKZQEccD0XruvhW9/471i5YgVGhoe1GjOlZSemXaoDnaTgCy/uxgu7d+P+++8H&#xa;AwexbFDLhu26gF5gkP/KxUYogijC6olxrJqYwDf+8s/F1m1jH1XnISH48G/+Z3z9f/wj7GwOdjYL&#xa;28uCUwq5rBE0G7jx2mvwv/7Gr+PKyy5FRm567FSW6lO5WkWlWsUH7rkHJ6emcWqxDDuThdPVBWLZ&#xa;QtLJxcYh4HLgt7DjkovxczffiDtuehdGVgyhWqtj7/4D2HvgAP733/99dA8MYPuVV2P9urWoLCwg&#xa;9H3s3b8f+w8fRotQcNsBLAcXb9mMomsjbDYRtJqYnDyOaq2GehhJpnUBzsGDADwMQIMWCtkMCtkM&#xa;EAQ4NT0lzobwW+AgAGOCrRS2v8DUkWlN9U+pBSJDnQrHWbYtsBaloI4DalmwbEf+bgGEauPixuuu&#xa;xZ23vht3vufd6E4dgJZmwE5Yr5N0Vfd89/s/wL8+/H3868MP49SpU3AyGWQKXbAdB5aUTjDhi+wX&#xa;tRyBF+UIfOZ/+zi2rl+HLevX6rJFVUmpSAjBe+/9EP7tpVfhdBXhFLrgFnvEQpWTFPg+PMvCVZds&#xa;wWWbL8K9P3crcq6LnOt07DMhBAvlMhbLFVyy4ypYuTy8gSHY2Tycrm6AErHY5EQJIw/gLEKjVsWG&#xa;8VFsHB/DaF8PFqensf/113Hg4OuYm5+Hk8vBzhXACRBWq+BhKObRdeF2FWFnMrC8LPwwRFirgkcR&#xa;eBjCssV8WtmsxtVREMBvNBCFAZjfAms1wVpNRPUaEAXgjAGMgQUheBQCnAmG1V6cC8e8neGBwbRK&#xa;Wqk/atuaUQm1YDkOqGXDcl0QSmHZdizRAPzwJzuxdvUqvPPqK9Fj7OY8HW5cDhFC8L0f/BAvvPAC&#xa;jk9OotjfD8fLIFMowHJcUFuqVColGrX0YrRdD04mAw4h8X/w1DPIeF6CaQEOzmN1rFrb4gTZnl54&#xa;vX1we/qQ7RuE5TpCEnGOiHEEzQaeP/IGXjx0DLe841oMdhWQdVOuMPkv5xz5XB5eJovs4DDgZWD1&#xa;DcIqFGEVuoXhKG4EiyIQLhk3CpHN5vDa9Cx2HzgIWq+iMXUSrufCcV14PX2wMxm4+TwotRBmsmBR&#xa;BM6EB8bOZGFnMrC9DDzLQpTNaUFj2bYQRJ4nNCmAoNkEIwSs5YvfHQdMzjlr1gXDRxEIg2BgAMC5&#xa;v1fhtHMPYwnEHoEYp1LXge24ovGWBdvLwMlkBXa0bUCq1WwuB8fz4BaKcL0MMsVuWJ6HiAOMcUSM&#xa;4b//n5/ARH/syFaT1um7ojQW5lIR3/e//Db+6aGvI5vPI5vLo9DTB9vLwM7mAcsCtSwhXS2JZYn4&#xa;lwPoXbsRpWI/SBQBjKF0ago2C7FhsA9rVwxhtOCh0WxiYXYW9WoVJ+bmUW80UW80cOz4ceRXjsHp&#xa;G4DT2w+72CvqkaqQRSHAIviVCoJaFQtHD8ElQAYMlDOsHh/FL935c/jQnXe0aY5f+K3fxZGpaRyv&#xa;+3CKPbCyeenqC8GiCIiEtc8ZAw8DOGAgTPz5zQZ4GALUAqcUVqEbVi4P2t0H7njg2SzguCC5LsDN&#xa;APkucMsGt22AWqatHbvzLEvwARgoY7ArJdBaGc2XdyFcnEOwMIcg8BFVyuCBLyRwvQrWbEomDoEw&#xa;lAs6umBQIWZaw+AictIJpbBdD7aXERLVcUBdD9l8AV42CzebRd/EGiEVegcAx4WTzYEBYISCEwIS&#xa;RQgbNQTNOtBq4U//5w9htK8Xo/29HY0R3bEOTB0xhnqrhXrLxzt/8UPIORa6VqxEYWglBtdtgOt5&#xa;yGRzoBZF6PvgUYTIDxCxCFEgXFxRFKFluTjeCITPkzGEzQb8ehWlE5NoLM6jcmISPBKDTCiB43h6&#xa;PLLFHmQHV8ApdMHJF+DmxEtIkq5rIRV5FCGqVRE16mgtzCFsNhA0G/jNX/wF/MYH7sZQT7yBEQC+&#xa;9eMn8NC/fB8/eP5ldA+PwO7pBfUysHJ5EMsGzxUA2wFsB9zLoWW74ISIseYcnEAsIGqBuVlwaoFb&#xa;tpxlrqSA/MwlPBJt50xc5/HQt7MJoWJBWBZIaQ6kPI/gse+hMfUGuN8C81sIy4uI6gKKcAklwJke&#xa;zwvBuES3XhoohBBYjgNiCcnqZLJwc3ktWcc3bUFh4xbAcQHHQ4vaIJzDIirDSp4JJSeZEgHMOedo&#xa;Lc5ifmYWG0ZXYv3oCD76vvcg53nozufgWGK1K8e8eCwVLTIY+rf+6L/hmd2voG9iNfom1qBv1WpY&#xa;tgs7Iyxu27IlXHFALXlUk5okzkGUxOIcURgg8n3USwtoNWqoLpYQhQEC30fEOZpBJIMRHD5j8AFE&#xa;HAhBEAQ+OAMIGAg4CIu0lOFSlXPGEPkBeBRhYWEO779mB95/7ZW48+rLAchDNjjHXKWK/+sfHsJf&#xa;/8uPkOnuhbV5G5orJtAYHJOq15h4xkAV4+nlQvT4mMGNsyWeEhzpUggATkSwwyJA9E9fRViaR7A4&#xa;j2BhHmFlURhtgQ/WbIhxjkJhoGmmPXfmteOGKQexgV+lj5DaDnI9vch394AOjyGwhMeAcKmeCBLS&#xa;RruWVBcpBeUcTjaPXFcL1ZaPw2+cwNcf+QmynoPuXA6ubYESgjAMcPHqCVy2MZlna0aZCIBLNm3E&#xa;ky++Ap5oNwEBEeEEY3IBFbWR/l4AQcTgRxFaEcNC00crCFANCHzmoGUXwGiEyArBOEfgCnTGOBdh&#xa;ZqlFOAgYZ0IISUOMMKHG0ayDBAGsmogQUdsCtygKXUXM1Zt4/tBR3Hl1HF0iAAqZDFb096GYy6LW&#xa;rAt1GwSgUSgMGq6CLdDeCj3eiegkSVxS/GxqA8IBrngcyXuVgWo8qj/rC0pLAqBbrgA9+hos30dY&#xa;rYLajsTHkfDaGPe2RVPPgQxDTLq2qCXcRpJZbc9DttCF4sg4ihNrEHT3I5RWNeEABQPVAQdIS1cy&#xa;EhQjURACuIVu9DgOgmYTU80GvvXMcyBRCIuFoBAM1mw0cOcN74CXz2PzaJxMkiDOccc7rsHf/+DH&#xa;sGwLQaOuB4YQgBIxaQQcFBwWOJphhGbE0GIMi60Q5SBEM2JohgzlkCFgDK2QgHEPzHXlqIoZYqY8&#xa;00xBtMFKCECkVQ9wgEUgvg8SBrCriyBBC1Z5HqRZQ86ycGR+EScXFvHb77sVxawIE1NKUchmcOlF&#xa;G7F25RCefP5FFFbXwZpNkDAAkapbzRUlADczS1UTicFt6d86cEzMlCaoTV3VZSbnQhmFZMsVsDxx&#xa;ulBYXgT3s2KcOAP35flhUSQfSDfu7MkihPwfIASUEFAJCSzHFREf24GTyWFo3Xq4QyuBvkHhazUk&#xa;MiXxEZHay6C+E6qvQ0IGYbln4eW74GY82J4nJBaliEAQEgruOJhv+Lh+y8Z48CT2U4PYU8jj4PQs&#xa;OGM4NTuL7hXDGoNTaRyCEFRDhnk/xGuVBo7VWjhabeFwpYE36i3MNAPMt0I0GIPPOCKl5AkBJ9Kv&#xa;K117OlRp+GSFrDUmQqlk6QPlroeo0I2o0A3m5cAyOZBqGdV6A3PlEt6xaT1WrxjURighBBnPw57X&#xa;DuLZ3S/BHhoBL3QD3WKPmRpHaOdOiglNd6JmOEgpqzwhqp3ix9i9yeMHU4BAeWASBUtIqbWfZYEW&#xa;uxEdeEkYhNIzw4NAYGUWJ0GdL8WSVjdeSY+YCfMDQwizeYQMsKgehSRpyWNeMwZASSUJOwDAcmy4&#xa;YR4sVwCLQrAoRBSGqMPCvuMnDQjbEblh2/o1aDSbOHDkKCLfh+W4wo0FIW0ZB0p+gJPNAK8s1hEx&#xa;od49JR2JCDsnsV9nqZKURObvHaQdV1Ia4IqBewaB7n5YJ48h5IAfhDg8PYObtm1JaJOuXA49hTxc&#xa;20bYaoGGASjj4DQ5tAlZmdDvS5C6p9N9p3neHO+lCuaMgXhZkN5BEOlRArUSvvGYNy4A0yZgsS5f&#xa;RL6obcN2bdD+QVBqg0i1EfOmsCg1gIo1avxFPYNYdUO6VCwqHPykUNBYlQAIfR8LfgunqlXkXQd5&#xa;eTKhmbvAGMP/dOlWnJyawk+aTVTnZ5HnHLmuImyb4I16C69XmjhYaYEBsKlQqbZ0exFCtbUcD4Bo&#xa;c2KiePI75wDVCxFK1opumiQFAE2Fnxvbb4B97DX0Th7EN37yDO67+Z1oBQFaQYjp+UUsVKuYK5fR&#xa;VyxgtlGF1WqAsgiEOtpfG9ehRxY8wcYGppX3M86EpLYdEcFTmJ9zIAzihWsavAaw5cY1sWaFeBDw&#xa;D4DjgbkZ2LkuhLU6YIXg1AZTkUjIBhGFcc/HEIOS9EYWFbW0J4FQC1YmL/IrIy4iNAkdIfslv1It&#xa;sIVRJLI8iDZcoFWtjLYR6DCxStuzXQ8ey+P/fmIXrt+wBjdsXNNxa/pAsQvrx8dwxcVbcejEcVgE&#xa;mMoXMU8aeLYSwiJE/KmRJ9JRwgl4wvFNoF1AqavGz+IjBzhVrArt6YgHQn1XC0BhQyV5LbD+YQRe&#xa;Dq899xjG7v5lNBbmUV+YR1haAAhBJp9HJp+HO7oBsF1ZFIstJ9U2ZeCkVoz4jWlIAADEccBPnQCO&#xa;vQZarwkfe74A5LoQrd2ijbyktRULp3gIuDFWgsEJ59LVRkFzBRB7FrAtQ+LKtw+dozcjTeaBUNDw&#xa;DPF2Y89xUJehZC1hDWmvmIhCMqlKUNFgisfS22y0BvcEFGYSjsxvsICfTk5juLcHW0dWoDefSa14&#xa;QTs2b8L4yAj+8399ANNuBqfcPkxaWeQymQTTCRin9YOBBolmyNgAJx2ksGozB5iJ/zgERDCvQa/i&#xa;OIWFiPXLIrBcATzfBavYB5sDBTeDfE8vWBRqQQFCgJ5e8EIBcOw2NW3KQmHfKAmZEijqIcsG6jXg&#xa;1EmgWQPxsrAWZ0EJELgZBGNrhSsQ6LB81VSSuArjB0OXgngeYMVhfkKVJGsv8lypcxiXJ5OLQQnA&#xa;4kHQRkCaCROiCbH6WmKFKcggeTt1EbAtG9VWgMmFMvoKqTdASsOs4Lkg3V3oyudRZQz1RgNO3kNy&#xa;WtFhxtvbZEqPuE9UuLCUSrNsg/WNAg1pnMS2RP9OIL0PUrPwbA60XhGyi1JQHkGNKyEE3PXAbAec&#xa;SHWeaitPVMpT9ab7zOOxVViTis/UbxlCJNUvo7ZEn0Vn0LZYzdRVNbmKoU3NjHMnO9kv4XRnUQTQ&#xa;ECDi7CduJPpSS/I5EZJDOrjkWAs3mAkPCIkbq9d/G7OT+H7E0juby2GyXMOj+w/jsvHhNj4LwhCu&#xa;ZcHJ5zCxajVemV1EaWEejpsFMh4UpwgD13w4NdlmWyA1JQF4aR68NA+UF6VjPALyXbDWX2yo0VQZ&#xa;6iuRyMi8RbmSJOPwnn7QxTkRenUzAFEVC6zJvIxIS6QUYB22D3E1ftxoglpAoi4lBfXPCl5JDwmn&#xa;FojflHUo538H80tVobVLB7lPIBeEdHVqKBnP+/mbYVLSKsDOGQMDQKJQT2C9UsbiK8/Dcj1YXgZe&#xa;oRtuV1Fk/6g/5dZS4sRcZGqstMQjHZg3fk4NKiEUbiaDuYaP2XIVj+47hEaljMBvyR23AWqNJqJI&#xa;nLn1+smTmKv5YF0OeOCL+T9dznmC6cyLRKQCVhbAX38V/MQxoNmIJ9O2wYdXAa4L4nqxoWYwZyyA&#xa;2icegGYOXugGWCikuWWJUeKI8baS9B00VaL49JpJ8m3c15hzTzMwHcrSt6vVaOLbxC/Q/nrNCEBs&#xa;0/Al23w2ZJtWoYo66aQMxtCq11HauxtOrgA7mwcfHIY1vhrI5mDJUKnOtwU0UwKIrbKEuoC+T9Ub&#xa;d9qQtHKVBhzwI47HDhzG7BvHUa+UUatWUK01UGk0Ech4/qFKDaS7H3b3UDxbXNUr+7fkMKQUvmWD&#xa;V8vA3DRQXQScTJwt1qyD1ysgtAieyQKRMugMSGFOZkLtSlyrfnNcwcCWfIbH/CWkrTlGqbGT3MQT&#xa;nEk6rMN2iWhK3cS/qfFIYHkVPCEG5jWwPzGfe5PJ1uoIHOAMnHHwiIIBAhZIpmQhQ1CvI6hVUDsx&#xa;Cdt1YbkuMv2DcHJ5ZAeHYecLcLp6xG4GaoEQS0o7xTw05ZwXTEr1d574RgiBm/HgeC72Tp3CzGsH&#xa;4deqaFUrIOAiSJHxUCh2werPgOYLsLr7xRYRCmOhcM0sAoqpSUlLwljNkUYNCAKQbBe0ZQ2AOC5o&#xa;swZkMlraEcU4xGAeObkipKzaor7I6mwXLFJWPonhJBe5qToQAIBQkoCbhBKhFYmR8CLLJxwAJTEO&#xa;Jmp0DS0H1Ra+tGAx6jcZXHWT6++xR0cP4JtItsJAaoAIgCgKQTkDoRGilmhgZPmgloUoDMEyIQJf&#xa;5NEGvg/LcdCYmYZl2/C6umFnssgPDMLNdyHTLxzORO5z0r5WPUhKIKqdBXKwoHY2CCYu9PXD2Xop&#xa;eBiChSGoReB4GYSEIqAW7HIkws+ZjMiEAgyjIg54xlLBAGlSl2oJqBmFis19LBaPnIvztrS643JB&#xa;cIPB5H+195Sn7XHZPybyCTgn4My4w0jm0bKRM+mqU+0goCQlObULDIbhxjVGVonZqk2iGZIDmfwz&#xa;3QOKGXV+hRobpQXks0riy1yUtGK40GQnes04OBErlTEOECZzTpjYd0UpoiBA5DdBLZEoHLaysBxH&#xa;RKRcFza14LkuWo06SpUKGkePyvQ5gloQoqd/AMXubnT19KCruweW7cCVmwNDxlK4i+iBczM5eJk8&#xa;1IRTy4JrO6hEQMgATuoiw0xuSTFDo0SrzdiHyoWIhIn1zMkX7jsLsBgEQBZEqQWu86vMJCHE6lIW&#xa;K6CSqa8lA8gFyhu1+F6D6QWTtI9FoiQDGwrtwUHMDBizzgQsU2hJqR5DS2hFYTK0qkyNGQHAkOx4&#xa;LMPPA6oum1IuL7VyuRZ4Gt9CZDmBhALfSexL5NtVqN0ScoWFCABQJwNic3gOk2zGQWUic61cQrNe&#xa;Q2VhAZbtIJPLw3Vd5Lq6YNk2LDvTdmSRmXhDILKmqNzmEinntvZCdOoTSU102pRIkWFlQ+N1yL1x&#xa;qpjU0zxeAHFOgnxQSTztcqJAs27gxZhpdUZbLFdh6ghVFzcXjbnwNBZVkwhD63Tua+J3bnwwoU0C&#xa;1xp91nWJZ95sZGswrWRVDikN5IRF4lJEhaoWh1tE2nnMORNbnMFBAxdRsRscROwkJQSOMSAZwhFF&#xa;EjezCM1qBSAEjWpFBBROWbAsG9lCAa7nIV8ows148DwPrueJvWlEBCkItWBZFJxHCAmLNzAKMaJV&#xa;oBmRjA0IcwjMCZHSTfplCSUg3DIkLQEokwk1atRU4dwsEfGvadws/6UUmD8lEnPARb6soWYVpl2K&#xa;AUx2VnBEQ3TDf8rj0Ug+2KnE0yazqDLNsuLPuh0adpyxwnOmpKTtWBEH5wxgFJwwUAAsUonUFJHc&#xa;XUupBc4YquUyXGcGmWwBVi4HksuBQIaFKeB5NmxbMpy0vFkkkqxbrabI+C9HaNkW/FpN5PRaFAwU&#xa;mVxOMnAGPf0DcJ2MEIIWleFlgCvXmx5AFn+WeanEbwF+Q+SoRpFw8bEIJAyENc8YUJ4XCo8SgCt3&#xa;HgFYBGY7wrfKjeTAtLQypHrbxPktgNWB2SljcakFZuDLFMsSoyStySU+iCO5JHFjJyxt3qaUe/pb&#xa;vA554rq2ORNtSWutFCS6wLTkuQft1XJD08TqS2Tmi4RfRASNWgURAaxCUaQl5gvSyLIACEMgiiIw&#xa;zuO0RteDRSmKff1y6IQR4tcbqJcXUa/XUK41kS8UUOgqIl8sIl/sFgvCEhY6V0YctcCpBQnGpZDk&#xa;wjkfBkDgg1QWgfKCZN6WcK6zCCTwBWMHgYybp4xGyEiV48rFYfxmOjS1GiVa6MUQkIh2NOtAvSr2&#xa;aylXoxprPb7JEGnandYZ5EIbRmmFstREt+UEpO/tIGR1nemFyttAU7Kxnco5S0oyrcbdNJ4ky9Ju&#xa;LxAit5Rb2jcr3FsG2A8jhJUKKgf3omYfhNfdAyebh53NIzMyClLsFc9atmg9IdKAIgjCAATiHWPE&#xa;spHpzSLX1w9KCRzbRqPeAGdiR+m+53eh1WoitD0ETgaWVxBBgHoFVhTCCX2xB8yXjBj6MTMQIlSo&#xa;2W6NXy0gs/QZJsT1RFBAZUqR9IyaMx5LLQ1xbRs4eRR47RWxsZBJ/MU4QOU9jIlFxnl79liiMUmN&#xa;aIL2ZCvQkVk4JJLoELwAELsr1YNLBWu0Ow8GE4sKCT/zy//OlhL5tOaxQXo3ri0YjKoECFtuwdFM&#xa;K36jjjzRxZJuIipUdthogAU+gnoZQWUB2d4+2Lk8rGwebt+g3IumyjcNizhCxxkBYxx2JiOS1SlF&#xa;sX9InA4YBmBhiFa9ipbnYZE3UG/4WKyK1/8EYYgoYiIQIhmTpiVjPAjtGFCNv2SkaHgM3MvG7ioG&#xa;uRtX3qhj/MazhMTZcT/+Z/BaBbxWBrEcAb2UoaTjFML4pZrTZJawofJN1tBXtbsqXiWxUyCNR41m&#xa;cg5ROYf+CrmwAXCF6bmweTjlcX8RIzC5lSE5bm8CpSRtnF9AJNNRWwQRqLTmqeOJjY8qEia3GVN1&#xa;dpYlGJqq7cdSmikhFzRbYBEDbTZhcYYqLLQcF45to7enF47jws2od2/FFjylVIcdwDkYZ2gFLRAQ&#xa;ENuB192LLKUYWLUalm3DoRYC30e9VkXg+5ieOolKpYJKuSJeusGl+4vIrDJIZjWteKmSWSYL1t0H&#xa;1t2PaHStwMByvKD8mMrLYPp7AcCxgMAH9r8CfuSAiLRRAli2yHHVdSHOHosigEUJ74CKOCrWo4To&#xa;akEgzhrQ6jp1Eo/2gJAk33IJ9fTpO0zfLoZCGIOUWMIdCi6CFkQBRgP7qIacznK8QExsq4rifFrF&#xa;jMbhHLaUhBaF7bpwMhn5XRzWoU50YQDCIIgNGEL1AtAH1bV1hiMKIrAowmKpBNuyxTYcy0Yun4dt&#xa;WeJwCNpBN8UgUEMaLhN+Iinh3EwWjuthxQhFrx8gCHx9nqzIYWihWq2JgyhsR2y59jJi+7XjCozs&#xa;ZcG9LJiXicVKyhhRfUk0jBBgZgooL4BPHQcaNclY8h7DRZZ43nAttZdtVNHps0YrCkiTeCGabrT0&#xa;VJh1G2UR1VbtuzVhkCFZFVR5k6SrSbbuGDGSv+UJI8SykO0qIjcwJM48cFw4uTzsbE4wo+0IKSwj&#xa;XhwErFUHwgjcbwFRiCiM3+pHaHyeAiFUbIhkHGHog3Gg1fRBCJEnnIhXJjm2OOo9l88hm83Bsm3Y&#xa;6t1TiFWcStjhnINHDBEggxIZUEKR7+4GpQSUUITyQLQw8BEGAfaeWkCZcZRhg9i2yLiyLJ3lD2rH&#xa;E6S2tRuDKELEMQMK7cpjrMoBFIpi2/3CKcD3xd6pRGjWjFRxYUQCCQiT5G8D3hiROJGeHvvZY2Zq&#xa;F3UmijHLSa6P04nOZP3iM0vdZUjgNGw6RxI7F5SkNY8+kge55Xv70b1th5bAcBxxBKSUvNSyxaRR&#xa;sQXcBcSAh75IJglaQtVFIRCEwqqVC8JxbBAWgrFIQkzBdKHvgxOg1WzqU7Ndz0M2k9FHv+e7iigU&#xa;umDLIAMl8VGYCYnORZRP4GMCTjhsx4WbycC2LDiWhTdyfai3IkR+GNsa5kQYaYEcMPIJEGPjlCRU&#xa;Eor3D4H0DQDD4wImzE+Dz04Dc1Pg87P6dJoEE7IInLN4t6tZuUk8dVF/bNMB7c+nJfnpaCkGS/im&#xa;JfZu89MaBZDz4lVN7d4Dg3kJpeLwi6ERHfPn3DhEl3FQMJFZRwCAghFxYB08D4RayFAKhD54FIDU&#xa;6ggaVY2hhNQVE6TBv6F3CSHgjCNiEephHZVSCY7rihcC+yEyGXE+qq3ajNTWlzRJyMDBwRgHIwwR&#xa;EbkWPIqAiMXaeylSNpxRZNpjkKxTcAfJZMGzOZCBYSDzGsAjsJkpgMTngJllCDzZqdSkek6yjQFL&#xa;lmGxa95aaszMEGJ6baQhSXtDkeBevqwmLYts3TgDz1Lz3APHBYkiYclaVGxwlIMswroK9CuGEz2g&#xa;XCSUB+Ag1AaxHCBbRMa2oU5jKboOajOz4JWaiJRJg8uypKonpiFCYFs2OOPwWz6mpk7ixBvHYTsO&#xa;bMfGwMAgunt6MDQ8DC/jwrLt+CA0jdfjP7ELREAixriePFMA6QldCj9qSqrEpMqNPxAArFkHWTkB&#xa;OrYW0ew0sLgQ36juVcGFtP4mQFtmWltFS1s8ul9nlLByFMz1gfahiG8TDSXKvki0aLnifPlkE82w&#xa;hiFmWfp0REvuhFW7VwUujc87EBpSMLBOm1DWquHvhWSUiMvDPSjFIqfID67Axv5BhGGEWrWKZqOO&#xa;SrmMMAwQRUxHxKiRr6uGkBIId1cY4vjRozh+7CgO7NsH13UxODQkmHjliDh3zHX1G9KhIIo8t4Ep&#xa;x77RH7MqTpUxg9gtJ3mDmPahwg5GcEH/zs1j5gUMousvQbjzYbn5TwZfAH1sps6kImmG06oo6X2Q&#xa;DSbxFZgcxyE3IaYOMxTbeQz20r7rzlJdew8kPNKnC2mhyo27mfHDhWHgpJ/WsPLjY5HEyUmq/UZw&#xa;SHy3bFgkTkYR52/Fq57KJBdIvEmJsSKlNLEsG47jolDsEplkYYQwCFAuLaIpXw9Ur1QRsvhFIcSy&#xa;4o2SHLrdke+j3mrhcLkMzjm8TAaZbBaj4xPo7u1BsbcXxa5u2I4NSxqDURCI1EBuqFhozR67oiA/&#xa;SyOLg8SZVZCzzkRn1cRRg0EIEccoERYBIQddMQIehMaeaFmPsgFUFpoSuVovcw2d9NzpBsO4N54n&#xa;fV4soMc/FpU8cbv6WUM27TmQN2k/rXxG1au263TEARwX6ujPJc6LPfYAAB7gSURBVEI/RmKvznGV&#xa;v0imSxs8CiLYxq6zGPsY96ny1fNGNEXsABYTYts2Cl1FZHN5FKMIrd4mGvUagkBstWk2m/EQEAKq&#xa;GQ56gRAi37rt+5idOYVyuQR3ago9PT3o7e9HV1dRvG8BEP1UErWTHaMnn+s+KTtM1aekaUJQcSmj&#xa;tFQ0ClanfEvHqKjaxLfcqNO4Zn4kMZOZ495JpiXxfpwQbv6Z1ZpASUtyA+4obZKgtNsO5IJJWEVL&#xa;xys5JByQkS/E+FV8J/EKh4mHjXfN6mK4Lk/rOhIzrSpLcTmlBMSypT9YSEPOGfxWC0HgIwgCNGp1&#xa;eWS6jyAQvlYexa+DV4cB8yiCzyLMzTRFdhnnyOayKHb3oFAooNDVhWpIEILCZgDhEcCkGuXG66Qs&#xa;G9yyEPWvlJOlWCM+fNkcuuQVoq/G7kwi9pi5rnzNEtMCkrdJKyGl0mckJuuMZWXcMlUTEO8IMRun&#xa;vidXabucJB0/pu8ngAxLy/Zr6a4kPEkogyWg9xkpce4B5xxEZbdzeQym7wufqGxEvLVCMiohUC/k&#xa;iK/HZ3sJDCfVqYm/RC/i5xVsIIDahkx0uyIQy0IunwehXboNYRghCHyEvo9qtYLA98V7XH0fdfki&#xa;5ygMBH60LSF9KUWr2cJMcwqz02L0SC4HDsCRg024mnrVTCJ2z1ILQcQQrBiD6ZfV6tbkVoMxNBuZ&#xa;E84h9qIZL+EgRDqOmEpNTAeUU0xHCAiJmUJjWp68LZ5ijrQ/mXPI9MjOJJcaCOHJdUTalyUAfeav&#xa;EhD6BS9aaJ0/2YJRjUL1n/getpqSGaUuUrLVNODMjij4oFU/kYaXzMeVndLGjxwULX2l2orBs/oc&#xa;70rlEBg2k/OQo3kQSjFERtFqNjE/N4t6rYqTk5MIfB9+JKJtttIQhMXqXJVXq2iNAcmguk5VH+eg&#xa;nMGaeQP+yomEBDEEqf6iBQoxb4CEIPJHWU+8dUde53JzaVp5JxilAwOY7ViKP3j7bzpjrVN5utwO&#xa;hXZwramsPyiDz+CpC5U4o7fbqPcPMJlmSGU2VX1xAX3VCrjrgjuejD3HpwjCZF5CxDzA/E7jvhMC&#xa;1/PizZIy5MoieUhFYpSME2m0FCbGrwQ8isAYASgHt8QbdUbHJ0AtG5fsuBJ+o4H5UzOoVis4+vpB&#xa;tJpNNJtNobZkMERJUb1wxMhLKS+DChoOWaCLcyBBEDM3AM5SijvJsUky5o0Q8VIVcBhMCr1HLMlg&#xa;JtOQZDVm2YYwkGhL4m3jceWIUf207KSwUnvPjH4kEw5J8lZpCxDOwYJAbItnkRy/lHblqX/PgeS5&#xa;BzKFTB1AHASIpGSLwgClPS8iM74G3thqEBbBkIcJBk74a3UjuZZa6jwnwgEwLk7rth1QmcAdSgZW&#xa;m+dUlMzEzgkJnDgMQrjcGGcAC9GsR6CEYGB4GIN0BBdtuwyRDN/OzZzC4f37UFpcQGlhQTxJKWzb&#xa;0a+W4gYTE6jdCgQ0DEEadbGIPQ+UpWeBxEjAUKkJgauYRb2qgTGRJEOteMw64Np4Y6M09lQ5Rrm6&#xa;LnMWtEWooF/cYg4u3snATZ82kkwlo3NilAkAFmsQZacELSBoIWqJdz9wI2CjX9EkuAvnS7boOBFZ&#xa;PIppI5HFTwCErRYq01NghAJhgPz6LfqUveSbvKnxB51wk2Zq7d+lNMay0mea8cT5W5wL+BD5gRxs&#xa;bsAOxM8jLgsqF0EuEJr4Lo6ZJ4TA9lyMrl6D8bVr9bHx5YUFVEuLOP76QSzMzaJaKoncA0vFXgwo&#xa;EclkclsqKSmFSEcLWS5kA0pwBZ2goI78n0xzJGIChEGjPCskfXibOu/AOEMMXEu8hANELSCuFo7U&#xa;LCwCvAyY6yEaXCnYUTGz8VYf8YjYiycYWzCp6JGYE27ZsGp12HOngICgGtZBwhYQhjL/mQn3JldZ&#xa;EecHE2zVYeFzVNhDqCfGIrBQnBvrV0oAAdz+IXg9fSDSRRQfg4QkUwGaafTYm9egnjMlqRgQSi1x&#xa;LKfc0pIMaRoYWk0CTKnSCWPHi4USIt6LAKoNBOq4sAtF5EYnEHX3ozo9LXYV1KpQ+FQlfOs9XIY1&#xa;ozF/mtKXuG5uwm4wRZ/elp7Cf+Zx853Kjf+NxzIBG4iqS6RD8mwevKcfvLtfNIoxcxT1mPIlrphw&#xa;iBAC1qwhWJiCHVH0RQU0ogh1pk5oN4MN508CHnAuVCATjWLylZCcM4StBizbBgsD+JUSCKHoWrUO&#xa;TqEAu9AFkslL7U8T2DYtYdU97dKZJKJrIstL5uhSw3qWAF+5g/RBFWqhSKlm6WuxlIvCCDXOEIIj&#xa;4kCTcTQYR8jF9vOAUkQ0C39gFGEfB+saBI4fAqlVBIMy6GPradTpTC0TawqRprfZqAWn0QaX/xdC&#xa;goeBxOYcegOlwrQxX6T+5ZoJzRNr0g8oXtX6vlAExtaBOw6inn6gUATPF7WKj9mRpzg2iWcT/xIK&#xa;2mogmjuJ8Mg+hEEdng94QRY9oYXjbDHpBrsAzKtdXgK0MxHRkXu4OBMhV59asEIHLHRRPX4Efr2M&#xa;fLEfuWI/wkGxE8Ht6RPvieVKfXdi3KTxljbizJdFK8xEZTmWZcl5km4UQDAvZ2CMoxZxhATwIyaP&#xa;wRfoyWeCURsMCDlHyDiaHGhFTLz0g3FwxwUhgKWmLFsQWFsPtp59aTSaZMbQ2okv8RmAwH2+LzAg&#xa;Vwo37mPCNEiUQDpe7dQe/ZlzoH8I6B0Etx0Q1439wQqXop2pTIna3i8CUIJo908RTB5CMDuFVmsO&#xa;VquKfECRiwhWRD2oszoqPAB7syJi6uRE1TAWiXdwKWwZ2TYatRKsFoO90ABvleENDsHu7hZva9Rn&#xa;WxmMmRgCI5igjbfk/TH2MrEfZKCBaImtDKuIhagwjibjWGQELRA0OEcgGZSp51T9nIt3KUCc/dvx&#xa;jAvFOOowZzmp2mAx+2RKJSL9slxp65ROV985hESVr69X0jpWpoqRjFYRIrlQScNOsES1Ry0AQ1u5&#xa;Xly3XHzc0EgJUuohTcZt6qi04LWXEVQWEQRNhEETraiGJmthnrWwjW3EHCOoo4IIJsY5d0oGF+RH&#xa;xuQ7sThD6Ivf2P/b3pn9SJLcdfwTGZl1dlX13T19zvTOzuzttb0+AbOy1jIgJLAQsgQS4g3xxL/A&#xa;v4F48ht+AIMxwhbwYmMjWbZsr3d2dnemZ3Z6jr6768ysPCKCh8jMyurp7un1k0fqn9RHZWVkZkR8&#xa;8xe/O+KYWEqUSvhUsoLnlXG9MoPIR2w/wjzukTQn8F6+jqhUENXaiIPmCtO4MpWbnDL52BkVZ87a&#xa;OIW2BUEYIRxq9TrtgU83jPnhwEE6AlemYY/GatgyDZs8OSfZfJ/khDnP0RqT2DywQli1NZ5n10h/&#xa;2Zdw1DpjkgLzdKarESNAxSEqGOQ4zl6q3MOWKwMmvf64S92kXxWeJr9ONpsiN1+JbDll9Ls4IOZp&#xa;oKYdHCtyJ0BLF0clOEmM971/pbETIEMXGU7hBBITtawSFicEesCamWdVz7BvjviIByfv/InpRN2D&#xa;HLYYnZmnEmI0ZVWm7EiumQV+rn9p63NJSTmqIb0S5aSOe+ghn9xicnKRmZuvIRfmcCdaI2nJSQvT&#xa;kfNbBFmhaDEqnJZZFjLum1khHGcE+lTedaSkVC5TDuIsl3JsSjKj/Vg1lhwlJ4XF9JxUESWvtZUq&#xa;WwLLoWQheo3UY5c9azqxmTfrqXoEhfuboY8JfFs21CuhM49V9jYVufKYpSC9d1FYzoBlDAZNvqdE&#xa;dp2cKZ/se0bFFyK9v7EcP18NpWv3yjjYRt+9RXL3Fv2DHV7vL7ITbfMw3KY/3IUoSm21CZgEDLRo&#xa;0GKCT3OTHQ7Z4fA3Vs5OjT3INVdjMELxQrKOFgYlDL80tyjrCkIm4Dgkica4HjoOMa7DV6pf5Hg4&#xa;4HH3f9GeYGp9g/rCMvXFZeRE0xbHyJb+LHkx46ap3AoFUOcihEm5cPatfb5SuUy9XMXpt/MKW3ag&#xa;ySSadF6L61ph7igyoHGFyi7belxz1wYhZP5MmY03C4YZmXTG07hHQsKo78n2VpqOX+CNJ8WJ4kNn&#xa;EkbWvyJlL6vAAjZNdLSnWcfFU6uLScdFjJrbs9OXVKY7yjvg+APYfB/9ZIvhvduYOEan++L+eHCf&#xa;q/Esb8XXuB0G7MbbqS3ewWhbg6JjenTosc0eV1lig2Xu8xj9GwD3zICZbJmeYxLfBMQoYhKEMmiR&#xa;7RubsjZtmBQNWqrFY/GYQMWEDgjl4h/so+OEqNelPrdIdX4B6ZWQad2D3OyVjXuuhI0Am4E3m50c&#xa;5KNWJ4B42sQLRqb5p74al0sz019mFM+VMTu7QqY7rRet9CcpB9iJYxmoHBd1uJdWkxRPNyQbl7SX&#xa;J0SZjGuOy8+j78bvW3hD0/7Z7mbHC4WbjcHRGhFHmE4fEQ1xul2EPyB58jFxZ99u2BxH6DjChENk&#xa;pOgmxzyIfVqqTmyaDHVAYILxlxWDxnBElwY1lphjQMCQiIDwlEE8nU4FbY0KFVOmShmDoWP6KKFI&#xa;SJBGYnSMSlPDK4mgKWvUYkEk+zwKHyNciTus4nolVDBksLuLLJWYmJ1nde01VKMKzRrVmVmrpct0&#xa;c5GiFeGEeWwUv1D4cRyEESOQFpfUM4B78pgpLrGF5dHaqhWZQjZaIiWUy4wrRQX5cgwtYgwo2V8T&#xa;RaCHRHdu5Q6MPBds7HFPVAHPu2lXgvwZRk9Q6J4Y56oj22Buj7fbxBqM30cMfZvDFkW2CvowQHeO&#xa;IPBRx4fUQ4HXH6CSHuGwC3GEiSNUECDDIT3Vo5PELCQtltUMXdOjaxw6pp+xmfzROvTRaCaoscAM&#xa;ASFDQvY4uhDfHQNthTIVSlxjKb/RoWkzx+ToJGUHuKRLeHi0dAPpuAySiI7TYyou29TyyMWRAjcU&#xa;CNfgeAkLPsRHd9CNMqpRwlxZxG02qCxfwZuoj8IanUJmRIHTjv+MLAJnVWEx+dL3dAnK0+I/8lF1&#xa;S5BWgzRKWVtrOtHOlTWbVTu2OTEjMbRwmfEj6TEpoX2AONhF+gOS84JIChVwzBn9GFshCjJP5oYW&#xa;mBEwkwQnGFhwDvo2hiKOaPgGf3CAE8XIKIFO2ypSYQiJRkdDasqjEXrIZIqdKEAlBqUMRAIiz0YH&#xa;ao1SERXtUWOGZTNL3wwYEhESF7WKbHaoUaHFBC6SSRp8xFbh29PpBGhLtJhglQX6BPTxWWKOMV+J&#xa;ESijaJg6DWo0aXBgOihjqItpBBK0QOCm4CuD60DisGHm+Uju4KgYOXAJ2j3c+Rnc5gReYwKR1uDK&#xa;xISCnDD+OTuWDYPI1ZdR2zGOVZzZjAMVUrQLlzVg99xy7DZIJlXGsmJ1NKfT4nOAUadzu0z+EE+h&#xa;CqSHEwQ4h7t4pQpx6I9Gt8jR8+fOrnFCiC0qVylIRXG80r/CaIRQ4Pft/mFH+xAMEAd7EIaY4ZBJ&#xa;NUukDihpiaccZCwQSuJEJVAaJwStElqRy2zSQMYDYhUSqRAnsWOTxx8bTWJiJpigaeqss8ghHdr0&#xa;kch8LLLeJCgqlKhSZopmDtrzKAftEnOUcDmgzXf54dMLaWHcb5qr9PHZw+HX+i5CC7IMB6FtHIGM&#xa;7V5SUax51b3OK/I6/xT+G05sC3tI16NSb+D6D6kcbOKWysy9/BoTV5aZXNvA9WzJozFuCyOxIFWA&#xa;UMYqR5mEVjCWi/zjSNwX6Rrs5CpbUctKr5HEyLUXQMXo7YdQquJMzSCmZnFWrmGicCSLazOWgJlX&#xa;ys6mJpOP01gG7/5tkif3CHfu8WLzBTaDuxhlMEozTNTI4J/VS8j6pDW6IBYhbcZDpjTLOEIc7oDf&#xa;w/g9KkcdomGXqH0AYYROwtSMl8YDRDFGK7ROcOI2a8kMj/QOd9U2MraikU7i9NwobWtrWfxJ8jab&#xa;ZptN/TED5Y+n2RRWDgNssEyLCY7p8jHbT+Gq+LmExzt8gSfs8YQ9jumfCloxz7RZZJp92uxy9Eyv&#xa;xRd4jR4++xyzzzGZ3JarRQXjPwK+Id9hUz5m03lM7BlKpaotxuG6eNWqNZfVJ3BLZZrlBpOVKerr&#xa;qyQLDVY+9Xm7uXQa3Z9FYGX38KSLrzS+0nz38TEOVoEcH7aM4xVMRibTpEdZuONLbCovpiae7GUw&#xa;GFtR8QRI88i14nRk3C8LgwwGiH6H5L/+hSQJieMhb/jL3I03UUahTIJwJUZKEg0qSah846+Rc1eQ&#xa;U7OYJLb7fQUDzNBHHO9jOocQ+JhggG4foaPQgkwpmnGZhqnha58dfYATJ6kzI7YZHtqWNTVKEyYB&#xa;v6te59Acc6iP2Yv3rGk4jdAyysr2NgJPI3TMDXOVG2adH+gfEpnU7Z8L0eNLe4sJNlhmhhb/zU/P&#xa;xRfAMvMsMUfAkD2O2eNo7HtxgzXzLJbsINhgmQ2WucU9HrN/ztkWxC+Ja7wkrvF95//QwtYYkK7d&#xa;3dxWr3Hw0rpgTqUMruRP619jq7TPk3oH6XqUGw1aS6s0l1a48ubn8EoVMhAKR+JKh0hpQq35562j&#xa;cStDwcOUrdiZQJHncWXnFK0XjMZdFNoWWUO2MUiRw45Rxl2FAK+E6BxhfvUT9L0PiP0BOhqioiE3&#xa;gjm6cYcefXqmb9PzpS3wJ4Sg+vm30YD2ezDoMdVWhCIhJCEkGm3tpFNAqThNilT4SY8behWZwKba&#xa;sjbn1GFiTAbEVNlUmlj7vGFu8Ia5wbfVf6aRdun1VRoXm8V+oHCNxDUO3zBf5dviB2Tx2GdRhRJl&#xa;SnyZN7jLI+7y8Fy5FWCDJZpM0KHPFjuolKFK4O/PMzc4OLzKC0gc2vQ4pENIfOb5IJgXUzRFnTY9&#xa;dsVRtgiTa9OGVHa18vE0LVbNPD3hc6TbBIT5zjpGa5JwSDQY5NYDr1q1ZZnsFXGF4L22PxIhC1Aa&#xa;eZty41F6/KRpadRqTII8cb3cIJC3OQW2mUPEkYjH9zE7W6iHm+h+B+X76DCEaEg9lFRih6EKGKi+&#xa;Dd/Lltp0oxDda6N7XbTfpxwavERQTzza8THEMTqKc9OTiUK7lMcxJg7xYkM9cplMquwne5gktgqW&#xa;SizAUzndJDYUUhrBUA9pqRrGJPh6ALmsyuhvrmYaPCQLYgaAAcE5uMiEMZPKtuAzPPd8gIiEOhUW&#xa;mOGYXj43p8JdIpE4rLNIlTL7tDmgTUxy7k1usk5JeBzTY48jIpGQeYusA8Fq/giB4zrU5QTr3ioz&#xa;copflDcRrkzFBo9KbQJZsjXEyvUJptY3mJiapzE9z9TSKvXlRTzXxXNdvnN3m77S+MqkpTzTwc31&#xa;pPElXRTclic5bXoS2cHcxASpcjO6rkjNXqaoLIYB5nAH0++gbv8S3WsTH+5iooik37XgiSNmoiqv&#xa;JOt8zCPum0c4wu4AZMtOOXaXnqyWrxCUHZdVFlkxi/yP+TGOknl8hEmrnGecF53ganhRr3DNrPB9&#xa;/SOMsTIsJlUws36mpfIdY93mX9ZvckSbB+YJPfyCsyn/lbct4fEmNwkYEhByl4fn4sPBYZZJpmmi&#xa;0dxJzz+L6zo4zDHFDC36DOgwwN1geewkg6FKmRoValQo4XGfJ9SosMrCmQ+TtVlhgX1zTEDICvOj&#xa;dXlsnbZyZ0V7zIlZSkmZtnPEXFzFcSRuWLYyr+/geA6OB+5Ao/uPoDTAKbc5XNqht7FEZXqK6vQk&#xa;rzerbAUx9/2YxJDWds2wds4ydIqmOQbiUyZqRJlFw5YuJQyRh7s4nQ7y4ZY1yh91LOfzXUykMUEV&#xa;Eg+SEpXEYV1NoxgQ0UOSOhocmZcDzdKBQKBEzAyCeePygmkR6WQkimg12lIpC3oymrLRhKbHF82L&#xa;tOnS1X2rhBaVpsx5ktLADFhgmhY1djhAZZaWM4bymC4LTPMia7SY4ID2aIPvM2iCGtM0maZJQEhA&#xa;RESMc0abIWFqyTLjoLVea8M0TZrUaVLn12yyzpWxRxi3Ptp207SYZZJ9jmlQw8PFSZORxvzvWqS1&#xa;eQ2TNJgUTQIiYhExayatmQwXEonUHk7sWlenLqONx1w0wVzY4oNgm87ePtWVRaoriyy/9Qa+Mjwa&#xa;KiKlT+36adA1Y/+P9+wsqBe7Y4SD0BoR+DidNu4H7+F2B9SOA0pKUgnqiDhBBC4kMSKsIbK9HhLN&#xa;nG4QME1MhIebixYIRuBNEywTFDPUqQIvmVV6up8v36MwQ8gcBzZ00xCagE9zg20O2DOHSFNIZMzb&#xa;jA6FRMzQopTeLSYeF63GRkIQkTBJgwmqfJaX+ICP85X6rLHTaCJiPscrtOlzTI8+Pm4qOoyuPpqb&#xa;mASJHBcP6lSpU+Ul1nnADg/YPmPaxmmDZWpU2OGQA9rnn1xA/jfF17klNnnPuWuPyVQWdNPADNdD&#xa;pvuVqZLDK5WXqHhVym6VW9UnVKqTVmlxPYxXYWppBfnKZ+hMLTIo121KidZP31+n4kEqIY0BV4g8&#xa;NDNb7sesA9LFMQrRbUOvjX64Sbz5HhOxRz1y6UbH+MmAvm+1eTUcYJIYPQwgSewmISYNxlEJf6f/&#xa;ip/yLj/lXatoZHEZhfuPXKySFjWa1HjTvMq/mx/kfaBY2ecECDHwZ+ZrPGKX99mkZwbPnFOJw2d4&#xa;mTe5wT/ynWeen9F1VlhghofsssXOhdrcYI0XWeMnvMsx3Ween4N2nSssMktEzC/44MIP+ee8w2P2&#xa;eZ97tOld4IaCz/EKb/EK3+J7JEIRiySVGkYuXCvzyrxmrvQkf+v9BT+XH/Iz+SHlygROpYzwSlYG&#xa;rNTA9RCVqnUNr17HzMxhrt5ENKZRRQfDqXGKIzKAoxXO0IcoxBzugN+3m9Ud7KGPrFKj4xgdRURR&#xa;n+V4mqV4igfhx/SSLr3wCKMS9DC0yk4cWXNUHNvl3GiMiflL/pgPuM9t7uMT2BEaq0MgTvyvMCj+&#xa;hm/yD+bbkBr6xr1zJxBrjW+8wQ0whl/x0TPnCazIV6XMF3mdOzzkzgUM/wCv8QIuEhfJz7h9oTYA&#xa;b/NZtjngkM65zE8A5g/5Mm163OHhszllSjdZ5wbrvM89julydIE3BODrfIn91Pb2iL3RU6T/jLIb&#xa;QAi7DZQWij+Qb3PbfUDfCek7QzyvjCiV0xBJF1Gu2P8rNYTroaRgVs5Qq7YYeAp/pgnlCpTKiHI1&#xa;VW7S26q0dtYwgDii5UMc+fhBm0RFqGiY2yutaclySaNidBgSRQOuqUWuqkVuRx/SV316cQeTgdWk&#xa;ipLO4hlIgaX5ffMWB6LNAcfscghPCTYnP1sQ/h6f4R7b9OjTzZjFmUlkljZYZpZJOvT58BPEtf4R&#xa;v0OXAXfYYveEzfQseoEVNlhmjyN2OWKHwwu1+wqfJiRiSMSvuHPqOe6rbPCYfXr4FzJBAFxliRIe&#xa;h3Q4pnvhCJ1FZhAIQmK6nLFEZQZ/AzjGvrGmRIMqHdEm1gbjGFQqZwmlEDKxOfzSRWiDcD0iF0py&#xa;EqFDuu4xmCCvnSW8UmrBABA2G0FrdBKiVcL1aJWjJKIb91A6GYE21dKLKdI22ikAFSGVsoEkOkIn&#xa;UcEwr8e9RmQdhDa9NHikyu7pA3Lq0QOOucYSW2yPQHsOCQQd+rnClAVjn28ptXSHh0zRoEmdfdoX&#xa;Sps5pss9YJUFImI69C+EkwfsMEGVCWosM0+PwVNYcQVwl4fEJM80ZwFcZ5UZWhzRZZuDC3FYDxcX&#xa;l9e5zl0eckR3/EEKGvyYsm4UV8Q861zhgX5MR3dwhN3d3CSJ3fcr33UnsKKEVwYpmfamqckhA7dP&#xa;x9mmIitjlWOKadykjobEJCijWNUrDEwbXz/OC1CYzNCexJgkGYE4iVEqwNFTlHWMTgZo46P10AJU&#xa;aWxQfQbYAmgNPGGPOTPFCvNs8oiLwQgesM1X+TwJEU/YJWFUGOMsOqZHhwELzDDHFAOGz7StAtxh&#xa;ixUWWGOBeab5Ce8WZ+tUOkpX3xIeVSosMssT9q1T5Bn9mkwDxmeZZJIGuyd0JfcW9y40TFM0maLJ&#xa;IjPcYYsBAf0LdBjgCrOsssA+x8+041myTzRvZpgzk8zQ4j/Ej+w8C40Rxm5Wp0Y1cJ00YBl3CELw&#xa;WfdT7DsdtuQTED6xHKS2YgeTZ0Vk90vrxRqDZwTKHBKZXYZ6F1c7VhbNtHSl821ITfrZ6CGuiagY&#xa;jVFDDCEY64AxmYKUx+QWbZ7QY8AaC6yxeKGxzMhnSJsuAsEMrWcu25lh/yG7tOnxJd7gI7a4w1YK&#xa;+PNphwMa1LjGEuss0qZ/IR3mNveZZ4pl5pljkne5Q4I6955terTpMSBgmibLzDNDKw+mcS/2XlvQ&#xa;brDMfiqjfBKaZZKXuMq3+N4najfPNAC7HBKZmBxleSypAWE1bluV3AGTYIRmWU1x6BwycDoIYVAy&#xa;HnHXonYOKdMzuMalQomBbhPRx+gApR1GlVksxxR5nK3NBEbHCDQyNdobrKs0f9b0Hhl3LZJC4+HR&#xa;pP6JxgYsVxoS0mTiwnMyICBgyHVWOaLLPR5dCLQJih0OCYlYYxHDzoVAC7DPMUvM8TJX+YgHDIku&#xa;dM8D2iQobrLGGgvcSV2/Z3rELumSflvp7BqPl3RJv6V0CdpLeu7oErSX9NzRJWgv6bmjS9Be0nNH&#xa;l6C9pOeOLkF7Sc8dXYL2kp47ugTtJT139P84WGaZUimIJgAAAABJRU5ErkJggg==&#xa;" id="image3163"/>
- <rect width="282.94818" x="28.049149" y="81.03817" rx="0" height="279.91772" ry="0" style="fill:none;fill-opacity:1;stroke:none;stroke-width:5.44153594999999960;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" id="rect2995"/>
- </g>
- <g id="layer2"/>
-</svg>
diff --git a/util/util.pro b/util/util.pro
deleted file mode 100644
index 481fd5f8..00000000
--- a/util/util.pro
+++ /dev/null
@@ -1,4 +0,0 @@
-TEMPLATE = subdirs
-SUBDIRS = qt3d
-include(../pkg.pri)
-!package: SUBDIRS += meshcvt