diff options
author | Samuel Rødal <srodal@gmail.com> | 2008-11-30 23:45:13 +0100 |
---|---|---|
committer | Samuel Rødal <srodal@gmail.com> | 2008-11-30 23:45:13 +0100 |
commit | e6e8c04114373e9ecacfdccd496e7503ed1046a1 (patch) | |
tree | 54ba54b39f2ba3339cd0252b9b3aec5e2d529ed3 | |
parent | 8b9e2e330c6d5d97b4170703e543adbd555e8be7 (diff) |
Add OpenGL model renderer and improve update/visibility handling for increased performance.
-rw-r--r-- | README | 1 | ||||
-rw-r--r-- | entity.cpp | 6 | ||||
-rw-r--r-- | main.cpp | 2 | ||||
-rw-r--r-- | matrix4x4.cpp | 82 | ||||
-rw-r--r-- | matrix4x4.h | 23 | ||||
-rw-r--r-- | mazescene.cpp | 117 | ||||
-rw-r--r-- | mazescene.h | 16 | ||||
-rw-r--r-- | model.cpp | 167 | ||||
-rw-r--r-- | model.h | 60 | ||||
-rw-r--r-- | modelitem.cpp | 215 | ||||
-rw-r--r-- | modelitem.h | 89 | ||||
-rw-r--r-- | point3d.h | 122 | ||||
-rw-r--r-- | qt.obj | 2456 | ||||
-rw-r--r-- | qt3d.pro | 6 |
14 files changed, 3269 insertions, 93 deletions
@@ -1 +1,2 @@ All the textures used are from the Wolfenstein 3D Texture Library, http://www.areyep.com/RIPandMCS-TextureLibrary.html +2008-11-30 @@ -135,9 +135,3 @@ void Entity::updateImage() else setImage(images.at(m_angleIndex)); } - -void MazeScene::addEntity(Entity *entity) -{ - addItem(entity); - m_entities << entity; -} @@ -14,7 +14,7 @@ int main(int argc, char **argv) "# #" "# #### #" "& # #" - "# @@ &" + "* @@ &" "# @@ # #" "# #" "###&%-##" diff --git a/matrix4x4.cpp b/matrix4x4.cpp index 66ecb81..ad1da29 100644 --- a/matrix4x4.cpp +++ b/matrix4x4.cpp @@ -2,7 +2,7 @@ Matrix4x4::Matrix4x4() { - qreal identity[] = + float identity[] = { 1, 0, 0, 0, 0, 1, 0, 0, @@ -13,12 +13,21 @@ Matrix4x4::Matrix4x4() setData(identity); } -Matrix4x4::Matrix4x4(qreal *data) +Matrix4x4::Matrix4x4(float *data) { setData(data); } -void Matrix4x4::setData(qreal *data) +Matrix4x4 Matrix4x4::orderSwapped() const +{ + float data[16]; + for (int i = 0; i < 4; ++i) + for (int j = 0; j < 4; ++j) + data[4*i + j] = m[4*j + i]; + return Matrix4x4(data); +} + +void Matrix4x4::setData(float *data) { for (int i = 0; i < 16; ++i) m[i] = data[i]; @@ -42,14 +51,24 @@ Matrix4x4 Matrix4x4::operator*(const Matrix4x4 &other) const return Matrix4x4(*this) *= other; } -Matrix4x4 Matrix4x4::fromRotation(qreal angle, Qt::Axis axis) +Point3d Matrix4x4::operator*(const Point3d &p) const +{ + qreal x = m[0] * p.x + m[4] * p.y + m[8] * p.z + m[12]; + qreal y = m[1] * p.x + m[5] * p.y + m[9] * p.z + m[13]; + qreal z = m[2] * p.x + m[6] * p.y + m[10] * p.z + m[14]; + qreal w = m[3] * p.x + m[7] * p.y + m[11] * p.z + m[15]; + + return Point3d(x / w, y / w, z / w); +} + +Matrix4x4 Matrix4x4::fromRotation(float angle, Qt::Axis axis) { QTransform rot; rot.rotate(angle); switch (axis) { case Qt::XAxis: { - qreal data[] = + float data[] = { 1, 0, 0, 0, 0, rot.m11(), rot.m12(), 0, @@ -60,7 +79,7 @@ Matrix4x4 Matrix4x4::fromRotation(qreal angle, Qt::Axis axis) } case Qt::YAxis: { - qreal data[] = + float data[] = { rot.m11(), 0, rot.m12(), 0, 0, 1, 0, 0, @@ -71,7 +90,7 @@ Matrix4x4 Matrix4x4::fromRotation(qreal angle, Qt::Axis axis) } case Qt::ZAxis: { - qreal data[] = + float data[] = { rot.m11(), rot.m12(), 0, 0, rot.m21(), rot.m22(), 0, 0, @@ -85,9 +104,9 @@ Matrix4x4 Matrix4x4::fromRotation(qreal angle, Qt::Axis axis) } } -Matrix4x4 Matrix4x4::fromTranslation(qreal dx, qreal dy, qreal dz) +Matrix4x4 Matrix4x4::fromTranslation(float dx, float dy, float dz) { - qreal data[] = + float data[] = { 1, 0, 0, 0, 0, 1, 0, 0, @@ -97,9 +116,9 @@ Matrix4x4 Matrix4x4::fromTranslation(qreal dx, qreal dy, qreal dz) return Matrix4x4(data); } -Matrix4x4 Matrix4x4::fromScale(qreal sx, qreal sy, qreal sz) +Matrix4x4 Matrix4x4::fromScale(float sx, float sy, float sz) { - qreal data[] = + float data[] = { sx, 0, 0, 0, 0, sy, 0, 0, @@ -109,26 +128,20 @@ Matrix4x4 Matrix4x4::fromScale(qreal sx, qreal sy, qreal sz) return Matrix4x4(data); } -Matrix4x4 Matrix4x4::fromProjection(qreal fov) +Matrix4x4 Matrix4x4::fromProjection(float fov) { - qreal data[] = - { - 1, 0, 0, 0, - 0, 1, 0, 0, - 0, 0, 1, fov, - 0, 0, 0, 0 - }; - return Matrix4x4(data); -} + float zNear = 0.001; + float zFar = 1000; -Matrix4x4 convert2dTo3d() -{ - qreal data[] = + float m33 = (zNear + zFar) / (zNear - zFar); + float m34 = (2 * zNear * zFar) / (zNear - zFar); + + float data[] = { - 1, 0, 0, 0, - 0, 1, 0, 0, - 0, 0, 0, 0, - 0, 0, 0, 1 + fov, 0, 0, 0, + 0, fov, 0, 0, + 0, 0, m33, -1, + 0, 0, m34, 0 }; return Matrix4x4(data); } @@ -139,3 +152,16 @@ QTransform Matrix4x4::toQTransform() const m[4], m[5], m[7], m[12], m[13], m[15]); } + +Matrix4x4 Matrix4x4::fromQTransform(const QTransform &transform) +{ + float data[] = + { + transform.m11(), transform.m12(), 0, transform.m13(), + transform.m21(), transform.m22(), 0, transform.m23(), + 0, 0, 1, 0, + transform.m31(), transform.m32(), 0, transform.m33() + }; + + return Matrix4x4(data); +} diff --git a/matrix4x4.h b/matrix4x4.h index 588bb40..11ddfb2 100644 --- a/matrix4x4.h +++ b/matrix4x4.h @@ -4,27 +4,34 @@ #include <qnamespace.h> #include <QTransform> +#include "point3d.h" + class Matrix4x4 { public: Matrix4x4(); - Matrix4x4(qreal *data); + Matrix4x4(float *data); Matrix4x4 &operator*=(const Matrix4x4 &other); Matrix4x4 operator*(const Matrix4x4 &other) const; - static Matrix4x4 fromRotation(qreal angle, Qt::Axis axis); - static Matrix4x4 fromTranslation(qreal dx, qreal dy, qreal dz); - static Matrix4x4 fromScale(qreal sx, qreal sy, qreal sz); - static Matrix4x4 fromProjection(qreal fov); - static Matrix4x4 convert2dTo3d(); + Point3d operator*(const Point3d &point) const; + + static Matrix4x4 fromRotation(float angle, Qt::Axis axis); + static Matrix4x4 fromTranslation(float dx, float dy, float dz); + static Matrix4x4 fromScale(float sx, float sy, float sz); + static Matrix4x4 fromProjection(float fov); QTransform toQTransform() const; + static Matrix4x4 fromQTransform(const QTransform &transform); + + void setData(float *data); + const float *data() const { return m; } - void setData(qreal *data); + Matrix4x4 orderSwapped() const; private: - qreal m[16]; + float m[16]; }; #endif diff --git a/mazescene.cpp b/mazescene.cpp index 6a516c5..08b4d37 100644 --- a/mazescene.cpp +++ b/mazescene.cpp @@ -14,9 +14,9 @@ #include <qmath.h> #include <qdebug.h> -#include "matrix4x4.h" #include "scriptwidget.h" #include "entity.h" +#include "modelitem.h" #ifdef USE_PHONON #include "mediaplayer/mediaplayer.h" @@ -83,6 +83,7 @@ MazeScene::MazeScene(const QVector<Light> &lights, const char *map, int width, i types['?'] = 5; types['!'] = 6; types['='] = 7; + types['*'] = 8; int type; for (int y = 0; y < height; ++y) { @@ -125,6 +126,12 @@ MazeScene::MazeScene(const QVector<Light> &lights, const char *map, int width, i updateTransforms(); } +void MazeScene::addProjectedItem(ProjectedItem *item) +{ + addItem(item); + m_projectedItems << item; +} + void MazeScene::addWall(const QPointF &a, const QPointF &b, int type) { WallItem *item = new WallItem(this, a, b, type); @@ -135,7 +142,7 @@ void MazeScene::addWall(const QPointF &a, const QPointF &b, int type) } #endif item->setVisible(false); - addItem(item); + addProjectedItem(item); m_walls << item; if (type == -1) @@ -157,6 +164,16 @@ static inline QTransform rotatingTransform(qreal angle) return transform; } +Matrix4x4 Camera::matrix(qreal time) const +{ + Matrix4x4 m; + m *= Matrix4x4::fromTranslation(-m_pos.x(), 0.04 * qSin(10 * time) + 0.1, -m_pos.y()); + m *= Matrix4x4::fromRotation(m_yaw + 180, Qt::YAxis); + m *= Matrix4x4::fromScale(-1, 1, 1); + m *= Matrix4x4::fromRotation(m_pitch, Qt::XAxis); + return m; +} + void MazeScene::drawBackground(QPainter *painter, const QRectF &) { static QImage floor = QImage("floor.png").convertToFormat(QImage::Format_RGB32); @@ -172,15 +189,10 @@ void MazeScene::drawBackground(QPainter *painter, const QRectF &) const QRectF r(1, 1, m_width-2, m_height-2); - Matrix4x4 m; - m *= Matrix4x4::fromRotation(m_camera.yaw(), Qt::YAxis); - m *= Matrix4x4::fromRotation(m_camera.pitch(), Qt::XAxis); - m *= Matrix4x4::fromProjection(0.5); - - qreal heightOffset = 0.04 * qSin(0.01 * m_walkTime) + 0.1; + Matrix4x4 m = m_camera.matrix(0.001 * m_walkTime) * Matrix4x4::fromProjection(1); Matrix4x4 floorMatrix = Matrix4x4::fromRotation(90, Qt::XAxis); - floorMatrix *= Matrix4x4::fromTranslation(-m_camera.pos().x(), heightOffset + 0.5, -m_camera.pos().y()); + floorMatrix *= Matrix4x4::fromTranslation(0, 0.5, 0); floorMatrix *= m; painter->save(); @@ -189,7 +201,7 @@ void MazeScene::drawBackground(QPainter *painter, const QRectF &) painter->restore(); Matrix4x4 ceilingMatrix = Matrix4x4::fromRotation(90, Qt::XAxis); - ceilingMatrix *= Matrix4x4::fromTranslation(-m_camera.pos().x(), heightOffset - 0.5, -m_camera.pos().y()); + ceilingMatrix *= Matrix4x4::fromTranslation(0, -0.5, 0); ceilingMatrix *= m; painter->save(); @@ -198,6 +210,12 @@ void MazeScene::drawBackground(QPainter *painter, const QRectF &) painter->restore(); } +void MazeScene::addEntity(Entity *entity) +{ + addProjectedItem(entity); + m_entities << entity; +} + ProjectedItem::ProjectedItem(const QRectF &bounds, bool shadow) : m_bounds(bounds) , m_shadowItem(0) @@ -217,6 +235,16 @@ void ProjectedItem::setPosition(const QPointF &a, const QPointF &b) m_b = b; } +class ResizingView : public QGraphicsView +{ +protected: + void resizeEvent(QResizeEvent *event) { + if (scene()) + scene()->setSceneRect(QRect(QPoint(0, 0), event->size())); + QGraphicsView::resizeEvent(event); + } +}; + WallItem::WallItem(MazeScene *scene, const QPointF &a, const QPointF &b, int type) : ProjectedItem(QRectF(-0.5, -0.5, 1.0, 1.0)) , m_type(type) @@ -252,9 +280,6 @@ WallItem::WallItem(MazeScene *scene, const QPointF &a, const QPointF &b, int typ m_scale = 0.8; - QPalette palette; - palette.setColor(QPalette::Window, QColor(Qt::transparent)); - m_childItem = 0; QWidget *childWidget = 0; if (type == 3 && a.y() == b.y()) { @@ -263,7 +288,6 @@ WallItem::WallItem(MazeScene *scene, const QPointF &a, const QPointF &b, int typ QObject::connect(button, SIGNAL(clicked()), scene, SLOT(toggleDoors())); widget->setLayout(new QVBoxLayout); widget->layout()->addWidget(button); - widget->setPalette(palette); childWidget = widget; m_scale = 0.3; } else if (type == 4) { @@ -282,6 +306,11 @@ WallItem::WallItem(MazeScene *scene, const QPointF &a, const QPointF &b, int typ childWidget = new MediaPlayer(QString()); m_scale = 0.6; #endif + } else if (type == 8) { + ModelItem *dialog = new ModelItem; + childWidget = dialog; + scene->addProjectedItem(dialog); + m_scale = 0.5; } else if (type == 0 || type == 2) { static int index; if (index == 0) { @@ -291,7 +320,6 @@ WallItem::WallItem(MazeScene *scene, const QPointF &a, const QPointF &b, int typ QObject::connect(checkBox, SIGNAL(toggled(bool)), scene, SLOT(toggleRenderer()), Qt::QueuedConnection); widget->setLayout(new QVBoxLayout); widget->layout()->addWidget(checkBox); - widget->setPalette(palette); childWidget = widget; m_scale = 0.2; } else if (!(index % 7)) { @@ -333,30 +361,30 @@ bool MazeScene::eventFilter(QObject *target, QEvent *event) foreach (WallItem *item, m_walls) { QGraphicsProxyWidget *proxy = item->childItem(); - if (!proxy) - continue; - if (proxy->widget() == widget) { - QRectF rect = proxy->boundingRect(); - - QPointF center = rect.center(); - - qreal scale = item->childScale(); - scale = qMin(scale / rect.width(), scale / rect.height()); - proxy->resetMatrix(); - proxy->translate(0, -0.05); - proxy->scale(scale, scale); - proxy->translate(-center.x(), -center.y()); - - // refresh cache size - proxy->setCacheMode(QGraphicsItem::NoCache); - proxy->setCacheMode(QGraphicsItem::ItemCoordinateCache); - break; - } + if (proxy && proxy->widget() == widget) + item->childResized(); } return false; } +void WallItem::childResized() +{ + QRectF rect = m_childItem->boundingRect(); + + QPointF center = rect.center(); + + qreal scale = qMin(m_scale / rect.width(), m_scale / rect.height()); + m_childItem->resetMatrix(); + m_childItem->translate(0, -0.05); + m_childItem->scale(scale, scale); + m_childItem->translate(-center.x(), -center.y()); + + // refresh cache size + m_childItem->setCacheMode(QGraphicsItem::NoCache); + m_childItem->setCacheMode(QGraphicsItem::ItemCoordinateCache); +} + void ProjectedItem::setConstantLight(qreal light) { if (m_shadowItem) @@ -434,18 +462,19 @@ void ProjectedItem::updateTransform(const Camera &camera, qreal time) QPointF cb = rotation.map(m_b); if (ca.y() <= 0 && cb.y() <= 0) { - setVisible(false); + // hide the item by placing it far outside the scene + // we could use setVisible() but that causes unnecessary + // update to cahced items + QTransform transform; + transform.translate(-1000, -1000); + setTransform(transform); return; } - const qreal fov = 0.5; - Matrix4x4 m; m *= Matrix4x4::fromRotation(-QLineF(m_b, m_a).angle(), Qt::YAxis); - m *= Matrix4x4::fromTranslation(center.x() - camera.pos().x(), 0.04 * qSin(10 * time) + 0.1, center.y() - camera.pos().y()); - m *= Matrix4x4::fromRotation(camera.yaw(), Qt::YAxis); - m *= Matrix4x4::fromRotation(camera.pitch(), Qt::XAxis); - m *= Matrix4x4::fromProjection(fov); + m *= Matrix4x4::fromTranslation(center.x(), 0, center.y()); + m *= camera.matrix(time) * Matrix4x4::fromProjection(1); qreal zm = QLineF(camera.pos(), center).length(); @@ -569,8 +598,10 @@ bool MazeScene::tryMove(QPointF &pos, const QPointF &delta, Entity *entity) cons void MazeScene::updateTransforms() { - foreach (WallItem *item, m_walls) { + foreach (ProjectedItem *item, m_projectedItems) item->updateTransform(m_camera, m_walkTime * 0.001); + + foreach (WallItem *item, m_walls) { if (item->isVisible()) { // embed recursive scene if (QGraphicsProxyWidget *child = item->childItem()) { @@ -591,8 +622,6 @@ void MazeScene::updateTransforms() } } } - foreach (Entity *entity, m_entities) - entity->updateTransform(m_camera, m_walkTime * 0.001); #ifdef USE_PHONON if (m_player) { diff --git a/mazescene.h b/mazescene.h index 7925a9f..2b95873 100644 --- a/mazescene.h +++ b/mazescene.h @@ -11,6 +11,8 @@ #include <QTime> #include <QTimeLine> +#include "matrix4x4.h" + class MazeScene; class MediaPlayer; class Entity; @@ -40,6 +42,8 @@ public: void setPitch(qreal pitch) { m_pitch = pitch; } void setPos(const QPointF &pos) { m_pos = pos; } + Matrix4x4 matrix(qreal time) const; + private: qreal m_yaw; qreal m_pitch; @@ -70,10 +74,11 @@ public: QPointF a() const { return m_a; } QPointF b() const { return m_b; } + virtual void updateTransform(const Camera &camera, qreal time); + QRectF boundingRect() const; void setPosition(const QPointF &a, const QPointF &b); - void updateTransform(const Camera &camera, qreal time); void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); void setAnimationTime(qreal time); void setImage(const QImage &image); @@ -99,13 +104,10 @@ public: return m_childItem; } - qreal childScale() const - { - return m_scale; - } - int type() const { return m_type; } + void childResized(); + private: QGraphicsProxyWidget *m_childItem; int m_type; @@ -118,6 +120,7 @@ class MazeScene : public QGraphicsScene public: MazeScene(const QVector<Light> &lights, const char *map, int width, int height); + void addProjectedItem(ProjectedItem *item); void addEntity(Entity *entity); void addWall(const QPointF &a, const QPointF &b, int type); void drawBackground(QPainter *painter, const QRectF &rect); @@ -151,6 +154,7 @@ private: QVector<QPushButton *> m_buttons; QVector<Entity *> m_entities; QVector<Light> m_lights; + QVector<ProjectedItem *> m_projectedItems; Camera m_camera; diff --git a/model.cpp b/model.cpp new file mode 100644 index 0000000..9831138 --- /dev/null +++ b/model.cpp @@ -0,0 +1,167 @@ +/**************************************************************************** +** +** Copyright (C) 2008-2008 Trolltech ASA. All rights reserved. +** +** This file is part of the Graphics Dojo project on Trolltech Labs. +** +** This file may be used under the terms of the GNU General Public +** License version 2.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 GNU +** General Public Licensing requirements will be met: +** http://www.trolltech.com/products/qt/opensource.html +** +** If you are unsure which license is appropriate for your use, please +** review the following information: +** http://www.trolltech.com/products/qt/licensing.html or contact the +** sales department at sales@trolltech.com. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +****************************************************************************/ +#include "model.h" + +#include <QFile> +#include <QTextStream> +#include <QVarLengthArray> + +#include <QtOpenGL> + +Model::Model(const QString &filePath) + : m_fileName(QFileInfo(filePath).fileName()) +{ + QFile file(filePath); + if (!file.open(QIODevice::ReadOnly)) + return; + + Point3d boundsMin( 1e9, 1e9, 1e9); + Point3d boundsMax(-1e9,-1e9,-1e9); + + QTextStream in(&file); + while (!in.atEnd()) { + QString input = in.readLine(); + if (input.isEmpty() || input[0] == '#') + continue; + + QTextStream ts(&input); + QString id; + ts >> id; + if (id == "v") { + Point3d p; + for (int i = 0; i < 3; ++i) { + ts >> p[i]; + boundsMin[i] = qMin(boundsMin[i], p[i]); + boundsMax[i] = qMax(boundsMax[i], p[i]); + } + m_points << p; + } else if (id == "f" || id == "fo") { + QVarLengthArray<int, 4> p; + + while (!ts.atEnd()) { + QString vertex; + ts >> vertex; + const int vertexIndex = vertex.split('/').value(0).toInt(); + if (vertexIndex) + p.append(vertexIndex > 0 ? vertexIndex - 1 : m_points.size() + vertexIndex); + } + + for (int i = 0; i < p.size(); ++i) { + const int edgeA = p[i]; + const int edgeB = p[(i + 1) % p.size()]; + + if (edgeA < edgeB) + m_edgeIndices << edgeA << edgeB; + } + + for (int i = 0; i < 3; ++i) + m_pointIndices << p[i]; + + if (p.size() == 4) + for (int i = 0; i < 3; ++i) + m_pointIndices << p[(i + 2) % 4]; + } + } + + const Point3d bounds = boundsMax - boundsMin; + const qreal scale = 1 / qMax(bounds.x / 1, qMax(bounds.y, bounds.z / 1)); + for (int i = 0; i < m_points.size(); ++i) + m_points[i] = (m_points[i] - (boundsMin + bounds * 0.5)) * scale; + + m_size = bounds * scale; + + m_normals.resize(m_points.size()); + for (int i = 0; i < m_pointIndices.size(); i += 3) { + const Point3d a = m_points.at(m_pointIndices.at(i)); + const Point3d b = m_points.at(m_pointIndices.at(i+1)); + const Point3d c = m_points.at(m_pointIndices.at(i+2)); + + const Point3d normal = cross(b - a, c - a).normalize(); + + for (int j = 0; j < 3; ++j) + m_normals[m_pointIndices.at(i + j)] += normal; + } + + for (int i = 0; i < m_normals.size(); ++i) + m_normals[i] = m_normals[i].normalize(); +} + +Point3d Model::size() const +{ + return m_size; +} + +void Model::render(bool wireframe, bool normals) const +{ + glEnable(GL_DEPTH_TEST); + glEnableClientState(GL_VERTEX_ARRAY); + glDepthFunc(GL_GEQUAL); + glDepthMask(true); + glDisable(GL_TEXTURE_1D); + glDisable(GL_TEXTURE_2D); + if (wireframe) { + glVertexPointer(3, GL_FLOAT, 0, (float *)m_points.data()); + glDrawElements(GL_LINES, m_edgeIndices.size(), GL_UNSIGNED_INT, m_edgeIndices.data()); + } else { + glEnable(GL_LIGHTING); + glEnable(GL_LIGHT0); + glEnable(GL_COLOR_MATERIAL); + glShadeModel(GL_SMOOTH); + + glEnableClientState(GL_NORMAL_ARRAY); + glVertexPointer(3, GL_FLOAT, 0, (float *)m_points.data()); + glNormalPointer(GL_FLOAT, 0, (float *)m_normals.data()); + glDrawElements(GL_TRIANGLES, m_pointIndices.size(), GL_UNSIGNED_INT, m_pointIndices.data()); + + glDisableClientState(GL_NORMAL_ARRAY); + glDisable(GL_COLOR_MATERIAL); + glDisable(GL_LIGHT0); + glDisable(GL_LIGHTING); + } + + if (normals) { + QVector<Point3d> normals; + for (int i = 0; i < m_normals.size(); ++i) + normals << m_points.at(i) << (m_points.at(i) + m_normals.at(i) * 0.02f); + glVertexPointer(3, GL_FLOAT, 0, (float *)normals.data()); + glDrawArrays(GL_LINES, 0, normals.size()); + } + glDisableClientState(GL_VERTEX_ARRAY); + glDisable(GL_DEPTH_TEST); +} + +void Model::render(QPainter *painter, const Matrix4x4 &matrix, bool normals) const +{ + QVector<QLineF> lines; + for (int i = 0; i < m_edgeIndices.size(); i += 2) + lines << QLineF((matrix * m_points.at(m_edgeIndices.at(i))).toQPoint(), + (matrix * m_points.at(m_edgeIndices.at(i+1))).toQPoint()); + + if (normals) { + for (int i = 0; i < m_normals.size(); ++i) + lines << QLineF((matrix * m_points.at(i)).toQPoint(), + (matrix * (m_points.at(i) + m_normals.at(i) * 0.02f)).toQPoint()); + } + + painter->drawLines(lines); +} @@ -0,0 +1,60 @@ +/**************************************************************************** +** +** Copyright (C) 2008-2008 Trolltech ASA. All rights reserved. +** +** This file is part of the Graphics Dojo project on Trolltech Labs. +** +** This file may be used under the terms of the GNU General Public +** License version 2.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 GNU +** General Public Licensing requirements will be met: +** http://www.trolltech.com/products/qt/opensource.html +** +** If you are unsure which license is appropriate for your use, please +** review the following information: +** http://www.trolltech.com/products/qt/licensing.html or contact the +** sales department at sales@trolltech.com. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +****************************************************************************/ +#ifndef MODEL_H +#define MODEL_H + +#include <QPainter> +#include <QString> +#include <QVector> + +#include <math.h> + +#include "point3d.h" +#include "matrix4x4.h" + +class Model +{ +public: + Model() {} + Model(const QString &filePath); + + void render(bool wireframe = false, bool normals = false) const; + void render(QPainter *painter, const Matrix4x4 &matrix, bool normals = false) const; + + QString fileName() const { return m_fileName; } + int faces() const { return m_pointIndices.size() / 3; } + int edges() const { return m_edgeIndices.size() / 2; } + int points() const { return m_points.size(); } + + Point3d size() const; + +private: + QString m_fileName; + QVector<Point3d> m_points; + QVector<Point3d> m_normals; + QVector<int> m_edgeIndices; + QVector<int> m_pointIndices; + Point3d m_size; +}; + +#endif diff --git a/modelitem.cpp b/modelitem.cpp new file mode 100644 index 0000000..7f081e4 --- /dev/null +++ b/modelitem.cpp @@ -0,0 +1,215 @@ +/**************************************************************************** +** +** Copyright (C) 2008-2008 Trolltech ASA. All rights reserved. +** +** This file is part of the Graphics Dojo project on Trolltech Labs. +** +** This file may be used under the terms of the GNU General Public +** License version 2.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 GNU +** General Public Licensing requirements will be met: +** http://www.trolltech.com/products/qt/opensource.html +** +** If you are unsure which license is appropriate for your use, please +** review the following information: +** http://www.trolltech.com/products/qt/licensing.html or contact the +** sales department at sales@trolltech.com. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +****************************************************************************/ +#include "modelitem.h" +#include "model.h" + +#include <QtGui> +#include <QtOpenGL> + +#include "mazescene.h" + +#ifndef GL_MULTISAMPLE +#define GL_MULTISAMPLE 0x809D +#endif + +void ModelItem::updateTransform(const Camera &camera, qreal time) +{ + ProjectedItem::updateTransform(camera, time); + + setTransform(QTransform()); + m_matrix = Matrix4x4::fromTranslation(3, 0, 7) * camera.matrix(time); +} + +QRectF ModelItem::boundingRect() const +{ + return scene()->sceneRect(); +} + +void ModelItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *) +{ + if (!m_model) + return; + + Matrix4x4 projectionMatrix = Matrix4x4::fromProjection(1); + projectionMatrix *= Matrix4x4::fromQTransform(painter->transform()); + + Matrix4x4 modelMatrix; + const int delta = m_time.elapsed() - m_lastTime; + m_rotation += m_angularMomentum * (delta / 1000.0); + m_lastTime += delta; + + Point3d size = m_model->size(); + float extent = qSqrt(2.0); + float scale = 1 / qMax(size.y, qMax(size.x / extent, size.z / extent)); + modelMatrix *= Matrix4x4::fromScale(scale, -scale, scale); + + modelMatrix *= Matrix4x4::fromRotation(m_rotation.z, Qt::ZAxis); + modelMatrix *= Matrix4x4::fromRotation(m_rotation.y, Qt::YAxis); + modelMatrix *= Matrix4x4::fromRotation(m_rotation.x, Qt::XAxis); + + ProjectedItem::update(); + + if (painter->paintEngine()->type() != QPaintEngine::OpenGL) { + m_wireframe->setEnabled(false); + m_wireframe->setChecked(false); + m_wireframeEnabled = false; + painter->setTransform(QTransform()); + painter->setPen(m_modelColor); + m_model->render(painter, modelMatrix * m_matrix * projectionMatrix, m_normalsEnabled); + return; + } + + m_wireframe->setEnabled(true); + + glClearDepth(0); + glClear(GL_DEPTH_BUFFER_BIT); + + glMatrixMode(GL_PROJECTION); + glPushMatrix(); + glLoadIdentity(); + glOrtho(0, painter->device()->width(), painter->device()->height(), 0, -1, 1); + glMultMatrixf(projectionMatrix.data()); + + glMatrixMode(GL_MODELVIEW); + glPushMatrix(); + glLoadMatrixf(m_matrix.data()); + + const float ambient[] = { 0.1, 0.1, 0.1, 1 }; + const float pos[] = { 50, -500, 200 }; + glLightfv(GL_LIGHT0, GL_AMBIENT, ambient); + glLightfv(GL_LIGHT0, GL_POSITION, pos); + + glMultMatrixf(modelMatrix.data()); + + glColor4f(m_modelColor.redF(), m_modelColor.greenF(), m_modelColor.blueF(), 1.0f); + + glEnable(GL_MULTISAMPLE); + m_model->render(m_wireframeEnabled, m_normalsEnabled); + glDisable(GL_MULTISAMPLE); + + glPopMatrix(); + + glMatrixMode(GL_PROJECTION); + glPopMatrix(); +} + + +ModelItem::ModelItem() + : ProjectedItem(QRectF(), false) + , m_wireframeEnabled(false) + , m_normalsEnabled(false) + , m_modelColor(153, 255, 0) + , m_model(0) + , m_lastTime(0) + , m_distance(1.4f) + , m_angularMomentum(0, 40, 0) +{ + QPointF pos(3, 7); + setPosition(pos, pos); + setLayout(new QVBoxLayout); + + m_modelButton = new QPushButton(tr("Load model")); + connect(m_modelButton, SIGNAL(clicked()), this, SLOT(loadModel())); +#ifndef QT_NO_CONCURRENT + connect(&m_modelLoader, SIGNAL(finished()), this, SLOT(modelLoaded())); +#endif + layout()->addWidget(m_modelButton); + + m_wireframe = new QCheckBox(tr("Render as wireframe")); + connect(m_wireframe, SIGNAL(toggled(bool)), this, SLOT(enableWireframe(bool))); + layout()->addWidget(m_wireframe); + + QCheckBox *normals = new QCheckBox(tr("Display normals vectors")); + connect(normals, SIGNAL(toggled(bool)), this, SLOT(enableNormals(bool))); + layout()->addWidget(normals); + + QPushButton *colorButton = new QPushButton(tr("Choose model color")); + connect(colorButton, SIGNAL(clicked()), this, SLOT(setModelColor())); + layout()->addWidget(colorButton); + + loadModel(QLatin1String("qt.obj")); + m_time.start(); +} + +static Model *loadModel(const QString &filePath) +{ + return new Model(filePath); +} + +void ModelItem::loadModel() +{ + loadModel(QFileDialog::getOpenFileName(0, tr("Choose model"), QString(), QLatin1String("*.obj"))); +} + +void ModelItem::loadModel(const QString &filePath) +{ + if (filePath.isEmpty()) + return; + + m_modelButton->setEnabled(false); + QApplication::setOverrideCursor(Qt::BusyCursor); +#ifndef QT_NO_CONCURRENT + m_modelLoader.setFuture(QtConcurrent::run(::loadModel, filePath)); +#else + setModel(::loadModel(filePath)); + modelLoaded(); +#endif +} + +void ModelItem::modelLoaded() +{ +#ifndef QT_NO_CONCURRENT + setModel(m_modelLoader.result()); +#endif + m_modelButton->setEnabled(true); + QApplication::restoreOverrideCursor(); +} + +void ModelItem::setModel(Model *model) +{ + delete m_model; + m_model = model; + + ProjectedItem::update(); +} + +void ModelItem::enableWireframe(bool enabled) +{ + m_wireframeEnabled = enabled; + ProjectedItem::update(); +} + +void ModelItem::enableNormals(bool enabled) +{ + m_normalsEnabled = enabled; + ProjectedItem::update(); +} + +void ModelItem::setModelColor() +{ + const QColor color = QColorDialog::getColor(m_modelColor); + if (color.isValid()) { + m_modelColor = color; + ProjectedItem::update(); + } +} diff --git a/modelitem.h b/modelitem.h new file mode 100644 index 0000000..bd329ad --- /dev/null +++ b/modelitem.h @@ -0,0 +1,89 @@ +/**************************************************************************** +** +** Copyright (C) 2008-2008 Trolltech ASA. All rights reserved. +** +** This file is part of the Graphics Dojo project on Trolltech Labs. +** +** This file may be used under the terms of the GNU General Public +** License version 2.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 GNU +** General Public Licensing requirements will be met: +** http://www.trolltech.com/products/qt/opensource.html +** +** If you are unsure which license is appropriate for your use, please +** review the following information: +** http://www.trolltech.com/products/qt/licensing.html or contact the +** sales department at sales@trolltech.com. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +****************************************************************************/ +#ifndef OPENGLSCENE_H +#define OPENGLSCENE_H + +#include "point3d.h" + +#include <QCheckBox> +#include <QWidget> +#include <QTime> + +#ifndef QT_NO_CONCURRENT +#include <QFutureWatcher> +#endif + +#include "mazescene.h" + +class Model; + +class ModelItem : public QWidget, public ProjectedItem +{ + Q_OBJECT + +public: + ModelItem(); + + void updateTransform(const Camera &camera, qreal time); + + QRectF boundingRect() const; + void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); + +public slots: + void enableWireframe(bool enabled); + void enableNormals(bool enabled); + void setModelColor(); + void loadModel(); + void loadModel(const QString &filePath); + void modelLoaded(); + +private: + void setModel(Model *model); + + bool m_wireframeEnabled; + bool m_normalsEnabled; + bool m_useQPainter; + + QColor m_modelColor; + + Model *m_model; + + QTime m_time; + int m_lastTime; + int m_mouseEventTime; + + float m_distance; + Point3d m_rotation; + Point3d m_angularMomentum; + Point3d m_accumulatedMomentum; + + QWidget *m_modelButton; + QCheckBox *m_wireframe; + +#ifndef QT_NO_CONCURRENT + QFutureWatcher<Model *> m_modelLoader; +#endif + Matrix4x4 m_matrix; +}; + +#endif diff --git a/point3d.h b/point3d.h new file mode 100644 index 0000000..8b79ba4 --- /dev/null +++ b/point3d.h @@ -0,0 +1,122 @@ +/**************************************************************************** +** +** Copyright (C) 2008-2008 Trolltech ASA. All rights reserved. +** +** This file is part of the Graphics Dojo project on Trolltech Labs. +** +** This file may be used under the terms of the GNU General Public +** License version 2.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 GNU +** General Public Licensing requirements will be met: +** http://www.trolltech.com/products/qt/opensource.html +** +** If you are unsure which license is appropriate for your use, please +** review the following information: +** http://www.trolltech.com/products/qt/licensing.html or contact the +** sales department at sales@trolltech.com. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +****************************************************************************/ +#ifndef POINT3D_H +#define POINT3D_H + +#include "math.h" + +#include <qglobal.h> +#include <qpoint.h> + +struct Point3d +{ + float x, y, z; + + Point3d() + : x(0) + , y(0) + , z(0) + { + } + + Point3d(float x_, float y_, float z_) + : x(x_) + , y(y_) + , z(z_) + { + } + + Point3d operator+(const Point3d &p) const + { + return Point3d(*this) += p; + } + + Point3d operator-(const Point3d &p) const + { + return Point3d(*this) -= p; + } + + Point3d operator*(float f) const + { + return Point3d(*this) *= f; + } + + + Point3d &operator+=(const Point3d &p) + { + x += p.x; + y += p.y; + z += p.z; + return *this; + } + + Point3d &operator-=(const Point3d &p) + { + x -= p.x; + y -= p.y; + z -= p.z; + return *this; + } + + Point3d &operator*=(float f) + { + x *= f; + y *= f; + z *= f; + return *this; + } + + Point3d normalize() const + { + float r = 1. / sqrt(x * x + y * y + z * z); + return Point3d(x * r, y * r, z * r); + } + + float &operator[](unsigned int index) { + Q_ASSERT(index < 3); + return (&x)[index]; + } + + const float &operator[](unsigned int index) const { + Q_ASSERT(index < 3); + return (&x)[index]; + } + + QPointF toQPoint() const { + return QPointF(x, y); + } +}; + +inline float dot(const Point3d &a, const Point3d &b) +{ + return a.x * b.x + a.y * b.y + a.z * b.z; +} + +inline Point3d cross(const Point3d &a, const Point3d &b) +{ + return Point3d(a.y * b.z - a.z * b.y, + a.z * b.x - a.x * b.z, + a.x * b.y - a.y * b.x); +} + +#endif @@ -0,0 +1,2456 @@ +v -0.140000 -0.060000 -0.050000 +v -0.060000 -0.140000 -0.050000 +v 0.140000 0.060000 -0.050000 +v 0.060000 0.140000 -0.050000 +v 0.060000 0.140000 0.050000 +v 0.140000 0.060000 0.050000 +v -0.060000 -0.140000 0.050000 +v -0.140000 -0.060000 0.050000 +v 0.000000 -0.080000 -0.050000 +v 0.220000 -0.300000 -0.050000 +v 0.300000 -0.220000 -0.050000 +v 0.080000 -0.000000 -0.050000 +v 0.080000 -0.000000 0.050000 +v 0.300000 -0.220000 0.050000 +v 0.220000 -0.300000 0.050000 +v 0.000000 -0.080000 0.050000 +v 0.009423 -0.299852 -0.050000 +v 0.006282 -0.199901 -0.050000 +v 0.000000 -0.200000 -0.050000 +v 0.000000 -0.300000 -0.050000 +v 0.000000 -0.300000 0.050000 +v 0.000000 -0.200000 0.050000 +v 0.006282 -0.199901 0.050000 +v 0.009423 -0.299852 0.050000 +v 0.018837 -0.299408 -0.050000 +v 0.012558 -0.199605 -0.050000 +v 0.012558 -0.199605 0.050000 +v 0.018837 -0.299408 0.050000 +v 0.028232 -0.298669 -0.050000 +v 0.018822 -0.199112 -0.050000 +v 0.018822 -0.199112 0.050000 +v 0.028232 -0.298669 0.050000 +v 0.037600 -0.297634 -0.050000 +v 0.025067 -0.198423 -0.050000 +v 0.025067 -0.198423 0.050000 +v 0.037600 -0.297634 0.050000 +v 0.046930 -0.296307 -0.050000 +v 0.031287 -0.197538 -0.050000 +v 0.031287 -0.197538 0.050000 +v 0.046930 -0.296307 0.050000 +v 0.056214 -0.294686 -0.050000 +v 0.037476 -0.196457 -0.050000 +v 0.037476 -0.196457 0.050000 +v 0.056214 -0.294686 0.050000 +v 0.065443 -0.292775 -0.050000 +v 0.043629 -0.195183 -0.050000 +v 0.043629 -0.195183 0.050000 +v 0.065443 -0.292775 0.050000 +v 0.074607 -0.290575 -0.050000 +v 0.049738 -0.193717 -0.050000 +v 0.049738 -0.193717 0.050000 +v 0.074607 -0.290575 0.050000 +v 0.083697 -0.288088 -0.050000 +v 0.055798 -0.192059 -0.050000 +v 0.055798 -0.192059 0.050000 +v 0.083697 -0.288088 0.050000 +v 0.092705 -0.285317 -0.050000 +v 0.061803 -0.190211 -0.050000 +v 0.061803 -0.190211 0.050000 +v 0.092705 -0.285317 0.050000 +v 0.101621 -0.282264 -0.050000 +v 0.067748 -0.188176 -0.050000 +v 0.067748 -0.188176 0.050000 +v 0.101621 -0.282264 0.050000 +v 0.110437 -0.278933 -0.050000 +v 0.073625 -0.185955 -0.050000 +v 0.073625 -0.185955 0.050000 +v 0.110437 -0.278933 0.050000 +v 0.119144 -0.275326 -0.050000 +v 0.079430 -0.183551 -0.050000 +v 0.079430 -0.183551 0.050000 +v 0.119144 -0.275326 0.050000 +v 0.127734 -0.271448 -0.050000 +v 0.085156 -0.180965 -0.050000 +v 0.085156 -0.180965 0.050000 +v 0.127734 -0.271448 0.050000 +v 0.136197 -0.267302 -0.050000 +v 0.090798 -0.178201 -0.050000 +v 0.090798 -0.178201 0.050000 +v 0.136197 -0.267302 0.050000 +v 0.144526 -0.262892 -0.050000 +v 0.096351 -0.175261 -0.050000 +v 0.096351 -0.175261 0.050000 +v 0.144526 -0.262892 0.050000 +v 0.152712 -0.258223 -0.050000 +v 0.101808 -0.172148 -0.050000 +v 0.101808 -0.172148 0.050000 +v 0.152712 -0.258223 0.050000 +v 0.160748 -0.253298 -0.050000 +v 0.107165 -0.168866 -0.050000 +v 0.107165 -0.168866 0.050000 +v 0.160748 -0.253298 0.050000 +v 0.168625 -0.248124 -0.050000 +v 0.112417 -0.165416 -0.050000 +v 0.112417 -0.165416 0.050000 +v 0.168625 -0.248124 0.050000 +v 0.176336 -0.242705 -0.050000 +v 0.117557 -0.161803 -0.050000 +v 0.117557 -0.161803 0.050000 +v 0.176336 -0.242705 0.050000 +v 0.183872 -0.237047 -0.050000 +v 0.122581 -0.158031 -0.050000 +v 0.122581 -0.158031 0.050000 +v 0.183872 -0.237047 0.050000 +v 0.191227 -0.231154 -0.050000 +v 0.127485 -0.154103 -0.050000 +v 0.127485 -0.154103 0.050000 +v 0.191227 -0.231154 0.050000 +v 0.198394 -0.225033 -0.050000 +v 0.132262 -0.150022 -0.050000 +v 0.132262 -0.150022 0.050000 +v 0.198394 -0.225033 0.050000 +v 0.205364 -0.218691 -0.050000 +v 0.136909 -0.145794 -0.050000 +v 0.136909 -0.145794 0.050000 +v 0.205364 -0.218691 0.050000 +v 0.212132 -0.212132 -0.050000 +v 0.141421 -0.141421 -0.050000 +v 0.141421 -0.141421 0.050000 +v 0.212132 -0.212132 0.050000 +v 0.218691 -0.205364 -0.050000 +v 0.145794 -0.136909 -0.050000 +v 0.145794 -0.136909 0.050000 +v 0.218691 -0.205364 0.050000 +v 0.225033 -0.198394 -0.050000 +v 0.150022 -0.132262 -0.050000 +v 0.150022 -0.132262 0.050000 +v 0.225033 -0.198394 0.050000 +v 0.231154 -0.191227 -0.050000 +v 0.154103 -0.127485 -0.050000 +v 0.154103 -0.127485 0.050000 +v 0.231154 -0.191227 0.050000 +v 0.237047 -0.183872 -0.050000 +v 0.158031 -0.122581 -0.050000 +v 0.158031 -0.122581 0.050000 +v 0.237047 -0.183872 0.050000 +v 0.242705 -0.176336 -0.050000 +v 0.161803 -0.117557 -0.050000 +v 0.161803 -0.117557 0.050000 +v 0.242705 -0.176336 0.050000 +v 0.248124 -0.168625 -0.050000 +v 0.165416 -0.112417 -0.050000 +v 0.165416 -0.112417 0.050000 +v 0.248124 -0.168625 0.050000 +v 0.253298 -0.160748 -0.050000 +v 0.168866 -0.107165 -0.050000 +v 0.168866 -0.107165 0.050000 +v 0.253298 -0.160748 0.050000 +v 0.258223 -0.152712 -0.050000 +v 0.172148 -0.101808 -0.050000 +v 0.172148 -0.101808 0.050000 +v 0.258223 -0.152712 0.050000 +v 0.262892 -0.144526 -0.050000 +v 0.175261 -0.096351 -0.050000 +v 0.175261 -0.096351 0.050000 +v 0.262892 -0.144526 0.050000 +v 0.267302 -0.136197 -0.050000 +v 0.178201 -0.090798 -0.050000 +v 0.178201 -0.090798 0.050000 +v 0.267302 -0.136197 0.050000 +v 0.271448 -0.127734 -0.050000 +v 0.180965 -0.085156 -0.050000 +v 0.180965 -0.085156 0.050000 +v 0.271448 -0.127734 0.050000 +v 0.275326 -0.119144 -0.050000 +v 0.183551 -0.079430 -0.050000 +v 0.183551 -0.079430 0.050000 +v 0.275326 -0.119144 0.050000 +v 0.278933 -0.110437 -0.050000 +v 0.185955 -0.073625 -0.050000 +v 0.185955 -0.073625 0.050000 +v 0.278933 -0.110437 0.050000 +v 0.282264 -0.101621 -0.050000 +v 0.188176 -0.067748 -0.050000 +v 0.188176 -0.067748 0.050000 +v 0.282264 -0.101621 0.050000 +v 0.285317 -0.092705 -0.050000 +v 0.190211 -0.061803 -0.050000 +v 0.190211 -0.061803 0.050000 +v 0.285317 -0.092705 0.050000 +v 0.288088 -0.083697 -0.050000 +v 0.192059 -0.055798 -0.050000 +v 0.192059 -0.055798 0.050000 +v 0.288088 -0.083697 0.050000 +v 0.290575 -0.074607 -0.050000 +v 0.193717 -0.049738 -0.050000 +v 0.193717 -0.049738 0.050000 +v 0.290575 -0.074607 0.050000 +v 0.292775 -0.065443 -0.050000 +v 0.195183 -0.043629 -0.050000 +v 0.195183 -0.043629 0.050000 +v 0.292775 -0.065443 0.050000 +v 0.294686 -0.056214 -0.050000 +v 0.196457 -0.037476 -0.050000 +v 0.196457 -0.037476 0.050000 +v 0.294686 -0.056214 0.050000 +v 0.296307 -0.046930 -0.050000 +v 0.197538 -0.031287 -0.050000 +v 0.197538 -0.031287 0.050000 +v 0.296307 -0.046930 0.050000 +v 0.297634 -0.037600 -0.050000 +v 0.198423 -0.025067 -0.050000 +v 0.198423 -0.025067 0.050000 +v 0.297634 -0.037600 0.050000 +v 0.298669 -0.028232 -0.050000 +v 0.199112 -0.018822 -0.050000 +v 0.199112 -0.018822 0.050000 +v 0.298669 -0.028232 0.050000 +v 0.299408 -0.018837 -0.050000 +v 0.199605 -0.012558 -0.050000 +v 0.199605 -0.012558 0.050000 +v 0.299408 -0.018837 0.050000 +v 0.299852 -0.009423 -0.050000 +v 0.199901 -0.006282 -0.050000 +v 0.199901 -0.006282 0.050000 +v 0.299852 -0.009423 0.050000 +v 0.300000 -0.000000 -0.050000 +v 0.200000 -0.000000 -0.050000 +v 0.200000 -0.000000 0.050000 +v 0.300000 -0.000000 0.050000 +v 0.299852 0.009423 -0.050000 +v 0.199901 0.006282 -0.050000 +v 0.199901 0.006282 0.050000 +v 0.299852 0.009423 0.050000 +v 0.299408 0.018837 -0.050000 +v 0.199605 0.012558 -0.050000 +v 0.199605 0.012558 0.050000 +v 0.299408 0.018837 0.050000 +v 0.298669 0.028232 -0.050000 +v 0.199112 0.018822 -0.050000 +v 0.199112 0.018822 0.050000 +v 0.298669 0.028232 0.050000 +v 0.297634 0.037600 -0.050000 +v 0.198423 0.025067 -0.050000 +v 0.198423 0.025067 0.050000 +v 0.297634 0.037600 0.050000 +v 0.296307 0.046930 -0.050000 +v 0.197538 0.031287 -0.050000 +v 0.197538 0.031287 0.050000 +v 0.296307 0.046930 0.050000 +v 0.294686 0.056214 -0.050000 +v 0.196457 0.037476 -0.050000 +v 0.196457 0.037476 0.050000 +v 0.294686 0.056214 0.050000 +v 0.292775 0.065443 -0.050000 +v 0.195183 0.043629 -0.050000 +v 0.195183 0.043629 0.050000 +v 0.292775 0.065443 0.050000 +v 0.290575 0.074607 -0.050000 +v 0.193717 0.049738 -0.050000 +v 0.193717 0.049738 0.050000 +v 0.290575 0.074607 0.050000 +v 0.288088 0.083697 -0.050000 +v 0.192059 0.055798 -0.050000 +v 0.192059 0.055798 0.050000 +v 0.288088 0.083697 0.050000 +v 0.285317 0.092705 -0.050000 +v 0.190211 0.061803 -0.050000 +v 0.190211 0.061803 0.050000 +v 0.285317 0.092705 0.050000 +v 0.282264 0.101621 -0.050000 +v 0.188176 0.067748 -0.050000 +v 0.188176 0.067748 0.050000 +v 0.282264 0.101621 0.050000 +v 0.278933 0.110437 -0.050000 +v 0.185955 0.073625 -0.050000 +v 0.185955 0.073625 0.050000 +v 0.278933 0.110437 0.050000 +v 0.275326 0.119144 -0.050000 +v 0.183551 0.079430 -0.050000 +v 0.183551 0.079430 0.050000 +v 0.275326 0.119144 0.050000 +v 0.271448 0.127734 -0.050000 +v 0.180965 0.085156 -0.050000 +v 0.180965 0.085156 0.050000 +v 0.271448 0.127734 0.050000 +v 0.267302 0.136197 -0.050000 +v 0.178201 0.090798 -0.050000 +v 0.178201 0.090798 0.050000 +v 0.267302 0.136197 0.050000 +v 0.262892 0.144526 -0.050000 +v 0.175261 0.096351 -0.050000 +v 0.175261 0.096351 0.050000 +v 0.262892 0.144526 0.050000 +v 0.258223 0.152712 -0.050000 +v 0.172148 0.101808 -0.050000 +v 0.172148 0.101808 0.050000 +v 0.258223 0.152712 0.050000 +v 0.253298 0.160748 -0.050000 +v 0.168866 0.107165 -0.050000 +v 0.168866 0.107165 0.050000 +v 0.253298 0.160748 0.050000 +v 0.248124 0.168625 -0.050000 +v 0.165416 0.112417 -0.050000 +v 0.165416 0.112417 0.050000 +v 0.248124 0.168625 0.050000 +v 0.242705 0.176336 -0.050000 +v 0.161803 0.117557 -0.050000 +v 0.161803 0.117557 0.050000 +v 0.242705 0.176336 0.050000 +v 0.237047 0.183872 -0.050000 +v 0.158031 0.122581 -0.050000 +v 0.158031 0.122581 0.050000 +v 0.237047 0.183872 0.050000 +v 0.231154 0.191227 -0.050000 +v 0.154103 0.127485 -0.050000 +v 0.154103 0.127485 0.050000 +v 0.231154 0.191227 0.050000 +v 0.225033 0.198394 -0.050000 +v 0.150022 0.132262 -0.050000 +v 0.150022 0.132262 0.050000 +v 0.225033 0.198394 0.050000 +v 0.218691 0.205364 -0.050000 +v 0.145794 0.136909 -0.050000 +v 0.145794 0.136909 0.050000 +v 0.218691 0.205364 0.050000 +v 0.212132 0.212132 -0.050000 +v 0.141421 0.141421 -0.050000 +v 0.141421 0.141421 0.050000 +v 0.212132 0.212132 0.050000 +v 0.205364 0.218691 -0.050000 +v 0.136909 0.145794 -0.050000 +v 0.136909 0.145794 0.050000 +v 0.205364 0.218691 0.050000 +v 0.198394 0.225033 -0.050000 +v 0.132262 0.150022 -0.050000 +v 0.132262 0.150022 0.050000 +v 0.198394 0.225033 0.050000 +v 0.191227 0.231154 -0.050000 +v 0.127485 0.154103 -0.050000 +v 0.127485 0.154103 0.050000 +v 0.191227 0.231154 0.050000 +v 0.183872 0.237047 -0.050000 +v 0.122581 0.158031 -0.050000 +v 0.122581 0.158031 0.050000 +v 0.183872 0.237047 0.050000 +v 0.176336 0.242705 -0.050000 +v 0.117557 0.161803 -0.050000 +v 0.117557 0.161803 0.050000 +v 0.176336 0.242705 0.050000 +v 0.168625 0.248124 -0.050000 +v 0.112417 0.165416 -0.050000 +v 0.112417 0.165416 0.050000 +v 0.168625 0.248124 0.050000 +v 0.160748 0.253298 -0.050000 +v 0.107165 0.168866 -0.050000 +v 0.107165 0.168866 0.050000 +v 0.160748 0.253298 0.050000 +v 0.152712 0.258223 -0.050000 +v 0.101808 0.172148 -0.050000 +v 0.101808 0.172148 0.050000 +v 0.152712 0.258223 0.050000 +v 0.144526 0.262892 -0.050000 +v 0.096351 0.175261 -0.050000 +v 0.096351 0.175261 0.050000 +v 0.144526 0.262892 0.050000 +v 0.136197 0.267302 -0.050000 +v 0.090798 0.178201 -0.050000 +v 0.090798 0.178201 0.050000 +v 0.136197 0.267302 0.050000 +v 0.127734 0.271448 -0.050000 +v 0.085156 0.180965 -0.050000 +v 0.085156 0.180965 0.050000 +v 0.127734 0.271448 0.050000 +v 0.119144 0.275326 -0.050000 +v 0.079430 0.183551 -0.050000 +v 0.079430 0.183551 0.050000 +v 0.119144 0.275326 0.050000 +v 0.110437 0.278933 -0.050000 +v 0.073625 0.185955 -0.050000 +v 0.073625 0.185955 0.050000 +v 0.110437 0.278933 0.050000 +v 0.101621 0.282264 -0.050000 +v 0.067748 0.188176 -0.050000 +v 0.067748 0.188176 0.050000 +v 0.101621 0.282264 0.050000 +v 0.092705 0.285317 -0.050000 +v 0.061803 0.190211 -0.050000 +v 0.061803 0.190211 0.050000 +v 0.092705 0.285317 0.050000 +v 0.083697 0.288088 -0.050000 +v 0.055798 0.192059 -0.050000 +v 0.055798 0.192059 0.050000 +v 0.083697 0.288088 0.050000 +v 0.074607 0.290575 -0.050000 +v 0.049738 0.193717 -0.050000 +v 0.049738 0.193717 0.050000 +v 0.074607 0.290575 0.050000 +v 0.065443 0.292775 -0.050000 +v 0.043629 0.195183 -0.050000 +v 0.043629 0.195183 0.050000 +v 0.065443 0.292775 0.050000 +v 0.056214 0.294686 -0.050000 +v 0.037476 0.196457 -0.050000 +v 0.037476 0.196457 0.050000 +v 0.056214 0.294686 0.050000 +v 0.046930 0.296307 -0.050000 +v 0.031287 0.197538 -0.050000 +v 0.031287 0.197538 0.050000 +v 0.046930 0.296307 0.050000 +v 0.037600 0.297634 -0.050000 +v 0.025067 0.198423 -0.050000 +v 0.025067 0.198423 0.050000 +v 0.037600 0.297634 0.050000 +v 0.028232 0.298669 -0.050000 +v 0.018822 0.199112 -0.050000 +v 0.018822 0.199112 0.050000 +v 0.028232 0.298669 0.050000 +v 0.018837 0.299408 -0.050000 +v 0.012558 0.199605 -0.050000 +v 0.012558 0.199605 0.050000 +v 0.018837 0.299408 0.050000 +v 0.009423 0.299852 -0.050000 +v 0.006282 0.199901 -0.050000 +v 0.006282 0.199901 0.050000 +v 0.009423 0.299852 0.050000 +v 0.000000 0.300000 -0.050000 +v 0.000000 0.200000 -0.050000 +v 0.000000 0.200000 0.050000 +v 0.000000 0.300000 0.050000 +v -0.009423 0.299852 -0.050000 +v -0.006282 0.199901 -0.050000 +v -0.006282 0.199901 0.050000 +v -0.009423 0.299852 0.050000 +v -0.018837 0.299408 -0.050000 +v -0.012558 0.199605 -0.050000 +v -0.012558 0.199605 0.050000 +v -0.018837 0.299408 0.050000 +v -0.028232 0.298669 -0.050000 +v -0.018822 0.199112 -0.050000 +v -0.018822 0.199112 0.050000 +v -0.028232 0.298669 0.050000 +v -0.037600 0.297634 -0.050000 +v -0.025067 0.198423 -0.050000 +v -0.025067 0.198423 0.050000 +v -0.037600 0.297634 0.050000 +v -0.046930 0.296307 -0.050000 +v -0.031287 0.197538 -0.050000 +v -0.031287 0.197538 0.050000 +v -0.046930 0.296307 0.050000 +v -0.056214 0.294686 -0.050000 +v -0.037476 0.196457 -0.050000 +v -0.037476 0.196457 0.050000 +v -0.056214 0.294686 0.050000 +v -0.065443 0.292775 -0.050000 +v -0.043629 0.195183 -0.050000 +v -0.043629 0.195183 0.050000 +v -0.065443 0.292775 0.050000 +v -0.074607 0.290575 -0.050000 +v -0.049738 0.193717 -0.050000 +v -0.049738 0.193717 0.050000 +v -0.074607 0.290575 0.050000 +v -0.083697 0.288088 -0.050000 +v -0.055798 0.192059 -0.050000 +v -0.055798 0.192059 0.050000 +v -0.083697 0.288088 0.050000 +v -0.092705 0.285317 -0.050000 +v -0.061803 0.190211 -0.050000 +v -0.061803 0.190211 0.050000 +v -0.092705 0.285317 0.050000 +v -0.101621 0.282264 -0.050000 +v -0.067748 0.188176 -0.050000 +v -0.067748 0.188176 0.050000 +v -0.101621 0.282264 0.050000 +v -0.110437 0.278933 -0.050000 +v -0.073625 0.185955 -0.050000 +v -0.073625 0.185955 0.050000 +v -0.110437 0.278933 0.050000 +v -0.119144 0.275326 -0.050000 +v -0.079430 0.183551 -0.050000 +v -0.079430 0.183551 0.050000 +v -0.119144 0.275326 0.050000 +v -0.127734 0.271448 -0.050000 +v -0.085156 0.180965 -0.050000 +v -0.085156 0.180965 0.050000 +v -0.127734 0.271448 0.050000 +v -0.136197 0.267302 -0.050000 +v -0.090798 0.178201 -0.050000 +v -0.090798 0.178201 0.050000 +v -0.136197 0.267302 0.050000 +v -0.144526 0.262892 -0.050000 +v -0.096351 0.175261 -0.050000 +v -0.096351 0.175261 0.050000 +v -0.144526 0.262892 0.050000 +v -0.152712 0.258223 -0.050000 +v -0.101808 0.172148 -0.050000 +v -0.101808 0.172148 0.050000 +v -0.152712 0.258223 0.050000 +v -0.160748 0.253298 -0.050000 +v -0.107165 0.168866 -0.050000 +v -0.107165 0.168866 0.050000 +v -0.160748 0.253298 0.050000 +v -0.168625 0.248124 -0.050000 +v -0.112417 0.165416 -0.050000 +v -0.112417 0.165416 0.050000 +v -0.168625 0.248124 0.050000 +v -0.176336 0.242705 -0.050000 +v -0.117557 0.161803 -0.050000 +v -0.117557 0.161803 0.050000 +v -0.176336 0.242705 0.050000 +v -0.183872 0.237047 -0.050000 +v -0.122581 0.158031 -0.050000 +v -0.122581 0.158031 0.050000 +v -0.183872 0.237047 0.050000 +v -0.191227 0.231154 -0.050000 +v -0.127485 0.154103 -0.050000 +v -0.127485 0.154103 0.050000 +v -0.191227 0.231154 0.050000 +v -0.198394 0.225033 -0.050000 +v -0.132262 0.150022 -0.050000 +v -0.132262 0.150022 0.050000 +v -0.198394 0.225033 0.050000 +v -0.205364 0.218691 -0.050000 +v -0.136909 0.145794 -0.050000 +v -0.136909 0.145794 0.050000 +v -0.205364 0.218691 0.050000 +v -0.212132 0.212132 -0.050000 +v -0.141421 0.141421 -0.050000 +v -0.141421 0.141421 0.050000 +v -0.212132 0.212132 0.050000 +v -0.218691 0.205364 -0.050000 +v -0.145794 0.136909 -0.050000 +v -0.145794 0.136909 0.050000 +v -0.218691 0.205364 0.050000 +v -0.225033 0.198394 -0.050000 +v -0.150022 0.132262 -0.050000 +v -0.150022 0.132262 0.050000 +v -0.225033 0.198394 0.050000 +v -0.231154 0.191227 -0.050000 +v -0.154103 0.127485 -0.050000 +v -0.154103 0.127485 0.050000 +v -0.231154 0.191227 0.050000 +v -0.237047 0.183872 -0.050000 +v -0.158031 0.122581 -0.050000 +v -0.158031 0.122581 0.050000 +v -0.237047 0.183872 0.050000 +v -0.242705 0.176336 -0.050000 +v -0.161803 0.117557 -0.050000 +v -0.161803 0.117557 0.050000 +v -0.242705 0.176336 0.050000 +v -0.248124 0.168625 -0.050000 +v -0.165416 0.112417 -0.050000 +v -0.165416 0.112417 0.050000 +v -0.248124 0.168625 0.050000 +v -0.253298 0.160748 -0.050000 +v -0.168866 0.107165 -0.050000 +v -0.168866 0.107165 0.050000 +v -0.253298 0.160748 0.050000 +v -0.258223 0.152712 -0.050000 +v -0.172148 0.101808 -0.050000 +v -0.172148 0.101808 0.050000 +v -0.258223 0.152712 0.050000 +v -0.262892 0.144526 -0.050000 +v -0.175261 0.096351 -0.050000 +v -0.175261 0.096351 0.050000 +v -0.262892 0.144526 0.050000 +v -0.267302 0.136197 -0.050000 +v -0.178201 0.090798 -0.050000 +v -0.178201 0.090798 0.050000 +v -0.267302 0.136197 0.050000 +v -0.271448 0.127734 -0.050000 +v -0.180965 0.085156 -0.050000 +v -0.180965 0.085156 0.050000 +v -0.271448 0.127734 0.050000 +v -0.275326 0.119144 -0.050000 +v -0.183551 0.079430 -0.050000 +v -0.183551 0.079430 0.050000 +v -0.275326 0.119144 0.050000 +v -0.278933 0.110437 -0.050000 +v -0.185955 0.073625 -0.050000 +v -0.185955 0.073625 0.050000 +v -0.278933 0.110437 0.050000 +v -0.282264 0.101621 -0.050000 +v -0.188176 0.067748 -0.050000 +v -0.188176 0.067748 0.050000 +v -0.282264 0.101621 0.050000 +v -0.285317 0.092705 -0.050000 +v -0.190211 0.061803 -0.050000 +v -0.190211 0.061803 0.050000 +v -0.285317 0.092705 0.050000 +v -0.288088 0.083697 -0.050000 +v -0.192059 0.055798 -0.050000 +v -0.192059 0.055798 0.050000 +v -0.288088 0.083697 0.050000 +v -0.290575 0.074607 -0.050000 +v -0.193717 0.049738 -0.050000 +v -0.193717 0.049738 0.050000 +v -0.290575 0.074607 0.050000 +v -0.292775 0.065443 -0.050000 +v -0.195183 0.043629 -0.050000 +v -0.195183 0.043629 0.050000 +v -0.292775 0.065443 0.050000 +v -0.294686 0.056214 -0.050000 +v -0.196457 0.037476 -0.050000 +v -0.196457 0.037476 0.050000 +v -0.294686 0.056214 0.050000 +v -0.296307 0.046930 -0.050000 +v -0.197538 0.031287 -0.050000 +v -0.197538 0.031287 0.050000 +v -0.296307 0.046930 0.050000 +v -0.297634 0.037600 -0.050000 +v -0.198423 0.025067 -0.050000 +v -0.198423 0.025067 0.050000 +v -0.297634 0.037600 0.050000 +v -0.298669 0.028232 -0.050000 +v -0.199112 0.018822 -0.050000 +v -0.199112 0.018822 0.050000 +v -0.298669 0.028232 0.050000 +v -0.299408 0.018837 -0.050000 +v -0.199605 0.012558 -0.050000 +v -0.199605 0.012558 0.050000 +v -0.299408 0.018837 0.050000 +v -0.299852 0.009423 -0.050000 +v -0.199901 0.006282 -0.050000 +v -0.199901 0.006282 0.050000 +v -0.299852 0.009423 0.050000 +v -0.300000 0.000000 -0.050000 +v -0.200000 0.000000 -0.050000 +v -0.200000 0.000000 0.050000 +v -0.300000 0.000000 0.050000 +v -0.299852 -0.009423 -0.050000 +v -0.199901 -0.006282 -0.050000 +v -0.199901 -0.006282 0.050000 +v -0.299852 -0.009423 0.050000 +v -0.299408 -0.018837 -0.050000 +v -0.199605 -0.012558 -0.050000 +v -0.199605 -0.012558 0.050000 +v -0.299408 -0.018837 0.050000 +v -0.298669 -0.028232 -0.050000 +v -0.199112 -0.018822 -0.050000 +v -0.199112 -0.018822 0.050000 +v -0.298669 -0.028232 0.050000 +v -0.297634 -0.037600 -0.050000 +v -0.198423 -0.025067 -0.050000 +v -0.198423 -0.025067 0.050000 +v -0.297634 -0.037600 0.050000 +v -0.296307 -0.046930 -0.050000 +v -0.197538 -0.031287 -0.050000 +v -0.197538 -0.031287 0.050000 +v -0.296307 -0.046930 0.050000 +v -0.294686 -0.056214 -0.050000 +v -0.196457 -0.037476 -0.050000 +v -0.196457 -0.037476 0.050000 +v -0.294686 -0.056214 0.050000 +v -0.292775 -0.065443 -0.050000 +v -0.195183 -0.043629 -0.050000 +v -0.195183 -0.043629 0.050000 +v -0.292775 -0.065443 0.050000 +v -0.290575 -0.074607 -0.050000 +v -0.193717 -0.049738 -0.050000 +v -0.193717 -0.049738 0.050000 +v -0.290575 -0.074607 0.050000 +v -0.288088 -0.083697 -0.050000 +v -0.192059 -0.055798 -0.050000 +v -0.192059 -0.055798 0.050000 +v -0.288088 -0.083697 0.050000 +v -0.285317 -0.092705 -0.050000 +v -0.190211 -0.061803 -0.050000 +v -0.190211 -0.061803 0.050000 +v -0.285317 -0.092705 0.050000 +v -0.282264 -0.101621 -0.050000 +v -0.188176 -0.067748 -0.050000 +v -0.188176 -0.067748 0.050000 +v -0.282264 -0.101621 0.050000 +v -0.278933 -0.110437 -0.050000 +v -0.185955 -0.073625 -0.050000 +v -0.185955 -0.073625 0.050000 +v -0.278933 -0.110437 0.050000 +v -0.275326 -0.119144 -0.050000 +v -0.183551 -0.079430 -0.050000 +v -0.183551 -0.079430 0.050000 +v -0.275326 -0.119144 0.050000 +v -0.271448 -0.127734 -0.050000 +v -0.180965 -0.085156 -0.050000 +v -0.180965 -0.085156 0.050000 +v -0.271448 -0.127734 0.050000 +v -0.267302 -0.136197 -0.050000 +v -0.178201 -0.090798 -0.050000 +v -0.178201 -0.090798 0.050000 +v -0.267302 -0.136197 0.050000 +v -0.262892 -0.144526 -0.050000 +v -0.175261 -0.096351 -0.050000 +v -0.175261 -0.096351 0.050000 +v -0.262892 -0.144526 0.050000 +v -0.258223 -0.152712 -0.050000 +v -0.172148 -0.101808 -0.050000 +v -0.172148 -0.101808 0.050000 +v -0.258223 -0.152712 0.050000 +v -0.253298 -0.160748 -0.050000 +v -0.168866 -0.107165 -0.050000 +v -0.168866 -0.107165 0.050000 +v -0.253298 -0.160748 0.050000 +v -0.248124 -0.168625 -0.050000 +v -0.165416 -0.112417 -0.050000 +v -0.165416 -0.112417 0.050000 +v -0.248124 -0.168625 0.050000 +v -0.242705 -0.176336 -0.050000 +v -0.161803 -0.117557 -0.050000 +v -0.161803 -0.117557 0.050000 +v -0.242705 -0.176336 0.050000 +v -0.237047 -0.183872 -0.050000 +v -0.158031 -0.122581 -0.050000 +v -0.158031 -0.122581 0.050000 +v -0.237047 -0.183872 0.050000 +v -0.231154 -0.191227 -0.050000 +v -0.154103 -0.127485 -0.050000 +v -0.154103 -0.127485 0.050000 +v -0.231154 -0.191227 0.050000 +v -0.225033 -0.198394 -0.050000 +v -0.150022 -0.132262 -0.050000 +v -0.150022 -0.132262 0.050000 +v -0.225033 -0.198394 0.050000 +v -0.218691 -0.205364 -0.050000 +v -0.145794 -0.136909 -0.050000 +v -0.145794 -0.136909 0.050000 +v -0.218691 -0.205364 0.050000 +v -0.212132 -0.212132 -0.050000 +v -0.141421 -0.141421 -0.050000 +v -0.141421 -0.141421 0.050000 +v -0.212132 -0.212132 0.050000 +v -0.205364 -0.218691 -0.050000 +v -0.136909 -0.145794 -0.050000 +v -0.136909 -0.145794 0.050000 +v -0.205364 -0.218691 0.050000 +v -0.198394 -0.225033 -0.050000 +v -0.132262 -0.150022 -0.050000 +v -0.132262 -0.150022 0.050000 +v -0.198394 -0.225033 0.050000 +v -0.191227 -0.231154 -0.050000 +v -0.127485 -0.154103 -0.050000 +v -0.127485 -0.154103 0.050000 +v -0.191227 -0.231154 0.050000 +v -0.183872 -0.237047 -0.050000 +v -0.122581 -0.158031 -0.050000 +v -0.122581 -0.158031 0.050000 +v -0.183872 -0.237047 0.050000 +v -0.176336 -0.242705 -0.050000 +v -0.117557 -0.161803 -0.050000 +v -0.117557 -0.161803 0.050000 +v -0.176336 -0.242705 0.050000 +v -0.168625 -0.248124 -0.050000 +v -0.112417 -0.165416 -0.050000 +v -0.112417 -0.165416 0.050000 +v -0.168625 -0.248124 0.050000 +v -0.160748 -0.253298 -0.050000 +v -0.107165 -0.168866 -0.050000 +v -0.107165 -0.168866 0.050000 +v -0.160748 -0.253298 0.050000 +v -0.152712 -0.258223 -0.050000 +v -0.101808 -0.172148 -0.050000 +v -0.101808 -0.172148 0.050000 +v -0.152712 -0.258223 0.050000 +v -0.144526 -0.262892 -0.050000 +v -0.096351 -0.175261 -0.050000 +v -0.096351 -0.175261 0.050000 +v -0.144526 -0.262892 0.050000 +v -0.136197 -0.267302 -0.050000 +v -0.090798 -0.178201 -0.050000 +v -0.090798 -0.178201 0.050000 +v -0.136197 -0.267302 0.050000 +v -0.127734 -0.271448 -0.050000 +v -0.085156 -0.180965 -0.050000 +v -0.085156 -0.180965 0.050000 +v -0.127734 -0.271448 0.050000 +v -0.119144 -0.275326 -0.050000 +v -0.079430 -0.183551 -0.050000 +v -0.079430 -0.183551 0.050000 +v -0.119144 -0.275326 0.050000 +v -0.110437 -0.278933 -0.050000 +v -0.073625 -0.185955 -0.050000 +v -0.073625 -0.185955 0.050000 +v -0.110437 -0.278933 0.050000 +v -0.101621 -0.282264 -0.050000 +v -0.067748 -0.188176 -0.050000 +v -0.067748 -0.188176 0.050000 +v -0.101621 -0.282264 0.050000 +v -0.092705 -0.285317 -0.050000 +v -0.061803 -0.190211 -0.050000 +v -0.061803 -0.190211 0.050000 +v -0.092705 -0.285317 0.050000 +v -0.083697 -0.288088 -0.050000 +v -0.055798 -0.192059 -0.050000 +v -0.055798 -0.192059 0.050000 +v -0.083697 -0.288088 0.050000 +v -0.074607 -0.290575 -0.050000 +v -0.049738 -0.193717 -0.050000 +v -0.049738 -0.193717 0.050000 +v -0.074607 -0.290575 0.050000 +v -0.065443 -0.292775 -0.050000 +v -0.043629 -0.195183 -0.050000 +v -0.043629 -0.195183 0.050000 +v -0.065443 -0.292775 0.050000 +v -0.056214 -0.294686 -0.050000 +v -0.037476 -0.196457 -0.050000 +v -0.037476 -0.196457 0.050000 +v -0.056214 -0.294686 0.050000 +v -0.046930 -0.296307 -0.050000 +v -0.031287 -0.197538 -0.050000 +v -0.031287 -0.197538 0.050000 +v -0.046930 -0.296307 0.050000 +v -0.037600 -0.297634 -0.050000 +v -0.025067 -0.198423 -0.050000 +v -0.025067 -0.198423 0.050000 +v -0.037600 -0.297634 0.050000 +v -0.028232 -0.298669 -0.050000 +v -0.018822 -0.199112 -0.050000 +v -0.018822 -0.199112 0.050000 +v -0.028232 -0.298669 0.050000 +v -0.018837 -0.299408 -0.050000 +v -0.012558 -0.199605 -0.050000 +v -0.012558 -0.199605 0.050000 +v -0.018837 -0.299408 0.050000 +v -0.009423 -0.299852 -0.050000 +v -0.006282 -0.199901 -0.050000 +v -0.006282 -0.199901 0.050000 +v -0.009423 -0.299852 0.050000 +v 0.060000 0.140000 0.050000 +v 0.140000 0.060000 0.050000 +v 0.140000 0.060000 -0.050000 +v 0.060000 0.140000 -0.050000 +v 0.140000 0.060000 0.050000 +v -0.060000 -0.140000 0.050000 +v -0.060000 -0.140000 -0.050000 +v 0.140000 0.060000 -0.050000 +v -0.060000 -0.140000 0.050000 +v -0.140000 -0.060000 0.050000 +v -0.140000 -0.060000 -0.050000 +v -0.060000 -0.140000 -0.050000 +v -0.140000 -0.060000 0.050000 +v 0.060000 0.140000 0.050000 +v 0.060000 0.140000 -0.050000 +v -0.140000 -0.060000 -0.050000 +v 0.080000 -0.000000 0.050000 +v 0.300000 -0.220000 0.050000 +v 0.300000 -0.220000 -0.050000 +v 0.080000 -0.000000 -0.050000 +v 0.300000 -0.220000 0.050000 +v 0.220000 -0.300000 0.050000 +v 0.220000 -0.300000 -0.050000 +v 0.300000 -0.220000 -0.050000 +v 0.220000 -0.300000 0.050000 +v 0.000000 -0.080000 0.050000 +v 0.000000 -0.080000 -0.050000 +v 0.220000 -0.300000 -0.050000 +v 0.000000 -0.200000 -0.050000 +v 0.006282 -0.199901 -0.050000 +v 0.006282 -0.199901 0.050000 +v 0.000000 -0.200000 0.050000 +v 0.009423 -0.299852 -0.050000 +v 0.000000 -0.300000 -0.050000 +v 0.000000 -0.300000 0.050000 +v 0.009423 -0.299852 0.050000 +v 0.012558 -0.199605 -0.050000 +v 0.012558 -0.199605 0.050000 +v 0.018837 -0.299408 -0.050000 +v 0.018837 -0.299408 0.050000 +v 0.018822 -0.199112 -0.050000 +v 0.018822 -0.199112 0.050000 +v 0.028232 -0.298669 -0.050000 +v 0.028232 -0.298669 0.050000 +v 0.025067 -0.198423 -0.050000 +v 0.025067 -0.198423 0.050000 +v 0.037600 -0.297634 -0.050000 +v 0.037600 -0.297634 0.050000 +v 0.031287 -0.197538 -0.050000 +v 0.031287 -0.197538 0.050000 +v 0.046930 -0.296307 -0.050000 +v 0.046930 -0.296307 0.050000 +v 0.037476 -0.196457 -0.050000 +v 0.037476 -0.196457 0.050000 +v 0.056214 -0.294686 -0.050000 +v 0.056214 -0.294686 0.050000 +v 0.043629 -0.195183 -0.050000 +v 0.043629 -0.195183 0.050000 +v 0.065443 -0.292775 -0.050000 +v 0.065443 -0.292775 0.050000 +v 0.049738 -0.193717 -0.050000 +v 0.049738 -0.193717 0.050000 +v 0.074607 -0.290575 -0.050000 +v 0.074607 -0.290575 0.050000 +v 0.055798 -0.192059 -0.050000 +v 0.055798 -0.192059 0.050000 +v 0.083697 -0.288088 -0.050000 +v 0.083697 -0.288088 0.050000 +v 0.061803 -0.190211 -0.050000 +v 0.061803 -0.190211 0.050000 +v 0.092705 -0.285317 -0.050000 +v 0.092705 -0.285317 0.050000 +v 0.067748 -0.188176 -0.050000 +v 0.067748 -0.188176 0.050000 +v 0.101621 -0.282264 -0.050000 +v 0.101621 -0.282264 0.050000 +v 0.073625 -0.185955 -0.050000 +v 0.073625 -0.185955 0.050000 +v 0.110437 -0.278933 -0.050000 +v 0.110437 -0.278933 0.050000 +v 0.079430 -0.183551 -0.050000 +v 0.079430 -0.183551 0.050000 +v 0.119144 -0.275326 -0.050000 +v 0.119144 -0.275326 0.050000 +v 0.085156 -0.180965 -0.050000 +v 0.085156 -0.180965 0.050000 +v 0.127734 -0.271448 -0.050000 +v 0.127734 -0.271448 0.050000 +v 0.090798 -0.178201 -0.050000 +v 0.090798 -0.178201 0.050000 +v 0.136197 -0.267302 -0.050000 +v 0.136197 -0.267302 0.050000 +v 0.096351 -0.175261 -0.050000 +v 0.096351 -0.175261 0.050000 +v 0.144526 -0.262892 -0.050000 +v 0.144526 -0.262892 0.050000 +v 0.101808 -0.172148 -0.050000 +v 0.101808 -0.172148 0.050000 +v 0.152712 -0.258223 -0.050000 +v 0.152712 -0.258223 0.050000 +v 0.107165 -0.168866 -0.050000 +v 0.107165 -0.168866 0.050000 +v 0.160748 -0.253298 -0.050000 +v 0.160748 -0.253298 0.050000 +v 0.112417 -0.165416 -0.050000 +v 0.112417 -0.165416 0.050000 +v 0.168625 -0.248124 -0.050000 +v 0.168625 -0.248124 0.050000 +v 0.117557 -0.161803 -0.050000 +v 0.117557 -0.161803 0.050000 +v 0.176336 -0.242705 -0.050000 +v 0.176336 -0.242705 0.050000 +v 0.122581 -0.158031 -0.050000 +v 0.122581 -0.158031 0.050000 +v 0.183872 -0.237047 -0.050000 +v 0.183872 -0.237047 0.050000 +v 0.127485 -0.154103 -0.050000 +v 0.127485 -0.154103 0.050000 +v 0.191227 -0.231154 -0.050000 +v 0.191227 -0.231154 0.050000 +v 0.132262 -0.150022 -0.050000 +v 0.132262 -0.150022 0.050000 +v 0.198394 -0.225033 -0.050000 +v 0.198394 -0.225033 0.050000 +v 0.136909 -0.145794 -0.050000 +v 0.136909 -0.145794 0.050000 +v 0.205364 -0.218691 -0.050000 +v 0.205364 -0.218691 0.050000 +v 0.141421 -0.141421 -0.050000 +v 0.141421 -0.141421 0.050000 +v 0.212132 -0.212132 -0.050000 +v 0.212132 -0.212132 0.050000 +v 0.145794 -0.136909 -0.050000 +v 0.145794 -0.136909 0.050000 +v 0.218691 -0.205364 -0.050000 +v 0.218691 -0.205364 0.050000 +v 0.150022 -0.132262 -0.050000 +v 0.150022 -0.132262 0.050000 +v 0.225033 -0.198394 -0.050000 +v 0.225033 -0.198394 0.050000 +v 0.154103 -0.127485 -0.050000 +v 0.154103 -0.127485 0.050000 +v 0.231154 -0.191227 -0.050000 +v 0.231154 -0.191227 0.050000 +v 0.158031 -0.122581 -0.050000 +v 0.158031 -0.122581 0.050000 +v 0.237047 -0.183872 -0.050000 +v 0.237047 -0.183872 0.050000 +v 0.161803 -0.117557 -0.050000 +v 0.161803 -0.117557 0.050000 +v 0.242705 -0.176336 -0.050000 +v 0.242705 -0.176336 0.050000 +v 0.165416 -0.112417 -0.050000 +v 0.165416 -0.112417 0.050000 +v 0.248124 -0.168625 -0.050000 +v 0.248124 -0.168625 0.050000 +v 0.168866 -0.107165 -0.050000 +v 0.168866 -0.107165 0.050000 +v 0.253298 -0.160748 -0.050000 +v 0.253298 -0.160748 0.050000 +v 0.172148 -0.101808 -0.050000 +v 0.172148 -0.101808 0.050000 +v 0.258223 -0.152712 -0.050000 +v 0.258223 -0.152712 0.050000 +v 0.175261 -0.096351 -0.050000 +v 0.175261 -0.096351 0.050000 +v 0.262892 -0.144526 -0.050000 +v 0.262892 -0.144526 0.050000 +v 0.178201 -0.090798 -0.050000 +v 0.178201 -0.090798 0.050000 +v 0.267302 -0.136197 -0.050000 +v 0.267302 -0.136197 0.050000 +v 0.180965 -0.085156 -0.050000 +v 0.180965 -0.085156 0.050000 +v 0.271448 -0.127734 -0.050000 +v 0.271448 -0.127734 0.050000 +v 0.183551 -0.079430 -0.050000 +v 0.183551 -0.079430 0.050000 +v 0.275326 -0.119144 -0.050000 +v 0.275326 -0.119144 0.050000 +v 0.185955 -0.073625 -0.050000 +v 0.185955 -0.073625 0.050000 +v 0.278933 -0.110437 -0.050000 +v 0.278933 -0.110437 0.050000 +v 0.188176 -0.067748 -0.050000 +v 0.188176 -0.067748 0.050000 +v 0.282264 -0.101621 -0.050000 +v 0.282264 -0.101621 0.050000 +v 0.190211 -0.061803 -0.050000 +v 0.190211 -0.061803 0.050000 +v 0.285317 -0.092705 -0.050000 +v 0.285317 -0.092705 0.050000 +v 0.192059 -0.055798 -0.050000 +v 0.192059 -0.055798 0.050000 +v 0.288088 -0.083697 -0.050000 +v 0.288088 -0.083697 0.050000 +v 0.193717 -0.049738 -0.050000 +v 0.193717 -0.049738 0.050000 +v 0.290575 -0.074607 -0.050000 +v 0.290575 -0.074607 0.050000 +v 0.195183 -0.043629 -0.050000 +v 0.195183 -0.043629 0.050000 +v 0.292775 -0.065443 -0.050000 +v 0.292775 -0.065443 0.050000 +v 0.196457 -0.037476 -0.050000 +v 0.196457 -0.037476 0.050000 +v 0.294686 -0.056214 -0.050000 +v 0.294686 -0.056214 0.050000 +v 0.197538 -0.031287 -0.050000 +v 0.197538 -0.031287 0.050000 +v 0.296307 -0.046930 -0.050000 +v 0.296307 -0.046930 0.050000 +v 0.198423 -0.025067 -0.050000 +v 0.198423 -0.025067 0.050000 +v 0.297634 -0.037600 -0.050000 +v 0.297634 -0.037600 0.050000 +v 0.199112 -0.018822 -0.050000 +v 0.199112 -0.018822 0.050000 +v 0.298669 -0.028232 -0.050000 +v 0.298669 -0.028232 0.050000 +v 0.199605 -0.012558 -0.050000 +v 0.199605 -0.012558 0.050000 +v 0.299408 -0.018837 -0.050000 +v 0.299408 -0.018837 0.050000 +v 0.199901 -0.006282 -0.050000 +v 0.199901 -0.006282 0.050000 +v 0.299852 -0.009423 -0.050000 +v 0.299852 -0.009423 0.050000 +v 0.200000 -0.000000 -0.050000 +v 0.200000 -0.000000 0.050000 +v 0.300000 -0.000000 -0.050000 +v 0.300000 -0.000000 0.050000 +v 0.199901 0.006282 -0.050000 +v 0.199901 0.006282 0.050000 +v 0.299852 0.009423 -0.050000 +v 0.299852 0.009423 0.050000 +v 0.199605 0.012558 -0.050000 +v 0.199605 0.012558 0.050000 +v 0.299408 0.018837 -0.050000 +v 0.299408 0.018837 0.050000 +v 0.199112 0.018822 -0.050000 +v 0.199112 0.018822 0.050000 +v 0.298669 0.028232 -0.050000 +v 0.298669 0.028232 0.050000 +v 0.198423 0.025067 -0.050000 +v 0.198423 0.025067 0.050000 +v 0.297634 0.037600 -0.050000 +v 0.297634 0.037600 0.050000 +v 0.197538 0.031287 -0.050000 +v 0.197538 0.031287 0.050000 +v 0.296307 0.046930 -0.050000 +v 0.296307 0.046930 0.050000 +v 0.196457 0.037476 -0.050000 +v 0.196457 0.037476 0.050000 +v 0.294686 0.056214 -0.050000 +v 0.294686 0.056214 0.050000 +v 0.195183 0.043629 -0.050000 +v 0.195183 0.043629 0.050000 +v 0.292775 0.065443 -0.050000 +v 0.292775 0.065443 0.050000 +v 0.193717 0.049738 -0.050000 +v 0.193717 0.049738 0.050000 +v 0.290575 0.074607 -0.050000 +v 0.290575 0.074607 0.050000 +v 0.192059 0.055798 -0.050000 +v 0.192059 0.055798 0.050000 +v 0.288088 0.083697 -0.050000 +v 0.288088 0.083697 0.050000 +v 0.190211 0.061803 -0.050000 +v 0.190211 0.061803 0.050000 +v 0.285317 0.092705 -0.050000 +v 0.285317 0.092705 0.050000 +v 0.188176 0.067748 -0.050000 +v 0.188176 0.067748 0.050000 +v 0.282264 0.101621 -0.050000 +v 0.282264 0.101621 0.050000 +v 0.185955 0.073625 -0.050000 +v 0.185955 0.073625 0.050000 +v 0.278933 0.110437 -0.050000 +v 0.278933 0.110437 0.050000 +v 0.183551 0.079430 -0.050000 +v 0.183551 0.079430 0.050000 +v 0.275326 0.119144 -0.050000 +v 0.275326 0.119144 0.050000 +v 0.180965 0.085156 -0.050000 +v 0.180965 0.085156 0.050000 +v 0.271448 0.127734 -0.050000 +v 0.271448 0.127734 0.050000 +v 0.178201 0.090798 -0.050000 +v 0.178201 0.090798 0.050000 +v 0.267302 0.136197 -0.050000 +v 0.267302 0.136197 0.050000 +v 0.175261 0.096351 -0.050000 +v 0.175261 0.096351 0.050000 +v 0.262892 0.144526 -0.050000 +v 0.262892 0.144526 0.050000 +v 0.172148 0.101808 -0.050000 +v 0.172148 0.101808 0.050000 +v 0.258223 0.152712 -0.050000 +v 0.258223 0.152712 0.050000 +v 0.168866 0.107165 -0.050000 +v 0.168866 0.107165 0.050000 +v 0.253298 0.160748 -0.050000 +v 0.253298 0.160748 0.050000 +v 0.165416 0.112417 -0.050000 +v 0.165416 0.112417 0.050000 +v 0.248124 0.168625 -0.050000 +v 0.248124 0.168625 0.050000 +v 0.161803 0.117557 -0.050000 +v 0.161803 0.117557 0.050000 +v 0.242705 0.176336 -0.050000 +v 0.242705 0.176336 0.050000 +v 0.158031 0.122581 -0.050000 +v 0.158031 0.122581 0.050000 +v 0.237047 0.183872 -0.050000 +v 0.237047 0.183872 0.050000 +v 0.154103 0.127485 -0.050000 +v 0.154103 0.127485 0.050000 +v 0.231154 0.191227 -0.050000 +v 0.231154 0.191227 0.050000 +v 0.150022 0.132262 -0.050000 +v 0.150022 0.132262 0.050000 +v 0.225033 0.198394 -0.050000 +v 0.225033 0.198394 0.050000 +v 0.145794 0.136909 -0.050000 +v 0.145794 0.136909 0.050000 +v 0.218691 0.205364 -0.050000 +v 0.218691 0.205364 0.050000 +v 0.141421 0.141421 -0.050000 +v 0.141421 0.141421 0.050000 +v 0.212132 0.212132 -0.050000 +v 0.212132 0.212132 0.050000 +v 0.136909 0.145794 -0.050000 +v 0.136909 0.145794 0.050000 +v 0.205364 0.218691 -0.050000 +v 0.205364 0.218691 0.050000 +v 0.132262 0.150022 -0.050000 +v 0.132262 0.150022 0.050000 +v 0.198394 0.225033 -0.050000 +v 0.198394 0.225033 0.050000 +v 0.127485 0.154103 -0.050000 +v 0.127485 0.154103 0.050000 +v 0.191227 0.231154 -0.050000 +v 0.191227 0.231154 0.050000 +v 0.122581 0.158031 -0.050000 +v 0.122581 0.158031 0.050000 +v 0.183872 0.237047 -0.050000 +v 0.183872 0.237047 0.050000 +v 0.117557 0.161803 -0.050000 +v 0.117557 0.161803 0.050000 +v 0.176336 0.242705 -0.050000 +v 0.176336 0.242705 0.050000 +v 0.112417 0.165416 -0.050000 +v 0.112417 0.165416 0.050000 +v 0.168625 0.248124 -0.050000 +v 0.168625 0.248124 0.050000 +v 0.107165 0.168866 -0.050000 +v 0.107165 0.168866 0.050000 +v 0.160748 0.253298 -0.050000 +v 0.160748 0.253298 0.050000 +v 0.101808 0.172148 -0.050000 +v 0.101808 0.172148 0.050000 +v 0.152712 0.258223 -0.050000 +v 0.152712 0.258223 0.050000 +v 0.096351 0.175261 -0.050000 +v 0.096351 0.175261 0.050000 +v 0.144526 0.262892 -0.050000 +v 0.144526 0.262892 0.050000 +v 0.090798 0.178201 -0.050000 +v 0.090798 0.178201 0.050000 +v 0.136197 0.267302 -0.050000 +v 0.136197 0.267302 0.050000 +v 0.085156 0.180965 -0.050000 +v 0.085156 0.180965 0.050000 +v 0.127734 0.271448 -0.050000 +v 0.127734 0.271448 0.050000 +v 0.079430 0.183551 -0.050000 +v 0.079430 0.183551 0.050000 +v 0.119144 0.275326 -0.050000 +v 0.119144 0.275326 0.050000 +v 0.073625 0.185955 -0.050000 +v 0.073625 0.185955 0.050000 +v 0.110437 0.278933 -0.050000 +v 0.110437 0.278933 0.050000 +v 0.067748 0.188176 -0.050000 +v 0.067748 0.188176 0.050000 +v 0.101621 0.282264 -0.050000 +v 0.101621 0.282264 0.050000 +v 0.061803 0.190211 -0.050000 +v 0.061803 0.190211 0.050000 +v 0.092705 0.285317 -0.050000 +v 0.092705 0.285317 0.050000 +v 0.055798 0.192059 -0.050000 +v 0.055798 0.192059 0.050000 +v 0.083697 0.288088 -0.050000 +v 0.083697 0.288088 0.050000 +v 0.049738 0.193717 -0.050000 +v 0.049738 0.193717 0.050000 +v 0.074607 0.290575 -0.050000 +v 0.074607 0.290575 0.050000 +v 0.043629 0.195183 -0.050000 +v 0.043629 0.195183 0.050000 +v 0.065443 0.292775 -0.050000 +v 0.065443 0.292775 0.050000 +v 0.037476 0.196457 -0.050000 +v 0.037476 0.196457 0.050000 +v 0.056214 0.294686 -0.050000 +v 0.056214 0.294686 0.050000 +v 0.031287 0.197538 -0.050000 +v 0.031287 0.197538 0.050000 +v 0.046930 0.296307 -0.050000 +v 0.046930 0.296307 0.050000 +v 0.025067 0.198423 -0.050000 +v 0.025067 0.198423 0.050000 +v 0.037600 0.297634 -0.050000 +v 0.037600 0.297634 0.050000 +v 0.018822 0.199112 -0.050000 +v 0.018822 0.199112 0.050000 +v 0.028232 0.298669 -0.050000 +v 0.028232 0.298669 0.050000 +v 0.012558 0.199605 -0.050000 +v 0.012558 0.199605 0.050000 +v 0.018837 0.299408 -0.050000 +v 0.018837 0.299408 0.050000 +v 0.006282 0.199901 -0.050000 +v 0.006282 0.199901 0.050000 +v 0.009423 0.299852 -0.050000 +v 0.009423 0.299852 0.050000 +v 0.000000 0.200000 -0.050000 +v 0.000000 0.200000 0.050000 +v 0.000000 0.300000 -0.050000 +v 0.000000 0.300000 0.050000 +v -0.006282 0.199901 -0.050000 +v -0.006282 0.199901 0.050000 +v -0.009423 0.299852 -0.050000 +v -0.009423 0.299852 0.050000 +v -0.012558 0.199605 -0.050000 +v -0.012558 0.199605 0.050000 +v -0.018837 0.299408 -0.050000 +v -0.018837 0.299408 0.050000 +v -0.018822 0.199112 -0.050000 +v -0.018822 0.199112 0.050000 +v -0.028232 0.298669 -0.050000 +v -0.028232 0.298669 0.050000 +v -0.025067 0.198423 -0.050000 +v -0.025067 0.198423 0.050000 +v -0.037600 0.297634 -0.050000 +v -0.037600 0.297634 0.050000 +v -0.031287 0.197538 -0.050000 +v -0.031287 0.197538 0.050000 +v -0.046930 0.296307 -0.050000 +v -0.046930 0.296307 0.050000 +v -0.037476 0.196457 -0.050000 +v -0.037476 0.196457 0.050000 +v -0.056214 0.294686 -0.050000 +v -0.056214 0.294686 0.050000 +v -0.043629 0.195183 -0.050000 +v -0.043629 0.195183 0.050000 +v -0.065443 0.292775 -0.050000 +v -0.065443 0.292775 0.050000 +v -0.049738 0.193717 -0.050000 +v -0.049738 0.193717 0.050000 +v -0.074607 0.290575 -0.050000 +v -0.074607 0.290575 0.050000 +v -0.055798 0.192059 -0.050000 +v -0.055798 0.192059 0.050000 +v -0.083697 0.288088 -0.050000 +v -0.083697 0.288088 0.050000 +v -0.061803 0.190211 -0.050000 +v -0.061803 0.190211 0.050000 +v -0.092705 0.285317 -0.050000 +v -0.092705 0.285317 0.050000 +v -0.067748 0.188176 -0.050000 +v -0.067748 0.188176 0.050000 +v -0.101621 0.282264 -0.050000 +v -0.101621 0.282264 0.050000 +v -0.073625 0.185955 -0.050000 +v -0.073625 0.185955 0.050000 +v -0.110437 0.278933 -0.050000 +v -0.110437 0.278933 0.050000 +v -0.079430 0.183551 -0.050000 +v -0.079430 0.183551 0.050000 +v -0.119144 0.275326 -0.050000 +v -0.119144 0.275326 0.050000 +v -0.085156 0.180965 -0.050000 +v -0.085156 0.180965 0.050000 +v -0.127734 0.271448 -0.050000 +v -0.127734 0.271448 0.050000 +v -0.090798 0.178201 -0.050000 +v -0.090798 0.178201 0.050000 +v -0.136197 0.267302 -0.050000 +v -0.136197 0.267302 0.050000 +v -0.096351 0.175261 -0.050000 +v -0.096351 0.175261 0.050000 +v -0.144526 0.262892 -0.050000 +v -0.144526 0.262892 0.050000 +v -0.101808 0.172148 -0.050000 +v -0.101808 0.172148 0.050000 +v -0.152712 0.258223 -0.050000 +v -0.152712 0.258223 0.050000 +v -0.107165 0.168866 -0.050000 +v -0.107165 0.168866 0.050000 +v -0.160748 0.253298 -0.050000 +v -0.160748 0.253298 0.050000 +v -0.112417 0.165416 -0.050000 +v -0.112417 0.165416 0.050000 +v -0.168625 0.248124 -0.050000 +v -0.168625 0.248124 0.050000 +v -0.117557 0.161803 -0.050000 +v -0.117557 0.161803 0.050000 +v -0.176336 0.242705 -0.050000 +v -0.176336 0.242705 0.050000 +v -0.122581 0.158031 -0.050000 +v -0.122581 0.158031 0.050000 +v -0.183872 0.237047 -0.050000 +v -0.183872 0.237047 0.050000 +v -0.127485 0.154103 -0.050000 +v -0.127485 0.154103 0.050000 +v -0.191227 0.231154 -0.050000 +v -0.191227 0.231154 0.050000 +v -0.132262 0.150022 -0.050000 +v -0.132262 0.150022 0.050000 +v -0.198394 0.225033 -0.050000 +v -0.198394 0.225033 0.050000 +v -0.136909 0.145794 -0.050000 +v -0.136909 0.145794 0.050000 +v -0.205364 0.218691 -0.050000 +v -0.205364 0.218691 0.050000 +v -0.141421 0.141421 -0.050000 +v -0.141421 0.141421 0.050000 +v -0.212132 0.212132 -0.050000 +v -0.212132 0.212132 0.050000 +v -0.145794 0.136909 -0.050000 +v -0.145794 0.136909 0.050000 +v -0.218691 0.205364 -0.050000 +v -0.218691 0.205364 0.050000 +v -0.150022 0.132262 -0.050000 +v -0.150022 0.132262 0.050000 +v -0.225033 0.198394 -0.050000 +v -0.225033 0.198394 0.050000 +v -0.154103 0.127485 -0.050000 +v -0.154103 0.127485 0.050000 +v -0.231154 0.191227 -0.050000 +v -0.231154 0.191227 0.050000 +v -0.158031 0.122581 -0.050000 +v -0.158031 0.122581 0.050000 +v -0.237047 0.183872 -0.050000 +v -0.237047 0.183872 0.050000 +v -0.161803 0.117557 -0.050000 +v -0.161803 0.117557 0.050000 +v -0.242705 0.176336 -0.050000 +v -0.242705 0.176336 0.050000 +v -0.165416 0.112417 -0.050000 +v -0.165416 0.112417 0.050000 +v -0.248124 0.168625 -0.050000 +v -0.248124 0.168625 0.050000 +v -0.168866 0.107165 -0.050000 +v -0.168866 0.107165 0.050000 +v -0.253298 0.160748 -0.050000 +v -0.253298 0.160748 0.050000 +v -0.172148 0.101808 -0.050000 +v -0.172148 0.101808 0.050000 +v -0.258223 0.152712 -0.050000 +v -0.258223 0.152712 0.050000 +v -0.175261 0.096351 -0.050000 +v -0.175261 0.096351 0.050000 +v -0.262892 0.144526 -0.050000 +v -0.262892 0.144526 0.050000 +v -0.178201 0.090798 -0.050000 +v -0.178201 0.090798 0.050000 +v -0.267302 0.136197 -0.050000 +v -0.267302 0.136197 0.050000 +v -0.180965 0.085156 -0.050000 +v -0.180965 0.085156 0.050000 +v -0.271448 0.127734 -0.050000 +v -0.271448 0.127734 0.050000 +v -0.183551 0.079430 -0.050000 +v -0.183551 0.079430 0.050000 +v -0.275326 0.119144 -0.050000 +v -0.275326 0.119144 0.050000 +v -0.185955 0.073625 -0.050000 +v -0.185955 0.073625 0.050000 +v -0.278933 0.110437 -0.050000 +v -0.278933 0.110437 0.050000 +v -0.188176 0.067748 -0.050000 +v -0.188176 0.067748 0.050000 +v -0.282264 0.101621 -0.050000 +v -0.282264 0.101621 0.050000 +v -0.190211 0.061803 -0.050000 +v -0.190211 0.061803 0.050000 +v -0.285317 0.092705 -0.050000 +v -0.285317 0.092705 0.050000 +v -0.192059 0.055798 -0.050000 +v -0.192059 0.055798 0.050000 +v -0.288088 0.083697 -0.050000 +v -0.288088 0.083697 0.050000 +v -0.193717 0.049738 -0.050000 +v -0.193717 0.049738 0.050000 +v -0.290575 0.074607 -0.050000 +v -0.290575 0.074607 0.050000 +v -0.195183 0.043629 -0.050000 +v -0.195183 0.043629 0.050000 +v -0.292775 0.065443 -0.050000 +v -0.292775 0.065443 0.050000 +v -0.196457 0.037476 -0.050000 +v -0.196457 0.037476 0.050000 +v -0.294686 0.056214 -0.050000 +v -0.294686 0.056214 0.050000 +v -0.197538 0.031287 -0.050000 +v -0.197538 0.031287 0.050000 +v -0.296307 0.046930 -0.050000 +v -0.296307 0.046930 0.050000 +v -0.198423 0.025067 -0.050000 +v -0.198423 0.025067 0.050000 +v -0.297634 0.037600 -0.050000 +v -0.297634 0.037600 0.050000 +v -0.199112 0.018822 -0.050000 +v -0.199112 0.018822 0.050000 +v -0.298669 0.028232 -0.050000 +v -0.298669 0.028232 0.050000 +v -0.199605 0.012558 -0.050000 +v -0.199605 0.012558 0.050000 +v -0.299408 0.018837 -0.050000 +v -0.299408 0.018837 0.050000 +v -0.199901 0.006282 -0.050000 +v -0.199901 0.006282 0.050000 +v -0.299852 0.009423 -0.050000 +v -0.299852 0.009423 0.050000 +v -0.200000 0.000000 -0.050000 +v -0.200000 0.000000 0.050000 +v -0.300000 0.000000 -0.050000 +v -0.300000 0.000000 0.050000 +v -0.199901 -0.006282 -0.050000 +v -0.199901 -0.006282 0.050000 +v -0.299852 -0.009423 -0.050000 +v -0.299852 -0.009423 0.050000 +v -0.199605 -0.012558 -0.050000 +v -0.199605 -0.012558 0.050000 +v -0.299408 -0.018837 -0.050000 +v -0.299408 -0.018837 0.050000 +v -0.199112 -0.018822 -0.050000 +v -0.199112 -0.018822 0.050000 +v -0.298669 -0.028232 -0.050000 +v -0.298669 -0.028232 0.050000 +v -0.198423 -0.025067 -0.050000 +v -0.198423 -0.025067 0.050000 +v -0.297634 -0.037600 -0.050000 +v -0.297634 -0.037600 0.050000 +v -0.197538 -0.031287 -0.050000 +v -0.197538 -0.031287 0.050000 +v -0.296307 -0.046930 -0.050000 +v -0.296307 -0.046930 0.050000 +v -0.196457 -0.037476 -0.050000 +v -0.196457 -0.037476 0.050000 +v -0.294686 -0.056214 -0.050000 +v -0.294686 -0.056214 0.050000 +v -0.195183 -0.043629 -0.050000 +v -0.195183 -0.043629 0.050000 +v -0.292775 -0.065443 -0.050000 +v -0.292775 -0.065443 0.050000 +v -0.193717 -0.049738 -0.050000 +v -0.193717 -0.049738 0.050000 +v -0.290575 -0.074607 -0.050000 +v -0.290575 -0.074607 0.050000 +v -0.192059 -0.055798 -0.050000 +v -0.192059 -0.055798 0.050000 +v -0.288088 -0.083697 -0.050000 +v -0.288088 -0.083697 0.050000 +v -0.190211 -0.061803 -0.050000 +v -0.190211 -0.061803 0.050000 +v -0.285317 -0.092705 -0.050000 +v -0.285317 -0.092705 0.050000 +v -0.188176 -0.067748 -0.050000 +v -0.188176 -0.067748 0.050000 +v -0.282264 -0.101621 -0.050000 +v -0.282264 -0.101621 0.050000 +v -0.185955 -0.073625 -0.050000 +v -0.185955 -0.073625 0.050000 +v -0.278933 -0.110437 -0.050000 +v -0.278933 -0.110437 0.050000 +v -0.183551 -0.079430 -0.050000 +v -0.183551 -0.079430 0.050000 +v -0.275326 -0.119144 -0.050000 +v -0.275326 -0.119144 0.050000 +v -0.180965 -0.085156 -0.050000 +v -0.180965 -0.085156 0.050000 +v -0.271448 -0.127734 -0.050000 +v -0.271448 -0.127734 0.050000 +v -0.178201 -0.090798 -0.050000 +v -0.178201 -0.090798 0.050000 +v -0.267302 -0.136197 -0.050000 +v -0.267302 -0.136197 0.050000 +v -0.175261 -0.096351 -0.050000 +v -0.175261 -0.096351 0.050000 +v -0.262892 -0.144526 -0.050000 +v -0.262892 -0.144526 0.050000 +v -0.172148 -0.101808 -0.050000 +v -0.172148 -0.101808 0.050000 +v -0.258223 -0.152712 -0.050000 +v -0.258223 -0.152712 0.050000 +v -0.168866 -0.107165 -0.050000 +v -0.168866 -0.107165 0.050000 +v -0.253298 -0.160748 -0.050000 +v -0.253298 -0.160748 0.050000 +v -0.165416 -0.112417 -0.050000 +v -0.165416 -0.112417 0.050000 +v -0.248124 -0.168625 -0.050000 +v -0.248124 -0.168625 0.050000 +v -0.161803 -0.117557 -0.050000 +v -0.161803 -0.117557 0.050000 +v -0.242705 -0.176336 -0.050000 +v -0.242705 -0.176336 0.050000 +v -0.158031 -0.122581 -0.050000 +v -0.158031 -0.122581 0.050000 +v -0.237047 -0.183872 -0.050000 +v -0.237047 -0.183872 0.050000 +v -0.154103 -0.127485 -0.050000 +v -0.154103 -0.127485 0.050000 +v -0.231154 -0.191227 -0.050000 +v -0.231154 -0.191227 0.050000 +v -0.150022 -0.132262 -0.050000 +v -0.150022 -0.132262 0.050000 +v -0.225033 -0.198394 -0.050000 +v -0.225033 -0.198394 0.050000 +v -0.145794 -0.136909 -0.050000 +v -0.145794 -0.136909 0.050000 +v -0.218691 -0.205364 -0.050000 +v -0.218691 -0.205364 0.050000 +v -0.141421 -0.141421 -0.050000 +v -0.141421 -0.141421 0.050000 +v -0.212132 -0.212132 -0.050000 +v -0.212132 -0.212132 0.050000 +v -0.136909 -0.145794 -0.050000 +v -0.136909 -0.145794 0.050000 +v -0.205364 -0.218691 -0.050000 +v -0.205364 -0.218691 0.050000 +v -0.132262 -0.150022 -0.050000 +v -0.132262 -0.150022 0.050000 +v -0.198394 -0.225033 -0.050000 +v -0.198394 -0.225033 0.050000 +v -0.127485 -0.154103 -0.050000 +v -0.127485 -0.154103 0.050000 +v -0.191227 -0.231154 -0.050000 +v -0.191227 -0.231154 0.050000 +v -0.122581 -0.158031 -0.050000 +v -0.122581 -0.158031 0.050000 +v -0.183872 -0.237047 -0.050000 +v -0.183872 -0.237047 0.050000 +v -0.117557 -0.161803 -0.050000 +v -0.117557 -0.161803 0.050000 +v -0.176336 -0.242705 -0.050000 +v -0.176336 -0.242705 0.050000 +v -0.112417 -0.165416 -0.050000 +v -0.112417 -0.165416 0.050000 +v -0.168625 -0.248124 -0.050000 +v -0.168625 -0.248124 0.050000 +v -0.107165 -0.168866 -0.050000 +v -0.107165 -0.168866 0.050000 +v -0.160748 -0.253298 -0.050000 +v -0.160748 -0.253298 0.050000 +v -0.101808 -0.172148 -0.050000 +v -0.101808 -0.172148 0.050000 +v -0.152712 -0.258223 -0.050000 +v -0.152712 -0.258223 0.050000 +v -0.096351 -0.175261 -0.050000 +v -0.096351 -0.175261 0.050000 +v -0.144526 -0.262892 -0.050000 +v -0.144526 -0.262892 0.050000 +v -0.090798 -0.178201 -0.050000 +v -0.090798 -0.178201 0.050000 +v -0.136197 -0.267302 -0.050000 +v -0.136197 -0.267302 0.050000 +v -0.085156 -0.180965 -0.050000 +v -0.085156 -0.180965 0.050000 +v -0.127734 -0.271448 -0.050000 +v -0.127734 -0.271448 0.050000 +v -0.079430 -0.183551 -0.050000 +v -0.079430 -0.183551 0.050000 +v -0.119144 -0.275326 -0.050000 +v -0.119144 -0.275326 0.050000 +v -0.073625 -0.185955 -0.050000 +v -0.073625 -0.185955 0.050000 +v -0.110437 -0.278933 -0.050000 +v -0.110437 -0.278933 0.050000 +v -0.067748 -0.188176 -0.050000 +v -0.067748 -0.188176 0.050000 +v -0.101621 -0.282264 -0.050000 +v -0.101621 -0.282264 0.050000 +v -0.061803 -0.190211 -0.050000 +v -0.061803 -0.190211 0.050000 +v -0.092705 -0.285317 -0.050000 +v -0.092705 -0.285317 0.050000 +v -0.055798 -0.192059 -0.050000 +v -0.055798 -0.192059 0.050000 +v -0.083697 -0.288088 -0.050000 +v -0.083697 -0.288088 0.050000 +v -0.049738 -0.193717 -0.050000 +v -0.049738 -0.193717 0.050000 +v -0.074607 -0.290575 -0.050000 +v -0.074607 -0.290575 0.050000 +v -0.043629 -0.195183 -0.050000 +v -0.043629 -0.195183 0.050000 +v -0.065443 -0.292775 -0.050000 +v -0.065443 -0.292775 0.050000 +v -0.037476 -0.196457 -0.050000 +v -0.037476 -0.196457 0.050000 +v -0.056214 -0.294686 -0.050000 +v -0.056214 -0.294686 0.050000 +v -0.031287 -0.197538 -0.050000 +v -0.031287 -0.197538 0.050000 +v -0.046930 -0.296307 -0.050000 +v -0.046930 -0.296307 0.050000 +v -0.025067 -0.198423 -0.050000 +v -0.025067 -0.198423 0.050000 +v -0.037600 -0.297634 -0.050000 +v -0.037600 -0.297634 0.050000 +v -0.018822 -0.199112 -0.050000 +v -0.018822 -0.199112 0.050000 +v -0.028232 -0.298669 -0.050000 +v -0.028232 -0.298669 0.050000 +v -0.012558 -0.199605 -0.050000 +v -0.012558 -0.199605 0.050000 +v -0.018837 -0.299408 -0.050000 +v -0.018837 -0.299408 0.050000 +v -0.006282 -0.199901 -0.050000 +v -0.006282 -0.199901 0.050000 +v -0.009423 -0.299852 -0.050000 +v -0.009423 -0.299852 0.050000 + +f 4 3 2 1 +f 8 7 6 5 +f 12 11 10 9 +f 16 15 14 13 +f 20 19 18 17 +f 24 23 22 21 +f 17 18 26 25 +f 28 27 23 24 +f 25 26 30 29 +f 32 31 27 28 +f 29 30 34 33 +f 36 35 31 32 +f 33 34 38 37 +f 40 39 35 36 +f 37 38 42 41 +f 44 43 39 40 +f 41 42 46 45 +f 48 47 43 44 +f 45 46 50 49 +f 52 51 47 48 +f 49 50 54 53 +f 56 55 51 52 +f 53 54 58 57 +f 60 59 55 56 +f 57 58 62 61 +f 64 63 59 60 +f 61 62 66 65 +f 68 67 63 64 +f 65 66 70 69 +f 72 71 67 68 +f 69 70 74 73 +f 76 75 71 72 +f 73 74 78 77 +f 80 79 75 76 +f 77 78 82 81 +f 84 83 79 80 +f 81 82 86 85 +f 88 87 83 84 +f 85 86 90 89 +f 92 91 87 88 +f 89 90 94 93 +f 96 95 91 92 +f 93 94 98 97 +f 100 99 95 96 +f 97 98 102 101 +f 104 103 99 100 +f 101 102 106 105 +f 108 107 103 104 +f 105 106 110 109 +f 112 111 107 108 +f 109 110 114 113 +f 116 115 111 112 +f 113 114 118 117 +f 120 119 115 116 +f 117 118 122 121 +f 124 123 119 120 +f 121 122 126 125 +f 128 127 123 124 +f 125 126 130 129 +f 132 131 127 128 +f 129 130 134 133 +f 136 135 131 132 +f 133 134 138 137 +f 140 139 135 136 +f 137 138 142 141 +f 144 143 139 140 +f 141 142 146 145 +f 148 147 143 144 +f 145 146 150 149 +f 152 151 147 148 +f 149 150 154 153 +f 156 155 151 152 +f 153 154 158 157 +f 160 159 155 156 +f 157 158 162 161 +f 164 163 159 160 +f 161 162 166 165 +f 168 167 163 164 +f 165 166 170 169 +f 172 171 167 168 +f 169 170 174 173 +f 176 175 171 172 +f 173 174 178 177 +f 180 179 175 176 +f 177 178 182 181 +f 184 183 179 180 +f 181 182 186 185 +f 188 187 183 184 +f 185 186 190 189 +f 192 191 187 188 +f 189 190 194 193 +f 196 195 191 192 +f 193 194 198 197 +f 200 199 195 196 +f 197 198 202 201 +f 204 203 199 200 +f 201 202 206 205 +f 208 207 203 204 +f 205 206 210 209 +f 212 211 207 208 +f 209 210 214 213 +f 216 215 211 212 +f 213 214 218 217 +f 220 219 215 216 +f 217 218 222 221 +f 224 223 219 220 +f 221 222 226 225 +f 228 227 223 224 +f 225 226 230 229 +f 232 231 227 228 +f 229 230 234 233 +f 236 235 231 232 +f 233 234 238 237 +f 240 239 235 236 +f 237 238 242 241 +f 244 243 239 240 +f 241 242 246 245 +f 248 247 243 244 +f 245 246 250 249 +f 252 251 247 248 +f 249 250 254 253 +f 256 255 251 252 +f 253 254 258 257 +f 260 259 255 256 +f 257 258 262 261 +f 264 263 259 260 +f 261 262 266 265 +f 268 267 263 264 +f 265 266 270 269 +f 272 271 267 268 +f 269 270 274 273 +f 276 275 271 272 +f 273 274 278 277 +f 280 279 275 276 +f 277 278 282 281 +f 284 283 279 280 +f 281 282 286 285 +f 288 287 283 284 +f 285 286 290 289 +f 292 291 287 288 +f 289 290 294 293 +f 296 295 291 292 +f 293 294 298 297 +f 300 299 295 296 +f 297 298 302 301 +f 304 303 299 300 +f 301 302 306 305 +f 308 307 303 304 +f 305 306 310 309 +f 312 311 307 308 +f 309 310 314 313 +f 316 315 311 312 +f 313 314 318 317 +f 320 319 315 316 +f 317 318 322 321 +f 324 323 319 320 +f 321 322 326 325 +f 328 327 323 324 +f 325 326 330 329 +f 332 331 327 328 +f 329 330 334 333 +f 336 335 331 332 +f 333 334 338 337 +f 340 339 335 336 +f 337 338 342 341 +f 344 343 339 340 +f 341 342 346 345 +f 348 347 343 344 +f 345 346 350 349 +f 352 351 347 348 +f 349 350 354 353 +f 356 355 351 352 +f 353 354 358 357 +f 360 359 355 356 +f 357 358 362 361 +f 364 363 359 360 +f 361 362 366 365 +f 368 367 363 364 +f 365 366 370 369 +f 372 371 367 368 +f 369 370 374 373 +f 376 375 371 372 +f 373 374 378 377 +f 380 379 375 376 +f 377 378 382 381 +f 384 383 379 380 +f 381 382 386 385 +f 388 387 383 384 +f 385 386 390 389 +f 392 391 387 388 +f 389 390 394 393 +f 396 395 391 392 +f 393 394 398 397 +f 400 399 395 396 +f 397 398 402 401 +f 404 403 399 400 +f 401 402 406 405 +f 408 407 403 404 +f 405 406 410 409 +f 412 411 407 408 +f 409 410 414 413 +f 416 415 411 412 +f 413 414 418 417 +f 420 419 415 416 +f 417 418 422 421 +f 424 423 419 420 +f 421 422 426 425 +f 428 427 423 424 +f 425 426 430 429 +f 432 431 427 428 +f 429 430 434 433 +f 436 435 431 432 +f 433 434 438 437 +f 440 439 435 436 +f 437 438 442 441 +f 444 443 439 440 +f 441 442 446 445 +f 448 447 443 444 +f 445 446 450 449 +f 452 451 447 448 +f 449 450 454 453 +f 456 455 451 452 +f 453 454 458 457 +f 460 459 455 456 +f 457 458 462 461 +f 464 463 459 460 +f 461 462 466 465 +f 468 467 463 464 +f 465 466 470 469 +f 472 471 467 468 +f 469 470 474 473 +f 476 475 471 472 +f 473 474 478 477 +f 480 479 475 476 +f 477 478 482 481 +f 484 483 479 480 +f 481 482 486 485 +f 488 487 483 484 +f 485 486 490 489 +f 492 491 487 488 +f 489 490 494 493 +f 496 495 491 492 +f 493 494 498 497 +f 500 499 495 496 +f 497 498 502 501 +f 504 503 499 500 +f 501 502 506 505 +f 508 507 503 504 +f 505 506 510 509 +f 512 511 507 508 +f 509 510 514 513 +f 516 515 511 512 +f 513 514 518 517 +f 520 519 515 516 +f 517 518 522 521 +f 524 523 519 520 +f 521 522 526 525 +f 528 527 523 524 +f 525 526 530 529 +f 532 531 527 528 +f 529 530 534 533 +f 536 535 531 532 +f 533 534 538 537 +f 540 539 535 536 +f 537 538 542 541 +f 544 543 539 540 +f 541 542 546 545 +f 548 547 543 544 +f 545 546 550 549 +f 552 551 547 548 +f 549 550 554 553 +f 556 555 551 552 +f 553 554 558 557 +f 560 559 555 556 +f 557 558 562 561 +f 564 563 559 560 +f 561 562 566 565 +f 568 567 563 564 +f 565 566 570 569 +f 572 571 567 568 +f 569 570 574 573 +f 576 575 571 572 +f 573 574 578 577 +f 580 579 575 576 +f 577 578 582 581 +f 584 583 579 580 +f 581 582 586 585 +f 588 587 583 584 +f 585 586 590 589 +f 592 591 587 588 +f 589 590 594 593 +f 596 595 591 592 +f 593 594 598 597 +f 600 599 595 596 +f 597 598 602 601 +f 604 603 599 600 +f 601 602 606 605 +f 608 607 603 604 +f 605 606 610 609 +f 612 611 607 608 +f 609 610 614 613 +f 616 615 611 612 +f 613 614 618 617 +f 620 619 615 616 +f 617 618 622 621 +f 624 623 619 620 +f 621 622 626 625 +f 628 627 623 624 +f 625 626 630 629 +f 632 631 627 628 +f 629 630 634 633 +f 636 635 631 632 +f 633 634 638 637 +f 640 639 635 636 +f 637 638 642 641 +f 644 643 639 640 +f 641 642 646 645 +f 648 647 643 644 +f 645 646 650 649 +f 652 651 647 648 +f 649 650 654 653 +f 656 655 651 652 +f 653 654 658 657 +f 660 659 655 656 +f 657 658 662 661 +f 664 663 659 660 +f 661 662 666 665 +f 668 667 663 664 +f 665 666 670 669 +f 672 671 667 668 +f 669 670 674 673 +f 676 675 671 672 +f 673 674 678 677 +f 680 679 675 676 +f 677 678 682 681 +f 684 683 679 680 +f 681 682 686 685 +f 688 687 683 684 +f 685 686 690 689 +f 692 691 687 688 +f 689 690 694 693 +f 696 695 691 692 +f 693 694 698 697 +f 700 699 695 696 +f 697 698 702 701 +f 704 703 699 700 +f 701 702 706 705 +f 708 707 703 704 +f 705 706 710 709 +f 712 711 707 708 +f 709 710 714 713 +f 716 715 711 712 +f 713 714 718 717 +f 720 719 715 716 +f 717 718 722 721 +f 724 723 719 720 +f 721 722 726 725 +f 728 727 723 724 +f 725 726 730 729 +f 732 731 727 728 +f 729 730 734 733 +f 736 735 731 732 +f 733 734 738 737 +f 740 739 735 736 +f 737 738 742 741 +f 744 743 739 740 +f 741 742 746 745 +f 748 747 743 744 +f 745 746 750 749 +f 752 751 747 748 +f 749 750 754 753 +f 756 755 751 752 +f 753 754 758 757 +f 760 759 755 756 +f 757 758 762 761 +f 764 763 759 760 +f 761 762 766 765 +f 768 767 763 764 +f 765 766 770 769 +f 772 771 767 768 +f 769 770 774 773 +f 776 775 771 772 +f 773 774 778 777 +f 780 779 775 776 +f 777 778 782 781 +f 784 783 779 780 +f 781 782 786 785 +f 788 787 783 784 +f 785 786 790 789 +f 792 791 787 788 +f 789 790 794 793 +f 796 795 791 792 +f 793 794 798 797 +f 800 799 795 796 +f 797 798 802 801 +f 804 803 799 800 +f 801 802 806 805 +f 808 807 803 804 +f 805 806 810 809 +f 812 811 807 808 +f 809 810 814 813 +f 816 815 811 812 +f 813 814 19 20 +f 21 22 815 816 +f 817 818 819 820 +f 821 822 823 824 +f 825 826 827 828 +f 829 830 831 832 +f 833 834 835 836 +f 837 838 839 840 +f 841 842 843 844 +f 848 847 846 845 +f 852 851 850 849 +f 847 854 853 846 +f 856 852 849 855 +f 854 858 857 853 +f 860 856 855 859 +f 858 862 861 857 +f 864 860 859 863 +f 862 866 865 861 +f 868 864 863 867 +f 866 870 869 865 +f 872 868 867 871 +f 870 874 873 869 +f 876 872 871 875 +f 874 878 877 873 +f 880 876 875 879 +f 878 882 881 877 +f 884 880 879 883 +f 882 886 885 881 +f 888 884 883 887 +f 886 890 889 885 +f 892 888 887 891 +f 890 894 893 889 +f 896 892 891 895 +f 894 898 897 893 +f 900 896 895 899 +f 898 902 901 897 +f 904 900 899 903 +f 902 906 905 901 +f 908 904 903 907 +f 906 910 909 905 +f 912 908 907 911 +f 910 914 913 909 +f 916 912 911 915 +f 914 918 917 913 +f 920 916 915 919 +f 918 922 921 917 +f 924 920 919 923 +f 922 926 925 921 +f 928 924 923 927 +f 926 930 929 925 +f 932 928 927 931 +f 930 934 933 929 +f 936 932 931 935 +f 934 938 937 933 +f 940 936 935 939 +f 938 942 941 937 +f 944 940 939 943 +f 942 946 945 941 +f 948 944 943 947 +f 946 950 949 945 +f 952 948 947 951 +f 950 954 953 949 +f 956 952 951 955 +f 954 958 957 953 +f 960 956 955 959 +f 958 962 961 957 +f 964 960 959 963 +f 962 966 965 961 +f 968 964 963 967 +f 966 970 969 965 +f 972 968 967 971 +f 970 974 973 969 +f 976 972 971 975 +f 974 978 977 973 +f 980 976 975 979 +f 978 982 981 977 +f 984 980 979 983 +f 982 986 985 981 +f 988 984 983 987 +f 986 990 989 985 +f 992 988 987 991 +f 990 994 993 989 +f 996 992 991 995 +f 994 998 997 993 +f 1000 996 995 999 +f 998 1002 1001 997 +f 1004 1000 999 1003 +f 1002 1006 1005 1001 +f 1008 1004 1003 1007 +f 1006 1010 1009 1005 +f 1012 1008 1007 1011 +f 1010 1014 1013 1009 +f 1016 1012 1011 1015 +f 1014 1018 1017 1013 +f 1020 1016 1015 1019 +f 1018 1022 1021 1017 +f 1024 1020 1019 1023 +f 1022 1026 1025 1021 +f 1028 1024 1023 1027 +f 1026 1030 1029 1025 +f 1032 1028 1027 1031 +f 1030 1034 1033 1029 +f 1036 1032 1031 1035 +f 1034 1038 1037 1033 +f 1040 1036 1035 1039 +f 1038 1042 1041 1037 +f 1044 1040 1039 1043 +f 1042 1046 1045 1041 +f 1048 1044 1043 1047 +f 1046 1050 1049 1045 +f 1052 1048 1047 1051 +f 1050 1054 1053 1049 +f 1056 1052 1051 1055 +f 1054 1058 1057 1053 +f 1060 1056 1055 1059 +f 1058 1062 1061 1057 +f 1064 1060 1059 1063 +f 1062 1066 1065 1061 +f 1068 1064 1063 1067 +f 1066 1070 1069 1065 +f 1072 1068 1067 1071 +f 1070 1074 1073 1069 +f 1076 1072 1071 1075 +f 1074 1078 1077 1073 +f 1080 1076 1075 1079 +f 1078 1082 1081 1077 +f 1084 1080 1079 1083 +f 1082 1086 1085 1081 +f 1088 1084 1083 1087 +f 1086 1090 1089 1085 +f 1092 1088 1087 1091 +f 1090 1094 1093 1089 +f 1096 1092 1091 1095 +f 1094 1098 1097 1093 +f 1100 1096 1095 1099 +f 1098 1102 1101 1097 +f 1104 1100 1099 1103 +f 1102 1106 1105 1101 +f 1108 1104 1103 1107 +f 1106 1110 1109 1105 +f 1112 1108 1107 1111 +f 1110 1114 1113 1109 +f 1116 1112 1111 1115 +f 1114 1118 1117 1113 +f 1120 1116 1115 1119 +f 1118 1122 1121 1117 +f 1124 1120 1119 1123 +f 1122 1126 1125 1121 +f 1128 1124 1123 1127 +f 1126 1130 1129 1125 +f 1132 1128 1127 1131 +f 1130 1134 1133 1129 +f 1136 1132 1131 1135 +f 1134 1138 1137 1133 +f 1140 1136 1135 1139 +f 1138 1142 1141 1137 +f 1144 1140 1139 1143 +f 1142 1146 1145 1141 +f 1148 1144 1143 1147 +f 1146 1150 1149 1145 +f 1152 1148 1147 1151 +f 1150 1154 1153 1149 +f 1156 1152 1151 1155 +f 1154 1158 1157 1153 +f 1160 1156 1155 1159 +f 1158 1162 1161 1157 +f 1164 1160 1159 1163 +f 1162 1166 1165 1161 +f 1168 1164 1163 1167 +f 1166 1170 1169 1165 +f 1172 1168 1167 1171 +f 1170 1174 1173 1169 +f 1176 1172 1171 1175 +f 1174 1178 1177 1173 +f 1180 1176 1175 1179 +f 1178 1182 1181 1177 +f 1184 1180 1179 1183 +f 1182 1186 1185 1181 +f 1188 1184 1183 1187 +f 1186 1190 1189 1185 +f 1192 1188 1187 1191 +f 1190 1194 1193 1189 +f 1196 1192 1191 1195 +f 1194 1198 1197 1193 +f 1200 1196 1195 1199 +f 1198 1202 1201 1197 +f 1204 1200 1199 1203 +f 1202 1206 1205 1201 +f 1208 1204 1203 1207 +f 1206 1210 1209 1205 +f 1212 1208 1207 1211 +f 1210 1214 1213 1209 +f 1216 1212 1211 1215 +f 1214 1218 1217 1213 +f 1220 1216 1215 1219 +f 1218 1222 1221 1217 +f 1224 1220 1219 1223 +f 1222 1226 1225 1221 +f 1228 1224 1223 1227 +f 1226 1230 1229 1225 +f 1232 1228 1227 1231 +f 1230 1234 1233 1229 +f 1236 1232 1231 1235 +f 1234 1238 1237 1233 +f 1240 1236 1235 1239 +f 1238 1242 1241 1237 +f 1244 1240 1239 1243 +f 1242 1246 1245 1241 +f 1248 1244 1243 1247 +f 1246 1250 1249 1245 +f 1252 1248 1247 1251 +f 1250 1254 1253 1249 +f 1256 1252 1251 1255 +f 1254 1258 1257 1253 +f 1260 1256 1255 1259 +f 1258 1262 1261 1257 +f 1264 1260 1259 1263 +f 1262 1266 1265 1261 +f 1268 1264 1263 1267 +f 1266 1270 1269 1265 +f 1272 1268 1267 1271 +f 1270 1274 1273 1269 +f 1276 1272 1271 1275 +f 1274 1278 1277 1273 +f 1280 1276 1275 1279 +f 1278 1282 1281 1277 +f 1284 1280 1279 1283 +f 1282 1286 1285 1281 +f 1288 1284 1283 1287 +f 1286 1290 1289 1285 +f 1292 1288 1287 1291 +f 1290 1294 1293 1289 +f 1296 1292 1291 1295 +f 1294 1298 1297 1293 +f 1300 1296 1295 1299 +f 1298 1302 1301 1297 +f 1304 1300 1299 1303 +f 1302 1306 1305 1301 +f 1308 1304 1303 1307 +f 1306 1310 1309 1305 +f 1312 1308 1307 1311 +f 1310 1314 1313 1309 +f 1316 1312 1311 1315 +f 1314 1318 1317 1313 +f 1320 1316 1315 1319 +f 1318 1322 1321 1317 +f 1324 1320 1319 1323 +f 1322 1326 1325 1321 +f 1328 1324 1323 1327 +f 1326 1330 1329 1325 +f 1332 1328 1327 1331 +f 1330 1334 1333 1329 +f 1336 1332 1331 1335 +f 1334 1338 1337 1333 +f 1340 1336 1335 1339 +f 1338 1342 1341 1337 +f 1344 1340 1339 1343 +f 1342 1346 1345 1341 +f 1348 1344 1343 1347 +f 1346 1350 1349 1345 +f 1352 1348 1347 1351 +f 1350 1354 1353 1349 +f 1356 1352 1351 1355 +f 1354 1358 1357 1353 +f 1360 1356 1355 1359 +f 1358 1362 1361 1357 +f 1364 1360 1359 1363 +f 1362 1366 1365 1361 +f 1368 1364 1363 1367 +f 1366 1370 1369 1365 +f 1372 1368 1367 1371 +f 1370 1374 1373 1369 +f 1376 1372 1371 1375 +f 1374 1378 1377 1373 +f 1380 1376 1375 1379 +f 1378 1382 1381 1377 +f 1384 1380 1379 1383 +f 1382 1386 1385 1381 +f 1388 1384 1383 1387 +f 1386 1390 1389 1385 +f 1392 1388 1387 1391 +f 1390 1394 1393 1389 +f 1396 1392 1391 1395 +f 1394 1398 1397 1393 +f 1400 1396 1395 1399 +f 1398 1402 1401 1397 +f 1404 1400 1399 1403 +f 1402 1406 1405 1401 +f 1408 1404 1403 1407 +f 1406 1410 1409 1405 +f 1412 1408 1407 1411 +f 1410 1414 1413 1409 +f 1416 1412 1411 1415 +f 1414 1418 1417 1413 +f 1420 1416 1415 1419 +f 1418 1422 1421 1417 +f 1424 1420 1419 1423 +f 1422 1426 1425 1421 +f 1428 1424 1423 1427 +f 1426 1430 1429 1425 +f 1432 1428 1427 1431 +f 1430 1434 1433 1429 +f 1436 1432 1431 1435 +f 1434 1438 1437 1433 +f 1440 1436 1435 1439 +f 1438 1442 1441 1437 +f 1444 1440 1439 1443 +f 1442 1446 1445 1441 +f 1448 1444 1443 1447 +f 1446 1450 1449 1445 +f 1452 1448 1447 1451 +f 1450 1454 1453 1449 +f 1456 1452 1451 1455 +f 1454 1458 1457 1453 +f 1460 1456 1455 1459 +f 1458 1462 1461 1457 +f 1464 1460 1459 1463 +f 1462 1466 1465 1461 +f 1468 1464 1463 1467 +f 1466 1470 1469 1465 +f 1472 1468 1467 1471 +f 1470 1474 1473 1469 +f 1476 1472 1471 1475 +f 1474 1478 1477 1473 +f 1480 1476 1475 1479 +f 1478 1482 1481 1477 +f 1484 1480 1479 1483 +f 1482 1486 1485 1481 +f 1488 1484 1483 1487 +f 1486 1490 1489 1485 +f 1492 1488 1487 1491 +f 1490 1494 1493 1489 +f 1496 1492 1491 1495 +f 1494 1498 1497 1493 +f 1500 1496 1495 1499 +f 1498 1502 1501 1497 +f 1504 1500 1499 1503 +f 1502 1506 1505 1501 +f 1508 1504 1503 1507 +f 1506 1510 1509 1505 +f 1512 1508 1507 1511 +f 1510 1514 1513 1509 +f 1516 1512 1511 1515 +f 1514 1518 1517 1513 +f 1520 1516 1515 1519 +f 1518 1522 1521 1517 +f 1524 1520 1519 1523 +f 1522 1526 1525 1521 +f 1528 1524 1523 1527 +f 1526 1530 1529 1525 +f 1532 1528 1527 1531 +f 1530 1534 1533 1529 +f 1536 1532 1531 1535 +f 1534 1538 1537 1533 +f 1540 1536 1535 1539 +f 1538 1542 1541 1537 +f 1544 1540 1539 1543 +f 1542 1546 1545 1541 +f 1548 1544 1543 1547 +f 1546 1550 1549 1545 +f 1552 1548 1547 1551 +f 1550 1554 1553 1549 +f 1556 1552 1551 1555 +f 1554 1558 1557 1553 +f 1560 1556 1555 1559 +f 1558 1562 1561 1557 +f 1564 1560 1559 1563 +f 1562 1566 1565 1561 +f 1568 1564 1563 1567 +f 1566 1570 1569 1565 +f 1572 1568 1567 1571 +f 1570 1574 1573 1569 +f 1576 1572 1571 1575 +f 1574 1578 1577 1573 +f 1580 1576 1575 1579 +f 1578 1582 1581 1577 +f 1584 1580 1579 1583 +f 1582 1586 1585 1581 +f 1588 1584 1583 1587 +f 1586 1590 1589 1585 +f 1592 1588 1587 1591 +f 1590 1594 1593 1589 +f 1596 1592 1591 1595 +f 1594 1598 1597 1593 +f 1600 1596 1595 1599 +f 1598 1602 1601 1597 +f 1604 1600 1599 1603 +f 1602 1606 1605 1601 +f 1608 1604 1603 1607 +f 1606 1610 1609 1605 +f 1612 1608 1607 1611 +f 1610 1614 1613 1609 +f 1616 1612 1611 1615 +f 1614 1618 1617 1613 +f 1620 1616 1615 1619 +f 1618 1622 1621 1617 +f 1624 1620 1619 1623 +f 1622 1626 1625 1621 +f 1628 1624 1623 1627 +f 1626 1630 1629 1625 +f 1632 1628 1627 1631 +f 1630 1634 1633 1629 +f 1636 1632 1631 1635 +f 1634 1638 1637 1633 +f 1640 1636 1635 1639 +f 1638 1642 1641 1637 +f 1644 1640 1639 1643 +f 1642 848 845 1641 +f 851 1644 1643 850 @@ -7,6 +7,8 @@ TARGET = DEPENDPATH += . INCLUDEPATH += . +QMAKE_CXXFLAGS += -g + QT += webkit opengl script contains(QT_CONFIG, phonon):{ @@ -31,3 +33,7 @@ DEPLOYMENT_PLUGIN += phonon_ds9 phonon_waveout # Input HEADERS += entity.h mazescene.h matrix4x4.h scriptwidget.h SOURCES += main.cpp entity.cpp mazescene.cpp matrix4x4.cpp scriptwidget.cpp + +# From modelviewer +HEADERS += modelitem.h point3d.h model.h +SOURCES += model.cpp modelitem.cpp |