From fe21dc562504ccb87f8a1b01ea96cc7865064b72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomi=20Korpip=C3=A4=C3=A4?= Date: Thu, 7 Mar 2013 12:28:15 +0200 Subject: Initial version of QtDataVis3D Includes: - initial version of q3dbars - an example using it --- .qmake.conf | 1 + dist/changes-1.0.0 | 0 examples/datavis3d/barchart/barchart.pro | 9 + examples/datavis3d/barchart/main.cpp | 158 + examples/datavis3d/datavis3d.pro | 3 + examples/examples.pro | 2 + qtdatavis3d.pro | 9 + src/datavis3d/Doxyfile | 1196 +++++++ src/datavis3d/Mainpage.dox | 96 + src/datavis3d/common.pri | 7 + src/datavis3d/datavis3d.pro | 24 + src/datavis3d/doc/qtdatavis3d.qdocconf | 47 + src/datavis3d/documentationGroups.dox | 150 + src/datavis3d/engine/engine.pri | 7 + src/datavis3d/engine/engine.qrc | 21 + src/datavis3d/engine/meshes/apeFlat.obj | 3488 ++++++++++++++++++++ src/datavis3d/engine/meshes/apeSmooth.obj | 3049 +++++++++++++++++ src/datavis3d/engine/meshes/backgroudFlat.obj | 32 + src/datavis3d/engine/meshes/backgroudSmooth.obj | 36 + src/datavis3d/engine/meshes/coneFlat.obj | 89 + src/datavis3d/engine/meshes/coneSmooth.obj | 90 + src/datavis3d/engine/meshes/cubeFlat.obj | 47 + src/datavis3d/engine/meshes/cubeSmooth.obj | 50 + src/datavis3d/engine/meshes/cylinderFlat.obj | 299 ++ src/datavis3d/engine/meshes/cylinderSmooth.obj | 330 ++ src/datavis3d/engine/meshes/pyramidFlat.obj | 22 + src/datavis3d/engine/meshes/pyramidSmooth.obj | 23 + src/datavis3d/engine/q3dbars.cpp | 625 ++++ src/datavis3d/engine/q3dbars.h | 60 + src/datavis3d/engine/q3dbars_p.h | 73 + src/datavis3d/engine/q3dwindow.cpp | 184 ++ src/datavis3d/engine/q3dwindow.h | 95 + src/datavis3d/engine/q3dwindow_p.h | 82 + src/datavis3d/engine/shaders/fragmentShader | 30 + src/datavis3d/engine/shaders/fragmentShaderAmbient | 31 + src/datavis3d/engine/shaders/vertexShader | 25 + src/datavis3d/global/global.pri | 5 + src/datavis3d/global/qdatavis3dglobal.h | 88 + src/datavis3d/global/qdatavis3namespace.h | 145 + src/datavis3d/utils/camerahelper.cpp | 103 + src/datavis3d/utils/camerahelper_p.h | 31 + src/datavis3d/utils/meshloader.cpp | 107 + src/datavis3d/utils/meshloader_p.h | 23 + src/datavis3d/utils/utils.pri | 7 + src/datavis3d/utils/vertexindexer.cpp | 137 + src/datavis3d/utils/vertexindexer_p.h | 60 + src/src.pro | 2 + sync.profile | 15 + 48 files changed, 11213 insertions(+) create mode 100644 .qmake.conf create mode 100644 dist/changes-1.0.0 create mode 100644 examples/datavis3d/barchart/barchart.pro create mode 100644 examples/datavis3d/barchart/main.cpp create mode 100644 examples/datavis3d/datavis3d.pro create mode 100644 examples/examples.pro create mode 100644 qtdatavis3d.pro create mode 100644 src/datavis3d/Doxyfile create mode 100644 src/datavis3d/Mainpage.dox create mode 100644 src/datavis3d/common.pri create mode 100644 src/datavis3d/datavis3d.pro create mode 100644 src/datavis3d/doc/qtdatavis3d.qdocconf create mode 100644 src/datavis3d/documentationGroups.dox create mode 100644 src/datavis3d/engine/engine.pri create mode 100644 src/datavis3d/engine/engine.qrc create mode 100644 src/datavis3d/engine/meshes/apeFlat.obj create mode 100644 src/datavis3d/engine/meshes/apeSmooth.obj create mode 100644 src/datavis3d/engine/meshes/backgroudFlat.obj create mode 100644 src/datavis3d/engine/meshes/backgroudSmooth.obj create mode 100644 src/datavis3d/engine/meshes/coneFlat.obj create mode 100644 src/datavis3d/engine/meshes/coneSmooth.obj create mode 100644 src/datavis3d/engine/meshes/cubeFlat.obj create mode 100644 src/datavis3d/engine/meshes/cubeSmooth.obj create mode 100644 src/datavis3d/engine/meshes/cylinderFlat.obj create mode 100644 src/datavis3d/engine/meshes/cylinderSmooth.obj create mode 100644 src/datavis3d/engine/meshes/pyramidFlat.obj create mode 100644 src/datavis3d/engine/meshes/pyramidSmooth.obj create mode 100644 src/datavis3d/engine/q3dbars.cpp create mode 100644 src/datavis3d/engine/q3dbars.h create mode 100644 src/datavis3d/engine/q3dbars_p.h create mode 100644 src/datavis3d/engine/q3dwindow.cpp create mode 100644 src/datavis3d/engine/q3dwindow.h create mode 100644 src/datavis3d/engine/q3dwindow_p.h create mode 100644 src/datavis3d/engine/shaders/fragmentShader create mode 100644 src/datavis3d/engine/shaders/fragmentShaderAmbient create mode 100644 src/datavis3d/engine/shaders/vertexShader create mode 100644 src/datavis3d/global/global.pri create mode 100644 src/datavis3d/global/qdatavis3dglobal.h create mode 100644 src/datavis3d/global/qdatavis3namespace.h create mode 100644 src/datavis3d/utils/camerahelper.cpp create mode 100644 src/datavis3d/utils/camerahelper_p.h create mode 100644 src/datavis3d/utils/meshloader.cpp create mode 100644 src/datavis3d/utils/meshloader_p.h create mode 100644 src/datavis3d/utils/utils.pri create mode 100644 src/datavis3d/utils/vertexindexer.cpp create mode 100644 src/datavis3d/utils/vertexindexer_p.h create mode 100644 src/src.pro create mode 100644 sync.profile diff --git a/.qmake.conf b/.qmake.conf new file mode 100644 index 00000000..4285ae84 --- /dev/null +++ b/.qmake.conf @@ -0,0 +1 @@ +load(qt_build_config) \ No newline at end of file diff --git a/dist/changes-1.0.0 b/dist/changes-1.0.0 new file mode 100644 index 00000000..e69de29b diff --git a/examples/datavis3d/barchart/barchart.pro b/examples/datavis3d/barchart/barchart.pro new file mode 100644 index 00000000..80d6fd6c --- /dev/null +++ b/examples/datavis3d/barchart/barchart.pro @@ -0,0 +1,9 @@ +SOURCES += main.cpp +HEADERS += +QT += datavis3d + +target.path = $$[QT_INSTALL_EXAMPLES]/datavis3d/barchart +INSTALLS += target + +RESOURCES += + diff --git a/examples/datavis3d/barchart/main.cpp b/examples/datavis3d/barchart/main.cpp new file mode 100644 index 00000000..c4acd2f8 --- /dev/null +++ b/examples/datavis3d/barchart/main.cpp @@ -0,0 +1,158 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the documentation 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 Digia Plc 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$ +** +****************************************************************************/ + +#include "q3dbars.h" + +#include +#include +#include + +class ChartDataGenerator : public QObject +{ +public: + explicit ChartDataGenerator(QtDataVis3D::Q3DBars *barchart); + ~ChartDataGenerator(); + + void addBars(); + void changeStyle(); + void start(); + +private: + QtDataVis3D::Q3DBars *m_chart; + QTimer *m_dataTimer; + QTimer *m_testTimer; + int m_columnCount; +}; + +ChartDataGenerator::ChartDataGenerator(QtDataVis3D::Q3DBars *barchart) + : m_chart(barchart) + , m_dataTimer(0) + , m_testTimer(0) + , m_columnCount(20) +{ + m_chart->setBarSpecs(QPointF(2.0f, 0.5f), QPointF(0.0f, 0.0f), true); + m_chart->setupSampleSpace(QPoint(m_columnCount, m_columnCount*2)); +} + +ChartDataGenerator::~ChartDataGenerator() +{ + if (m_dataTimer) { + m_dataTimer->stop(); + delete m_dataTimer; + } + if (m_testTimer) { + m_testTimer->stop(); + delete m_testTimer; + } + delete m_chart; +} + +void ChartDataGenerator::start() +{ + m_dataTimer = new QTimer(); + m_dataTimer->setTimerType(Qt::CoarseTimer); + m_dataTimer->setInterval(100); + QObject::connect(m_dataTimer, &QTimer::timeout, this, &ChartDataGenerator::addBars); + m_dataTimer->start(100); + + // Uncomment this to enable style changing every 10 seconds +// m_testTimer = new QTimer(); +// m_testTimer->setTimerType(Qt::CoarseTimer); +// m_testTimer->setInterval(10000); +// QObject::connect(m_testTimer, &QTimer::timeout, this, &ChartDataGenerator::changeStyle); +// m_testTimer->start(10000); +} + +void ChartDataGenerator::addBars() +{ + QVector data; + for (int i = 0; i < m_columnCount; i++) { + data.append(((float)i / (float)m_columnCount) / 2.0f + (float)(rand() % 30) / 100); + } + m_chart->addDataSet(data); +} + +void ChartDataGenerator::changeStyle() +{ + static int model = 0; + switch (model) { + case 0: + m_chart->setBarType(QtDataVis3D::Q3DBars::Cylinders, false); + break; + case 1: + m_chart->setBarType(QtDataVis3D::Q3DBars::Cylinders, true); + break; + case 2: + m_chart->setBarType(QtDataVis3D::Q3DBars::Cones, false); + break; + case 3: + m_chart->setBarType(QtDataVis3D::Q3DBars::Cones, true); + break; + case 4: + m_chart->setBarType(QtDataVis3D::Q3DBars::Bars, false); + break; + case 5: + m_chart->setBarType(QtDataVis3D::Q3DBars::Bars, true); + break; + case 6: + m_chart->setBarType(QtDataVis3D::Q3DBars::Pyramids, false); + break; + case 7: + m_chart->setBarType(QtDataVis3D::Q3DBars::Pyramids, true); + break; + } + model++; + if (model > 7) + model = 0; +} + +int main(int argc, char **argv) +{ + QGuiApplication app(argc, argv); + + QtDataVis3D::Q3DBars barchart; + barchart.resize(1024, 768); + barchart.show(); + + ChartDataGenerator *generator = new ChartDataGenerator(&barchart); + generator->start(); + + return app.exec(); +} diff --git a/examples/datavis3d/datavis3d.pro b/examples/datavis3d/datavis3d.pro new file mode 100644 index 00000000..0d8273fb --- /dev/null +++ b/examples/datavis3d/datavis3d.pro @@ -0,0 +1,3 @@ +TEMPLATE = subdirs +SUBDIRS += barchart #\ + #spectrum diff --git a/examples/examples.pro b/examples/examples.pro new file mode 100644 index 00000000..b9b7be46 --- /dev/null +++ b/examples/examples.pro @@ -0,0 +1,2 @@ +TEMPLATE = subdirs +SUBDIRS += datavis3d diff --git a/qtdatavis3d.pro b/qtdatavis3d.pro new file mode 100644 index 00000000..8a6fa51e --- /dev/null +++ b/qtdatavis3d.pro @@ -0,0 +1,9 @@ +load(qt_parts) + +# We need opengl, minimum es2 or desktop +!contains(QT_CONFIG, opengl) { + error(QtDataVis3D requires OpenGL!) +} +contains(QT_CONFIG, opengles1) { + error(QtDataVis3D does not support OpenGL ES 1!) +} diff --git a/src/datavis3d/Doxyfile b/src/datavis3d/Doxyfile new file mode 100644 index 00000000..e5d78895 --- /dev/null +++ b/src/datavis3d/Doxyfile @@ -0,0 +1,1196 @@ +# Doxyfile 1.4.5 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project +# +# All text after a hash (#) is considered a comment and will be ignored +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" ") + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded +# by quotes) that should identify the project. + +PROJECT_NAME = QtDataVis3D + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = internal-docs + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create +# 4096 sub-directories (in 2 levels) under the output directory of each output +# format and will distribute the generated files over these directories. +# Enabling this option can be useful when feeding doxygen a huge amount of +# source files, where putting all generated files in the same directory would +# otherwise cause performance problems for the file system. + +CREATE_SUBDIRS = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, +# Dutch, Finnish, French, German, Greek, Hungarian, Italian, Japanese, +# Japanese-en (Japanese with English messages), Korean, Korean-en, Norwegian, +# Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, +# Swedish, and Ukrainian. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator +# that is used to form the text in various listings. Each string +# in this list, if found as the leading text of the brief description, will be +# stripped from the text and the result after processing the whole list, is +# used as the annotated text. Otherwise, the brief description is used as-is. +# If left blank, the following values are used ("$name" is automatically +# replaced with the name of the entity): "The $name class" "The $name widget" +# "The $name file" "is" "provides" "specifies" "contains" +# "represents" "a" "an" "the" + +ABBREVIATE_BRIEF = + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = YES + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the +# path to strip. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of +# the path mentioned in the documentation of a class, which tells +# the reader which header file to include in order to use a class. +# If left blank only the name of the header file containing the class +# definition is used. Otherwise one should specify the include paths that +# are normally passed to the compiler using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful is your file systems +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like the Qt-style comments (thus requiring an +# explicit @brief command for a brief description. + +JAVADOC_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce +# a new page for each member. If set to NO, the documentation of a member will +# be part of the file/class/namespace that contains it. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 4 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C +# sources only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java +# sources only. Doxygen will then generate output that is more tailored for Java. +# For instance, namespaces will be presented as packages, qualified scopes +# will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to +# include (a tag file for) the STL sources as input, then you should +# set this tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. +# func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. + +BUILTIN_STL_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = YES + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = yes + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = YES + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. When set to YES local +# methods, which are defined in the implementation section but not in +# the interface are included in the documentation. +# If set to NO (the default) only methods in the interface are included. + +EXTRACT_LOCAL_METHODS = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = YES + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. + +CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = YES + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = YES + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be +# sorted by fully-qualified names, including namespaces. If set to +# NO (the default), the class list will be sorted only by class name, +# not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the +# alphabetical list. + +SORT_BY_SCOPE_NAME = YES + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or define consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and defines in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = YES + +# If the sources in your project are distributed over multiple directories +# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy +# in the documentation. The default is YES. + +SHOW_DIRECTORIES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from the +# version control system). Doxygen will invoke the program by executing (via +# popen()) the command , where is the value of +# the FILE_VERSION_FILTER tag, and is the name of an input file +# provided by doxygen. Whatever the program writes to standard output +# is used as the file version. See the manual for examples. + +FILE_VERSION_FILTER = + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +# Having it set to not, output a lot of status messages to stdout, we still +# get the warning into the log file +QUIET = YES + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = NO + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be abled to get warnings for +# functions that are documented, but have no documentation for their parameters +# or return value. If set to NO (the default) doxygen will only warn about +# wrong or incomplete parameter documentation, but not about the absence of +# documentation. + +WARN_NO_PARAMDOC = NO + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. Optionally the format may contain +# $version, which will be replaced by the version of the file (if it could +# be obtained via FILE_VERSION_FILTER) + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = internal-docs/doxygen.log + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = . ../../tests/auto/xmlpatternsxqts/ ../../tests/auto/xmlpatternsview + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: + +FILE_PATTERNS = *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.dox *.gperf + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = YES + +# The EXCLUDE tag can be used to specify files and/or directories that should +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used select whether or not files or +# directories that are symbolic links (a Unix filesystem feature) are excluded +# from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. Note that the wildcards are matched +# against the file with absolute path, so to exclude all test directories +# for example use the pattern */test/* + +# The Qt API uses qdoc and Doxygen doesn't like its tags, so exclude the q* files. +EXCLUDE_PATTERNS = *.moc *.moc.cpp moc_*.cpp ui_*.h + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = YES + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command , where +# is the value of the INPUT_FILTER tag, and is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. If FILTER_PATTERNS is specified, this tag will be +# ignored. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: +# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further +# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER +# is applied to all files. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. + +SOURCE_BROWSER = YES + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C and C++ comments will always remain visible. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES (the default) +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = YES + +# If the REFERENCES_RELATION tag is set to YES (the default) +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = YES + +# If the USE_HTAGS tag is set to YES then the references to source code +# will point to the HTML generated by the htags(1) tool instead of doxygen +# built-in source browser. The htags tool is part of GNU's global source +# tagging system (see http://www.gnu.org/software/global/global.html). You +# will need version 4.8.6 or higher. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = NO + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If the tag is left blank doxygen +# will generate a default style sheet. Note that doxygen will try to copy +# the style sheet file to the HTML output directory, so don't put your own +# stylesheet in the HTML output directory as well, or it will be erased! + +HTML_STYLESHEET = + +# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, +# files or namespaces will be aligned in HTML using tables. If set to +# NO a bullet list will be used. + +HTML_ALIGN_MEMBERS = YES + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index at +# top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. + +DISABLE_INDEX = NO + +# This tag can be used to set the number of enum values (range [1..20]) +# that doxygen will group on one line in the generated HTML documentation. + +ENUM_VALUES_PER_LINE = 4 + +# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be +# generated containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, +# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are +# probably better off using the HTML help feature. + +GENERATE_TREEVIEW = NO + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = NO + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, a4wide, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = a4wide + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = NO + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = NO + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. This is useful +# if you want to understand what is going on. On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = YES + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_DEFINED tags. + +EXPAND_ONLY_PREDEF = YES + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# in the INCLUDE_PATH (see below) will be search if a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + +PREDEFINED = Q_SLOTS="slots" \ + Q_SIGNALS="signals" + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all function-like macros that are alone +# on a line, have an all uppercase name, and do not end with a semicolon. Such +# function macros are typically used for boiler-plate code, and will confuse +# the parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. +# Optionally an initial location of the external documentation +# can be added for each tagfile. The format of a tag file without +# this location is as follows: +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths or +# URLs. If a location is present for each tag, the installdox tool +# does not have to be run to correct the links. +# Note that each tag file must have a unique name +# (where the name does NOT include the path) +# If a tag file is not located in the directory in which doxygen +# is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base +# or super classes. Setting the tag to NO turns the diagrams off. Note that +# this option is superseded by the HAVE_DOT option below. This is only a +# fallback. It is recommended to install and use dot, since it yields more +# powerful graphs. + +CLASS_DIAGRAMS = YES + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = YES + +CALLER_GRAPH = NO + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# the CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = YES + +# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for groups, showing the direct groups dependencies + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = NO + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will +# generate a call dependency graph for every global function or class method. +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable call graphs for selected +# functions only using the \callgraph command. + +CALL_GRAPH = NO + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = YES + +# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES +# then doxygen will show the dependencies a directory has on other directories +# in a graphical way. The dependency relations are determined by the #include +# relations between the files in the directories. + +DIRECTORY_GRAPH = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are png, jpg, or gif +# If left blank png will be used. + +DOT_IMAGE_FORMAT = png + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = schema/doc/ + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, which results in a white background. +# Warning: Depending on the platform used, enabling this option may lead to +# badly anti-aliased labels on the edges of a graph (i.e. they become hard to +# read). + +DOT_TRANSPARENT = YES + +# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) +# support this, this feature is disabled by default. + +DOT_MULTI_TARGETS = YES + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- + +# The SEARCHENGINE tag specifies whether or not a search engine should be +# used. If set to NO the values of all tags below this one will be ignored. + +SEARCHENGINE = NO diff --git a/src/datavis3d/Mainpage.dox b/src/datavis3d/Mainpage.dox new file mode 100644 index 00000000..973bc46f --- /dev/null +++ b/src/datavis3d/Mainpage.dox @@ -0,0 +1,96 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the QtXmlPatterns module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, 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, Digia gives you certain additional +** rights. These rights are described in the Digia 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. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. + +/** + * @mainpage QtXmlPatterns -- an implementation of XML technologies + * + * - @ref Patternist_info + * - @ref Patternist_writingDoxygen + * + * @section Patternist_info Overview + * + * This is the internal developer documentation for QtXmlPatterns. Please refer + * to Qt Assistant for usage documentation. + * + * The documentation that you are reading right now, can be generated by + * running doxygen in this directory without arguments. The generated + * documentation can subsequently be browsed from + * internal-docs/html/index.html. + * + * @subsection Patternist_writingDoxygen Doxygen Conventions + * + * Doxygen conventions, are as follows. + * + * - @@returns and @@param paragraphs are terminated with a period. + * - When XPath or XQuery expressions/queries appears in the Doxygen comments, wrap them + * in the @c tt HTML tag. + * - Classes and free standing functions should have an @@author tag, specifying who + * is the main author of it. + * - No code examples should appear directly in the Doxygen comments, they should be included with + * @@include or @@dontinclude. + * - The following terms are marked with @@c or the @c tt HTML tag: + * - @c NaN + * - @c true and @c false, when referred to as boolean values + * - All QNames and item types. For example, item\() and xs:string. Remember + * to use the @c tt HTML tag in these cases in order to include non-trivial characters + * such as paranteses + * - @c null + * - @c stderr, @c stdout, and @c stdin + * + * + * The current Doxygen comments does in some cases not adhere to this, but the + * idea is to harmonize in that direction over time. + * + * PatternistSDK, located in the test sources, is documented in the + * PatternistSDK Doxygen module. + * + * @author Frans Englich + */ diff --git a/src/datavis3d/common.pri b/src/datavis3d/common.pri new file mode 100644 index 00000000..8532fc77 --- /dev/null +++ b/src/datavis3d/common.pri @@ -0,0 +1,7 @@ +# This qmake file is included by all Patternist projects and contains common Qt defines, +# compiler warnings, and include paths. + +INCLUDEPATH += $$PWD/engine \ + $$PWD/global \ + $$PWD/utils + diff --git a/src/datavis3d/datavis3d.pro b/src/datavis3d/datavis3d.pro new file mode 100644 index 00000000..602e42d3 --- /dev/null +++ b/src/datavis3d/datavis3d.pro @@ -0,0 +1,24 @@ +TARGET = QtDataVis3D +QT = core gui qml + +DEFINES += QTCOMMERCIALDATAVIS3D_LIBRARY +#DEFINES += QT_NO_USING_NAMESPACE +#win32-msvc*|win32-icc:QMAKE_LFLAGS += /BASE:0x61000000 + +QMAKE_DOCS = $$PWD/doc/qtdatavis3d.qdocconf + +load(qt_module) + +include($$PWD/common.pri) +include($$PWD/engine/engine.pri) +include($$PWD/global/global.pri) +include($$PWD/utils/utils.pri) + +wince* { + # The Microsoft MIPS compiler crashes if /Og is specified. + # -O2/1 expands to /Og plus additional arguments. + contains(DEFINES, MIPS) { + QMAKE_CXXFLAGS_RELEASE ~= s/-O2/-Oi -Ot -Oy -Ob2/ + QMAKE_CXXFLAGS_RELEASE ~= s/-O1/-Os -Oy -Ob2/ + } +} diff --git a/src/datavis3d/doc/qtdatavis3d.qdocconf b/src/datavis3d/doc/qtdatavis3d.qdocconf new file mode 100644 index 00000000..c2c084b3 --- /dev/null +++ b/src/datavis3d/doc/qtdatavis3d.qdocconf @@ -0,0 +1,47 @@ +include($QT_INSTALL_DOCS/global/qt-module-defaults.qdocconf) + +# Name of the project which must match the outputdir. Determines the .index file +project = qtdatavis3d + +# Directories in which to search for files to document and images. +# By default set to the root directory of the project for sources +# and headers and qdoc will therefore generate output for each file. +# Images should be placed in /dic/images and examples in +# /examples. +# Paths are relative to the location of this file. +exampledirs += ../../../examples \ + snippets + +headerdirs += .. +imagedirs += images +sourcedirs += .. + +depends += qtcore qtgui + +# The following parameters are for creating a qhp file, the qhelpgenerator +# program can convert the qhp file into a qch file which can be opened in +# Qt Assistant and/or Qt Creator. + +# Defines the name of the project. You cannot use operators (+, =, -) in +# the name. Properties for this project are set using a qhp..property +# format. +qhp.projects = qtdatavis3d + +# Sets the name of the output qhp file. +qhp.qtdatavis3d.file = qtdatavis3d.qhp + +# Namespace for the output file. This namespace is used to distinguish between +# different documentation files in Creator/Assistant. +qhp.qtdatavis3d.namespace = org.qt-project.qtdatavis3d.501 + +# Title for the package, will be the main title for the package in +# Assistant/Creator. +qhp.qtdatavis3d.indexTitle = Qt Data Visualization 3D + +# Only update the name of the project for the next variables. +qhp.qtdatavis3d.virtualFolder = qtdatavis3d +qhp.qtdatavis3d.subprojects = classes +qhp.qtdatavis3d.subprojects.classes.title = C++ Classes +qhp.qtdatavis3d.subprojects.classes.indexTitle = Qt Data Visualization 3D C++ Classes +qhp.qtdatavis3d.subprojects.classes.selectors = class fake:headerfile +qhp.qtdatavis3d.subprojects.classes.sortPages = true diff --git a/src/datavis3d/documentationGroups.dox b/src/datavis3d/documentationGroups.dox new file mode 100644 index 00000000..ed9c3f1c --- /dev/null +++ b/src/datavis3d/documentationGroups.dox @@ -0,0 +1,150 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the QtXmlPatterns module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, 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, Digia gives you certain additional +** rights. These rights are described in the Digia 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. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. + +/** + * @file + * @short Contains Doxygen documentation for groups. + */ + +namespace QPatternist +{ + /** + * @short The abstract syntax tree nodes that implements the builtin + * functions, such as @c fn:concat(). + * + * @defgroup Patternist_functions Function Implementations + * @author Frans Englich + */ + + /** + * @short The abstract syntax tree nodes that is generated for XPath, + * XQuery, and XSL-T code. + * + * XPath's approach of compilation is traditional. An Abstract Syntax + * Tree(AST) is built, where the Expression class is the abstract base + * class for all kinds of implementations of expressions. + * + * What perhaps can be said to be characteristic for Patternist is that the + * base class, Expression, performs a lot of work, and that sub-classes + * declares what specific behaviors they need, which the Expression's + * functions then bring into action. + * + * XPath expressions often have different amount of operands. For example, + * the 'and' expression takes two, the context item(".") none, and the + * if-expression three. To help expression implementations with that, there + * exist the abstract EmptyContainer, SingleContainer, PairContainer, + * TripleContainer, and UnlimitedContainer classes for avoiding duplicating + * code. + * + * @defgroup Patternist_expressions Expressions + * @author Frans Englich + */ + + /** + * @short Various classes that contains small utility functions. + * + * @defgroup Patternist Utility Classes + * @author Frans Englich + */ + + /** + * @short Classes for the type system in the XQuery & XSL-T language. + * + * @defgroup Patternist_types Type system + * @author Frans Englich + */ + + /** + * @defgroup Patternist_xdm XQuery/XPath Data Model + * @author Frans Englich + */ + + /** + * @short Patternist's family of iterators in one of the most central parts + * of Patternist's API, and are responsible for carrying, and typically + * also creating, data. + * + * An iterator, which always is an Iterator sub-class, is similar to a + * Java-style iterator. What signifies Patternist's iterators is that they + * almost always contains business logic(which is the cause to their + * efficiency). + * + * An example which illustrates this principle is the RangeIterator. When + * the RangeExpression is told to create a sequence of integers between 1 + * and 1000, it doesn't enter a loop that allocates 1000 Integer instances, + * but instead return an RangeIterator that incrementally creates the + * numbers when asked to do so via its RangeIterator::next() function. If + * it turns out that the expression that has the range expression as + * operand only needs three items from it, that is what gets created, not + * 1000. + * + * All iterators operates by that principle, perhaps suitably labeled as + * "pull-based", "lazy loaded" or "serialized". Central for the XPath + * language is that it filters and selects data, and the iterators supports + * this well by letting the demand of the filter expressions(the callees) + * decide how "much" source that gets computed. In this way the evaluation + * of an expression tree can lead to a chain of pipelined iterators, where + * the first asks the second for data and then performs its specific + * operations, the second subsequently asks the third, and so forth. + * + * However, the iterators are not limited to be used for representing + * sequences of items in the XPath Data Model. The Iterator is + * parameterized on one argument, meaning any type of "units" can be + * iterated, be it Item or any other. One use of this is in the + * ExpressionSequence(which implements the comma operator) where it creates + * Iterator instances over Expression instances -- its operands. The + * parameterization is often used in combination with the MappingIterator + * and the MappingCallback. + * + * @defgroup Patternist_iterators Iterators + * @author Frans Englich + */ +} diff --git a/src/datavis3d/engine/engine.pri b/src/datavis3d/engine/engine.pri new file mode 100644 index 00000000..f13478e7 --- /dev/null +++ b/src/datavis3d/engine/engine.pri @@ -0,0 +1,7 @@ +SOURCES += $$PWD/q3dwindow.cpp $$PWD/q3dbars.cpp + +HEADERS += $$PWD/q3dwindow_p.h $$PWD/q3dwindow.h \ + $$PWD/q3dbars.h $$PWD/q3dbars_p.h + +RESOURCES += \ + engine/engine.qrc diff --git a/src/datavis3d/engine/engine.qrc b/src/datavis3d/engine/engine.qrc new file mode 100644 index 00000000..e69eb670 --- /dev/null +++ b/src/datavis3d/engine/engine.qrc @@ -0,0 +1,21 @@ + + + meshes/coneFlat.obj + meshes/coneSmooth.obj + meshes/pyramidFlat.obj + meshes/pyramidSmooth.obj + meshes/cubeFlat.obj + meshes/cubeSmooth.obj + meshes/cylinderFlat.obj + meshes/cylinderSmooth.obj + meshes/apeFlat.obj + meshes/apeSmooth.obj + meshes/backgroudFlat.obj + meshes/backgroudSmooth.obj + + + shaders/fragmentShader + shaders/vertexShader + shaders/fragmentShaderAmbient + + diff --git a/src/datavis3d/engine/meshes/apeFlat.obj b/src/datavis3d/engine/meshes/apeFlat.obj new file mode 100644 index 00000000..1e6d5fbf --- /dev/null +++ b/src/datavis3d/engine/meshes/apeFlat.obj @@ -0,0 +1,3488 @@ +# Blender v2.66 (sub 0) OBJ File: 'cylinder.blend' +# www.blender.org +o Suzanne +v -2.122357 0.164062 -1.198706 +v -2.997357 0.164062 -1.198706 +v -2.059857 0.093750 -1.276831 +v -3.059857 0.093750 -1.276831 +v -2.012982 0.054687 -1.386206 +v -3.106732 0.054687 -1.386206 +v -2.208294 -0.023438 -1.347144 +v -2.911419 -0.023438 -1.347144 +v -2.208294 0.031250 -1.245581 +v -2.911419 0.031250 -1.245581 +v -2.208294 0.132812 -1.183081 +v -2.911419 0.132812 -1.183081 +v -2.286419 0.164062 -1.167456 +v -2.833294 0.164062 -1.167456 +v -2.356732 0.093750 -1.222144 +v -2.762982 0.093750 -1.222144 +v -2.403607 0.054687 -1.315894 +v -2.716107 0.054687 -1.315894 +v -2.481732 0.242187 -1.308081 +v -2.637982 0.242187 -1.308081 +v -2.419232 0.242187 -1.222144 +v -2.700482 0.242187 -1.222144 +v -2.317669 0.242187 -1.167456 +v -2.802044 0.242187 -1.167456 +v -2.286419 0.328125 -1.167456 +v -2.833294 0.328125 -1.167456 +v -2.356732 0.390625 -1.222144 +v -2.762982 0.390625 -1.222144 +v -2.403607 0.437500 -1.315894 +v -2.716107 0.437500 -1.315894 +v -2.208294 0.515625 -1.347144 +v -2.911419 0.515625 -1.347144 +v -2.208294 0.453125 -1.245581 +v -2.911419 0.453125 -1.245581 +v -2.208294 0.359375 -1.183081 +v -2.911419 0.359375 -1.183081 +v -2.122357 0.328125 -1.198706 +v -2.997357 0.328125 -1.198706 +v -2.059857 0.390625 -1.276831 +v -3.059857 0.390625 -1.276831 +v -2.012982 0.437500 -1.386206 +v -3.106732 0.437500 -1.386206 +v -1.934857 0.242187 -1.401831 +v -3.184857 0.242187 -1.401831 +v -1.997357 0.242187 -1.292456 +v -3.122357 0.242187 -1.292456 +v -2.091107 0.242187 -1.206519 +v -3.028607 0.242187 -1.206519 +v -2.083294 0.242187 -1.190894 +v -3.036419 0.242187 -1.190894 +v -2.114544 0.335937 -1.183081 +v -3.005169 0.335937 -1.183081 +v -2.208294 0.375000 -1.159644 +v -2.911419 0.375000 -1.159644 +v -2.294232 0.335937 -1.144019 +v -2.825482 0.335937 -1.144019 +v -2.333294 0.242187 -1.144019 +v -2.786419 0.242187 -1.144019 +v -2.294232 0.156250 -1.144019 +v -2.825482 0.156250 -1.144019 +v -2.208294 0.242187 -1.136206 +v -2.911419 0.242187 -1.136206 +v -2.208294 0.117187 -1.159644 +v -2.911419 0.117187 -1.159644 +v -2.114544 0.156250 -1.183081 +v -3.005169 0.156250 -1.183081 +v -2.559857 0.429687 -1.222144 +v -2.559857 0.351562 -1.144019 +v -2.559857 -0.679688 -1.229956 +v -2.559857 -0.320313 -1.183081 +v -2.559857 -0.187500 -1.167456 +v -2.559857 -0.773438 -1.245581 +v -2.559857 0.406250 -1.362769 +v -2.559857 0.570312 -1.394019 +v -2.559857 0.898438 -2.511206 +v -2.559857 0.562500 -2.815894 +v -2.559857 0.070313 -2.792456 +v -2.559857 -0.382812 -2.315894 +v -2.356732 -0.187500 -1.401831 +v -2.762982 -0.187500 -1.401831 +v -2.247357 -0.437500 -1.394019 +v -2.872357 -0.437500 -1.394019 +v -2.208294 -0.695312 -1.394019 +v -2.911419 -0.695312 -1.394019 +v -2.192669 -0.890625 -1.433081 +v -2.927044 -0.890625 -1.433081 +v -2.231732 -0.945312 -1.440894 +v -2.887982 -0.945312 -1.440894 +v -2.380169 -0.968750 -1.409644 +v -2.739544 -0.968750 -1.409644 +v -2.559857 -0.984375 -1.386206 +v -2.122357 -0.140625 -1.433081 +v -2.997357 -0.140625 -1.433081 +v -1.927044 -0.039063 -1.425269 +v -3.192669 -0.039063 -1.425269 +v -1.731732 0.148437 -1.519019 +v -3.387982 0.148437 -1.519019 +v -1.700482 0.429687 -1.370581 +v -3.419232 0.429687 -1.370581 +v -1.848919 0.484375 -1.339331 +v -3.270794 0.484375 -1.339331 +v -2.067669 0.601562 -1.276831 +v -3.052044 0.601562 -1.276831 +v -2.239544 0.757812 -1.229956 +v -2.880169 0.757812 -1.229956 +v -2.403607 0.718750 -1.206519 +v -2.716107 0.718750 -1.206519 +v -2.497357 0.492187 -1.214331 +v -2.622357 0.492187 -1.214331 +v -2.395794 0.414062 -1.190894 +v -2.723919 0.414062 -1.190894 +v -2.434857 0.304687 -1.198706 +v -2.684857 0.304687 -1.198706 +v -2.356732 0.093750 -1.222144 +v -2.762982 0.093750 -1.222144 +v -2.184857 0.015625 -1.261206 +v -2.934857 0.015625 -1.261206 +v -2.067669 0.062500 -1.292456 +v -3.052044 0.062500 -1.292456 +v -1.934857 0.187500 -1.315894 +v -3.184857 0.187500 -1.315894 +v -1.919232 0.296875 -1.315894 +v -3.200482 0.296875 -1.315894 +v -1.958294 0.375000 -1.300269 +v -3.161419 0.375000 -1.300269 +v -2.130169 0.437500 -1.245581 +v -2.989544 0.437500 -1.245581 +v -2.309857 0.468750 -1.206519 +v -2.809857 0.468750 -1.206519 +v -2.559857 -0.765625 -1.229956 +v -2.450482 -0.718750 -1.229956 +v -2.669232 -0.718750 -1.229956 +v -2.442669 -0.835938 -1.253394 +v -2.677044 -0.835938 -1.253394 +v -2.497357 -0.882813 -1.269019 +v -2.622357 -0.882813 -1.269019 +v -2.559857 -0.890625 -1.276831 +v -2.559857 -0.195313 -1.214331 +v -2.559857 -0.140625 -1.222144 +v -2.458294 -0.148438 -1.222144 +v -2.661419 -0.148438 -1.222144 +v -2.434857 -0.226563 -1.214331 +v -2.684857 -0.226563 -1.214331 +v -2.473919 -0.289063 -1.222144 +v -2.645794 -0.289063 -1.222144 +v -2.161419 -0.046875 -1.292456 +v -2.958294 -0.046875 -1.292456 +v -1.942669 0.054687 -1.339331 +v -3.177044 0.054687 -1.339331 +v -1.833294 0.203125 -1.362769 +v -3.286419 0.203125 -1.362769 +v -1.817669 0.375000 -1.308081 +v -3.302044 0.375000 -1.308081 +v -1.872357 0.414062 -1.237769 +v -3.247357 0.414062 -1.237769 +v -2.122357 0.546875 -1.167456 +v -2.997357 0.546875 -1.167456 +v -2.247357 0.640625 -1.128394 +v -2.872357 0.640625 -1.128394 +v -2.356732 0.617187 -1.112769 +v -2.762982 0.617187 -1.112769 +v -2.458294 0.429687 -1.120581 +v -2.661419 0.429687 -1.120581 +v -2.434857 -0.101563 -1.151831 +v -2.684857 -0.101563 -1.151831 +v -2.348919 -0.445313 -1.253394 +v -2.770794 -0.445313 -1.253394 +v -2.309857 -0.703125 -1.276831 +v -2.809857 -0.703125 -1.276831 +v -2.294232 -0.820312 -1.300269 +v -2.825482 -0.820312 -1.300269 +v -2.325482 -0.914062 -1.331519 +v -2.794232 -0.914062 -1.331519 +v -2.395794 -0.929688 -1.331519 +v -2.723919 -0.929688 -1.331519 +v -2.559857 -0.945312 -1.323706 +v -2.559857 0.046875 -1.237769 +v -2.559857 0.210937 -1.198706 +v -2.231732 0.476562 -1.222144 +v -2.887982 0.476562 -1.222144 +v -2.395794 0.140625 -1.214331 +v -2.723919 0.140625 -1.214331 +v -2.427044 0.210937 -1.206519 +v -2.692669 0.210937 -1.206519 +v -2.442669 -0.687500 -1.229956 +v -2.677044 -0.687500 -1.229956 +v -2.481732 -0.445313 -1.214331 +v -2.637982 -0.445313 -1.214331 +v -2.559857 -0.445313 -1.214331 +v -2.559857 -0.328125 -1.222144 +v -2.466107 -0.273438 -1.183081 +v -2.653607 -0.273438 -1.183081 +v -2.427044 -0.226563 -1.167456 +v -2.692669 -0.226563 -1.167456 +v -2.450482 -0.132813 -1.183081 +v -2.669232 -0.132813 -1.183081 +v -2.520794 -0.125000 -1.183081 +v -2.598919 -0.125000 -1.183081 +v -2.559857 -0.203125 -1.136206 +v -2.512982 -0.148438 -1.151831 +v -2.606732 -0.148438 -1.151831 +v -2.466107 -0.156250 -1.151831 +v -2.653607 -0.156250 -1.151831 +v -2.450482 -0.226563 -1.136206 +v -2.669232 -0.226563 -1.136206 +v -2.481732 -0.250000 -1.159644 +v -2.637982 -0.250000 -1.159644 +v -2.559857 -0.289063 -1.159644 +v -2.302044 -0.312500 -1.409644 +v -2.817669 -0.312500 -1.409644 +v -2.395794 -0.242188 -1.253394 +v -2.723919 -0.242188 -1.253394 +v -2.380169 -0.312500 -1.253394 +v -2.739544 -0.312500 -1.253394 +v -2.325482 -0.250000 -1.409644 +v -2.794232 -0.250000 -1.409644 +v -2.559857 -0.875000 -1.276831 +v -2.512982 -0.867188 -1.276831 +v -2.606732 -0.867188 -1.276831 +v -2.466107 -0.820313 -1.253394 +v -2.653607 -0.820313 -1.253394 +v -2.466107 -0.742188 -1.237769 +v -2.653607 -0.742188 -1.237769 +v -2.559857 -0.781250 -1.308081 +v -2.466107 -0.750000 -1.300269 +v -2.653607 -0.750000 -1.300269 +v -2.466107 -0.812500 -1.323706 +v -2.653607 -0.812500 -1.323706 +v -2.512982 -0.851562 -1.331519 +v -2.606732 -0.851562 -1.331519 +v -2.559857 -0.859375 -1.331519 +v -2.387982 0.218750 -1.183081 +v -2.731732 0.218750 -1.183081 +v -2.372357 0.156250 -1.190894 +v -2.747357 0.156250 -1.190894 +v -2.223919 0.429687 -1.206519 +v -2.895794 0.429687 -1.206519 +v -2.286419 0.421875 -1.190894 +v -2.833294 0.421875 -1.190894 +v -2.137982 0.398437 -1.190894 +v -2.981732 0.398437 -1.190894 +v -1.997357 0.351562 -1.269019 +v -3.122357 0.351562 -1.269019 +v -1.973919 0.289062 -1.276831 +v -3.145794 0.289062 -1.276831 +v -1.981732 0.195312 -1.284644 +v -3.137982 0.195312 -1.284644 +v -2.083294 0.101562 -1.245581 +v -3.036419 0.101562 -1.245581 +v -2.184857 0.062500 -1.222144 +v -2.934857 0.062500 -1.222144 +v -2.333294 0.109375 -1.183081 +v -2.786419 0.109375 -1.183081 +v -2.380169 0.296875 -1.183081 +v -2.739544 0.296875 -1.183081 +v -2.348919 0.375000 -1.183081 +v -2.770794 0.375000 -1.183081 +v -2.325482 0.359375 -1.206519 +v -2.794232 0.359375 -1.206519 +v -2.364544 0.296875 -1.206519 +v -2.755169 0.296875 -1.206519 +v -2.317669 0.125000 -1.206519 +v -2.802044 0.125000 -1.206519 +v -2.184857 0.085937 -1.237769 +v -2.934857 0.085937 -1.237769 +v -2.098919 0.117187 -1.261206 +v -3.020794 0.117187 -1.261206 +v -2.012982 0.210937 -1.292456 +v -3.106732 0.210937 -1.292456 +v -2.005169 0.281250 -1.292456 +v -3.114544 0.281250 -1.292456 +v -2.028607 0.335937 -1.284644 +v -3.091107 0.335937 -1.284644 +v -2.145794 0.390625 -1.214331 +v -2.973919 0.390625 -1.214331 +v -2.278607 0.398437 -1.198706 +v -2.841107 0.398437 -1.198706 +v -2.223919 0.406250 -1.214331 +v -2.895794 0.406250 -1.214331 +v -2.356732 0.171875 -1.214331 +v -2.762982 0.171875 -1.214331 +v -2.364544 0.226562 -1.214331 +v -2.755169 0.226562 -1.214331 +v -2.450482 0.460937 -1.354956 +v -2.669232 0.460937 -1.354956 +v -2.364544 0.664062 -1.347144 +v -2.755169 0.664062 -1.347144 +v -2.223919 0.687500 -1.370581 +v -2.895794 0.687500 -1.370581 +v -2.075482 0.554688 -1.409644 +v -3.044232 0.554688 -1.409644 +v -1.880169 0.453125 -1.472144 +v -3.239544 0.453125 -1.472144 +v -1.762982 0.406250 -1.503394 +v -3.356732 0.406250 -1.503394 +v -1.786419 0.164062 -1.589331 +v -3.333294 0.164062 -1.589331 +v -1.958294 -0.000000 -1.550269 +v -3.161419 -0.000000 -1.550269 +v -2.122357 -0.093750 -1.495581 +v -2.997357 -0.093750 -1.495581 +v -2.559857 0.898438 -1.675269 +v -2.559857 0.984375 -2.042456 +v -2.559857 -0.195312 -2.636206 +v -2.559857 -0.460938 -1.776831 +v -2.559857 -0.976562 -1.503394 +v -2.559857 -0.804688 -1.620581 +v -2.559857 -0.570312 -1.644019 +v -2.559857 -0.484375 -1.683081 +v -1.708294 0.234375 -1.909644 +v -3.411419 0.234375 -1.909644 +v -1.700482 0.320312 -2.011206 +v -3.419232 0.320312 -2.011206 +v -1.786419 0.265625 -2.401831 +v -3.333294 0.265625 -2.401831 +v -2.098919 0.437500 -2.667456 +v -3.020794 0.437500 -2.667456 +v -1.825482 -0.046875 -1.894019 +v -3.294232 -0.046875 -1.894019 +v -1.966107 -0.125000 -2.128394 +v -3.153607 -0.125000 -2.128394 +v -1.919232 -0.007812 -2.394019 +v -3.200482 -0.007812 -2.394019 +v -2.223919 0.054688 -2.628394 +v -2.895794 0.054688 -2.628394 +v -2.325482 -0.351563 -1.558081 +v -2.794232 -0.351563 -1.558081 +v -2.380169 -0.414062 -1.706519 +v -2.739544 -0.414062 -1.706519 +v -2.270794 -0.710938 -1.581519 +v -2.848919 -0.710938 -1.581519 +v -2.309857 -0.500000 -1.573706 +v -2.809857 -0.500000 -1.573706 +v -2.231732 -0.914062 -1.565894 +v -2.887982 -0.914062 -1.565894 +v -2.419232 -0.757812 -1.597144 +v -2.700482 -0.757812 -1.597144 +v -2.434857 -0.539062 -1.604956 +v -2.684857 -0.539062 -1.604956 +v -2.395794 -0.945312 -1.526831 +v -2.723919 -0.945312 -1.526831 +v -2.341107 -0.281250 -1.534644 +v -2.778607 -0.281250 -1.534644 +v -2.348919 -0.226563 -1.495581 +v -2.770794 -0.226563 -1.495581 +v -2.356732 -0.171875 -1.464331 +v -2.762982 -0.171875 -1.464331 +v -2.348919 -0.390625 -1.800269 +v -2.770794 -0.390625 -1.800269 +v -2.262982 -0.312500 -2.229956 +v -2.856732 -0.312500 -2.229956 +v -2.216107 -0.148437 -2.503394 +v -2.903607 -0.148437 -2.503394 +v -2.106732 0.867188 -2.347144 +v -3.012982 0.867188 -2.347144 +v -2.106732 0.929688 -2.034644 +v -3.012982 0.929688 -2.034644 +v -2.106732 0.851562 -1.729956 +v -3.012982 0.851562 -1.729956 +v -2.098919 0.523438 -1.534644 +v -3.020794 0.523438 -1.534644 +v -1.833294 0.406250 -1.628394 +v -3.286419 0.406250 -1.628394 +v -1.927044 0.453125 -1.683081 +v -3.192669 0.453125 -1.683081 +v -1.919232 0.703125 -1.909644 +v -3.200482 0.703125 -1.909644 +v -1.762982 0.562500 -1.839331 +v -3.356732 0.562500 -1.839331 +v -1.762982 0.617188 -2.081519 +v -3.356732 0.617188 -2.081519 +v -1.919232 0.750000 -2.159644 +v -3.200482 0.750000 -2.159644 +v -1.919232 0.679688 -2.409644 +v -3.200482 0.679688 -2.409644 +v -1.762982 0.539062 -2.323706 +v -3.356732 0.539062 -2.323706 +v -1.942669 0.328125 -2.550269 +v -3.177044 0.328125 -2.550269 +v -2.075482 0.023438 -2.511206 +v -3.044232 0.023438 -2.511206 +v -1.739544 0.328125 -2.167456 +v -3.380169 0.328125 -2.167456 +v -2.153607 -0.171875 -1.815894 +v -2.966107 -0.171875 -1.815894 +v -2.130169 -0.195312 -2.175269 +v -2.989544 -0.195312 -2.175269 +v -1.669232 0.406250 -2.198706 +v -3.450482 0.406250 -2.198706 +v -1.786419 -0.140625 -2.089331 +v -3.333294 -0.140625 -2.089331 +v -1.520794 -0.101562 -2.292456 +v -3.598919 -0.101562 -2.292456 +v -1.278607 0.054688 -2.394019 +v -3.841107 0.054688 -2.394019 +v -1.208294 0.320313 -2.386206 +v -3.911419 0.320313 -2.386206 +v -1.325482 0.507812 -2.386206 +v -3.794232 0.507812 -2.386206 +v -1.536419 0.476562 -2.276831 +v -3.583294 0.476562 -2.276831 +v -1.544232 0.414062 -2.253394 +v -3.575482 0.414062 -2.253394 +v -1.372357 0.437500 -2.354956 +v -3.747357 0.437500 -2.354956 +v -1.294232 0.289063 -2.370581 +v -3.825482 0.289063 -2.370581 +v -1.348919 0.078125 -2.370581 +v -3.770794 0.078125 -2.370581 +v -1.528607 -0.039062 -2.269019 +v -3.591107 -0.039062 -2.269019 +v -1.731732 -0.070312 -2.097144 +v -3.387982 -0.070312 -2.097144 +v -1.637982 0.359375 -2.183081 +v -3.481732 0.359375 -2.183081 +v -1.614544 0.304688 -2.253394 +v -3.505169 0.304688 -2.253394 +v -1.677044 -0.023437 -2.175269 +v -3.442669 -0.023437 -2.175269 +v -1.520794 0.000000 -2.331519 +v -3.598919 0.000000 -2.331519 +v -1.372357 0.093750 -2.409644 +v -3.747357 0.093750 -2.409644 +v -1.325482 0.250000 -2.409644 +v -3.794232 0.250000 -2.409644 +v -1.387982 0.359375 -2.401831 +v -3.731732 0.359375 -2.401831 +v -1.536419 0.343750 -2.323706 +v -3.583294 0.343750 -2.323706 +v -1.716107 0.289062 -2.175269 +v -3.403607 0.289062 -2.175269 +v -1.723919 0.171875 -2.237769 +v -3.395794 0.171875 -2.237769 +v -1.802044 0.093750 -2.237769 +v -3.317669 0.093750 -2.237769 +v -1.739544 0.085938 -2.237769 +v -3.380169 0.085938 -2.237769 +v -1.716107 0.015625 -2.237769 +v -3.403607 0.015625 -2.237769 +v -1.747357 -0.015625 -2.237769 +v -3.372357 -0.015625 -2.237769 +v -1.833294 -0.000000 -2.034644 +v -3.286419 -0.000000 -2.034644 +v -1.841107 -0.023438 -2.136206 +v -3.278607 -0.023438 -2.136206 +v -1.841107 0.039062 -2.151831 +v -3.278607 0.039062 -2.151831 +v -1.762982 0.203125 -2.175269 +v -3.356732 0.203125 -2.175269 +v -1.669232 0.242188 -2.229956 +v -3.450482 0.242188 -2.229956 +v -1.669232 0.234375 -2.284644 +v -3.450482 0.234375 -2.284644 +v -1.747357 -0.015625 -2.284644 +v -3.372357 -0.015625 -2.284644 +v -1.708294 0.015625 -2.284644 +v -3.411419 0.015625 -2.284644 +v -1.731732 0.078125 -2.284644 +v -3.387982 0.078125 -2.284644 +v -1.794232 0.093750 -2.284644 +v -3.325482 0.093750 -2.284644 +v -1.716107 0.171875 -2.284644 +v -3.403607 0.171875 -2.284644 +v -1.520794 0.328125 -2.378394 +v -3.598919 0.328125 -2.378394 +v -1.372357 0.343750 -2.448706 +v -3.747357 0.343750 -2.448706 +v -1.302044 0.242188 -2.456519 +v -3.817669 0.242188 -2.456519 +v -1.348919 0.085938 -2.448706 +v -3.770794 0.085938 -2.448706 +v -1.512982 0.000000 -2.386206 +v -3.606732 0.000000 -2.386206 +v -1.677044 -0.015625 -2.229956 +v -3.442669 -0.015625 -2.229956 +v -1.606732 0.289063 -2.308081 +v -3.512982 0.289063 -2.308081 +v -1.669232 0.109375 -2.292456 +v -3.450482 0.109375 -2.292456 +v -1.622357 0.062500 -2.300269 +v -3.497357 0.062500 -2.300269 +v -1.559857 0.125000 -2.331519 +v -3.559857 0.125000 -2.331519 +v -1.598919 0.171875 -2.315894 +v -3.520794 0.171875 -2.315894 +v -1.544232 0.234375 -2.339331 +v -3.575482 0.234375 -2.339331 +v -1.505169 0.187500 -2.347144 +v -3.614544 0.187500 -2.347144 +v -1.450482 0.210938 -2.354956 +v -3.669232 0.210938 -2.354956 +v -1.473919 0.273438 -2.354956 +v -3.645794 0.273438 -2.354956 +v -1.536419 0.437500 -2.448706 +v -3.583294 0.437500 -2.448706 +v -1.309857 0.468750 -2.511206 +v -3.809857 0.468750 -2.511206 +v -1.192669 0.296875 -2.464331 +v -3.927044 0.296875 -2.464331 +v -1.247357 0.054688 -2.495581 +v -3.872357 0.054688 -2.495581 +v -1.520794 -0.085937 -2.456519 +v -3.598919 -0.085937 -2.456519 +v -1.770794 -0.125000 -2.292456 +v -3.348919 -0.125000 -2.292456 +v -1.700482 0.382813 -2.347144 +v -3.419232 0.382813 -2.347144 +vt 0.472248 0.856582 +vt 0.458792 0.842677 +vt 0.473546 0.821180 +vt 0.715056 0.859528 +vt 0.689237 0.869892 +vt 0.698417 0.831391 +vt 0.499792 0.847299 +vt 0.491595 0.807822 +vt 0.742167 0.847902 +vt 0.720353 0.812741 +vt 0.890362 0.004822 +vt 0.890736 0.040402 +vt 0.867965 0.046959 +vt 0.742113 0.898476 +vt 0.715154 0.898340 +vt 0.438114 0.844174 +vt 0.436615 0.821937 +vt 0.689074 0.891767 +vt 0.938581 0.894186 +vt 0.941563 0.874834 +vt 0.959029 0.911658 +vt 0.699270 0.924815 +vt 0.680318 0.906024 +vt 0.965641 0.874676 +vt 0.983123 0.923752 +vt 0.721709 0.933724 +vt 0.960219 0.841459 +vt 0.983641 0.833564 +vt 0.148158 0.878633 +vt 0.127860 0.868828 +vt 0.148191 0.834010 +vt 0.938529 0.857649 +vt 0.102328 0.859165 +vt 0.127211 0.833008 +vt 0.956527 0.713480 +vt 0.955862 0.693038 +vt 0.973764 0.727209 +vt 0.102988 0.897722 +vt 0.088936 0.876166 +vt 0.972236 0.690651 +vt 0.996505 0.686870 +vt 0.116957 0.917456 +vt 0.971586 0.656836 +vt 0.995712 0.643127 +vt 0.073449 0.925971 +vt 0.069639 0.904851 +vt 0.438230 0.893993 +vt 0.457433 0.893241 +vt 0.472588 0.913302 +vt 0.071806 0.879803 +vt 0.472782 0.878208 +vt 0.265788 0.881660 +vt 0.287626 0.881086 +vt 0.291869 0.900041 +vt 0.498860 0.885474 +vt 0.489553 0.926445 +vt 0.237588 0.881292 +vt 0.273786 0.916009 +vt 0.524237 0.890727 +vt 0.239693 0.833859 +vt 0.266449 0.845077 +vt 0.288399 0.860675 +vt 0.534113 0.808440 +vt 0.530149 0.826352 +vt 0.530146 0.807822 +vt 0.290806 0.881557 +vt 0.534061 0.847446 +vt 0.525661 0.826794 +vt 0.946839 0.040241 +vt 0.953472 0.039583 +vt 0.961912 0.055521 +vt 0.956270 0.675474 +vt 0.950832 0.693246 +vt 0.946647 0.017594 +vt 0.952506 0.019351 +vt 0.951779 0.716275 +vt 0.956929 0.000301 +vt 0.962015 0.004473 +vt 0.032345 0.946842 +vt 0.024574 0.965181 +vt 0.027536 0.943341 +vt 0.378433 0.824768 +vt 0.384350 0.824187 +vt 0.387633 0.842266 +vt 0.032349 0.983432 +vt 0.019641 0.964242 +vt 0.381490 0.803449 +vt 0.387663 0.805471 +vt 0.742643 0.049436 +vt 0.743962 0.029783 +vt 0.748037 0.030453 +vt 0.069639 0.946125 +vt 0.073731 0.946331 +vt 0.075824 0.965880 +vt 0.743660 0.011175 +vt 0.747701 0.010514 +vt 0.077682 0.925971 +vt 0.080690 0.927631 +vt 0.775496 0.026838 +vt 0.805910 0.017225 +vt 0.805641 0.038264 +vt 0.493293 0.929631 +vt 0.502008 0.945564 +vt 0.478348 0.957605 +vt 0.788140 0.001511 +vt 0.499347 0.970089 +vt 0.766000 0.003772 +vt 0.805910 0.000898 +vt 0.823656 0.001758 +vt 0.813047 0.028292 +vt 0.750761 0.020109 +vt 0.837894 0.017084 +vt 0.750740 0.042712 +vt 0.837776 0.041125 +vt 0.766246 0.057381 +vt 0.826170 0.057381 +vt 0.790650 0.056164 +vt 0.807823 0.057218 +vt 0.478345 0.926445 +vt 0.938271 0.178496 +vt 0.918243 0.181644 +vt 0.928479 0.144683 +vt 0.911776 0.149401 +vt 0.902831 0.113992 +vt 0.921392 0.104401 +vt 0.946623 0.204662 +vt 0.919010 0.195385 +vt 0.896994 0.098739 +vt 0.915800 0.069357 +vt 0.431337 0.615757 +vt 0.397947 0.634151 +vt 0.391824 0.614837 +vt 0.875134 0.091062 +vt 0.430439 0.660648 +vt 0.396124 0.661402 +vt 0.852968 0.091090 +vt 0.903798 0.059482 +vt 0.431266 0.721972 +vt 0.394315 0.722210 +vt 0.129918 0.738382 +vt 0.088692 0.771744 +vt 0.121440 0.705813 +vt 0.154888 0.339589 +vt 0.197075 0.318718 +vt 0.217322 0.340687 +vt 0.701123 0.747144 +vt 0.742167 0.746844 +vt 0.667066 0.812741 +vt 0.651642 0.052981 +vt 0.615897 0.042727 +vt 0.651224 0.012552 +vt 0.708358 0.689438 +vt 0.737567 0.695146 +vt 0.573967 0.371705 +vt 0.606119 0.312735 +vt 0.622396 0.348454 +vt 0.699845 0.649351 +vt 0.742146 0.631360 +vt 0.665959 0.310051 +vt 0.668569 0.627550 +vt 0.679719 0.595793 +vt 0.687106 0.341061 +vt 0.659749 0.343426 +vt 0.163514 0.670902 +vt 0.160819 0.643211 +vt 0.194703 0.640878 +vt 0.726352 0.386908 +vt 0.670923 0.360638 +vt 0.098471 0.676019 +vt 0.103684 0.647841 +vt 0.771852 0.419662 +vt 0.744019 0.438281 +vt 0.061044 0.677572 +vt 0.047926 0.646539 +vt 0.772716 0.457352 +vt 0.745189 0.463285 +vt 0.159594 0.913124 +vt 0.191706 0.920948 +vt 0.148191 0.932951 +vt 0.879002 0.294475 +vt 0.882249 0.239029 +vt 0.907121 0.234451 +vt 0.148282 0.863908 +vt 0.173483 0.865830 +vt 0.880912 0.218137 +vt 0.901679 0.204662 +vt 0.154703 0.833859 +vt 0.174605 0.844985 +vt 0.702531 0.471862 +vt 0.709933 0.450131 +vt 0.708846 0.491756 +vt 0.573967 0.714829 +vt 0.613023 0.720229 +vt 0.612563 0.744539 +vt 0.707133 0.432184 +vt 0.579454 0.689291 +vt 0.618924 0.702918 +vt 0.769433 0.651276 +vt 0.744253 0.633751 +vt 0.772530 0.626187 +vt 0.604843 0.673512 +vt 0.766789 0.693765 +vt 0.742167 0.701355 +vt 0.647299 0.635832 +vt 0.633320 0.686008 +vt 0.772211 0.712915 +vt 0.753167 0.719655 +vt 0.660171 0.656651 +vt 0.624371 0.375059 +vt 0.648339 0.366758 +vt 0.674838 0.657263 +vt 0.603714 0.410464 +vt 0.594948 0.380219 +vt 0.692117 0.715273 +vt 0.599778 0.439924 +vt 0.584575 0.434571 +vt 0.627592 0.475462 +vt 0.586788 0.508429 +vt 0.633819 0.595793 +vt 0.602237 0.559009 +vt 0.646125 0.591663 +vt 0.640568 0.482049 +vt 0.629705 0.516986 +vt 0.660845 0.548435 +vt 0.652697 0.557654 +vt 0.680135 0.484017 +vt 0.603147 0.786500 +vt 0.593823 0.757125 +vt 0.697683 0.513314 +vt 0.666489 0.513712 +vt 0.631306 0.801492 +vt 0.639322 0.773998 +vt 0.658404 0.485955 +vt 0.674819 0.539696 +vt 0.895502 0.165044 +vt 0.895130 0.151710 +vt 0.887874 0.175703 +vt 0.889631 0.139272 +vt 0.361427 0.663879 +vt 0.361644 0.637024 +vt 0.876866 0.127380 +vt 0.854334 0.125796 +vt 0.362638 0.728061 +vt 0.364104 0.670678 +vt 0.315959 0.682523 +vt 0.330541 0.735957 +vt 0.293413 0.686670 +vt 0.848897 0.122673 +vt 0.370486 0.763808 +vt 0.351492 0.759158 +vt 0.346589 0.732009 +vt 0.340300 0.678399 +vt 0.337349 0.658616 +vt 0.316491 0.674934 +vt 0.019634 0.955126 +vt 0.008606 0.957181 +vt 0.011011 0.942600 +vt 0.255100 0.948480 +vt 0.244377 0.938237 +vt 0.264634 0.948025 +vt 0.675482 0.957613 +vt 0.665386 0.957806 +vt 0.680291 0.943826 +vt 0.420687 0.968763 +vt 0.422704 0.947518 +vt 0.431337 0.947862 +vt 0.680318 0.979555 +vt 0.668496 0.973272 +vt 0.047980 0.964965 +vt 0.047672 0.950519 +vt 0.057821 0.943341 +vt 0.289217 0.667253 +vt 0.278417 0.668079 +vt 0.278771 0.650319 +vt 0.293211 0.937623 +vt 0.276531 0.933400 +vt 0.288573 0.925712 +vt 0.019641 0.917120 +vt 0.019554 0.938089 +vt 0.010922 0.919021 +vt 0.272210 0.968875 +vt 0.264021 0.971526 +vt 0.258502 0.987983 +vt 0.255017 0.971249 +vt 0.247582 0.952045 +vt 0.271488 0.672468 +vt 0.287486 0.943513 +vt 0.272221 0.937426 +vt 0.740574 0.959038 +vt 0.733567 0.958551 +vt 0.734053 0.948316 +vt 0.414738 0.950739 +vt 0.412181 0.942567 +vt 0.742167 0.943970 +vt 0.721452 0.933724 +vt 0.412220 0.966535 +vt 0.001844 0.953709 +vt 0.006911 0.944193 +vt 0.239214 0.945734 +vt 0.718166 0.965649 +vt 0.718150 0.941388 +vt 0.287996 0.953414 +vt 0.272210 0.960699 +vt 0.237588 0.967130 +vt 0.243183 0.991820 +vt 0.771679 0.917662 +vt 0.762698 0.937917 +vt 0.742337 0.933996 +vt 0.591212 0.548486 +vt 0.586717 0.527571 +vt 0.766263 0.953153 +vt 0.574196 0.561988 +vt 0.574728 0.557786 +vt 0.379778 0.776050 +vt 0.391660 0.771339 +vt 0.272131 0.927361 +vt 0.252901 0.936043 +vt 0.392455 0.754363 +vt 0.307653 0.743529 +vt 0.335180 0.772494 +vt 0.426082 0.753855 +vt 0.064602 0.788054 +vt 0.049360 0.750419 +vt 0.076785 0.734917 +vt 0.423413 0.769427 +vt 0.051938 0.796579 +vt 0.037171 0.759127 +vt 0.418261 0.785222 +vt 0.377038 0.803449 +vt 0.040711 0.833008 +vt 0.864608 0.170898 +vt 0.867076 0.150616 +vt 0.868972 0.167985 +vt 0.870935 0.149342 +vt 0.884239 0.170114 +vt 0.945479 0.050623 +vt 0.946610 0.057381 +vt 0.928158 0.038728 +vt 0.893529 0.160240 +vt 0.933856 0.037321 +vt 0.928950 0.021309 +vt 0.936572 0.009239 +vt 0.945243 0.000481 +vt 0.939216 0.011736 +vt 0.934428 0.020795 +vt 0.403077 0.935992 +vt 0.402495 0.944535 +vt 0.389032 0.944524 +vt 0.046173 0.953391 +vt 0.036199 0.953589 +vt 0.042323 0.943341 +vt 0.404763 0.961014 +vt 0.046098 0.967871 +vt 0.032357 0.969739 +vt 0.403339 0.975332 +vt 0.388237 0.958872 +vt 0.544825 0.949466 +vt 0.547267 0.963589 +vt 0.534130 0.963499 +vt 0.560163 0.971977 +vt 0.560151 0.950717 +vt 0.573967 0.968120 +vt 0.882568 0.143112 +vt 0.860166 0.129326 +vt 0.907705 0.025630 +vt 0.890736 0.021482 +vt 0.892558 0.011737 +vt 0.892535 0.031569 +vt 0.914545 0.046959 +vt 0.914591 0.007295 +vt 0.901242 0.003489 +vt 0.387663 0.858363 +vt 0.382169 0.871841 +vt 0.382160 0.845449 +vt 0.287812 0.575756 +vt 0.290441 0.592347 +vt 0.278006 0.579995 +vt 0.665486 0.555104 +vt 0.280623 0.559591 +vt 0.271479 0.569337 +vt 0.678644 0.549893 +vt 0.695584 0.534597 +vt 0.674728 0.475094 +vt 0.696937 0.547803 +vt 0.716677 0.550454 +vt 0.290438 0.606680 +vt 0.279049 0.606188 +vt 0.657091 0.566097 +vt 0.282187 0.650319 +vt 0.271464 0.641002 +vt 0.672646 0.740908 +vt 0.686105 0.745453 +vt 0.660368 0.772674 +vt 0.612845 0.417112 +vt 0.677338 0.715010 +vt 0.628556 0.387723 +vt 0.678291 0.682483 +vt 0.687661 0.673060 +vt 0.649321 0.382625 +vt 0.665500 0.670260 +vt 0.668316 0.372764 +vt 0.010918 0.857646 +vt 0.003074 0.852778 +vt 0.007957 0.833008 +vt 0.692322 0.410810 +vt 0.664894 0.385317 +vt 0.019641 0.893191 +vt 0.004429 0.893494 +vt 0.695718 0.434580 +vt 0.011022 0.909798 +vt 0.003113 0.917120 +vt 0.697553 0.449366 +vt 0.731348 0.560009 +vt 0.740832 0.551291 +vt 0.737238 0.570513 +vt 0.722808 0.538248 +vt 0.690606 0.465101 +vt 0.685966 0.458432 +vt 0.971872 0.367739 +vt 0.965041 0.372700 +vt 0.965137 0.354837 +vt 0.691850 0.448000 +vt 0.960230 0.354876 +vt 0.967365 0.341660 +vt 0.876672 0.932540 +vt 0.888682 0.914255 +vt 0.891678 0.918392 +vt 0.962518 0.340048 +vt 0.970227 0.326536 +vt 0.876126 0.968132 +vt 0.882578 0.933886 +vt 0.964766 0.325585 +vt 0.992212 0.302440 +vt 0.878644 0.982283 +vt 0.886126 0.979236 +vt 0.293323 0.552914 +vt 0.287227 0.559591 +vt 0.277924 0.548625 +vt 0.887258 0.996091 +vt 0.284753 0.543613 +vt 0.279599 0.527832 +vt 0.617619 0.417765 +vt 0.271464 0.527786 +vt 0.276971 0.497694 +vt 0.609847 0.442157 +vt 0.615436 0.439281 +vt 0.283112 0.499282 +vt 0.293383 0.483978 +vt 0.629089 0.474421 +vt 0.632055 0.467864 +vt 0.960263 0.398447 +vt 0.965065 0.394798 +vt 0.973115 0.427124 +vt 0.642312 0.479234 +vt 0.966757 0.426738 +vt 0.962939 0.440783 +vt 0.674132 0.469272 +vt 0.980585 0.381531 +vt 0.976069 0.386225 +vt 0.657402 0.480346 +vt 0.658227 0.471689 +vt 0.992194 0.387297 +vt 0.987280 0.394798 +vt 0.645278 0.472678 +vt 0.969296 0.441170 +vt 0.960230 0.451689 +vt 0.848897 0.212568 +vt 0.069567 0.861905 +vt 0.034251 0.859087 +vt 0.036739 0.838666 +vt 0.851659 0.239134 +vt 0.056441 0.904337 +vt 0.019641 0.905974 +vt 0.829786 0.310051 +vt 0.806735 0.289884 +vt 0.829875 0.260879 +vt 0.069639 0.935064 +vt 0.033200 0.943341 +vt 0.790224 0.236606 +vt 0.118044 0.620974 +vt 0.768134 0.180721 +vt 0.815329 0.215350 +vt 0.168912 0.615112 +vt 0.750740 0.147811 +vt 0.784181 0.137843 +vt 0.196669 0.612037 +vt 0.786803 0.092928 +vt 0.973956 0.126742 +vt 0.955502 0.118837 +vt 0.974349 0.057381 +vt 0.293347 0.255864 +vt 0.244198 0.302266 +vt 0.232276 0.273305 +vt 0.971296 0.180245 +vt 0.946647 0.177913 +vt 0.197489 0.300883 +vt 0.975820 0.219216 +vt 0.961870 0.225311 +vt 0.044635 0.334821 +vt 0.052749 0.318055 +vt 0.073430 0.334826 +vt 0.291542 0.707522 +vt 0.282041 0.747032 +vt 0.260179 0.749511 +vt 0.206763 0.764225 +vt 0.221410 0.787285 +vt 0.258759 0.718005 +vt 0.160121 0.765444 +vt 0.175836 0.798904 +vt 0.209281 0.729896 +vt 0.991595 0.610973 +vt 0.985811 0.643127 +vt 0.959036 0.636810 +vt 0.946647 0.131914 +vt 0.937759 0.094097 +vt 0.993650 0.582110 +vt 0.963839 0.604470 +vt 0.705460 0.943500 +vt 0.705447 0.971746 +vt 0.680318 0.933724 +vt 0.997819 0.566922 +vt 0.965073 0.571464 +vt 0.164417 0.699950 +vt 0.148191 0.690247 +vt 0.212045 0.694720 +vt 0.388237 0.839269 +vt 0.397104 0.803449 +vt 0.431337 0.825211 +vt 0.090379 0.677657 +vt 0.148191 0.678321 +vt 0.054294 0.703729 +vt 0.236978 0.812687 +vt 0.269541 0.769018 +vt 0.259645 0.686681 +vt 0.192718 0.833859 +vt 0.161685 0.731949 +vt 0.122076 0.321620 +vt 0.102547 0.332408 +vt 0.089911 0.298753 +vt 0.291873 0.677634 +vt 0.388484 0.883509 +vt 0.431283 0.863314 +vt 0.031539 0.722512 +vt 0.396963 0.908442 +vt 0.424335 0.904918 +vt 0.399217 0.921207 +vt 0.018595 0.748511 +vt 0.022305 0.735296 +vt 0.427603 0.889521 +vt 0.401327 0.935982 +vt 0.411945 0.931367 +vt 0.025364 0.770179 +vt 0.150968 0.324854 +vt 0.995722 0.266566 +vt 0.986279 0.266981 +vt 0.021623 0.028995 +vt 0.090949 0.051354 +vt 0.000000 0.088309 +vt 0.488790 0.528813 +vt 0.463735 0.480456 +vt 0.524998 0.416681 +vt 0.076242 0.097555 +vt 0.005195 0.174483 +vt 0.508625 0.579869 +vt 0.559820 0.477814 +vt 0.072375 0.173441 +vt 0.089194 0.275367 +vt 0.666161 0.259383 +vt 0.750740 0.241991 +vt 0.648462 0.308659 +vt 0.046868 0.295953 +vt 0.647141 0.266441 +vt 0.632377 0.309796 +vt 0.131530 0.320231 +vt 0.000000 0.677572 +vt 0.014383 0.696078 +vt 0.279628 0.241727 +vt 0.214236 0.199983 +vt 0.700929 0.114215 +vt 0.616844 0.124949 +vt 0.688231 0.052981 +vt 0.446396 0.332480 +vt 0.534443 0.310083 +vt 0.383195 0.428785 +vt 0.293438 0.128022 +vt 0.357044 0.051228 +vt 0.334774 0.182633 +vt 0.084453 0.453414 +vt 0.080562 0.527766 +vt 0.000000 0.533971 +vt 0.390317 0.096621 +vt 0.445949 0.141554 +vt 0.349045 0.310051 +vt 0.293413 0.265118 +vt 0.417045 0.250122 +vt 0.558936 0.181995 +vt 0.297823 0.391506 +vt 0.796705 0.165139 +vt 0.817076 0.133403 +vt 0.192981 0.583294 +vt 0.173686 0.567072 +vt 0.801163 0.396257 +vt 0.790104 0.379232 +vt 0.872231 0.387077 +vt 0.188949 0.525214 +vt 0.426044 0.040922 +vt 0.453558 0.000000 +vt 0.481124 0.035997 +vt 0.193311 0.466626 +vt 0.151048 0.438756 +vt 0.455943 0.077972 +vt 0.528715 0.070482 +vt 0.220421 0.417216 +vt 0.177263 0.387038 +vt 0.578990 0.083138 +vt 0.574807 0.134582 +vt 0.300784 0.439920 +vt 0.369101 0.479851 +vt 0.345749 0.526557 +vt 0.503511 0.113687 +vt 0.144905 0.498572 +vt 0.888374 0.451818 +vt 0.802145 0.450341 +vt 0.126892 0.594693 +vt 0.841295 0.199560 +vt 0.789101 0.562807 +vt 0.881028 0.554443 +vt 0.859445 0.641337 +vt 0.772716 0.643127 +vt 0.958969 0.456490 +vt 1.000000 0.481292 +vt 0.997371 0.513179 +vt 0.941550 0.229164 +vt 0.943805 0.257234 +vt 0.907121 0.215937 +vt 0.742245 0.891626 +vt 0.742167 0.818061 +vt 0.771679 0.825859 +vt 0.040260 0.620296 +vt 0.709437 0.024009 +vt 0.716745 0.047349 +vt 0.682544 0.052981 +vt 0.682588 0.016128 +vt 0.807439 0.094926 +vt 0.257518 0.532332 +vt 0.239433 0.609174 +vt 0.773111 0.316540 +vt 0.799205 0.310051 +vt 0.841005 0.353190 +vt 0.249753 0.503459 +vt 0.522173 0.010726 +vt 0.539922 0.040900 +vt 0.251286 0.467306 +vt 0.830229 0.914255 +vt 0.876126 0.935925 +vt 0.835226 0.971020 +vt 0.268095 0.418281 +vt 0.150287 0.242345 +vt 0.741381 0.199165 +vt 0.157332 0.164068 +vt 0.666745 0.192101 +vt 0.599673 0.167911 +vt 0.141629 0.323366 +vt 0.604598 0.236508 +vt 0.591031 0.229436 +vt 0.974549 0.057381 +vt 0.962015 0.004063 +vt 0.974670 0.002818 +vt 0.578990 0.222542 +vt 0.214570 0.060249 +vt 0.155458 0.094481 +vt 0.182960 0.029154 +vt 0.438250 0.517557 +vt 0.411483 0.555665 +vt 0.160896 0.000000 +vt 0.115903 0.167895 +vt 0.464931 0.583508 +vt 0.424127 0.598092 +vt 0.122558 0.073078 +vt 0.469617 0.775889 +vt 0.444693 0.744499 +vt 0.472796 0.760358 +vt 0.915120 0.024026 +vt 0.928158 0.028161 +vt 0.924864 0.057381 +vt 0.512187 0.786990 +vt 0.716681 0.938375 +vt 0.718150 0.974956 +vt 0.705585 0.933724 +vt 0.516492 0.807822 +vt 0.559266 0.777975 +vt 0.547741 0.899450 +vt 0.569878 0.927353 +vt 0.568022 0.946860 +vt 0.544402 0.763523 +vt 0.573967 0.718010 +vt 0.546840 0.847981 +vt 0.534113 0.912685 +vt 0.555813 0.715477 +vt 0.534699 0.658345 +vt 0.917062 0.568722 +vt 0.919928 0.514296 +vt 0.928077 0.500021 +vt 0.524739 0.668771 +vt 0.474461 0.632256 +vt 0.888451 0.624979 +vt 0.896928 0.643127 +vt 0.527110 0.682678 +vt 0.453034 0.972444 +vt 0.450489 0.926445 +vt 0.463144 0.937656 +vt 0.750407 0.765874 +vt 0.760480 0.763937 +vt 0.742177 0.818060 +vt 0.572328 0.817894 +vt 0.556853 0.850313 +vt 0.742167 0.719655 +vt 0.753945 0.728824 +vt 0.556248 0.888883 +vt 0.646635 0.942236 +vt 0.661664 0.955732 +vt 0.660301 0.983700 +vt 0.573967 0.909140 +vt 0.487283 0.752201 +vt 0.314645 0.812645 +vt 0.319234 0.852151 +vt 0.298131 0.862243 +vt 0.454536 0.735892 +vt 0.470455 0.732191 +vt 0.322728 0.877397 +vt 0.305626 0.890728 +vt 0.205749 0.165988 +vt 0.744545 0.119434 +vt 0.740942 0.157161 +vt 0.436552 0.605314 +vt 0.470471 0.612764 +vt 0.578990 0.052981 +vt 0.579009 0.032276 +vt 0.607638 0.047743 +vt 0.271089 0.163970 +vt 0.293413 0.468990 +vt 0.271464 0.479118 +vt 0.288585 0.387012 +vt 0.436597 0.720227 +vt 0.445934 0.714582 +vt 0.917383 0.000153 +vt 0.925530 0.004601 +vt 0.115816 0.981074 +vt 0.118504 0.970941 +vt 0.140755 0.972378 +vt 0.436552 0.966881 +vt 0.437843 0.996485 +vt 0.936878 0.333944 +vt 0.919535 0.302500 +vt 0.940662 0.325380 +vt 0.477205 0.971782 +vt 0.468343 0.971215 +vt 0.463191 0.935729 +vt 0.911753 0.324383 +vt 0.742643 0.020180 +vt 0.742625 0.052981 +vt 0.730241 0.030939 +vt 0.227876 0.101593 +vt 0.231843 0.113282 +vt 0.204130 0.112553 +vt 0.373004 0.938850 +vt 0.341810 0.918174 +vt 0.352488 0.902558 +vt 0.445742 0.693100 +vt 0.464410 0.713025 +vt 0.323216 0.907879 +vt 0.334743 0.892059 +vt 0.274407 0.133698 +vt 0.253815 0.101566 +vt 0.262011 0.468389 +vt 0.269549 0.474025 +vt 0.362362 0.953970 +vt 0.293413 0.926874 +vt 0.191314 0.147209 +vt 0.198461 0.137712 +vt 0.228115 0.833859 +vt 0.237588 0.842129 +vt 0.228102 0.863156 +vt 0.262849 0.080627 +vt 0.247426 0.094018 +vt 0.241015 0.083257 +vt 0.343782 0.884686 +vt 0.332401 0.868636 +vt 0.358423 0.894635 +vt 0.200855 0.102343 +vt 0.378433 0.910831 +vt 0.372498 0.918754 +vt 0.682730 0.016103 +vt 0.682544 0.002001 +vt 0.692186 0.016128 +vt 0.724377 0.021299 +vt 0.723766 0.039776 +vt 0.919413 0.335515 +vt 0.922032 0.341694 +vt 0.735623 0.011403 +vt 0.579181 0.010881 +vt 0.578990 0.000422 +vt 0.589880 0.000221 +vt 0.477227 0.931627 +vt 0.472707 0.939663 +vt 0.466628 0.926445 +vt 0.127163 0.964777 +vt 0.656291 0.827125 +vt 0.646760 0.822423 +vt 0.659562 0.812741 +vt 0.274328 0.058709 +vt 0.256645 0.070319 +vt 0.328224 0.841885 +vt 0.293413 0.034580 +vt 0.269415 0.048081 +vt 0.322533 0.803449 +vt 0.514073 0.953776 +vt 0.502008 0.926445 +vt 0.524237 0.954869 +vt 0.058731 0.948538 +vt 0.069639 0.943341 +vt 0.069229 0.972115 +vt 0.502043 0.988244 +vt 0.656164 0.942236 +vt 0.646635 0.934228 +vt 0.676779 0.920740 +vt 0.754919 0.806147 +vt 0.767878 0.759850 +vt 0.668761 0.913325 +vt 0.680318 0.875038 +vt 0.115789 0.934277 +vt 0.669934 0.869218 +vt 0.937805 0.340789 +vt 0.921262 0.357052 +vt 0.960716 0.766262 +vt 0.966081 0.745894 +vt 0.978418 0.754295 +vt 0.935919 0.362799 +vt 0.914530 0.378340 +vt 0.962922 0.785734 +vt 0.973734 0.768695 +vt 0.928471 0.383507 +vt 0.920218 0.400951 +vt 0.964646 0.804624 +vt 0.976432 0.808158 +vt 0.906306 0.396678 +vt 0.904620 0.415073 +vt 0.960115 0.816460 +vt 0.888392 0.413572 +vt 0.888374 0.385963 +vt 0.990424 0.810631 +vt 0.972452 0.824861 +vt 0.894160 0.366816 +vt 0.340570 0.853133 +vt 0.352585 0.867795 +vt 0.903220 0.352638 +vt 0.988911 0.774053 +vt 0.990155 0.792362 +vt 0.990439 0.748414 +vt 0.964935 0.294592 +vt 0.946647 0.295006 +vt 0.957701 0.285534 +vt 0.950832 0.746266 +vt 0.967925 0.734537 +vt 0.960230 0.387963 +vt 0.947345 0.337758 +vt 0.202176 0.926813 +vt 0.199253 0.906246 +vt 0.227878 0.903815 +vt 0.957524 0.433422 +vt 0.193370 0.888295 +vt 0.227910 0.857816 +vt 0.928191 0.456490 +vt 0.920393 0.414168 +vt 0.191706 0.874217 +vt 0.206902 0.833859 +vt 0.899452 0.450981 +vt 0.682544 0.042569 +vt 0.669127 0.049230 +vt 0.682532 0.009091 +vt 0.657923 0.024764 +vt 0.931295 0.771810 +vt 0.950796 0.833564 +vt 0.908444 0.812087 +vt 0.932674 0.625935 +vt 0.958933 0.559572 +vt 0.935205 0.702058 +vt 0.896056 0.755792 +vt 0.930564 0.571051 +vt 0.947207 0.487149 +vt 0.950832 0.647836 +vt 0.934543 0.643127 +vt 0.888374 0.462578 +vt 0.897775 0.917074 +vt 0.896056 0.869807 +vt 0.923249 0.901211 +vt 0.867937 0.053932 +vt 0.848780 0.051662 +vt 0.837894 0.000898 +vt 0.901800 0.957875 +vt 0.797675 0.914255 +vt 0.772716 0.896319 +vt 0.811234 0.860706 +vt 0.772771 0.953946 +vt 0.779125 0.918041 +vt 0.818698 0.914255 +vt 0.777274 0.839855 +vt 0.816586 0.813804 +vt 0.896056 0.723908 +vt 0.774883 0.714392 +vt 0.888948 0.778303 +vt 0.888888 0.849684 +vt 0.894645 0.778204 +vt 0.589970 0.908303 +vt 0.602847 0.812741 +vt 0.642964 0.826913 +vt 0.911255 0.858959 +vt 0.938529 0.833564 +vt 0.573967 0.852462 +vt 0.830229 0.982701 +vt 0.772716 0.979795 +vt 0.786142 0.801659 +vt 0.798565 0.781550 +vt 0.250352 0.056629 +vt 0.400765 0.605314 +vt 0.309746 0.524160 +vt 0.084396 0.944480 +vt 0.115704 0.925971 +vt 0.115789 0.973867 +vt 0.938529 0.953736 +vt 0.978376 0.923752 +vt 0.978415 0.991743 +vt 0.680372 0.855450 +vt 0.524121 0.840909 +vt 0.867998 0.000898 +vt 0.992085 0.875683 +vt 0.102322 0.840403 +vt 0.996518 0.734537 +vt 0.436552 0.914030 +vt 0.247790 0.925712 +vt 0.291873 0.859734 +vt 0.528315 0.850824 +vt 0.957939 0.057381 +vt 0.950958 0.673094 +vt 0.381972 0.845449 +vt 0.027290 0.985056 +vt 0.748086 0.052981 +vt 0.080713 0.963798 +vt 0.422314 0.605314 +vt 0.866366 0.057381 +vt 0.178251 0.387012 +vt 0.730430 0.801134 +vt 0.615960 0.012501 +vt 0.182570 0.658044 +vt 0.715539 0.412961 +vt 0.175175 0.951396 +vt 0.905346 0.283978 +vt 0.742229 0.595793 +vt 0.625767 0.764989 +vt 0.670117 0.942236 +vt 0.431067 0.965938 +vt 0.057818 0.964482 +vt 0.290288 0.656800 +vt 0.275795 0.928390 +vt 0.250418 0.984964 +vt 0.271464 0.655049 +vt 0.418881 0.935982 +vt 0.757133 0.891626 +vt 0.771615 0.963686 +vt 0.261584 0.925712 +vt 0.318632 0.772524 +vt 0.946647 0.005174 +vt 0.389614 0.935982 +vt 0.032349 0.943538 +vt 0.389591 0.970870 +vt 0.534113 0.946861 +vt 0.573955 0.946861 +vt 0.871799 0.123096 +vt 0.282006 0.592702 +vt 0.651936 0.766901 +vt 0.015624 0.843418 +vt 0.683037 0.420436 +vt 0.747687 0.564956 +vt 0.690498 0.434794 +vt 0.884120 0.966304 +vt 0.987271 0.295381 +vt 0.891744 0.988908 +vt 0.634172 0.392425 +vt 0.289397 0.479118 +vt 0.968068 0.454915 +vt 0.067897 0.833008 +vt 0.848983 0.289137 +vt 0.848862 0.280058 +vt 0.070335 0.619675 +vt 0.995519 0.075956 +vt 0.682166 0.964164 +vt 0.958933 0.542355 +vt 0.157978 0.677572 +vt 0.281208 0.788707 +vt 0.417454 0.918577 +vt 0.013742 0.760307 +vt 0.573286 0.543916 +vt 0.746338 0.310051 +vt 0.625008 0.070302 +vt 0.573967 0.393944 +vt 0.006095 0.444935 +vt 0.512750 0.290800 +vt 0.375778 0.310051 +vt 0.840687 0.147444 +vt 0.293413 0.492756 +vt 0.112873 0.387012 +vt 0.958933 0.541902 +vt 0.907200 0.294475 +vt 0.757330 0.887300 +vt 0.073540 0.637403 +vt 0.848897 0.057381 +vt 0.876093 0.991275 +vt 0.915147 0.045144 +vt 0.705575 0.975592 +vt 0.534160 0.847858 +vt 0.486472 0.652718 +vt 0.463191 0.990955 +vt 0.564569 0.807822 +vt 0.646642 0.979506 +vt 0.521030 0.773446 +vt 0.293484 0.814900 +vt 0.723208 0.112348 +vt 0.451095 0.636749 +vt 0.615897 0.011992 +vt 0.271510 0.406966 +vt 0.141132 0.996371 +vt 0.933010 0.295381 +vt 0.461655 0.694830 +vt 0.251509 0.102830 +vt 0.224601 0.091383 +vt 0.692919 0.001283 +vt 0.716745 0.030999 +vt 0.589845 0.011992 +vt 0.148191 0.966083 +vt 0.668631 0.816303 +vt 0.289262 0.025600 +vt 0.510448 0.929062 +vt 0.057821 0.977308 +vt 0.511295 0.989598 +vt 0.766736 0.801858 +vt 0.123092 0.925971 +vt 0.973850 0.789527 +vt 0.989978 0.827716 +vt 0.912681 0.331228 +vt 0.946651 0.266981 +vt 0.200116 0.949494 +vt 0.915881 0.689226 +vt 0.906453 0.456490 +vt 0.867965 0.003514 +vt 0.938354 0.942003 +vt 0.808896 0.953046 +vt 0.888107 0.677106 +vt 0.795886 0.778303 +vt 0.642978 0.947703 +vt 0.850209 0.800478 +vt 0.173625 0.121435 +vt 0.080883 0.986508 +vt 0.946910 1.001198 +vn 0.671345 -0.197092 0.714459 +vn -0.666010 -0.204926 0.717242 +vn 0.832580 -0.301659 0.464556 +vn -0.830101 -0.307090 0.465433 +vn 0.425758 -0.796683 0.428983 +vn -0.408092 -0.803818 0.432825 +vn 0.326498 -0.495376 0.804986 +vn -0.371366 -0.486617 0.790753 +vn -0.039277 -0.523693 0.851001 +vn 0.064930 -0.571380 0.818113 +vn -0.283710 -0.844293 0.454619 +vn 0.273789 -0.831508 0.483356 +vn -0.765568 -0.322344 0.556777 +vn 0.760570 -0.339952 0.553142 +vn -0.465798 -0.186319 0.865053 +vn 0.464927 -0.195759 0.863436 +vn -0.467208 0.169894 0.867671 +vn 0.498343 0.181216 0.847830 +vn -0.771027 0.324643 0.547835 +vn 0.768350 0.329293 0.548821 +vn -0.265910 0.820997 0.505229 +vn 0.248737 0.824892 0.507626 +vn -0.055385 0.553849 0.830773 +vn 0.101652 0.551827 0.827740 +vn 0.332862 0.523069 0.784603 +vn -0.344839 0.578837 0.738941 +vn 0.424567 0.771088 0.474516 +vn -0.423136 0.752934 0.504030 +vn 0.825075 0.296789 0.480799 +vn -0.828520 0.299015 0.473440 +vn 0.688799 0.186793 0.700474 +vn -0.665187 0.175917 0.725658 +vn 0.839964 0.343622 -0.419982 +vn -0.768350 0.329293 -0.548821 +vn 0.207390 0.829561 -0.518476 +vn -0.197727 0.815623 -0.543749 +vn -0.408248 0.816497 -0.408248 +vn 0.438063 0.798820 -0.412294 +vn -0.796396 0.289598 -0.530930 +vn 0.786146 0.327561 -0.524097 +vn -0.789474 -0.315789 -0.526316 +vn 0.851943 -0.340777 -0.397573 +vn -0.408248 -0.816497 -0.408248 +vn 0.405616 -0.760530 -0.507020 +vn 0.207390 -0.829561 -0.518476 +vn -0.214297 -0.826574 -0.520435 +vn 0.829740 -0.373383 -0.414870 +vn -0.839964 -0.343622 -0.419982 +vn 0.400039 -0.062344 0.914375 +vn -0.400039 -0.062344 0.914375 +vn 0.306938 -0.175393 0.935429 +vn -0.306938 -0.175393 0.935429 +vn 0.094512 -0.183464 0.978473 +vn -0.094512 -0.183464 0.978473 +vn -0.062353 -0.028342 0.997652 +vn 0.062353 -0.028342 0.997652 +vn -0.062357 0.025982 0.997716 +vn 0.062357 0.025982 0.997716 +vn 0.099561 0.172922 0.979891 +vn -0.099561 0.172922 0.979891 +vn 0.303571 0.165584 0.938311 +vn -0.303571 0.165584 0.938311 +vn 0.400163 0.057166 0.914659 +vn -0.400163 0.057166 0.914659 +vn 0.136692 -0.874826 0.464752 +vn -0.105862 -0.880771 0.461558 +vn 0.230289 -0.865570 0.444697 +vn -0.196715 -0.885219 0.421533 +vn 0.595880 -0.425628 0.681005 +vn -0.623035 -0.426287 0.655826 +vn 0.756337 -0.029855 0.653501 +vn -0.789793 -0.017320 0.613129 +vn 0.806929 0.068934 0.586612 +vn -0.752771 0.054417 0.656029 +vn 0.233373 -0.777910 0.583432 +vn -0.435894 -0.688253 0.579917 +vn 0.355697 -0.729019 0.584817 +vn -0.292803 -0.619134 0.728656 +vn 0.687191 -0.419138 0.593373 +vn -0.689836 -0.414590 0.593500 +vn 0.702848 -0.391536 0.593889 +vn -0.572975 -0.431433 0.696825 +vn 0.312694 0.342474 0.885965 +vn -0.386059 0.714362 0.583649 +vn 0.509058 0.648239 0.566256 +vn -0.507932 0.641599 0.574766 +vn 0.615457 0.492366 0.615457 +vn -0.581008 0.510582 0.633826 +vn -0.051675 0.664392 0.745596 +vn 0.037139 0.668503 0.742781 +vn -0.787931 0.307647 0.533403 +vn 0.738632 0.376802 0.558965 +vn -0.622543 0.553372 0.553372 +vn 0.577350 0.577350 0.577350 +vn 0.507023 -0.628103 0.590266 +vn -0.401601 -0.395017 0.826244 +vn 0.218075 -0.468459 0.856148 +vn -0.222422 -0.467656 0.855468 +vn -0.034841 -0.579236 0.814415 +vn 0.107349 -0.500959 0.858787 +vn -0.089902 -0.784316 0.613813 +vn 0.077015 -0.575864 0.813910 +vn 0.054668 -0.169470 0.984018 +vn -0.027886 -0.864453 0.501940 +vn 0.425985 -0.060855 0.902681 +vn -0.168675 -0.312751 0.934738 +vn 0.335168 -0.182819 0.924251 +vn -0.343363 -0.105650 0.933242 +vn 0.337090 -0.316865 0.886548 +vn -0.322277 -0.276237 0.905445 +vn 0.428411 0.149446 0.891140 +vn -0.481543 -0.240772 0.842701 +vn -0.031654 -0.189927 0.981288 +vn 0.031654 -0.189927 0.981288 +vn 0.681885 -0.291451 0.670887 +vn -0.429933 -0.721674 0.542535 +vn 0.262316 -0.349754 0.899368 +vn -0.054742 -0.361903 0.930607 +vn -0.062564 -0.137640 0.988504 +vn -0.058512 -0.084517 0.994703 +vn -0.013557 -0.650732 0.759187 +vn -0.097666 -0.647680 0.755626 +vn 0.240428 -0.547641 0.801426 +vn -0.147043 -0.661693 0.735214 +vn 0.312808 -0.166179 0.935166 +vn -0.482516 -0.140734 0.864507 +vn 0.282128 -0.016382 0.959237 +vn -0.332048 -0.007298 0.943234 +vn 0.327251 -0.143172 0.934028 +vn -0.313971 -0.145772 0.938175 +vn -0.023219 0.051082 0.998425 +vn 0.000000 0.066519 0.997785 +vn 0.000000 -0.064382 0.997925 +vn 0.000000 -0.066519 0.997785 +vn 0.000000 0.000000 1.000000 +vn 0.782609 -0.608696 -0.130435 +vn -0.744073 -0.658219 0.114473 +vn 0.925624 0.249207 -0.284808 +vn -0.944759 0.191904 -0.265713 +vn 0.069264 0.900436 -0.429439 +vn -0.098456 0.886108 -0.452900 +vn -0.854358 0.512615 -0.085436 +vn 0.690456 0.549227 0.470766 +vn 0.407110 -0.895642 0.179128 +vn -0.398334 -0.876334 0.270867 +vn 0.287348 -0.574696 0.766261 +vn -0.287348 -0.574696 0.766261 +vn -0.781404 0.558146 0.279073 +vn 0.666667 0.666667 0.333333 +vn 0.134763 0.808581 0.572745 +vn -0.127000 0.762001 0.635001 +vn 0.753250 0.286952 0.591839 +vn -0.745356 0.298142 0.596285 +vn 0.411596 -0.857493 0.308697 +vn -0.411596 -0.857493 0.308697 +vn 0.050217 0.234345 0.970856 +vn -0.048634 0.226961 0.972689 +vn -0.056293 -0.262700 0.963234 +vn -0.428571 -0.857143 0.285714 +vn -0.063119 -0.820553 0.568075 +vn 0.063119 -0.820553 0.568075 +vn -0.872872 -0.218218 0.436436 +vn -0.581914 -0.363696 0.727393 +vn 0.545986 -0.431042 0.718403 +vn -0.243483 -0.268671 0.931951 +vn 0.323072 0.031139 0.945862 +vn -0.282005 0.033841 0.958816 +vn 0.735695 0.390999 0.553058 +vn -0.816497 0.408248 0.408248 +vn 0.847998 0.317999 0.423999 +vn -0.868220 0.325582 0.374420 +vn 0.958645 0.066419 0.276745 +vn -0.910178 -0.044591 0.411810 +vn 0.178331 -0.416107 0.891657 +vn -0.357930 -0.835170 0.417585 +vn -0.135319 -0.202979 0.969788 +vn 0.175113 -0.204298 0.963119 +vn -0.356915 0.107075 0.927980 +vn 0.121942 -0.182913 0.975537 +vn -0.124035 0.000000 0.992278 +vn 0.156174 0.312348 0.937043 +vn -0.158235 0.949410 0.271261 +vn 0.158235 0.949410 0.271261 +vn -0.739600 0.647150 0.184901 +vn 0.723842 0.685745 0.076194 +vn -1.000000 -0.000000 0.000000 +vn 1.000000 -0.000000 0.000000 +vn 0.305141 -0.944953 0.118118 +vn -0.305141 -0.944953 0.118118 +vn 0.047836 -0.287019 0.956730 +vn -0.052632 -0.315789 0.947368 +vn 0.135293 -0.347895 0.927720 +vn -0.135293 -0.347895 0.927720 +vn -0.448143 -0.293016 0.844577 +vn 0.548821 -0.329293 0.768350 +vn -0.286864 -0.103271 0.952389 +vn 0.494481 -0.113024 0.861809 +vn -0.270910 0.028025 0.962197 +vn 0.259500 0.103800 0.960149 +vn -0.577350 -0.577350 0.577350 +vn 0.668410 -0.459532 0.584858 +vn -0.115617 -0.635891 0.763069 +vn 0.115617 -0.635891 0.763069 +vn 0.424182 -0.621123 0.658996 +vn -0.397220 -0.635553 0.662034 +vn 0.476654 -0.355712 0.803909 +vn -0.516784 -0.214514 0.828805 +vn 0.587096 -0.083871 0.805161 +vn -0.588227 -0.115717 0.800374 +vn 0.565685 0.119664 0.815892 +vn -0.573167 0.124602 0.809910 +vn 0.408248 0.408248 0.816497 +vn -0.434745 0.702281 0.563736 +vn 0.335769 0.347761 0.875398 +vn -0.335769 0.347761 0.875398 +vn 0.145172 0.377446 0.914582 +vn -0.177192 0.389823 0.903682 +vn -0.021878 0.306290 0.951687 +vn -0.030080 0.230612 0.972581 +vn 0.447549 -0.469927 0.760834 +vn -0.355266 -0.573890 0.737859 +vn 0.262705 -0.225176 0.938233 +vn -0.296334 -0.211667 0.931334 +vn -0.276289 -0.303918 0.911755 +vn 0.063119 -0.315597 0.946792 +vn -0.116248 -0.929981 0.348743 +vn 0.201574 -0.907083 0.369552 +vn -0.381000 -0.254000 0.889001 +vn 0.335624 -0.239732 0.910980 +vn -0.439232 -0.038194 0.897561 +vn 0.456759 0.050751 0.888142 +vn -0.221581 0.569780 0.791361 +vn 0.024676 0.407159 0.913024 +vn -0.021330 0.554574 0.831861 +vn 0.048679 0.681509 0.730189 +vn 0.377792 0.634151 0.674629 +vn -0.366677 0.516064 0.774097 +vn 0.498784 0.529958 0.685828 +vn -0.498784 0.529958 0.685828 +vn 0.789474 -0.315789 0.526316 +vn -0.738200 -0.461375 0.492133 +vn 0.806970 -0.080697 0.585053 +vn -0.806064 -0.065357 0.588209 +vn 0.786796 0.121046 0.605228 +vn -0.790345 0.112906 0.602168 +vn -0.694716 0.709497 -0.118250 +vn 0.635707 0.681115 -0.363261 +vn -0.855186 0.366508 -0.366508 +vn 0.850680 0.365049 -0.378263 +vn -0.267242 0.849692 -0.454539 +vn 0.219716 0.862587 -0.455706 +vn 0.593246 0.744466 -0.306316 +vn -0.596285 0.745356 -0.298142 +vn 0.371427 0.868458 -0.328363 +vn -0.383926 0.874593 -0.296122 +vn 0.276049 0.915865 -0.291529 +vn -0.285868 0.911603 -0.295397 +vn 0.887283 0.134291 -0.441243 +vn -0.793636 0.212659 -0.570015 +vn 0.544157 -0.752414 -0.371169 +vn -0.595505 -0.712308 -0.371472 +vn 0.402739 -0.732252 -0.549189 +vn -0.249041 -0.774794 -0.581096 +vn 0.361678 -0.385790 -0.848738 +vn -0.043139 -0.413418 -0.909519 +vn 0.195180 -0.097590 -0.975900 +vn -0.318353 -0.094327 -0.943268 +vn -0.010730 -0.563304 -0.826180 +vn -0.309502 -0.535676 -0.785659 +vn 0.077851 -0.994757 -0.066317 +vn -0.177679 -0.981909 -0.065461 +vn 0.109450 -0.971782 -0.208950 +vn -0.134050 -0.968141 -0.211502 +vn 0.815044 -0.562099 -0.140525 +vn -0.980180 0.192192 0.048048 +vn 0.935848 0.139584 -0.323581 +vn -0.944069 0.184939 -0.273005 +vn 0.113195 -0.027386 -0.993195 +vn -0.247475 -0.016921 -0.968747 +vn -0.209312 -0.114950 -0.971069 +vn 0.149683 -0.363517 -0.919484 +vn 0.909376 0.137065 -0.392745 +vn -0.204116 0.123707 -0.971099 +vn 0.919259 0.139282 -0.368188 +vn -0.918440 0.135786 -0.371525 +vn 0.917286 0.343982 -0.200656 +vn -0.931845 0.289437 -0.218842 +vn 0.900405 0.364177 -0.238005 +vn -0.913248 0.296189 -0.279734 +vn 0.894509 0.433702 0.108425 +vn -0.882456 0.455774 -0.116368 +vn 0.159617 -0.957704 -0.239426 +vn -0.279448 -0.931493 -0.232873 +vn 0.369277 -0.471184 -0.801012 +vn -0.367655 -0.477093 -0.798255 +vn 0.298594 -0.823644 -0.482133 +vn -0.290628 -0.841642 -0.455163 +vn 0.261968 -0.957376 -0.121675 +vn -0.303090 -0.946422 -0.111459 +vn 0.299629 -0.944285 -0.136195 +vn -0.348743 -0.929981 -0.116248 +vn 0.830482 0.333323 -0.446313 +vn -0.690268 -0.721850 0.049627 +vn 0.686895 -0.635774 0.352088 +vn -0.861521 -0.337915 0.378940 +vn 0.295027 -0.045448 -0.954408 +vn -0.256742 -0.180715 -0.949434 +vn 0.127188 0.965780 0.226034 +vn -0.129094 0.960558 0.246297 +vn 0.120835 0.973395 -0.194679 +vn -0.137321 0.971291 -0.194258 +vn 0.313998 0.571101 -0.758452 +vn -0.387556 0.555474 -0.735696 +vn 0.323051 0.928772 -0.181716 +vn -0.565951 0.760496 -0.318347 +vn -0.094386 0.670139 0.736210 +vn -0.045220 0.795467 0.604308 +vn 0.614433 0.769593 0.173779 +vn -0.583767 0.791981 0.178834 +vn 0.693451 0.685709 -0.221197 +vn -0.715914 0.664472 -0.214346 +vn 0.710443 0.136367 -0.690417 +vn -0.716578 0.217341 -0.662781 +vn 0.317910 0.570368 -0.757373 +vn -0.058015 0.367429 -0.928241 +vn 0.628942 0.762354 -0.152471 +vn -0.595903 0.773063 -0.217424 +vn 0.708828 0.683278 0.175199 +vn -0.690541 0.710905 0.133295 +vn 0.688531 0.382966 0.615842 +vn -0.677195 0.482375 0.555627 +vn 0.366927 0.883961 -0.289789 +vn -0.434689 0.895385 -0.096597 +vn 0.285430 0.623718 0.727671 +vn -0.299340 0.493283 0.816742 +vn -0.181856 0.114502 -0.976636 +vn 0.178174 0.089087 -0.979958 +vn -0.263846 0.946247 -0.187091 +vn -0.023299 0.968843 -0.246579 +vn -0.161572 0.184654 0.969432 +vn 0.161572 0.184654 0.969432 +vn 0.868097 0.089260 -0.488304 +vn -0.966016 -0.164293 0.199549 +vn 0.975806 0.124056 0.180033 +vn -0.945595 0.013329 0.325072 +vn 0.961281 0.147200 -0.232960 +vn -0.996980 0.075751 0.017105 +vn 0.981655 -0.030360 -0.188235 +vn -0.995115 -0.093955 0.030308 +vn 0.746645 -0.664612 0.028490 +vn -0.662473 -0.749076 -0.003701 +vn 0.372268 -0.924250 0.084723 +vn -0.372238 -0.924278 0.084555 +vn 0.528122 -0.835411 0.152235 +vn -0.387671 -0.903540 0.182554 +vn 0.307017 -0.523735 0.794633 +vn -0.848946 -0.221464 0.479839 +vn 0.732489 -0.636817 0.240675 +vn -0.732489 -0.636817 0.240675 +vn 0.263732 -0.449896 0.853252 +vn -0.263732 -0.449896 0.853252 +vn 0.588064 -0.307010 -0.748282 +vn -0.538262 -0.284111 -0.793445 +vn 0.469354 -0.239970 -0.849777 +vn -0.431030 -0.297118 -0.852017 +vn 0.446259 -0.845188 -0.294125 +vn -0.456721 -0.777659 -0.432033 +vn 0.697341 -0.661021 -0.277068 +vn -0.744954 -0.620629 -0.244671 +vn 0.497205 -0.440774 -0.747333 +vn -0.497205 -0.440774 -0.747333 +vn 0.369098 0.285529 0.884443 +vn -0.259062 0.456442 0.851203 +vn 0.464866 0.259346 0.846545 +vn -0.503292 0.047933 0.862786 +vn 0.318838 0.199274 0.926624 +vn -0.415279 0.123700 0.901244 +vn 0.207613 -0.083622 0.974630 +vn -0.196561 -0.050960 0.979166 +vn 0.339755 0.082365 0.936900 +vn -0.372046 0.212598 0.903540 +vn 0.650897 -0.193884 0.733990 +vn -0.624651 -0.412140 0.663289 +vn 0.327986 0.782120 0.529823 +vn -0.407491 0.750641 0.520087 +vn -0.264198 0.830336 0.490653 +vn 0.265483 0.829636 0.491145 +vn -0.863868 0.259160 0.431934 +vn 0.788502 0.236551 0.567722 +vn -0.528033 -0.356779 0.770643 +vn 0.524176 -0.354827 0.774168 +vn 0.466310 -0.599079 0.650891 +vn -0.415649 -0.619625 0.665808 +vn 0.688802 -0.442802 0.574002 +vn -0.714339 -0.416698 0.562212 +vn 0.750717 -0.613086 -0.246068 +vn -0.622061 -0.774466 -0.115081 +vn -0.184950 0.249468 0.950557 +vn 0.217521 0.273296 0.937013 +vn 0.904560 -0.386856 -0.179205 +vn -0.914238 -0.366421 -0.172931 +vn 0.178174 -0.089087 0.979958 +vn -0.178174 -0.089087 0.979958 +vn -0.233516 0.897192 0.374854 +vn -0.023355 0.994904 0.098089 +vn 0.447955 -0.447955 0.773740 +vn -0.580247 0.197531 0.790123 +vn 0.531271 0.584398 0.613376 +vn -0.580199 0.193400 0.791180 +vn 0.553372 -0.553372 0.622543 +vn -0.749675 -0.270716 0.603905 +vn 0.572384 -0.312209 0.758223 +vn -0.689502 -0.376092 0.618985 +vn 0.559681 -0.553321 0.616922 +vn -0.466760 -0.432937 0.771169 +vn 0.955108 -0.163648 -0.246959 +vn -0.877870 -0.478838 0.007601 +vn 0.922712 -0.376548 -0.082547 +vn -0.912871 -0.365148 -0.182574 +vn 0.997202 -0.018131 -0.072524 +vn -0.997202 -0.018131 -0.072524 +vn 0.766105 -0.636256 0.090894 +vn -0.676753 -0.728811 0.104116 +vn 0.781499 -0.617636 0.088234 +vn -0.775715 -0.617699 0.129286 +vn 0.702247 -0.702247 0.117041 +vn -0.702247 -0.702247 0.117041 +vn 0.124008 0.992066 0.020668 +vn -0.122756 0.982049 -0.143215 +vn 0.943456 0.314485 0.104828 +vn -0.937043 0.312348 0.156174 +vn 0.707107 -0.707107 -0.000000 +vn -0.624695 -0.780869 -0.000000 +vn -0.015712 0.989827 0.141404 +vn 0.015712 0.989827 0.141404 +vn 0.626572 -0.721149 0.295553 +vn -0.586648 -0.752681 0.298858 +vn 0.271445 -0.902154 0.335314 +vn -0.252880 -0.908786 0.331904 +vn -0.827110 -0.448433 -0.338816 +vn 0.865125 -0.485314 -0.126604 +vn -0.847427 0.254228 -0.466085 +vn 0.853765 0.232845 -0.465690 +vn -0.635053 0.589692 -0.498970 +vn 0.543305 0.698536 -0.465690 +vn -0.007071 0.989925 0.141418 +vn 0.109559 0.993857 -0.015651 +vn 0.104604 0.039227 0.993740 +vn -0.149019 0.055882 0.987254 +vn 0.246106 0.085190 0.965492 +vn -0.312348 0.156174 0.937043 +vn 0.322800 -0.046114 0.945343 +vn -0.236807 0.035521 0.970907 +vn 0.210358 0.012374 0.977546 +vn -0.155869 -0.034638 0.987170 +vn 0.567881 0.191574 0.800507 +vn -0.308264 -0.181332 0.933859 +vn 0.378665 -0.036410 0.924817 +vn -0.400809 -0.007157 0.916134 +vn 0.252982 -0.189737 0.948683 +vn -0.082885 -0.062164 0.994618 +vn 0.135079 -0.022513 0.990579 +vn -0.071067 -0.071067 0.994937 +vn -0.487049 0.608811 0.626205 +vn 0.404820 0.751809 0.520483 +vn 0.691363 -0.055889 0.720342 +vn -0.557086 -0.148556 0.817060 +vn 0.438819 -0.200755 0.875862 +vn -0.452596 -0.177557 0.873859 +vn 0.578610 -0.133351 0.804629 +vn -0.411054 -0.845597 0.340588 +vn 0.577089 0.216408 0.787487 +vn -0.525058 0.196897 0.827977 +vn 0.297964 0.580246 0.757979 +vn -0.297964 0.580246 0.757979 +vn 0.093117 -0.993245 -0.069241 +vn -0.110453 -0.991568 -0.067778 +vn 0.516067 -0.852690 -0.081209 +vn -0.446086 -0.890959 -0.084853 +vn 0.930889 -0.254130 0.262417 +vn -0.924652 -0.253129 0.284508 +vn 0.846495 0.529059 -0.059519 +vn -0.847951 0.529969 0.010599 +vn -0.298426 0.899733 -0.318470 +vn 0.214568 0.924293 -0.315662 +vn -0.542987 0.818859 -0.186104 +vn 0.419582 0.885145 -0.201169 +vn -0.548228 -0.003883 -0.836320 +vn 0.547026 -0.014395 -0.836991 +vn -0.266747 0.006422 -0.963745 +vn 0.255561 -0.074948 -0.963884 +vn 0.404624 0.026581 -0.914097 +vn -0.404624 0.026581 -0.914097 +vn -0.748378 0.662720 -0.027050 +vn 0.733011 0.678579 0.047174 +vn 0.816497 -0.408248 -0.408248 +vn -0.684353 -0.171088 -0.708794 +vn -0.360377 -0.828294 -0.429020 +vn 0.360377 -0.828294 -0.429020 +vn 0.661707 -0.202628 0.721862 +vn -0.663036 -0.192883 0.723312 +vn 0.826834 -0.305141 0.472477 +vn -0.828520 -0.299015 0.473440 +vn 0.407625 -0.790545 0.457034 +vn -0.425062 -0.779280 0.460484 +vn 0.379067 -0.516315 0.767937 +vn -0.338487 -0.548583 0.764515 +vn -0.099184 -0.547220 0.831091 +vn 0.085882 -0.522161 0.848512 +vn -0.258889 -0.838801 0.478945 +vn 0.266350 -0.848665 0.456974 +vn -0.774251 -0.344719 0.530758 +vn 0.782420 -0.329440 0.528477 +vn -0.470597 -0.198146 0.859812 +vn 0.476731 -0.190693 0.858116 +vn -0.482283 0.203067 0.852154 +vn 0.464927 0.195759 0.863436 +vn -0.764039 0.327842 0.555665 +vn 0.765568 0.322344 0.556777 +vn -0.241291 0.814358 0.527825 +vn 0.255987 0.807343 0.531665 +vn -0.115470 0.577350 0.808290 +vn 0.082138 0.602344 0.793999 +vn 0.386060 0.544620 0.744544 +vn -0.378344 0.513467 0.770200 +vn 0.405914 0.764073 0.501423 +vn -0.406930 0.777955 0.478742 +vn 0.829869 0.294011 0.474211 +vn -0.827165 0.292478 0.479847 +vn 0.661707 0.202628 0.721862 +vn -0.674819 0.209652 0.707577 +vn 0.781572 0.305832 -0.543702 +vn -0.847998 0.317999 -0.423999 +vn 0.203653 0.814613 -0.543075 +vn -0.214297 0.826574 -0.520435 +vn -0.432041 0.750388 -0.500258 +vn 0.405616 0.760530 -0.507020 +vn -0.846181 0.352575 -0.399585 +vn 0.864242 0.314270 -0.392837 +vn -0.832845 -0.378566 -0.403804 +vn 0.778250 -0.353750 -0.518833 +vn -0.432041 -0.750388 -0.500258 +vn 0.438063 -0.798820 -0.412294 +vn 0.203653 -0.814613 -0.543075 +vn -0.197727 -0.815623 -0.543749 +vn 0.768350 -0.329293 -0.548821 +vn -0.752217 -0.356313 -0.554265 +vn 0.105409 -0.843274 0.527046 +vn -0.141433 -0.839474 0.524671 +vn 0.191556 -0.862004 0.469313 +vn -0.233571 -0.850198 0.471813 +vn 0.578793 -0.504905 0.640367 +vn -0.548630 -0.488780 0.678306 +vn 0.776303 -0.063330 0.627171 +vn -0.756147 -0.069645 0.650685 +vn 0.747085 0.113195 0.655020 +vn -0.801465 0.121434 0.585582 +vn 0.374655 -0.834539 0.403953 +vn -0.229854 -0.896039 0.379843 +vn 0.417744 -0.575126 0.703364 +vn -0.442082 -0.684793 0.579329 +vn 0.694731 -0.419675 0.584142 +vn -0.689086 -0.423923 0.587750 +vn 0.553707 -0.297771 0.777651 +vn -0.766752 -0.256891 0.588301 +vn 0.822669 0.360622 0.439508 +vn -0.573765 -0.440072 0.690746 +vn 0.504141 0.644831 0.574486 +vn -0.505128 0.650645 0.567015 +vn 0.597716 0.556494 0.577105 +vn -0.630433 0.520792 0.575613 +vn -0.032791 0.655826 0.754200 +vn 0.048593 0.656005 0.753191 +vn -0.655169 0.326496 0.681289 +vn 0.710353 0.271548 0.649354 +vn -0.567735 0.555907 0.607161 +vn 0.601317 0.526152 0.601317 +vn 0.536408 -0.323041 0.779686 +vn -0.648351 -0.378710 0.660470 +vn 0.222645 -0.469360 0.854476 +vn -0.218052 -0.470992 0.854763 +vn -0.107349 -0.500959 0.858787 +vn 0.034841 -0.579236 0.814415 +vn -0.077015 -0.575864 0.813910 +vn 0.089902 -0.784316 0.613813 +vn 0.027886 -0.864453 0.501940 +vn -0.054668 -0.169470 0.984018 +vn 0.168675 -0.312751 0.934738 +vn -0.425985 -0.060855 0.902681 +vn 0.434968 -0.181237 0.882018 +vn -0.437362 -0.306154 0.845567 +vn 0.331076 -0.215200 0.918737 +vn -0.357888 -0.306761 0.881938 +vn 0.000000 -0.447214 0.894427 +vn -0.306946 0.211293 0.927976 +vn -0.159824 0.390339 0.906693 +vn 0.159824 0.390339 0.906693 +vn 0.185396 -0.495579 0.848545 +vn -0.334643 -0.185509 0.923905 +vn 0.058543 -0.078057 0.995229 +vn -0.386342 -0.044578 0.921278 +vn 0.057130 -0.231242 0.971217 +vn 0.006618 -0.231615 0.972785 +vn 0.100823 -0.710345 0.696595 +vn -0.020355 -0.783677 0.620835 +vn 0.132164 -0.594737 0.792982 +vn -0.207390 -0.518476 0.829561 +vn 0.314270 -0.392837 0.864242 +vn -0.175467 -0.363467 0.914934 +vn 0.328839 -0.035967 0.943701 +vn -0.281888 -0.044419 0.958419 +vn 0.323263 -0.080816 0.942852 +vn -0.359533 -0.089883 0.928793 +vn 0.023219 0.051082 0.998425 +vn -0.004435 -0.066518 0.997775 +vn 0.004339 -0.065079 0.997871 +vn 0.844653 -0.533465 0.044455 +vn -0.847337 -0.511933 -0.141223 +vn 0.963518 0.214115 -0.160586 +vn -0.949990 0.269164 -0.158332 +vn 0.101829 0.916461 -0.386950 +vn -0.070860 0.921175 -0.382642 +vn -0.722993 0.097702 0.683912 +vn 0.431934 -0.863868 0.259161 +vn -0.440225 -0.880451 0.176090 +vn -0.520719 0.615395 0.591726 +vn 0.632643 0.535313 0.559645 +vn 0.086206 0.775855 0.624994 +vn -0.089712 0.807410 0.583130 +vn 0.763885 0.297067 0.572914 +vn -0.766261 0.287348 0.574696 +vn 0.341604 -0.540874 0.768610 +vn -0.341604 -0.540874 0.768610 +vn 0.037450 0.224702 0.973708 +vn -0.040390 0.242338 0.969351 +vn 0.428571 -0.857143 0.285714 +vn 0.056293 -0.262700 0.963234 +vn -0.505913 0.071634 0.859605 +vn 0.505913 0.071634 0.859605 +vn 0.581914 -0.363696 0.727393 +vn 0.872872 -0.218218 0.436436 +vn 0.331914 0.073759 0.940422 +vn -0.729421 0.162094 0.664583 +vn 0.281546 0.066246 0.957258 +vn -0.332822 0.078311 0.939732 +vn 0.875254 0.205942 0.437627 +vn -0.791554 0.186248 0.582025 +vn 0.897301 0.199400 0.393815 +vn -0.877266 0.194948 0.438633 +vn 0.850547 0.379804 0.363756 +vn -0.893156 0.430173 0.131239 +vn 0.252426 -0.865462 0.432731 +vn -0.033615 -0.336146 0.941210 +vn -0.192450 -0.192450 0.962250 +vn 0.129641 -0.194461 0.972306 +vn -0.188144 -0.282216 0.940721 +vn 0.447214 0.000000 0.894427 +vn -0.065512 0.393073 0.917171 +vn -0.646159 0.758535 0.084282 +vn 0.646344 0.733687 0.209626 +vn 0.021652 -0.303133 0.952702 +vn -0.015962 -0.287311 0.957704 +vn -0.598986 -0.245040 0.762346 +vn 0.468122 -0.223885 0.854832 +vn -0.521444 0.052144 0.851691 +vn 0.271039 0.027104 0.962187 +vn -0.123882 0.049553 0.991059 +vn 0.171716 -0.009038 0.985105 +vn -0.548821 -0.329293 0.768350 +vn 0.433224 -0.487377 0.758143 +vn -0.159944 -0.879690 0.447842 +vn 0.159944 -0.879690 0.447842 +vn 0.389976 -0.589498 0.707398 +vn -0.418605 -0.581395 0.697674 +vn 0.654659 -0.458936 0.600666 +vn -0.591414 -0.511493 0.623382 +vn 0.537784 -0.114422 0.835282 +vn -0.544023 -0.077718 0.835463 +vn 0.577350 0.115470 0.808290 +vn -0.567152 0.110664 0.816145 +vn 0.521382 0.657395 0.544051 +vn -0.528094 0.215149 0.821479 +vn 0.179587 0.788189 0.588648 +vn -0.179587 0.788189 0.588648 +vn 0.188144 0.338659 0.921906 +vn -0.152410 0.335302 0.929701 +vn -0.012939 0.181147 0.983371 +vn 0.087030 0.275594 0.957326 +vn 0.082903 -0.290159 0.953381 +vn -0.280430 -0.218112 0.934765 +vn 0.301511 -0.301511 0.904534 +vn -0.266679 -0.304776 0.914327 +vn -0.182574 -0.912871 0.365148 +vn 0.376595 -0.833888 0.403494 +vn 0.045478 -0.750388 0.659432 +vn -0.082339 -0.782218 0.617540 +vn -0.320713 -0.267261 0.908688 +vn 0.370673 -0.285133 0.883912 +vn -0.230391 0.025599 0.972761 +vn 0.269181 -0.057682 0.961361 +vn -0.053239 0.359362 0.931678 +vn 0.279713 0.524463 0.804176 +vn -0.048679 0.681509 0.730189 +vn 0.021330 0.554574 0.831861 +vn 0.337822 0.522089 0.783134 +vn -0.350177 0.654679 0.669904 +vn 0.542520 -0.339075 0.768570 +vn -0.601445 -0.240578 0.761831 +vn 0.830474 -0.061517 0.553650 +vn -0.829185 -0.082918 0.552790 +vn 0.781404 0.111629 0.613960 +vn -0.779987 0.118180 0.614535 +vn -0.404311 0.855017 -0.324774 +vn 0.433796 0.888752 -0.148125 +vn -0.846507 0.372757 -0.380102 +vn 0.851538 0.374383 -0.367042 +vn -0.215621 0.888360 -0.405368 +vn 0.266352 0.871042 -0.412725 +vn 0.591352 0.748894 -0.299100 +vn -0.587871 0.747790 -0.308575 +vn 0.365308 0.883310 -0.293792 +vn -0.350238 0.876606 -0.329992 +vn 0.290082 0.914097 -0.283336 +vn -0.278943 0.918076 -0.281652 +vn 0.796447 0.132300 -0.590059 +vn -0.898143 0.067270 -0.434527 +vn 0.510781 -0.664871 -0.545023 +vn -0.452713 -0.728585 -0.514018 +vn 0.369484 -0.856639 -0.360071 +vn -0.440781 -0.819481 -0.366283 +vn 0.164909 -0.664414 -0.728944 +vn -0.368294 -0.677996 -0.636145 +vn 0.301108 -0.012546 -0.953508 +vn -0.171779 -0.022904 -0.984869 +vn 0.256245 -0.311155 -0.915162 +vn 0.064999 -0.357494 -0.931651 +vn 0.153296 -0.964861 -0.213412 +vn -0.058475 -0.977375 -0.203272 +vn 0.126029 -0.962407 -0.240602 +vn -0.101592 -0.965123 -0.241281 +vn 0.939565 0.157293 -0.304100 +vn -0.608216 -0.331400 -0.721282 +vn 0.927816 0.183840 -0.324592 +vn -0.920777 0.146009 -0.361734 +vn 0.219221 0.076621 -0.972662 +vn -0.087930 0.053124 -0.994709 +vn 0.199158 -0.322167 -0.925497 +vn -0.121066 -0.052967 -0.991230 +vn 0.370576 -0.677954 -0.634864 +vn -0.870302 -0.477813 -0.119453 +vn 0.920213 0.135518 -0.367211 +vn -0.920408 0.139456 -0.365241 +vn 0.945694 0.267261 -0.185027 +vn -0.924627 0.346735 -0.157607 +vn 0.933713 0.281311 -0.221458 +vn -0.907920 0.373419 -0.190370 +vn 0.950148 0.245544 -0.192165 +vn -0.991801 0.123975 0.030994 +vn 0.183497 -0.786416 -0.589812 +vn -0.079745 -0.797452 -0.598089 +vn 0.372685 -0.475901 -0.796633 +vn -0.373117 -0.470405 -0.799689 +vn 0.326270 -0.834200 -0.444588 +vn -0.330884 -0.814402 -0.476723 +vn 0.299535 -0.944220 -0.136844 +vn -0.265974 -0.954013 -0.138263 +vn 0.328655 -0.916251 -0.229063 +vn -0.284208 -0.930136 -0.232534 +vn 0.864191 -0.473705 0.169638 +vn -0.956962 0.257365 -0.134120 +vn 0.916562 -0.374043 0.141445 +vn -0.691649 -0.722163 0.010171 +vn 0.418903 -0.226512 -0.879325 +vn -0.436826 -0.042787 -0.898528 +vn 0.111918 0.962578 0.246815 +vn -0.112859 0.967467 0.226428 +vn 0.131962 0.975005 -0.178751 +vn -0.120926 0.976388 -0.179005 +vn 0.387800 0.619241 -0.682753 +vn -0.300033 0.640864 -0.706593 +vn 0.495100 0.861841 -0.110022 +vn -0.352190 0.932651 -0.078264 +vn 0.343166 0.696426 0.630260 +vn -0.256133 0.644711 0.720238 +vn 0.596551 0.788828 0.147905 +vn -0.625482 0.766875 0.143789 +vn 0.712453 0.675511 -0.189988 +vn -0.690128 0.696659 -0.195935 +vn 0.630409 0.251702 -0.734323 +vn -0.590457 0.174525 -0.787973 +vn 0.682297 0.231849 -0.693338 +vn -0.714499 0.426452 -0.554643 +vn 0.657395 0.725402 -0.204019 +vn -0.675140 0.723364 -0.144673 +vn 0.728932 0.672861 0.126161 +vn -0.738071 0.653580 0.167585 +vn 0.779118 0.407418 0.476430 +vn -0.776627 0.335766 0.533022 +vn 0.323790 0.943389 -0.071953 +vn -0.158041 0.950572 -0.267276 +vn 0.154817 0.508036 0.847308 +vn -0.156987 0.642722 0.749842 +vn -0.168134 0.100505 -0.980627 +vn 0.170233 0.109686 -0.979280 +vn 0.292531 0.567427 0.769709 +vn -0.041931 0.372966 0.926897 +vn 0.933951 0.225489 0.277291 +vn -0.498048 0.820648 -0.280152 +vn 0.927613 0.076242 0.365680 +vn -0.933361 0.235393 0.270976 +vn 0.974975 0.216855 0.048967 +vn -0.901926 0.379315 -0.206516 +vn 0.995589 0.089286 -0.028802 +vn -0.961699 0.146796 -0.231485 +vn 0.637407 -0.765079 0.091466 +vn -0.746041 -0.659560 0.091670 +vn 0.372004 -0.924373 0.084546 +vn -0.371878 -0.924382 0.085001 +vn 0.398590 -0.875437 0.273378 +vn -0.548020 -0.773958 0.317275 +vn 0.632788 -0.764224 0.124661 +vn -0.499284 -0.851720 0.159026 +vn 0.523608 -0.328992 -0.785875 +vn -0.570582 -0.344303 -0.745582 +vn 0.539638 -0.334289 -0.772685 +vn -0.562892 -0.263733 -0.783325 +vn 0.214362 -0.834108 -0.508244 +vn -0.105938 -0.916539 -0.385660 +vn 0.736521 -0.615372 -0.280809 +vn -0.697614 -0.647014 -0.307746 +vn 0.324443 0.486664 0.811107 +vn -0.480811 0.254547 0.839063 +vn 0.446708 0.097464 0.889355 +vn -0.410191 0.274828 0.869605 +vn 0.181659 -0.007898 0.983330 +vn -0.145938 0.091211 0.985080 +vn 0.292478 -0.075828 0.953261 +vn -0.283452 -0.103074 0.953431 +vn 0.584705 -0.219755 0.780915 +vn -0.505826 -0.246744 0.826594 +vn 0.595688 -0.384986 0.704941 +vn -0.613244 -0.208998 0.761743 +vn 0.613781 0.409187 0.675159 +vn -0.484318 0.558018 0.673833 +vn -0.269338 0.831434 0.485979 +vn 0.267527 0.831765 0.486412 +vn -0.800022 0.207413 0.562978 +vn 0.857614 0.222344 0.463747 +vn -0.522496 -0.356527 0.774523 +vn 0.525673 -0.357905 0.771733 +vn 0.438976 -0.525204 0.729014 +vn -0.486190 -0.519041 0.703005 +vn 0.710358 -0.456659 0.535587 +vn -0.688357 -0.473246 0.549730 +vn 0.630202 -0.765768 0.128239 +vn -0.996972 -0.037764 -0.067975 +vn -0.197104 0.314030 0.928728 +vn 0.178808 0.292337 0.939450 +vn 0.904186 -0.357840 -0.233235 +vn -0.887036 -0.383852 -0.256564 +vn 0.039984 0.339864 0.939624 +vn -0.039984 0.339864 0.939624 +vn 0.273408 0.906367 0.322097 +vn -0.137793 0.803793 0.578731 +vn 0.717741 0.168880 0.675521 +vn -0.606788 -0.606788 0.513436 +vn -0.102194 0.817553 0.566713 +vn 0.900782 -0.407496 0.150130 +vn -0.701334 -0.701334 -0.127515 +vn 0.581515 -0.521653 0.624274 +vn -0.457983 -0.441913 0.771339 +vn 0.613754 -0.257113 0.746458 +vn -0.715512 -0.415458 0.561638 +vn 0.171249 -0.093409 0.980790 +vn -0.827147 0.532322 -0.180171 +vn 0.871673 -0.444553 -0.206296 +vn -0.900500 -0.433574 -0.033352 +vn 0.689496 -0.664423 0.288334 +vn -0.772350 -0.573034 0.274059 +vn 0.792982 -0.594737 0.132164 +vn -0.797077 -0.597808 0.085401 +vn 0.240772 0.963087 -0.120386 +vn -0.242338 0.969351 0.040390 +vn 0.925132 0.346924 0.154189 +vn -0.931907 0.349465 0.097074 +vn 0.621336 -0.776671 0.103556 +vn 0.000000 1.000000 0.000000 +vn 0.619724 -0.689882 0.374173 +vn -0.661828 -0.649341 0.374620 +vn 0.275241 -0.880771 0.385337 +vn -0.296806 -0.871867 0.389557 +vn -0.822210 -0.562565 -0.086549 +vn 0.792930 -0.525187 -0.308934 +vn -0.816910 0.218382 -0.533823 +vn 0.809617 0.242885 -0.534347 +vn -0.483417 0.872662 -0.069060 +vn 0.562140 0.823134 -0.080306 +vn -0.109559 0.993857 -0.015651 +vn 0.007071 0.989925 0.141418 +vn 0.173777 0.009654 0.984738 +vn -0.137516 -0.027503 0.990118 +vn 0.413449 0.041345 0.909588 +vn -0.339983 -0.029999 0.939953 +vn 0.300945 0.092599 0.949135 +vn -0.382991 0.011264 0.923684 +vn 0.122027 0.045760 0.991471 +vn -0.180460 0.067672 0.981252 +vn -0.009916 0.386708 0.922149 +vn -0.328721 0.595807 0.732774 +vn 0.424421 -0.032032 0.904898 +vn -0.399963 -0.065300 0.914202 +vn 0.256989 0.072278 0.963708 +vn -0.361833 -0.058152 0.930427 +vn -0.041065 0.164260 0.985562 +vn -0.298142 0.745356 0.596285 +vn -0.421637 -0.527046 0.737865 +vn -0.538138 0.739940 0.403604 +vn -0.669312 0.180199 0.720798 +vn 0.472320 -0.198589 0.858764 +vn -0.443738 -0.214293 0.870158 +vn 0.297527 -0.406239 0.863972 +vn -0.493213 -0.104785 0.863575 +vn 0.500196 0.283348 0.818240 +vn -0.525068 0.302312 0.795557 +vn 0.092924 -0.991188 -0.094399 +vn -0.073694 -0.992789 -0.094551 +vn 0.468784 -0.871457 0.144241 +vn -0.585489 -0.790410 0.180150 +vn 0.926415 -0.245971 0.285051 +vn -0.934096 -0.244495 0.260168 +vn 0.826663 0.562687 -0.003473 +vn -0.832821 0.549401 -0.067585 +vn -0.191998 0.956991 -0.217498 +vn 0.251070 0.943898 -0.214522 +vn -0.355407 0.931910 -0.072321 +vn 0.484098 0.874267 -0.036127 +vn -0.521508 -0.019655 -0.853020 +vn 0.525631 -0.002993 -0.850708 +vn -0.113643 -0.054588 -0.992021 +vn 0.146646 0.010386 -0.989134 +vn -0.821852 0.563467 0.084053 +vn 0.807309 0.590114 0.004098 +vn 0.469239 -0.158527 -0.868726 +vn -0.419982 -0.229081 -0.878144 +vn -0.068684 -0.994282 -0.081767 +vn 0.068684 -0.994282 -0.081767 +s off +f 47/1/1 1/2/1 3/3/1 +f 4/4/2 2/5/2 46/6/2 +f 45/7/3 3/3/3 5/8/3 +f 6/9/4 4/4/4 44/10/4 +f 3/11/5 9/12/5 7/13/5 +f 8/14/6 10/15/6 6/9/6 +f 1/2/7 11/16/7 9/17/7 +f 10/15/8 12/18/8 4/4/8 +f 11/19/9 13/20/9 9/21/9 +f 16/22/10 14/23/10 12/18/10 +f 9/21/11 15/24/11 7/25/11 +f 18/26/12 16/22/12 10/15/12 +f 15/24/13 21/27/13 19/28/13 +f 20/29/14 22/30/14 18/31/14 +f 13/20/15 23/32/15 21/27/15 +f 22/30/16 24/33/16 16/34/16 +f 23/35/17 25/36/17 21/37/17 +f 28/38/18 26/39/18 24/33/18 +f 21/37/19 27/40/19 29/41/19 +f 30/42/20 28/38/20 20/29/20 +f 27/40/21 33/43/21 31/44/21 +f 32/45/22 34/46/22 30/42/22 +f 25/47/23 35/48/23 33/49/23 +f 34/46/24 36/50/24 28/38/24 +f 35/48/25 37/51/25 33/49/25 +f 40/52/26 38/53/26 36/54/26 +f 33/49/27 39/55/27 31/56/27 +f 42/57/28 40/52/28 34/58/28 +f 39/55/29 45/7/29 41/59/29 +f 44/60/30 46/61/30 40/52/30 +f 37/51/31 47/1/31 39/55/31 +f 46/61/32 48/62/32 38/53/32 +f 47/63/33 37/64/33 49/65/33 +f 52/66/34 38/53/34 48/62/34 +f 37/64/35 35/67/35 51/68/35 +f 54/69/36 36/70/36 38/71/36 +f 35/72/37 25/36/37 55/73/37 +f 56/74/38 26/75/38 54/69/38 +f 25/36/39 23/35/39 57/76/39 +f 58/77/40 24/78/40 56/74/40 +f 23/79/41 13/80/41 57/81/41 +f 60/82/42 14/83/42 24/84/42 +f 13/80/43 11/85/43 59/86/43 +f 64/87/44 12/88/44 14/83/44 +f 11/89/45 1/90/45 65/91/45 +f 66/92/46 2/93/46 64/94/46 +f 1/90/47 47/95/47 49/96/47 +f 50/97/48 48/98/48 66/92/48 +f 61/99/49 65/100/49 49/101/49 +f 50/102/50 66/103/50 62/104/50 +f 63/105/51 65/100/51 61/99/51 +f 62/104/52 66/103/52 64/106/52 +f 61/99/53 59/107/53 63/105/53 +f 64/108/54 60/109/54 62/110/54 +f 61/99/55 57/111/55 59/107/55 +f 60/109/56 58/112/56 62/110/56 +f 61/99/57 55/113/57 57/111/57 +f 58/112/58 56/114/58 62/110/58 +f 61/99/59 53/115/59 55/113/59 +f 56/114/60 54/116/60 62/110/60 +f 61/99/61 51/117/61 53/115/61 +f 54/116/62 52/118/62 62/110/62 +f 61/99/63 49/101/63 51/117/63 +f 52/119/64 50/102/64 62/104/64 +f 89/120/65 174/121/65 91/122/65 +f 176/123/66 175/124/66 90/125/66 +f 87/126/67 172/127/67 89/120/67 +f 175/124/68 173/128/68 88/129/68 +f 85/130/69 170/131/69 172/132/69 +f 173/128/70 171/133/70 88/129/70 +f 83/134/71 168/135/71 170/131/71 +f 171/133/72 169/136/72 86/137/72 +f 81/138/73 166/139/73 168/135/73 +f 169/140/74 167/141/74 84/142/74 +f 79/143/75 92/144/75 146/145/75 +f 147/146/76 93/147/76 165/148/76 +f 92/149/77 94/150/77 146/151/77 +f 149/152/78 95/153/78 93/147/78 +f 94/154/79 96/155/79 150/156/79 +f 151/157/80 97/158/80 149/152/80 +f 96/155/81 98/159/81 150/156/81 +f 153/160/82 99/161/82 97/158/82 +f 98/159/83 100/162/83 152/163/83 +f 155/164/84 101/165/84 99/166/84 +f 100/162/85 102/167/85 154/168/85 +f 157/169/86 103/170/86 101/165/86 +f 102/167/87 104/171/87 158/172/87 +f 159/173/88 105/174/88 157/169/88 +f 104/171/89 106/175/89 160/176/89 +f 161/177/90 107/178/90 159/179/90 +f 106/180/91 108/181/91 162/182/91 +f 163/183/92 109/184/92 161/177/92 +f 108/181/93 67/185/93 68/186/93 +f 68/187/94 67/188/94 163/183/94 +f 110/189/95 128/190/95 162/191/95 +f 161/192/96 129/193/96 111/194/96 +f 128/190/97 179/195/97 158/172/97 +f 159/196/98 180/197/98 161/192/98 +f 126/198/99 156/199/99 179/200/99 +f 159/196/100 157/201/100 180/197/100 +f 124/202/101 154/203/101 126/198/101 +f 157/201/102 155/204/102 127/205/102 +f 122/206/103 152/207/103 124/202/103 +f 155/204/104 153/160/104 125/208/104 +f 120/209/105 150/156/105 122/210/105 +f 153/160/106 151/157/106 123/211/106 +f 118/212/107 148/213/107 120/209/107 +f 151/157/108 149/152/108 119/214/108 +f 116/215/109 146/216/109 148/213/109 +f 149/152/110 147/146/110 119/214/110 +f 114/217/111 164/218/111 146/216/111 +f 147/219/112 165/220/112 117/221/112 +f 114/217/113 181/222/113 177/223/113 +f 177/223/114 182/224/114 115/225/114 +f 110/189/115 162/191/115 112/226/115 +f 68/227/116 163/228/116 111/194/116 +f 112/226/117 68/229/117 178/230/117 +f 178/231/118 68/227/118 184/232/118 +f 177/223/119 181/222/119 183/233/119 +f 184/234/120 182/224/120 178/230/120 +f 135/235/121 137/236/121 176/123/121 +f 176/123/122 137/236/122 175/124/122 +f 133/237/123 135/235/123 174/121/123 +f 175/124/124 136/238/124 173/128/124 +f 131/239/125 133/240/125 170/131/125 +f 173/128/126 134/241/126 132/242/126 +f 166/139/127 187/243/127 185/244/127 +f 186/245/128 188/246/128 169/247/128 +f 131/239/129 170/131/129 168/135/129 +f 169/136/130 171/133/130 186/248/130 +f 144/249/131 190/250/131 187/243/131 +f 189/251/132 190/250/132 188/246/132 +f 185/244/133 187/243/133 189/251/133 +f 189/251/134 188/246/134 69/252/134 +f 130/253/135 131/239/135 69/252/135 +f 186/245/135 132/254/135 69/252/135 +f 142/255/136 193/256/136 191/257/136 +f 192/258/137 194/259/137 145/260/137 +f 140/261/138 195/262/138 142/263/138 +f 194/264/139 196/265/139 141/266/139 +f 139/267/140 197/268/140 140/261/140 +f 196/269/141 198/270/141 139/271/141 +f 138/272/142 71/273/142 197/274/142 +f 198/275/143 71/276/143 139/277/143 +f 190/278/144 144/279/144 70/280/144 +f 192/258/145 145/260/145 190/281/145 +f 70/282/146 191/283/146 208/284/146 +f 207/285/147 192/258/147 70/282/147 +f 71/273/148 199/286/148 197/274/148 +f 201/287/149 199/288/149 71/276/149 +f 197/289/150 200/290/150 202/291/150 +f 203/292/151 201/293/151 196/265/151 +f 195/294/152 202/291/152 193/295/152 +f 205/296/153 203/292/153 196/265/153 +f 193/256/154 204/297/154 206/298/154 +f 207/285/155 205/299/155 194/259/155 +f 199/300/156 204/301/156 200/290/156 +f 203/302/157 205/303/157 199/288/157 +f 199/304/158 208/284/158 204/305/158 +f 207/285/159 208/284/159 205/299/159 +f 139/306/160 140/307/160 164/308/160 +f 165/220/161 141/309/161 139/310/161 +f 140/307/162 142/311/162 164/308/162 +f 212/312/163 143/313/163 165/220/163 +f 142/314/164 144/249/164 211/315/164 +f 214/316/165 145/260/165 143/317/165 +f 144/249/166 187/243/166 213/318/166 +f 167/319/167 188/246/167 145/320/167 +f 81/138/168 209/321/168 166/139/168 +f 214/322/169 210/323/169 82/324/169 +f 209/321/170 215/325/170 213/318/170 +f 212/326/171 216/327/171 210/323/171 +f 79/328/172 164/329/172 211/315/172 +f 212/326/173 165/330/173 216/327/173 +f 131/331/174 130/332/174 222/333/174 +f 72/334/175 130/332/175 132/242/175 +f 133/237/176 131/331/176 220/335/176 +f 223/336/177 132/337/177 134/338/177 +f 135/235/178 133/237/178 218/339/178 +f 221/340/179 134/338/179 136/341/179 +f 137/342/180 135/343/180 217/344/180 +f 219/345/181 136/341/181 137/342/181 +f 217/346/182 218/347/182 229/348/182 +f 230/349/183 219/350/183 231/351/183 +f 218/347/184 220/352/184 229/348/184 +f 228/353/185 221/354/185 219/350/185 +f 220/352/186 222/355/186 227/356/186 +f 226/357/187 223/358/187 221/359/187 +f 222/360/188 72/361/188 225/362/188 +f 224/363/189 72/334/189 223/364/189 +f 224/365/190 231/366/190 229/367/190 +f 230/368/191 231/366/191 226/369/191 +f 225/370/192 229/367/192 227/371/192 +f 228/372/193 230/373/193 226/374/193 +f 183/375/194 181/376/194 232/377/194 +f 235/378/195 182/224/195 184/234/195 +f 112/379/196 183/375/196 254/380/196 +f 233/381/197 184/234/197 113/382/197 +f 110/189/198 112/226/198 254/383/198 +f 255/384/199 113/382/199 257/385/199 +f 181/376/200 114/386/200 252/387/200 +f 253/388/201 115/225/201 235/378/201 +f 114/386/202 116/389/202 250/390/202 +f 251/391/203 117/392/203 115/393/203 +f 116/215/204 118/212/204 248/394/204 +f 249/395/205 119/214/205 251/391/205 +f 118/212/206 120/209/206 246/396/206 +f 247/397/207 121/398/207 249/395/207 +f 120/209/208 122/210/208 244/399/208 +f 245/400/209 123/211/209 247/397/209 +f 122/210/210 124/401/210 244/399/210 +f 243/402/211 125/403/211 123/404/211 +f 124/401/212 126/405/212 242/406/212 +f 241/407/213 127/408/213 125/403/213 +f 126/405/214 179/195/214 236/409/214 +f 237/410/215 180/411/215 127/408/215 +f 179/195/216 128/190/216 238/412/216 +f 239/413/217 129/414/217 237/415/217 +f 128/190/218 110/189/218 238/412/218 +f 257/385/219 111/416/219 129/414/219 +f 238/412/220 256/417/220 258/418/220 +f 259/419/221 257/420/221 277/421/221 +f 236/409/222 238/412/222 276/422/222 +f 277/421/223 239/423/223 279/424/223 +f 240/425/224 236/426/224 278/427/224 +f 279/424/225 237/428/225 275/429/225 +f 242/430/226 240/425/226 274/431/226 +f 275/429/227 241/432/227 273/433/227 +f 244/434/228 242/430/228 270/435/228 +f 273/436/229 243/437/229 245/438/229 +f 246/439/230 244/434/230 270/435/230 +f 271/440/231 245/438/231 269/441/231 +f 248/394/232 246/396/232 266/442/232 +f 269/441/233 247/443/233 249/444/233 +f 250/445/234 248/394/234 264/446/234 +f 267/447/235 249/444/235 265/448/235 +f 252/449/236 250/445/236 262/450/236 +f 265/451/237 251/452/237 253/453/237 +f 234/454/238 252/449/238 262/450/238 +f 263/455/239 253/453/239 281/456/239 +f 256/417/240 254/383/240 260/457/240 +f 261/458/241 255/459/241 259/419/241 +f 254/383/242 232/460/242 282/461/242 +f 283/462/243 233/463/243 261/458/243 +f 232/460/244 234/454/244 280/464/244 +f 281/456/245 235/465/245 283/466/245 +f 67/185/246 108/181/246 73/467/246 +f 285/468/247 109/469/247 67/470/247 +f 108/181/248 106/180/248 284/471/248 +f 287/472/249 107/473/249 109/469/249 +f 106/474/250 104/475/250 288/476/250 +f 289/477/251 105/478/251 287/472/251 +f 104/475/252 102/479/252 288/476/252 +f 291/480/253 103/170/253 105/174/253 +f 102/479/254 100/481/254 290/482/254 +f 293/483/255 101/165/255 103/170/255 +f 100/481/256 98/484/256 294/485/256 +f 295/486/257 99/166/257 293/483/257 +f 98/484/258 96/487/258 294/485/258 +f 297/488/259 97/489/259 99/490/259 +f 96/491/260 94/492/260 298/493/260 +f 299/494/261 95/495/261 297/488/261 +f 94/492/262 92/144/262 300/496/262 +f 301/497/263 93/498/263 299/494/263 +f 308/499/264 309/500/264 338/501/264 +f 329/502/265 309/503/265 308/504/265 +f 307/505/266 308/504/266 336/506/266 +f 339/507/267 308/504/267 307/505/267 +f 306/508/268 307/505/268 340/509/268 +f 337/510/269 307/505/269 306/508/269 +f 89/511/270 91/512/270 306/513/270 +f 306/514/271 91/122/271 341/515/271 +f 87/516/272 89/511/272 340/517/272 +f 341/518/273 90/519/273 335/520/273 +f 85/521/274 87/516/274 334/522/274 +f 335/523/275 88/524/275 331/525/275 +f 83/526/276 85/527/276 330/528/276 +f 331/529/277 86/530/277 333/531/277 +f 330/532/278 336/506/278 338/533/278 +f 339/507/279 337/510/279 333/534/279 +f 330/532/280 334/535/280 340/509/280 +f 341/536/281 335/523/281 337/510/281 +f 326/537/282 332/538/282 328/539/282 +f 339/507/283 333/534/283 327/540/283 +f 81/541/284 83/526/284 332/542/284 +f 333/531/285 84/142/285 327/543/285 +f 209/544/286 342/545/286 215/546/286 +f 345/547/287 343/548/287 210/323/287 +f 81/541/288 326/549/288 209/544/288 +f 343/548/289 327/543/289 82/324/289 +f 79/550/290 215/546/290 346/551/290 +f 345/547/291 216/327/291 80/552/291 +f 79/143/292 346/553/292 92/144/292 +f 301/497/293 347/554/293 80/555/293 +f 77/556/294 324/557/294 304/558/294 +f 353/559/295 325/560/295 77/561/295 +f 304/558/296 352/562/296 78/563/296 +f 351/564/297 353/559/297 304/565/297 +f 78/563/298 350/566/298 348/567/298 +f 349/568/299 351/569/299 305/570/299 +f 305/571/300 348/567/300 328/539/300 +f 329/572/301 349/568/301 309/573/301 +f 326/537/302 328/539/302 342/574/302 +f 349/575/303 329/576/303 327/543/303 +f 296/577/304 298/493/304 318/578/304 +f 319/579/305 299/580/305 311/581/305 +f 76/582/306 316/583/306 77/561/306 +f 325/560/307 317/584/307 76/582/307 +f 302/585/308 358/586/308 303/587/308 +f 357/588/309 359/589/309 302/590/309 +f 303/587/310 356/591/310 354/592/310 +f 355/593/311 357/594/311 75/595/311 +f 75/595/312 354/592/312 316/596/312 +f 317/584/313 355/597/313 76/582/313 +f 292/598/314 294/485/314 362/599/314 +f 363/600/315 295/486/315 365/601/315 +f 364/602/316 362/603/316 366/604/316 +f 369/605/317 363/600/317 365/601/317 +f 366/606/318 368/607/318 370/608/318 +f 371/609/319 369/605/319 373/610/319 +f 372/611/320 370/608/320 376/612/320 +f 377/613/321 371/609/321 375/614/321 +f 314/615/322 378/616/322 376/612/322 +f 375/617/323 379/618/323 315/619/323 +f 316/596/324 354/592/324 374/620/324 +f 375/617/325 355/597/325 379/618/325 +f 354/592/326 356/591/326 372/611/326 +f 373/610/327 357/588/327 375/614/327 +f 356/591/328 358/586/328 366/606/328 +f 367/621/329 359/589/329 373/610/329 +f 358/622/330 360/623/330 364/602/330 +f 365/601/331 361/624/331 367/621/331 +f 290/482/332 292/598/332 360/625/332 +f 365/601/333 293/483/333 291/480/333 +f 74/626/334 360/623/334 302/627/334 +f 359/628/335 361/629/335 74/626/335 +f 284/630/336 286/631/336 288/632/336 +f 289/633/337 287/634/337 291/635/337 +f 284/636/338 290/637/338 360/638/338 +f 361/624/339 291/480/339 74/639/339 +f 73/640/340 284/641/340 74/642/340 +f 74/642/341 285/643/341 73/640/341 +f 294/485/342 296/644/342 362/599/342 +f 311/645/343 297/646/343 295/486/343 +f 310/647/344 312/648/344 368/649/344 +f 369/605/345 313/650/345 363/600/345 +f 312/651/346 382/652/346 370/608/346 +f 371/609/347 383/653/347 369/605/347 +f 314/654/348 376/655/348 382/656/348 +f 371/609/349 377/613/349 315/657/349 +f 348/567/350 350/566/350 384/658/350 +f 387/659/351 351/569/351 349/568/351 +f 318/578/352 384/658/352 320/660/352 +f 387/659/353 385/661/353 319/579/353 +f 298/493/354 300/496/354 384/658/354 +f 385/661/355 301/662/355 319/579/355 +f 300/496/356 344/663/356 342/574/356 +f 343/664/357 345/665/357 385/661/357 +f 342/574/358 348/567/358 384/658/358 +f 385/661/359 349/568/359 343/664/359 +f 300/666/360 346/667/360 344/668/360 +f 345/665/361 347/669/361 301/662/361 +f 314/670/362 322/671/362 378/672/362 +f 381/673/363 323/674/363 315/619/363 +f 316/675/364 378/672/364 324/557/364 +f 381/673/365 379/618/365 317/584/365 +f 320/660/366 386/676/366 322/671/366 +f 381/673/367 387/677/367 321/678/367 +f 350/566/368 352/562/368 386/676/368 +f 381/673/369 353/559/369 351/564/369 +f 324/557/370 380/679/370 352/562/370 +f 353/559/371 381/673/371 325/560/371 +f 400/680/372 388/681/372 402/682/372 +f 415/683/373 389/684/373 401/685/373 +f 400/680/374 402/682/374 404/686/374 +f 405/687/375 403/688/375 399/689/375 +f 398/690/376 404/686/376 396/691/376 +f 407/692/377 405/693/377 399/694/377 +f 396/691/378 406/695/378 394/696/378 +f 409/697/379 407/692/379 397/698/379 +f 394/696/380 408/699/380 392/700/380 +f 411/701/381 409/702/381 395/703/381 +f 392/700/382 410/704/382 412/705/382 +f 413/706/383 411/701/383 391/707/383 +f 410/704/384 420/708/384 412/705/384 +f 419/709/385 421/710/385 411/711/385 +f 408/712/386 422/713/386 410/714/386 +f 421/715/387 423/716/387 409/697/387 +f 406/717/388 424/718/388 422/713/388 +f 423/716/389 425/719/389 409/697/389 +f 404/720/390 426/721/390 424/722/390 +f 425/719/391 427/723/391 407/692/391 +f 402/682/392 428/724/392 404/686/392 +f 427/725/393 429/726/393 403/727/393 +f 402/682/394 414/728/394 416/729/394 +f 417/730/395 415/731/395 429/726/395 +f 318/578/396 320/660/396 442/732/396 +f 445/733/397 321/734/397 319/579/397 +f 320/735/398 390/736/398 412/705/398 +f 413/737/399 391/738/399 445/739/399 +f 310/740/400 318/578/400 442/732/400 +f 443/741/401 319/742/401 313/743/401 +f 382/744/402 430/745/402 414/728/402 +f 415/683/403 431/746/403 383/747/403 +f 412/748/404 418/749/404 440/750/404 +f 441/751/405 419/709/405 445/752/405 +f 438/753/406 446/754/406 440/755/406 +f 445/756/407 447/757/407 439/758/407 +f 434/759/408 446/754/408 438/753/408 +f 439/760/409 447/761/409 437/762/409 +f 432/763/410 448/764/410 434/765/410 +f 447/766/411 449/767/411 433/768/411 +f 430/745/412 448/769/412 450/770/412 +f 433/768/413 449/767/413 431/771/413 +f 414/728/414 430/745/414 416/729/414 +f 451/772/415 431/771/415 415/731/415 +f 312/773/416 448/764/416 382/774/416 +f 431/775/417 449/776/417 313/650/417 +f 312/773/418 442/732/418 448/764/418 +f 447/766/419 443/777/419 313/778/419 +f 442/732/420 444/779/420 446/780/420 +f 447/781/421 445/782/421 443/783/421 +f 416/784/422 450/785/422 452/786/422 +f 453/787/423 451/772/423 477/788/423 +f 450/785/424 432/763/424 452/786/424 +f 463/789/425 433/768/425 451/772/425 +f 432/763/426 434/765/426 460/790/426 +f 461/791/427 435/792/427 463/789/427 +f 434/793/428 436/794/428 460/795/428 +f 459/796/429 437/762/429 435/797/429 +f 436/798/430 438/753/430 458/799/430 +f 457/800/431 439/760/431 437/762/431 +f 438/801/432 440/802/432 454/803/432 +f 455/804/433 441/805/433 457/806/433 +f 440/750/434 418/749/434 474/807/434 +f 475/808/435 419/809/435 441/810/435 +f 428/811/436 416/784/436 476/812/436 +f 477/788/437 417/730/437 465/813/437 +f 426/814/438 428/811/438 464/815/438 +f 465/813/439 429/726/439 467/816/439 +f 424/817/440 426/818/440 468/819/440 +f 467/820/441 427/821/441 425/822/441 +f 422/823/442 424/817/442 468/819/442 +f 469/824/443 425/825/443 471/826/443 +f 420/827/444 422/713/444 470/828/444 +f 471/826/445 423/829/445 473/830/445 +f 418/749/446 420/831/446 474/807/446 +f 473/830/447 421/832/447 475/808/447 +f 458/799/448 456/833/448 478/834/448 +f 481/835/449 457/836/449 459/837/449 +f 478/834/450 480/838/450 484/839/450 +f 483/840/451 481/835/451 479/841/451 +f 484/839/452 482/842/452 488/843/452 +f 489/844/453 483/840/453 487/845/453 +f 486/846/454 488/843/454 492/847/454 +f 491/848/455 489/844/455 487/845/455 +f 464/849/456 476/850/456 486/846/456 +f 487/845/457 477/851/457 493/852/457 +f 452/853/458 484/839/458 476/850/458 +f 487/854/459 485/855/459 453/787/459 +f 452/853/460 462/856/460 484/839/460 +f 479/841/461 463/857/461 453/858/461 +f 458/799/462 478/834/462 462/856/462 +f 463/857/463 479/841/463 461/859/463 +f 454/860/464 474/861/464 456/862/464 +f 481/835/465 475/863/465 455/864/465 +f 472/865/466 482/842/466 474/866/466 +f 481/867/467 483/868/467 473/869/467 +f 470/870/468 488/843/468 472/865/468 +f 483/868/469 489/871/469 471/872/469 +f 468/873/470 490/874/470 470/870/470 +f 489/871/471 491/875/471 469/876/471 +f 466/877/472 492/847/472 490/874/472 +f 491/878/473 493/879/473 469/880/473 +f 464/849/474 492/847/474 466/877/474 +f 467/881/475 493/879/475 465/149/475 +f 392/882/476 390/883/476 504/884/476 +f 505/885/477 391/707/477 503/886/477 +f 394/887/478 392/882/478 502/888/478 +f 503/886/479 393/889/479 501/890/479 +f 396/891/480 394/887/480 498/892/480 +f 501/890/481 395/703/481 397/893/481 +f 398/894/482 396/895/482 496/896/482 +f 499/897/483 397/898/483 399/899/483 +f 400/900/484 398/894/484 496/896/484 +f 497/901/485 399/902/485 495/903/485 +f 388/904/486 400/905/486 494/906/486 +f 495/903/487 401/907/487 507/908/487 +f 494/909/488 502/910/488 504/629/488 +f 505/911/489 503/912/489 507/908/489 +f 494/909/490 496/913/490 502/910/490 +f 501/914/491 497/915/491 495/916/491 +f 496/896/492 498/917/492 500/918/492 +f 501/914/493 499/919/493 497/915/493 +f 314/920/494 382/921/494 388/904/494 +f 389/922/495 383/923/495 507/908/495 +f 314/670/496 506/924/496 322/671/496 +f 505/925/497 507/926/497 315/619/497 +f 320/927/498 322/928/498 504/929/498 +f 505/930/499 323/931/499 321/932/499 +f 45/7/500 47/1/500 3/3/500 +f 2/5/501 48/933/501 46/6/501 +f 43/934/502 45/7/502 5/8/502 +f 4/4/503 46/6/503 44/10/503 +f 5/935/504 3/11/504 7/13/504 +f 10/15/505 4/4/505 6/9/505 +f 3/3/506 1/2/506 9/17/506 +f 12/18/507 2/5/507 4/4/507 +f 13/20/508 15/24/508 9/21/508 +f 10/15/509 16/22/509 12/18/509 +f 15/24/510 17/936/510 7/25/510 +f 8/14/511 18/26/511 10/15/511 +f 17/936/512 15/24/512 19/28/512 +f 22/30/513 16/34/513 18/31/513 +f 15/24/514 13/20/514 21/27/514 +f 24/33/515 14/937/515 16/34/515 +f 25/36/516 27/40/516 21/37/516 +f 22/30/517 28/38/517 24/33/517 +f 19/938/518 21/37/518 29/41/518 +f 28/38/519 22/30/519 20/29/519 +f 29/41/520 27/40/520 31/44/520 +f 34/46/521 28/38/521 30/42/521 +f 27/939/522 25/47/522 33/49/522 +f 36/50/523 26/39/523 28/38/523 +f 37/51/524 39/55/524 33/49/524 +f 34/58/525 40/52/525 36/54/525 +f 39/55/526 41/59/526 31/56/526 +f 32/940/527 42/57/527 34/58/527 +f 45/7/528 43/934/528 41/59/528 +f 42/57/529 44/60/529 40/52/529 +f 47/1/530 45/7/530 39/55/530 +f 40/52/531 46/61/531 38/53/531 +f 37/64/532 51/68/532 49/65/532 +f 50/941/533 52/66/533 48/62/533 +f 35/67/534 53/942/534 51/68/534 +f 52/943/535 54/69/535 38/71/535 +f 53/944/536 35/72/536 55/73/536 +f 26/75/537 36/70/537 54/69/537 +f 55/73/538 25/36/538 57/76/538 +f 24/78/539 26/75/539 56/74/539 +f 13/80/540 59/86/540 57/81/540 +f 58/945/541 60/82/541 24/84/541 +f 11/85/542 63/946/542 59/86/542 +f 60/82/543 64/87/543 14/83/543 +f 63/947/544 11/89/544 65/91/544 +f 2/93/545 12/948/545 64/94/545 +f 65/91/546 1/90/546 49/96/546 +f 48/98/547 2/93/547 66/92/547 +f 174/121/548 176/123/548 91/122/548 +f 91/122/549 176/123/549 90/125/549 +f 172/127/550 174/121/550 89/120/550 +f 90/125/551 175/124/551 88/129/551 +f 87/949/552 85/130/552 172/132/552 +f 171/133/553 86/137/553 88/129/553 +f 85/130/554 83/134/554 170/131/554 +f 169/136/555 84/950/555 86/137/555 +f 83/134/556 81/138/556 168/135/556 +f 167/141/557 82/324/557 84/142/557 +f 164/951/558 79/143/558 146/145/558 +f 93/147/559 80/952/559 165/148/559 +f 94/150/560 148/953/560 146/151/560 +f 147/146/561 149/152/561 93/147/561 +f 148/213/562 94/154/562 150/156/562 +f 97/158/563 95/153/563 149/152/563 +f 98/159/564 152/163/564 150/156/564 +f 151/157/565 153/160/565 97/158/565 +f 100/162/566 154/168/566 152/163/566 +f 153/954/567 155/164/567 99/166/567 +f 102/167/568 156/955/568 154/168/568 +f 155/164/569 157/169/569 101/165/569 +f 156/955/570 102/167/570 158/172/570 +f 105/174/571 103/170/571 157/169/571 +f 158/172/572 104/171/572 160/176/572 +f 107/178/573 105/956/573 159/179/573 +f 160/957/574 106/180/574 162/182/574 +f 109/184/575 107/178/575 161/177/575 +f 162/182/576 108/181/576 68/186/576 +f 67/188/577 109/184/577 163/183/577 +f 128/190/578 160/176/578 162/191/578 +f 163/228/579 161/192/579 111/194/579 +f 160/176/580 128/190/580 158/172/580 +f 180/197/581 129/193/581 161/192/581 +f 156/199/582 158/958/582 179/200/582 +f 157/201/583 127/205/583 180/197/583 +f 154/203/584 156/199/584 126/198/584 +f 155/204/585 125/208/585 127/205/585 +f 152/207/586 154/203/586 124/202/586 +f 153/160/587 123/211/587 125/208/587 +f 150/156/588 152/163/588 122/210/588 +f 151/157/589 121/398/589 123/211/589 +f 148/213/590 150/156/590 120/209/590 +f 121/398/591 151/157/591 119/214/591 +f 118/212/592 116/215/592 148/213/592 +f 147/146/593 117/392/593 119/214/593 +f 116/215/594 114/217/594 146/216/594 +f 165/220/595 115/225/595 117/221/595 +f 164/218/596 114/217/596 177/223/596 +f 165/220/597 177/223/597 115/225/597 +f 162/191/598 68/229/598 112/226/598 +f 113/959/599 68/227/599 111/194/599 +f 183/233/600 112/226/600 178/230/600 +f 68/227/601 113/959/601 184/232/601 +f 178/230/602 177/223/602 183/233/602 +f 182/224/603 177/223/603 178/230/603 +f 174/121/604 135/235/604 176/123/604 +f 137/236/605 136/238/605 175/124/605 +f 172/127/606 133/237/606 174/121/606 +f 136/238/607 134/241/607 173/128/607 +f 133/240/608 172/132/608 170/131/608 +f 171/133/609 173/128/609 132/242/609 +f 168/135/610 166/139/610 185/244/610 +f 188/246/611 167/319/611 169/247/611 +f 185/244/612 131/239/612 168/135/612 +f 171/133/613 132/242/613 186/248/613 +f 190/250/132 189/251/132 187/243/132 +f 190/250/614 145/320/614 188/246/614 +f 69/252/615 185/244/615 189/251/615 +f 188/246/616 186/245/616 69/252/616 +f 131/239/135 185/244/135 69/252/135 +f 132/254/135 130/253/135 69/252/135 +f 144/279/617 142/255/617 191/257/617 +f 194/259/618 143/317/618 145/260/618 +f 195/262/619 193/960/619 142/263/619 +f 143/961/620 194/264/620 141/266/620 +f 197/268/621 195/262/621 140/261/621 +f 141/962/622 196/269/622 139/271/622 +f 139/963/623 138/272/623 197/274/623 +f 71/276/187 138/964/187 139/277/187 +f 144/279/624 191/257/624 70/280/624 +f 70/282/625 192/258/625 190/281/625 +f 191/283/146 206/965/146 208/284/146 +f 208/284/147 207/285/147 70/282/147 +f 199/286/626 200/966/626 197/274/626 +f 198/275/627 201/287/627 71/276/627 +f 195/294/628 197/289/628 202/291/628 +f 201/293/629 198/967/629 196/265/629 +f 202/291/630 204/301/630 193/295/630 +f 194/264/631 205/296/631 196/265/631 +f 191/257/632 193/256/632 206/298/632 +f 192/258/633 207/285/633 194/259/633 +f 204/301/634 202/291/634 200/290/634 +f 201/287/635 203/302/635 199/288/635 +f 208/284/636 206/965/636 204/305/636 +f 208/284/637 199/304/637 205/299/637 +f 177/968/638 139/306/638 164/308/638 +f 177/223/639 165/220/639 139/310/639 +f 142/311/640 211/969/640 164/308/640 +f 143/313/641 141/309/641 165/220/641 +f 144/249/642 213/318/642 211/315/642 +f 212/970/643 214/316/643 143/317/643 +f 187/243/644 166/139/644 213/318/644 +f 214/971/645 167/319/645 145/320/645 +f 209/321/646 213/318/646 166/139/646 +f 167/141/647 214/322/647 82/324/647 +f 215/325/648 211/315/648 213/318/648 +f 214/322/649 212/326/649 210/323/649 +f 215/325/650 79/328/650 211/315/650 +f 165/330/651 80/552/651 216/327/651 +f 130/332/652 72/334/652 222/333/652 +f 223/364/653 72/334/653 132/242/653 +f 131/331/654 222/333/654 220/335/654 +f 221/340/655 223/336/655 134/338/655 +f 133/237/656 220/335/656 218/339/656 +f 219/345/657 221/340/657 136/341/657 +f 135/343/658 218/972/658 217/344/658 +f 217/344/135 219/345/135 137/342/135 +f 231/973/182 217/346/182 229/348/182 +f 219/350/183 217/974/183 231/351/183 +f 220/352/659 227/356/659 229/348/659 +f 230/349/660 228/353/660 219/350/660 +f 222/355/186 225/975/186 227/356/186 +f 228/976/187 226/357/187 221/359/187 +f 72/361/188 224/977/188 225/362/188 +f 226/978/189 224/363/189 223/364/189 +f 225/370/661 224/365/661 229/367/661 +f 231/366/662 224/365/662 226/369/662 +f 181/376/663 234/979/663 232/377/663 +f 233/381/664 235/378/664 184/234/664 +f 183/375/665 232/377/665 254/380/665 +f 255/384/666 233/381/666 113/382/666 +f 256/417/667 110/189/667 254/383/667 +f 113/382/668 111/416/668 257/385/668 +f 234/979/669 181/376/669 252/387/669 +f 115/225/670 182/224/670 235/378/670 +f 252/387/671 114/386/671 250/390/671 +f 253/980/672 251/391/672 115/393/672 +f 250/445/673 116/215/673 248/394/673 +f 119/214/674 117/392/674 251/391/674 +f 248/394/675 118/212/675 246/396/675 +f 121/398/676 119/214/676 249/395/676 +f 246/396/677 120/209/677 244/399/677 +f 123/211/678 121/398/678 247/397/678 +f 124/401/679 242/406/679 244/399/679 +f 245/981/680 243/402/680 123/404/680 +f 126/405/681 240/982/681 242/406/681 +f 243/402/682 241/407/682 125/403/682 +f 240/982/683 126/405/683 236/409/683 +f 241/407/684 237/410/684 127/408/684 +f 236/409/685 179/195/685 238/412/685 +f 129/414/686 180/983/686 237/415/686 +f 110/189/687 256/417/687 238/412/687 +f 239/413/688 257/385/688 129/414/688 +f 276/422/689 238/412/689 258/418/689 +f 257/420/690 239/423/690 277/421/690 +f 278/984/691 236/409/691 276/422/691 +f 239/423/692 237/428/692 279/424/692 +f 274/431/693 240/425/693 278/427/693 +f 237/428/694 241/432/694 275/429/694 +f 272/985/695 242/430/695 274/431/695 +f 241/432/696 243/986/696 273/433/696 +f 242/430/697 272/985/697 270/435/697 +f 271/440/698 273/436/698 245/438/698 +f 268/987/699 246/439/699 270/435/699 +f 245/438/700 247/443/700 269/441/700 +f 246/396/701 268/988/701 266/442/701 +f 267/447/702 269/441/702 249/444/702 +f 248/394/703 266/442/703 264/446/703 +f 249/444/704 251/989/704 265/448/704 +f 250/445/705 264/446/705 262/450/705 +f 263/455/706 265/451/706 253/453/706 +f 280/464/238 234/454/238 262/450/238 +f 253/453/239 235/465/239 281/456/239 +f 258/418/707 256/417/707 260/457/707 +f 255/459/708 257/420/708 259/419/708 +f 260/457/709 254/383/709 282/461/709 +f 233/463/710 255/459/710 261/458/710 +f 282/461/711 232/460/711 280/464/711 +f 235/465/712 233/990/712 283/466/712 +f 108/181/713 284/471/713 73/467/713 +f 73/991/714 285/468/714 67/470/714 +f 106/180/715 286/992/715 284/471/715 +f 285/468/716 287/472/716 109/469/716 +f 286/993/717 106/474/717 288/476/717 +f 105/478/718 107/473/718 287/472/718 +f 102/479/719 290/482/719 288/476/719 +f 289/994/720 291/480/720 105/174/720 +f 100/481/721 292/598/721 290/482/721 +f 291/480/722 293/483/722 103/170/722 +f 292/598/723 100/481/723 294/485/723 +f 99/166/724 101/165/724 293/483/724 +f 96/487/725 296/644/725 294/485/725 +f 295/995/726 297/488/726 99/490/726 +f 296/577/727 96/491/727 298/493/727 +f 95/495/728 97/489/728 297/488/728 +f 298/493/729 94/492/729 300/496/729 +f 93/498/730 95/495/730 299/494/730 +f 309/500/731 328/539/731 338/501/731 +f 339/507/732 329/502/732 308/504/732 +f 308/504/733 338/533/733 336/506/733 +f 337/510/734 339/507/734 307/505/734 +f 307/505/735 336/506/735 340/509/735 +f 341/536/736 337/510/736 306/508/736 +f 340/517/737 89/511/737 306/513/737 +f 91/122/738 90/125/738 341/515/738 +f 334/522/739 87/516/739 340/517/739 +f 90/519/740 88/996/740 335/520/740 +f 330/997/741 85/521/741 334/522/741 +f 88/524/742 86/998/742 331/525/742 +f 332/542/743 83/526/743 330/528/743 +f 86/530/744 84/142/744 333/531/744 +f 332/999/745 330/532/745 338/533/745 +f 337/510/746 331/525/746 333/534/746 +f 336/506/747 330/532/747 340/509/747 +f 335/523/748 331/525/748 337/510/748 +f 332/538/749 338/501/749 328/539/749 +f 329/502/750 339/507/750 327/540/750 +f 326/549/751 81/541/751 332/542/751 +f 84/142/752 82/324/752 327/543/752 +f 342/545/753 344/1000/753 215/546/753 +f 216/327/754 345/547/754 210/323/754 +f 326/549/755 342/545/755 209/544/755 +f 210/323/756 343/548/756 82/324/756 +f 215/546/757 344/1000/757 346/551/757 +f 347/1001/758 345/547/758 80/552/758 +f 346/553/759 300/496/759 92/144/759 +f 93/498/760 301/497/760 80/555/760 +f 324/557/761 352/562/761 304/558/761 +f 304/565/762 353/559/762 77/561/762 +f 352/562/763 350/566/763 78/563/763 +f 78/1002/764 351/564/764 304/565/764 +f 305/571/765 78/563/765 348/567/765 +f 351/569/766 78/1003/766 305/570/766 +f 309/500/767 305/571/767 328/539/767 +f 349/568/768 305/570/768 309/573/768 +f 328/539/769 348/567/769 342/574/769 +f 343/548/770 349/575/770 327/543/770 +f 310/740/771 296/577/771 318/578/771 +f 299/580/772 297/1004/772 311/581/772 +f 316/583/773 324/1005/773 77/561/773 +f 77/561/774 325/560/774 76/582/774 +f 358/586/775 356/591/775 303/587/775 +f 303/1006/776 357/588/776 302/590/776 +f 75/595/777 303/587/777 354/592/777 +f 357/594/778 303/587/778 75/595/778 +f 76/1007/779 75/595/779 316/596/779 +f 355/597/780 75/1008/780 76/582/780 +f 364/1009/781 292/598/781 362/599/781 +f 295/486/782 293/483/782 365/601/782 +f 362/603/783 368/649/783 366/604/783 +f 367/621/784 369/605/784 365/601/784 +f 372/611/785 366/606/785 370/608/785 +f 369/605/786 367/621/786 373/610/786 +f 374/620/787 372/611/787 376/612/787 +f 371/609/788 373/610/788 375/614/788 +f 378/616/789 374/620/789 376/612/789 +f 377/1010/790 375/617/790 315/619/790 +f 378/616/791 316/596/791 374/620/791 +f 355/597/792 317/584/792 379/618/792 +f 374/620/793 354/592/793 372/611/793 +f 357/588/794 355/1011/794 375/614/794 +f 372/611/795 356/591/795 366/606/795 +f 359/589/796 357/588/796 373/610/796 +f 366/604/797 358/622/797 364/602/797 +f 361/624/798 359/589/798 367/621/798 +f 292/598/799 364/1009/799 360/625/799 +f 361/624/800 365/601/800 291/480/800 +f 360/623/801 358/622/801 302/627/801 +f 302/627/802 359/628/802 74/626/802 +f 290/1012/803 284/630/803 288/632/803 +f 287/634/804 285/1013/804 291/635/804 +f 74/1014/805 284/636/805 360/638/805 +f 291/480/806 285/1015/806 74/639/806 +f 296/644/807 310/1016/807 362/599/807 +f 363/600/808 311/645/808 295/486/808 +f 362/603/809 310/647/809 368/649/809 +f 313/650/810 311/645/810 363/600/810 +f 368/607/811 312/651/811 370/608/811 +f 383/653/812 313/650/812 369/605/812 +f 376/655/813 370/1017/813 382/656/813 +f 383/653/814 371/609/814 315/657/814 +f 350/566/815 386/676/815 384/658/815 +f 385/661/816 387/659/816 349/568/816 +f 384/658/817 386/676/817 320/660/817 +f 321/734/818 387/659/818 319/579/818 +f 318/578/819 298/493/819 384/658/819 +f 301/662/820 299/580/820 319/579/820 +f 384/658/821 300/496/821 342/574/821 +f 345/665/822 301/662/822 385/661/822 +f 322/671/823 380/679/823 378/672/823 +f 379/618/824 381/673/824 315/619/824 +f 378/672/825 380/679/825 324/557/825 +f 325/560/826 381/673/826 317/584/826 +f 386/676/827 380/679/827 322/671/827 +f 323/674/828 381/673/828 321/678/828 +f 352/562/829 380/679/829 386/676/829 +f 387/677/830 381/673/830 351/564/830 +f 388/681/831 414/728/831 402/682/831 +f 403/1018/832 415/683/832 401/685/832 +f 398/690/833 400/680/833 404/686/833 +f 403/688/834 401/1019/834 399/689/834 +f 404/686/835 406/695/835 396/691/835 +f 397/698/836 407/692/836 399/694/836 +f 406/695/837 408/699/837 394/696/837 +f 395/1020/838 409/697/838 397/698/838 +f 408/699/839 410/704/839 392/700/839 +f 393/889/840 411/701/840 395/703/840 +f 390/736/841 392/700/841 412/705/841 +f 411/701/842 393/889/842 391/707/842 +f 420/708/843 418/1021/843 412/705/843 +f 413/1022/844 419/709/844 411/711/844 +f 422/713/845 420/827/845 410/714/845 +f 411/1023/846 421/715/846 409/697/846 +f 408/712/847 406/717/847 422/713/847 +f 425/719/848 407/692/848 409/697/848 +f 406/1024/849 404/720/849 424/722/849 +f 427/723/850 405/693/850 407/692/850 +f 428/724/851 426/1025/851 404/686/851 +f 405/1026/852 427/725/852 403/727/852 +f 428/724/853 402/682/853 416/729/853 +f 415/731/854 403/727/854 429/726/854 +f 320/660/855 444/779/855 442/732/855 +f 443/1027/856 445/733/856 319/579/856 +f 444/1028/857 320/735/857 412/705/857 +f 391/738/858 321/1029/858 445/739/858 +f 312/773/859 310/740/859 442/732/859 +f 319/742/860 311/1030/860 313/743/860 +f 388/681/861 382/744/861 414/728/861 +f 389/684/862 415/683/862 383/747/862 +f 444/1031/863 412/748/863 440/750/863 +f 419/709/864 413/1022/864 445/752/864 +f 446/754/865 444/1032/865 440/755/865 +f 441/805/866 445/756/866 439/758/866 +f 436/798/135 434/759/135 438/753/135 +f 447/761/867 435/797/867 437/762/867 +f 448/764/868 446/780/868 434/765/868 +f 435/792/869 447/766/869 433/768/869 +f 448/769/870 432/1033/870 450/770/870 +f 451/772/871 433/768/871 431/771/871 +f 430/745/872 450/770/872 416/729/872 +f 417/730/873 451/772/873 415/731/873 +f 448/764/874 430/1034/874 382/774/874 +f 383/653/875 431/775/875 313/650/875 +f 442/732/876 446/780/876 448/764/876 +f 449/767/877 447/766/877 313/778/877 +f 476/812/878 416/784/878 452/786/878 +f 451/772/879 417/730/879 477/788/879 +f 432/763/880 462/1035/880 452/786/880 +f 453/787/881 463/789/881 451/772/881 +f 462/1035/426 432/763/426 460/790/426 +f 435/792/427 433/768/427 463/789/427 +f 436/794/882 458/1036/882 460/795/882 +f 461/1037/883 459/796/883 435/797/883 +f 438/753/884 456/833/884 458/799/884 +f 459/796/885 457/800/885 437/762/885 +f 456/1038/886 438/801/886 454/803/886 +f 441/805/427 439/758/427 457/806/427 +f 454/1039/887 440/750/887 474/807/887 +f 455/1040/887 475/808/887 441/810/887 +f 464/815/888 428/811/888 476/812/888 +f 417/730/889 429/726/889 465/813/889 +f 466/1041/890 426/814/890 464/815/890 +f 429/726/891 427/725/891 467/816/891 +f 426/818/892 466/1042/892 468/819/892 +f 469/1043/893 467/820/893 425/822/893 +f 470/1044/894 422/823/894 468/819/894 +f 425/825/895 423/829/895 471/826/895 +f 472/1045/896 420/827/896 470/828/896 +f 423/829/897 421/832/897 473/830/897 +f 420/831/898 472/1046/898 474/807/898 +f 421/832/899 419/809/899 475/808/899 +f 456/833/900 480/838/900 478/834/900 +f 479/841/901 481/835/901 459/837/901 +f 480/838/902 482/842/902 484/839/902 +f 485/1047/903 483/840/903 479/841/903 +f 486/846/904 484/839/904 488/843/904 +f 483/840/905 485/1047/905 487/845/905 +f 488/843/906 490/874/906 492/847/906 +f 493/852/907 491/848/907 487/845/907 +f 492/847/908 464/849/908 486/846/908 +f 477/851/909 465/1048/909 493/852/909 +f 484/839/910 486/846/910 476/850/910 +f 477/788/911 487/854/911 453/787/911 +f 462/856/912 478/834/912 484/839/912 +f 485/1047/913 479/841/913 453/858/913 +f 460/1049/135 458/799/135 462/856/135 +f 479/841/914 459/837/914 461/859/914 +f 474/861/915 480/1050/915 456/862/915 +f 457/836/916 481/835/916 455/864/916 +f 482/842/917 480/838/917 474/866/917 +f 475/1051/918 481/867/918 473/869/918 +f 488/843/919 482/842/919 472/865/919 +f 473/869/920 483/868/920 471/872/920 +f 490/874/921 488/843/921 470/870/921 +f 471/872/922 489/871/922 469/876/922 +f 468/873/923 466/877/923 490/874/923 +f 493/879/924 467/881/924 469/880/924 +f 502/888/925 392/882/925 504/884/925 +f 391/707/926 393/889/926 503/886/926 +f 500/1052/927 394/887/927 502/888/927 +f 393/889/928 395/703/928 501/890/928 +f 394/887/929 500/1052/929 498/892/929 +f 499/1053/930 501/890/930 397/893/930 +f 396/895/931 498/917/931 496/896/931 +f 497/1054/932 499/897/932 399/899/932 +f 494/1055/933 400/900/933 496/896/933 +f 399/902/934 401/907/934 495/903/934 +f 506/1056/935 388/904/935 494/906/935 +f 401/907/936 389/922/936 507/908/936 +f 506/1057/937 494/909/937 504/629/937 +f 503/912/938 495/903/938 507/908/938 +f 496/913/939 500/1058/939 502/910/939 +f 503/1059/940 501/914/940 495/916/940 +f 506/1056/941 314/920/941 388/904/941 +f 383/923/942 315/1060/942 507/908/942 +f 506/924/943 504/1061/943 322/671/943 +f 323/674/944 505/925/944 315/619/944 +f 390/1062/945 320/927/945 504/929/945 +f 391/1063/946 505/930/946 321/932/946 diff --git a/src/datavis3d/engine/meshes/apeSmooth.obj b/src/datavis3d/engine/meshes/apeSmooth.obj new file mode 100644 index 00000000..a27f0360 --- /dev/null +++ b/src/datavis3d/engine/meshes/apeSmooth.obj @@ -0,0 +1,3049 @@ +# Blender v2.66 (sub 0) OBJ File: 'cylinder.blend' +# www.blender.org +o Suzanne +v -2.122357 0.164062 -1.198706 +v -2.997357 0.164062 -1.198706 +v -2.059857 0.093750 -1.276831 +v -3.059857 0.093750 -1.276831 +v -2.012982 0.054687 -1.386206 +v -3.106732 0.054687 -1.386206 +v -2.208294 -0.023438 -1.347144 +v -2.911419 -0.023438 -1.347144 +v -2.208294 0.031250 -1.245581 +v -2.911419 0.031250 -1.245581 +v -2.208294 0.132812 -1.183081 +v -2.911419 0.132812 -1.183081 +v -2.286419 0.164062 -1.167456 +v -2.833294 0.164062 -1.167456 +v -2.356732 0.093750 -1.222144 +v -2.762982 0.093750 -1.222144 +v -2.403607 0.054687 -1.315894 +v -2.716107 0.054687 -1.315894 +v -2.481732 0.242187 -1.308081 +v -2.637982 0.242187 -1.308081 +v -2.419232 0.242187 -1.222144 +v -2.700482 0.242187 -1.222144 +v -2.317669 0.242187 -1.167456 +v -2.802044 0.242187 -1.167456 +v -2.286419 0.328125 -1.167456 +v -2.833294 0.328125 -1.167456 +v -2.356732 0.390625 -1.222144 +v -2.762982 0.390625 -1.222144 +v -2.403607 0.437500 -1.315894 +v -2.716107 0.437500 -1.315894 +v -2.208294 0.515625 -1.347144 +v -2.911419 0.515625 -1.347144 +v -2.208294 0.453125 -1.245581 +v -2.911419 0.453125 -1.245581 +v -2.208294 0.359375 -1.183081 +v -2.911419 0.359375 -1.183081 +v -2.122357 0.328125 -1.198706 +v -2.997357 0.328125 -1.198706 +v -2.059857 0.390625 -1.276831 +v -3.059857 0.390625 -1.276831 +v -2.012982 0.437500 -1.386206 +v -3.106732 0.437500 -1.386206 +v -1.934857 0.242187 -1.401831 +v -3.184857 0.242187 -1.401831 +v -1.997357 0.242187 -1.292456 +v -3.122357 0.242187 -1.292456 +v -2.091107 0.242187 -1.206519 +v -3.028607 0.242187 -1.206519 +v -2.083294 0.242187 -1.190894 +v -3.036419 0.242187 -1.190894 +v -2.114544 0.335937 -1.183081 +v -3.005169 0.335937 -1.183081 +v -2.208294 0.375000 -1.159644 +v -2.911419 0.375000 -1.159644 +v -2.294232 0.335937 -1.144019 +v -2.825482 0.335937 -1.144019 +v -2.333294 0.242187 -1.144019 +v -2.786419 0.242187 -1.144019 +v -2.294232 0.156250 -1.144019 +v -2.825482 0.156250 -1.144019 +v -2.208294 0.242187 -1.136206 +v -2.911419 0.242187 -1.136206 +v -2.208294 0.117187 -1.159644 +v -2.911419 0.117187 -1.159644 +v -2.114544 0.156250 -1.183081 +v -3.005169 0.156250 -1.183081 +v -2.559857 0.429687 -1.222144 +v -2.559857 0.351562 -1.144019 +v -2.559857 -0.679688 -1.229956 +v -2.559857 -0.320313 -1.183081 +v -2.559857 -0.187500 -1.167456 +v -2.559857 -0.773438 -1.245581 +v -2.559857 0.406250 -1.362769 +v -2.559857 0.570312 -1.394019 +v -2.559857 0.898438 -2.511206 +v -2.559857 0.562500 -2.815894 +v -2.559857 0.070313 -2.792456 +v -2.559857 -0.382812 -2.315894 +v -2.356732 -0.187500 -1.401831 +v -2.762982 -0.187500 -1.401831 +v -2.247357 -0.437500 -1.394019 +v -2.872357 -0.437500 -1.394019 +v -2.208294 -0.695312 -1.394019 +v -2.911419 -0.695312 -1.394019 +v -2.192669 -0.890625 -1.433081 +v -2.927044 -0.890625 -1.433081 +v -2.231732 -0.945312 -1.440894 +v -2.887982 -0.945312 -1.440894 +v -2.380169 -0.968750 -1.409644 +v -2.739544 -0.968750 -1.409644 +v -2.559857 -0.984375 -1.386206 +v -2.122357 -0.140625 -1.433081 +v -2.997357 -0.140625 -1.433081 +v -1.927044 -0.039063 -1.425269 +v -3.192669 -0.039063 -1.425269 +v -1.731732 0.148437 -1.519019 +v -3.387982 0.148437 -1.519019 +v -1.700482 0.429687 -1.370581 +v -3.419232 0.429687 -1.370581 +v -1.848919 0.484375 -1.339331 +v -3.270794 0.484375 -1.339331 +v -2.067669 0.601562 -1.276831 +v -3.052044 0.601562 -1.276831 +v -2.239544 0.757812 -1.229956 +v -2.880169 0.757812 -1.229956 +v -2.403607 0.718750 -1.206519 +v -2.716107 0.718750 -1.206519 +v -2.497357 0.492187 -1.214331 +v -2.622357 0.492187 -1.214331 +v -2.395794 0.414062 -1.190894 +v -2.723919 0.414062 -1.190894 +v -2.434857 0.304687 -1.198706 +v -2.684857 0.304687 -1.198706 +v -2.356732 0.093750 -1.222144 +v -2.762982 0.093750 -1.222144 +v -2.184857 0.015625 -1.261206 +v -2.934857 0.015625 -1.261206 +v -2.067669 0.062500 -1.292456 +v -3.052044 0.062500 -1.292456 +v -1.934857 0.187500 -1.315894 +v -3.184857 0.187500 -1.315894 +v -1.919232 0.296875 -1.315894 +v -3.200482 0.296875 -1.315894 +v -1.958294 0.375000 -1.300269 +v -3.161419 0.375000 -1.300269 +v -2.130169 0.437500 -1.245581 +v -2.989544 0.437500 -1.245581 +v -2.309857 0.468750 -1.206519 +v -2.809857 0.468750 -1.206519 +v -2.559857 -0.765625 -1.229956 +v -2.450482 -0.718750 -1.229956 +v -2.669232 -0.718750 -1.229956 +v -2.442669 -0.835938 -1.253394 +v -2.677044 -0.835938 -1.253394 +v -2.497357 -0.882813 -1.269019 +v -2.622357 -0.882813 -1.269019 +v -2.559857 -0.890625 -1.276831 +v -2.559857 -0.195313 -1.214331 +v -2.559857 -0.140625 -1.222144 +v -2.458294 -0.148438 -1.222144 +v -2.661419 -0.148438 -1.222144 +v -2.434857 -0.226563 -1.214331 +v -2.684857 -0.226563 -1.214331 +v -2.473919 -0.289063 -1.222144 +v -2.645794 -0.289063 -1.222144 +v -2.161419 -0.046875 -1.292456 +v -2.958294 -0.046875 -1.292456 +v -1.942669 0.054687 -1.339331 +v -3.177044 0.054687 -1.339331 +v -1.833294 0.203125 -1.362769 +v -3.286419 0.203125 -1.362769 +v -1.817669 0.375000 -1.308081 +v -3.302044 0.375000 -1.308081 +v -1.872357 0.414062 -1.237769 +v -3.247357 0.414062 -1.237769 +v -2.122357 0.546875 -1.167456 +v -2.997357 0.546875 -1.167456 +v -2.247357 0.640625 -1.128394 +v -2.872357 0.640625 -1.128394 +v -2.356732 0.617187 -1.112769 +v -2.762982 0.617187 -1.112769 +v -2.458294 0.429687 -1.120581 +v -2.661419 0.429687 -1.120581 +v -2.434857 -0.101563 -1.151831 +v -2.684857 -0.101563 -1.151831 +v -2.348919 -0.445313 -1.253394 +v -2.770794 -0.445313 -1.253394 +v -2.309857 -0.703125 -1.276831 +v -2.809857 -0.703125 -1.276831 +v -2.294232 -0.820312 -1.300269 +v -2.825482 -0.820312 -1.300269 +v -2.325482 -0.914062 -1.331519 +v -2.794232 -0.914062 -1.331519 +v -2.395794 -0.929688 -1.331519 +v -2.723919 -0.929688 -1.331519 +v -2.559857 -0.945312 -1.323706 +v -2.559857 0.046875 -1.237769 +v -2.559857 0.210937 -1.198706 +v -2.231732 0.476562 -1.222144 +v -2.887982 0.476562 -1.222144 +v -2.395794 0.140625 -1.214331 +v -2.723919 0.140625 -1.214331 +v -2.427044 0.210937 -1.206519 +v -2.692669 0.210937 -1.206519 +v -2.442669 -0.687500 -1.229956 +v -2.677044 -0.687500 -1.229956 +v -2.481732 -0.445313 -1.214331 +v -2.637982 -0.445313 -1.214331 +v -2.559857 -0.445313 -1.214331 +v -2.559857 -0.328125 -1.222144 +v -2.466107 -0.273438 -1.183081 +v -2.653607 -0.273438 -1.183081 +v -2.427044 -0.226563 -1.167456 +v -2.692669 -0.226563 -1.167456 +v -2.450482 -0.132813 -1.183081 +v -2.669232 -0.132813 -1.183081 +v -2.520794 -0.125000 -1.183081 +v -2.598919 -0.125000 -1.183081 +v -2.559857 -0.203125 -1.136206 +v -2.512982 -0.148438 -1.151831 +v -2.606732 -0.148438 -1.151831 +v -2.466107 -0.156250 -1.151831 +v -2.653607 -0.156250 -1.151831 +v -2.450482 -0.226563 -1.136206 +v -2.669232 -0.226563 -1.136206 +v -2.481732 -0.250000 -1.159644 +v -2.637982 -0.250000 -1.159644 +v -2.559857 -0.289063 -1.159644 +v -2.302044 -0.312500 -1.409644 +v -2.817669 -0.312500 -1.409644 +v -2.395794 -0.242188 -1.253394 +v -2.723919 -0.242188 -1.253394 +v -2.380169 -0.312500 -1.253394 +v -2.739544 -0.312500 -1.253394 +v -2.325482 -0.250000 -1.409644 +v -2.794232 -0.250000 -1.409644 +v -2.559857 -0.875000 -1.276831 +v -2.512982 -0.867188 -1.276831 +v -2.606732 -0.867188 -1.276831 +v -2.466107 -0.820313 -1.253394 +v -2.653607 -0.820313 -1.253394 +v -2.466107 -0.742188 -1.237769 +v -2.653607 -0.742188 -1.237769 +v -2.559857 -0.781250 -1.308081 +v -2.466107 -0.750000 -1.300269 +v -2.653607 -0.750000 -1.300269 +v -2.466107 -0.812500 -1.323706 +v -2.653607 -0.812500 -1.323706 +v -2.512982 -0.851562 -1.331519 +v -2.606732 -0.851562 -1.331519 +v -2.559857 -0.859375 -1.331519 +v -2.387982 0.218750 -1.183081 +v -2.731732 0.218750 -1.183081 +v -2.372357 0.156250 -1.190894 +v -2.747357 0.156250 -1.190894 +v -2.223919 0.429687 -1.206519 +v -2.895794 0.429687 -1.206519 +v -2.286419 0.421875 -1.190894 +v -2.833294 0.421875 -1.190894 +v -2.137982 0.398437 -1.190894 +v -2.981732 0.398437 -1.190894 +v -1.997357 0.351562 -1.269019 +v -3.122357 0.351562 -1.269019 +v -1.973919 0.289062 -1.276831 +v -3.145794 0.289062 -1.276831 +v -1.981732 0.195312 -1.284644 +v -3.137982 0.195312 -1.284644 +v -2.083294 0.101562 -1.245581 +v -3.036419 0.101562 -1.245581 +v -2.184857 0.062500 -1.222144 +v -2.934857 0.062500 -1.222144 +v -2.333294 0.109375 -1.183081 +v -2.786419 0.109375 -1.183081 +v -2.380169 0.296875 -1.183081 +v -2.739544 0.296875 -1.183081 +v -2.348919 0.375000 -1.183081 +v -2.770794 0.375000 -1.183081 +v -2.325482 0.359375 -1.206519 +v -2.794232 0.359375 -1.206519 +v -2.364544 0.296875 -1.206519 +v -2.755169 0.296875 -1.206519 +v -2.317669 0.125000 -1.206519 +v -2.802044 0.125000 -1.206519 +v -2.184857 0.085937 -1.237769 +v -2.934857 0.085937 -1.237769 +v -2.098919 0.117187 -1.261206 +v -3.020794 0.117187 -1.261206 +v -2.012982 0.210937 -1.292456 +v -3.106732 0.210937 -1.292456 +v -2.005169 0.281250 -1.292456 +v -3.114544 0.281250 -1.292456 +v -2.028607 0.335937 -1.284644 +v -3.091107 0.335937 -1.284644 +v -2.145794 0.390625 -1.214331 +v -2.973919 0.390625 -1.214331 +v -2.278607 0.398437 -1.198706 +v -2.841107 0.398437 -1.198706 +v -2.223919 0.406250 -1.214331 +v -2.895794 0.406250 -1.214331 +v -2.356732 0.171875 -1.214331 +v -2.762982 0.171875 -1.214331 +v -2.364544 0.226562 -1.214331 +v -2.755169 0.226562 -1.214331 +v -2.450482 0.460937 -1.354956 +v -2.669232 0.460937 -1.354956 +v -2.364544 0.664062 -1.347144 +v -2.755169 0.664062 -1.347144 +v -2.223919 0.687500 -1.370581 +v -2.895794 0.687500 -1.370581 +v -2.075482 0.554688 -1.409644 +v -3.044232 0.554688 -1.409644 +v -1.880169 0.453125 -1.472144 +v -3.239544 0.453125 -1.472144 +v -1.762982 0.406250 -1.503394 +v -3.356732 0.406250 -1.503394 +v -1.786419 0.164062 -1.589331 +v -3.333294 0.164062 -1.589331 +v -1.958294 -0.000000 -1.550269 +v -3.161419 -0.000000 -1.550269 +v -2.122357 -0.093750 -1.495581 +v -2.997357 -0.093750 -1.495581 +v -2.559857 0.898438 -1.675269 +v -2.559857 0.984375 -2.042456 +v -2.559857 -0.195312 -2.636206 +v -2.559857 -0.460938 -1.776831 +v -2.559857 -0.976562 -1.503394 +v -2.559857 -0.804688 -1.620581 +v -2.559857 -0.570312 -1.644019 +v -2.559857 -0.484375 -1.683081 +v -1.708294 0.234375 -1.909644 +v -3.411419 0.234375 -1.909644 +v -1.700482 0.320312 -2.011206 +v -3.419232 0.320312 -2.011206 +v -1.786419 0.265625 -2.401831 +v -3.333294 0.265625 -2.401831 +v -2.098919 0.437500 -2.667456 +v -3.020794 0.437500 -2.667456 +v -1.825482 -0.046875 -1.894019 +v -3.294232 -0.046875 -1.894019 +v -1.966107 -0.125000 -2.128394 +v -3.153607 -0.125000 -2.128394 +v -1.919232 -0.007812 -2.394019 +v -3.200482 -0.007812 -2.394019 +v -2.223919 0.054688 -2.628394 +v -2.895794 0.054688 -2.628394 +v -2.325482 -0.351563 -1.558081 +v -2.794232 -0.351563 -1.558081 +v -2.380169 -0.414062 -1.706519 +v -2.739544 -0.414062 -1.706519 +v -2.270794 -0.710938 -1.581519 +v -2.848919 -0.710938 -1.581519 +v -2.309857 -0.500000 -1.573706 +v -2.809857 -0.500000 -1.573706 +v -2.231732 -0.914062 -1.565894 +v -2.887982 -0.914062 -1.565894 +v -2.419232 -0.757812 -1.597144 +v -2.700482 -0.757812 -1.597144 +v -2.434857 -0.539062 -1.604956 +v -2.684857 -0.539062 -1.604956 +v -2.395794 -0.945312 -1.526831 +v -2.723919 -0.945312 -1.526831 +v -2.341107 -0.281250 -1.534644 +v -2.778607 -0.281250 -1.534644 +v -2.348919 -0.226563 -1.495581 +v -2.770794 -0.226563 -1.495581 +v -2.356732 -0.171875 -1.464331 +v -2.762982 -0.171875 -1.464331 +v -2.348919 -0.390625 -1.800269 +v -2.770794 -0.390625 -1.800269 +v -2.262982 -0.312500 -2.229956 +v -2.856732 -0.312500 -2.229956 +v -2.216107 -0.148437 -2.503394 +v -2.903607 -0.148437 -2.503394 +v -2.106732 0.867188 -2.347144 +v -3.012982 0.867188 -2.347144 +v -2.106732 0.929688 -2.034644 +v -3.012982 0.929688 -2.034644 +v -2.106732 0.851562 -1.729956 +v -3.012982 0.851562 -1.729956 +v -2.098919 0.523438 -1.534644 +v -3.020794 0.523438 -1.534644 +v -1.833294 0.406250 -1.628394 +v -3.286419 0.406250 -1.628394 +v -1.927044 0.453125 -1.683081 +v -3.192669 0.453125 -1.683081 +v -1.919232 0.703125 -1.909644 +v -3.200482 0.703125 -1.909644 +v -1.762982 0.562500 -1.839331 +v -3.356732 0.562500 -1.839331 +v -1.762982 0.617188 -2.081519 +v -3.356732 0.617188 -2.081519 +v -1.919232 0.750000 -2.159644 +v -3.200482 0.750000 -2.159644 +v -1.919232 0.679688 -2.409644 +v -3.200482 0.679688 -2.409644 +v -1.762982 0.539062 -2.323706 +v -3.356732 0.539062 -2.323706 +v -1.942669 0.328125 -2.550269 +v -3.177044 0.328125 -2.550269 +v -2.075482 0.023438 -2.511206 +v -3.044232 0.023438 -2.511206 +v -1.739544 0.328125 -2.167456 +v -3.380169 0.328125 -2.167456 +v -2.153607 -0.171875 -1.815894 +v -2.966107 -0.171875 -1.815894 +v -2.130169 -0.195312 -2.175269 +v -2.989544 -0.195312 -2.175269 +v -1.669232 0.406250 -2.198706 +v -3.450482 0.406250 -2.198706 +v -1.786419 -0.140625 -2.089331 +v -3.333294 -0.140625 -2.089331 +v -1.520794 -0.101562 -2.292456 +v -3.598919 -0.101562 -2.292456 +v -1.278607 0.054688 -2.394019 +v -3.841107 0.054688 -2.394019 +v -1.208294 0.320313 -2.386206 +v -3.911419 0.320313 -2.386206 +v -1.325482 0.507812 -2.386206 +v -3.794232 0.507812 -2.386206 +v -1.536419 0.476562 -2.276831 +v -3.583294 0.476562 -2.276831 +v -1.544232 0.414062 -2.253394 +v -3.575482 0.414062 -2.253394 +v -1.372357 0.437500 -2.354956 +v -3.747357 0.437500 -2.354956 +v -1.294232 0.289063 -2.370581 +v -3.825482 0.289063 -2.370581 +v -1.348919 0.078125 -2.370581 +v -3.770794 0.078125 -2.370581 +v -1.528607 -0.039062 -2.269019 +v -3.591107 -0.039062 -2.269019 +v -1.731732 -0.070312 -2.097144 +v -3.387982 -0.070312 -2.097144 +v -1.637982 0.359375 -2.183081 +v -3.481732 0.359375 -2.183081 +v -1.614544 0.304688 -2.253394 +v -3.505169 0.304688 -2.253394 +v -1.677044 -0.023437 -2.175269 +v -3.442669 -0.023437 -2.175269 +v -1.520794 0.000000 -2.331519 +v -3.598919 0.000000 -2.331519 +v -1.372357 0.093750 -2.409644 +v -3.747357 0.093750 -2.409644 +v -1.325482 0.250000 -2.409644 +v -3.794232 0.250000 -2.409644 +v -1.387982 0.359375 -2.401831 +v -3.731732 0.359375 -2.401831 +v -1.536419 0.343750 -2.323706 +v -3.583294 0.343750 -2.323706 +v -1.716107 0.289062 -2.175269 +v -3.403607 0.289062 -2.175269 +v -1.723919 0.171875 -2.237769 +v -3.395794 0.171875 -2.237769 +v -1.802044 0.093750 -2.237769 +v -3.317669 0.093750 -2.237769 +v -1.739544 0.085938 -2.237769 +v -3.380169 0.085938 -2.237769 +v -1.716107 0.015625 -2.237769 +v -3.403607 0.015625 -2.237769 +v -1.747357 -0.015625 -2.237769 +v -3.372357 -0.015625 -2.237769 +v -1.833294 -0.000000 -2.034644 +v -3.286419 -0.000000 -2.034644 +v -1.841107 -0.023438 -2.136206 +v -3.278607 -0.023438 -2.136206 +v -1.841107 0.039062 -2.151831 +v -3.278607 0.039062 -2.151831 +v -1.762982 0.203125 -2.175269 +v -3.356732 0.203125 -2.175269 +v -1.669232 0.242188 -2.229956 +v -3.450482 0.242188 -2.229956 +v -1.669232 0.234375 -2.284644 +v -3.450482 0.234375 -2.284644 +v -1.747357 -0.015625 -2.284644 +v -3.372357 -0.015625 -2.284644 +v -1.708294 0.015625 -2.284644 +v -3.411419 0.015625 -2.284644 +v -1.731732 0.078125 -2.284644 +v -3.387982 0.078125 -2.284644 +v -1.794232 0.093750 -2.284644 +v -3.325482 0.093750 -2.284644 +v -1.716107 0.171875 -2.284644 +v -3.403607 0.171875 -2.284644 +v -1.520794 0.328125 -2.378394 +v -3.598919 0.328125 -2.378394 +v -1.372357 0.343750 -2.448706 +v -3.747357 0.343750 -2.448706 +v -1.302044 0.242188 -2.456519 +v -3.817669 0.242188 -2.456519 +v -1.348919 0.085938 -2.448706 +v -3.770794 0.085938 -2.448706 +v -1.512982 0.000000 -2.386206 +v -3.606732 0.000000 -2.386206 +v -1.677044 -0.015625 -2.229956 +v -3.442669 -0.015625 -2.229956 +v -1.606732 0.289063 -2.308081 +v -3.512982 0.289063 -2.308081 +v -1.669232 0.109375 -2.292456 +v -3.450482 0.109375 -2.292456 +v -1.622357 0.062500 -2.300269 +v -3.497357 0.062500 -2.300269 +v -1.559857 0.125000 -2.331519 +v -3.559857 0.125000 -2.331519 +v -1.598919 0.171875 -2.315894 +v -3.520794 0.171875 -2.315894 +v -1.544232 0.234375 -2.339331 +v -3.575482 0.234375 -2.339331 +v -1.505169 0.187500 -2.347144 +v -3.614544 0.187500 -2.347144 +v -1.450482 0.210938 -2.354956 +v -3.669232 0.210938 -2.354956 +v -1.473919 0.273438 -2.354956 +v -3.645794 0.273438 -2.354956 +v -1.536419 0.437500 -2.448706 +v -3.583294 0.437500 -2.448706 +v -1.309857 0.468750 -2.511206 +v -3.809857 0.468750 -2.511206 +v -1.192669 0.296875 -2.464331 +v -3.927044 0.296875 -2.464331 +v -1.247357 0.054688 -2.495581 +v -3.872357 0.054688 -2.495581 +v -1.520794 -0.085937 -2.456519 +v -3.598919 -0.085937 -2.456519 +v -1.770794 -0.125000 -2.292456 +v -3.348919 -0.125000 -2.292456 +v -1.700482 0.382813 -2.347144 +v -3.419232 0.382813 -2.347144 +vt 0.472248 0.856582 +vt 0.458792 0.842677 +vt 0.473546 0.821180 +vt 0.715056 0.859528 +vt 0.689237 0.869892 +vt 0.698417 0.831391 +vt 0.499792 0.847299 +vt 0.491595 0.807822 +vt 0.742167 0.847902 +vt 0.720353 0.812741 +vt 0.890362 0.004822 +vt 0.890736 0.040402 +vt 0.867965 0.046959 +vt 0.742113 0.898476 +vt 0.715154 0.898340 +vt 0.438114 0.844174 +vt 0.436615 0.821937 +vt 0.689074 0.891767 +vt 0.938581 0.894186 +vt 0.941563 0.874834 +vt 0.959029 0.911658 +vt 0.699270 0.924815 +vt 0.680318 0.906024 +vt 0.965641 0.874676 +vt 0.983123 0.923752 +vt 0.721709 0.933724 +vt 0.960219 0.841459 +vt 0.983641 0.833564 +vt 0.148158 0.878633 +vt 0.127860 0.868828 +vt 0.148191 0.834010 +vt 0.938529 0.857649 +vt 0.102328 0.859165 +vt 0.127211 0.833008 +vt 0.956527 0.713480 +vt 0.955862 0.693038 +vt 0.973764 0.727209 +vt 0.102988 0.897722 +vt 0.088936 0.876166 +vt 0.972236 0.690651 +vt 0.996505 0.686870 +vt 0.116957 0.917456 +vt 0.971586 0.656836 +vt 0.995712 0.643127 +vt 0.073449 0.925971 +vt 0.069639 0.904851 +vt 0.438230 0.893993 +vt 0.457433 0.893241 +vt 0.472588 0.913302 +vt 0.071806 0.879803 +vt 0.472782 0.878208 +vt 0.265788 0.881660 +vt 0.287626 0.881086 +vt 0.291869 0.900041 +vt 0.498860 0.885474 +vt 0.489553 0.926445 +vt 0.237588 0.881292 +vt 0.273786 0.916009 +vt 0.524237 0.890727 +vt 0.239693 0.833859 +vt 0.266449 0.845077 +vt 0.288399 0.860675 +vt 0.534113 0.808440 +vt 0.530149 0.826352 +vt 0.530146 0.807822 +vt 0.290806 0.881557 +vt 0.534061 0.847446 +vt 0.525661 0.826794 +vt 0.946839 0.040241 +vt 0.953472 0.039583 +vt 0.961912 0.055521 +vt 0.956270 0.675474 +vt 0.950832 0.693246 +vt 0.946647 0.017594 +vt 0.952506 0.019351 +vt 0.951779 0.716275 +vt 0.956929 0.000301 +vt 0.962015 0.004473 +vt 0.032345 0.946842 +vt 0.024574 0.965181 +vt 0.027536 0.943341 +vt 0.378433 0.824768 +vt 0.384350 0.824187 +vt 0.387633 0.842266 +vt 0.032349 0.983432 +vt 0.019641 0.964242 +vt 0.381490 0.803449 +vt 0.387663 0.805471 +vt 0.742643 0.049436 +vt 0.743962 0.029783 +vt 0.748037 0.030453 +vt 0.069639 0.946125 +vt 0.073731 0.946331 +vt 0.075824 0.965880 +vt 0.743660 0.011175 +vt 0.747701 0.010514 +vt 0.077682 0.925971 +vt 0.080690 0.927631 +vt 0.775496 0.026838 +vt 0.805910 0.017225 +vt 0.805641 0.038264 +vt 0.493293 0.929631 +vt 0.502008 0.945564 +vt 0.478348 0.957605 +vt 0.788140 0.001511 +vt 0.499347 0.970089 +vt 0.766000 0.003772 +vt 0.805910 0.000898 +vt 0.823656 0.001758 +vt 0.813047 0.028292 +vt 0.750761 0.020109 +vt 0.837894 0.017084 +vt 0.750740 0.042712 +vt 0.837776 0.041125 +vt 0.766246 0.057381 +vt 0.826170 0.057381 +vt 0.790650 0.056164 +vt 0.807823 0.057218 +vt 0.478345 0.926445 +vt 0.938271 0.178496 +vt 0.918243 0.181644 +vt 0.928479 0.144683 +vt 0.911776 0.149401 +vt 0.902831 0.113992 +vt 0.921392 0.104401 +vt 0.946623 0.204662 +vt 0.919010 0.195385 +vt 0.896994 0.098739 +vt 0.915800 0.069357 +vt 0.431337 0.615757 +vt 0.397947 0.634151 +vt 0.391824 0.614837 +vt 0.875134 0.091062 +vt 0.430439 0.660648 +vt 0.396124 0.661402 +vt 0.852968 0.091090 +vt 0.903798 0.059482 +vt 0.431266 0.721972 +vt 0.394315 0.722210 +vt 0.129918 0.738382 +vt 0.088692 0.771744 +vt 0.121440 0.705813 +vt 0.154888 0.339589 +vt 0.197075 0.318718 +vt 0.217322 0.340687 +vt 0.701123 0.747144 +vt 0.742167 0.746844 +vt 0.667066 0.812741 +vt 0.651642 0.052981 +vt 0.615897 0.042727 +vt 0.651224 0.012552 +vt 0.708358 0.689438 +vt 0.737567 0.695146 +vt 0.573967 0.371705 +vt 0.606119 0.312735 +vt 0.622396 0.348454 +vt 0.699845 0.649351 +vt 0.742146 0.631360 +vt 0.665959 0.310051 +vt 0.668569 0.627550 +vt 0.679719 0.595793 +vt 0.687106 0.341061 +vt 0.659749 0.343426 +vt 0.163514 0.670902 +vt 0.160819 0.643211 +vt 0.194703 0.640878 +vt 0.726352 0.386908 +vt 0.670923 0.360638 +vt 0.098471 0.676019 +vt 0.103684 0.647841 +vt 0.771852 0.419662 +vt 0.744019 0.438281 +vt 0.061044 0.677572 +vt 0.047926 0.646539 +vt 0.772716 0.457352 +vt 0.745189 0.463285 +vt 0.159594 0.913124 +vt 0.191706 0.920948 +vt 0.148191 0.932951 +vt 0.879002 0.294475 +vt 0.882249 0.239029 +vt 0.907121 0.234451 +vt 0.148282 0.863908 +vt 0.173483 0.865830 +vt 0.880912 0.218137 +vt 0.901679 0.204662 +vt 0.154703 0.833859 +vt 0.174605 0.844985 +vt 0.702531 0.471862 +vt 0.709933 0.450131 +vt 0.708846 0.491756 +vt 0.573967 0.714829 +vt 0.613023 0.720229 +vt 0.612563 0.744539 +vt 0.707133 0.432184 +vt 0.579454 0.689291 +vt 0.618924 0.702918 +vt 0.769433 0.651276 +vt 0.744253 0.633751 +vt 0.772530 0.626187 +vt 0.604843 0.673512 +vt 0.766789 0.693765 +vt 0.742167 0.701355 +vt 0.647299 0.635832 +vt 0.633320 0.686008 +vt 0.772211 0.712915 +vt 0.753167 0.719655 +vt 0.660171 0.656651 +vt 0.624371 0.375059 +vt 0.648339 0.366758 +vt 0.674838 0.657263 +vt 0.603714 0.410464 +vt 0.594948 0.380219 +vt 0.692117 0.715273 +vt 0.599778 0.439924 +vt 0.584575 0.434571 +vt 0.627592 0.475462 +vt 0.586788 0.508429 +vt 0.633819 0.595793 +vt 0.602237 0.559009 +vt 0.646125 0.591663 +vt 0.640568 0.482049 +vt 0.629705 0.516986 +vt 0.660845 0.548435 +vt 0.652697 0.557654 +vt 0.680135 0.484017 +vt 0.603147 0.786500 +vt 0.593823 0.757125 +vt 0.697683 0.513314 +vt 0.666489 0.513712 +vt 0.631306 0.801492 +vt 0.639322 0.773998 +vt 0.658404 0.485955 +vt 0.674819 0.539696 +vt 0.895502 0.165044 +vt 0.895130 0.151710 +vt 0.887874 0.175703 +vt 0.889631 0.139272 +vt 0.361427 0.663879 +vt 0.361644 0.637024 +vt 0.876866 0.127380 +vt 0.854334 0.125796 +vt 0.362638 0.728061 +vt 0.364104 0.670678 +vt 0.315959 0.682523 +vt 0.330541 0.735957 +vt 0.293413 0.686670 +vt 0.848897 0.122673 +vt 0.370486 0.763808 +vt 0.351492 0.759158 +vt 0.346589 0.732009 +vt 0.340300 0.678399 +vt 0.337349 0.658616 +vt 0.316491 0.674934 +vt 0.019634 0.955126 +vt 0.008606 0.957181 +vt 0.011011 0.942600 +vt 0.255100 0.948480 +vt 0.244377 0.938237 +vt 0.264634 0.948025 +vt 0.675482 0.957613 +vt 0.665386 0.957806 +vt 0.680291 0.943826 +vt 0.420687 0.968763 +vt 0.422704 0.947518 +vt 0.431337 0.947862 +vt 0.680318 0.979555 +vt 0.668496 0.973272 +vt 0.047980 0.964965 +vt 0.047672 0.950519 +vt 0.057821 0.943341 +vt 0.289217 0.667253 +vt 0.278417 0.668079 +vt 0.278771 0.650319 +vt 0.293211 0.937623 +vt 0.276531 0.933400 +vt 0.288573 0.925712 +vt 0.019641 0.917120 +vt 0.019554 0.938089 +vt 0.010922 0.919021 +vt 0.272210 0.968875 +vt 0.264021 0.971526 +vt 0.258502 0.987983 +vt 0.255017 0.971249 +vt 0.247582 0.952045 +vt 0.271488 0.672468 +vt 0.287486 0.943513 +vt 0.272221 0.937426 +vt 0.740574 0.959038 +vt 0.733567 0.958551 +vt 0.734053 0.948316 +vt 0.414738 0.950739 +vt 0.412181 0.942567 +vt 0.742167 0.943970 +vt 0.721452 0.933724 +vt 0.412220 0.966535 +vt 0.001844 0.953709 +vt 0.006911 0.944193 +vt 0.239214 0.945734 +vt 0.718166 0.965649 +vt 0.718150 0.941388 +vt 0.287996 0.953414 +vt 0.272210 0.960699 +vt 0.237588 0.967130 +vt 0.243183 0.991820 +vt 0.771679 0.917662 +vt 0.762698 0.937917 +vt 0.742337 0.933996 +vt 0.591212 0.548486 +vt 0.586717 0.527571 +vt 0.766263 0.953153 +vt 0.574196 0.561988 +vt 0.574728 0.557786 +vt 0.379778 0.776050 +vt 0.391660 0.771339 +vt 0.272131 0.927361 +vt 0.252901 0.936043 +vt 0.392455 0.754363 +vt 0.307653 0.743529 +vt 0.335180 0.772494 +vt 0.426082 0.753855 +vt 0.064602 0.788054 +vt 0.049360 0.750419 +vt 0.076785 0.734917 +vt 0.423413 0.769427 +vt 0.051938 0.796579 +vt 0.037171 0.759127 +vt 0.418261 0.785222 +vt 0.377038 0.803449 +vt 0.040711 0.833008 +vt 0.864608 0.170898 +vt 0.867076 0.150616 +vt 0.868972 0.167985 +vt 0.870935 0.149342 +vt 0.884239 0.170114 +vt 0.945479 0.050623 +vt 0.946610 0.057381 +vt 0.928158 0.038728 +vt 0.893529 0.160240 +vt 0.933856 0.037321 +vt 0.928950 0.021309 +vt 0.936572 0.009239 +vt 0.945243 0.000481 +vt 0.939216 0.011736 +vt 0.934428 0.020795 +vt 0.403077 0.935992 +vt 0.402495 0.944535 +vt 0.389032 0.944524 +vt 0.046173 0.953391 +vt 0.036199 0.953589 +vt 0.042323 0.943341 +vt 0.404763 0.961014 +vt 0.046098 0.967871 +vt 0.032357 0.969739 +vt 0.403339 0.975332 +vt 0.388237 0.958872 +vt 0.544825 0.949466 +vt 0.547267 0.963589 +vt 0.534130 0.963499 +vt 0.560163 0.971977 +vt 0.560151 0.950717 +vt 0.573967 0.968120 +vt 0.882568 0.143112 +vt 0.860166 0.129326 +vt 0.907705 0.025630 +vt 0.890736 0.021482 +vt 0.892558 0.011737 +vt 0.892535 0.031569 +vt 0.914545 0.046959 +vt 0.914591 0.007295 +vt 0.901242 0.003489 +vt 0.387663 0.858363 +vt 0.382169 0.871841 +vt 0.382160 0.845449 +vt 0.287812 0.575756 +vt 0.290441 0.592347 +vt 0.278006 0.579995 +vt 0.665486 0.555104 +vt 0.280623 0.559591 +vt 0.271479 0.569337 +vt 0.678644 0.549893 +vt 0.695584 0.534597 +vt 0.674728 0.475094 +vt 0.696937 0.547803 +vt 0.716677 0.550454 +vt 0.290438 0.606680 +vt 0.279049 0.606188 +vt 0.657091 0.566097 +vt 0.282187 0.650319 +vt 0.271464 0.641002 +vt 0.672646 0.740908 +vt 0.686105 0.745453 +vt 0.660368 0.772674 +vt 0.612845 0.417112 +vt 0.677338 0.715010 +vt 0.628556 0.387723 +vt 0.678291 0.682483 +vt 0.687661 0.673060 +vt 0.649321 0.382625 +vt 0.665500 0.670260 +vt 0.668316 0.372764 +vt 0.010918 0.857646 +vt 0.003074 0.852778 +vt 0.007957 0.833008 +vt 0.692322 0.410810 +vt 0.664894 0.385317 +vt 0.019641 0.893191 +vt 0.004429 0.893494 +vt 0.695718 0.434580 +vt 0.011022 0.909798 +vt 0.003113 0.917120 +vt 0.697553 0.449366 +vt 0.731348 0.560009 +vt 0.740832 0.551291 +vt 0.737238 0.570513 +vt 0.722808 0.538248 +vt 0.690606 0.465101 +vt 0.685966 0.458432 +vt 0.971872 0.367739 +vt 0.965041 0.372700 +vt 0.965137 0.354837 +vt 0.691850 0.448000 +vt 0.960230 0.354876 +vt 0.967365 0.341660 +vt 0.876672 0.932540 +vt 0.888682 0.914255 +vt 0.891678 0.918392 +vt 0.962518 0.340048 +vt 0.970227 0.326536 +vt 0.876126 0.968132 +vt 0.882578 0.933886 +vt 0.964766 0.325585 +vt 0.992212 0.302440 +vt 0.878644 0.982283 +vt 0.886126 0.979236 +vt 0.293323 0.552914 +vt 0.287227 0.559591 +vt 0.277924 0.548625 +vt 0.887258 0.996091 +vt 0.284753 0.543613 +vt 0.279599 0.527832 +vt 0.617619 0.417765 +vt 0.271464 0.527786 +vt 0.276971 0.497694 +vt 0.609847 0.442157 +vt 0.615436 0.439281 +vt 0.283112 0.499282 +vt 0.293383 0.483978 +vt 0.629089 0.474421 +vt 0.632055 0.467864 +vt 0.960263 0.398447 +vt 0.965065 0.394798 +vt 0.973115 0.427124 +vt 0.642312 0.479234 +vt 0.966757 0.426738 +vt 0.962939 0.440783 +vt 0.674132 0.469272 +vt 0.980585 0.381531 +vt 0.976069 0.386225 +vt 0.657402 0.480346 +vt 0.658227 0.471689 +vt 0.992194 0.387297 +vt 0.987280 0.394798 +vt 0.645278 0.472678 +vt 0.969296 0.441170 +vt 0.960230 0.451689 +vt 0.848897 0.212568 +vt 0.069567 0.861905 +vt 0.034251 0.859087 +vt 0.036739 0.838666 +vt 0.851659 0.239134 +vt 0.056441 0.904337 +vt 0.019641 0.905974 +vt 0.829786 0.310051 +vt 0.806735 0.289884 +vt 0.829875 0.260879 +vt 0.069639 0.935064 +vt 0.033200 0.943341 +vt 0.790224 0.236606 +vt 0.118044 0.620974 +vt 0.768134 0.180721 +vt 0.815329 0.215350 +vt 0.168912 0.615112 +vt 0.750740 0.147811 +vt 0.784181 0.137843 +vt 0.196669 0.612037 +vt 0.786803 0.092928 +vt 0.973956 0.126742 +vt 0.955502 0.118837 +vt 0.974349 0.057381 +vt 0.293347 0.255864 +vt 0.244198 0.302266 +vt 0.232276 0.273305 +vt 0.971296 0.180245 +vt 0.946647 0.177913 +vt 0.197489 0.300883 +vt 0.975820 0.219216 +vt 0.961870 0.225311 +vt 0.044635 0.334821 +vt 0.052749 0.318055 +vt 0.073430 0.334826 +vt 0.291542 0.707522 +vt 0.282041 0.747032 +vt 0.260179 0.749511 +vt 0.206763 0.764225 +vt 0.221410 0.787285 +vt 0.258759 0.718005 +vt 0.160121 0.765444 +vt 0.175836 0.798904 +vt 0.209281 0.729896 +vt 0.991595 0.610973 +vt 0.985811 0.643127 +vt 0.959036 0.636810 +vt 0.946647 0.131914 +vt 0.937759 0.094097 +vt 0.993650 0.582110 +vt 0.963839 0.604470 +vt 0.705460 0.943500 +vt 0.705447 0.971746 +vt 0.680318 0.933724 +vt 0.997819 0.566922 +vt 0.965073 0.571464 +vt 0.164417 0.699950 +vt 0.148191 0.690247 +vt 0.212045 0.694720 +vt 0.388237 0.839269 +vt 0.397104 0.803449 +vt 0.431337 0.825211 +vt 0.090379 0.677657 +vt 0.148191 0.678321 +vt 0.054294 0.703729 +vt 0.236978 0.812687 +vt 0.269541 0.769018 +vt 0.259645 0.686681 +vt 0.192718 0.833859 +vt 0.161685 0.731949 +vt 0.122076 0.321620 +vt 0.102547 0.332408 +vt 0.089911 0.298753 +vt 0.291873 0.677634 +vt 0.388484 0.883509 +vt 0.431283 0.863314 +vt 0.031539 0.722512 +vt 0.396963 0.908442 +vt 0.424335 0.904918 +vt 0.399217 0.921207 +vt 0.018595 0.748511 +vt 0.022305 0.735296 +vt 0.427603 0.889521 +vt 0.401327 0.935982 +vt 0.411945 0.931367 +vt 0.025364 0.770179 +vt 0.150968 0.324854 +vt 0.995722 0.266566 +vt 0.986279 0.266981 +vt 0.021623 0.028995 +vt 0.090949 0.051354 +vt 0.000000 0.088309 +vt 0.488790 0.528813 +vt 0.463735 0.480456 +vt 0.524998 0.416681 +vt 0.076242 0.097555 +vt 0.005195 0.174483 +vt 0.508625 0.579869 +vt 0.559820 0.477814 +vt 0.072375 0.173441 +vt 0.089194 0.275367 +vt 0.666161 0.259383 +vt 0.750740 0.241991 +vt 0.648462 0.308659 +vt 0.046868 0.295953 +vt 0.647141 0.266441 +vt 0.632377 0.309796 +vt 0.131530 0.320231 +vt 0.000000 0.677572 +vt 0.014383 0.696078 +vt 0.279628 0.241727 +vt 0.214236 0.199983 +vt 0.700929 0.114215 +vt 0.616844 0.124949 +vt 0.688231 0.052981 +vt 0.446396 0.332480 +vt 0.534443 0.310083 +vt 0.383195 0.428785 +vt 0.293438 0.128022 +vt 0.357044 0.051228 +vt 0.334774 0.182633 +vt 0.084453 0.453414 +vt 0.080562 0.527766 +vt 0.000000 0.533971 +vt 0.390317 0.096621 +vt 0.445949 0.141554 +vt 0.349045 0.310051 +vt 0.293413 0.265118 +vt 0.417045 0.250122 +vt 0.558936 0.181995 +vt 0.297823 0.391506 +vt 0.796705 0.165139 +vt 0.817076 0.133403 +vt 0.192981 0.583294 +vt 0.173686 0.567072 +vt 0.801163 0.396257 +vt 0.790104 0.379232 +vt 0.872231 0.387077 +vt 0.188949 0.525214 +vt 0.426044 0.040922 +vt 0.453558 0.000000 +vt 0.481124 0.035997 +vt 0.193311 0.466626 +vt 0.151048 0.438756 +vt 0.455943 0.077972 +vt 0.528715 0.070482 +vt 0.220421 0.417216 +vt 0.177263 0.387038 +vt 0.578990 0.083138 +vt 0.574807 0.134582 +vt 0.300784 0.439920 +vt 0.369101 0.479851 +vt 0.345749 0.526557 +vt 0.503511 0.113687 +vt 0.144905 0.498572 +vt 0.888374 0.451818 +vt 0.802145 0.450341 +vt 0.126892 0.594693 +vt 0.841295 0.199560 +vt 0.789101 0.562807 +vt 0.881028 0.554443 +vt 0.859445 0.641337 +vt 0.772716 0.643127 +vt 0.958969 0.456490 +vt 1.000000 0.481292 +vt 0.997371 0.513179 +vt 0.941550 0.229164 +vt 0.943805 0.257234 +vt 0.907121 0.215937 +vt 0.742245 0.891626 +vt 0.742167 0.818061 +vt 0.771679 0.825859 +vt 0.040260 0.620296 +vt 0.709437 0.024009 +vt 0.716745 0.047349 +vt 0.682544 0.052981 +vt 0.682588 0.016128 +vt 0.807439 0.094926 +vt 0.257518 0.532332 +vt 0.239433 0.609174 +vt 0.773111 0.316540 +vt 0.799205 0.310051 +vt 0.841005 0.353190 +vt 0.249753 0.503459 +vt 0.522173 0.010726 +vt 0.539922 0.040900 +vt 0.251286 0.467306 +vt 0.830229 0.914255 +vt 0.876126 0.935925 +vt 0.835226 0.971020 +vt 0.268095 0.418281 +vt 0.150287 0.242345 +vt 0.741381 0.199165 +vt 0.157332 0.164068 +vt 0.666745 0.192101 +vt 0.599673 0.167911 +vt 0.141629 0.323366 +vt 0.604598 0.236508 +vt 0.591031 0.229436 +vt 0.974549 0.057381 +vt 0.962015 0.004063 +vt 0.974670 0.002818 +vt 0.578990 0.222542 +vt 0.214570 0.060249 +vt 0.155458 0.094481 +vt 0.182960 0.029154 +vt 0.438250 0.517557 +vt 0.411483 0.555665 +vt 0.160896 0.000000 +vt 0.115903 0.167895 +vt 0.464931 0.583508 +vt 0.424127 0.598092 +vt 0.122558 0.073078 +vt 0.469617 0.775889 +vt 0.444693 0.744499 +vt 0.472796 0.760358 +vt 0.915120 0.024026 +vt 0.928158 0.028161 +vt 0.924864 0.057381 +vt 0.512187 0.786990 +vt 0.716681 0.938375 +vt 0.718150 0.974956 +vt 0.705585 0.933724 +vt 0.516492 0.807822 +vt 0.559266 0.777975 +vt 0.547741 0.899450 +vt 0.569878 0.927353 +vt 0.568022 0.946860 +vt 0.544402 0.763523 +vt 0.573967 0.718010 +vt 0.546840 0.847981 +vt 0.534113 0.912685 +vt 0.555813 0.715477 +vt 0.534699 0.658345 +vt 0.917062 0.568722 +vt 0.919928 0.514296 +vt 0.928077 0.500021 +vt 0.524739 0.668771 +vt 0.474461 0.632256 +vt 0.888451 0.624979 +vt 0.896928 0.643127 +vt 0.527110 0.682678 +vt 0.453034 0.972444 +vt 0.450489 0.926445 +vt 0.463144 0.937656 +vt 0.750407 0.765874 +vt 0.760480 0.763937 +vt 0.742177 0.818060 +vt 0.572328 0.817894 +vt 0.556853 0.850313 +vt 0.742167 0.719655 +vt 0.753945 0.728824 +vt 0.556248 0.888883 +vt 0.646635 0.942236 +vt 0.661664 0.955732 +vt 0.660301 0.983700 +vt 0.573967 0.909140 +vt 0.487283 0.752201 +vt 0.314645 0.812645 +vt 0.319234 0.852151 +vt 0.298131 0.862243 +vt 0.454536 0.735892 +vt 0.470455 0.732191 +vt 0.322728 0.877397 +vt 0.305626 0.890728 +vt 0.205749 0.165988 +vt 0.744545 0.119434 +vt 0.740942 0.157161 +vt 0.436552 0.605314 +vt 0.470471 0.612764 +vt 0.578990 0.052981 +vt 0.579009 0.032276 +vt 0.607638 0.047743 +vt 0.271089 0.163970 +vt 0.293413 0.468990 +vt 0.271464 0.479118 +vt 0.288585 0.387012 +vt 0.436597 0.720227 +vt 0.445934 0.714582 +vt 0.917383 0.000153 +vt 0.925530 0.004601 +vt 0.115816 0.981074 +vt 0.118504 0.970941 +vt 0.140755 0.972378 +vt 0.436552 0.966881 +vt 0.437843 0.996485 +vt 0.936878 0.333944 +vt 0.919535 0.302500 +vt 0.940662 0.325380 +vt 0.477205 0.971782 +vt 0.468343 0.971215 +vt 0.463191 0.935729 +vt 0.911753 0.324383 +vt 0.742643 0.020180 +vt 0.742625 0.052981 +vt 0.730241 0.030939 +vt 0.227876 0.101593 +vt 0.231843 0.113282 +vt 0.204130 0.112553 +vt 0.373004 0.938850 +vt 0.341810 0.918174 +vt 0.352488 0.902558 +vt 0.445742 0.693100 +vt 0.464410 0.713025 +vt 0.323216 0.907879 +vt 0.334743 0.892059 +vt 0.274407 0.133698 +vt 0.253815 0.101566 +vt 0.262011 0.468389 +vt 0.269549 0.474025 +vt 0.362362 0.953970 +vt 0.293413 0.926874 +vt 0.191314 0.147209 +vt 0.198461 0.137712 +vt 0.228115 0.833859 +vt 0.237588 0.842129 +vt 0.228102 0.863156 +vt 0.262849 0.080627 +vt 0.247426 0.094018 +vt 0.241015 0.083257 +vt 0.343782 0.884686 +vt 0.332401 0.868636 +vt 0.358423 0.894635 +vt 0.200855 0.102343 +vt 0.378433 0.910831 +vt 0.372498 0.918754 +vt 0.682730 0.016103 +vt 0.682544 0.002001 +vt 0.692186 0.016128 +vt 0.724377 0.021299 +vt 0.723766 0.039776 +vt 0.919413 0.335515 +vt 0.922032 0.341694 +vt 0.735623 0.011403 +vt 0.579181 0.010881 +vt 0.578990 0.000422 +vt 0.589880 0.000221 +vt 0.477227 0.931627 +vt 0.472707 0.939663 +vt 0.466628 0.926445 +vt 0.127163 0.964777 +vt 0.656291 0.827125 +vt 0.646760 0.822423 +vt 0.659562 0.812741 +vt 0.274328 0.058709 +vt 0.256645 0.070319 +vt 0.328224 0.841885 +vt 0.293413 0.034580 +vt 0.269415 0.048081 +vt 0.322533 0.803449 +vt 0.514073 0.953776 +vt 0.502008 0.926445 +vt 0.524237 0.954869 +vt 0.058731 0.948538 +vt 0.069639 0.943341 +vt 0.069229 0.972115 +vt 0.502043 0.988244 +vt 0.656164 0.942236 +vt 0.646635 0.934228 +vt 0.676779 0.920740 +vt 0.754919 0.806147 +vt 0.767878 0.759850 +vt 0.668761 0.913325 +vt 0.680318 0.875038 +vt 0.115789 0.934277 +vt 0.669934 0.869218 +vt 0.937805 0.340789 +vt 0.921262 0.357052 +vt 0.960716 0.766262 +vt 0.966081 0.745894 +vt 0.978418 0.754295 +vt 0.935919 0.362799 +vt 0.914530 0.378340 +vt 0.962922 0.785734 +vt 0.973734 0.768695 +vt 0.928471 0.383507 +vt 0.920218 0.400951 +vt 0.964646 0.804624 +vt 0.976432 0.808158 +vt 0.906306 0.396678 +vt 0.904620 0.415073 +vt 0.960115 0.816460 +vt 0.888392 0.413572 +vt 0.888374 0.385963 +vt 0.990424 0.810631 +vt 0.972452 0.824861 +vt 0.894160 0.366816 +vt 0.340570 0.853133 +vt 0.352585 0.867795 +vt 0.903220 0.352638 +vt 0.988911 0.774053 +vt 0.990155 0.792362 +vt 0.990439 0.748414 +vt 0.964935 0.294592 +vt 0.946647 0.295006 +vt 0.957701 0.285534 +vt 0.950832 0.746266 +vt 0.967925 0.734537 +vt 0.960230 0.387963 +vt 0.947345 0.337758 +vt 0.202176 0.926813 +vt 0.199253 0.906246 +vt 0.227878 0.903815 +vt 0.957524 0.433422 +vt 0.193370 0.888295 +vt 0.227910 0.857816 +vt 0.928191 0.456490 +vt 0.920393 0.414168 +vt 0.191706 0.874217 +vt 0.206902 0.833859 +vt 0.899452 0.450981 +vt 0.682544 0.042569 +vt 0.669127 0.049230 +vt 0.682532 0.009091 +vt 0.657923 0.024764 +vt 0.931295 0.771810 +vt 0.950796 0.833564 +vt 0.908444 0.812087 +vt 0.932674 0.625935 +vt 0.958933 0.559572 +vt 0.935205 0.702058 +vt 0.896056 0.755792 +vt 0.930564 0.571051 +vt 0.947207 0.487149 +vt 0.950832 0.647836 +vt 0.934543 0.643127 +vt 0.888374 0.462578 +vt 0.897775 0.917074 +vt 0.896056 0.869807 +vt 0.923249 0.901211 +vt 0.867937 0.053932 +vt 0.848780 0.051662 +vt 0.837894 0.000898 +vt 0.901800 0.957875 +vt 0.797675 0.914255 +vt 0.772716 0.896319 +vt 0.811234 0.860706 +vt 0.772771 0.953946 +vt 0.779125 0.918041 +vt 0.818698 0.914255 +vt 0.777274 0.839855 +vt 0.816586 0.813804 +vt 0.896056 0.723908 +vt 0.774883 0.714392 +vt 0.888948 0.778303 +vt 0.888888 0.849684 +vt 0.894645 0.778204 +vt 0.589970 0.908303 +vt 0.602847 0.812741 +vt 0.642964 0.826913 +vt 0.911255 0.858959 +vt 0.938529 0.833564 +vt 0.573967 0.852462 +vt 0.830229 0.982701 +vt 0.772716 0.979795 +vt 0.786142 0.801659 +vt 0.798565 0.781550 +vt 0.250352 0.056629 +vt 0.400765 0.605314 +vt 0.309746 0.524160 +vt 0.084396 0.944480 +vt 0.115704 0.925971 +vt 0.115789 0.973867 +vt 0.938529 0.953736 +vt 0.978376 0.923752 +vt 0.978415 0.991743 +vt 0.680372 0.855450 +vt 0.524121 0.840909 +vt 0.867998 0.000898 +vt 0.992085 0.875683 +vt 0.102322 0.840403 +vt 0.996518 0.734537 +vt 0.436552 0.914030 +vt 0.247790 0.925712 +vt 0.291873 0.859734 +vt 0.528315 0.850824 +vt 0.957939 0.057381 +vt 0.950958 0.673094 +vt 0.381972 0.845449 +vt 0.027290 0.985056 +vt 0.748086 0.052981 +vt 0.080713 0.963798 +vt 0.422314 0.605314 +vt 0.866366 0.057381 +vt 0.178251 0.387012 +vt 0.730430 0.801134 +vt 0.615960 0.012501 +vt 0.182570 0.658044 +vt 0.715539 0.412961 +vt 0.175175 0.951396 +vt 0.905346 0.283978 +vt 0.742229 0.595793 +vt 0.625767 0.764989 +vt 0.670117 0.942236 +vt 0.431067 0.965938 +vt 0.057818 0.964482 +vt 0.290288 0.656800 +vt 0.275795 0.928390 +vt 0.250418 0.984964 +vt 0.271464 0.655049 +vt 0.418881 0.935982 +vt 0.757133 0.891626 +vt 0.771615 0.963686 +vt 0.261584 0.925712 +vt 0.318632 0.772524 +vt 0.946647 0.005174 +vt 0.389614 0.935982 +vt 0.032349 0.943538 +vt 0.389591 0.970870 +vt 0.534113 0.946861 +vt 0.573955 0.946861 +vt 0.871799 0.123096 +vt 0.282006 0.592702 +vt 0.651936 0.766901 +vt 0.015624 0.843418 +vt 0.683037 0.420436 +vt 0.747687 0.564956 +vt 0.690498 0.434794 +vt 0.884120 0.966304 +vt 0.987271 0.295381 +vt 0.891744 0.988908 +vt 0.634172 0.392425 +vt 0.289397 0.479118 +vt 0.968068 0.454915 +vt 0.067897 0.833008 +vt 0.848983 0.289137 +vt 0.848862 0.280058 +vt 0.070335 0.619675 +vt 0.995519 0.075956 +vt 0.682166 0.964164 +vt 0.958933 0.542355 +vt 0.157978 0.677572 +vt 0.281208 0.788707 +vt 0.417454 0.918577 +vt 0.013742 0.760307 +vt 0.573286 0.543916 +vt 0.746338 0.310051 +vt 0.625008 0.070302 +vt 0.573967 0.393944 +vt 0.006095 0.444935 +vt 0.512750 0.290800 +vt 0.375778 0.310051 +vt 0.840687 0.147444 +vt 0.293413 0.492756 +vt 0.112873 0.387012 +vt 0.958933 0.541902 +vt 0.907200 0.294475 +vt 0.757330 0.887300 +vt 0.073540 0.637403 +vt 0.848897 0.057381 +vt 0.876093 0.991275 +vt 0.915147 0.045144 +vt 0.705575 0.975592 +vt 0.534160 0.847858 +vt 0.486472 0.652718 +vt 0.463191 0.990955 +vt 0.564569 0.807822 +vt 0.646642 0.979506 +vt 0.521030 0.773446 +vt 0.293484 0.814900 +vt 0.723208 0.112348 +vt 0.451095 0.636749 +vt 0.615897 0.011992 +vt 0.271510 0.406966 +vt 0.141132 0.996371 +vt 0.933010 0.295381 +vt 0.461655 0.694830 +vt 0.251509 0.102830 +vt 0.224601 0.091383 +vt 0.692919 0.001283 +vt 0.716745 0.030999 +vt 0.589845 0.011992 +vt 0.148191 0.966083 +vt 0.668631 0.816303 +vt 0.289262 0.025600 +vt 0.510448 0.929062 +vt 0.057821 0.977308 +vt 0.511295 0.989598 +vt 0.766736 0.801858 +vt 0.123092 0.925971 +vt 0.973850 0.789527 +vt 0.989978 0.827716 +vt 0.912681 0.331228 +vt 0.946651 0.266981 +vt 0.200116 0.949494 +vt 0.915881 0.689226 +vt 0.906453 0.456490 +vt 0.867965 0.003514 +vt 0.938354 0.942003 +vt 0.808896 0.953046 +vt 0.888107 0.677106 +vt 0.795886 0.778303 +vt 0.642978 0.947703 +vt 0.850209 0.800478 +vt 0.173625 0.121435 +vt 0.080883 0.986508 +vt 0.946910 1.001198 +vn 0.969298 -0.011811 0.245552 +vn 0.728996 -0.656575 0.193426 +vn 0.607624 -0.510392 0.608478 +vn -0.605304 -0.505783 0.614612 +vn -0.711631 -0.679250 0.179327 +vn -0.801782 -0.000977 0.597583 +vn 0.800104 -0.002838 0.599841 +vn 0.680166 -0.546251 0.488815 +vn -0.683645 -0.547288 0.482742 +vn -0.868374 -0.002258 0.495834 +vn 0.096713 -0.755821 0.647542 +vn 0.115970 -0.869259 0.480544 +vn -0.112827 -0.874844 0.471053 +vn -0.099643 -0.746635 0.657704 +vn 0.039521 -0.963103 0.266121 +vn -0.040590 -0.969298 0.242409 +vn -0.638600 -0.696463 0.327250 +vn 0.456282 -0.535356 0.710746 +vn 0.653066 -0.686636 0.319315 +vn -0.454909 -0.541520 0.706931 +vn 0.553850 -0.633198 0.540635 +vn -0.690115 0.000336 0.723685 +vn -0.811914 -0.000916 0.583728 +vn 0.809717 -0.006989 0.586749 +vn 0.689291 -0.004578 0.724418 +vn -0.955748 -0.018250 0.293588 +vn 0.952574 -0.013123 0.303995 +vn -0.645833 0.694693 0.316630 +vn 0.455947 0.522202 0.720664 +vn 0.664357 0.682058 0.305582 +vn -0.460402 0.527726 0.713767 +vn -0.525040 0.625446 0.577136 +vn 0.530595 0.625751 0.571703 +vn 0.100467 0.744682 0.659780 +vn 0.122562 0.839534 0.529252 +vn -0.119510 0.845546 0.520310 +vn -0.103427 0.735038 0.670064 +vn 0.033967 0.969024 0.244514 +vn -0.035096 0.974761 0.220435 +vn 0.736381 0.652089 0.180273 +vn -0.609790 0.492203 0.621143 +vn -0.716178 0.677053 0.169225 +vn 0.610218 0.495590 0.618061 +vn -0.672658 0.534715 0.511429 +vn 0.668203 0.537095 0.514786 +vn -0.970580 -0.015168 0.240181 +vn 0.964446 -0.012665 0.263863 +vn -0.717948 0.658193 0.226417 +vn 0.721610 0.655568 0.222388 +vn -0.041627 0.938688 0.342204 +vn -0.607074 0.644795 0.464400 +vn 0.623676 0.628529 0.464675 +vn -0.923856 -0.013306 0.382427 +vn 0.926969 -0.012940 0.374859 +vn 0.615864 -0.636616 0.464095 +vn -0.599200 -0.652425 0.463973 +vn -0.041047 -0.940123 0.338267 +vn 0.715171 -0.662465 0.222724 +vn -0.710624 -0.665792 0.227363 +vn -0.962584 -0.011292 0.270669 +vn 0.183599 -0.005310 0.982971 +vn -0.183599 -0.005310 0.982971 +vn 0.031831 -0.941404 0.335704 +vn 0.032319 0.939940 0.339702 +vn 0.159551 -0.975249 0.152898 +vn 0.155370 -0.758965 0.632282 +vn -0.020478 -0.969237 0.245186 +vn -0.017884 -0.770898 0.636677 +vn -0.146062 -0.788720 0.597125 +vn -0.147160 -0.978057 0.147404 +vn 0.526658 -0.834651 0.161107 +vn 0.350230 -0.639149 0.684683 +vn -0.357830 -0.633290 0.686209 +vn -0.623890 -0.777184 0.081668 +vn 0.945708 -0.257851 0.197699 +vn 0.555650 -0.226356 0.799982 +vn -0.531480 -0.237861 0.812952 +vn 0.972808 0.100314 0.208716 +vn 0.565172 -0.029725 0.824396 +vn -0.556566 -0.045656 0.829524 +vn -0.938444 -0.345103 0.014252 +vn 0.955718 0.249184 0.156468 +vn 0.593677 0.108158 0.797388 +vn -0.570360 0.075137 0.817927 +vn -0.978179 0.080081 0.191687 +vn 0.891537 -0.330668 0.309458 +vn 0.348827 -0.937132 -0.008148 +vn 0.341075 -0.550951 0.761620 +vn -0.438826 -0.518998 0.733482 +vn -0.338298 -0.940672 -0.025056 +vn -0.023835 -0.226478 0.973693 +vn 0.587481 -0.784875 0.196966 +vn -0.481735 -0.373577 0.792688 +vn -0.581133 -0.781213 0.227912 +vn 0.906980 -0.400922 -0.128941 +vn 0.566546 -0.318796 0.759819 +vn -0.598895 -0.285043 0.748344 +vn -0.911802 -0.386059 -0.139866 +vn 0.845119 0.443403 0.298502 +vn -0.437086 -0.469008 0.767418 +vn -0.883724 0.392834 0.254280 +vn 0.517045 0.829127 0.212531 +vn 0.460707 -0.144810 0.875637 +vn -0.378979 -0.182501 0.907224 +vn -0.434889 0.886593 0.157414 +vn 0.597552 0.784722 0.164586 +vn 0.480117 -0.183264 0.857814 +vn -0.312662 -0.011322 0.949767 +vn -0.602344 0.781274 0.163610 +vn 0.224708 0.960143 0.166204 +vn 0.269936 0.213691 0.938841 +vn -0.253792 0.214393 0.943175 +vn -0.225532 0.958892 0.172124 +vn -0.595233 0.779077 0.196753 +vn -0.127384 0.170049 0.977142 +vn 0.160863 0.153417 0.974975 +vn 0.605060 0.768029 0.209754 +vn -0.810816 0.562304 0.162267 +vn -0.055269 -0.043153 0.997528 +vn 0.029298 -0.157872 0.986999 +vn 0.824183 0.546770 0.147313 +vn -0.058382 0.948454 0.311411 +vn -0.032319 -0.056307 0.997864 +vn 0.357250 -0.274300 0.892788 +vn 0.263253 -0.114536 0.957884 +vn -0.217994 -0.123081 0.968139 +vn -0.289773 -0.224128 0.930448 +vn 0.149022 -0.154149 0.976714 +vn -0.144200 -0.159764 0.976562 +vn 0.219001 0.037141 0.975005 +vn 0.308451 0.003845 0.951201 +vn 0.225410 -0.360759 0.904996 +vn -0.194250 0.065706 0.978729 +vn 0.358806 -0.119175 0.925748 +vn -0.244667 -0.360698 0.899991 +vn 0.460219 -0.165105 0.872280 +vn -0.356182 -0.123600 0.926176 +vn 0.430494 -0.361705 0.826930 +vn 0.500107 -0.375774 0.780175 +vn -0.421644 -0.403058 0.812220 +vn 0.153691 -0.497421 0.853755 +vn -0.125034 -0.324015 0.937742 +vn 0.055879 -0.229682 0.971648 +vn -0.335856 -0.361888 0.869594 +vn -0.296457 -0.267312 0.916837 +vn 0.003754 0.069918 0.997528 +vn 0.239296 -0.301187 0.923032 +vn 0.152196 -0.254830 0.954924 +vn 0.035981 -0.203162 0.978454 +vn 0.044649 -0.260231 0.964507 +vn 0.164586 -0.172674 0.971099 +vn -0.193823 -0.148991 0.969634 +vn -0.040223 -0.340556 0.939329 +vn -0.046571 -0.378857 0.924253 +vn 0.108341 -0.325205 0.939390 +vn 0.089267 -0.423902 0.901273 +vn 0.146123 -0.119297 0.982025 +vn -0.195044 -0.275826 0.941191 +vn -0.156804 -0.133427 0.978545 +vn 0.134404 0.006745 0.990875 +vn 0.181707 -0.045412 0.982299 +vn -0.192755 -0.046144 0.980132 +vn -0.133549 -0.001770 0.991028 +vn 0.500259 -0.429243 0.751946 +vn -0.006775 -0.470107 0.882565 +vn -0.000305 0.000366 0.999969 +vn -0.000244 -0.034364 0.999390 +vn -0.038423 -0.597888 0.800623 +vn 0.806146 -0.393200 0.442122 +vn 0.926237 -0.243049 0.288003 +vn 0.583575 -0.692862 0.423475 +vn -0.528703 -0.713797 0.459243 +vn -0.930326 -0.220985 0.292611 +vn -0.431654 -0.465926 0.772362 +vn 0.003235 0.175207 0.984497 +vn 0.618641 0.775658 0.124790 +vn -0.627552 0.771203 0.106479 +vn -0.010743 0.091189 0.995758 +vn 0.066439 0.360210 0.930479 +vn -0.293588 0.940031 0.173467 +vn 0.239082 0.953398 0.183966 +vn 0.172155 0.825526 0.537431 +vn -0.026460 0.911954 0.409345 +vn -0.008820 -0.868068 0.496353 +vn 0.000000 -0.522172 0.852809 +vn -0.387005 -0.746239 0.541581 +vn -0.006317 0.191961 0.981353 +vn 0.197607 0.589587 0.783135 +vn -0.133305 0.596484 0.791436 +vn 0.361095 0.471267 0.804651 +vn -0.364666 0.463973 0.807276 +vn -0.491714 -0.287484 0.821925 +vn 0.493149 -0.284585 0.822047 +vn 0.387005 -0.746239 0.541581 +vn -0.836604 0.046083 0.545824 +vn -0.819605 -0.279183 0.500259 +vn 0.799493 0.004364 0.600635 +vn -0.655446 0.133946 0.743248 +vn 0.650655 0.148747 0.744652 +vn 0.927763 0.353008 0.120884 +vn -0.922819 0.371471 0.101871 +vn -0.963622 0.232734 0.131199 +vn 0.930601 0.343516 0.126347 +vn -0.928922 0.361003 0.082034 +vn -0.146825 -0.523362 0.839351 +vn -0.019440 -0.957091 0.289102 +vn -0.633198 -0.000183 0.773980 +vn 0.200842 -0.471145 0.858852 +vn -0.366924 0.603717 0.707694 +vn 0.635121 0.042756 0.771203 +vn -0.038118 0.575427 0.816919 +vn 0.414106 0.579821 0.701621 +vn -0.324534 0.475509 0.817652 +vn 0.290048 0.468734 0.834346 +vn 0.004364 0.530412 0.847713 +vn 0.673757 0.115452 0.729850 +vn -0.671468 0.144963 0.726707 +vn 0.516800 -0.703696 0.487533 +vn -0.517655 -0.704123 0.486007 +vn 0.004608 -0.696341 0.717673 +vn 0.118198 -0.059420 0.991180 +vn 0.010315 -0.071566 0.997375 +vn 0.278085 -0.112186 0.953948 +vn -0.158574 -0.080203 0.984069 +vn -0.084292 -0.054628 0.994934 +vn -0.271462 -0.086459 0.958556 +vn -0.155828 -0.081790 0.984375 +vn 0.006928 -0.228980 0.973388 +vn 0.039155 -0.219062 0.974914 +vn 0.184454 -0.186316 0.964995 +vn -0.199530 -0.195441 0.960173 +vn 0.307169 -0.016175 0.951506 +vn -0.266060 -0.048555 0.962706 +vn 0.278054 -0.092654 0.956053 +vn -0.297678 -0.031037 0.954131 +vn -0.483291 -0.203925 0.851344 +vn 0.163793 -0.069735 0.984008 +vn -0.181890 -0.070498 0.980773 +vn -0.322306 -0.097232 0.941618 +vn 0.281625 -0.001068 0.959502 +vn -0.055269 -0.127842 0.990234 +vn 0.172338 0.134526 0.975799 +vn -0.190680 0.102176 0.976318 +vn 0.151402 0.061769 0.986511 +vn -0.155034 0.102145 0.982604 +vn 0.202094 -0.112400 0.972869 +vn 0.463424 -0.394910 0.793237 +vn -0.500839 -0.444319 0.742759 +vn -0.300699 -0.264077 0.916410 +vn 0.174383 -0.268319 0.947386 +vn -0.099582 -0.304575 0.947233 +vn 0.181097 -0.142918 0.972991 +vn 0.000122 -0.378307 0.925657 +vn 0.274056 -0.855617 0.439100 +vn -0.139470 -0.915372 0.377606 +vn 0.142308 -0.582629 0.800165 +vn -0.383984 -0.135075 0.913388 +vn 0.422926 -0.107761 0.899716 +vn 0.192145 0.191351 0.962523 +vn -0.124180 0.616443 0.777520 +vn 0.143071 0.558672 0.816919 +vn 0.165288 0.609790 0.775109 +vn -0.156377 0.564592 0.810389 +vn 0.432264 0.583300 0.687643 +vn -0.043825 0.006928 0.998993 +vn -0.419660 0.600818 0.680319 +vn -0.692007 0.295755 0.658498 +vn 0.789361 -0.203192 0.579302 +vn -0.793847 -0.286508 0.536363 +vn 0.801630 0.010987 0.597674 +vn -0.798669 0.019379 0.601428 +vn 0.688040 0.298471 0.661397 +vn -0.034486 0.872189 0.487899 +vn 0.587024 0.735069 0.339122 +vn -0.428510 0.885250 0.180792 +vn 0.476638 0.509445 -0.716392 +vn 0.115024 0.655263 -0.746574 +vn -0.116886 0.645741 -0.754509 +vn -0.274575 0.887997 -0.368816 +vn 0.227485 0.874508 -0.428266 +vn -0.362590 0.911954 -0.191870 +vn 0.695700 0.581378 -0.421827 +vn -0.739097 0.606952 -0.292032 +vn -0.856471 -0.470870 -0.211341 +vn 0.544328 -0.837153 -0.053316 +vn -0.626057 -0.778191 -0.049348 +vn 0.471969 -0.863674 -0.176794 +vn -0.367626 -0.909513 -0.193915 +vn 0.022553 -0.270486 -0.962432 +vn 0.081851 -0.739525 -0.668081 +vn 0.277078 -0.314737 -0.907804 +vn -0.609485 -0.776421 -0.160131 +vn -0.056978 -0.325968 -0.943632 +vn 0.205023 -0.186377 -0.960814 +vn -0.408521 -0.291971 -0.864772 +vn -0.047884 -0.873745 -0.483993 +vn 0.096286 -0.757225 -0.645985 +vn -0.117924 -0.163854 -0.979400 +vn -0.011048 -0.775536 -0.631184 +vn -0.666524 -0.438459 -0.602863 +vn 0.512986 -0.451186 -0.730216 +vn -0.628101 0.092471 -0.772607 +vn 0.605335 0.033296 -0.795251 +vn -0.624897 0.122379 -0.771020 +vn 0.895657 0.257729 -0.362407 +vn 0.779839 -0.010498 -0.625843 +vn 0.689322 -0.668691 -0.278603 +vn -0.943876 0.105594 -0.312906 +vn 0.978698 -0.195837 0.061495 +vn -0.956206 -0.136235 0.258950 +vn -0.998230 0.018311 0.056459 +vn 0.785699 -0.571459 0.236732 +vn -0.936064 -0.336802 0.101566 +vn -0.752586 -0.591113 0.290109 +vn -0.026521 -0.284921 -0.958159 +vn 0.445479 -0.358348 -0.820399 +vn -0.003723 -0.693411 -0.720511 +vn -0.526444 -0.659352 -0.536699 +vn -0.440352 -0.320841 -0.838496 +vn 0.522263 -0.653615 -0.547685 +vn -0.003998 -0.939146 -0.343455 +vn -0.501724 -0.833308 -0.232002 +vn 0.507065 -0.837581 -0.203314 +vn 0.572680 -0.819666 0.011994 +vn -0.574694 -0.818323 0.000885 +vn 0.013398 -0.982177 -0.187384 +vn 0.930204 -0.306192 -0.202338 +vn 0.721030 -0.689810 0.065065 +vn -0.750359 -0.650197 0.119053 +vn -0.985504 -0.161412 0.052156 +vn -0.000702 0.340098 -0.940367 +vn 0.473006 0.176305 -0.863216 +vn -0.512650 0.168615 -0.841853 +vn 0.022614 0.839167 0.543382 +vn 0.444227 0.724418 0.527085 +vn 0.003876 0.999725 0.022156 +vn -0.428785 0.902493 0.039796 +vn -0.479781 0.718162 0.504013 +vn 0.413495 0.909635 0.039460 +vn 0.391247 0.815271 -0.426832 +vn -0.426527 0.799676 -0.422498 +vn 0.017151 0.840358 -0.541734 +vn 0.345531 0.912442 -0.219123 +vn 0.783105 0.613575 0.101077 +vn -0.609241 0.791070 -0.054598 +vn -0.423444 0.815302 0.394879 +vn 0.376049 0.790338 0.483627 +vn 0.663930 0.679250 0.312723 +vn -0.763054 0.496628 0.413587 +vn 0.770470 0.505783 0.387951 +vn 0.848628 0.528764 -0.014008 +vn -0.867824 0.496811 0.002960 +vn -0.659536 0.748070 -0.073275 +vn 0.678396 0.731376 -0.069521 +vn 0.872158 0.314554 -0.374645 +vn -0.893521 0.254524 -0.369823 +vn -0.498611 0.550218 -0.669790 +vn 0.783105 -0.148503 -0.603839 +vn 0.619648 -0.060457 -0.782525 +vn -0.609943 -0.022065 -0.792108 +vn -0.666402 -0.020234 -0.745293 +vn 0.607532 0.569567 -0.553575 +vn -0.659322 0.677725 0.325449 +vn 0.340648 0.883206 0.322306 +vn -0.364483 0.902860 0.227973 +vn 0.051820 0.522477 0.851039 +vn -0.470138 0.525224 -0.709250 +vn 0.985015 -0.160466 0.063051 +vn 0.997009 -0.033296 -0.069521 +vn -0.997925 0.040437 -0.049684 +vn 0.914365 0.231208 0.332347 +vn -0.800714 0.562822 0.205023 +vn 0.579028 -0.802698 0.142705 +vn -0.596820 -0.785852 -0.161840 +vn 0.310495 -0.950560 0.000977 +vn -0.567309 -0.808283 0.157537 +vn 0.887173 -0.157720 0.433607 +vn 0.353465 -0.592669 -0.723685 +vn -0.542100 -0.499283 -0.675863 +vn -0.269173 -0.631458 -0.727165 +vn 0.563280 -0.817286 -0.121311 +vn -0.278451 -0.959380 -0.044710 +vn 0.529221 -0.505112 -0.681722 +vn -0.019929 0.880276 0.473983 +vn -0.291055 0.781671 0.551592 +vn 0.551164 -0.078768 0.830622 +vn -0.446120 -0.022675 0.894650 +vn 0.302561 0.761559 0.573077 +vn -0.000488 0.879788 0.475326 +vn 0.321421 -0.092166 0.942412 +vn -0.391156 -0.121555 0.912229 +vn -0.571978 -0.114872 0.812159 +vn -0.393994 0.854701 0.337962 +vn 0.355235 0.879025 0.317942 +vn 0.778802 0.167791 0.604389 +vn 0.156774 -0.080477 0.984344 +vn -0.152318 -0.121067 0.980865 +vn 0.652608 -0.476821 0.588794 +vn 0.046876 0.367962 0.928648 +vn -0.762596 0.175115 0.622700 +vn -0.040040 0.303934 0.951842 +vn 0.502884 -0.780999 0.370312 +vn -0.499222 0.289041 0.816828 +vn -0.680380 -0.426405 0.595996 +vn 0.508896 0.321085 0.798669 +vn 0.340922 0.318339 0.884518 +vn -0.348796 0.227271 0.909207 +vn -0.039399 -0.635121 0.771386 +vn -0.183081 0.955626 0.230720 +vn -0.252693 0.850124 0.461959 +vn 0.186804 0.953825 0.235084 +vn -0.809534 0.584704 -0.052431 +vn 0.762139 0.647084 -0.019318 +vn -0.993072 -0.055208 0.103519 +vn 0.984741 -0.099582 0.142613 +vn -0.143864 -0.753685 0.641255 +vn 0.133305 -0.750389 0.647389 +vn 0.560442 -0.660878 0.499100 +vn -0.558458 -0.654469 0.509629 +vn 0.449232 -0.038331 0.892575 +vn 0.684194 -0.555773 0.472182 +vn -0.727409 -0.512742 0.456008 +vn 0.857204 -0.493118 -0.148289 +vn -0.734123 0.128758 0.666677 +vn 0.038148 -0.643818 0.764183 +vn -0.971038 -0.203528 -0.125004 +vn 0.372723 -0.224158 0.900449 +vn -0.772301 -0.265358 0.577136 +vn 0.243477 0.816980 0.522691 +vn 0.599841 0.513138 0.613880 +vn -0.761498 0.457961 0.458602 +vn 0.842036 -0.176244 0.509781 +vn 0.960936 -0.118839 0.249855 +vn -0.934416 -0.089084 0.344829 +vn -0.875362 -0.183599 0.447188 +vn 0.851466 0.041353 0.522752 +vn -0.570055 0.736076 0.364940 +vn 0.686361 -0.623371 0.374554 +vn 0.848354 -0.435377 0.301157 +vn -0.853206 -0.408429 0.324259 +vn -0.746544 -0.565935 0.349773 +vn 0.726066 -0.498917 0.473128 +vn -0.665517 -0.560930 0.492325 +vn 0.731284 0.126347 0.670247 +vn 0.659291 -0.468490 0.588061 +vn -0.663869 -0.467299 0.583819 +vn -0.621509 -0.442213 0.646626 +vn -0.517594 -0.452284 0.726279 +vn 0.758354 0.266518 0.594806 +vn -0.767510 0.233589 0.596912 +vn -0.954314 0.102573 0.280587 +vn 0.481368 0.634388 0.604816 +vn -0.424299 0.457137 0.781640 +vn 0.449232 0.379864 0.808618 +vn -0.659291 -0.351695 0.664510 +vn 0.644978 0.310129 0.698386 +vn -0.709769 0.313242 0.630909 +vn -0.043367 0.940458 0.337077 +vn 0.041322 0.952971 0.300150 +vn 0.648213 -0.420576 0.634724 +vn -0.520493 -0.249794 0.816492 +vn 0.461776 -0.329142 0.823664 +vn 0.260689 -0.522874 0.811518 +vn -0.755058 0.022370 0.655232 +vn 0.756401 -0.087558 0.648183 +vn 0.563982 0.547929 0.617756 +vn -0.620655 0.437605 0.650563 +vn -0.063082 0.700308 0.711020 +vn 0.292917 0.370922 0.881222 +vn 0.195105 0.038942 0.979980 +vn -0.397534 0.146397 0.905820 +vn -0.190680 0.519211 0.833064 +vn 0.334666 -0.004578 0.942289 +vn -0.418226 -0.076937 0.905057 +vn -0.193274 -0.005554 0.981109 +vn 0.460494 -0.052187 0.886105 +vn 0.314371 -0.103732 0.943602 +vn -0.325419 -0.115177 0.938505 +vn -0.299570 -0.054537 0.952483 +vn 0.334300 0.106784 0.936369 +vn 0.289651 0.315806 0.903500 +vn -0.462752 -0.381817 0.800012 +vn -0.358562 0.308054 0.881191 +vn -0.372265 -0.019379 0.927915 +vn 0.572527 -0.418928 0.704733 +vn 0.148106 0.701712 0.696860 +vn 0.383129 -0.068514 0.921140 +vn -0.211341 -0.548540 0.808924 +vn -0.101627 -0.834284 -0.541826 +vn 0.091678 -0.842799 -0.530290 +vn 0.055483 -0.676473 -0.734336 +vn -0.034883 -0.686087 -0.726676 +vn -0.461257 -0.798151 0.387494 +vn -0.646596 -0.478866 -0.593738 +vn 0.925260 0.091830 -0.367992 +vn 0.287271 0.620930 -0.729270 +vn -0.923978 0.086001 -0.372600 +vn -0.279183 0.597797 -0.751427 +vn 0.414228 0.550890 -0.724479 +vn -0.427778 0.575518 -0.696951 +vn 0.650044 0.584643 -0.485336 +vn 0.650197 -0.509964 -0.563128 +vn -0.661122 0.588549 -0.465285 +vn 0.868221 -0.004730 0.496109 +vn -0.547227 -0.639424 0.540025 +vn -0.134617 -0.552934 0.822230 +vn -0.147710 0.189856 0.970611 +s 1 +f 47/1/1 1/2/2 3/3/3 +f 4/4/4 2/5/5 46/6/6 +f 45/7/7 3/3/3 5/8/8 +f 6/9/9 4/4/4 44/10/10 +f 3/11/3 9/12/11 7/13/12 +f 8/14/13 10/15/14 6/9/9 +f 1/2/2 11/16/15 9/17/11 +f 10/15/14 12/18/16 4/4/4 +f 11/19/15 13/20/17 9/21/11 +f 16/22/18 14/23/19 12/18/16 +f 9/21/11 15/24/20 7/25/12 +f 18/26/21 16/22/18 10/15/14 +f 15/24/20 21/27/22 19/28/23 +f 20/29/24 22/30/25 18/31/21 +f 13/20/17 23/32/26 21/27/22 +f 22/30/25 24/33/27 16/34/18 +f 23/35/26 25/36/28 21/37/22 +f 28/38/29 26/39/30 24/33/27 +f 21/37/22 27/40/31 29/41/32 +f 30/42/33 28/38/29 20/29/24 +f 27/40/31 33/43/34 31/44/35 +f 32/45/36 34/46/37 30/42/33 +f 25/47/28 35/48/38 33/49/34 +f 34/46/37 36/50/39 28/38/29 +f 35/48/38 37/51/40 33/49/34 +f 40/52/41 38/53/42 36/54/39 +f 33/49/34 39/55/43 31/56/35 +f 42/57/44 40/52/41 34/58/37 +f 39/55/43 45/7/7 41/59/45 +f 44/60/10 46/61/6 40/52/41 +f 37/51/40 47/1/1 39/55/43 +f 46/61/6 48/62/46 38/53/42 +f 47/63/1 37/64/40 49/65/47 +f 52/66/48 38/53/42 48/62/46 +f 37/64/40 35/67/38 51/68/49 +f 54/69/50 36/70/39 38/71/42 +f 35/72/38 25/36/28 55/73/51 +f 56/74/52 26/75/30 54/69/50 +f 25/36/28 23/35/26 57/76/53 +f 58/77/54 24/78/27 56/74/52 +f 23/79/26 13/80/17 57/81/53 +f 60/82/55 14/83/19 24/84/27 +f 13/80/17 11/85/15 59/86/56 +f 64/87/57 12/88/16 14/83/19 +f 11/89/15 1/90/2 65/91/58 +f 66/92/59 2/93/5 64/94/57 +f 1/90/2 47/95/1 49/96/47 +f 50/97/60 48/98/46 66/92/59 +f 61/99/61 65/100/58 49/101/47 +f 50/102/60 66/103/59 62/104/62 +f 63/105/63 65/100/58 61/99/61 +f 62/104/62 66/103/59 64/106/57 +f 61/99/61 59/107/56 63/105/63 +f 64/108/57 60/109/55 62/110/62 +f 61/99/61 57/111/53 59/107/56 +f 60/109/55 58/112/54 62/110/62 +f 61/99/61 55/113/51 57/111/53 +f 58/112/54 56/114/52 62/110/62 +f 61/99/61 53/115/64 55/113/51 +f 56/114/52 54/116/50 62/110/62 +f 61/99/61 51/117/49 53/115/64 +f 54/116/50 52/118/48 62/110/62 +f 61/99/61 49/101/47 51/117/49 +f 52/119/48 50/102/60 62/104/62 +f 89/120/65 174/121/66 91/122/67 +f 176/123/68 175/124/69 90/125/70 +f 87/126/71 172/127/72 89/120/65 +f 175/124/69 173/128/73 88/129/74 +f 85/130/75 170/131/76 172/132/72 +f 173/128/73 171/133/77 88/129/74 +f 83/134/78 168/135/79 170/131/76 +f 171/133/77 169/136/80 86/137/81 +f 81/138/82 166/139/83 168/135/79 +f 169/140/80 167/141/84 84/142/85 +f 79/143/86 92/144/87 146/145/88 +f 147/146/89 93/147/90 165/148/91 +f 92/149/87 94/150/92 146/151/88 +f 149/152/93 95/153/94 93/147/90 +f 94/154/92 96/155/95 150/156/96 +f 151/157/97 97/158/98 149/152/93 +f 96/155/95 98/159/99 150/156/96 +f 153/160/100 99/161/101 97/158/98 +f 98/159/99 100/162/102 152/163/103 +f 155/164/104 101/165/105 99/166/101 +f 100/162/102 102/167/106 154/168/107 +f 157/169/108 103/170/109 101/165/105 +f 102/167/106 104/171/110 158/172/111 +f 159/173/112 105/174/113 157/169/108 +f 104/171/110 106/175/114 160/176/115 +f 161/177/116 107/178/117 159/179/112 +f 106/180/114 108/181/118 162/182/119 +f 163/183/120 109/184/121 161/177/116 +f 108/181/118 67/185/122 68/186/123 +f 68/187/123 67/188/122 163/183/120 +f 110/189/124 128/190/125 162/191/119 +f 161/192/116 129/193/126 111/194/127 +f 128/190/125 179/195/128 158/172/111 +f 159/196/112 180/197/129 161/192/116 +f 126/198/130 156/199/131 179/200/128 +f 159/196/112 157/201/108 180/197/129 +f 124/202/132 154/203/107 126/198/130 +f 157/201/108 155/204/104 127/205/133 +f 122/206/134 152/207/103 124/202/132 +f 155/204/104 153/160/100 125/208/135 +f 120/209/136 150/156/96 122/210/134 +f 153/160/100 151/157/97 123/211/137 +f 118/212/138 148/213/139 120/209/136 +f 151/157/97 149/152/93 119/214/140 +f 116/215/141 146/216/88 148/213/139 +f 149/152/93 147/146/89 119/214/140 +f 114/217/142 164/218/143 146/216/88 +f 147/219/89 165/220/91 117/221/144 +f 114/217/142 181/222/145 177/223/146 +f 177/223/146 182/224/147 115/225/148 +f 110/189/124 162/191/119 112/226/149 +f 68/227/123 163/228/120 111/194/127 +f 112/226/149 68/229/123 178/230/150 +f 178/231/150 68/227/123 184/232/151 +f 177/223/146 181/222/145 183/233/152 +f 184/234/151 182/224/147 178/230/150 +f 135/235/153 137/236/154 176/123/68 +f 176/123/68 137/236/154 175/124/69 +f 133/237/155 135/235/153 174/121/66 +f 175/124/69 136/238/156 173/128/73 +f 131/239/157 133/240/155 170/131/76 +f 173/128/73 134/241/158 132/242/159 +f 166/139/83 187/243/160 185/244/161 +f 186/245/162 188/246/163 169/247/80 +f 131/239/157 170/131/76 168/135/79 +f 169/136/80 171/133/77 186/248/162 +f 144/249/164 190/250/165 187/243/160 +f 189/251/166 190/250/165 188/246/163 +f 185/244/161 187/243/160 189/251/166 +f 189/251/166 188/246/163 69/252/167 +f 130/253/168 131/239/157 69/252/167 +f 186/245/162 132/254/159 69/252/167 +f 142/255/169 193/256/170 191/257/171 +f 192/258/172 194/259/173 145/260/174 +f 140/261/175 195/262/176 142/263/169 +f 194/264/173 196/265/177 141/266/178 +f 139/267/179 197/268/180 140/261/175 +f 196/269/177 198/270/181 139/271/179 +f 138/272/182 71/273/183 197/274/180 +f 198/275/181 71/276/183 139/277/179 +f 190/278/165 144/279/164 70/280/184 +f 192/258/172 145/260/174 190/281/165 +f 70/282/184 191/283/171 208/284/185 +f 207/285/186 192/258/172 70/282/184 +f 71/273/183 199/286/187 197/274/180 +f 201/287/188 199/288/187 71/276/183 +f 197/289/180 200/290/189 202/291/190 +f 203/292/191 201/293/188 196/265/177 +f 195/294/176 202/291/190 193/295/170 +f 205/296/192 203/292/191 196/265/177 +f 193/256/170 204/297/193 206/298/194 +f 207/285/186 205/299/192 194/259/173 +f 199/300/187 204/301/193 200/290/189 +f 203/302/191 205/303/192 199/288/187 +f 199/304/187 208/284/185 204/305/193 +f 207/285/186 208/284/185 205/299/192 +f 139/306/179 140/307/175 164/308/143 +f 165/220/91 141/309/178 139/310/179 +f 140/307/175 142/311/169 164/308/143 +f 212/312/195 143/313/196 165/220/91 +f 142/314/169 144/249/164 211/315/197 +f 214/316/198 145/260/174 143/317/196 +f 144/249/164 187/243/160 213/318/199 +f 167/319/84 188/246/163 145/320/174 +f 81/138/82 209/321/200 166/139/83 +f 214/322/198 210/323/201 82/324/202 +f 209/321/200 215/325/203 213/318/199 +f 212/326/195 216/327/204 210/323/201 +f 79/328/86 164/329/143 211/315/197 +f 212/326/195 165/330/91 216/327/204 +f 131/331/157 130/332/168 222/333/205 +f 72/334/206 130/332/168 132/242/159 +f 133/237/155 131/331/157 220/335/207 +f 223/336/208 132/337/159 134/338/158 +f 135/235/153 133/237/155 218/339/209 +f 221/340/210 134/338/158 136/341/156 +f 137/342/154 135/343/153 217/344/211 +f 219/345/212 136/341/156 137/342/154 +f 217/346/211 218/347/209 229/348/213 +f 230/349/214 219/350/212 231/351/215 +f 218/347/209 220/352/207 229/348/213 +f 228/353/216 221/354/210 219/350/212 +f 220/352/207 222/355/205 227/356/217 +f 226/357/218 223/358/208 221/359/210 +f 222/360/205 72/361/206 225/362/219 +f 224/363/220 72/334/206 223/364/208 +f 224/365/220 231/366/215 229/367/213 +f 230/368/214 231/366/215 226/369/218 +f 225/370/219 229/367/213 227/371/217 +f 228/372/216 230/373/214 226/374/218 +f 183/375/152 181/376/145 232/377/221 +f 235/378/222 182/224/147 184/234/151 +f 112/379/149 183/375/152 254/380/223 +f 233/381/224 184/234/151 113/382/225 +f 110/189/124 112/226/149 254/383/223 +f 255/384/226 113/382/225 257/385/227 +f 181/376/145 114/386/142 252/387/228 +f 253/388/229 115/225/148 235/378/222 +f 114/386/142 116/389/141 250/390/230 +f 251/391/231 117/392/144 115/393/148 +f 116/215/141 118/212/138 248/394/232 +f 249/395/233 119/214/140 251/391/231 +f 118/212/138 120/209/136 246/396/234 +f 247/397/235 121/398/236 249/395/233 +f 120/209/136 122/210/134 244/399/237 +f 245/400/238 123/211/137 247/397/235 +f 122/210/134 124/401/132 244/399/237 +f 243/402/239 125/403/135 123/404/137 +f 124/401/132 126/405/130 242/406/240 +f 241/407/241 127/408/133 125/403/135 +f 126/405/130 179/195/128 236/409/242 +f 237/410/243 180/411/129 127/408/133 +f 179/195/128 128/190/125 238/412/244 +f 239/413/245 129/414/126 237/415/243 +f 128/190/125 110/189/124 238/412/244 +f 257/385/227 111/416/127 129/414/126 +f 238/412/244 256/417/246 258/418/247 +f 259/419/248 257/420/227 277/421/249 +f 236/409/242 238/412/244 276/422/250 +f 277/421/249 239/423/245 279/424/251 +f 240/425/252 236/426/242 278/427/253 +f 279/424/251 237/428/243 275/429/254 +f 242/430/240 240/425/252 274/431/255 +f 275/429/254 241/432/241 273/433/256 +f 244/434/237 242/430/240 270/435/257 +f 273/436/256 243/437/239 245/438/238 +f 246/439/234 244/434/237 270/435/257 +f 271/440/258 245/438/238 269/441/259 +f 248/394/232 246/396/234 266/442/260 +f 269/441/259 247/443/235 249/444/233 +f 250/445/230 248/394/232 264/446/261 +f 267/447/262 249/444/233 265/448/263 +f 252/449/228 250/445/230 262/450/264 +f 265/451/263 251/452/231 253/453/229 +f 234/454/265 252/449/228 262/450/264 +f 263/455/266 253/453/229 281/456/267 +f 256/417/246 254/383/223 260/457/268 +f 261/458/269 255/459/226 259/419/248 +f 254/383/223 232/460/221 282/461/270 +f 283/462/271 233/463/224 261/458/269 +f 232/460/221 234/454/265 280/464/272 +f 281/456/267 235/465/222 283/466/271 +f 67/185/122 108/181/118 73/467/273 +f 285/468/274 109/469/121 67/470/122 +f 108/181/118 106/180/114 284/471/275 +f 287/472/276 107/473/117 109/469/121 +f 106/474/114 104/475/110 288/476/277 +f 289/477/278 105/478/113 287/472/276 +f 104/475/110 102/479/106 288/476/277 +f 291/480/279 103/170/109 105/174/113 +f 102/479/106 100/481/102 290/482/280 +f 293/483/281 101/165/105 103/170/109 +f 100/481/102 98/484/99 294/485/282 +f 295/486/283 99/166/101 293/483/281 +f 98/484/99 96/487/95 294/485/282 +f 297/488/284 97/489/98 99/490/101 +f 96/491/95 94/492/92 298/493/285 +f 299/494/286 95/495/94 297/488/284 +f 94/492/92 92/144/87 300/496/287 +f 301/497/288 93/498/90 299/494/286 +f 308/499/289 309/500/290 338/501/291 +f 329/502/292 309/503/290 308/504/289 +f 307/505/293 308/504/289 336/506/294 +f 339/507/295 308/504/289 307/505/293 +f 306/508/296 307/505/293 340/509/297 +f 337/510/298 307/505/293 306/508/296 +f 89/511/65 91/512/67 306/513/296 +f 306/514/296 91/122/67 341/515/299 +f 87/516/71 89/511/65 340/517/297 +f 341/518/299 90/519/70 335/520/300 +f 85/521/75 87/516/71 334/522/301 +f 335/523/300 88/524/74 331/525/302 +f 83/526/78 85/527/75 330/528/303 +f 331/529/302 86/530/81 333/531/304 +f 330/532/303 336/506/294 338/533/291 +f 339/507/295 337/510/298 333/534/304 +f 330/532/303 334/535/301 340/509/297 +f 341/536/299 335/523/300 337/510/298 +f 326/537/305 332/538/306 328/539/307 +f 339/507/295 333/534/304 327/540/308 +f 81/541/82 83/526/78 332/542/306 +f 333/531/304 84/142/85 327/543/308 +f 209/544/200 342/545/309 215/546/203 +f 345/547/310 343/548/311 210/323/201 +f 81/541/82 326/549/305 209/544/200 +f 343/548/311 327/543/308 82/324/202 +f 79/550/86 215/546/203 346/551/312 +f 345/547/310 216/327/204 80/552/313 +f 79/143/86 346/553/312 92/144/87 +f 301/497/288 347/554/314 80/555/313 +f 77/556/315 324/557/316 304/558/317 +f 353/559/318 325/560/319 77/561/315 +f 304/558/317 352/562/320 78/563/321 +f 351/564/322 353/559/318 304/565/317 +f 78/563/321 350/566/323 348/567/324 +f 349/568/325 351/569/322 305/570/326 +f 305/571/326 348/567/324 328/539/307 +f 329/572/292 349/568/325 309/573/290 +f 326/537/305 328/539/307 342/574/309 +f 349/575/325 329/576/292 327/543/308 +f 296/577/327 298/493/285 318/578/328 +f 319/579/329 299/580/286 311/581/330 +f 76/582/331 316/583/332 77/561/315 +f 325/560/319 317/584/333 76/582/331 +f 302/585/334 358/586/335 303/587/336 +f 357/588/337 359/589/338 302/590/334 +f 303/587/336 356/591/339 354/592/340 +f 355/593/341 357/594/337 75/595/342 +f 75/595/342 354/592/340 316/596/332 +f 317/584/333 355/597/341 76/582/331 +f 292/598/343 294/485/282 362/599/344 +f 363/600/345 295/486/283 365/601/346 +f 364/602/347 362/603/344 366/604/348 +f 369/605/349 363/600/345 365/601/346 +f 366/606/348 368/607/350 370/608/351 +f 371/609/352 369/605/349 373/610/353 +f 372/611/354 370/608/351 376/612/355 +f 377/613/356 371/609/352 375/614/357 +f 314/615/358 378/616/359 376/612/355 +f 375/617/357 379/618/360 315/619/361 +f 316/596/332 354/592/340 374/620/362 +f 375/617/357 355/597/341 379/618/360 +f 354/592/340 356/591/339 372/611/354 +f 373/610/353 357/588/337 375/614/357 +f 356/591/339 358/586/335 366/606/348 +f 367/621/363 359/589/338 373/610/353 +f 358/622/335 360/623/364 364/602/347 +f 365/601/346 361/624/365 367/621/363 +f 290/482/280 292/598/343 360/625/364 +f 365/601/346 293/483/281 291/480/279 +f 74/626/366 360/623/364 302/627/334 +f 359/628/338 361/629/365 74/626/366 +f 284/630/275 286/631/367 288/632/277 +f 289/633/278 287/634/276 291/635/279 +f 284/636/275 290/637/280 360/638/364 +f 361/624/365 291/480/279 74/639/366 +f 73/640/273 284/641/275 74/642/366 +f 74/642/366 285/643/274 73/640/273 +f 294/485/282 296/644/327 362/599/344 +f 311/645/330 297/646/284 295/486/283 +f 310/647/368 312/648/369 368/649/350 +f 369/605/349 313/650/370 363/600/345 +f 312/651/369 382/652/371 370/608/351 +f 371/609/352 383/653/372 369/605/349 +f 314/654/358 376/655/355 382/656/371 +f 371/609/352 377/613/356 315/657/361 +f 348/567/324 350/566/323 384/658/373 +f 387/659/374 351/569/322 349/568/325 +f 318/578/328 384/658/373 320/660/375 +f 387/659/374 385/661/376 319/579/329 +f 298/493/285 300/496/287 384/658/373 +f 385/661/376 301/662/288 319/579/329 +f 300/496/287 344/663/377 342/574/309 +f 343/664/311 345/665/310 385/661/376 +f 342/574/309 348/567/324 384/658/373 +f 385/661/376 349/568/325 343/664/311 +f 300/666/287 346/667/312 344/668/377 +f 345/665/310 347/669/314 301/662/288 +f 314/670/358 322/671/378 378/672/359 +f 381/673/379 323/674/380 315/619/361 +f 316/675/332 378/672/359 324/557/316 +f 381/673/379 379/618/360 317/584/333 +f 320/660/375 386/676/381 322/671/378 +f 381/673/379 387/677/374 321/678/382 +f 350/566/323 352/562/320 386/676/381 +f 381/673/379 353/559/318 351/564/322 +f 324/557/316 380/679/383 352/562/320 +f 353/559/318 381/673/379 325/560/319 +f 400/680/384 388/681/385 402/682/386 +f 415/683/387 389/684/388 401/685/389 +f 400/680/384 402/682/386 404/686/390 +f 405/687/391 403/688/392 399/689/393 +f 398/690/394 404/686/390 396/691/395 +f 407/692/396 405/693/391 399/694/393 +f 396/691/395 406/695/397 394/696/398 +f 409/697/399 407/692/396 397/698/400 +f 394/696/398 408/699/401 392/700/402 +f 411/701/403 409/702/399 395/703/404 +f 392/700/402 410/704/405 412/705/406 +f 413/706/407 411/701/403 391/707/408 +f 410/704/405 420/708/409 412/705/406 +f 419/709/410 421/710/411 411/711/403 +f 408/712/401 422/713/412 410/714/405 +f 421/715/411 423/716/413 409/697/399 +f 406/717/397 424/718/414 422/713/412 +f 423/716/413 425/719/415 409/697/399 +f 404/720/390 426/721/416 424/722/414 +f 425/719/415 427/723/417 407/692/396 +f 402/682/386 428/724/418 404/686/390 +f 427/725/417 429/726/419 403/727/392 +f 402/682/386 414/728/420 416/729/421 +f 417/730/422 415/731/387 429/726/419 +f 318/578/328 320/660/375 442/732/423 +f 445/733/424 321/734/382 319/579/329 +f 320/735/375 390/736/425 412/705/406 +f 413/737/407 391/738/408 445/739/424 +f 310/740/368 318/578/328 442/732/423 +f 443/741/426 319/742/329 313/743/370 +f 382/744/371 430/745/427 414/728/420 +f 415/683/387 431/746/428 383/747/372 +f 412/748/406 418/749/429 440/750/430 +f 441/751/431 419/709/410 445/752/424 +f 438/753/432 446/754/433 440/755/430 +f 445/756/424 447/757/434 439/758/435 +f 434/759/436 446/754/433 438/753/432 +f 439/760/435 447/761/434 437/762/437 +f 432/763/438 448/764/439 434/765/436 +f 447/766/434 449/767/440 433/768/441 +f 430/745/427 448/769/439 450/770/442 +f 433/768/441 449/767/440 431/771/428 +f 414/728/420 430/745/427 416/729/421 +f 451/772/443 431/771/428 415/731/387 +f 312/773/369 448/764/439 382/774/371 +f 431/775/428 449/776/440 313/650/370 +f 312/773/369 442/732/423 448/764/439 +f 447/766/434 443/777/426 313/778/370 +f 442/732/423 444/779/444 446/780/433 +f 447/781/434 445/782/424 443/783/426 +f 416/784/421 450/785/442 452/786/445 +f 453/787/446 451/772/443 477/788/447 +f 450/785/442 432/763/438 452/786/445 +f 463/789/448 433/768/441 451/772/443 +f 432/763/438 434/765/436 460/790/449 +f 461/791/450 435/792/451 463/789/448 +f 434/793/436 436/794/452 460/795/449 +f 459/796/453 437/762/437 435/797/451 +f 436/798/452 438/753/432 458/799/454 +f 457/800/455 439/760/435 437/762/437 +f 438/801/432 440/802/430 454/803/456 +f 455/804/457 441/805/431 457/806/455 +f 440/750/430 418/749/429 474/807/458 +f 475/808/459 419/809/410 441/810/431 +f 428/811/418 416/784/421 476/812/460 +f 477/788/447 417/730/422 465/813/461 +f 426/814/416 428/811/418 464/815/462 +f 465/813/461 429/726/419 467/816/463 +f 424/817/414 426/818/416 468/819/464 +f 467/820/463 427/821/417 425/822/415 +f 422/823/412 424/817/414 468/819/464 +f 469/824/465 425/825/415 471/826/466 +f 420/827/409 422/713/412 470/828/467 +f 471/826/466 423/829/413 473/830/468 +f 418/749/429 420/831/409 474/807/458 +f 473/830/468 421/832/411 475/808/459 +f 458/799/454 456/833/469 478/834/470 +f 481/835/471 457/836/455 459/837/453 +f 478/834/470 480/838/472 484/839/473 +f 483/840/474 481/835/471 479/841/475 +f 484/839/473 482/842/476 488/843/477 +f 489/844/478 483/840/474 487/845/479 +f 486/846/480 488/843/477 492/847/481 +f 491/848/482 489/844/478 487/845/479 +f 464/849/462 476/850/460 486/846/480 +f 487/845/479 477/851/447 493/852/483 +f 452/853/445 484/839/473 476/850/460 +f 487/854/479 485/855/484 453/787/446 +f 452/853/445 462/856/485 484/839/473 +f 479/841/475 463/857/448 453/858/446 +f 458/799/454 478/834/470 462/856/485 +f 463/857/448 479/841/475 461/859/450 +f 454/860/456 474/861/458 456/862/469 +f 481/835/471 475/863/459 455/864/457 +f 472/865/486 482/842/476 474/866/458 +f 481/867/471 483/868/474 473/869/468 +f 470/870/467 488/843/477 472/865/486 +f 483/868/474 489/871/478 471/872/466 +f 468/873/464 490/874/487 470/870/467 +f 489/871/478 491/875/482 469/876/465 +f 466/877/488 492/847/481 490/874/487 +f 491/878/482 493/879/483 469/880/465 +f 464/849/462 492/847/481 466/877/488 +f 467/881/463 493/879/483 465/149/461 +f 392/882/402 390/883/425 504/884/489 +f 505/885/490 391/707/408 503/886/491 +f 394/887/398 392/882/402 502/888/492 +f 503/886/491 393/889/493 501/890/494 +f 396/891/395 394/887/398 498/892/495 +f 501/890/494 395/703/404 397/893/400 +f 398/894/394 396/895/395 496/896/496 +f 499/897/497 397/898/400 399/899/393 +f 400/900/384 398/894/394 496/896/496 +f 497/901/498 399/902/393 495/903/499 +f 388/904/385 400/905/384 494/906/500 +f 495/903/499 401/907/389 507/908/501 +f 494/909/500 502/910/492 504/629/489 +f 505/911/490 503/912/491 507/908/501 +f 494/909/500 496/913/496 502/910/492 +f 501/914/494 497/915/498 495/916/499 +f 496/896/496 498/917/495 500/918/502 +f 501/914/494 499/919/497 497/915/498 +f 314/920/358 382/921/371 388/904/385 +f 389/922/388 383/923/372 507/908/501 +f 314/670/358 506/924/503 322/671/378 +f 505/925/490 507/926/501 315/619/361 +f 320/927/375 322/928/378 504/929/489 +f 505/930/490 323/931/380 321/932/382 +f 45/7/7 47/1/1 3/3/3 +f 2/5/5 48/933/46 46/6/6 +f 43/934/504 45/7/7 5/8/8 +f 4/4/4 46/6/6 44/10/10 +f 5/935/8 3/11/3 7/13/12 +f 10/15/14 4/4/4 6/9/9 +f 3/3/3 1/2/2 9/17/11 +f 12/18/16 2/5/5 4/4/4 +f 13/20/17 15/24/20 9/21/11 +f 10/15/14 16/22/18 12/18/16 +f 15/24/20 17/936/505 7/25/12 +f 8/14/13 18/26/21 10/15/14 +f 17/936/505 15/24/20 19/28/23 +f 22/30/25 16/34/18 18/31/21 +f 15/24/20 13/20/17 21/27/22 +f 24/33/27 14/937/19 16/34/18 +f 25/36/28 27/40/31 21/37/22 +f 22/30/25 28/38/29 24/33/27 +f 19/938/23 21/37/22 29/41/32 +f 28/38/29 22/30/25 20/29/24 +f 29/41/32 27/40/31 31/44/35 +f 34/46/37 28/38/29 30/42/33 +f 27/939/31 25/47/28 33/49/34 +f 36/50/39 26/39/30 28/38/29 +f 37/51/40 39/55/43 33/49/34 +f 34/58/37 40/52/41 36/54/39 +f 39/55/43 41/59/45 31/56/35 +f 32/940/36 42/57/44 34/58/37 +f 45/7/7 43/934/504 41/59/45 +f 42/57/44 44/60/10 40/52/41 +f 47/1/1 45/7/7 39/55/43 +f 40/52/41 46/61/6 38/53/42 +f 37/64/40 51/68/49 49/65/47 +f 50/941/60 52/66/48 48/62/46 +f 35/67/38 53/942/64 51/68/49 +f 52/943/48 54/69/50 38/71/42 +f 53/944/64 35/72/38 55/73/51 +f 26/75/30 36/70/39 54/69/50 +f 55/73/51 25/36/28 57/76/53 +f 24/78/27 26/75/30 56/74/52 +f 13/80/17 59/86/56 57/81/53 +f 58/945/54 60/82/55 24/84/27 +f 11/85/15 63/946/63 59/86/56 +f 60/82/55 64/87/57 14/83/19 +f 63/947/63 11/89/15 65/91/58 +f 2/93/5 12/948/16 64/94/57 +f 65/91/58 1/90/2 49/96/47 +f 48/98/46 2/93/5 66/92/59 +f 174/121/66 176/123/68 91/122/67 +f 91/122/67 176/123/68 90/125/70 +f 172/127/72 174/121/66 89/120/65 +f 90/125/70 175/124/69 88/129/74 +f 87/949/71 85/130/75 172/132/72 +f 171/133/77 86/137/81 88/129/74 +f 85/130/75 83/134/78 170/131/76 +f 169/136/80 84/950/85 86/137/81 +f 83/134/78 81/138/82 168/135/79 +f 167/141/84 82/324/202 84/142/85 +f 164/951/143 79/143/86 146/145/88 +f 93/147/90 80/952/313 165/148/91 +f 94/150/92 148/953/139 146/151/88 +f 147/146/89 149/152/93 93/147/90 +f 148/213/139 94/154/92 150/156/96 +f 97/158/98 95/153/94 149/152/93 +f 98/159/99 152/163/103 150/156/96 +f 151/157/97 153/160/100 97/158/98 +f 100/162/102 154/168/107 152/163/103 +f 153/954/100 155/164/104 99/166/101 +f 102/167/106 156/955/131 154/168/107 +f 155/164/104 157/169/108 101/165/105 +f 156/955/131 102/167/106 158/172/111 +f 105/174/113 103/170/109 157/169/108 +f 158/172/111 104/171/110 160/176/115 +f 107/178/117 105/956/113 159/179/112 +f 160/957/115 106/180/114 162/182/119 +f 109/184/121 107/178/117 161/177/116 +f 162/182/119 108/181/118 68/186/123 +f 67/188/122 109/184/121 163/183/120 +f 128/190/125 160/176/115 162/191/119 +f 163/228/120 161/192/116 111/194/127 +f 160/176/115 128/190/125 158/172/111 +f 180/197/129 129/193/126 161/192/116 +f 156/199/131 158/958/111 179/200/128 +f 157/201/108 127/205/133 180/197/129 +f 154/203/107 156/199/131 126/198/130 +f 155/204/104 125/208/135 127/205/133 +f 152/207/103 154/203/107 124/202/132 +f 153/160/100 123/211/137 125/208/135 +f 150/156/96 152/163/103 122/210/134 +f 151/157/97 121/398/236 123/211/137 +f 148/213/139 150/156/96 120/209/136 +f 121/398/236 151/157/97 119/214/140 +f 118/212/138 116/215/141 148/213/139 +f 147/146/89 117/392/144 119/214/140 +f 116/215/141 114/217/142 146/216/88 +f 165/220/91 115/225/148 117/221/144 +f 164/218/143 114/217/142 177/223/146 +f 165/220/91 177/223/146 115/225/148 +f 162/191/119 68/229/123 112/226/149 +f 113/959/225 68/227/123 111/194/127 +f 183/233/152 112/226/149 178/230/150 +f 68/227/123 113/959/225 184/232/151 +f 178/230/150 177/223/146 183/233/152 +f 182/224/147 177/223/146 178/230/150 +f 174/121/66 135/235/153 176/123/68 +f 137/236/154 136/238/156 175/124/69 +f 172/127/72 133/237/155 174/121/66 +f 136/238/156 134/241/158 173/128/73 +f 133/240/155 172/132/72 170/131/76 +f 171/133/77 173/128/73 132/242/159 +f 168/135/79 166/139/83 185/244/161 +f 188/246/163 167/319/84 169/247/80 +f 185/244/161 131/239/157 168/135/79 +f 171/133/77 132/242/159 186/248/162 +f 190/250/165 189/251/166 187/243/160 +f 190/250/165 145/320/174 188/246/163 +f 69/252/167 185/244/161 189/251/166 +f 188/246/163 186/245/162 69/252/167 +f 131/239/157 185/244/161 69/252/167 +f 132/254/159 130/253/168 69/252/167 +f 144/279/164 142/255/169 191/257/171 +f 194/259/173 143/317/196 145/260/174 +f 195/262/176 193/960/170 142/263/169 +f 143/961/196 194/264/173 141/266/178 +f 197/268/180 195/262/176 140/261/175 +f 141/962/178 196/269/177 139/271/179 +f 139/963/179 138/272/182 197/274/180 +f 71/276/183 138/964/182 139/277/179 +f 144/279/164 191/257/171 70/280/184 +f 70/282/184 192/258/172 190/281/165 +f 191/283/171 206/965/194 208/284/185 +f 208/284/185 207/285/186 70/282/184 +f 199/286/187 200/966/189 197/274/180 +f 198/275/181 201/287/188 71/276/183 +f 195/294/176 197/289/180 202/291/190 +f 201/293/188 198/967/181 196/265/177 +f 202/291/190 204/301/193 193/295/170 +f 194/264/173 205/296/192 196/265/177 +f 191/257/171 193/256/170 206/298/194 +f 192/258/172 207/285/186 194/259/173 +f 204/301/193 202/291/190 200/290/189 +f 201/287/188 203/302/191 199/288/187 +f 208/284/185 206/965/194 204/305/193 +f 208/284/185 199/304/187 205/299/192 +f 177/968/146 139/306/179 164/308/143 +f 177/223/146 165/220/91 139/310/179 +f 142/311/169 211/969/197 164/308/143 +f 143/313/196 141/309/178 165/220/91 +f 144/249/164 213/318/199 211/315/197 +f 212/970/195 214/316/198 143/317/196 +f 187/243/160 166/139/83 213/318/199 +f 214/971/198 167/319/84 145/320/174 +f 209/321/200 213/318/199 166/139/83 +f 167/141/84 214/322/198 82/324/202 +f 215/325/203 211/315/197 213/318/199 +f 214/322/198 212/326/195 210/323/201 +f 215/325/203 79/328/86 211/315/197 +f 165/330/91 80/552/313 216/327/204 +f 130/332/168 72/334/206 222/333/205 +f 223/364/208 72/334/206 132/242/159 +f 131/331/157 222/333/205 220/335/207 +f 221/340/210 223/336/208 134/338/158 +f 133/237/155 220/335/207 218/339/209 +f 219/345/212 221/340/210 136/341/156 +f 135/343/153 218/972/209 217/344/211 +f 217/344/211 219/345/212 137/342/154 +f 231/973/215 217/346/211 229/348/213 +f 219/350/212 217/974/211 231/351/215 +f 220/352/207 227/356/217 229/348/213 +f 230/349/214 228/353/216 219/350/212 +f 222/355/205 225/975/219 227/356/217 +f 228/976/216 226/357/218 221/359/210 +f 72/361/206 224/977/220 225/362/219 +f 226/978/218 224/363/220 223/364/208 +f 225/370/219 224/365/220 229/367/213 +f 231/366/215 224/365/220 226/369/218 +f 181/376/145 234/979/265 232/377/221 +f 233/381/224 235/378/222 184/234/151 +f 183/375/152 232/377/221 254/380/223 +f 255/384/226 233/381/224 113/382/225 +f 256/417/246 110/189/124 254/383/223 +f 113/382/225 111/416/127 257/385/227 +f 234/979/265 181/376/145 252/387/228 +f 115/225/148 182/224/147 235/378/222 +f 252/387/228 114/386/142 250/390/230 +f 253/980/229 251/391/231 115/393/148 +f 250/445/230 116/215/141 248/394/232 +f 119/214/140 117/392/144 251/391/231 +f 248/394/232 118/212/138 246/396/234 +f 121/398/236 119/214/140 249/395/233 +f 246/396/234 120/209/136 244/399/237 +f 123/211/137 121/398/236 247/397/235 +f 124/401/132 242/406/240 244/399/237 +f 245/981/238 243/402/239 123/404/137 +f 126/405/130 240/982/252 242/406/240 +f 243/402/239 241/407/241 125/403/135 +f 240/982/252 126/405/130 236/409/242 +f 241/407/241 237/410/243 127/408/133 +f 236/409/242 179/195/128 238/412/244 +f 129/414/126 180/983/129 237/415/243 +f 110/189/124 256/417/246 238/412/244 +f 239/413/245 257/385/227 129/414/126 +f 276/422/250 238/412/244 258/418/247 +f 257/420/227 239/423/245 277/421/249 +f 278/984/253 236/409/242 276/422/250 +f 239/423/245 237/428/243 279/424/251 +f 274/431/255 240/425/252 278/427/253 +f 237/428/243 241/432/241 275/429/254 +f 272/985/506 242/430/240 274/431/255 +f 241/432/241 243/986/239 273/433/256 +f 242/430/240 272/985/506 270/435/257 +f 271/440/258 273/436/256 245/438/238 +f 268/987/507 246/439/234 270/435/257 +f 245/438/238 247/443/235 269/441/259 +f 246/396/234 268/988/507 266/442/260 +f 267/447/262 269/441/259 249/444/233 +f 248/394/232 266/442/260 264/446/261 +f 249/444/233 251/989/231 265/448/263 +f 250/445/230 264/446/261 262/450/264 +f 263/455/266 265/451/263 253/453/229 +f 280/464/272 234/454/265 262/450/264 +f 253/453/229 235/465/222 281/456/267 +f 258/418/247 256/417/246 260/457/268 +f 255/459/226 257/420/227 259/419/248 +f 260/457/268 254/383/223 282/461/270 +f 233/463/224 255/459/226 261/458/269 +f 282/461/270 232/460/221 280/464/272 +f 235/465/222 233/990/224 283/466/271 +f 108/181/118 284/471/275 73/467/273 +f 73/991/273 285/468/274 67/470/122 +f 106/180/114 286/992/367 284/471/275 +f 285/468/274 287/472/276 109/469/121 +f 286/993/367 106/474/114 288/476/277 +f 105/478/113 107/473/117 287/472/276 +f 102/479/106 290/482/280 288/476/277 +f 289/994/278 291/480/279 105/174/113 +f 100/481/102 292/598/343 290/482/280 +f 291/480/279 293/483/281 103/170/109 +f 292/598/343 100/481/102 294/485/282 +f 99/166/101 101/165/105 293/483/281 +f 96/487/95 296/644/327 294/485/282 +f 295/995/283 297/488/284 99/490/101 +f 296/577/327 96/491/95 298/493/285 +f 95/495/94 97/489/98 297/488/284 +f 298/493/285 94/492/92 300/496/287 +f 93/498/90 95/495/94 299/494/286 +f 309/500/290 328/539/307 338/501/291 +f 339/507/295 329/502/292 308/504/289 +f 308/504/289 338/533/291 336/506/294 +f 337/510/298 339/507/295 307/505/293 +f 307/505/293 336/506/294 340/509/297 +f 341/536/299 337/510/298 306/508/296 +f 340/517/297 89/511/65 306/513/296 +f 91/122/67 90/125/70 341/515/299 +f 334/522/301 87/516/71 340/517/297 +f 90/519/70 88/996/74 335/520/300 +f 330/997/303 85/521/75 334/522/301 +f 88/524/74 86/998/81 331/525/302 +f 332/542/306 83/526/78 330/528/303 +f 86/530/81 84/142/85 333/531/304 +f 332/999/306 330/532/303 338/533/291 +f 337/510/298 331/525/302 333/534/304 +f 336/506/294 330/532/303 340/509/297 +f 335/523/300 331/525/302 337/510/298 +f 332/538/306 338/501/291 328/539/307 +f 329/502/292 339/507/295 327/540/308 +f 326/549/305 81/541/82 332/542/306 +f 84/142/85 82/324/202 327/543/308 +f 342/545/309 344/1000/377 215/546/203 +f 216/327/204 345/547/310 210/323/201 +f 326/549/305 342/545/309 209/544/200 +f 210/323/201 343/548/311 82/324/202 +f 215/546/203 344/1000/377 346/551/312 +f 347/1001/314 345/547/310 80/552/313 +f 346/553/312 300/496/287 92/144/87 +f 93/498/90 301/497/288 80/555/313 +f 324/557/316 352/562/320 304/558/317 +f 304/565/317 353/559/318 77/561/315 +f 352/562/320 350/566/323 78/563/321 +f 78/1002/321 351/564/322 304/565/317 +f 305/571/326 78/563/321 348/567/324 +f 351/569/322 78/1003/321 305/570/326 +f 309/500/290 305/571/326 328/539/307 +f 349/568/325 305/570/326 309/573/290 +f 328/539/307 348/567/324 342/574/309 +f 343/548/311 349/575/325 327/543/308 +f 310/740/368 296/577/327 318/578/328 +f 299/580/286 297/1004/284 311/581/330 +f 316/583/332 324/1005/316 77/561/315 +f 77/561/315 325/560/319 76/582/331 +f 358/586/335 356/591/339 303/587/336 +f 303/1006/336 357/588/337 302/590/334 +f 75/595/342 303/587/336 354/592/340 +f 357/594/337 303/587/336 75/595/342 +f 76/1007/331 75/595/342 316/596/332 +f 355/597/341 75/1008/342 76/582/331 +f 364/1009/347 292/598/343 362/599/344 +f 295/486/283 293/483/281 365/601/346 +f 362/603/344 368/649/350 366/604/348 +f 367/621/363 369/605/349 365/601/346 +f 372/611/354 366/606/348 370/608/351 +f 369/605/349 367/621/363 373/610/353 +f 374/620/362 372/611/354 376/612/355 +f 371/609/352 373/610/353 375/614/357 +f 378/616/359 374/620/362 376/612/355 +f 377/1010/356 375/617/357 315/619/361 +f 378/616/359 316/596/332 374/620/362 +f 355/597/341 317/584/333 379/618/360 +f 374/620/362 354/592/340 372/611/354 +f 357/588/337 355/1011/341 375/614/357 +f 372/611/354 356/591/339 366/606/348 +f 359/589/338 357/588/337 373/610/353 +f 366/604/348 358/622/335 364/602/347 +f 361/624/365 359/589/338 367/621/363 +f 292/598/343 364/1009/347 360/625/364 +f 361/624/365 365/601/346 291/480/279 +f 360/623/364 358/622/335 302/627/334 +f 302/627/334 359/628/338 74/626/366 +f 290/1012/280 284/630/275 288/632/277 +f 287/634/276 285/1013/274 291/635/279 +f 74/1014/366 284/636/275 360/638/364 +f 291/480/279 285/1015/274 74/639/366 +f 296/644/327 310/1016/368 362/599/344 +f 363/600/345 311/645/330 295/486/283 +f 362/603/344 310/647/368 368/649/350 +f 313/650/370 311/645/330 363/600/345 +f 368/607/350 312/651/369 370/608/351 +f 383/653/372 313/650/370 369/605/349 +f 376/655/355 370/1017/351 382/656/371 +f 383/653/372 371/609/352 315/657/361 +f 350/566/323 386/676/381 384/658/373 +f 385/661/376 387/659/374 349/568/325 +f 384/658/373 386/676/381 320/660/375 +f 321/734/382 387/659/374 319/579/329 +f 318/578/328 298/493/285 384/658/373 +f 301/662/288 299/580/286 319/579/329 +f 384/658/373 300/496/287 342/574/309 +f 345/665/310 301/662/288 385/661/376 +f 322/671/378 380/679/383 378/672/359 +f 379/618/360 381/673/379 315/619/361 +f 378/672/359 380/679/383 324/557/316 +f 325/560/319 381/673/379 317/584/333 +f 386/676/381 380/679/383 322/671/378 +f 323/674/380 381/673/379 321/678/382 +f 352/562/320 380/679/383 386/676/381 +f 387/677/374 381/673/379 351/564/322 +f 388/681/385 414/728/420 402/682/386 +f 403/1018/392 415/683/387 401/685/389 +f 398/690/394 400/680/384 404/686/390 +f 403/688/392 401/1019/389 399/689/393 +f 404/686/390 406/695/397 396/691/395 +f 397/698/400 407/692/396 399/694/393 +f 406/695/397 408/699/401 394/696/398 +f 395/1020/404 409/697/399 397/698/400 +f 408/699/401 410/704/405 392/700/402 +f 393/889/493 411/701/403 395/703/404 +f 390/736/425 392/700/402 412/705/406 +f 411/701/403 393/889/493 391/707/408 +f 420/708/409 418/1021/429 412/705/406 +f 413/1022/407 419/709/410 411/711/403 +f 422/713/412 420/827/409 410/714/405 +f 411/1023/403 421/715/411 409/697/399 +f 408/712/401 406/717/397 422/713/412 +f 425/719/415 407/692/396 409/697/399 +f 406/1024/397 404/720/390 424/722/414 +f 427/723/417 405/693/391 407/692/396 +f 428/724/418 426/1025/416 404/686/390 +f 405/1026/391 427/725/417 403/727/392 +f 428/724/418 402/682/386 416/729/421 +f 415/731/387 403/727/392 429/726/419 +f 320/660/375 444/779/444 442/732/423 +f 443/1027/426 445/733/424 319/579/329 +f 444/1028/444 320/735/375 412/705/406 +f 391/738/408 321/1029/382 445/739/424 +f 312/773/369 310/740/368 442/732/423 +f 319/742/329 311/1030/330 313/743/370 +f 388/681/385 382/744/371 414/728/420 +f 389/684/388 415/683/387 383/747/372 +f 444/1031/444 412/748/406 440/750/430 +f 419/709/410 413/1022/407 445/752/424 +f 446/754/433 444/1032/444 440/755/430 +f 441/805/431 445/756/424 439/758/435 +f 436/798/452 434/759/436 438/753/432 +f 447/761/434 435/797/451 437/762/437 +f 448/764/439 446/780/433 434/765/436 +f 435/792/451 447/766/434 433/768/441 +f 448/769/439 432/1033/438 450/770/442 +f 451/772/443 433/768/441 431/771/428 +f 430/745/427 450/770/442 416/729/421 +f 417/730/422 451/772/443 415/731/387 +f 448/764/439 430/1034/427 382/774/371 +f 383/653/372 431/775/428 313/650/370 +f 442/732/423 446/780/433 448/764/439 +f 449/767/440 447/766/434 313/778/370 +f 476/812/460 416/784/421 452/786/445 +f 451/772/443 417/730/422 477/788/447 +f 432/763/438 462/1035/485 452/786/445 +f 453/787/446 463/789/448 451/772/443 +f 462/1035/485 432/763/438 460/790/449 +f 435/792/451 433/768/441 463/789/448 +f 436/794/452 458/1036/454 460/795/449 +f 461/1037/450 459/796/453 435/797/451 +f 438/753/432 456/833/469 458/799/454 +f 459/796/453 457/800/455 437/762/437 +f 456/1038/469 438/801/432 454/803/456 +f 441/805/431 439/758/435 457/806/455 +f 454/1039/456 440/750/430 474/807/458 +f 455/1040/457 475/808/459 441/810/431 +f 464/815/462 428/811/418 476/812/460 +f 417/730/422 429/726/419 465/813/461 +f 466/1041/488 426/814/416 464/815/462 +f 429/726/419 427/725/417 467/816/463 +f 426/818/416 466/1042/488 468/819/464 +f 469/1043/465 467/820/463 425/822/415 +f 470/1044/467 422/823/412 468/819/464 +f 425/825/415 423/829/413 471/826/466 +f 472/1045/486 420/827/409 470/828/467 +f 423/829/413 421/832/411 473/830/468 +f 420/831/409 472/1046/486 474/807/458 +f 421/832/411 419/809/410 475/808/459 +f 456/833/469 480/838/472 478/834/470 +f 479/841/475 481/835/471 459/837/453 +f 480/838/472 482/842/476 484/839/473 +f 485/1047/484 483/840/474 479/841/475 +f 486/846/480 484/839/473 488/843/477 +f 483/840/474 485/1047/484 487/845/479 +f 488/843/477 490/874/487 492/847/481 +f 493/852/483 491/848/482 487/845/479 +f 492/847/481 464/849/462 486/846/480 +f 477/851/447 465/1048/461 493/852/483 +f 484/839/473 486/846/480 476/850/460 +f 477/788/447 487/854/479 453/787/446 +f 462/856/485 478/834/470 484/839/473 +f 485/1047/484 479/841/475 453/858/446 +f 460/1049/449 458/799/454 462/856/485 +f 479/841/475 459/837/453 461/859/450 +f 474/861/458 480/1050/472 456/862/469 +f 457/836/455 481/835/471 455/864/457 +f 482/842/476 480/838/472 474/866/458 +f 475/1051/459 481/867/471 473/869/468 +f 488/843/477 482/842/476 472/865/486 +f 473/869/468 483/868/474 471/872/466 +f 490/874/487 488/843/477 470/870/467 +f 471/872/466 489/871/478 469/876/465 +f 468/873/464 466/877/488 490/874/487 +f 493/879/483 467/881/463 469/880/465 +f 502/888/492 392/882/402 504/884/489 +f 391/707/408 393/889/493 503/886/491 +f 500/1052/502 394/887/398 502/888/492 +f 393/889/493 395/703/404 501/890/494 +f 394/887/398 500/1052/502 498/892/495 +f 499/1053/497 501/890/494 397/893/400 +f 396/895/395 498/917/495 496/896/496 +f 497/1054/498 499/897/497 399/899/393 +f 494/1055/500 400/900/384 496/896/496 +f 399/902/393 401/907/389 495/903/499 +f 506/1056/503 388/904/385 494/906/500 +f 401/907/389 389/922/388 507/908/501 +f 506/1057/503 494/909/500 504/629/489 +f 503/912/491 495/903/499 507/908/501 +f 496/913/496 500/1058/502 502/910/492 +f 503/1059/491 501/914/494 495/916/499 +f 506/1056/503 314/920/358 388/904/385 +f 383/923/372 315/1060/361 507/908/501 +f 506/924/503 504/1061/489 322/671/378 +f 323/674/380 505/925/490 315/619/361 +f 390/1062/425 320/927/375 504/929/489 +f 391/1063/408 505/930/490 321/932/382 diff --git a/src/datavis3d/engine/meshes/backgroudFlat.obj b/src/datavis3d/engine/meshes/backgroudFlat.obj new file mode 100644 index 00000000..cf4d10a5 --- /dev/null +++ b/src/datavis3d/engine/meshes/backgroudFlat.obj @@ -0,0 +1,32 @@ +# Blender v2.66 (sub 0) OBJ File: 'backgroud.blend' +# www.blender.org +o Cube +v 1.000000 -1.000000 -1.000000 +v 1.000000 -1.000000 1.000000 +v -1.000000 -1.000000 1.000000 +v -1.000000 -1.000000 -1.000000 +v 0.999999 1.000000 1.000001 +v -1.000000 1.000000 1.000000 +v -1.000000 1.000000 -1.000000 +vt 0.000000 0.501529 +vt 0.001529 1.000000 +vt 0.500000 0.998471 +vt 0.501529 0.500000 +vt 1.000000 0.498471 +vt 0.998471 0.000000 +vt 0.500000 0.498471 +vt 0.498471 0.000000 +vt 0.000000 0.001529 +vt 0.498471 0.500000 +vt 0.500000 0.001529 +vt 0.001529 0.500000 +vn -0.000000 1.000000 0.000000 +vn 0.000000 -0.000000 -1.000000 +vn 1.000000 0.000000 0.000000 +s off +f 1/1/1 4/2/1 3/3/1 +f 2/4/2 3/5/2 6/6/2 +f 3/7/3 4/8/3 7/9/3 +f 2/10/1 1/1/1 3/3/1 +f 5/11/2 2/4/2 6/6/2 +f 6/12/3 3/7/3 7/9/3 diff --git a/src/datavis3d/engine/meshes/backgroudSmooth.obj b/src/datavis3d/engine/meshes/backgroudSmooth.obj new file mode 100644 index 00000000..ad16d904 --- /dev/null +++ b/src/datavis3d/engine/meshes/backgroudSmooth.obj @@ -0,0 +1,36 @@ +# Blender v2.66 (sub 0) OBJ File: 'backgroud.blend' +# www.blender.org +o Cube +v 1.000000 -1.000000 -1.000000 +v 1.000000 -1.000000 1.000000 +v -1.000000 -1.000000 1.000000 +v -1.000000 -1.000000 -1.000000 +v 0.999999 1.000000 1.000001 +v -1.000000 1.000000 1.000000 +v -1.000000 1.000000 -1.000000 +vt 0.000000 0.501529 +vt 0.001529 1.000000 +vt 0.500000 0.998471 +vt 0.501529 0.500000 +vt 1.000000 0.498471 +vt 0.998471 0.000000 +vt 0.500000 0.498471 +vt 0.498471 0.000000 +vt 0.000000 0.001529 +vt 0.498471 0.500000 +vt 0.500000 0.001529 +vt 0.001529 0.500000 +vn 0.000000 0.999969 0.000000 +vn 0.707083 0.707083 0.000000 +vn 0.577349 0.577349 -0.577349 +vn 0.000000 0.707083 -0.707083 +vn 0.707083 0.000000 -0.707083 +vn 0.999969 0.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +s 1 +f 1/1/1 4/2/2 3/3/3 +f 2/4/4 3/5/3 6/6/5 +f 3/7/3 4/8/2 7/9/6 +f 2/10/4 1/1/1 3/3/3 +f 5/11/7 2/4/4 6/6/5 +f 6/12/5 3/7/3 7/9/6 diff --git a/src/datavis3d/engine/meshes/coneFlat.obj b/src/datavis3d/engine/meshes/coneFlat.obj new file mode 100644 index 00000000..51c3821e --- /dev/null +++ b/src/datavis3d/engine/meshes/coneFlat.obj @@ -0,0 +1,89 @@ +# Blender v2.66 (sub 0) OBJ File: 'cone.blend' +# www.blender.org +o Cone_Cone.001 +v 0.000000 -1.000000 -1.000000 +v 0.309017 -1.000000 -0.951057 +v 0.587785 -1.000000 -0.809017 +v 0.809017 -1.000000 -0.587785 +v 0.951057 -1.000000 -0.309017 +v 1.000000 -1.000000 0.000000 +v 0.951056 -1.000000 0.309017 +v 0.809017 -1.000000 0.587785 +v 0.000000 1.000000 0.000000 +v 0.587785 -1.000000 0.809017 +v 0.309017 -1.000000 0.951057 +v -0.000000 -1.000000 1.000000 +v -0.309017 -1.000000 0.951056 +v -0.587786 -1.000000 0.809017 +v -0.809017 -1.000000 0.587785 +v -0.951057 -1.000000 0.309016 +v -1.000000 -1.000000 -0.000001 +v -0.951056 -1.000000 -0.309018 +v -0.809016 -1.000000 -0.587786 +v -0.587784 -1.000000 -0.809018 +v -0.309016 -1.000000 -0.951057 +vt 0.018984 0.308330 +vt 0.500000 0.482045 +vt 0.000000 0.410924 +vt 0.011213 0.505476 +vt 0.051524 0.582730 +vt 0.116989 0.635124 +vt 0.066306 0.207736 +vt 0.137334 0.118990 +vt 0.225115 0.050777 +vt 0.321057 0.009776 +vt 0.415768 0.000000 +vt 0.499978 0.022406 +vt 0.551525 0.582730 +vt 1.000000 0.482045 +vt 0.616989 0.635125 +vt 0.511213 0.505476 +vt 0.500000 0.410924 +vt 0.518984 0.308330 +vt 0.566306 0.207736 +vt 0.637334 0.118990 +vt 0.725115 0.050777 +vt 0.821057 0.009776 +vt 0.915768 0.000000 +vt 0.999978 0.022406 +vn -0.407058 0.442793 -0.798898 +vn 0.140263 0.442793 -0.885585 +vn -0.140262 0.442793 -0.885585 +vn 0.407059 0.442793 -0.798898 +vn -0.634008 0.442793 -0.634010 +vn -0.798897 0.442793 -0.407060 +vn -0.885585 0.442793 -0.140264 +vn -0.885585 0.442793 0.140262 +vn -0.798898 0.442793 0.407058 +vn -0.634009 0.442793 0.634009 +vn -0.407059 0.442793 0.798898 +vn -0.140263 0.442793 0.885585 +vn 0.140263 0.442793 0.885585 +vn 0.407059 0.442793 0.798898 +vn 0.634009 0.442793 0.634009 +vn 0.798898 0.442793 0.407059 +vn 0.885585 0.442793 0.140263 +vn 0.885585 0.442793 -0.140263 +vn 0.798898 0.442793 -0.407059 +vn 0.634009 0.442793 -0.634009 +s off +f 20/1/1 9/2/1 21/3/1 +f 1/4/2 9/2/2 2/5/2 +f 21/3/3 9/2/3 1/4/3 +f 2/5/4 9/2/4 3/6/4 +f 19/7/5 9/2/5 20/1/5 +f 18/8/6 9/2/6 19/7/6 +f 17/9/7 9/2/7 18/8/7 +f 16/10/8 9/2/8 17/9/8 +f 15/11/9 9/2/9 16/10/9 +f 14/12/10 9/2/10 15/11/10 +f 13/13/11 9/14/11 14/15/11 +f 12/16/12 9/14/12 13/13/12 +f 11/17/13 9/14/13 12/16/13 +f 10/18/14 9/14/14 11/17/14 +f 8/19/15 9/14/15 10/18/15 +f 7/20/16 9/14/16 8/19/16 +f 6/21/17 9/14/17 7/20/17 +f 5/22/18 9/14/18 6/21/18 +f 4/23/19 9/14/19 5/22/19 +f 3/24/20 9/14/20 4/23/20 diff --git a/src/datavis3d/engine/meshes/coneSmooth.obj b/src/datavis3d/engine/meshes/coneSmooth.obj new file mode 100644 index 00000000..48c48ba8 --- /dev/null +++ b/src/datavis3d/engine/meshes/coneSmooth.obj @@ -0,0 +1,90 @@ +# Blender v2.66 (sub 0) OBJ File: 'cone.blend' +# www.blender.org +o Cone_Cone.001 +v 0.000000 -1.000000 -1.000000 +v 0.309017 -1.000000 -0.951057 +v 0.587785 -1.000000 -0.809017 +v 0.809017 -1.000000 -0.587785 +v 0.951057 -1.000000 -0.309017 +v 1.000000 -1.000000 0.000000 +v 0.951056 -1.000000 0.309017 +v 0.809017 -1.000000 0.587785 +v 0.000000 1.000000 0.000000 +v 0.587785 -1.000000 0.809017 +v 0.309017 -1.000000 0.951057 +v -0.000000 -1.000000 1.000000 +v -0.309017 -1.000000 0.951056 +v -0.587786 -1.000000 0.809017 +v -0.809017 -1.000000 0.587785 +v -0.951057 -1.000000 0.309016 +v -1.000000 -1.000000 -0.000001 +v -0.951056 -1.000000 -0.309018 +v -0.809016 -1.000000 -0.587786 +v -0.587784 -1.000000 -0.809018 +v -0.309016 -1.000000 -0.951057 +vt 0.018984 0.308330 +vt 0.500000 0.482045 +vt 0.000000 0.410924 +vt 0.011213 0.505476 +vt 0.051524 0.582730 +vt 0.116989 0.635124 +vt 0.066306 0.207736 +vt 0.137334 0.118990 +vt 0.225115 0.050777 +vt 0.321057 0.009776 +vt 0.415768 0.000000 +vt 0.499978 0.022406 +vt 0.551525 0.582730 +vt 1.000000 0.482045 +vt 0.616989 0.635125 +vt 0.511213 0.505476 +vt 0.500000 0.410924 +vt 0.518984 0.308330 +vt 0.566306 0.207736 +vt 0.637334 0.118990 +vt 0.725115 0.050777 +vt 0.821057 0.009776 +vt 0.915768 0.000000 +vt 0.999978 0.022406 +vn -0.525712 0.447188 -0.723594 +vn 0.000000 1.000000 0.000000 +vn -0.276376 0.447188 -0.850642 +vn 0.000000 0.447188 -0.894406 +vn 0.276376 0.447188 -0.850642 +vn 0.525712 0.447188 -0.723594 +vn -0.723594 0.447188 -0.525712 +vn -0.850642 0.447188 -0.276376 +vn -0.894406 0.447188 0.000000 +vn -0.850642 0.447188 0.276376 +vn -0.723594 0.447188 0.525712 +vn -0.525712 0.447188 0.723594 +vn -0.276376 0.447188 0.850642 +vn 0.000000 0.447188 0.894406 +vn 0.276376 0.447188 0.850642 +vn 0.525712 0.447188 0.723594 +vn 0.723594 0.447188 0.525712 +vn 0.850642 0.447188 0.276376 +vn 0.894406 0.447188 0.000000 +vn 0.850642 0.447188 -0.276376 +vn 0.723594 0.447188 -0.525712 +s 1 +f 20/1/1 9/2/2 21/3/3 +f 1/4/4 9/2/2 2/5/5 +f 21/3/3 9/2/2 1/4/4 +f 2/5/5 9/2/2 3/6/6 +f 19/7/7 9/2/2 20/1/1 +f 18/8/8 9/2/2 19/7/7 +f 17/9/9 9/2/2 18/8/8 +f 16/10/10 9/2/2 17/9/9 +f 15/11/11 9/2/2 16/10/10 +f 14/12/12 9/2/2 15/11/11 +f 13/13/13 9/14/2 14/15/12 +f 12/16/14 9/14/2 13/13/13 +f 11/17/15 9/14/2 12/16/14 +f 10/18/16 9/14/2 11/17/15 +f 8/19/17 9/14/2 10/18/16 +f 7/20/18 9/14/2 8/19/17 +f 6/21/19 9/14/2 7/20/18 +f 5/22/20 9/14/2 6/21/19 +f 4/23/21 9/14/2 5/22/20 +f 3/24/6 9/14/2 4/23/21 diff --git a/src/datavis3d/engine/meshes/cubeFlat.obj b/src/datavis3d/engine/meshes/cubeFlat.obj new file mode 100644 index 00000000..3c8d6d0a --- /dev/null +++ b/src/datavis3d/engine/meshes/cubeFlat.obj @@ -0,0 +1,47 @@ +# Blender v2.66 (sub 0) OBJ File: 'cube.blend' +# www.blender.org +o Cube +v -1.000000 -1.000000 1.000000 +v -1.000000 -1.000000 -1.000000 +v 1.000000 -1.000000 -1.000000 +v 1.000000 -1.000000 1.000000 +v -1.000000 1.000000 1.000000 +v -1.000000 1.000000 -1.000000 +v 1.000000 1.000000 -1.000000 +v 1.000000 1.000000 1.000000 +vt 0.998999 0.334334 +vt 0.667668 0.334334 +vt 0.998999 0.665666 +vt 0.332332 0.001001 +vt 0.001001 0.001001 +vt 0.332332 0.332332 +vt 0.332332 0.334334 +vt 0.001001 0.334334 +vt 0.001001 0.665666 +vt 0.665666 0.001001 +vt 0.334334 0.001001 +vt 0.334334 0.332332 +vt 0.665666 0.334334 +vt 0.334334 0.334334 +vt 0.334334 0.665666 +vt 0.667668 0.665666 +vt 0.001001 0.332332 +vt 0.332332 0.665666 +vt 0.665666 0.332332 +vt 0.665666 0.665666 +vn -1.000000 0.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 -0.000000 0.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 1.000000 0.000000 +s off +f 5/1/1 6/2/1 1/3/1 +f 6/4/2 7/5/2 2/6/2 +f 7/7/3 8/8/3 4/9/3 +f 8/10/4 5/11/4 1/12/4 +f 8/13/5 7/14/5 6/15/5 +f 6/2/1 2/16/1 1/3/1 +f 7/5/2 3/17/2 2/6/2 +f 3/18/3 7/7/3 4/9/3 +f 4/19/4 8/10/4 1/12/4 +f 5/20/5 8/13/5 6/15/5 diff --git a/src/datavis3d/engine/meshes/cubeSmooth.obj b/src/datavis3d/engine/meshes/cubeSmooth.obj new file mode 100644 index 00000000..9d147bfd --- /dev/null +++ b/src/datavis3d/engine/meshes/cubeSmooth.obj @@ -0,0 +1,50 @@ +# Blender v2.66 (sub 0) OBJ File: 'cube.blend' +# www.blender.org +o Cube +v -1.000000 -1.000000 1.000000 +v -1.000000 -1.000000 -1.000000 +v 1.000000 -1.000000 -1.000000 +v 1.000000 -1.000000 1.000000 +v -1.000000 1.000000 1.000000 +v -1.000000 1.000000 -1.000000 +v 1.000000 1.000000 -1.000000 +v 1.000000 1.000000 1.000000 +vt 0.998999 0.334334 +vt 0.667668 0.334334 +vt 0.998999 0.665666 +vt 0.332332 0.001001 +vt 0.001001 0.001001 +vt 0.332332 0.332332 +vt 0.332332 0.334334 +vt 0.001001 0.334334 +vt 0.001001 0.665666 +vt 0.665666 0.001001 +vt 0.334334 0.001001 +vt 0.334334 0.332332 +vt 0.665666 0.334334 +vt 0.334334 0.334334 +vt 0.334334 0.665666 +vt 0.667668 0.665666 +vt 0.001001 0.332332 +vt 0.332332 0.665666 +vt 0.665666 0.332332 +vt 0.665666 0.665666 +vn -0.577349 0.577349 0.577349 +vn -0.577349 0.577349 -0.577349 +vn -0.707083 0.000000 0.707083 +vn 0.577349 0.577349 -0.577349 +vn -0.707083 0.000000 -0.707083 +vn 0.577349 0.577349 0.577349 +vn 0.707083 0.000000 0.707083 +vn 0.707083 0.000000 -0.707083 +s 1 +f 5/1/1 6/2/2 1/3/3 +f 6/4/2 7/5/4 2/6/5 +f 7/7/4 8/8/6 4/9/7 +f 8/10/6 5/11/1 1/12/3 +f 8/13/6 7/14/4 6/15/2 +f 6/2/2 2/16/5 1/3/3 +f 7/5/4 3/17/8 2/6/5 +f 3/18/8 7/7/4 4/9/7 +f 4/19/7 8/10/6 1/12/3 +f 5/20/1 8/13/6 6/15/2 diff --git a/src/datavis3d/engine/meshes/cylinderFlat.obj b/src/datavis3d/engine/meshes/cylinderFlat.obj new file mode 100644 index 00000000..2b7e3e5e --- /dev/null +++ b/src/datavis3d/engine/meshes/cylinderFlat.obj @@ -0,0 +1,299 @@ +# Blender v2.66 (sub 0) OBJ File: 'cylinder.blend' +# www.blender.org +o Cylinder +v 0.000000 -1.000000 -1.000000 +v 0.000000 1.000000 -1.000000 +v 0.195090 -1.000000 -0.980785 +v 0.195090 1.000000 -0.980785 +v 0.382683 -1.000000 -0.923880 +v 0.382683 1.000000 -0.923880 +v 0.555570 -1.000000 -0.831470 +v 0.555570 1.000000 -0.831470 +v 0.707107 -1.000000 -0.707107 +v 0.707107 1.000000 -0.707107 +v 0.831470 -1.000000 -0.555570 +v 0.831470 1.000000 -0.555570 +v 0.923880 -1.000000 -0.382683 +v 0.923880 1.000000 -0.382683 +v 0.980785 -1.000000 -0.195090 +v 0.980785 1.000000 -0.195090 +v 1.000000 -1.000000 -0.000000 +v 1.000000 1.000000 -0.000000 +v 0.980785 -1.000000 0.195090 +v 0.980785 1.000000 0.195090 +v 0.923880 -1.000000 0.382683 +v 0.923880 1.000000 0.382683 +v 0.831470 -1.000000 0.555570 +v 0.831470 1.000000 0.555570 +v 0.707107 -1.000000 0.707107 +v 0.707107 1.000000 0.707107 +v 0.555570 -1.000000 0.831470 +v 0.555570 1.000000 0.831470 +v 0.382683 -1.000000 0.923880 +v 0.382683 1.000000 0.923880 +v 0.195090 -1.000000 0.980785 +v 0.195090 1.000000 0.980785 +v -0.000000 -1.000000 1.000000 +v -0.000000 1.000000 1.000000 +v -0.195091 -1.000000 0.980785 +v -0.195091 1.000000 0.980785 +v -0.382684 -1.000000 0.923879 +v -0.382684 1.000000 0.923879 +v -0.555571 -1.000000 0.831469 +v -0.555571 1.000000 0.831469 +v -0.707107 -1.000000 0.707106 +v -0.707107 1.000000 0.707106 +v -0.831470 -1.000000 0.555570 +v -0.831470 1.000000 0.555570 +v -0.923880 -1.000000 0.382683 +v -0.923880 1.000000 0.382683 +v -0.980785 -1.000000 0.195089 +v -0.980785 1.000000 0.195089 +v -1.000000 -1.000000 -0.000001 +v -1.000000 1.000000 -0.000001 +v -0.980785 -1.000000 -0.195091 +v -0.980785 1.000000 -0.195091 +v -0.923879 -1.000000 -0.382684 +v -0.923879 1.000000 -0.382684 +v -0.831469 -1.000000 -0.555571 +v -0.831469 1.000000 -0.555571 +v -0.707106 -1.000000 -0.707108 +v -0.707106 1.000000 -0.707108 +v -0.555569 -1.000000 -0.831470 +v -0.555569 1.000000 -0.831470 +v -0.382682 -1.000000 -0.923880 +v -0.382682 1.000000 -0.923880 +v -0.195089 -1.000000 -0.980786 +v -0.195089 1.000000 -0.980786 +vt 0.289718 0.879351 +vt 0.288367 0.438844 +vt 0.330714 0.438714 +vt 0.332066 0.879221 +vt 0.370605 0.438592 +vt 0.371956 0.879099 +vt 0.406505 0.438482 +vt 0.407857 0.878988 +vt 0.437036 0.438388 +vt 0.778904 0.000000 +vt 0.780256 0.440507 +vt 0.749725 0.440601 +vt 0.748373 0.000094 +vt 0.713824 0.440711 +vt 0.712473 0.000204 +vt 0.673934 0.440833 +vt 0.672582 0.000326 +vt 0.631586 0.440963 +vt 0.630235 0.000456 +vt 0.588409 0.441095 +vt 0.587057 0.000588 +vt 0.546061 0.441225 +vt 0.544710 0.000718 +vt 0.506171 0.441348 +vt 0.504819 0.000841 +vt 0.470270 0.441458 +vt 0.468919 0.000951 +vt 0.439739 0.441552 +vt 0.720545 0.882916 +vt 0.719194 0.442409 +vt 0.755094 0.442299 +vt 0.756446 0.882806 +vt 0.794985 0.442176 +vt 0.796336 0.882683 +vt 0.837333 0.442046 +vt 0.838684 0.882553 +vt 0.881861 0.882421 +vt 0.880510 0.441914 +vt 0.924209 0.882291 +vt 0.922857 0.441784 +vt 0.964099 0.882168 +vt 0.962748 0.441662 +vt 1.000000 0.882058 +vt 0.717842 0.441552 +vt 0.719194 0.882058 +vt 0.681942 0.441662 +vt 0.683293 0.882169 +vt 0.642051 0.441784 +vt 0.643403 0.882291 +vt 0.599704 0.441914 +vt 0.601055 0.882421 +vt 0.556526 0.442046 +vt 0.557878 0.882553 +vt 0.514179 0.442176 +vt 0.515530 0.882683 +vt 0.474288 0.442299 +vt 0.475640 0.882806 +vt 0.438388 0.442409 +vt 0.097872 0.879939 +vt 0.096520 0.439433 +vt 0.128403 0.879846 +vt 0.127051 0.439339 +vt 0.164303 0.879735 +vt 0.162952 0.439229 +vt 0.204194 0.879613 +vt 0.000000 0.197605 +vt 0.008423 0.155257 +vt 0.000000 0.240783 +vt 0.246541 0.879483 +vt 0.245190 0.438976 +vt 0.202842 0.439106 +vt 0.438388 0.878895 +vt 0.438388 0.001045 +vt 0.998649 0.441552 +vt 0.439739 0.882916 +vt 0.024947 0.115367 +vt 0.048935 0.079466 +vt 0.079466 0.048935 +vt 0.115366 0.024947 +vt 0.155257 0.008424 +vt 0.197605 0.000000 +vt 0.240782 0.000000 +vt 0.283130 0.008423 +vt 0.323021 0.024947 +vt 0.358922 0.048935 +vt 0.389453 0.079466 +vt 0.413441 0.115367 +vt 0.429964 0.155257 +vt 0.438388 0.197605 +vt 0.438388 0.240783 +vt 0.429964 0.283130 +vt 0.413441 0.323021 +vt 0.389453 0.358922 +vt 0.358922 0.389453 +vt 0.323021 0.413441 +vt 0.283130 0.429964 +vt 0.240783 0.438388 +vt 0.197605 0.438388 +vt 0.155257 0.429964 +vt 0.115367 0.413441 +vt 0.079466 0.389453 +vt 0.048935 0.358922 +vt 0.024947 0.323021 +vt 0.008423 0.283130 +vn 0.098017 0.000000 -0.995185 +vn 0.290285 0.000000 -0.956940 +vn 0.471397 0.000000 -0.881921 +vn 0.634393 0.000000 -0.773010 +vn 0.773010 0.000000 -0.634393 +vn 0.881921 0.000000 -0.471397 +vn 0.956940 0.000000 -0.290285 +vn 0.995185 0.000000 -0.098017 +vn 0.995185 0.000000 0.098017 +vn 0.956940 0.000000 0.290285 +vn 0.881921 0.000000 0.471396 +vn 0.773010 0.000000 0.634393 +vn 0.634393 0.000000 0.773010 +vn 0.471397 0.000000 0.881921 +vn 0.290284 0.000000 0.956940 +vn 0.098017 0.000000 0.995185 +vn -0.098018 0.000000 0.995185 +vn -0.290285 0.000000 0.956940 +vn -0.471397 0.000000 0.881921 +vn -0.634394 0.000000 0.773010 +vn -0.773011 0.000000 0.634393 +vn -0.881922 0.000000 0.471396 +vn -0.956941 0.000000 0.290284 +vn -0.995185 0.000000 0.098016 +vn -0.995185 -0.000000 -0.098018 +vn -0.956940 -0.000000 -0.290286 +vn -0.881921 -0.000000 -0.471398 +vn -0.773010 -0.000000 -0.634394 +vn -0.634392 -0.000000 -0.773011 +vn -0.471395 -0.000000 -0.881922 +vn -0.000000 1.000000 0.000000 +vn -0.098017 -0.000000 -0.995185 +vn -0.290283 -0.000000 -0.956941 +s off +f 1/1/1 2/2/1 4/3/1 +f 3/4/2 4/3/2 6/5/2 +f 5/6/3 6/5/3 8/7/3 +f 7/8/4 8/7/4 10/9/4 +f 9/10/5 10/11/5 12/12/5 +f 11/13/6 12/12/6 14/14/6 +f 13/15/7 14/14/7 16/16/7 +f 15/17/8 16/16/8 18/18/8 +f 17/19/9 18/18/9 20/20/9 +f 19/21/10 20/20/10 22/22/10 +f 21/23/11 22/22/11 24/24/11 +f 23/25/12 24/24/12 26/26/12 +f 25/27/13 26/26/13 28/28/13 +f 27/29/14 28/30/14 30/31/14 +f 29/32/15 30/31/15 32/33/15 +f 31/34/16 32/33/16 34/35/16 +f 33/36/17 34/35/17 35/37/17 +f 35/37/18 36/38/18 37/39/18 +f 37/39/19 38/40/19 39/41/19 +f 39/41/20 40/42/20 41/43/20 +f 41/44/21 42/45/21 43/46/21 +f 43/46/22 44/47/22 45/48/22 +f 45/48/23 46/49/23 47/50/23 +f 47/50/24 48/51/24 49/52/24 +f 49/52/25 50/53/25 51/54/25 +f 51/54/26 52/55/26 53/56/26 +f 53/56/27 54/57/27 55/58/27 +f 55/59/28 56/60/28 57/61/28 +f 57/61/29 58/62/29 59/63/29 +f 59/63/30 60/64/30 61/65/30 +f 4/66/31 2/67/31 6/68/31 +f 63/69/32 64/70/32 1/1/32 +f 61/65/33 62/71/33 63/69/33 +f 3/4/1 1/1/1 4/3/1 +f 5/6/2 3/4/2 6/5/2 +f 7/8/3 5/6/3 8/7/3 +f 9/72/4 7/8/4 10/9/4 +f 11/13/5 9/10/5 12/12/5 +f 13/15/6 11/13/6 14/14/6 +f 15/17/7 13/15/7 16/16/7 +f 17/19/8 15/17/8 18/18/8 +f 19/21/9 17/19/9 20/20/9 +f 21/23/10 19/21/10 22/22/10 +f 23/25/11 21/23/11 24/24/11 +f 25/27/12 23/25/12 26/26/12 +f 27/73/13 25/27/13 28/28/13 +f 29/32/14 27/29/14 30/31/14 +f 31/34/15 29/32/15 32/33/15 +f 33/36/16 31/34/16 34/35/16 +f 34/35/17 36/38/17 35/37/17 +f 36/38/18 38/40/18 37/39/18 +f 38/40/19 40/42/19 39/41/19 +f 40/42/20 42/74/20 41/43/20 +f 42/45/21 44/47/21 43/46/21 +f 44/47/22 46/49/22 45/48/22 +f 46/49/23 48/51/23 47/50/23 +f 48/51/24 50/53/24 49/52/24 +f 50/53/25 52/55/25 51/54/25 +f 52/55/26 54/57/26 53/56/26 +f 54/57/27 56/75/27 55/58/27 +f 56/60/28 58/62/28 57/61/28 +f 58/62/29 60/64/29 59/63/29 +f 60/64/30 62/71/30 61/65/30 +f 2/67/31 64/76/31 6/68/31 +f 64/76/31 62/77/31 6/68/31 +f 62/77/31 60/78/31 6/68/31 +f 60/78/31 58/79/31 6/68/31 +f 58/79/31 56/80/31 6/68/31 +f 56/80/31 54/81/31 6/68/31 +f 54/81/31 52/82/31 6/68/31 +f 52/82/31 50/83/31 6/68/31 +f 50/83/31 48/84/31 6/68/31 +f 48/84/31 46/85/31 6/68/31 +f 46/85/31 44/86/31 6/68/31 +f 44/86/31 42/87/31 6/68/31 +f 42/87/31 40/88/31 6/68/31 +f 40/88/31 38/89/31 6/68/31 +f 38/89/31 36/90/31 6/68/31 +f 36/90/31 34/91/31 6/68/31 +f 34/91/31 32/92/31 6/68/31 +f 32/92/31 30/93/31 6/68/31 +f 30/93/31 28/94/31 6/68/31 +f 28/94/31 26/95/31 6/68/31 +f 26/95/31 24/96/31 6/68/31 +f 24/96/31 22/97/31 6/68/31 +f 22/97/31 20/98/31 6/68/31 +f 20/98/31 18/99/31 6/68/31 +f 18/99/31 16/100/31 6/68/31 +f 16/100/31 14/101/31 6/68/31 +f 14/101/31 12/102/31 6/68/31 +f 12/102/31 10/103/31 8/104/31 +f 6/68/31 12/102/31 8/104/31 +f 64/70/32 2/2/32 1/1/32 +f 62/71/33 64/70/33 63/69/33 diff --git a/src/datavis3d/engine/meshes/cylinderSmooth.obj b/src/datavis3d/engine/meshes/cylinderSmooth.obj new file mode 100644 index 00000000..6ccbb286 --- /dev/null +++ b/src/datavis3d/engine/meshes/cylinderSmooth.obj @@ -0,0 +1,330 @@ +# Blender v2.66 (sub 0) OBJ File: 'cylinder.blend' +# www.blender.org +o Cylinder +v 0.000000 -1.000000 -1.000000 +v 0.000000 1.000000 -1.000000 +v 0.195090 -1.000000 -0.980785 +v 0.195090 1.000000 -0.980785 +v 0.382683 -1.000000 -0.923880 +v 0.382683 1.000000 -0.923880 +v 0.555570 -1.000000 -0.831470 +v 0.555570 1.000000 -0.831470 +v 0.707107 -1.000000 -0.707107 +v 0.707107 1.000000 -0.707107 +v 0.831470 -1.000000 -0.555570 +v 0.831470 1.000000 -0.555570 +v 0.923880 -1.000000 -0.382683 +v 0.923880 1.000000 -0.382683 +v 0.980785 -1.000000 -0.195090 +v 0.980785 1.000000 -0.195090 +v 1.000000 -1.000000 -0.000000 +v 1.000000 1.000000 -0.000000 +v 0.980785 -1.000000 0.195090 +v 0.980785 1.000000 0.195090 +v 0.923880 -1.000000 0.382683 +v 0.923880 1.000000 0.382683 +v 0.831470 -1.000000 0.555570 +v 0.831470 1.000000 0.555570 +v 0.707107 -1.000000 0.707107 +v 0.707107 1.000000 0.707107 +v 0.555570 -1.000000 0.831470 +v 0.555570 1.000000 0.831470 +v 0.382683 -1.000000 0.923880 +v 0.382683 1.000000 0.923880 +v 0.195090 -1.000000 0.980785 +v 0.195090 1.000000 0.980785 +v -0.000000 -1.000000 1.000000 +v -0.000000 1.000000 1.000000 +v -0.195091 -1.000000 0.980785 +v -0.195091 1.000000 0.980785 +v -0.382684 -1.000000 0.923879 +v -0.382684 1.000000 0.923879 +v -0.555571 -1.000000 0.831469 +v -0.555571 1.000000 0.831469 +v -0.707107 -1.000000 0.707106 +v -0.707107 1.000000 0.707106 +v -0.831470 -1.000000 0.555570 +v -0.831470 1.000000 0.555570 +v -0.923880 -1.000000 0.382683 +v -0.923880 1.000000 0.382683 +v -0.980785 -1.000000 0.195089 +v -0.980785 1.000000 0.195089 +v -1.000000 -1.000000 -0.000001 +v -1.000000 1.000000 -0.000001 +v -0.980785 -1.000000 -0.195091 +v -0.980785 1.000000 -0.195091 +v -0.923879 -1.000000 -0.382684 +v -0.923879 1.000000 -0.382684 +v -0.831469 -1.000000 -0.555571 +v -0.831469 1.000000 -0.555571 +v -0.707106 -1.000000 -0.707108 +v -0.707106 1.000000 -0.707108 +v -0.555569 -1.000000 -0.831470 +v -0.555569 1.000000 -0.831470 +v -0.382682 -1.000000 -0.923880 +v -0.382682 1.000000 -0.923880 +v -0.195089 -1.000000 -0.980786 +v -0.195089 1.000000 -0.980786 +vt 0.289718 0.879351 +vt 0.288367 0.438844 +vt 0.330714 0.438714 +vt 0.332066 0.879221 +vt 0.370605 0.438592 +vt 0.371956 0.879099 +vt 0.406505 0.438482 +vt 0.407857 0.878988 +vt 0.437036 0.438388 +vt 0.778904 0.000000 +vt 0.780256 0.440507 +vt 0.749725 0.440601 +vt 0.748373 0.000094 +vt 0.713824 0.440711 +vt 0.712473 0.000204 +vt 0.673934 0.440833 +vt 0.672582 0.000326 +vt 0.631586 0.440963 +vt 0.630235 0.000456 +vt 0.588409 0.441095 +vt 0.587057 0.000588 +vt 0.546061 0.441225 +vt 0.544710 0.000718 +vt 0.506171 0.441348 +vt 0.504819 0.000841 +vt 0.470270 0.441458 +vt 0.468919 0.000951 +vt 0.439739 0.441552 +vt 0.720545 0.882916 +vt 0.719194 0.442409 +vt 0.755094 0.442299 +vt 0.756446 0.882806 +vt 0.794985 0.442176 +vt 0.796336 0.882683 +vt 0.837333 0.442046 +vt 0.838684 0.882553 +vt 0.881861 0.882421 +vt 0.880510 0.441914 +vt 0.924209 0.882291 +vt 0.922857 0.441784 +vt 0.964099 0.882168 +vt 0.962748 0.441662 +vt 1.000000 0.882058 +vt 0.717842 0.441552 +vt 0.719194 0.882058 +vt 0.681942 0.441662 +vt 0.683293 0.882169 +vt 0.642051 0.441784 +vt 0.643403 0.882291 +vt 0.599704 0.441914 +vt 0.601055 0.882421 +vt 0.556526 0.442046 +vt 0.557878 0.882553 +vt 0.514179 0.442176 +vt 0.515530 0.882683 +vt 0.474288 0.442299 +vt 0.475640 0.882806 +vt 0.438388 0.442409 +vt 0.097872 0.879939 +vt 0.096520 0.439433 +vt 0.128403 0.879846 +vt 0.127051 0.439339 +vt 0.164303 0.879735 +vt 0.162952 0.439229 +vt 0.204194 0.879613 +vt 0.000000 0.197605 +vt 0.008423 0.155257 +vt 0.000000 0.240783 +vt 0.246541 0.879483 +vt 0.245190 0.438976 +vt 0.202842 0.439106 +vt 0.438388 0.878895 +vt 0.438388 0.001045 +vt 0.998649 0.441552 +vt 0.439739 0.882916 +vt 0.024947 0.115367 +vt 0.048935 0.079466 +vt 0.079466 0.048935 +vt 0.115366 0.024947 +vt 0.155257 0.008424 +vt 0.197605 0.000000 +vt 0.240782 0.000000 +vt 0.283130 0.008423 +vt 0.323021 0.024947 +vt 0.358922 0.048935 +vt 0.389453 0.079466 +vt 0.413441 0.115367 +vt 0.429964 0.155257 +vt 0.438388 0.197605 +vt 0.438388 0.240783 +vt 0.429964 0.283130 +vt 0.413441 0.323021 +vt 0.389453 0.358922 +vt 0.358922 0.389453 +vt 0.323021 0.413441 +vt 0.283130 0.429964 +vt 0.240783 0.438388 +vt 0.197605 0.438388 +vt 0.155257 0.429964 +vt 0.115367 0.413441 +vt 0.079466 0.389453 +vt 0.048935 0.358922 +vt 0.024947 0.323021 +vt 0.008423 0.283130 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 0.685690 -0.727866 +vn 0.142003 0.685690 -0.713889 +vn 0.195074 0.000000 -0.980773 +vn 0.278542 0.685690 -0.672475 +vn 0.382672 0.000000 -0.923856 +vn 0.404370 0.685690 -0.605213 +vn 0.555559 0.000000 -0.831446 +vn 0.514664 0.685690 -0.514664 +vn 0.707083 0.000000 -0.707083 +vn 0.605213 0.685690 -0.404370 +vn 0.831446 0.000000 -0.555559 +vn 0.672475 0.685690 -0.278542 +vn 0.923856 0.000000 -0.382672 +vn 0.713889 0.685690 -0.142003 +vn 0.980773 0.000000 -0.195074 +vn 0.727866 0.685690 0.000000 +vn 1.000000 0.000000 0.000000 +vn 0.713889 0.685690 0.142003 +vn 0.980773 0.000000 0.195074 +vn 0.672475 0.685690 0.278542 +vn 0.923856 0.000000 0.382672 +vn 0.605213 0.685690 0.404370 +vn 0.831446 0.000000 0.555559 +vn 0.514664 0.685690 0.514664 +vn 0.707083 0.000000 0.707083 +vn 0.404370 0.685690 0.605213 +vn 0.555559 0.000000 0.831446 +vn 0.278542 0.685690 0.672475 +vn 0.382672 0.000000 0.923856 +vn 0.142003 0.685690 0.713889 +vn 0.195074 0.000000 0.980773 +vn 0.000000 0.685690 0.727866 +vn 0.000000 0.000000 0.999969 +vn -0.195074 0.000000 0.980773 +vn -0.142003 0.685690 0.713889 +vn -0.382672 0.000000 0.923856 +vn -0.278542 0.685690 0.672475 +vn -0.555559 0.000000 0.831446 +vn -0.404370 0.685690 0.605213 +vn -0.707083 0.000000 0.707083 +vn -0.514664 0.685690 0.514664 +vn -0.831446 0.000000 0.555559 +vn -0.605213 0.685690 0.404370 +vn -0.923856 0.000000 0.382672 +vn -0.672475 0.685690 0.278542 +vn -0.980773 0.000000 0.195074 +vn -0.713889 0.685690 0.142003 +vn -1.000000 0.000000 0.000000 +vn -0.727866 0.685690 0.000000 +vn -0.980773 0.000000 -0.195074 +vn -0.713889 0.685690 -0.142003 +vn -0.923856 0.000000 -0.382672 +vn -0.672475 0.685690 -0.278542 +vn -0.831446 0.000000 -0.555559 +vn -0.605213 0.685690 -0.404370 +vn -0.707083 0.000000 -0.707083 +vn -0.514664 0.685690 -0.514695 +vn -0.555559 0.000000 -0.831446 +vn -0.404370 0.685690 -0.605213 +vn -0.382672 0.000000 -0.923856 +vn -0.195074 0.000000 -0.980773 +vn -0.142003 0.685690 -0.713889 +vn -0.278542 0.685690 -0.672475 +s 1 +f 1/1/1 2/2/2 4/3/3 +f 3/4/4 4/3/3 6/5/5 +f 5/6/6 6/5/5 8/7/7 +f 7/8/8 8/7/7 10/9/9 +f 9/10/10 10/11/9 12/12/11 +f 11/13/12 12/12/11 14/14/13 +f 13/15/14 14/14/13 16/16/15 +f 15/17/16 16/16/15 18/18/17 +f 17/19/18 18/18/17 20/20/19 +f 19/21/20 20/20/19 22/22/21 +f 21/23/22 22/22/21 24/24/23 +f 23/25/24 24/24/23 26/26/25 +f 25/27/26 26/26/25 28/28/27 +f 27/29/28 28/30/27 30/31/29 +f 29/32/30 30/31/29 32/33/31 +f 31/34/32 32/33/31 34/35/33 +f 33/36/34 34/35/33 35/37/35 +f 35/37/35 36/38/36 37/39/37 +f 37/39/37 38/40/38 39/41/39 +f 39/41/39 40/42/40 41/43/41 +f 41/44/41 42/45/42 43/46/43 +f 43/46/43 44/47/44 45/48/45 +f 45/48/45 46/49/46 47/50/47 +f 47/50/47 48/51/48 49/52/49 +f 49/52/49 50/53/50 51/54/51 +f 51/54/51 52/55/52 53/56/53 +f 53/56/53 54/57/54 55/58/55 +f 55/59/55 56/60/56 57/61/57 +f 57/61/57 58/62/58 59/63/59 +f 59/63/59 60/64/60 61/65/61 +f 4/66/3 2/67/2 6/68/5 +f 63/69/62 64/70/63 1/1/1 +f 61/65/61 62/71/64 63/69/62 +f 3/4/4 1/1/1 4/3/3 +f 5/6/6 3/4/4 6/5/5 +f 7/8/8 5/6/6 8/7/7 +f 9/72/10 7/8/8 10/9/9 +f 11/13/12 9/10/10 12/12/11 +f 13/15/14 11/13/12 14/14/13 +f 15/17/16 13/15/14 16/16/15 +f 17/19/18 15/17/16 18/18/17 +f 19/21/20 17/19/18 20/20/19 +f 21/23/22 19/21/20 22/22/21 +f 23/25/24 21/23/22 24/24/23 +f 25/27/26 23/25/24 26/26/25 +f 27/73/28 25/27/26 28/28/27 +f 29/32/30 27/29/28 30/31/29 +f 31/34/32 29/32/30 32/33/31 +f 33/36/34 31/34/32 34/35/33 +f 34/35/33 36/38/36 35/37/35 +f 36/38/36 38/40/38 37/39/37 +f 38/40/38 40/42/40 39/41/39 +f 40/42/40 42/74/42 41/43/41 +f 42/45/42 44/47/44 43/46/43 +f 44/47/44 46/49/46 45/48/45 +f 46/49/46 48/51/48 47/50/47 +f 48/51/48 50/53/50 49/52/49 +f 50/53/50 52/55/52 51/54/51 +f 52/55/52 54/57/54 53/56/53 +f 54/57/54 56/75/56 55/58/55 +f 56/60/56 58/62/58 57/61/57 +f 58/62/58 60/64/60 59/63/59 +f 60/64/60 62/71/64 61/65/61 +f 2/67/2 64/76/63 6/68/5 +f 64/76/63 62/77/64 6/68/5 +f 62/77/64 60/78/60 6/68/5 +f 60/78/60 58/79/58 6/68/5 +f 58/79/58 56/80/56 6/68/5 +f 56/80/56 54/81/54 6/68/5 +f 54/81/54 52/82/52 6/68/5 +f 52/82/52 50/83/50 6/68/5 +f 50/83/50 48/84/48 6/68/5 +f 48/84/48 46/85/46 6/68/5 +f 46/85/46 44/86/44 6/68/5 +f 44/86/44 42/87/42 6/68/5 +f 42/87/42 40/88/40 6/68/5 +f 40/88/40 38/89/38 6/68/5 +f 38/89/38 36/90/36 6/68/5 +f 36/90/36 34/91/33 6/68/5 +f 34/91/33 32/92/31 6/68/5 +f 32/92/31 30/93/29 6/68/5 +f 30/93/29 28/94/27 6/68/5 +f 28/94/27 26/95/25 6/68/5 +f 26/95/25 24/96/23 6/68/5 +f 24/96/23 22/97/21 6/68/5 +f 22/97/21 20/98/19 6/68/5 +f 20/98/19 18/99/17 6/68/5 +f 18/99/17 16/100/15 6/68/5 +f 16/100/15 14/101/13 6/68/5 +f 14/101/13 12/102/11 6/68/5 +f 12/102/11 10/103/9 8/104/7 +f 6/68/5 12/102/11 8/104/7 +f 64/70/63 2/2/2 1/1/1 +f 62/71/64 64/70/63 63/69/62 diff --git a/src/datavis3d/engine/meshes/pyramidFlat.obj b/src/datavis3d/engine/meshes/pyramidFlat.obj new file mode 100644 index 00000000..35edb477 --- /dev/null +++ b/src/datavis3d/engine/meshes/pyramidFlat.obj @@ -0,0 +1,22 @@ +# Blender v2.66 (sub 0) OBJ File: 'pyramid.blend' +# www.blender.org +o Cone_Cone.001 +v 1.000000 -1.000000 -0.999999 +v 0.999999 -1.000000 1.000000 +v -1.000000 -1.000000 0.999999 +v 0.000000 1.000000 0.000000 +v -0.999999 -1.000000 -1.000000 +vt 0.999900 0.000100 +vt 0.500000 0.500000 +vt 0.000100 0.000100 +vt 0.000100 0.999900 +vt 0.999900 0.999900 +vn -0.894427 0.447214 -0.000000 +vn 0.894427 0.447213 0.000000 +vn 0.000000 0.447214 -0.894427 +vn -0.000000 0.447214 0.894427 +s off +f 3/1/1 4/2/1 5/3/1 +f 1/4/2 4/2/2 2/5/2 +f 5/3/3 4/2/3 1/4/3 +f 2/5/4 4/2/4 3/1/4 diff --git a/src/datavis3d/engine/meshes/pyramidSmooth.obj b/src/datavis3d/engine/meshes/pyramidSmooth.obj new file mode 100644 index 00000000..b11c8750 --- /dev/null +++ b/src/datavis3d/engine/meshes/pyramidSmooth.obj @@ -0,0 +1,23 @@ +# Blender v2.66 (sub 0) OBJ File: 'pyramid.blend' +# www.blender.org +o Cone_Cone.001 +v 1.000000 -1.000000 -0.999999 +v 0.999999 -1.000000 1.000000 +v -1.000000 -1.000000 0.999999 +v 0.000000 1.000000 0.000000 +v -0.999999 -1.000000 -1.000000 +vt 0.999900 0.000100 +vt 0.500000 0.500000 +vt 0.000100 0.000100 +vt 0.000100 0.999900 +vt 0.999900 0.999900 +vn -0.577349 0.577349 0.577349 +vn 0.000000 1.000000 0.000000 +vn -0.577349 0.577349 -0.577349 +vn 0.577349 0.577349 -0.577349 +vn 0.577349 0.577349 0.577349 +s 1 +f 3/1/1 4/2/2 5/3/3 +f 1/4/4 4/2/2 2/5/5 +f 5/3/3 4/2/2 1/4/4 +f 2/5/5 4/2/2 3/1/1 diff --git a/src/datavis3d/engine/q3dbars.cpp b/src/datavis3d/engine/q3dbars.cpp new file mode 100644 index 00000000..36ca1b0a --- /dev/null +++ b/src/datavis3d/engine/q3dbars.cpp @@ -0,0 +1,625 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the documentation 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 Digia Plc 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$ +** +****************************************************************************/ + +#include "q3dbars.h" +#include "q3dbars_p.h" +#include "meshloader_p.h" +#include "vertexindexer_p.h" +#include "camerahelper_p.h" + +#include +#include +#include +#include + +//#include + +#include + +QTCOMMERCIALDATAVIS3D_BEGIN_NAMESPACE + +const float maxSceneSize = 40.0; + +Q3DBars::Q3DBars() + : d_ptr(new Q3DBarsPrivate(this)) +{ +} + +Q3DBars::~Q3DBars() +{ + glDeleteBuffers(1, &d_ptr->m_vertexbuffer); + glDeleteBuffers(1, &d_ptr->m_uvbuffer); + glDeleteBuffers(1, &d_ptr->m_normalbuffer); + glDeleteBuffers(1, &d_ptr->m_elementbuffer); + glDeleteBuffers(1, &d_ptr->m_vertexbufferBackground); + glDeleteBuffers(1, &d_ptr->m_uvbufferBackground); + glDeleteBuffers(1, &d_ptr->m_normalbufferBackground); + glDeleteBuffers(1, &d_ptr->m_elementbufferBackground); +} + +void Q3DBars::initialize() +{ + // Initialize shaders + d_ptr->initShaders(QStringLiteral(":/shaders/vertex"), QStringLiteral(":/shaders/fragment")); + + // Load default mesh + d_ptr->loadBarMesh(); + + // Load background mesh + d_ptr->loadBackgroundMesh(); + + // Set clear color + glClearColor(0.0f, 0.0f, 0.0f, 1.0f); + + // Set OpenGL features + glEnable(GL_DEPTH_TEST); + glDepthFunc(GL_LESS); + glEnable(GL_CULL_FACE); + glCullFace(GL_BACK); + //glFrontFace(GL_CCW); + + // Set initial camera position + // X must be 0 for rotation to work - we can use "setCameraRotation" for setting it later + CameraHelper::setDefaultCameraOrientation(QVector3D(0.0f, 0.0f, 6.0f) + , QVector3D(0.0f, 0.0f, 0.0f) + , QVector3D(0.0f, 1.0f, 0.0f)); + + CameraHelper::setCameraRotation(QPointF(-45.0f, 15.0f)); + + // Set view port + glViewport(0, 0, width(), height()); +} + +void Q3DBars::render() +{ + int startBar = 0; + int stopBar = 0; + int stepBar = 0; + + int startRow = 0; + int stopRow = 0; + int stepRow = 0; + + float barPos = 0; + float rowPos = 0; + + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + d_ptr->m_program->bind(); + + QMatrix4x4 projectionMatrix; + projectionMatrix.perspective(45.0f, (float)width() / (float)height(), 0.1f, 100.0f); + + QMatrix4x4 viewMatrix = CameraHelper::calculateViewMatrix(d_ptr->m_mousePos, d_ptr->m_zoomLevel + , width(), height()); + + // Calculate drawing order + //qDebug() << "viewMatrix" << viewMatrix.row(0).z(); // jos negatiivinen, käännä bar -piirtojärjestys + //qDebug() << "viewMatrix" << viewMatrix.row(0).x(); // jos negatiivinen, käännä row -piirtojärjestys + // TODO: Needs more tuning unless we get depth test working correctly + if (viewMatrix.row(0).x() < 0) { + startRow = 0; + stopRow = d_ptr->m_sampleCount.y(); + stepRow = 1; + } + else { + startRow = d_ptr->m_sampleCount.y() - 1; + stopRow = -1; + stepRow = -1; + } + if (viewMatrix.row(0).z() > 0) { + startBar = 0; + stopBar = d_ptr->m_sampleCount.x(); + stepBar = 1; + } + else { + startBar = d_ptr->m_sampleCount.x() - 1; + stopBar = -1; + stepBar = -1; + } + + //qDebug() << "projectionMatrix" << projectionMatrix; + QVector3D lightPos = QVector3D(0.0f, 1.5f + , (d_ptr->m_sampleCount.y() / 5.0f)); + + // Draw background + if (d_ptr->m_background) { + QMatrix4x4 modelMatrix; + QMatrix4x4 MVPMatrix; + modelMatrix.scale(QVector3D(d_ptr->m_rowWidth * d_ptr->m_sceneScale + , 1.0f + , d_ptr->m_columnDepth * d_ptr->m_sceneScale)); + modelMatrix.rotate(-90.0f, 0.0f, 1.0f, 0.0f); + + MVPMatrix = projectionMatrix * viewMatrix * modelMatrix; + + //qDebug() << "modelMatrix" << modelMatrix; + //qDebug() << "MVPMatrix" << MVPMatrix; + + QVector3D barColor = QVector3D(0.5, 0.5, 0.5); + + d_ptr->m_program->setUniformValue(d_ptr->m_lightPositionUniform, lightPos); + d_ptr->m_program->setUniformValue(d_ptr->m_viewMatrixUniform, viewMatrix); + d_ptr->m_program->setUniformValue(d_ptr->m_modelMatrixUniform, modelMatrix); + d_ptr->m_program->setUniformValue(d_ptr->m_invTransModelMatrixUniform + , modelMatrix.inverted().transposed()); + d_ptr->m_program->setUniformValue(d_ptr->m_mvpMatrixUniform, MVPMatrix); + d_ptr->m_program->setUniformValue(d_ptr->m_colorUniform, barColor); + d_ptr->m_program->setUniformValue(d_ptr->m_lightStrengthUniform, 4.0f); + + // 1st attribute buffer : vertices + glEnableVertexAttribArray(0); + glBindBuffer(GL_ARRAY_BUFFER, d_ptr->m_vertexbufferBackground); + glVertexAttribPointer(d_ptr->m_positionAttr, 3, GL_FLOAT, GL_TRUE, 0, (void*)0); + + // 2nd attribute buffer : normals + glEnableVertexAttribArray(1); + glBindBuffer(GL_ARRAY_BUFFER, d_ptr->m_normalbufferBackground); + glVertexAttribPointer(d_ptr->m_normalAttr, 3, GL_FLOAT, GL_TRUE, 0, (void*)0); + + // 3rd attribute buffer : UVs + //glEnableVertexAttribArray(2); + //glBindBuffer(GL_ARRAY_BUFFER, d_ptr->m_uvbufferBackground); + //glVertexAttribPointer(d_ptr->m_uvAttr, 2, GL_FLOAT, GL_FALSE, 0, (void*)0); + + // Index buffer + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, d_ptr->m_elementbufferBackground); + + // Draw the triangles + glDrawElements(GL_TRIANGLES, d_ptr->m_indexCountBackground, GL_UNSIGNED_SHORT, (void*)0); + + glDisableVertexAttribArray(0); + glDisableVertexAttribArray(1); + //glDisableVertexAttribArray(2); + } + + // Draw bars + for (int row = startRow; row != stopRow; row += stepRow) { + for (int bar = startBar; bar != stopBar; bar += stepBar) { + float barHeight = d_ptr->m_dataSet.at(row).at(bar); + //qDebug() << "barHeight" << barHeight; + QMatrix4x4 modelMatrix; + QMatrix4x4 MVPMatrix; + barPos = (bar + 1) * (d_ptr->m_barSpacing.x()); + //qDebug() << "x" << d_ptr->m_rowWidth << "-" << barPos << "=" << d_ptr->m_rowWidth - barPos; + rowPos = (row + 1) * (d_ptr->m_barSpacing.y()); + //qDebug() << "z" << rowPos << "-" << d_ptr->m_columnDepth << "=" << rowPos - d_ptr->m_columnDepth; + modelMatrix.translate((d_ptr->m_rowWidth - barPos) / d_ptr->m_scaleFactorX + , barHeight - 1.0f + , (d_ptr->m_columnDepth - rowPos) / d_ptr->m_scaleFactorZ); + modelMatrix.scale(QVector3D(d_ptr->m_scaleX, barHeight, d_ptr->m_scaleZ)); + + MVPMatrix = projectionMatrix * viewMatrix * modelMatrix; + + //qDebug() << "modelMatrix" << modelMatrix; + //qDebug() << "MVPMatrix" << MVPMatrix; + + QVector3D barColor = QVector3D(float(row) / float(d_ptr->m_sampleCount.y()) + , 0 + , barHeight); + //QVector3D barColor = QVector3D(0.1, 0.1, 0.5); + + d_ptr->m_program->setUniformValue(d_ptr->m_lightPositionUniform, lightPos); + d_ptr->m_program->setUniformValue(d_ptr->m_viewMatrixUniform, viewMatrix); + d_ptr->m_program->setUniformValue(d_ptr->m_modelMatrixUniform, modelMatrix); + d_ptr->m_program->setUniformValue(d_ptr->m_invTransModelMatrixUniform + , modelMatrix.inverted().transposed()); + d_ptr->m_program->setUniformValue(d_ptr->m_mvpMatrixUniform, MVPMatrix); + d_ptr->m_program->setUniformValue(d_ptr->m_colorUniform, barColor); + d_ptr->m_program->setUniformValue(d_ptr->m_lightStrengthUniform, 4.0f); + //qDebug() << "height:" << barHeight; + + // 1st attribute buffer : vertices + glEnableVertexAttribArray(0); + glBindBuffer(GL_ARRAY_BUFFER, d_ptr->m_vertexbuffer); + glVertexAttribPointer(d_ptr->m_positionAttr, 3, GL_FLOAT, GL_TRUE, 0, (void*)0); + + // 2nd attribute buffer : normals + glEnableVertexAttribArray(1); + glBindBuffer(GL_ARRAY_BUFFER, d_ptr->m_normalbuffer); + glVertexAttribPointer(d_ptr->m_normalAttr, 3, GL_FLOAT, GL_TRUE, 0, (void*)0); + + // 3rd attribute buffer : UVs + //glEnableVertexAttribArray(2); + //glBindBuffer(GL_ARRAY_BUFFER, d_ptr->m_uvbuffer); + //glVertexAttribPointer(d_ptr->m_uvAttr, 2, GL_FLOAT, GL_FALSE, 0, (void*)0); + + // Index buffer + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, d_ptr->m_elementbuffer); + + // Draw the triangles + glDrawElements(GL_TRIANGLES, d_ptr->m_indexCount, GL_UNSIGNED_SHORT, (void*)0); + + glDisableVertexAttribArray(0); + glDisableVertexAttribArray(1); + //glDisableVertexAttribArray(2); + } + } + + d_ptr->m_program->release(); +} + +void Q3DBars::mousePressEvent(QMouseEvent *event) +{ + // TODO: for testing shaders + static bool shaderOne = true; + //qDebug() << "mouse button pressed" << event->button(); + if (Qt::LeftButton == event->button()) { + d_ptr->m_mousePressed = true; + // update mouse positions to prevent jumping when releasing or repressing a button + d_ptr->m_mousePos = event->pos(); + } + else if (Qt::RightButton == event->button()) { + // reset rotations + d_ptr->m_mousePos = QPoint(0, 0); + } + else if (Qt::MiddleButton == event->button()) { + // TODO: testing shaders + if (shaderOne) { + shaderOne = false; + d_ptr->initShaders(QStringLiteral(":/shaders/vertex") + , QStringLiteral(":/shaders/fragmentAmbient")); + } + else { + shaderOne = true; + d_ptr->initShaders(QStringLiteral(":/shaders/vertex") + , QStringLiteral(":/shaders/fragment")); + } + } + CameraHelper::updateMousePos(d_ptr->m_mousePos); +} + +void Q3DBars::mouseReleaseEvent(QMouseEvent *event) +{ + //qDebug() << "mouse button released" << event->button(); + d_ptr->m_mousePressed = false; + // update mouse positions to prevent jumping when releasing or repressing a button + d_ptr->m_mousePos = event->pos(); + CameraHelper::updateMousePos(event->pos()); +} + +void Q3DBars::mouseMoveEvent(QMouseEvent *event) +{ + if (d_ptr->m_mousePressed) { + //qDebug() << "mouse moved while pressed" << event->pos(); + d_ptr->m_mousePos = event->pos(); + } +} + +void Q3DBars::wheelEvent(QWheelEvent *event) +{ + if (d_ptr->m_zoomLevel > 100) { + d_ptr->m_zoomLevel += event->angleDelta().y() / 12; + } + else if (d_ptr->m_zoomLevel > 50) { + d_ptr->m_zoomLevel += event->angleDelta().y() / 60; + } + else { + d_ptr->m_zoomLevel += event->angleDelta().y() / 120; + } + if (d_ptr->m_zoomLevel > 500) { + d_ptr->m_zoomLevel = 500; + } + else if (d_ptr->m_zoomLevel < 10) { + d_ptr->m_zoomLevel = 10; + } + +} + +void Q3DBars::resizeEvent(QResizeEvent *event) +{ + Q_UNUSED(event); + + // Set view port + glViewport(0, 0, width(), height()); + + // If orientation changes, we need to scale again + // TODO: Handle it +} + +void Q3DBars::addDataSet(QVector data) +{ + // Check that the input data fits into sample space, and resize if it doesn't + if (data.size() > d_ptr->m_sampleCount.x()) { + data.resize(d_ptr->m_sampleCount.x()); + qWarning("Data set too large for sample space"); + } + // The vector contains data (=height) for each bar, a row at a time + // With each new row, the previous data set (=row) must be moved back + // ie. we need as many vectors as we have rows in the sample space + d_ptr->m_dataSet.prepend(data); + // if the added data pushed us over sample space, remove the oldest data set + if (d_ptr->m_dataSet.size() > d_ptr->m_sampleCount.y()) + d_ptr->m_dataSet.resize(d_ptr->m_sampleCount.y()); +} + +void Q3DBars::setBarSpecs(QPointF thickness, QPointF spacing, bool relative) +{ + d_ptr->m_barThickness = thickness; + if (relative) { + d_ptr->m_barSpacing.setX((thickness.x() * 2) * (spacing.x() + 1.0f)); + d_ptr->m_barSpacing.setY((thickness.y() * 2) * (spacing.y() + 1.0f)); + } + else { + d_ptr->m_barSpacing = thickness * 2 + spacing * 2; + } + // Calculate here and at setting sample space + d_ptr->calculateSceneScalingFactors(); +} + +void Q3DBars::setBarType(BarStyle style, bool smooth) +{ + if (style == Bars) { + if (smooth) { + d_ptr->m_objFile = QStringLiteral(":/defaultMeshes/barSmooth"); + } + else { + d_ptr->m_objFile = QStringLiteral(":/defaultMeshes/bar"); + } + } + else if (style == Pyramids) { + if (smooth) { + d_ptr->m_objFile = QStringLiteral(":/defaultMeshes/pyramidSmooth"); + } + else { + d_ptr->m_objFile = QStringLiteral(":/defaultMeshes/pyramid"); + } + } + else if (style == Cones) { + if (smooth) { + d_ptr->m_objFile = QStringLiteral(":/defaultMeshes/coneSmooth"); + } + else { + d_ptr->m_objFile = QStringLiteral(":/defaultMeshes/cone"); + } + } + else if (style == Cylinders) { + if (smooth) { + d_ptr->m_objFile = QStringLiteral(":/defaultMeshes/cylinderSmooth"); + } + else { + d_ptr->m_objFile = QStringLiteral(":/defaultMeshes/cylinder"); + } + } + else if (style == Apes) { + if (smooth) { + d_ptr->m_objFile = QStringLiteral(":/defaultMeshes/apeSmooth"); + } + else { + d_ptr->m_objFile = QStringLiteral(":/defaultMeshes/ape"); + } + } + // Reload mesh data + d_ptr->loadBarMesh(); +} + +void Q3DBars::setMeshFileName(const QString &objFileName) +{ + d_ptr->m_objFile = objFileName; +} + +void Q3DBars::setupSampleSpace(QPoint sampleCount) +{ + d_ptr->m_sampleCount = sampleCount; + // Initialize data set + QVector row; + for (int columns = 0; columns < sampleCount.x(); columns ++) { + row.append(0.0f); + } + for (int rows = 0; rows < sampleCount.y(); rows++) { + d_ptr->m_dataSet.append(row); + } + // Calculate here and at setting bar specs + d_ptr->calculateSceneScalingFactors(); +} + +Q3DBarsPrivate::Q3DBarsPrivate(Q3DBars *q) + : q_ptr(q) + , m_program(0) + , m_sampleCount(QPoint(0, 0)) + , m_objFile(QStringLiteral(":/defaultMeshes/bar")) + , m_vertexCount(0) + , m_indexCount(0) + , m_indexCountBackground(0) + , m_mousePressed(false) + , m_mousePos(QPoint(0, 0)) + , m_zoomLevel(100) + , m_barThickness(QPointF(0.75f, 0.75f)) + , m_barSpacing(m_barThickness * 3.0f) + , m_meshDataLoaded(false) + , m_background(false) + , m_dataSet(0) + , m_rowWidth(0) + , m_columnDepth(0) + , m_maxDimension(0) + , m_scaleX(0) + , m_scaleZ(0) + , m_scaleFactorX(0) + , m_scaleFactorZ(0) + , m_sceneScale(0) +{ +} + +Q3DBarsPrivate::~Q3DBarsPrivate() +{ +} + +void Q3DBarsPrivate::loadBarMesh() +{ + if (m_meshDataLoaded) { + // Delete old data + glDeleteBuffers(1, &m_vertexbuffer); + glDeleteBuffers(1, &m_uvbuffer); + glDeleteBuffers(1, &m_normalbuffer); + glDeleteBuffers(1, &m_elementbuffer); + } + QVector vertices; + QVector uvs; + QVector normals; + bool loadOk = MeshLoader::loadOBJ(m_objFile, vertices, uvs, normals); + if (!loadOk) + qFatal("loading failed"); + + m_vertexCount = vertices.size(); + qDebug() << "vertex count" << m_vertexCount; + + // Index vertices + QVector indices; + QVector indexed_vertices; + QVector indexed_uvs; + QVector indexed_normals; + VertexIndexer::indexVBO(vertices, uvs, normals, indices, indexed_vertices, indexed_uvs + , indexed_normals); + + m_indexCount = indices.size(); + //qDebug() << "index count" << m_indexCount; + + glGenBuffers(1, &m_vertexbuffer); + glBindBuffer(GL_ARRAY_BUFFER, m_vertexbuffer); + glBufferData(GL_ARRAY_BUFFER, indexed_vertices.size() * sizeof(QVector3D) + , &indexed_vertices.at(0) + , GL_STATIC_DRAW); + + glGenBuffers(1, &m_normalbuffer); + glBindBuffer(GL_ARRAY_BUFFER, m_normalbuffer); + glBufferData(GL_ARRAY_BUFFER, indexed_normals.size() * sizeof(QVector3D) + , &indexed_normals.at(0) + , GL_STATIC_DRAW); + + //glGenBuffers(1, &m_uvbuffer); + //glBindBuffer(GL_ARRAY_BUFFER, m_uvbuffer); + //glBufferData(GL_ARRAY_BUFFER, indexed_uvs.size() * sizeof(QVector2D), &indexed_uvs.at(0) + // , GL_STATIC_DRAW); + + glGenBuffers(1, &m_elementbuffer); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_elementbuffer); + glBufferData(GL_ELEMENT_ARRAY_BUFFER, indices.size() * sizeof(unsigned short), &indices.at(0) + , GL_STATIC_DRAW); + + m_meshDataLoaded = true; +} + +void Q3DBarsPrivate::loadBackgroundMesh() +{ + QVector vertices; + QVector uvs; + QVector normals; + bool loadOk = MeshLoader::loadOBJ(QStringLiteral(":/defaultMeshes/background") + , vertices, uvs, normals); + if (!loadOk) + qFatal("loading failed"); + + // Index vertices + QVector indices; + QVector indexed_vertices; + QVector indexed_uvs; + QVector indexed_normals; + VertexIndexer::indexVBO(vertices, uvs, normals, indices, indexed_vertices, indexed_uvs + , indexed_normals); + + m_indexCountBackground = indices.size(); + + glGenBuffers(1, &m_vertexbufferBackground); + glBindBuffer(GL_ARRAY_BUFFER, m_vertexbufferBackground); + glBufferData(GL_ARRAY_BUFFER, indexed_vertices.size() * sizeof(QVector3D) + , &indexed_vertices.at(0) + , GL_STATIC_DRAW); + + glGenBuffers(1, &m_normalbufferBackground); + glBindBuffer(GL_ARRAY_BUFFER, m_normalbufferBackground); + glBufferData(GL_ARRAY_BUFFER, indexed_normals.size() * sizeof(QVector3D) + , &indexed_normals.at(0) + , GL_STATIC_DRAW); + + //glGenBuffers(1, &m_uvbufferBackground); + //glBindBuffer(GL_ARRAY_BUFFER, m_uvbufferBackground); + //glBufferData(GL_ARRAY_BUFFER, indexed_uvs.size() * sizeof(QVector2D), &indexed_uvs.at(0) + // , GL_STATIC_DRAW); + + glGenBuffers(1, &m_elementbufferBackground); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_elementbufferBackground); + glBufferData(GL_ELEMENT_ARRAY_BUFFER, indices.size() * sizeof(unsigned short), &indices.at(0) + , GL_STATIC_DRAW); + + m_background = true; +} + +void Q3DBarsPrivate::initShaders(QString vertexShader, QString fragmentShader) +{ + if (m_program) + delete m_program; + m_program = new QOpenGLShaderProgram(q_ptr); + if (!m_program->addShaderFromSourceFile(QOpenGLShader::Vertex, vertexShader)) + qFatal("Compiling Vertex shader failed"); + if (!m_program->addShaderFromSourceFile(QOpenGLShader::Fragment, fragmentShader)) + qFatal("Compiling Fragment shader failed"); + m_program->link(); + m_mvpMatrixUniform = m_program->uniformLocation("MVP"); + m_viewMatrixUniform = m_program->uniformLocation("V"); + m_modelMatrixUniform = m_program->uniformLocation("M"); + m_invTransModelMatrixUniform = m_program->uniformLocation("itM"); + m_positionAttr = m_program->attributeLocation("vertexPosition_mdl"); + m_uvAttr = m_program->attributeLocation("vertexUV"); + m_normalAttr = m_program->attributeLocation("vertexNormal_mdl"); + m_lightPositionUniform = m_program->uniformLocation("lightPosition_wrld"); + m_colorUniform = m_program->uniformLocation("color_mdl"); + m_lightStrengthUniform = m_program->uniformLocation("lightStrength"); +} + +void Q3DBarsPrivate::calculateSceneScalingFactors() +{ + // Calculate scene scaling and translation factors + m_rowWidth = ((m_sampleCount.x() + 1) * m_barSpacing.x()) / 2.0f; + m_columnDepth = ((m_sampleCount.y() + 1) * m_barSpacing.y()) / 2.0f; + m_maxDimension = (m_rowWidth > m_columnDepth) ? m_rowWidth : m_columnDepth; + m_scaleX = m_barThickness.x() / m_sampleCount.x() * (maxSceneSize / m_maxDimension); + m_scaleZ = m_barThickness.y() / m_sampleCount.x() * (maxSceneSize / m_maxDimension); + m_sceneScale = (m_scaleX < m_scaleZ) ? m_scaleX : m_scaleZ; + float minThickness = (m_barThickness.x() < m_barThickness.y()) ? m_barThickness.x() : m_barThickness.y(); + m_sceneScale = m_sceneScale / minThickness; + m_scaleFactorX = m_sampleCount.x() * (m_maxDimension / maxSceneSize); + m_scaleFactorZ = m_sampleCount.x() * (m_maxDimension / maxSceneSize); + qDebug() << "m_scaleX" << m_scaleX << "m_scaleFactorX" << m_scaleFactorX; + qDebug() << "m_scaleZ" << m_scaleZ << "m_scaleFactorZ" << m_scaleFactorZ; + qDebug() << "m_rowWidth:" << m_rowWidth << "m_columnDepth:" << m_columnDepth << "m_maxDimension:" << m_maxDimension; + qDebug() << m_rowWidth * m_sceneScale << m_columnDepth * m_sceneScale; +} + +QTCOMMERCIALDATAVIS3D_END_NAMESPACE diff --git a/src/datavis3d/engine/q3dbars.h b/src/datavis3d/engine/q3dbars.h new file mode 100644 index 00000000..c67d0ee9 --- /dev/null +++ b/src/datavis3d/engine/q3dbars.h @@ -0,0 +1,60 @@ +#ifndef Q3DBARS_H +#define Q3DBARS_H + +#include "qdatavis3dglobal.h" +#include "q3dwindow.h" + +class QOpenGLShaderProgram; + +QTCOMMERCIALDATAVIS3D_BEGIN_NAMESPACE + +class Q3DBarsPrivate; + +class QTCOMMERCIALDATAVIS3D_EXPORT Q3DBars : public Q3DWindow +{ + Q_OBJECT +public: + enum BarStyle { + Bars = 0, + Pyramids, + Cones, + Cylinders, + Apes // TODO: remove; inserted now just for fun + }; + +public: + explicit Q3DBars(); + ~Q3DBars(); + + void initialize(); + void render(); + + void addDataSet(QVector data); + // bar thickness, spacing between bars, and is spacing relative to thickness or absolute + // y -component sets the thickness/spacing of z -direction + // With relative 0.0f means side-to-side, 1.0f = one thickness in between + void setBarSpecs(QPointF thickness = QPointF(1.0f, 1.0f) + , QPointF spacing = QPointF(1.0f, 1.0f) + , bool relative = true); + // bar type; bars (=cubes), pyramids, cones, cylinders, etc. + void setBarType(BarStyle style, bool smooth = false); + // override bar type with own mesh + void setMeshFileName(const QString &objFileName); + // how many samples per row and column + void setupSampleSpace(QPoint sampleCount); + +protected: + void mousePressEvent(QMouseEvent *event); + void mouseReleaseEvent(QMouseEvent *event); + void mouseMoveEvent(QMouseEvent *event); + void wheelEvent(QWheelEvent *event); + void resizeEvent(QResizeEvent *event); + +private: + QScopedPointer d_ptr; + Q_DISABLE_COPY(Q3DBars) +}; + +QTCOMMERCIALDATAVIS3D_END_NAMESPACE + +#endif diff --git a/src/datavis3d/engine/q3dbars_p.h b/src/datavis3d/engine/q3dbars_p.h new file mode 100644 index 00000000..b72e2ed3 --- /dev/null +++ b/src/datavis3d/engine/q3dbars_p.h @@ -0,0 +1,73 @@ +#ifndef Q3DBARS_p_H +#define Q3DBARS_p_H + +#include "qdatavis3dglobal.h" + +class QOpenGLShaderProgram; +class QPoint; +class QPointF; + +QTCOMMERCIALDATAVIS3D_BEGIN_NAMESPACE + +class Q3DBars; + +class Q3DBarsPrivate +{ +public: + Q3DBarsPrivate(Q3DBars *q); + ~Q3DBarsPrivate(); + + void loadBarMesh(); + void loadBackgroundMesh(); + void initShaders(QString vertexShader, QString fragmentShader); + void calculateSceneScalingFactors(); + + GLuint m_positionAttr; + GLuint m_uvAttr; + GLuint m_normalAttr; + GLuint m_colorUniform; + GLuint m_viewMatrixUniform; + GLuint m_modelMatrixUniform; + GLuint m_invTransModelMatrixUniform; + GLuint m_mvpMatrixUniform; + GLuint m_lightPositionUniform; + GLuint m_lightStrengthUniform; + + GLuint m_vertexbuffer; + GLuint m_uvbuffer; + GLuint m_normalbuffer; + GLuint m_elementbuffer; + GLuint m_vertexbufferBackground; + GLuint m_uvbufferBackground; + GLuint m_normalbufferBackground; + GLuint m_elementbufferBackground; + + Q3DBars *q_ptr; + + QOpenGLShaderProgram *m_program; + QPoint m_sampleCount; + QString m_objFile; + int m_vertexCount; + int m_indexCount; + int m_indexCountBackground; + bool m_mousePressed; + QPoint m_mousePos; + int m_zoomLevel; + QPointF m_barThickness; + QPointF m_barSpacing; + bool m_meshDataLoaded; + bool m_background; + QVector> m_dataSet; + float m_rowWidth; + float m_columnDepth; + float m_maxDimension; + float m_scaleX; + float m_scaleZ; + float m_scaleFactorX; + float m_scaleFactorZ; + float m_sceneScale; +}; + +QTCOMMERCIALDATAVIS3D_END_NAMESPACE + +#endif diff --git a/src/datavis3d/engine/q3dwindow.cpp b/src/datavis3d/engine/q3dwindow.cpp new file mode 100644 index 00000000..0ca1bad6 --- /dev/null +++ b/src/datavis3d/engine/q3dwindow.cpp @@ -0,0 +1,184 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the documentation 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 Digia Plc 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$ +** +****************************************************************************/ + +#include "q3dwindow.h" +#include "q3dwindow_p.h" + +#include + +#include +#include +#include + +#include + +QTCOMMERCIALDATAVIS3D_BEGIN_NAMESPACE + +Q3DWindow::Q3DWindow(QWindow *parent) + : QWindow(parent) + , d_ptr(new Q3DWindowPrivate(this)) +{ + setSurfaceType(QWindow::OpenGLSurface); + QSurfaceFormat surfaceFormat; + //surfaceFormat.setDepthBufferSize(16000000); + surfaceFormat.setSamples(4); + surfaceFormat.setMajorVersion(2); + surfaceFormat.setMinorVersion(1); + surfaceFormat.setSwapBehavior(QSurfaceFormat::DoubleBuffer); + //surfaceFormat.setRenderableType(QSurfaceFormat::OpenGLES); // OpenGL crashes + setFormat(surfaceFormat); + qDebug() << "OpenGL version" << format().majorVersion() << format().minorVersion(); + qDebug() << "OpenGL renderer" << format().renderableType(); + qDebug() << "OpenGL swapBehavior" << format().swapBehavior(); +} + +Q3DWindow::~Q3DWindow() +{ +} + +void Q3DWindow::render(QPainter *painter) +{ + Q_UNUSED(painter); +} + +void Q3DWindow::initialize() +{ +} + +void Q3DWindow::render() +{ +// if (!d_ptr->m_device) +// d_ptr->m_device = new QOpenGLPaintDevice; + +// d_ptr->m_device->setSize(size()); + +// QPainter painter(d_ptr->m_device); +// render(&painter); +} + +void Q3DWindow::renderLater() +{ + if (!d_ptr->m_update_pending) { + d_ptr->m_update_pending = true; + QCoreApplication::postEvent(this, new QEvent(QEvent::UpdateRequest)); + } +} + +bool Q3DWindow::event(QEvent *event) +{ + switch (event->type()) { + case QEvent::UpdateRequest: + renderNow(); + return true; + default: + return QWindow::event(event); + } +} + +void Q3DWindow::exposeEvent(QExposeEvent *event) +{ + Q_UNUSED(event); + + if (isExposed()) + renderNow(); +} + +void Q3DWindow::resizeEvent(QResizeEvent *event) +{ + Q_UNUSED(event); + + if (isExposed()) + renderNow(); +} + +void Q3DWindow::renderNow() +{ + if (!isExposed()) + return; + + d_ptr->m_update_pending = false; + + bool needsInitialize = false; + + if (!d_ptr->m_context) { + d_ptr->m_context = new QOpenGLContext(this); + d_ptr->m_context->setFormat(requestedFormat()); + d_ptr->m_context->create(); + + needsInitialize = true; + } + + d_ptr->m_context->makeCurrent(this); + + if (needsInitialize) { + initializeOpenGLFunctions(); + initialize(); + } + + render(); + + d_ptr->m_context->swapBuffers(this); + + if (d_ptr->m_animating) + renderLater(); +} + +void Q3DWindow::setAnimating(bool animating) +{ + d_ptr->m_animating = animating; + + if (animating) + renderLater(); +} + +Q3DWindowPrivate::Q3DWindowPrivate(Q3DWindow *q) + : q_ptr(q) + , m_update_pending(false) + , m_animating(true) + , m_context(0) + , m_device(0) +{ +} + +Q3DWindowPrivate::~Q3DWindowPrivate() +{ +} + +QTCOMMERCIALDATAVIS3D_END_NAMESPACE diff --git a/src/datavis3d/engine/q3dwindow.h b/src/datavis3d/engine/q3dwindow.h new file mode 100644 index 00000000..e8bb7032 --- /dev/null +++ b/src/datavis3d/engine/q3dwindow.h @@ -0,0 +1,95 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the QtXmlPatterns module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, 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, Digia gives you certain additional +** rights. These rights are described in the Digia 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. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. + +#ifndef Q3DWINDOW_H +#define Q3DWINDOW_H + +#include "qdatavis3dglobal.h" +#include "q3dwindow_p.h" + +#include +#include + +class QPainter; + +QTCOMMERCIALDATAVIS3D_BEGIN_NAMESPACE + +class Q3DWindow : public QWindow, protected QOpenGLFunctions +{ + Q_OBJECT + public: + explicit Q3DWindow(QWindow *parent = 0); + ~Q3DWindow(); + + virtual void render(QPainter *painter); + virtual void render(); + + virtual void initialize(); + + void setAnimating(bool animating); + + public slots: + void renderLater(); + void renderNow(); + + protected: + bool event(QEvent *event); + + void exposeEvent(QExposeEvent *event); + void resizeEvent(QResizeEvent *event); + + private: + QScopedPointer d_ptr; +}; + +QTCOMMERCIALDATAVIS3D_END_NAMESPACE + +#endif diff --git a/src/datavis3d/engine/q3dwindow_p.h b/src/datavis3d/engine/q3dwindow_p.h new file mode 100644 index 00000000..0aa58e7d --- /dev/null +++ b/src/datavis3d/engine/q3dwindow_p.h @@ -0,0 +1,82 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the QtXmlPatterns module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, 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, Digia gives you certain additional +** rights. These rights are described in the Digia 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. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. + +#ifndef Q3DWINDOW_p_H +#define Q3DWINDOW_p_H + +#include "qdatavis3dglobal.h" + +class QOpenGLContext; +class QOpenGLPaintDevice; + +QTCOMMERCIALDATAVIS3D_BEGIN_NAMESPACE + +class Q3DWindow; + +class Q3DWindowPrivate +{ + public: + Q3DWindowPrivate(Q3DWindow *q); + ~Q3DWindowPrivate(); + + public: + Q3DWindow *q_ptr; + + bool m_update_pending; + bool m_animating; + + QOpenGLContext *m_context; + QOpenGLPaintDevice *m_device; +}; + +QTCOMMERCIALDATAVIS3D_END_NAMESPACE + +#endif diff --git a/src/datavis3d/engine/shaders/fragmentShader b/src/datavis3d/engine/shaders/fragmentShader new file mode 100644 index 00000000..365f653e --- /dev/null +++ b/src/datavis3d/engine/shaders/fragmentShader @@ -0,0 +1,30 @@ +varying highp vec2 UV; +varying highp vec3 position_wrld; +varying highp vec3 normal_cmr; +varying highp vec3 eyeDirection_cmr; +varying highp vec3 lightDirection_cmr; +uniform highp vec3 lightPosition_wrld; +uniform highp vec3 color_mdl; +uniform highp float lightStrength; +void main() { + highp vec3 materialDiffuseColor = color_mdl; + highp vec3 materialAmbientColor = vec3(0.5, 0.5, 0.5) * materialDiffuseColor; + highp vec3 materialSpecularColor = vec3(1.0, 1.0, 1.0); + highp float distance = length(lightPosition_wrld - position_wrld); + highp vec3 n = normalize(normal_cmr); + highp vec3 l = normalize(lightDirection_cmr); + highp float cosTheta = dot(n, l); + if (cosTheta < 0.0) { cosTheta = 0.0; } + if (cosTheta > 1.0) { cosTheta = 1.0; } + highp vec3 E = normalize(eyeDirection_cmr); + highp vec3 R = reflect(-l, n); + highp float cosAlpha = dot(E, R); + if (cosAlpha < 0.0) { cosAlpha = 0.0; } + if (cosAlpha > 1.0) { cosAlpha = 1.0; } + gl_FragColor.rgb = //color_mdl + color_mdl * vec3(cosTheta * cosTheta) / (distance * distance) + vec3(cosAlpha * cosAlpha * cosAlpha * cosAlpha * cosAlpha * cosAlpha * cosAlpha * cosAlpha) / (distance * distance); + materialAmbientColor + + materialDiffuseColor * lightStrength * (cosTheta * cosTheta) / distance + + materialSpecularColor * lightStrength * (cosAlpha * cosAlpha * cosAlpha * cosAlpha * cosAlpha * cosAlpha * cosAlpha * cosAlpha * cosAlpha * cosAlpha) / distance;//(distance * distance); + gl_FragColor.a = 1.0; +} + diff --git a/src/datavis3d/engine/shaders/fragmentShaderAmbient b/src/datavis3d/engine/shaders/fragmentShaderAmbient new file mode 100644 index 00000000..7614570e --- /dev/null +++ b/src/datavis3d/engine/shaders/fragmentShaderAmbient @@ -0,0 +1,31 @@ +varying highp vec2 UV; +varying highp vec3 position_wrld; +varying highp vec3 normal_cmr; +varying highp vec3 eyeDirection_cmr; +varying highp vec3 lightDirection_cmr; +uniform highp vec3 lightPosition_wrld; +uniform highp vec3 color_mdl; +void main() { + highp vec3 lightColor = vec3(1.0, 1.0, 1.0); + highp float lightPower = 10.0; + highp vec3 materialAmbientColor = vec3(0.5, 0.5, 0.5) * color_mdl; + //highp vec3 materialDiffuseColor = vec3(0.1, 0.1, 0.1) * color_mdl; + highp vec3 materialSpecularColor = vec3(0.3, 0.3, 0.3) * color_mdl; + highp float distance = length(lightPosition_wrld - position_wrld); + highp vec3 n = normalize(normal_cmr); + highp vec3 l = normalize(lightDirection_cmr); + highp float cosTheta = dot(n, l); + if (cosTheta < 0.0) { cosTheta = 0.0; } + if (cosTheta > 1.0) { cosTheta = 1.0; } + highp vec3 E = normalize(eyeDirection_cmr); + highp vec3 R = reflect(-l, n); + highp float cosAlpha = dot(E, R); + if (cosAlpha < 0.0) { cosAlpha = 0.0; } + if (cosAlpha > 1.0) { cosAlpha = 1.0; } + gl_FragColor.rgb = + materialAmbientColor + + //materialDiffuseColor * lightColor * lightPower * cosTheta / (distance * distance) + + materialSpecularColor * lightColor * lightPower * (cosAlpha * cosAlpha * cosAlpha * cosAlpha * cosAlpha) / (distance * distance); + gl_FragColor.a = 1.0; +} + diff --git a/src/datavis3d/engine/shaders/vertexShader b/src/datavis3d/engine/shaders/vertexShader new file mode 100644 index 00000000..19f9d617 --- /dev/null +++ b/src/datavis3d/engine/shaders/vertexShader @@ -0,0 +1,25 @@ +attribute highp vec3 vertexPosition_mdl; +attribute highp vec2 vertexUV; +attribute highp vec3 vertexNormal_mdl; +uniform highp mat4 MVP; +uniform highp mat4 V; +uniform highp mat4 M; +uniform highp mat4 itM; +uniform highp vec3 lightPosition_wrld; +varying highp vec2 UV; +varying highp vec3 position_wrld; +varying highp vec3 normal_cmr; +varying highp vec3 eyeDirection_cmr; +varying highp vec3 lightDirection_cmr; +varying highp vec2 coords_mdl; +void main() { + gl_Position = MVP * vec4(vertexPosition_mdl, 1.0); + coords_mdl = vertexPosition_mdl.xy; + position_wrld = (M * vec4(vertexPosition_mdl, 1.0)).xyz; + vec3 vertexPosition_cmr = (V * M * vec4(vertexPosition_mdl, 1.0)).xyz; + eyeDirection_cmr = vec3(0.0, 0.0, 0.0) - vertexPosition_cmr; + vec3 lightPosition_cmr = (V * vec4(lightPosition_wrld, 1.0)).xyz; + lightDirection_cmr = lightPosition_cmr + eyeDirection_cmr; + normal_cmr = (V * itM * vec4(vertexNormal_mdl, 0.0)).xyz; // Use modelMatrix's transposed inverse, as it's scaled + UV = vertexUV; +} diff --git a/src/datavis3d/global/global.pri b/src/datavis3d/global/global.pri new file mode 100644 index 00000000..56cb9f8f --- /dev/null +++ b/src/datavis3d/global/global.pri @@ -0,0 +1,5 @@ +INCLUDEPATH += $$PWD +VPATH += $$PWD +HEADERS += \ + global/qdatavis3dglobal.h \ + global/qdatavis3namespace.h diff --git a/src/datavis3d/global/qdatavis3dglobal.h b/src/datavis3d/global/qdatavis3dglobal.h new file mode 100644 index 00000000..1a8bebc1 --- /dev/null +++ b/src/datavis3d/global/qdatavis3dglobal.h @@ -0,0 +1,88 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the Qt Commercial Charts Add-on. +** +** $QT_BEGIN_LICENSE$ +** Licensees holding valid Qt Commercial licenses may use this file in +** accordance with the Qt Commercial License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QVIS3DGLOBAL_H +#define QVIS3DGLOBAL_H + +#include + +#define QTCOMMERCIALDATAVIS3D_VERSION_STR "1.2.0" +/* + QTCOMMERCIALDATAVIS3D_VERSION is (major << 16) + (minor << 8) + patch. +*/ +#define QTCOMMERCIALDATAVIS3D_VERSION 0x010200 +/* + can be used like #if (QTCOMMERCIALDATAVIS3D_VERSION >= QTCOMMERCIALDATAVIS3D_VERSION_CHECK(1, 1, 0)) +*/ +#define QTCOMMERCIALDATAVIS3D_VERSION_CHECK(major, minor, patch) ((major<<16)|(minor<<8)|(patch)) + +#if defined(QTCOMMERCIALDATAVIS3D_LIBRARY) +# define QTCOMMERCIALDATAVIS3D_EXPORT Q_DECL_EXPORT +#else +# define QTCOMMERCIALDATAVIS3D_EXPORT Q_DECL_IMPORT +#endif + +#if defined(BUILD_PRIVATE_UNIT_TESTS) && defined(QTCOMMERCIALDATAVIS3D_LIBRARY) +# define QTCOMMERCIALDATAVIS3D_AUTOTEST_EXPORT Q_DECL_EXPORT +#elif defined(BUILD_PRIVATE_UNIT_TESTS) && !defined(QTCOMMERCIALDATAVIS3D_LIBRARY) +# define QTCOMMERCIALDATAVIS3D_AUTOTEST_EXPORT Q_DECL_IMPORT +#else +# define QTCOMMERCIALDATAVIS3D_AUTOTEST_EXPORT +#endif + +#ifdef QTCOMMERCIALDATAVIS3D_STATICLIB +# undef QTCOMMERCIALDATAVIS3D_EXPORT +# undef QTCOMMERCIALDATAVIS3D_AUTOTEST_EXPORT +# define QTCOMMERCIALDATAVIS3D_EXPORT +# define QTCOMMERCIALDATAVIS3D_AUTOTEST_EXPORT +#endif + +#define QTCOMMERCIALDATAVIS3D_NAMESPACE QtDataVis3D + +#ifdef QTCOMMERCIALDATAVIS3D_NAMESPACE +# define QTCOMMERCIALDATAVIS3D_BEGIN_NAMESPACE namespace QTCOMMERCIALDATAVIS3D_NAMESPACE { +# define QTCOMMERCIALDATAVIS3D_END_NAMESPACE } +# define QTCOMMERCIALDATAVIS3D_USE_NAMESPACE using namespace QTCOMMERCIALDATAVIS3D_NAMESPACE; +#else +# define QTCOMMERCIALDATAVIS3D_BEGIN_NAMESPACE +# define QTCOMMERCIALDATAVIS3D_END_NAMESPACE +# define QTCOMMERCIALDATAVIS3D_USE_NAMESPACE +#endif + +#if defined(DEVELOPMENT_BUILD) && !defined(QT_NO_DEBUG) +#include +#include + +#define CHART_DEBUG chartDebug(3,__LINE__,__FILE__,__FUNCTION__) + +static inline QDebug chartDebug(int numargs,...) +{ + va_list valist; + va_start(valist, numargs); + //for( int i = 0 ; i < numargs; i++ ) + int line = va_arg(valist, int); + char *file = va_arg(valist, char *); + char *function = va_arg(valist, char *); + va_end(valist); + return qDebug() << QString().append(function).append("(").append(file).append(":%1)").arg(line); +} +#endif + +#endif // QVIS3DGLOBAL_H diff --git a/src/datavis3d/global/qdatavis3namespace.h b/src/datavis3d/global/qdatavis3namespace.h new file mode 100644 index 00000000..2e908cc0 --- /dev/null +++ b/src/datavis3d/global/qdatavis3namespace.h @@ -0,0 +1,145 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the Qt3D module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, 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, Digia gives you certain additional +** rights. These rights are described in the Digia 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. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QVIS3DNAMESPACE_H +#define QVIS3DNAMESPACE_H + +#include + +namespace QVis3D +{ +// enum VertexAttribute { +// Position, +// Normal, +// Color, +// TextureCoord0, +// TextureCoord1, +// TextureCoord2, +// CustomVertex0, +// CustomVertex1, +// UserVertex +// }; + +// enum Face +// { +// FrontFaces = 0x0404, // GL_FRONT +// BackFaces = 0x0405, // GL_BACK +// AllFaces = 0x0408 // GL_FRONT_AND_BACK +// }; + +// enum DrawingMode +// { +// Points = 0x0000, // GL_POINTS +// Lines = 0x0001, // GL_LINES +// LineLoop = 0x0002, // GL_LINE_LOOP +// LineStrip = 0x0003, // GL_LINE_STRIP +// Triangles = 0x0004, // GL_TRIANGLES +// TriangleStrip = 0x0005, // GL_TRIANGLE_STRIP +// TriangleFan = 0x0006, // GL_TRIANGLE_FAN +// LinesAdjacency = 0x000A, // GL_LINES_ADJACENCY +// LineStripAdjacency = 0x000B, // GL_LINE_STRIP_ADJACENCY +// TrianglesAdjacency = 0x000C, // GL_TRIANGLES_ADJACENCY +// TriangleStripAdjacency = 0x000D // GL_TRIANGLE_STRIP_ADJACENCY +// }; + +// enum StandardEffect +// { +// FlatColor, +// FlatPerVertexColor, +// FlatReplaceTexture2D, +// FlatDecalTexture2D, +// LitMaterial, +// LitDecalTexture2D, +// LitModulateTexture2D +// }; + +// enum TextureWrap +// { +// Repeat = 0x2901, // GL_REPEAT +// ClampToEdge = 0x812F // GL_CLAMP_TO_EDGE +// }; + +// enum Eye +// { +// NoEye, +// LeftEye, +// RightEye +// }; + +// enum Smoothing +// { +// NoSmoothing, +// Smooth, +// Faceted +// }; + +// enum Mouse3DKeys +// { +// Key_Fit = 0x01200002, +// Key_TopView = 0x01200003, +// Key_LeftView = 0x01200004, +// Key_RightView = 0x01200005, +// Key_FrontView = 0x01200006, +// Key_BottomView = 0x01200007, +// Key_BackView = 0x01200008, +// Key_RotateCW90 = 0x01200009, +// Key_RotateCCW90 = 0x0120000a, +// Key_ISO1 = 0x0120000b, +// Key_ISO2 = 0x0120000c, +// Key_Button1 = 0x0120000d, +// Key_Button2 = 0x0120000e, +// Key_Button3 = 0x0120000f, +// Key_Button4 = 0x01200010, +// Key_Button5 = 0x01200011, +// Key_Button6 = 0x01200012, +// Key_Button7 = 0x01200013, +// Key_Button8 = 0x01200014, +// Key_Button9 = 0x01200015, +// Key_Button10 = 0x01200016, +// Key_Rotations = 0x0120001b, +// Key_Translations = 0x0120001c, +// Key_DominantAxis = 0x0120001d, +// Key_IncreaseSensitivity = 0x0120001e, +// Key_DecreaseSensitivity = 0x0120001f +// }; +}; + +#endif diff --git a/src/datavis3d/utils/camerahelper.cpp b/src/datavis3d/utils/camerahelper.cpp new file mode 100644 index 00000000..be71d127 --- /dev/null +++ b/src/datavis3d/utils/camerahelper.cpp @@ -0,0 +1,103 @@ +#include "camerahelper_p.h" + +#include +#include + +QTCOMMERCIALDATAVIS3D_BEGIN_NAMESPACE + +// Initial camera position +QVector3D m_position = QVector3D(0, 0.25, 3); +QVector3D m_target = QVector3D(0, 0, 0); +QVector3D m_up = QVector3D(0, 1, 0); + +QPoint m_previousMousePos(0, 0); + +float m_xRotation = 0; +float m_yRotation = 0; +float m_defaultXRotation = 0; +float m_defaultYRotation = 0; + +float m_pi = 3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679f; +float m_rotationSpeed = 100; + +// FUNCTIONS +void CameraHelper::setRotationSpeed(int speed) +{ + // increase for faster rotation + m_rotationSpeed = speed; +} + +void CameraHelper::setCameraRotation(QPointF rotation) +{ + m_xRotation = rotation.x(); + m_defaultXRotation = m_xRotation; + m_yRotation = rotation.y(); + m_defaultYRotation = m_yRotation; +} + +void CameraHelper::setDefaultCameraOrientation(QVector3D defaultPosition + , QVector3D defaultTarget + , QVector3D defaultUp) +{ + m_position = defaultPosition; + m_target = defaultTarget; + m_up = defaultUp; +} + +QMatrix4x4 CameraHelper::calculateViewMatrix(QPoint mousePos, int zoom, int screenWidth, int screenHeight) +{ + QMatrix4x4 viewMatrix; + + // Calculate mouse movement since last frame + float mouseMoveX = float(m_previousMousePos.x() - mousePos.x()) + / (screenWidth / m_rotationSpeed); + float mouseMoveY = float(m_previousMousePos.y() - mousePos.y()) + / (screenHeight / m_rotationSpeed); + // Apply to rotations + m_xRotation -= mouseMoveX; + m_yRotation -= mouseMoveY; + // Reset at 360 in x and limit to 0...90 in y + if (fabs(m_xRotation) >= 360) + m_xRotation = 0; + if (m_yRotation >= 90) { + m_yRotation = 90; + } + else if (m_yRotation <= 0) { + m_yRotation = 0; + } + + // Apply to view matrix + viewMatrix.lookAt( + m_position // Camera is here + , m_target // and looks here + , m_up // Head is up (set to 0,-1,0 to look upside-down) + ); + // Apply rotations + // Handle x and z rotation when y -angle is other than 0 + viewMatrix.rotate(m_xRotation, 0, cos(m_yRotation*m_pi/180), sin(m_yRotation*m_pi/180)); + // y rotation is always "clean" + viewMatrix.rotate(m_yRotation, 1.0f, 0, 0); + // handle zoom by scaling + viewMatrix.scale((float)zoom / 100.0f); + //qDebug() << m_xRotation << m_yRotation; + + //qDebug() << "sin(m_yRotation)" << sin(m_yRotation*m_pi/180); + //qDebug() << "asin(m_yRotation)" << asin(m_yRotation*m_pi/180); + //qDebug() << "cos(m_yRotation)" << cos(m_yRotation*m_pi/180); + //qDebug() << "tan(m_yRotation)" << tan(m_yRotation*m_pi/180); + + m_previousMousePos = mousePos; + return viewMatrix; +} + +void CameraHelper::updateMousePos(QPoint mousePos) +{ + m_previousMousePos = mousePos; + // if mouse position is set to (0, 0), reset rotations + if (QPoint(0, 0) == mousePos) { + m_xRotation = m_defaultXRotation; + m_yRotation = m_defaultYRotation; + } +} + +QTCOMMERCIALDATAVIS3D_END_NAMESPACE diff --git a/src/datavis3d/utils/camerahelper_p.h b/src/datavis3d/utils/camerahelper_p.h new file mode 100644 index 00000000..340eb982 --- /dev/null +++ b/src/datavis3d/utils/camerahelper_p.h @@ -0,0 +1,31 @@ +#ifndef CAMERAPOSITIONER_P_H +#define CAMERAPOSITIONER_P_H + +#include "qdatavis3dglobal.h" + +class QMatrix4x4; +class QVector3D; +class QPoint; +class QPointF; + +QTCOMMERCIALDATAVIS3D_BEGIN_NAMESPACE + +class CameraHelper +{ +public: + // How fast camera rotates when mouse is dragged. Default is 100. + static void setRotationSpeed(int speed); + // Set camera rotation in degrees + static void setCameraRotation(QPointF rotation); + // Set default camera orientation. Position's x and y should be 0. + static void setDefaultCameraOrientation(QVector3D defaultPosition + , QVector3D defaultTarget + , QVector3D defaultUp); + static QMatrix4x4 calculateViewMatrix(QPoint mousePos, int zoom + , int screenWidth, int screenHeight); + static void updateMousePos(QPoint mousePos); +}; + +QTCOMMERCIALDATAVIS3D_END_NAMESPACE + +#endif diff --git a/src/datavis3d/utils/meshloader.cpp b/src/datavis3d/utils/meshloader.cpp new file mode 100644 index 00000000..b94c5a46 --- /dev/null +++ b/src/datavis3d/utils/meshloader.cpp @@ -0,0 +1,107 @@ +#include "meshloader_p.h" + +#include +#include +#include +#include +#include + +#include + +QTCOMMERCIALDATAVIS3D_BEGIN_NAMESPACE + +QString slashTag = QStringLiteral("/"); + +bool MeshLoader::loadOBJ(QString path, + QVector &out_vertices, + QVector &out_uvs, + QVector &out_normals) +{ + qDebug() << "Loading OBJ file" << path; + + QVector vertexIndices, uvIndices, normalIndices; + QVector temp_vertices; + QVector temp_uvs; + QVector temp_normals; + + QFile file(path); + if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { + qWarning("Cannot open the file"); + return false; + } + + QTextStream textIn(&file); + while (!textIn.atEnd()) { + QString line = textIn.readLine(); + QStringList lineContents = line.split(QStringLiteral(" ")); + if (!lineContents.at(0).compare(QStringLiteral("v"))) { + QVector3D vertex; + vertex.setX(lineContents.at(1).toFloat()); + vertex.setY(lineContents.at(2).toFloat()); + vertex.setZ(lineContents.at(3).toFloat()); + temp_vertices.append(vertex); + } + else if (!lineContents.at(0).compare(QStringLiteral("vt"))) { + QVector2D uv; + uv.setX(lineContents.at(1).toFloat()); + uv.setY(lineContents.at(2).toFloat()); // invert this if using DDS textures + temp_uvs.append(uv); + } + else if (!lineContents.at(0).compare(QStringLiteral("vn"))) { + QVector3D normal; + normal.setX(lineContents.at(1).toFloat()); + normal.setY(lineContents.at(2).toFloat()); + normal.setZ(lineContents.at(3).toFloat()); + temp_normals.append(normal); + } + else if (!lineContents.at(0).compare(QStringLiteral("f"))) { + unsigned int vertexIndex[3], uvIndex[3], normalIndex[3]; + QStringList set1 = lineContents.at(1).split(slashTag); + QStringList set2 = lineContents.at(2).split(slashTag); + QStringList set3 = lineContents.at(3).split(slashTag); + vertexIndex[0] = set1.at(0).toUInt(); + vertexIndex[1] = set2.at(0).toUInt(); + vertexIndex[2] = set3.at(0).toUInt(); + uvIndex[0] = set1.at(1).toUInt(); + uvIndex[1] = set2.at(1).toUInt(); + uvIndex[2] = set3.at(1).toUInt(); + normalIndex[0] = set1.at(2).toUInt(); + normalIndex[1] = set2.at(2).toUInt(); + normalIndex[2] = set3.at(2).toUInt(); + vertexIndices.append(vertexIndex[0]); + vertexIndices.append(vertexIndex[1]); + vertexIndices.append(vertexIndex[2]); + uvIndices.append(uvIndex[0]); + uvIndices.append(uvIndex[1]); + uvIndices.append(uvIndex[2]); + normalIndices.append(normalIndex[0]); + normalIndices.append(normalIndex[1]); + normalIndices.append(normalIndex[2]); + } + else { + //qWarning("Line did not contain usable data"); + } + } + + // For each vertex of each triangle + for (int i = 0; i < vertexIndices.size(); i++) { + // Get the indices of its attributes + unsigned int vertexIndex = vertexIndices[i]; + unsigned int uvIndex = uvIndices[i]; + unsigned int normalIndex = normalIndices[i]; + + // Get the attributes thanks to the index + QVector3D vertex = temp_vertices[vertexIndex - 1]; + QVector2D uv = temp_uvs[uvIndex - 1]; + QVector3D normal = temp_normals[normalIndex - 1]; + + // Put the attributes in buffers + out_vertices.append(vertex); + out_uvs.append(uv); + out_normals.append(normal); + } + + return true; +} + +QTCOMMERCIALDATAVIS3D_END_NAMESPACE diff --git a/src/datavis3d/utils/meshloader_p.h b/src/datavis3d/utils/meshloader_p.h new file mode 100644 index 00000000..4507ceb7 --- /dev/null +++ b/src/datavis3d/utils/meshloader_p.h @@ -0,0 +1,23 @@ +#ifndef MESHLOADER_P_H +#define MESHLOADER_P_H + +#include "qdatavis3dglobal.h" + +class QVector2D; +class QVector3D; + +QTCOMMERCIALDATAVIS3D_BEGIN_NAMESPACE + +class MeshLoader +{ +public: + static bool loadOBJ(QString path, + QVector &out_vertices, + QVector &out_uvs, + QVector &out_normals); + // TODO: add loaders for other formats? +}; + +QTCOMMERCIALDATAVIS3D_END_NAMESPACE + +#endif diff --git a/src/datavis3d/utils/utils.pri b/src/datavis3d/utils/utils.pri new file mode 100644 index 00000000..c62340d1 --- /dev/null +++ b/src/datavis3d/utils/utils.pri @@ -0,0 +1,7 @@ +HEADERS += $$PWD/meshloader_p.h \ + $$PWD/vertexindexer_p.h \ + $$PWD/camerahelper_p.h + +SOURCES += $$PWD/meshloader.cpp \ + $$PWD/vertexindexer.cpp \ + $$PWD/camerahelper.cpp diff --git a/src/datavis3d/utils/vertexindexer.cpp b/src/datavis3d/utils/vertexindexer.cpp new file mode 100644 index 00000000..c54cbf8a --- /dev/null +++ b/src/datavis3d/utils/vertexindexer.cpp @@ -0,0 +1,137 @@ +#include "vertexindexer_p.h" + +#include // for memcmp + +#include + +QTCOMMERCIALDATAVIS3D_BEGIN_NAMESPACE + +int unique_vertices = 0; + +// Returns true if v1 can be considered equal to v2 +bool VertexIndexer::is_near(float v1, float v2) +{ + return fabs(v1 - v2) < 0.01f; +} + +// Searches through all already-exported vertices +// for a similar one. +// Similar = same position + same UVs + same normal +bool VertexIndexer::getSimilarVertexIndex(QVector3D &in_vertex + , QVector2D &in_uv + , QVector3D &in_normal + , QVector &out_vertices + , QVector &out_uvs + , QVector &out_normals + , unsigned short &result) +{ + // Lame linear search + for (int i = 0; i < out_vertices.size(); i++) { + if (is_near(in_vertex.x() , out_vertices[i].x()) + && is_near(in_vertex.y() , out_vertices[i].y()) + && is_near(in_vertex.z() , out_vertices[i].z()) + && is_near(in_uv.x() , out_uvs [i].x()) + && is_near(in_uv.y() , out_uvs [i].y()) + && is_near(in_normal.x() , out_normals [i].x()) + && is_near(in_normal.y() , out_normals [i].y()) + && is_near(in_normal.z() , out_normals [i].z())) { + result = i; + return true; + } + } + // No other vertex could be used instead. + // Looks like we'll have to add it to the VBO. + return false; +} + +bool VertexIndexer::getSimilarVertexIndex_fast(PackedVertex &packed + , QMap &VertexToOutIndex + , unsigned short &result) +{ + QMap::iterator it = VertexToOutIndex.find(packed); + if (it == VertexToOutIndex.end()) { + return false; + } + else { + result = it.value(); + return true; + } +} + +void VertexIndexer::indexVBO(QVector &in_vertices + , QVector &in_uvs + , QVector &in_normals + , QVector &out_indices + , QVector &out_vertices + , QVector &out_uvs + , QVector &out_normals) +{ + unique_vertices = 0; + QMap VertexToOutIndex; + + // For each input vertex + for (int i = 0; i < in_vertices.size(); i++) { + PackedVertex packed = {in_vertices[i], in_uvs[i], in_normals[i]}; + + // Try to find a similar vertex in out_XXXX + unsigned short index; + bool found = getSimilarVertexIndex_fast(packed, VertexToOutIndex, index); + + if (found) { // A similar vertex is already in the VBO, use it instead ! + out_indices.append(index); + } + else { // If not, it needs to be added in the output data. + unique_vertices++; + out_vertices.append(in_vertices[i]); + out_uvs.append(in_uvs[i]); + out_normals.append(in_normals[i]); + unsigned short newindex = (unsigned short)out_vertices.size() - 1; + out_indices.append(newindex); + VertexToOutIndex[packed] = newindex; + } + } + qDebug() << "unique vertices" << unique_vertices; +} + +void VertexIndexer::indexVBO_TBN(QVector &in_vertices + , QVector &in_uvs + , QVector &in_normals + , QVector &in_tangents + , QVector &in_bitangents + , QVector &out_indices + , QVector &out_vertices + , QVector &out_uvs + , QVector &out_normals + , QVector &out_tangents + , QVector &out_bitangents) +{ + unique_vertices = 0; + // For each input vertex + for (int i = 0; i < in_vertices.size(); i++) { + + // Try to find a similar vertex in out_XXXX + unsigned short index; + bool found = getSimilarVertexIndex(in_vertices[i], in_uvs[i], in_normals[i] + , out_vertices, out_uvs, out_normals, index); + + if (found) { // A similar vertex is already in the VBO, use it instead ! + out_indices.append(index); + + // Average the tangents and the bitangents + out_tangents[index] += in_tangents[i]; + out_bitangents[index] += in_bitangents[i]; + } + else { // If not, it needs to be added in the output data. + unique_vertices++; + out_vertices.append(in_vertices[i]); + out_uvs.append(in_uvs[i]); + out_normals.append(in_normals[i]); + out_tangents.append(in_tangents[i]); + out_bitangents.append(in_bitangents[i]); + out_indices.append((unsigned short)out_vertices.size() - 1); + } + } + qDebug() << "unique vertices" << unique_vertices; +} + +QTCOMMERCIALDATAVIS3D_END_NAMESPACE diff --git a/src/datavis3d/utils/vertexindexer_p.h b/src/datavis3d/utils/vertexindexer_p.h new file mode 100644 index 00000000..f784756e --- /dev/null +++ b/src/datavis3d/utils/vertexindexer_p.h @@ -0,0 +1,60 @@ +#ifndef VERTEXINDEXER_P_H +#define VERTEXINDEXER_P_H + +#include "qdatavis3dglobal.h" + +#include +#include +#include + +QTCOMMERCIALDATAVIS3D_BEGIN_NAMESPACE + +class VertexIndexer +{ + public: + struct PackedVertex { + QVector3D position; + QVector2D uv; + QVector3D normal; + bool operator<(const PackedVertex that) const { + return memcmp((void*)this, (void*)&that, sizeof(PackedVertex)) > 0; + } + }; + + static void indexVBO(QVector &in_vertices + , QVector &in_uvs + , QVector &in_normals + , QVector &out_indices + , QVector &out_vertices + , QVector &out_uvs + , QVector &out_normals); + + static void indexVBO_TBN(QVector &in_vertices + , QVector &in_uvs + , QVector &in_normals + , QVector &in_tangents + , QVector &in_bitangents + , QVector &out_indices + , QVector &out_vertices + , QVector &out_uvs + , QVector &out_normals + , QVector &out_tangents + , QVector &out_bitangents); + + private: + static bool is_near(float v1, float v2); + static bool getSimilarVertexIndex(QVector3D &in_vertex + , QVector2D &in_uv + , QVector3D &in_normal + , QVector &out_vertices + , QVector &out_uvs + , QVector &out_normals + , unsigned short &result); + static bool getSimilarVertexIndex_fast(PackedVertex &packed + , QMap &VertexToOutIndex + , unsigned short &result); +}; + +QTCOMMERCIALDATAVIS3D_END_NAMESPACE + +#endif diff --git a/src/src.pro b/src/src.pro new file mode 100644 index 00000000..b9b7be46 --- /dev/null +++ b/src/src.pro @@ -0,0 +1,2 @@ +TEMPLATE = subdirs +SUBDIRS += datavis3d diff --git a/sync.profile b/sync.profile new file mode 100644 index 00000000..0f8f0093 --- /dev/null +++ b/sync.profile @@ -0,0 +1,15 @@ +%modules = ( # path to module name map + "QtDataVis3D" => "$basedir/src/datavis3d", +); +%moduleheaders = ( # restrict the module headers to those found in relative path +); +# Module dependencies. +# Every module that is required to build this module should have one entry. +# Each of the module version specifiers can take one of the following values: +# - A specific Git revision. +# - any git symbolic ref resolvable from the module's repository (e.g. "refs/heads/master" to track master branch) +# +%dependencies = ( + "qtbase" => "refs/heads/stable", + "qtdeclarative" => "refs/heads/stable", +); -- cgit v1.2.3