diff --git a/README.md b/README.md index 8ad06c2..8d7eded 100755 --- a/README.md +++ b/README.md @@ -1,3 +1,7 @@ +# Archived + +This has been archived and will no longer be maintained. Please use [three_js](https://github.com/Knightro63/three_js) in the future. + # Flutter Cube [![pub package](https://img.shields.io/pub/v/flutter_cube.svg)](https://pub.dev/packages/flutter_cube) @@ -10,7 +14,7 @@ Add flutter_cube as a dependency in your pubspec.yaml file. ```yaml dependencies: - flutter_cube: ^0.1.0 + flutter_cube: ^0.2.0 ``` Add Wavefront's object files to assets. @@ -45,4 +49,4 @@ import 'package:flutter_cube/flutter_cube.dart'; ## Screenshot -![screenshot](https://github.com/zesage/flutter_cube/raw/master/resource/screenshot.gif) ![screenshot](https://github.com/zesage/flutter_cube/raw/master/resource/ruby_rose.gif) ![screenshot](https://github.com/zesage/flutter_cube/raw/master/resource/planet.gif) \ No newline at end of file +![screenshot](https://github.com/zesage/flutter_cube/raw/master/resource/screenshot.gif) ![screenshot](https://github.com/zesage/flutter_cube/raw/master/resource/ruby_rose.gif) ![screenshot](https://github.com/zesage/flutter_cube/raw/master/resource/planet.gif) diff --git a/example/modifers/README.md b/example/modifers/README.md new file mode 100644 index 0000000..0bc306d --- /dev/null +++ b/example/modifers/README.md @@ -0,0 +1,16 @@ +# modifers + +A new Flutter project. + +## Getting Started + +This project is a starting point for a Flutter application. + +A few resources to get you started if this is your first Flutter project: + +- [Lab: Write your first Flutter app](https://flutter.dev/docs/get-started/codelab) +- [Cookbook: Useful Flutter samples](https://flutter.dev/docs/cookbook) + +For help getting started with Flutter, view our +[online documentation](https://flutter.dev/docs), which offers tutorials, +samples, guidance on mobile development, and a full API reference. diff --git a/example/modifers/android/app/build.gradle b/example/modifers/android/app/build.gradle new file mode 100644 index 0000000..12f0fd9 --- /dev/null +++ b/example/modifers/android/app/build.gradle @@ -0,0 +1,68 @@ +def localProperties = new Properties() +def localPropertiesFile = rootProject.file('local.properties') +if (localPropertiesFile.exists()) { + localPropertiesFile.withReader('UTF-8') { reader -> + localProperties.load(reader) + } +} + +def flutterRoot = localProperties.getProperty('flutter.sdk') +if (flutterRoot == null) { + throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") +} + +def flutterVersionCode = localProperties.getProperty('flutter.versionCode') +if (flutterVersionCode == null) { + flutterVersionCode = '1' +} + +def flutterVersionName = localProperties.getProperty('flutter.versionName') +if (flutterVersionName == null) { + flutterVersionName = '1.0' +} + +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' +apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" + +android { + compileSdkVersion flutter.compileSdkVersion + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = '1.8' + } + + sourceSets { + main.java.srcDirs += 'src/main/kotlin' + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId "com.example.modifers" + minSdkVersion flutter.minSdkVersion + targetSdkVersion flutter.targetSdkVersion + versionCode flutterVersionCode.toInteger() + versionName flutterVersionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig signingConfigs.debug + } + } +} + +flutter { + source '../..' +} + +dependencies { + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" +} diff --git a/example/modifers/android/app/src/debug/AndroidManifest.xml b/example/modifers/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 0000000..25bc3eb --- /dev/null +++ b/example/modifers/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/example/modifers/android/app/src/main/AndroidManifest.xml b/example/modifers/android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..c24af0f --- /dev/null +++ b/example/modifers/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + diff --git a/example/modifers/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java b/example/modifers/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java new file mode 100644 index 0000000..539ab02 --- /dev/null +++ b/example/modifers/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java @@ -0,0 +1,19 @@ +package io.flutter.plugins; + +import androidx.annotation.Keep; +import androidx.annotation.NonNull; +import io.flutter.Log; + +import io.flutter.embedding.engine.FlutterEngine; + +/** + * Generated file. Do not edit. + * This file is generated by the Flutter tool based on the + * plugins that support the Android platform. + */ +@Keep +public final class GeneratedPluginRegistrant { + private static final String TAG = "GeneratedPluginRegistrant"; + public static void registerWith(@NonNull FlutterEngine flutterEngine) { + } +} diff --git a/example/modifers/android/app/src/main/kotlin/com/example/modifers/MainActivity.kt b/example/modifers/android/app/src/main/kotlin/com/example/modifers/MainActivity.kt new file mode 100644 index 0000000..3948c49 --- /dev/null +++ b/example/modifers/android/app/src/main/kotlin/com/example/modifers/MainActivity.kt @@ -0,0 +1,6 @@ +package com.example.modifers + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity: FlutterActivity() { +} diff --git a/example/modifers/android/app/src/main/res/drawable-v21/launch_background.xml b/example/modifers/android/app/src/main/res/drawable-v21/launch_background.xml new file mode 100644 index 0000000..1cb7aa2 --- /dev/null +++ b/example/modifers/android/app/src/main/res/drawable-v21/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/example/modifers/android/app/src/main/res/drawable/launch_background.xml b/example/modifers/android/app/src/main/res/drawable/launch_background.xml new file mode 100644 index 0000000..8403758 --- /dev/null +++ b/example/modifers/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/example/modifers/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/example/modifers/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000..db77bb4 Binary files /dev/null and b/example/modifers/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/example/modifers/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/example/modifers/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000..17987b7 Binary files /dev/null and b/example/modifers/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/example/modifers/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/example/modifers/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000..09d4391 Binary files /dev/null and b/example/modifers/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/example/modifers/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/example/modifers/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000..d5f1c8d Binary files /dev/null and b/example/modifers/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/example/modifers/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/example/modifers/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000..4d6372e Binary files /dev/null and b/example/modifers/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/example/modifers/android/app/src/main/res/values-night/styles.xml b/example/modifers/android/app/src/main/res/values-night/styles.xml new file mode 100644 index 0000000..6b2369f --- /dev/null +++ b/example/modifers/android/app/src/main/res/values-night/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/example/modifers/android/app/src/main/res/values/styles.xml b/example/modifers/android/app/src/main/res/values/styles.xml new file mode 100644 index 0000000..3e29b54 --- /dev/null +++ b/example/modifers/android/app/src/main/res/values/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/example/modifers/android/app/src/profile/AndroidManifest.xml b/example/modifers/android/app/src/profile/AndroidManifest.xml new file mode 100644 index 0000000..25bc3eb --- /dev/null +++ b/example/modifers/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/example/modifers/android/build.gradle b/example/modifers/android/build.gradle new file mode 100644 index 0000000..871ba76 --- /dev/null +++ b/example/modifers/android/build.gradle @@ -0,0 +1,31 @@ +buildscript { + ext.kotlin_version = '1.6.10' + repositories { + google() + mavenCentral() + } + + dependencies { + classpath 'com.android.tools.build:gradle:4.1.0' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + } +} + +allprojects { + repositories { + google() + mavenCentral() + } +} + +rootProject.buildDir = '../build' +subprojects { + project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { + project.evaluationDependsOn(':app') +} + +task clean(type: Delete) { + delete rootProject.buildDir +} diff --git a/example/modifers/android/gradle.properties b/example/modifers/android/gradle.properties new file mode 100644 index 0000000..46c1f16 --- /dev/null +++ b/example/modifers/android/gradle.properties @@ -0,0 +1,3 @@ +org.gradle.jvmargs=-Xmx1536M +android.useAndroidX=true +android.enableJetifier=true diff --git a/example/modifers/android/gradle/wrapper/gradle-wrapper.jar b/example/modifers/android/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000..13372ae Binary files /dev/null and b/example/modifers/android/gradle/wrapper/gradle-wrapper.jar differ diff --git a/example/modifers/android/gradle/wrapper/gradle-wrapper.properties b/example/modifers/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..571984a --- /dev/null +++ b/example/modifers/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Fri Jun 23 08:50:38 CEST 2017 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip diff --git a/example/modifers/android/gradlew b/example/modifers/android/gradlew new file mode 100644 index 0000000..9d82f78 --- /dev/null +++ b/example/modifers/android/gradlew @@ -0,0 +1,160 @@ +#!/usr/bin/env bash + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn ( ) { + echo "$*" +} + +die ( ) { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; +esac + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules +function splitJvmOpts() { + JVM_OPTS=("$@") +} +eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS +JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" + +exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/example/modifers/android/gradlew.bat b/example/modifers/android/gradlew.bat new file mode 100644 index 0000000..aec9973 --- /dev/null +++ b/example/modifers/android/gradlew.bat @@ -0,0 +1,90 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windowz variants + +if not "%OS%" == "Windows_NT" goto win9xME_args +if "%@eval[2+2]" == "4" goto 4NT_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* +goto execute + +:4NT_args +@rem Get arguments from the 4NT Shell from JP Software +set CMD_LINE_ARGS=%$ + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/example/modifers/android/local.properties b/example/modifers/android/local.properties new file mode 100644 index 0000000..8507d55 --- /dev/null +++ b/example/modifers/android/local.properties @@ -0,0 +1,2 @@ +sdk.dir=C:\\Users\\johns\\AppData\\Local\\Android\\Sdk +flutter.sdk=C:\\src\\flutter \ No newline at end of file diff --git a/example/modifers/android/modifers_android.iml b/example/modifers/android/modifers_android.iml new file mode 100644 index 0000000..5e74ee6 --- /dev/null +++ b/example/modifers/android/modifers_android.iml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/example/modifers/android/settings.gradle b/example/modifers/android/settings.gradle new file mode 100644 index 0000000..33f0745 --- /dev/null +++ b/example/modifers/android/settings.gradle @@ -0,0 +1,11 @@ +include ':app' + +def localPropertiesFile = new File(rootProject.projectDir, "local.properties") +def properties = new Properties() + +assert localPropertiesFile.exists() +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } + +def flutterSdkPath = properties.getProperty("flutter.sdk") +assert flutterSdkPath != null, "flutter.sdk not set in local.properties" +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/example/modifers/assets/4096_normal.jpg b/example/modifers/assets/4096_normal.jpg new file mode 100644 index 0000000..c9c6501 Binary files /dev/null and b/example/modifers/assets/4096_normal.jpg differ diff --git a/example/modifers/assets/Untitled.png b/example/modifers/assets/Untitled.png new file mode 100644 index 0000000..cfa969a Binary files /dev/null and b/example/modifers/assets/Untitled.png differ diff --git a/example/modifers/assets/earth_w_nm.mtl b/example/modifers/assets/earth_w_nm.mtl new file mode 100644 index 0000000..76baaad --- /dev/null +++ b/example/modifers/assets/earth_w_nm.mtl @@ -0,0 +1,13 @@ +# Blender MTL File: 'None' +# Material Count: 1 + +newmtl Material.001 +Ns 225.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Bump 4096_normal.jpg diff --git a/example/modifers/assets/earth_w_nm.obj b/example/modifers/assets/earth_w_nm.obj new file mode 100644 index 0000000..6df1567 --- /dev/null +++ b/example/modifers/assets/earth_w_nm.obj @@ -0,0 +1,2041 @@ +# Blender v2.82 (sub 7) OBJ File: '' +# www.blender.org +mtllib earth_w_nm.mtl +o Sphere +v 0.000000 0.980785 -0.195090 +v 0.000000 0.923880 -0.382683 +v 0.000000 0.831470 -0.555570 +v 0.000000 0.707107 -0.707107 +v 0.000000 0.555570 -0.831470 +v 0.000000 0.382683 -0.923880 +v 0.000000 0.195090 -0.980785 +v 0.000000 0.000000 -1.000000 +v 0.000000 -0.195090 -0.980785 +v 0.000000 -0.831470 -0.555570 +v 0.038060 0.980785 -0.191342 +v 0.074658 0.923880 -0.375330 +v 0.108386 0.831470 -0.544895 +v 0.137950 0.707107 -0.693520 +v 0.162212 0.555570 -0.815493 +v 0.180240 0.382683 -0.906127 +v 0.191342 0.195090 -0.961940 +v 0.195090 0.000000 -0.980785 +v 0.191342 -0.195090 -0.961940 +v 0.180240 -0.382683 -0.906127 +v 0.162212 -0.555570 -0.815493 +v 0.137950 -0.707107 -0.693520 +v 0.108386 -0.831470 -0.544895 +v 0.074658 -0.923880 -0.375330 +v 0.038060 -0.980785 -0.191341 +v 0.074658 0.980785 -0.180240 +v 0.146447 0.923880 -0.353553 +v 0.212608 0.831470 -0.513280 +v 0.270598 0.707107 -0.653281 +v 0.318190 0.555570 -0.768178 +v 0.353553 0.382683 -0.853553 +v 0.375330 0.195090 -0.906127 +v 0.382684 0.000000 -0.923879 +v 0.375330 -0.195090 -0.906127 +v 0.353554 -0.382683 -0.853553 +v 0.318190 -0.555570 -0.768178 +v 0.270598 -0.707107 -0.653281 +v 0.212608 -0.831470 -0.513280 +v 0.146447 -0.923880 -0.353553 +v 0.074658 -0.980785 -0.180240 +v 0.108387 0.980785 -0.162212 +v 0.212608 0.923880 -0.318190 +v 0.308658 0.831470 -0.461940 +v 0.392848 0.707107 -0.587938 +v 0.461940 0.555570 -0.691342 +v 0.513280 0.382683 -0.768178 +v 0.544895 0.195090 -0.815493 +v 0.555570 0.000000 -0.831469 +v 0.544895 -0.195090 -0.815493 +v 0.513280 -0.382683 -0.768178 +v 0.461940 -0.555570 -0.691342 +v 0.392848 -0.707107 -0.587938 +v 0.308658 -0.831470 -0.461940 +v 0.212608 -0.923880 -0.318189 +v 0.108386 -0.980785 -0.162211 +v 0.137950 0.980785 -0.137950 +v 0.270598 0.923880 -0.270598 +v 0.392848 0.831470 -0.392847 +v 0.500000 0.707107 -0.500000 +v 0.587938 0.555570 -0.587938 +v 0.653282 0.382683 -0.653281 +v 0.693520 0.195090 -0.693520 +v 0.707107 0.000000 -0.707107 +v 0.693520 -0.195090 -0.693520 +v 0.653282 -0.382683 -0.653281 +v 0.587938 -0.555570 -0.587938 +v 0.500000 -0.707107 -0.500000 +v 0.392848 -0.831470 -0.392847 +v 0.270598 -0.923880 -0.270598 +v 0.137950 -0.980785 -0.137949 +v 0.162212 0.980785 -0.108386 +v 0.318190 0.923880 -0.212607 +v 0.461940 0.831470 -0.308658 +v 0.587938 0.707107 -0.392847 +v 0.691342 0.555570 -0.461940 +v 0.768178 0.382683 -0.513280 +v 0.815493 0.195090 -0.544895 +v 0.831470 0.000000 -0.555570 +v 0.815493 -0.195090 -0.544895 +v 0.768178 -0.382683 -0.513280 +v 0.691342 -0.555570 -0.461940 +v 0.587938 -0.707107 -0.392847 +v 0.461940 -0.831470 -0.308658 +v 0.318190 -0.923880 -0.212607 +v 0.162212 -0.980785 -0.108386 +v 0.180240 0.980785 -0.074658 +v 0.353554 0.923880 -0.146446 +v 0.513280 0.831470 -0.212607 +v 0.653282 0.707107 -0.270598 +v 0.768178 0.555570 -0.318189 +v 0.853554 0.382683 -0.353553 +v 0.906128 0.195090 -0.375330 +v 0.923880 0.000000 -0.382683 +v 0.906128 -0.195090 -0.375330 +v 0.853554 -0.382683 -0.353553 +v 0.768178 -0.555570 -0.318189 +v 0.653282 -0.707107 -0.270598 +v 0.513280 -0.831470 -0.212607 +v 0.353554 -0.923880 -0.146446 +v 0.180240 -0.980785 -0.074658 +v 0.191342 0.980785 -0.038060 +v 0.375331 0.923880 -0.074658 +v 0.544895 0.831470 -0.108386 +v 0.693520 0.707107 -0.137949 +v 0.815493 0.555570 -0.162211 +v 0.906128 0.382683 -0.180240 +v 0.961940 0.195090 -0.191341 +v 0.980785 0.000000 -0.195090 +v 0.961940 -0.195090 -0.191341 +v 0.906128 -0.382683 -0.180240 +v 0.815493 -0.555570 -0.162211 +v 0.693520 -0.707107 -0.137949 +v 0.544895 -0.831470 -0.108386 +v 0.375330 -0.923880 -0.074658 +v 0.191342 -0.980785 -0.038060 +v 0.195091 0.980785 0.000000 +v 0.382684 0.923880 0.000000 +v 0.555570 0.831470 0.000000 +v 0.707107 0.707107 0.000000 +v 0.831470 0.555570 0.000000 +v 0.923880 0.382683 0.000000 +v 0.980785 0.195090 0.000000 +v 1.000000 0.000000 0.000000 +v 0.980785 -0.195090 0.000000 +v 0.923880 -0.382683 0.000000 +v 0.831470 -0.555570 0.000000 +v 0.707107 -0.707107 0.000000 +v 0.555570 -0.831470 0.000000 +v 0.382684 -0.923880 0.000000 +v 0.195090 -0.980785 0.000000 +v 0.191342 0.980785 0.038061 +v 0.375331 0.923880 0.074658 +v 0.544895 0.831470 0.108387 +v 0.693520 0.707107 0.137950 +v 0.815493 0.555570 0.162212 +v 0.906128 0.382683 0.180240 +v 0.961940 0.195090 0.191342 +v 0.980785 0.000000 0.195091 +v 0.961940 -0.195090 0.191342 +v 0.906128 -0.382683 0.180240 +v 0.815493 -0.555570 0.162212 +v 0.693520 -0.707107 0.137950 +v 0.544895 -0.831470 0.108387 +v 0.375330 -0.923880 0.074658 +v 0.191342 -0.980785 0.038061 +v 0.180240 0.980785 0.074658 +v 0.353554 0.923880 0.146447 +v 0.513280 0.831470 0.212608 +v 0.653282 0.707107 0.270598 +v 0.768178 0.555570 0.318190 +v 0.853554 0.382683 0.353554 +v 0.906127 0.195090 0.375331 +v 0.923880 0.000000 0.382684 +v 0.906127 -0.195090 0.375331 +v 0.853554 -0.382683 0.353554 +v 0.768178 -0.555570 0.318190 +v 0.653282 -0.707107 0.270598 +v 0.513280 -0.831470 0.212608 +v 0.353553 -0.923880 0.146447 +v 0.180240 -0.980785 0.074658 +v 0.162212 0.980785 0.108387 +v 0.318190 0.923880 0.212608 +v 0.461940 0.831470 0.308659 +v 0.587938 0.707107 0.392848 +v 0.691342 0.555570 0.461940 +v 0.768178 0.382683 0.513280 +v 0.815493 0.195090 0.544895 +v 0.831470 0.000000 0.555571 +v 0.815493 -0.195090 0.544895 +v 0.768178 -0.382683 0.513280 +v 0.691342 -0.555570 0.461940 +v 0.587938 -0.707107 0.392848 +v 0.461940 -0.831470 0.308659 +v 0.318190 -0.923880 0.212608 +v 0.162212 -0.980785 0.108387 +v 0.137950 0.980785 0.137950 +v 0.270598 0.923880 0.270599 +v 0.392848 0.831470 0.392848 +v 0.500000 0.707107 0.500000 +v 0.587938 0.555570 0.587938 +v 0.653282 0.382683 0.653282 +v 0.693520 0.195090 0.693520 +v 0.707107 0.000000 0.707107 +v 0.693520 -0.195090 0.693520 +v 0.653282 -0.382683 0.653282 +v 0.587938 -0.555570 0.587938 +v 0.500000 -0.707107 0.500000 +v 0.392848 -0.831470 0.392848 +v 0.270598 -0.923880 0.270598 +v 0.137950 -0.980785 0.137950 +v 0.108386 0.980785 0.162212 +v 0.212608 0.923880 0.318190 +v 0.308658 0.831470 0.461940 +v 0.392848 0.707107 0.587938 +v 0.461940 0.555570 0.691342 +v 0.513280 0.382683 0.768178 +v 0.544895 0.195090 0.815493 +v 0.555570 0.000000 0.831470 +v 0.544895 -0.195090 0.815493 +v 0.513280 -0.382683 0.768178 +v 0.461940 -0.555570 0.691342 +v 0.392848 -0.707107 0.587938 +v 0.308658 -0.831470 0.461940 +v 0.212608 -0.923880 0.318190 +v 0.108386 -0.980785 0.162212 +v 0.000000 -1.000000 0.000000 +v 0.074658 0.980785 0.180240 +v 0.146447 0.923880 0.353554 +v 0.212608 0.831470 0.513280 +v 0.270598 0.707107 0.653282 +v 0.318190 0.555570 0.768178 +v 0.353553 0.382683 0.853554 +v 0.375330 0.195090 0.906128 +v 0.382683 0.000000 0.923880 +v 0.375330 -0.195090 0.906128 +v 0.353553 -0.382683 0.853554 +v 0.318190 -0.555570 0.768178 +v 0.270598 -0.707107 0.653282 +v 0.212608 -0.831470 0.513280 +v 0.146447 -0.923880 0.353554 +v 0.074658 -0.980785 0.180240 +v 0.038060 0.980785 0.191342 +v 0.074658 0.923880 0.375331 +v 0.108386 0.831470 0.544896 +v 0.137950 0.707107 0.693520 +v 0.162212 0.555570 0.815493 +v 0.180240 0.382683 0.906128 +v 0.191342 0.195090 0.961940 +v 0.195090 0.000000 0.980786 +v 0.191342 -0.195090 0.961940 +v 0.180240 -0.382683 0.906128 +v 0.162212 -0.555570 0.815493 +v 0.137950 -0.707107 0.693520 +v 0.108386 -0.831470 0.544895 +v 0.074658 -0.923880 0.375331 +v 0.038060 -0.980785 0.191342 +v -0.000000 0.980785 0.195091 +v 0.000000 0.923880 0.382684 +v 0.000000 0.831470 0.555571 +v -0.000000 0.707107 0.707107 +v -0.000000 0.555570 0.831470 +v 0.000000 0.382683 0.923880 +v -0.000000 0.195090 0.980785 +v -0.000000 0.000000 1.000000 +v -0.000000 -0.195090 0.980785 +v 0.000000 -0.382683 0.923880 +v -0.000000 -0.555570 0.831470 +v -0.000000 -0.707107 0.707107 +v -0.000000 -0.831470 0.555570 +v 0.000000 -0.923880 0.382684 +v 0.000000 -0.980785 0.195091 +v -0.038060 0.980785 0.191342 +v -0.074658 0.923880 0.375331 +v -0.108386 0.831470 0.544896 +v -0.137950 0.707107 0.693520 +v -0.162212 0.555570 0.815493 +v -0.180240 0.382683 0.906128 +v -0.191342 0.195090 0.961940 +v -0.195090 0.000000 0.980786 +v -0.191342 -0.195090 0.961940 +v -0.180240 -0.382683 0.906128 +v -0.162212 -0.555570 0.815493 +v -0.137950 -0.707107 0.693520 +v -0.108386 -0.831470 0.544895 +v -0.074658 -0.923880 0.375331 +v -0.038060 -0.980785 0.191342 +v -0.074658 0.980785 0.180240 +v -0.146447 0.923880 0.353554 +v -0.212608 0.831470 0.513280 +v -0.270598 0.707107 0.653282 +v -0.318190 0.555570 0.768178 +v -0.353553 0.382683 0.853554 +v -0.375330 0.195090 0.906127 +v -0.382684 0.000000 0.923880 +v -0.375330 -0.195090 0.906127 +v -0.353553 -0.382683 0.853554 +v -0.318190 -0.555570 0.768178 +v -0.270598 -0.707107 0.653282 +v -0.212608 -0.831470 0.513280 +v -0.146447 -0.923880 0.353554 +v -0.074658 -0.980785 0.180240 +v -0.108386 0.980785 0.162212 +v -0.212608 0.923880 0.318190 +v -0.308658 0.831470 0.461940 +v -0.392847 0.707107 0.587938 +v -0.461940 0.555570 0.691342 +v -0.513280 0.382683 0.768178 +v -0.544895 0.195090 0.815493 +v -0.555570 0.000000 0.831470 +v -0.544895 -0.195090 0.815493 +v -0.513280 -0.382683 0.768178 +v -0.461940 -0.555570 0.691342 +v -0.392847 -0.707107 0.587938 +v -0.308658 -0.831470 0.461940 +v -0.212607 -0.923880 0.318190 +v -0.108386 -0.980785 0.162212 +v -0.000000 1.000000 0.000001 +v -0.137950 0.980785 0.137950 +v -0.270598 0.923880 0.270598 +v -0.392848 0.831470 0.392848 +v -0.500000 0.707107 0.500000 +v -0.587938 0.555570 0.587938 +v -0.653281 0.382683 0.653282 +v -0.693520 0.195090 0.693520 +v -0.707107 0.000000 0.707107 +v -0.693520 -0.195090 0.693520 +v -0.653281 -0.382683 0.653282 +v -0.587938 -0.555570 0.587938 +v -0.500000 -0.707107 0.500000 +v -0.392847 -0.831470 0.392848 +v -0.270598 -0.923880 0.270598 +v -0.137950 -0.980785 0.137950 +v -0.162212 0.980785 0.108387 +v -0.318190 0.923880 0.212608 +v -0.461940 0.831470 0.308659 +v -0.587938 0.707107 0.392848 +v -0.691342 0.555570 0.461940 +v -0.768178 0.382683 0.513280 +v -0.815493 0.195090 0.544895 +v -0.831470 0.000000 0.555570 +v -0.815493 -0.195090 0.544895 +v -0.768178 -0.382683 0.513280 +v -0.691342 -0.555570 0.461940 +v -0.587938 -0.707107 0.392848 +v -0.461940 -0.831470 0.308658 +v -0.318190 -0.923880 0.212608 +v -0.162212 -0.980785 0.108387 +v -0.180240 0.980785 0.074658 +v -0.353553 0.923880 0.146447 +v -0.513280 0.831470 0.212608 +v -0.653281 0.707107 0.270598 +v -0.768177 0.555570 0.318190 +v -0.853553 0.382683 0.353554 +v -0.906127 0.195090 0.375330 +v -0.923880 0.000000 0.382684 +v -0.906127 -0.195090 0.375330 +v -0.853553 -0.382683 0.353554 +v -0.768177 -0.555570 0.318190 +v -0.653281 -0.707107 0.270598 +v -0.513280 -0.831470 0.212608 +v -0.353553 -0.923880 0.146447 +v -0.180240 -0.980785 0.074658 +v -0.191342 0.980785 0.038061 +v -0.375330 0.923880 0.074658 +v -0.544895 0.831470 0.108387 +v -0.693520 0.707107 0.137950 +v -0.815493 0.555570 0.162212 +v -0.906127 0.382683 0.180240 +v -0.961939 0.195090 0.191342 +v -0.980785 0.000000 0.195090 +v -0.961939 -0.195090 0.191342 +v -0.906127 -0.382683 0.180240 +v -0.815493 -0.555570 0.162212 +v -0.693520 -0.707107 0.137950 +v -0.544895 -0.831470 0.108387 +v -0.375330 -0.923880 0.074658 +v -0.191342 -0.980785 0.038061 +v -0.195090 0.980785 0.000000 +v -0.382683 0.923880 0.000000 +v -0.555570 0.831470 0.000000 +v -0.707107 0.707107 0.000000 +v -0.831469 0.555570 0.000000 +v -0.923879 0.382683 0.000000 +v -0.980785 0.195090 0.000000 +v -1.000000 0.000000 0.000000 +v -0.980785 -0.195090 0.000000 +v -0.923879 -0.382683 0.000000 +v -0.831469 -0.555570 0.000000 +v -0.707107 -0.707107 0.000000 +v -0.555570 -0.831470 0.000000 +v -0.382683 -0.923880 0.000000 +v -0.195090 -0.980785 0.000000 +v -0.191342 0.980785 -0.038060 +v -0.375330 0.923880 -0.074658 +v -0.544895 0.831470 -0.108386 +v -0.693520 0.707107 -0.137949 +v -0.815493 0.555570 -0.162211 +v -0.906127 0.382683 -0.180240 +v -0.961939 0.195090 -0.191342 +v -0.980785 0.000000 -0.195090 +v -0.961939 -0.195090 -0.191342 +v -0.906127 -0.382683 -0.180240 +v -0.815493 -0.555570 -0.162211 +v -0.693520 -0.707107 -0.137949 +v -0.544895 -0.831470 -0.108386 +v -0.375330 -0.923880 -0.074658 +v -0.191342 -0.980785 -0.038060 +v -0.180240 0.980785 -0.074658 +v -0.353553 0.923880 -0.146446 +v -0.513280 0.831470 -0.212607 +v -0.653281 0.707107 -0.270598 +v -0.768177 0.555570 -0.318189 +v -0.853553 0.382683 -0.353553 +v -0.906127 0.195090 -0.375330 +v -0.923879 0.000000 -0.382683 +v -0.906127 -0.195090 -0.375330 +v -0.853553 -0.382683 -0.353553 +v -0.768177 -0.555570 -0.318189 +v -0.653281 -0.707107 -0.270598 +v -0.513280 -0.831470 -0.212607 +v -0.353553 -0.923880 -0.146446 +v -0.180240 -0.980785 -0.074657 +v -0.162212 0.980785 -0.108386 +v -0.318190 0.923880 -0.212607 +v -0.461940 0.831470 -0.308658 +v -0.587938 0.707107 -0.392847 +v -0.691341 0.555570 -0.461939 +v -0.768178 0.382683 -0.513280 +v -0.815493 0.195090 -0.544895 +v -0.831469 0.000000 -0.555570 +v -0.815493 -0.195090 -0.544895 +v -0.768178 -0.382683 -0.513280 +v -0.691341 -0.555570 -0.461939 +v -0.587938 -0.707107 -0.392847 +v -0.461940 -0.831470 -0.308658 +v -0.318189 -0.923880 -0.212607 +v -0.162212 -0.980785 -0.108386 +v -0.137950 0.980785 -0.137949 +v -0.270598 0.923880 -0.270598 +v -0.392847 0.831470 -0.392847 +v -0.500000 0.707107 -0.500000 +v -0.587937 0.555570 -0.587937 +v -0.653281 0.382683 -0.653281 +v -0.693519 0.195090 -0.693519 +v -0.707106 0.000000 -0.707106 +v -0.693519 -0.195090 -0.693519 +v -0.653281 -0.382683 -0.653281 +v -0.587937 -0.555570 -0.587937 +v -0.500000 -0.707107 -0.500000 +v -0.392847 -0.831470 -0.392847 +v -0.270598 -0.923880 -0.270598 +v -0.137950 -0.980785 -0.137949 +v -0.108386 0.980785 -0.162211 +v -0.212607 0.923880 -0.318189 +v -0.308658 0.831470 -0.461939 +v -0.392847 0.707107 -0.587937 +v -0.461939 0.555570 -0.691341 +v -0.513280 0.382683 -0.768177 +v -0.544895 0.195090 -0.815492 +v -0.555570 0.000000 -0.831469 +v -0.544895 -0.195090 -0.815492 +v -0.513280 -0.382683 -0.768177 +v -0.461939 -0.555570 -0.691341 +v -0.392847 -0.707107 -0.587937 +v -0.308658 -0.831470 -0.461939 +v -0.212607 -0.923880 -0.318189 +v -0.108386 -0.980785 -0.162211 +v -0.074658 0.980785 -0.180240 +v -0.146447 0.923880 -0.353553 +v -0.212607 0.831470 -0.513280 +v -0.270598 0.707107 -0.653281 +v -0.318189 0.555570 -0.768177 +v -0.353553 0.382683 -0.853553 +v -0.375330 0.195090 -0.906127 +v -0.382683 0.000000 -0.923879 +v -0.375330 -0.195090 -0.906127 +v -0.353553 -0.382683 -0.853553 +v -0.318189 -0.555570 -0.768177 +v -0.270598 -0.707107 -0.653281 +v -0.212607 -0.831470 -0.513279 +v -0.146446 -0.923880 -0.353553 +v -0.074658 -0.980785 -0.180240 +v -0.038060 0.980785 -0.191342 +v -0.074658 0.923880 -0.375330 +v -0.108386 0.831470 -0.544895 +v -0.137950 0.707107 -0.693520 +v -0.162211 0.555570 -0.815492 +v -0.180240 0.382683 -0.906127 +v -0.191341 0.195090 -0.961939 +v -0.195090 0.000000 -0.980785 +v -0.191341 -0.195090 -0.961939 +v -0.180240 -0.382683 -0.906127 +v -0.162211 -0.555570 -0.815492 +v -0.137950 -0.707107 -0.693520 +v -0.108386 -0.831470 -0.544895 +v -0.074658 -0.923880 -0.375330 +v -0.038060 -0.980785 -0.191341 +v 0.000000 -0.382683 -0.923879 +v 0.000000 -0.555570 -0.831469 +v 0.000000 -0.707107 -0.707106 +v 0.000000 -0.923880 -0.382683 +v 0.000000 -0.980785 -0.195090 +vt 0.750000 0.750000 +vt 0.750000 0.812500 +vt 0.718750 0.812500 +vt 0.718750 0.750000 +vt 0.750000 0.250000 +vt 0.750000 0.312500 +vt 0.718750 0.312500 +vt 0.718750 0.250000 +vt 0.750000 0.687500 +vt 0.718750 0.687500 +vt 0.750000 0.187500 +vt 0.718750 0.187500 +vt 0.750000 0.625000 +vt 0.718750 0.625000 +vt 0.750000 0.125000 +vt 0.718750 0.125000 +vt 0.750000 0.562500 +vt 0.718750 0.562500 +vt 0.750000 0.062500 +vt 0.718750 0.062500 +vt 0.750000 0.500000 +vt 0.718750 0.500000 +vt 0.750000 0.937500 +vt 0.734375 1.000000 +vt 0.718750 0.937500 +vt 0.734375 0.000000 +vt 0.750000 0.437500 +vt 0.718750 0.437500 +vt 0.750000 0.875000 +vt 0.718750 0.875000 +vt 0.750000 0.375000 +vt 0.718750 0.375000 +vt 0.687500 0.437500 +vt 0.687500 0.375000 +vt 0.687500 0.875000 +vt 0.687500 0.812500 +vt 0.687500 0.312500 +vt 0.687500 0.750000 +vt 0.687500 0.250000 +vt 0.687500 0.687500 +vt 0.687500 0.187500 +vt 0.687500 0.625000 +vt 0.687500 0.125000 +vt 0.687500 0.562500 +vt 0.687500 0.062500 +vt 0.687500 0.500000 +vt 0.703125 1.000000 +vt 0.687500 0.937500 +vt 0.703125 0.000000 +vt 0.656250 0.187500 +vt 0.656250 0.125000 +vt 0.656250 0.625000 +vt 0.656250 0.562500 +vt 0.656250 0.062500 +vt 0.656250 0.500000 +vt 0.671875 1.000000 +vt 0.656250 0.937500 +vt 0.671875 0.000000 +vt 0.656250 0.437500 +vt 0.656250 0.875000 +vt 0.656250 0.375000 +vt 0.656250 0.812500 +vt 0.656250 0.312500 +vt 0.656250 0.750000 +vt 0.656250 0.250000 +vt 0.656250 0.687500 +vt 0.625000 0.375000 +vt 0.625000 0.312500 +vt 0.625000 0.812500 +vt 0.625000 0.750000 +vt 0.625000 0.250000 +vt 0.625000 0.687500 +vt 0.625000 0.187500 +vt 0.625000 0.625000 +vt 0.625000 0.125000 +vt 0.625000 0.562500 +vt 0.625000 0.062500 +vt 0.625000 0.500000 +vt 0.640625 1.000000 +vt 0.625000 0.937500 +vt 0.640625 0.000000 +vt 0.625000 0.437500 +vt 0.625000 0.875000 +vt 0.593750 0.125000 +vt 0.593750 0.062500 +vt 0.593750 0.562500 +vt 0.593750 0.500000 +vt 0.609375 1.000000 +vt 0.593750 0.937500 +vt 0.609375 0.000000 +vt 0.593750 0.437500 +vt 0.593750 0.875000 +vt 0.593750 0.375000 +vt 0.593750 0.812500 +vt 0.593750 0.312500 +vt 0.593750 0.750000 +vt 0.593750 0.250000 +vt 0.593750 0.687500 +vt 0.593750 0.187500 +vt 0.593750 0.625000 +vt 0.562500 0.812500 +vt 0.562500 0.750000 +vt 0.562500 0.312500 +vt 0.562500 0.250000 +vt 0.562500 0.687500 +vt 0.562500 0.187500 +vt 0.562500 0.625000 +vt 0.562500 0.125000 +vt 0.562500 0.562500 +vt 0.562500 0.062500 +vt 0.562500 0.500000 +vt 0.578125 1.000000 +vt 0.562500 0.937500 +vt 0.578125 0.000000 +vt 0.562500 0.437500 +vt 0.562500 0.875000 +vt 0.562500 0.375000 +vt 0.531250 0.562500 +vt 0.531250 0.500000 +vt 0.546875 1.000000 +vt 0.531250 0.937500 +vt 0.546875 0.000000 +vt 0.531250 0.062500 +vt 0.531250 0.437500 +vt 0.531250 0.875000 +vt 0.531250 0.375000 +vt 0.531250 0.812500 +vt 0.531250 0.312500 +vt 0.531250 0.750000 +vt 0.531250 0.250000 +vt 0.531250 0.687500 +vt 0.531250 0.187500 +vt 0.531250 0.625000 +vt 0.531250 0.125000 +vt 0.500000 0.312500 +vt 0.500000 0.250000 +vt 0.500000 0.750000 +vt 0.500000 0.687500 +vt 0.500000 0.187500 +vt 0.500000 0.625000 +vt 0.500000 0.125000 +vt 0.500000 0.562500 +vt 0.500000 0.062500 +vt 0.500000 0.500000 +vt 0.515625 1.000000 +vt 0.500000 0.937500 +vt 0.515625 0.000000 +vt 0.500000 0.437500 +vt 0.500000 0.875000 +vt 0.500000 0.375000 +vt 0.500000 0.812500 +vt 0.484374 1.000000 +vt 0.468750 0.937500 +vt 0.484375 0.000000 +vt 0.468750 0.062500 +vt 0.468750 0.500000 +vt 0.468750 0.437500 +vt 0.468750 0.875000 +vt 0.468750 0.375000 +vt 0.468750 0.812500 +vt 0.468750 0.312500 +vt 0.468750 0.750000 +vt 0.468750 0.250000 +vt 0.468750 0.687500 +vt 0.468750 0.187500 +vt 0.468750 0.625000 +vt 0.468750 0.125000 +vt 0.468750 0.562500 +vt 0.437500 0.750000 +vt 0.437500 0.687500 +vt 0.437500 0.250000 +vt 0.437500 0.187500 +vt 0.437500 0.625000 +vt 0.437500 0.125000 +vt 0.437500 0.562500 +vt 0.437500 0.062500 +vt 0.437500 0.500000 +vt 0.453124 1.000000 +vt 0.437500 0.937500 +vt 0.453125 0.000000 +vt 0.437500 0.437500 +vt 0.437500 0.875000 +vt 0.437500 0.375000 +vt 0.437500 0.812500 +vt 0.437500 0.312500 +vt 0.406250 0.500000 +vt 0.406250 0.437500 +vt 0.406250 0.937500 +vt 0.406250 0.875000 +vt 0.406250 0.375000 +vt 0.406250 0.812500 +vt 0.406250 0.312500 +vt 0.406250 0.750000 +vt 0.406250 0.250000 +vt 0.406250 0.687500 +vt 0.406250 0.187500 +vt 0.406250 0.625000 +vt 0.406250 0.125000 +vt 0.406250 0.562500 +vt 0.406250 0.062500 +vt 0.421874 1.000000 +vt 0.421875 0.000000 +vt 0.375000 0.250000 +vt 0.375000 0.187500 +vt 0.375000 0.687500 +vt 0.375000 0.625000 +vt 0.375000 0.125000 +vt 0.375000 0.562500 +vt 0.375000 0.062500 +vt 0.375000 0.500000 +vt 0.390625 1.000000 +vt 0.375000 0.937500 +vt 0.390625 0.000000 +vt 0.375000 0.437500 +vt 0.375000 0.875000 +vt 0.375000 0.375000 +vt 0.375000 0.812500 +vt 0.375000 0.312500 +vt 0.375000 0.750000 +vt 0.343750 0.437500 +vt 0.343750 0.375000 +vt 0.343750 0.875000 +vt 0.343750 0.812500 +vt 0.343750 0.312500 +vt 0.343750 0.750000 +vt 0.343750 0.250000 +vt 0.343750 0.687500 +vt 0.343750 0.187500 +vt 0.343750 0.625000 +vt 0.343750 0.125000 +vt 0.343750 0.562500 +vt 0.343750 0.062500 +vt 0.343750 0.500000 +vt 0.359375 1.000000 +vt 0.343750 0.937500 +vt 0.359375 0.000000 +vt 0.312500 0.187500 +vt 0.312500 0.125000 +vt 0.312500 0.625000 +vt 0.312500 0.562500 +vt 0.312500 0.062500 +vt 0.312500 0.500000 +vt 0.328125 1.000000 +vt 0.312500 0.937500 +vt 0.328125 0.000000 +vt 0.312500 0.437500 +vt 0.312500 0.875000 +vt 0.312500 0.375000 +vt 0.312500 0.812500 +vt 0.312500 0.312500 +vt 0.312500 0.750000 +vt 0.312500 0.250000 +vt 0.312500 0.687500 +vt 0.281250 0.875000 +vt 0.281250 0.812500 +vt 0.281250 0.375000 +vt 0.281250 0.312500 +vt 0.281250 0.750000 +vt 0.281250 0.250000 +vt 0.281250 0.687500 +vt 0.281250 0.187500 +vt 0.281250 0.625000 +vt 0.281250 0.125000 +vt 0.281250 0.562500 +vt 0.281250 0.062500 +vt 0.281250 0.500000 +vt 0.296875 1.000000 +vt 0.281250 0.937500 +vt 0.296875 0.000000 +vt 0.281250 0.437500 +vt 0.250000 0.625000 +vt 0.250000 0.562500 +vt 0.250000 0.125000 +vt 0.250000 0.062500 +vt 0.250000 0.500000 +vt 0.265625 1.000000 +vt 0.250000 0.937500 +vt 0.265625 0.000000 +vt 0.250000 0.437500 +vt 0.250000 0.875000 +vt 0.250000 0.375000 +vt 0.250000 0.812500 +vt 0.250000 0.312500 +vt 0.250000 0.750000 +vt 0.250000 0.250000 +vt 0.250000 0.687500 +vt 0.250000 0.187500 +vt 0.218750 0.375000 +vt 0.218750 0.312500 +vt 0.218750 0.812500 +vt 0.218750 0.750000 +vt 0.218750 0.250000 +vt 0.218750 0.687500 +vt 0.218750 0.187500 +vt 0.218750 0.625000 +vt 0.218750 0.125000 +vt 0.218750 0.562500 +vt 0.218750 0.062500 +vt 0.218750 0.500000 +vt 0.234375 1.000000 +vt 0.218750 0.937500 +vt 0.234375 0.000000 +vt 0.218750 0.437500 +vt 0.218750 0.875000 +vt 0.187500 0.125000 +vt 0.187500 0.062500 +vt 0.187500 0.562500 +vt 0.187500 0.500000 +vt 0.203125 1.000000 +vt 0.187500 0.937500 +vt 0.203125 0.000000 +vt 0.187500 0.437500 +vt 0.187500 0.875000 +vt 0.187500 0.375000 +vt 0.187500 0.812500 +vt 0.187500 0.312500 +vt 0.187500 0.750000 +vt 0.187500 0.250000 +vt 0.187500 0.687500 +vt 0.187500 0.187500 +vt 0.187500 0.625000 +vt 0.156250 0.812500 +vt 0.156250 0.750000 +vt 0.156250 0.312500 +vt 0.156250 0.250000 +vt 0.156250 0.687500 +vt 0.156250 0.187500 +vt 0.156250 0.625000 +vt 0.156250 0.125000 +vt 0.156250 0.562500 +vt 0.156250 0.062500 +vt 0.156250 0.500000 +vt 0.171875 1.000000 +vt 0.156250 0.937500 +vt 0.171875 0.000000 +vt 0.156250 0.437500 +vt 0.156250 0.875000 +vt 0.156250 0.375000 +vt 0.125000 0.562500 +vt 0.125000 0.500000 +vt 0.140625 1.000000 +vt 0.125000 0.937500 +vt 0.140625 0.000000 +vt 0.125000 0.062500 +vt 0.125000 0.437500 +vt 0.125000 0.875000 +vt 0.125000 0.375000 +vt 0.125000 0.812500 +vt 0.125000 0.312500 +vt 0.125000 0.750000 +vt 0.125000 0.250000 +vt 0.125000 0.687500 +vt 0.125000 0.187500 +vt 0.125000 0.625000 +vt 0.125000 0.125000 +vt 0.093750 0.312500 +vt 0.093750 0.250000 +vt 0.093750 0.750000 +vt 0.093750 0.687500 +vt 0.093750 0.187500 +vt 0.093750 0.625000 +vt 0.093750 0.125000 +vt 0.093750 0.562500 +vt 0.093750 0.062500 +vt 0.093750 0.500000 +vt 0.109375 1.000000 +vt 0.093750 0.937500 +vt 0.109375 0.000000 +vt 0.093750 0.437500 +vt 0.093750 0.875000 +vt 0.093750 0.375000 +vt 0.093750 0.812500 +vt 0.078125 0.000000 +vt 0.062500 0.062500 +vt 0.062500 0.500000 +vt 0.062500 0.437500 +vt 0.062500 0.937500 +vt 0.062500 0.875000 +vt 0.062500 0.375000 +vt 0.062500 0.812500 +vt 0.062500 0.312500 +vt 0.062500 0.750000 +vt 0.062500 0.250000 +vt 0.062500 0.687500 +vt 0.062500 0.187500 +vt 0.062500 0.625000 +vt 0.062500 0.125000 +vt 0.062500 0.562500 +vt 0.078125 1.000000 +vt 0.031250 0.250000 +vt 0.031250 0.187500 +vt 0.031250 0.687500 +vt 0.031250 0.625000 +vt 0.031250 0.125000 +vt 0.031250 0.562500 +vt 0.031250 0.062500 +vt 0.031250 0.500000 +vt 0.046875 1.000000 +vt 0.031250 0.937500 +vt 0.046875 0.000000 +vt 0.031250 0.437500 +vt 0.031250 0.875000 +vt 0.031250 0.375000 +vt 0.031250 0.812500 +vt 0.031250 0.312500 +vt 0.031250 0.750000 +vt 0.000000 0.937500 +vt 0.000000 0.875000 +vt 0.000000 0.437500 +vt 0.000000 0.375000 +vt 0.000000 0.812500 +vt 0.000000 0.312500 +vt 0.000000 0.750000 +vt 0.000000 0.250000 +vt 0.000000 0.687500 +vt 0.000000 0.187500 +vt 0.000000 0.625000 +vt 0.000000 0.125000 +vt 0.000000 0.562500 +vt 0.000000 0.062500 +vt 0.000000 0.500000 +vt 0.015625 1.000000 +vt 0.015625 0.000000 +vt 1.000000 0.625000 +vt 1.000000 0.687500 +vt 0.968750 0.687500 +vt 0.968750 0.625000 +vt 1.000000 0.125000 +vt 1.000000 0.187500 +vt 0.968750 0.187500 +vt 0.968750 0.125000 +vt 1.000000 0.562500 +vt 0.968750 0.562500 +vt 1.000000 0.062500 +vt 0.968750 0.062500 +vt 1.000000 0.500000 +vt 0.968750 0.500000 +vt 1.000000 0.937500 +vt 0.984375 1.000000 +vt 0.968750 0.937500 +vt 0.984375 0.000000 +vt 1.000000 0.437500 +vt 0.968750 0.437500 +vt 1.000000 0.875000 +vt 0.968750 0.875000 +vt 1.000000 0.375000 +vt 0.968750 0.375000 +vt 1.000000 0.812500 +vt 0.968750 0.812500 +vt 1.000000 0.312500 +vt 0.968750 0.312500 +vt 1.000000 0.750000 +vt 0.968750 0.750000 +vt 1.000000 0.250000 +vt 0.968750 0.250000 +vt 0.937500 0.437500 +vt 0.937500 0.375000 +vt 0.937500 0.875000 +vt 0.937500 0.812500 +vt 0.937500 0.312500 +vt 0.937500 0.750000 +vt 0.937500 0.250000 +vt 0.937500 0.687500 +vt 0.937500 0.187500 +vt 0.937500 0.625000 +vt 0.937500 0.125000 +vt 0.937500 0.562500 +vt 0.937500 0.062500 +vt 0.937500 0.500000 +vt 0.953125 1.000000 +vt 0.937500 0.937500 +vt 0.953125 0.000000 +vt 0.906250 0.187500 +vt 0.906250 0.125000 +vt 0.906250 0.625000 +vt 0.906250 0.562500 +vt 0.906250 0.062500 +vt 0.906250 0.500000 +vt 0.921875 1.000000 +vt 0.906250 0.937500 +vt 0.921875 0.000000 +vt 0.906250 0.437500 +vt 0.906250 0.875000 +vt 0.906250 0.375000 +vt 0.906250 0.812500 +vt 0.906250 0.312500 +vt 0.906250 0.750000 +vt 0.906250 0.250000 +vt 0.906250 0.687500 +vt 0.875000 0.875000 +vt 0.875000 0.812500 +vt 0.875000 0.375000 +vt 0.875000 0.312500 +vt 0.875000 0.750000 +vt 0.875000 0.250000 +vt 0.875000 0.687500 +vt 0.875000 0.187500 +vt 0.875000 0.625000 +vt 0.875000 0.125000 +vt 0.875000 0.562500 +vt 0.875000 0.062500 +vt 0.875000 0.500000 +vt 0.890625 1.000000 +vt 0.875000 0.937500 +vt 0.890625 0.000000 +vt 0.875000 0.437500 +vt 0.843750 0.625000 +vt 0.843750 0.562500 +vt 0.843750 0.125000 +vt 0.843750 0.062500 +vt 0.843750 0.500000 +vt 0.859375 1.000000 +vt 0.843750 0.937500 +vt 0.859375 0.000000 +vt 0.843750 0.437500 +vt 0.843750 0.875000 +vt 0.843750 0.375000 +vt 0.843750 0.812500 +vt 0.843750 0.312500 +vt 0.843750 0.750000 +vt 0.843750 0.250000 +vt 0.843750 0.687500 +vt 0.843750 0.187500 +vt 0.812500 0.375000 +vt 0.812500 0.312500 +vt 0.812500 0.812500 +vt 0.812500 0.750000 +vt 0.812500 0.250000 +vt 0.812500 0.687500 +vt 0.812500 0.187500 +vt 0.812500 0.625000 +vt 0.812500 0.125000 +vt 0.812500 0.562500 +vt 0.812500 0.062500 +vt 0.812500 0.500000 +vt 0.828125 1.000000 +vt 0.812500 0.937500 +vt 0.828125 0.000000 +vt 0.812500 0.437500 +vt 0.812500 0.875000 +vt 0.781250 0.125000 +vt 0.781250 0.062500 +vt 0.781250 0.562500 +vt 0.781250 0.500000 +vt 0.796875 1.000000 +vt 0.781250 0.937500 +vt 0.796875 0.000000 +vt 0.781250 0.437500 +vt 0.781250 0.875000 +vt 0.781250 0.375000 +vt 0.781250 0.812500 +vt 0.781250 0.312500 +vt 0.781250 0.750000 +vt 0.781250 0.250000 +vt 0.781250 0.687500 +vt 0.781250 0.187500 +vt 0.781250 0.625000 +vt 0.765625 1.000000 +vt 0.765625 0.000000 +vn 0.0000 0.7040 -0.7101 +vn 0.0000 0.8286 -0.5598 +vn 0.1092 0.8286 -0.5490 +vn 0.1385 0.7040 -0.6965 +vn 0.0000 -0.7040 -0.7101 +vn 0.0000 -0.5528 -0.8333 +vn 0.1626 -0.5528 -0.8173 +vn 0.1385 -0.7040 -0.6965 +vn 0.0000 0.5528 -0.8333 +vn 0.1626 0.5528 -0.8173 +vn 0.0000 -0.8286 -0.5598 +vn 0.1092 -0.8286 -0.5490 +vn 0.0000 0.3805 -0.9247 +vn 0.1804 0.3805 -0.9070 +vn 0.0000 -0.9217 -0.3879 +vn 0.0757 -0.9217 -0.3804 +vn 0.0000 0.1939 -0.9810 +vn 0.1914 0.1939 -0.9622 +vn 0.0000 -0.9796 -0.2010 +vn 0.0392 -0.9796 -0.1971 +vn 0.0000 0.0000 -1.0000 +vn 0.1951 0.0000 -0.9808 +vn 0.0000 0.9796 -0.2010 +vn 0.0000 1.0000 0.0000 +vn 0.0392 0.9796 -0.1971 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 -0.1939 -0.9810 +vn 0.1914 -0.1939 -0.9622 +vn 0.0000 0.9217 -0.3879 +vn 0.0757 0.9217 -0.3804 +vn 0.0000 -0.3805 -0.9247 +vn 0.1804 -0.3805 -0.9070 +vn 0.3754 -0.1939 -0.9063 +vn 0.3539 -0.3805 -0.8544 +vn 0.1484 0.9217 -0.3583 +vn 0.2142 0.8286 -0.5171 +vn 0.3189 -0.5528 -0.7699 +vn 0.2717 0.7040 -0.6561 +vn 0.2717 -0.7040 -0.6561 +vn 0.3189 0.5528 -0.7699 +vn 0.2142 -0.8286 -0.5171 +vn 0.3539 0.3805 -0.8544 +vn 0.1484 -0.9217 -0.3583 +vn 0.3754 0.1939 -0.9063 +vn 0.0769 -0.9796 -0.1856 +vn 0.3827 0.0000 -0.9239 +vn 0.0769 0.9796 -0.1856 +vn 0.3110 -0.8286 -0.4654 +vn 0.2155 -0.9217 -0.3225 +vn 0.5137 0.3805 -0.7689 +vn 0.5450 0.1939 -0.8157 +vn 0.1116 -0.9796 -0.1671 +vn 0.5556 0.0000 -0.8314 +vn 0.1116 0.9796 -0.1671 +vn 0.5450 -0.1939 -0.8157 +vn 0.2155 0.9217 -0.3225 +vn 0.5137 -0.3805 -0.7689 +vn 0.3110 0.8286 -0.4654 +vn 0.4630 -0.5528 -0.6929 +vn 0.3945 0.7040 -0.5904 +vn 0.3945 -0.7040 -0.5904 +vn 0.4630 0.5528 -0.6929 +vn 0.6539 -0.3805 -0.6539 +vn 0.5893 -0.5528 -0.5893 +vn 0.3958 0.8286 -0.3958 +vn 0.5021 0.7040 -0.5021 +vn 0.5021 -0.7040 -0.5021 +vn 0.5893 0.5528 -0.5893 +vn 0.3958 -0.8286 -0.3958 +vn 0.6539 0.3805 -0.6539 +vn 0.2743 -0.9217 -0.2743 +vn 0.6937 0.1939 -0.6937 +vn 0.1421 -0.9796 -0.1421 +vn 0.7071 0.0000 -0.7071 +vn 0.1421 0.9796 -0.1421 +vn 0.6937 -0.1939 -0.6937 +vn 0.2743 0.9217 -0.2743 +vn 0.3225 -0.9217 -0.2155 +vn 0.1671 -0.9796 -0.1116 +vn 0.8157 0.1939 -0.5450 +vn 0.8314 0.0000 -0.5556 +vn 0.1671 0.9796 -0.1116 +vn 0.8157 -0.1939 -0.5450 +vn 0.3225 0.9217 -0.2155 +vn 0.7689 -0.3805 -0.5137 +vn 0.4654 0.8286 -0.3110 +vn 0.6929 -0.5528 -0.4630 +vn 0.5904 0.7040 -0.3945 +vn 0.5904 -0.7040 -0.3945 +vn 0.6929 0.5528 -0.4630 +vn 0.4654 -0.8286 -0.3110 +vn 0.7689 0.3805 -0.5137 +vn 0.5171 0.8286 -0.2142 +vn 0.6561 0.7040 -0.2717 +vn 0.7699 -0.5528 -0.3189 +vn 0.6561 -0.7040 -0.2717 +vn 0.7699 0.5528 -0.3189 +vn 0.5171 -0.8286 -0.2142 +vn 0.8544 0.3805 -0.3539 +vn 0.3583 -0.9217 -0.1484 +vn 0.9063 0.1939 -0.3754 +vn 0.1856 -0.9796 -0.0769 +vn 0.9239 0.0000 -0.3827 +vn 0.1856 0.9796 -0.0769 +vn 0.9063 -0.1939 -0.3754 +vn 0.3583 0.9217 -0.1484 +vn 0.8544 -0.3805 -0.3539 +vn 0.9622 0.1939 -0.1914 +vn 0.9808 0.0000 -0.1951 +vn 0.1971 0.9796 -0.0392 +vn 0.1971 -0.9796 -0.0392 +vn 0.9622 -0.1939 -0.1914 +vn 0.3804 0.9217 -0.0757 +vn 0.9070 -0.3805 -0.1804 +vn 0.5490 0.8286 -0.1092 +vn 0.8173 -0.5528 -0.1626 +vn 0.6965 0.7040 -0.1385 +vn 0.6965 -0.7040 -0.1385 +vn 0.8173 0.5528 -0.1626 +vn 0.5490 -0.8286 -0.1092 +vn 0.9070 0.3805 -0.1804 +vn 0.3804 -0.9217 -0.0757 +vn 0.8333 -0.5528 0.0000 +vn 0.7101 -0.7040 0.0000 +vn 0.7101 0.7040 0.0000 +vn 0.8333 0.5528 0.0000 +vn 0.5598 -0.8286 0.0000 +vn 0.9247 0.3805 0.0000 +vn 0.3879 -0.9217 0.0000 +vn 0.9810 0.1939 0.0000 +vn 0.2010 -0.9796 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.2010 0.9796 0.0000 +vn 0.9810 -0.1939 0.0000 +vn 0.3879 0.9217 0.0000 +vn 0.9247 -0.3805 0.0000 +vn 0.5598 0.8286 0.0000 +vn 0.1971 0.9796 0.0392 +vn 0.1971 -0.9796 0.0392 +vn 0.9808 0.0000 0.1951 +vn 0.9622 -0.1939 0.1914 +vn 0.3804 0.9217 0.0757 +vn 0.9070 -0.3805 0.1804 +vn 0.5490 0.8286 0.1092 +vn 0.8173 -0.5528 0.1626 +vn 0.6965 0.7040 0.1385 +vn 0.6965 -0.7040 0.1385 +vn 0.8173 0.5528 0.1626 +vn 0.5490 -0.8286 0.1092 +vn 0.9070 0.3805 0.1804 +vn 0.3804 -0.9217 0.0757 +vn 0.9622 0.1939 0.1914 +vn 0.6561 0.7040 0.2717 +vn 0.7699 0.5528 0.3189 +vn 0.6561 -0.7040 0.2717 +vn 0.5171 -0.8286 0.2142 +vn 0.8544 0.3805 0.3539 +vn 0.3583 -0.9217 0.1484 +vn 0.9063 0.1939 0.3754 +vn 0.1856 -0.9796 0.0769 +vn 0.9239 0.0000 0.3827 +vn 0.1856 0.9796 0.0769 +vn 0.9063 -0.1939 0.3754 +vn 0.3583 0.9217 0.1484 +vn 0.8544 -0.3805 0.3539 +vn 0.5171 0.8286 0.2142 +vn 0.7699 -0.5528 0.3189 +vn 0.8314 0.0000 0.5556 +vn 0.8157 -0.1939 0.5450 +vn 0.1671 0.9796 0.1116 +vn 0.3225 0.9217 0.2155 +vn 0.7689 -0.3805 0.5137 +vn 0.4654 0.8286 0.3110 +vn 0.6929 -0.5528 0.4630 +vn 0.5904 0.7040 0.3945 +vn 0.5904 -0.7040 0.3945 +vn 0.6929 0.5528 0.4630 +vn 0.4654 -0.8286 0.3110 +vn 0.7689 0.3805 0.5137 +vn 0.3225 -0.9217 0.2155 +vn 0.8157 0.1939 0.5450 +vn 0.1671 -0.9796 0.1116 +vn 0.5021 -0.7040 0.5021 +vn 0.3958 -0.8286 0.3958 +vn 0.5893 0.5528 0.5893 +vn 0.6539 0.3805 0.6539 +vn 0.2743 -0.9217 0.2743 +vn 0.6937 0.1939 0.6937 +vn 0.1421 -0.9796 0.1421 +vn 0.7071 0.0000 0.7071 +vn 0.1421 0.9796 0.1421 +vn 0.6937 -0.1939 0.6937 +vn 0.2743 0.9217 0.2743 +vn 0.6539 -0.3805 0.6539 +vn 0.3958 0.8286 0.3958 +vn 0.5893 -0.5528 0.5893 +vn 0.5021 0.7040 0.5021 +vn 0.5450 -0.1939 0.8157 +vn 0.5137 -0.3805 0.7689 +vn 0.2155 0.9217 0.3225 +vn 0.3110 0.8286 0.4654 +vn 0.4630 -0.5528 0.6929 +vn 0.3945 0.7040 0.5904 +vn 0.3945 -0.7040 0.5904 +vn 0.4630 0.5528 0.6929 +vn 0.3110 -0.8286 0.4654 +vn 0.5137 0.3805 0.7689 +vn 0.2155 -0.9217 0.3225 +vn 0.5450 0.1939 0.8157 +vn 0.1116 -0.9796 0.1671 +vn 0.5556 0.0000 0.8314 +vn 0.1116 0.9796 0.1671 +vn 0.2142 -0.8286 0.5171 +vn 0.1484 -0.9217 0.3583 +vn 0.3539 0.3805 0.8544 +vn 0.3754 0.1939 0.9063 +vn 0.0769 -0.9796 0.1856 +vn 0.3827 0.0000 0.9239 +vn 0.0769 0.9796 0.1856 +vn 0.3754 -0.1939 0.9063 +vn 0.1484 0.9217 0.3583 +vn 0.3539 -0.3805 0.8544 +vn 0.2142 0.8286 0.5171 +vn 0.3189 -0.5528 0.7699 +vn 0.2717 0.7040 0.6561 +vn 0.2717 -0.7040 0.6561 +vn 0.3189 0.5528 0.7699 +vn 0.0757 0.9217 0.3804 +vn 0.1092 0.8286 0.5490 +vn 0.1804 -0.3805 0.9070 +vn 0.1626 -0.5528 0.8173 +vn 0.1385 0.7040 0.6965 +vn 0.1385 -0.7040 0.6965 +vn 0.1626 0.5528 0.8173 +vn 0.1092 -0.8286 0.5490 +vn 0.1804 0.3805 0.9070 +vn 0.0757 -0.9217 0.3804 +vn 0.1914 0.1939 0.9622 +vn 0.0392 -0.9796 0.1971 +vn 0.1951 0.0000 0.9808 +vn 0.0392 0.9796 0.1971 +vn 0.1914 -0.1939 0.9622 +vn 0.0000 0.3805 0.9247 +vn 0.0000 0.1939 0.9810 +vn 0.0000 -0.9217 0.3879 +vn 0.0000 -0.9796 0.2010 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.9796 0.2010 +vn 0.0000 -0.1939 0.9810 +vn 0.0000 0.9217 0.3879 +vn 0.0000 -0.3805 0.9247 +vn 0.0000 0.8286 0.5598 +vn 0.0000 -0.5528 0.8333 +vn 0.0000 0.7040 0.7101 +vn 0.0000 -0.7040 0.7101 +vn 0.0000 0.5528 0.8333 +vn 0.0000 -0.8286 0.5598 +vn -0.1804 -0.3805 0.9070 +vn -0.1626 -0.5528 0.8173 +vn -0.1092 0.8286 0.5490 +vn -0.1385 0.7040 0.6965 +vn -0.1385 -0.7040 0.6965 +vn -0.1626 0.5528 0.8173 +vn -0.1092 -0.8286 0.5490 +vn -0.1804 0.3805 0.9070 +vn -0.0757 -0.9217 0.3804 +vn -0.1914 0.1939 0.9622 +vn -0.0392 -0.9796 0.1971 +vn -0.1951 0.0000 0.9808 +vn -0.0392 0.9796 0.1971 +vn -0.1914 -0.1939 0.9622 +vn -0.0757 0.9217 0.3804 +vn -0.1484 -0.9217 0.3583 +vn -0.0769 -0.9796 0.1856 +vn -0.3754 0.1939 0.9063 +vn -0.3827 0.0000 0.9239 +vn -0.0769 0.9796 0.1856 +vn -0.3754 -0.1939 0.9063 +vn -0.1484 0.9217 0.3583 +vn -0.3539 -0.3805 0.8544 +vn -0.2142 0.8286 0.5171 +vn -0.3189 -0.5528 0.7699 +vn -0.2717 0.7040 0.6561 +vn -0.2717 -0.7040 0.6561 +vn -0.3189 0.5528 0.7699 +vn -0.2142 -0.8286 0.5171 +vn -0.3539 0.3805 0.8544 +vn -0.3110 0.8286 0.4654 +vn -0.3945 0.7040 0.5904 +vn -0.4630 -0.5528 0.6929 +vn -0.3945 -0.7040 0.5904 +vn -0.4630 0.5528 0.6929 +vn -0.3110 -0.8286 0.4654 +vn -0.5137 0.3805 0.7689 +vn -0.2155 -0.9217 0.3225 +vn -0.5450 0.1939 0.8157 +vn -0.1116 -0.9796 0.1671 +vn -0.5556 0.0000 0.8314 +vn -0.1116 0.9796 0.1671 +vn -0.5450 -0.1939 0.8157 +vn -0.2155 0.9217 0.3225 +vn -0.5137 -0.3805 0.7689 +vn -0.6937 0.1939 0.6937 +vn -0.7071 0.0000 0.7071 +vn -0.1421 0.9796 0.1421 +vn -0.1421 -0.9796 0.1421 +vn -0.6937 -0.1939 0.6937 +vn -0.2743 0.9217 0.2743 +vn -0.6539 -0.3805 0.6539 +vn -0.3958 0.8286 0.3958 +vn -0.5893 -0.5528 0.5893 +vn -0.5021 0.7040 0.5021 +vn -0.5021 -0.7040 0.5021 +vn -0.5893 0.5528 0.5893 +vn -0.3958 -0.8286 0.3958 +vn -0.6539 0.3805 0.6539 +vn -0.2743 -0.9217 0.2743 +vn -0.6929 -0.5528 0.4630 +vn -0.5904 -0.7040 0.3945 +vn -0.5904 0.7040 0.3945 +vn -0.6929 0.5528 0.4630 +vn -0.4654 -0.8286 0.3110 +vn -0.7689 0.3805 0.5137 +vn -0.3225 -0.9217 0.2155 +vn -0.8157 0.1939 0.5450 +vn -0.1671 -0.9796 0.1116 +vn -0.8314 0.0000 0.5556 +vn -0.1671 0.9796 0.1116 +vn -0.8157 -0.1939 0.5450 +vn -0.3225 0.9217 0.2155 +vn -0.7689 -0.3805 0.5137 +vn -0.4654 0.8286 0.3110 +vn -0.1856 -0.9796 0.0769 +vn -0.9239 0.0000 0.3827 +vn -0.9063 -0.1939 0.3754 +vn -0.1856 0.9796 0.0769 +vn -0.3583 0.9217 0.1484 +vn -0.8544 -0.3805 0.3539 +vn -0.5171 0.8286 0.2142 +vn -0.7699 -0.5528 0.3189 +vn -0.6561 0.7040 0.2717 +vn -0.6561 -0.7040 0.2717 +vn -0.7699 0.5528 0.3189 +vn -0.5171 -0.8286 0.2142 +vn -0.8544 0.3805 0.3539 +vn -0.3583 -0.9217 0.1484 +vn -0.9063 0.1939 0.3754 +vn -0.6965 -0.7040 0.1385 +vn -0.5490 -0.8286 0.1092 +vn -0.8173 0.5528 0.1626 +vn -0.9070 0.3805 0.1804 +vn -0.3804 -0.9217 0.0757 +vn -0.9622 0.1939 0.1914 +vn -0.1971 -0.9796 0.0392 +vn -0.9808 0.0000 0.1951 +vn -0.1971 0.9796 0.0392 +vn -0.9622 -0.1939 0.1914 +vn -0.3804 0.9217 0.0757 +vn -0.9070 -0.3805 0.1804 +vn -0.5490 0.8286 0.1092 +vn -0.8173 -0.5528 0.1626 +vn -0.6965 0.7040 0.1385 +vn -0.2010 0.9796 0.0000 +vn -0.3879 0.9217 0.0000 +vn -0.9810 -0.1939 0.0000 +vn -0.9247 -0.3805 0.0000 +vn -0.5598 0.8286 0.0000 +vn -0.8333 -0.5528 0.0000 +vn -0.7101 0.7040 0.0000 +vn -0.7101 -0.7040 0.0000 +vn -0.8333 0.5528 0.0000 +vn -0.5598 -0.8286 0.0000 +vn -0.9247 0.3805 0.0000 +vn -0.3879 -0.9217 0.0000 +vn -0.9810 0.1939 0.0000 +vn -0.2010 -0.9796 0.0000 +vn -1.0000 0.0000 0.0000 +vn -0.8173 0.5528 -0.1626 +vn -0.9070 0.3805 -0.1804 +vn -0.5490 -0.8286 -0.1092 +vn -0.3804 -0.9217 -0.0757 +vn -0.9622 0.1939 -0.1914 +vn -0.1971 -0.9796 -0.0392 +vn -0.9808 0.0000 -0.1951 +vn -0.1971 0.9796 -0.0392 +vn -0.9622 -0.1939 -0.1914 +vn -0.3804 0.9217 -0.0757 +vn -0.9070 -0.3805 -0.1804 +vn -0.5490 0.8286 -0.1092 +vn -0.8173 -0.5528 -0.1626 +vn -0.6965 0.7040 -0.1385 +vn -0.6965 -0.7040 -0.1385 +vn -0.9063 -0.1939 -0.3754 +vn -0.8544 -0.3805 -0.3539 +vn -0.3583 0.9217 -0.1484 +vn -0.5171 0.8286 -0.2142 +vn -0.7699 -0.5528 -0.3189 +vn -0.6561 0.7040 -0.2717 +vn -0.6561 -0.7040 -0.2717 +vn -0.7699 0.5528 -0.3189 +vn -0.5171 -0.8286 -0.2142 +vn -0.8544 0.3805 -0.3539 +vn -0.3583 -0.9217 -0.1484 +vn -0.9063 0.1939 -0.3754 +vn -0.1856 -0.9796 -0.0769 +vn -0.9239 0.0000 -0.3827 +vn -0.1856 0.9796 -0.0769 +vn -0.4654 -0.8286 -0.3110 +vn -0.3225 -0.9217 -0.2155 +vn -0.7689 0.3805 -0.5137 +vn -0.8157 0.1939 -0.5450 +vn -0.1671 -0.9796 -0.1116 +vn -0.8314 0.0000 -0.5556 +vn -0.1671 0.9796 -0.1116 +vn -0.8157 -0.1939 -0.5450 +vn -0.3225 0.9217 -0.2155 +vn -0.7689 -0.3805 -0.5137 +vn -0.4654 0.8286 -0.3110 +vn -0.6929 -0.5528 -0.4630 +vn -0.5904 0.7040 -0.3945 +vn -0.5904 -0.7040 -0.3945 +vn -0.6929 0.5528 -0.4630 +vn -0.2743 0.9217 -0.2743 +vn -0.3958 0.8286 -0.3958 +vn -0.6539 -0.3805 -0.6539 +vn -0.5893 -0.5528 -0.5893 +vn -0.5021 0.7040 -0.5021 +vn -0.5021 -0.7040 -0.5021 +vn -0.5893 0.5528 -0.5893 +vn -0.3958 -0.8286 -0.3958 +vn -0.6539 0.3805 -0.6539 +vn -0.2743 -0.9217 -0.2743 +vn -0.6937 0.1939 -0.6937 +vn -0.1421 -0.9796 -0.1421 +vn -0.7071 0.0000 -0.7071 +vn -0.1421 0.9796 -0.1421 +vn -0.6937 -0.1939 -0.6937 +vn -0.5137 0.3805 -0.7689 +vn -0.5450 0.1939 -0.8157 +vn -0.2155 -0.9217 -0.3225 +vn -0.1116 -0.9796 -0.1671 +vn -0.5556 0.0000 -0.8314 +vn -0.1116 0.9796 -0.1671 +vn -0.5450 -0.1939 -0.8157 +vn -0.2155 0.9217 -0.3225 +vn -0.5137 -0.3805 -0.7689 +vn -0.3110 0.8286 -0.4654 +vn -0.4630 -0.5528 -0.6929 +vn -0.3945 0.7040 -0.5904 +vn -0.3945 -0.7040 -0.5904 +vn -0.4630 0.5528 -0.6929 +vn -0.3110 -0.8286 -0.4654 +vn -0.3539 -0.3805 -0.8544 +vn -0.3189 -0.5528 -0.7699 +vn -0.2142 0.8286 -0.5171 +vn -0.2717 0.7040 -0.6561 +vn -0.2717 -0.7040 -0.6561 +vn -0.3189 0.5528 -0.7699 +vn -0.2142 -0.8286 -0.5171 +vn -0.3539 0.3805 -0.8544 +vn -0.1484 -0.9217 -0.3583 +vn -0.3754 0.1939 -0.9063 +vn -0.0769 -0.9796 -0.1856 +vn -0.3827 0.0000 -0.9239 +vn -0.0769 0.9796 -0.1856 +vn -0.3754 -0.1939 -0.9063 +vn -0.1484 0.9217 -0.3583 +vn -0.0757 -0.9217 -0.3804 +vn -0.0392 -0.9796 -0.1971 +vn -0.1914 0.1939 -0.9622 +vn -0.1951 0.0000 -0.9808 +vn -0.0392 0.9796 -0.1971 +vn -0.1914 -0.1939 -0.9622 +vn -0.0757 0.9217 -0.3804 +vn -0.1804 -0.3805 -0.9070 +vn -0.1092 0.8286 -0.5490 +vn -0.1626 -0.5528 -0.8173 +vn -0.1385 0.7040 -0.6965 +vn -0.1385 -0.7040 -0.6965 +vn -0.1626 0.5528 -0.8173 +vn -0.1092 -0.8286 -0.5490 +vn -0.1804 0.3805 -0.9070 +usemtl Material.001 +s 1 +f 4/1/1 3/2/2 13/3/3 14/4/4 +f 480/5/5 479/6/6 21/7/7 22/8/8 +f 5/9/9 4/1/1 14/4/4 15/10/10 +f 10/11/11 480/5/5 22/8/8 23/12/12 +f 6/13/13 5/9/9 15/10/10 16/14/14 +f 481/15/15 10/11/11 23/12/12 24/16/16 +f 7/17/17 6/13/13 16/14/14 17/18/18 +f 482/19/19 481/15/15 24/16/16 25/20/20 +f 8/21/21 7/17/17 17/18/18 18/22/22 +f 1/23/23 297/24/24 11/25/25 +f 206/26/26 482/19/19 25/20/20 +f 9/27/27 8/21/21 18/22/22 19/28/28 +f 2/29/29 1/23/23 11/25/25 12/30/30 +f 478/31/31 9/27/27 19/28/28 20/32/32 +f 3/2/2 2/29/29 12/30/30 13/3/3 +f 479/6/6 478/31/31 20/32/32 21/7/7 +f 20/32/32 19/28/28 34/33/33 35/34/34 +f 13/3/3 12/30/30 27/35/35 28/36/36 +f 21/7/7 20/32/32 35/34/34 36/37/37 +f 14/4/4 13/3/3 28/36/36 29/38/38 +f 22/8/8 21/7/7 36/37/37 37/39/39 +f 15/10/10 14/4/4 29/38/38 30/40/40 +f 23/12/12 22/8/8 37/39/39 38/41/41 +f 16/14/14 15/10/10 30/40/40 31/42/42 +f 24/16/16 23/12/12 38/41/41 39/43/43 +f 17/18/18 16/14/14 31/42/42 32/44/44 +f 25/20/20 24/16/16 39/43/43 40/45/45 +f 18/22/22 17/18/18 32/44/44 33/46/46 +f 11/25/25 297/47/24 26/48/47 +f 206/49/26 25/20/20 40/45/45 +f 19/28/28 18/22/22 33/46/46 34/33/33 +f 12/30/30 11/25/25 26/48/47 27/35/35 +f 39/43/43 38/41/41 53/50/48 54/51/49 +f 32/44/44 31/42/42 46/52/50 47/53/51 +f 40/45/45 39/43/43 54/51/49 55/54/52 +f 33/46/46 32/44/44 47/53/51 48/55/53 +f 26/48/47 297/56/24 41/57/54 +f 206/58/26 40/45/45 55/54/52 +f 34/33/33 33/46/46 48/55/53 49/59/55 +f 27/35/35 26/48/47 41/57/54 42/60/56 +f 35/34/34 34/33/33 49/59/55 50/61/57 +f 28/36/36 27/35/35 42/60/56 43/62/58 +f 36/37/37 35/34/34 50/61/57 51/63/59 +f 29/38/38 28/36/36 43/62/58 44/64/60 +f 37/39/39 36/37/37 51/63/59 52/65/61 +f 30/40/40 29/38/38 44/64/60 45/66/62 +f 38/41/41 37/39/39 52/65/61 53/50/48 +f 31/42/42 30/40/40 45/66/62 46/52/50 +f 51/63/59 50/61/57 65/67/63 66/68/64 +f 44/64/60 43/62/58 58/69/65 59/70/66 +f 52/65/61 51/63/59 66/68/64 67/71/67 +f 45/66/62 44/64/60 59/70/66 60/72/68 +f 53/50/48 52/65/61 67/71/67 68/73/69 +f 46/52/50 45/66/62 60/72/68 61/74/70 +f 54/51/49 53/50/48 68/73/69 69/75/71 +f 47/53/51 46/52/50 61/74/70 62/76/72 +f 55/54/52 54/51/49 69/75/71 70/77/73 +f 48/55/53 47/53/51 62/76/72 63/78/74 +f 41/57/54 297/79/24 56/80/75 +f 206/81/26 55/54/52 70/77/73 +f 49/59/55 48/55/53 63/78/74 64/82/76 +f 42/60/56 41/57/54 56/80/75 57/83/77 +f 50/61/57 49/59/55 64/82/76 65/67/63 +f 43/62/58 42/60/56 57/83/77 58/69/65 +f 70/77/73 69/75/71 84/84/78 85/85/79 +f 63/78/74 62/76/72 77/86/80 78/87/81 +f 56/80/75 297/88/24 71/89/82 +f 206/90/26 70/77/73 85/85/79 +f 64/82/76 63/78/74 78/87/81 79/91/83 +f 57/83/77 56/80/75 71/89/82 72/92/84 +f 65/67/63 64/82/76 79/91/83 80/93/85 +f 58/69/65 57/83/77 72/92/84 73/94/86 +f 66/68/64 65/67/63 80/93/85 81/95/87 +f 59/70/66 58/69/65 73/94/86 74/96/88 +f 67/71/67 66/68/64 81/95/87 82/97/89 +f 60/72/68 59/70/66 74/96/88 75/98/90 +f 68/73/69 67/71/67 82/97/89 83/99/91 +f 61/74/70 60/72/68 75/98/90 76/100/92 +f 69/75/71 68/73/69 83/99/91 84/84/78 +f 62/76/72 61/74/70 76/100/92 77/86/80 +f 74/96/88 73/94/86 88/101/93 89/102/94 +f 82/97/89 81/95/87 96/103/95 97/104/96 +f 75/98/90 74/96/88 89/102/94 90/105/97 +f 83/99/91 82/97/89 97/104/96 98/106/98 +f 76/100/92 75/98/90 90/105/97 91/107/99 +f 84/84/78 83/99/91 98/106/98 99/108/100 +f 77/86/80 76/100/92 91/107/99 92/109/101 +f 85/85/79 84/84/78 99/108/100 100/110/102 +f 78/87/81 77/86/80 92/109/101 93/111/103 +f 71/89/82 297/112/24 86/113/104 +f 206/114/26 85/85/79 100/110/102 +f 79/91/83 78/87/81 93/111/103 94/115/105 +f 72/92/84 71/89/82 86/113/104 87/116/106 +f 80/93/85 79/91/83 94/115/105 95/117/107 +f 73/94/86 72/92/84 87/116/106 88/101/93 +f 81/95/87 80/93/85 95/117/107 96/103/95 +f 93/111/103 92/109/101 107/118/108 108/119/109 +f 86/113/104 297/120/24 101/121/110 +f 206/122/26 100/110/102 115/123/111 +f 94/115/105 93/111/103 108/119/109 109/124/112 +f 87/116/106 86/113/104 101/121/110 102/125/113 +f 95/117/107 94/115/105 109/124/112 110/126/114 +f 88/101/93 87/116/106 102/125/113 103/127/115 +f 96/103/95 95/117/107 110/126/114 111/128/116 +f 89/102/94 88/101/93 103/127/115 104/129/117 +f 97/104/96 96/103/95 111/128/116 112/130/118 +f 90/105/97 89/102/94 104/129/117 105/131/119 +f 98/106/98 97/104/96 112/130/118 113/132/120 +f 91/107/99 90/105/97 105/131/119 106/133/121 +f 99/108/100 98/106/98 113/132/120 114/134/122 +f 92/109/101 91/107/99 106/133/121 107/118/108 +f 100/110/102 99/108/100 114/134/122 115/123/111 +f 112/130/118 111/128/116 126/135/123 127/136/124 +f 105/131/119 104/129/117 119/137/125 120/138/126 +f 113/132/120 112/130/118 127/136/124 128/139/127 +f 106/133/121 105/131/119 120/138/126 121/140/128 +f 114/134/122 113/132/120 128/139/127 129/141/129 +f 107/118/108 106/133/121 121/140/128 122/142/130 +f 115/123/111 114/134/122 129/141/129 130/143/131 +f 108/119/109 107/118/108 122/142/130 123/144/132 +f 101/121/110 297/145/24 116/146/133 +f 206/147/26 115/123/111 130/143/131 +f 109/124/112 108/119/109 123/144/132 124/148/134 +f 102/125/113 101/121/110 116/146/133 117/149/135 +f 110/126/114 109/124/112 124/148/134 125/150/136 +f 103/127/115 102/125/113 117/149/135 118/151/137 +f 111/128/116 110/126/114 125/150/136 126/135/123 +f 104/129/117 103/127/115 118/151/137 119/137/125 +f 116/146/133 297/152/24 131/153/138 +f 206/154/26 130/143/131 145/155/139 +f 124/148/134 123/144/132 138/156/140 139/157/141 +f 117/149/135 116/146/133 131/153/138 132/158/142 +f 125/150/136 124/148/134 139/157/141 140/159/143 +f 118/151/137 117/149/135 132/158/142 133/160/144 +f 126/135/123 125/150/136 140/159/143 141/161/145 +f 119/137/125 118/151/137 133/160/144 134/162/146 +f 127/136/124 126/135/123 141/161/145 142/163/147 +f 120/138/126 119/137/125 134/162/146 135/164/148 +f 128/139/127 127/136/124 142/163/147 143/165/149 +f 121/140/128 120/138/126 135/164/148 136/166/150 +f 129/141/129 128/139/127 143/165/149 144/167/151 +f 122/142/130 121/140/128 136/166/150 137/168/152 +f 130/143/131 129/141/129 144/167/151 145/155/139 +f 123/144/132 122/142/130 137/168/152 138/156/140 +f 135/164/148 134/162/146 149/169/153 150/170/154 +f 143/165/149 142/163/147 157/171/155 158/172/156 +f 136/166/150 135/164/148 150/170/154 151/173/157 +f 144/167/151 143/165/149 158/172/156 159/174/158 +f 137/168/152 136/166/150 151/173/157 152/175/159 +f 145/155/139 144/167/151 159/174/158 160/176/160 +f 138/156/140 137/168/152 152/175/159 153/177/161 +f 131/153/138 297/178/24 146/179/162 +f 206/180/26 145/155/139 160/176/160 +f 139/157/141 138/156/140 153/177/161 154/181/163 +f 132/158/142 131/153/138 146/179/162 147/182/164 +f 140/159/143 139/157/141 154/181/163 155/183/165 +f 133/160/144 132/158/142 147/182/164 148/184/166 +f 141/161/145 140/159/143 155/183/165 156/185/167 +f 134/162/146 133/160/144 148/184/166 149/169/153 +f 142/163/147 141/161/145 156/185/167 157/171/155 +f 154/181/163 153/177/161 168/186/168 169/187/169 +f 147/182/164 146/179/162 161/188/170 162/189/171 +f 155/183/165 154/181/163 169/187/169 170/190/172 +f 148/184/166 147/182/164 162/189/171 163/191/173 +f 156/185/167 155/183/165 170/190/172 171/192/174 +f 149/169/153 148/184/166 163/191/173 164/193/175 +f 157/171/155 156/185/167 171/192/174 172/194/176 +f 150/170/154 149/169/153 164/193/175 165/195/177 +f 158/172/156 157/171/155 172/194/176 173/196/178 +f 151/173/157 150/170/154 165/195/177 166/197/179 +f 159/174/158 158/172/156 173/196/178 174/198/180 +f 152/175/159 151/173/157 166/197/179 167/199/181 +f 160/176/160 159/174/158 174/198/180 175/200/182 +f 153/177/161 152/175/159 167/199/181 168/186/168 +f 146/179/162 297/201/24 161/188/170 +f 206/202/26 160/176/160 175/200/182 +f 173/196/178 172/194/176 187/203/183 188/204/184 +f 166/197/179 165/195/177 180/205/185 181/206/186 +f 174/198/180 173/196/178 188/204/184 189/207/187 +f 167/199/181 166/197/179 181/206/186 182/208/188 +f 175/200/182 174/198/180 189/207/187 190/209/189 +f 168/186/168 167/199/181 182/208/188 183/210/190 +f 161/188/170 297/211/24 176/212/191 +f 206/213/26 175/200/182 190/209/189 +f 169/187/169 168/186/168 183/210/190 184/214/192 +f 162/189/171 161/188/170 176/212/191 177/215/193 +f 170/190/172 169/187/169 184/214/192 185/216/194 +f 163/191/173 162/189/171 177/215/193 178/217/195 +f 171/192/174 170/190/172 185/216/194 186/218/196 +f 164/193/175 163/191/173 178/217/195 179/219/197 +f 172/194/176 171/192/174 186/218/196 187/203/183 +f 165/195/177 164/193/175 179/219/197 180/205/185 +f 185/216/194 184/214/192 199/220/198 200/221/199 +f 178/217/195 177/215/193 192/222/200 193/223/201 +f 186/218/196 185/216/194 200/221/199 201/224/202 +f 179/219/197 178/217/195 193/223/201 194/225/203 +f 187/203/183 186/218/196 201/224/202 202/226/204 +f 180/205/185 179/219/197 194/225/203 195/227/205 +f 188/204/184 187/203/183 202/226/204 203/228/206 +f 181/206/186 180/205/185 195/227/205 196/229/207 +f 189/207/187 188/204/184 203/228/206 204/230/208 +f 182/208/188 181/206/186 196/229/207 197/231/209 +f 190/209/189 189/207/187 204/230/208 205/232/210 +f 183/210/190 182/208/188 197/231/209 198/233/211 +f 176/212/191 297/234/24 191/235/212 +f 206/236/26 190/209/189 205/232/210 +f 184/214/192 183/210/190 198/233/211 199/220/198 +f 177/215/193 176/212/191 191/235/212 192/222/200 +f 204/230/208 203/228/206 219/237/213 220/238/214 +f 197/231/209 196/229/207 212/239/215 213/240/216 +f 205/232/210 204/230/208 220/238/214 221/241/217 +f 198/233/211 197/231/209 213/240/216 214/242/218 +f 191/235/212 297/243/24 207/244/219 +f 206/245/26 205/232/210 221/241/217 +f 199/220/198 198/233/211 214/242/218 215/246/220 +f 192/222/200 191/235/212 207/244/219 208/247/221 +f 200/221/199 199/220/198 215/246/220 216/248/222 +f 193/223/201 192/222/200 208/247/221 209/249/223 +f 201/224/202 200/221/199 216/248/222 217/250/224 +f 194/225/203 193/223/201 209/249/223 210/251/225 +f 202/226/204 201/224/202 217/250/224 218/252/226 +f 195/227/205 194/225/203 210/251/225 211/253/227 +f 203/228/206 202/226/204 218/252/226 219/237/213 +f 196/229/207 195/227/205 211/253/227 212/239/215 +f 209/249/223 208/247/221 223/254/228 224/255/229 +f 217/250/224 216/248/222 231/256/230 232/257/231 +f 210/251/225 209/249/223 224/255/229 225/258/232 +f 218/252/226 217/250/224 232/257/231 233/259/233 +f 211/253/227 210/251/225 225/258/232 226/260/234 +f 219/237/213 218/252/226 233/259/233 234/261/235 +f 212/239/215 211/253/227 226/260/234 227/262/236 +f 220/238/214 219/237/213 234/261/235 235/263/237 +f 213/240/216 212/239/215 227/262/236 228/264/238 +f 221/241/217 220/238/214 235/263/237 236/265/239 +f 214/242/218 213/240/216 228/264/238 229/266/240 +f 207/244/219 297/267/24 222/268/241 +f 206/269/26 221/241/217 236/265/239 +f 215/246/220 214/242/218 229/266/240 230/270/242 +f 208/247/221 207/244/219 222/268/241 223/254/228 +f 216/248/222 215/246/220 230/270/242 231/256/230 +f 228/264/238 227/262/236 242/271/243 243/272/244 +f 236/265/239 235/263/237 250/273/245 251/274/246 +f 229/266/240 228/264/238 243/272/244 244/275/247 +f 222/268/241 297/276/24 237/277/248 +f 206/278/26 236/265/239 251/274/246 +f 230/270/242 229/266/240 244/275/247 245/279/249 +f 223/254/228 222/268/241 237/277/248 238/280/250 +f 231/256/230 230/270/242 245/279/249 246/281/251 +f 224/255/229 223/254/228 238/280/250 239/282/252 +f 232/257/231 231/256/230 246/281/251 247/283/253 +f 225/258/232 224/255/229 239/282/252 240/284/254 +f 233/259/233 232/257/231 247/283/253 248/285/255 +f 226/260/234 225/258/232 240/284/254 241/286/256 +f 234/261/235 233/259/233 248/285/255 249/287/257 +f 227/262/236 226/260/234 241/286/256 242/271/243 +f 235/263/237 234/261/235 249/287/257 250/273/245 +f 247/283/253 246/281/251 261/288/258 262/289/259 +f 240/284/254 239/282/252 254/290/260 255/291/261 +f 248/285/255 247/283/253 262/289/259 263/292/262 +f 241/286/256 240/284/254 255/291/261 256/293/263 +f 249/287/257 248/285/255 263/292/262 264/294/264 +f 242/271/243 241/286/256 256/293/263 257/295/265 +f 250/273/245 249/287/257 264/294/264 265/296/266 +f 243/272/244 242/271/243 257/295/265 258/297/267 +f 251/274/246 250/273/245 265/296/266 266/298/268 +f 244/275/247 243/272/244 258/297/267 259/299/269 +f 237/277/248 297/300/24 252/301/270 +f 206/302/26 251/274/246 266/298/268 +f 245/279/249 244/275/247 259/299/269 260/303/271 +f 238/280/250 237/277/248 252/301/270 253/304/272 +f 246/281/251 245/279/249 260/303/271 261/288/258 +f 239/282/252 238/280/250 253/304/272 254/290/260 +f 266/298/268 265/296/266 280/305/273 281/306/274 +f 259/299/269 258/297/267 273/307/275 274/308/276 +f 252/301/270 297/309/24 267/310/277 +f 206/311/26 266/298/268 281/306/274 +f 260/303/271 259/299/269 274/308/276 275/312/278 +f 253/304/272 252/301/270 267/310/277 268/313/279 +f 261/288/258 260/303/271 275/312/278 276/314/280 +f 254/290/260 253/304/272 268/313/279 269/315/281 +f 262/289/259 261/288/258 276/314/280 277/316/282 +f 255/291/261 254/290/260 269/315/281 270/317/283 +f 263/292/262 262/289/259 277/316/282 278/318/284 +f 256/293/263 255/291/261 270/317/283 271/319/285 +f 264/294/264 263/292/262 278/318/284 279/320/286 +f 257/295/265 256/293/263 271/319/285 272/321/287 +f 265/296/266 264/294/264 279/320/286 280/305/273 +f 258/297/267 257/295/265 272/321/287 273/307/275 +f 270/317/283 269/315/281 284/322/288 285/323/289 +f 278/318/284 277/316/282 292/324/290 293/325/291 +f 271/319/285 270/317/283 285/323/289 286/326/292 +f 279/320/286 278/318/284 293/325/291 294/327/293 +f 272/321/287 271/319/285 286/326/292 287/328/294 +f 280/305/273 279/320/286 294/327/293 295/329/295 +f 273/307/275 272/321/287 287/328/294 288/330/296 +f 281/306/274 280/305/273 295/329/295 296/331/297 +f 274/308/276 273/307/275 288/330/296 289/332/298 +f 267/310/277 297/333/24 282/334/299 +f 206/335/26 281/306/274 296/331/297 +f 275/312/278 274/308/276 289/332/298 290/336/300 +f 268/313/279 267/310/277 282/334/299 283/337/301 +f 276/314/280 275/312/278 290/336/300 291/338/302 +f 269/315/281 268/313/279 283/337/301 284/322/288 +f 277/316/282 276/314/280 291/338/302 292/324/290 +f 289/332/298 288/330/296 304/339/303 305/340/304 +f 282/334/299 297/341/24 298/342/305 +f 206/343/26 296/331/297 312/344/306 +f 290/336/300 289/332/298 305/340/304 306/345/307 +f 283/337/301 282/334/299 298/342/305 299/346/308 +f 291/338/302 290/336/300 306/345/307 307/347/309 +f 284/322/288 283/337/301 299/346/308 300/348/310 +f 292/324/290 291/338/302 307/347/309 308/349/311 +f 285/323/289 284/322/288 300/348/310 301/350/312 +f 293/325/291 292/324/290 308/349/311 309/351/313 +f 286/326/292 285/323/289 301/350/312 302/352/314 +f 294/327/293 293/325/291 309/351/313 310/353/315 +f 287/328/294 286/326/292 302/352/314 303/354/316 +f 295/329/295 294/327/293 310/353/315 311/355/317 +f 288/330/296 287/328/294 303/354/316 304/339/303 +f 296/331/297 295/329/295 311/355/317 312/344/306 +f 309/351/313 308/349/311 323/356/318 324/357/319 +f 302/352/314 301/350/312 316/358/320 317/359/321 +f 310/353/315 309/351/313 324/357/319 325/360/322 +f 303/354/316 302/352/314 317/359/321 318/361/323 +f 311/355/317 310/353/315 325/360/322 326/362/324 +f 304/339/303 303/354/316 318/361/323 319/363/325 +f 312/344/306 311/355/317 326/362/324 327/364/326 +f 305/340/304 304/339/303 319/363/325 320/365/327 +f 298/342/305 297/366/24 313/367/328 +f 206/368/26 312/344/306 327/364/326 +f 306/345/307 305/340/304 320/365/327 321/369/329 +f 299/346/308 298/342/305 313/367/328 314/370/330 +f 307/347/309 306/345/307 321/369/329 322/371/331 +f 300/348/310 299/346/308 314/370/330 315/372/332 +f 308/349/311 307/347/309 322/371/331 323/356/318 +f 301/350/312 300/348/310 315/372/332 316/358/320 +f 206/373/26 327/364/326 342/374/333 +f 321/369/329 320/365/327 335/375/334 336/376/335 +f 314/370/330 313/367/328 328/377/336 329/378/337 +f 322/371/331 321/369/329 336/376/335 337/379/338 +f 315/372/332 314/370/330 329/378/337 330/380/339 +f 323/356/318 322/371/331 337/379/338 338/381/340 +f 316/358/320 315/372/332 330/380/339 331/382/341 +f 324/357/319 323/356/318 338/381/340 339/383/342 +f 317/359/321 316/358/320 331/382/341 332/384/343 +f 325/360/322 324/357/319 339/383/342 340/385/344 +f 318/361/323 317/359/321 332/384/343 333/386/345 +f 326/362/324 325/360/322 340/385/344 341/387/346 +f 319/363/325 318/361/323 333/386/345 334/388/347 +f 327/364/326 326/362/324 341/387/346 342/374/333 +f 320/365/327 319/363/325 334/388/347 335/375/334 +f 313/367/328 297/389/24 328/377/336 +f 340/385/344 339/383/342 354/390/348 355/391/349 +f 333/386/345 332/384/343 347/392/350 348/393/351 +f 341/387/346 340/385/344 355/391/349 356/394/352 +f 334/388/347 333/386/345 348/393/351 349/395/353 +f 342/374/333 341/387/346 356/394/352 357/396/354 +f 335/375/334 334/388/347 349/395/353 350/397/355 +f 328/377/336 297/398/24 343/399/356 +f 206/400/26 342/374/333 357/396/354 +f 336/376/335 335/375/334 350/397/355 351/401/357 +f 329/378/337 328/377/336 343/399/356 344/402/358 +f 337/379/338 336/376/335 351/401/357 352/403/359 +f 330/380/339 329/378/337 344/402/358 345/404/360 +f 338/381/340 337/379/338 352/403/359 353/405/361 +f 331/382/341 330/380/339 345/404/360 346/406/362 +f 339/383/342 338/381/340 353/405/361 354/390/348 +f 332/384/343 331/382/341 346/406/362 347/392/350 +f 344/402/358 343/399/356 358/407/363 359/408/364 +f 352/403/359 351/401/357 366/409/365 367/410/366 +f 345/404/360 344/402/358 359/408/364 360/411/367 +f 353/405/361 352/403/359 367/410/366 368/412/368 +f 346/406/362 345/404/360 360/411/367 361/413/369 +f 354/390/348 353/405/361 368/412/368 369/414/370 +f 347/392/350 346/406/362 361/413/369 362/415/371 +f 355/391/349 354/390/348 369/414/370 370/416/372 +f 348/393/351 347/392/350 362/415/371 363/417/373 +f 356/394/352 355/391/349 370/416/372 371/418/374 +f 349/395/353 348/393/351 363/417/373 364/419/375 +f 357/396/354 356/394/352 371/418/374 372/420/376 +f 350/397/355 349/395/353 364/419/375 365/421/377 +f 343/399/356 297/422/24 358/407/363 +f 206/423/26 357/396/354 372/420/376 +f 351/401/357 350/397/355 365/421/377 366/409/365 +f 363/424/373 362/425/371 377/426/378 378/427/379 +f 371/428/374 370/429/372 385/430/380 386/431/381 +f 364/432/375 363/424/373 378/427/379 379/433/382 +f 372/434/376 371/428/374 386/431/381 387/435/383 +f 365/436/377 364/432/375 379/433/382 380/437/384 +f 358/438/363 297/439/24 373/440/385 +f 206/441/26 372/434/376 387/435/383 +f 366/442/365 365/436/377 380/437/384 381/443/386 +f 359/444/364 358/438/363 373/440/385 374/445/387 +f 367/446/366 366/442/365 381/443/386 382/447/388 +f 360/448/367 359/444/364 374/445/387 375/449/389 +f 368/450/368 367/446/366 382/447/388 383/451/390 +f 361/452/369 360/448/367 375/449/389 376/453/391 +f 369/454/370 368/450/368 383/451/390 384/455/392 +f 362/425/371 361/452/369 376/453/391 377/426/378 +f 370/429/372 369/454/370 384/455/392 385/430/380 +f 382/447/388 381/443/386 396/456/393 397/457/394 +f 375/449/389 374/445/387 389/458/395 390/459/396 +f 383/451/390 382/447/388 397/457/394 398/460/397 +f 376/453/391 375/449/389 390/459/396 391/461/398 +f 384/455/392 383/451/390 398/460/397 399/462/399 +f 377/426/378 376/453/391 391/461/398 392/463/400 +f 385/430/380 384/455/392 399/462/399 400/464/401 +f 378/427/379 377/426/378 392/463/400 393/465/402 +f 386/431/381 385/430/380 400/464/401 401/466/403 +f 379/433/382 378/427/379 393/465/402 394/467/404 +f 387/435/383 386/431/381 401/466/403 402/468/405 +f 380/437/384 379/433/382 394/467/404 395/469/406 +f 373/440/385 297/470/24 388/471/407 +f 206/472/26 387/435/383 402/468/405 +f 381/443/386 380/437/384 395/469/406 396/456/393 +f 374/445/387 373/440/385 388/471/407 389/458/395 +f 401/466/403 400/464/401 415/473/408 416/474/409 +f 394/467/404 393/465/402 408/475/410 409/476/411 +f 402/468/405 401/466/403 416/474/409 417/477/412 +f 395/469/406 394/467/404 409/476/411 410/478/413 +f 388/471/407 297/479/24 403/480/414 +f 206/481/26 402/468/405 417/477/412 +f 396/456/393 395/469/406 410/478/413 411/482/415 +f 389/458/395 388/471/407 403/480/414 404/483/416 +f 397/457/394 396/456/393 411/482/415 412/484/417 +f 390/459/396 389/458/395 404/483/416 405/485/418 +f 398/460/397 397/457/394 412/484/417 413/486/419 +f 391/461/398 390/459/396 405/485/418 406/487/420 +f 399/462/399 398/460/397 413/486/419 414/488/421 +f 392/463/400 391/461/398 406/487/420 407/489/422 +f 400/464/401 399/462/399 414/488/421 415/473/408 +f 393/465/402 392/463/400 407/489/422 408/475/410 +f 405/485/418 404/483/416 419/490/423 420/491/424 +f 413/486/419 412/484/417 427/492/425 428/493/426 +f 406/487/420 405/485/418 420/491/424 421/494/427 +f 414/488/421 413/486/419 428/493/426 429/495/428 +f 407/489/422 406/487/420 421/494/427 422/496/429 +f 415/473/408 414/488/421 429/495/428 430/497/430 +f 408/475/410 407/489/422 422/496/429 423/498/431 +f 416/474/409 415/473/408 430/497/430 431/499/432 +f 409/476/411 408/475/410 423/498/431 424/500/433 +f 417/477/412 416/474/409 431/499/432 432/501/434 +f 410/478/413 409/476/411 424/500/433 425/502/435 +f 403/480/414 297/503/24 418/504/436 +f 206/505/26 417/477/412 432/501/434 +f 411/482/415 410/478/413 425/502/435 426/506/437 +f 404/483/416 403/480/414 418/504/436 419/490/423 +f 412/484/417 411/482/415 426/506/437 427/492/425 +f 424/500/433 423/498/431 438/507/438 439/508/439 +f 432/501/434 431/499/432 446/509/440 447/510/441 +f 425/502/435 424/500/433 439/508/439 440/511/442 +f 418/504/436 297/512/24 433/513/443 +f 206/514/26 432/501/434 447/510/441 +f 426/506/437 425/502/435 440/511/442 441/515/444 +f 419/490/423 418/504/436 433/513/443 434/516/445 +f 427/492/425 426/506/437 441/515/444 442/517/446 +f 420/491/424 419/490/423 434/516/445 435/518/447 +f 428/493/426 427/492/425 442/517/446 443/519/448 +f 421/494/427 420/491/424 435/518/447 436/520/449 +f 429/495/428 428/493/426 443/519/448 444/521/450 +f 422/496/429 421/494/427 436/520/449 437/522/451 +f 430/497/430 429/495/428 444/521/450 445/523/452 +f 423/498/431 422/496/429 437/522/451 438/507/438 +f 431/499/432 430/497/430 445/523/452 446/509/440 +f 443/519/448 442/517/446 457/524/453 458/525/454 +f 436/520/449 435/518/447 450/526/455 451/527/456 +f 444/521/450 443/519/448 458/525/454 459/528/457 +f 437/522/451 436/520/449 451/527/456 452/529/458 +f 445/523/452 444/521/450 459/528/457 460/530/459 +f 438/507/438 437/522/451 452/529/458 453/531/460 +f 446/509/440 445/523/452 460/530/459 461/532/461 +f 439/508/439 438/507/438 453/531/460 454/533/462 +f 447/510/441 446/509/440 461/532/461 462/534/463 +f 440/511/442 439/508/439 454/533/462 455/535/464 +f 433/513/443 297/536/24 448/537/465 +f 206/538/26 447/510/441 462/534/463 +f 441/515/444 440/511/442 455/535/464 456/539/466 +f 434/516/445 433/513/443 448/537/465 449/540/467 +f 442/517/446 441/515/444 456/539/466 457/524/453 +f 435/518/447 434/516/445 449/540/467 450/526/455 +f 462/534/463 461/532/461 476/541/468 477/542/469 +f 455/535/464 454/533/462 469/543/470 470/544/471 +f 448/537/465 297/545/24 463/546/472 +f 206/547/26 462/534/463 477/542/469 +f 456/539/466 455/535/464 470/544/471 471/548/473 +f 449/540/467 448/537/465 463/546/472 464/549/474 +f 457/524/453 456/539/466 471/548/473 472/550/475 +f 450/526/455 449/540/467 464/549/474 465/551/476 +f 458/525/454 457/524/453 472/550/475 473/552/477 +f 451/527/456 450/526/455 465/551/476 466/553/478 +f 459/528/457 458/525/454 473/552/477 474/554/479 +f 452/529/458 451/527/456 466/553/478 467/555/480 +f 460/530/459 459/528/457 474/554/479 475/556/481 +f 453/531/460 452/529/458 467/555/480 468/557/482 +f 461/532/461 460/530/459 475/556/481 476/541/468 +f 454/533/462 453/531/460 468/557/482 469/543/470 +f 474/554/479 473/552/477 479/6/6 480/5/5 +f 467/555/480 466/553/478 4/1/1 5/9/9 +f 475/556/481 474/554/479 480/5/5 10/11/11 +f 468/557/482 467/555/480 5/9/9 6/13/13 +f 476/541/468 475/556/481 10/11/11 481/15/15 +f 469/543/470 468/557/482 6/13/13 7/17/17 +f 477/542/469 476/541/468 481/15/15 482/19/19 +f 470/544/471 469/543/470 7/17/17 8/21/21 +f 463/546/472 297/558/24 1/23/23 +f 206/559/26 477/542/469 482/19/19 +f 471/548/473 470/544/471 8/21/21 9/27/27 +f 464/549/474 463/546/472 1/23/23 2/29/29 +f 472/550/475 471/548/473 9/27/27 478/31/31 +f 465/551/476 464/549/474 2/29/29 3/2/2 +f 473/552/477 472/550/475 478/31/31 479/6/6 +f 466/553/478 465/551/476 3/2/2 4/1/1 diff --git a/example/modifers/assets/sphere.mtl b/example/modifers/assets/sphere.mtl new file mode 100644 index 0000000..41ff213 --- /dev/null +++ b/example/modifers/assets/sphere.mtl @@ -0,0 +1,14 @@ +# Blender MTL File: 'None' +# Material Count: 1 + +newmtl None +Ns 225.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Ka Untitled.png +map_Kd Untitled.png diff --git a/example/modifers/assets/sphere.obj b/example/modifers/assets/sphere.obj new file mode 100644 index 0000000..ae131f5 --- /dev/null +++ b/example/modifers/assets/sphere.obj @@ -0,0 +1,265 @@ +# Blender v2.82 (sub 7) OBJ File: '' +# www.blender.org +mtllib sphere.mtl +o Sphere +v 0.000000 -1.000000 -0.000000 +v 0.000000 -0.923880 -0.382683 +v 0.270598 -0.923880 -0.270598 +v 0.000000 -0.707107 -0.707107 +v 0.000000 -0.382684 -0.923879 +v 0.653281 -0.382684 -0.653282 +v 0.500000 -0.707107 -0.500000 +v 0.000000 0.000000 -1.000000 +v 0.000000 0.382683 -0.923879 +v 0.653281 0.382683 -0.653282 +v 0.707107 0.000000 -0.707107 +v 0.000000 0.707107 -0.707107 +v 0.000000 0.923880 -0.382683 +v 0.270598 0.923880 -0.270598 +v 0.500000 0.707107 -0.500000 +v 0.000000 1.000000 0.000000 +v 0.707107 -0.707107 -0.000000 +v 0.382683 -0.923880 -0.000000 +v 1.000000 0.000000 0.000000 +v 0.923879 -0.382684 -0.000000 +v 0.707107 0.707107 0.000000 +v 0.923879 0.382683 0.000000 +v 0.382683 0.923880 0.000000 +v 0.707107 -0.000000 0.707106 +v 0.653281 -0.382684 0.653281 +v 0.500000 0.707107 0.500000 +v 0.653281 0.382683 0.653281 +v 0.270598 0.923880 0.270598 +v 0.270598 -0.923880 0.270598 +v 0.500000 -0.707107 0.500000 +v 0.000000 -0.923880 0.382683 +v 0.000000 -0.382684 0.923879 +v 0.000000 -0.707107 0.707106 +v 0.000000 0.382683 0.923879 +v 0.000000 -0.000000 1.000000 +v 0.000000 0.923880 0.382683 +v 0.000000 0.707107 0.707106 +v -0.653281 0.382683 0.653281 +v -0.707107 -0.000000 0.707106 +v -0.270598 0.923880 0.270598 +v -0.500000 0.707107 0.500000 +v -0.500000 -0.707107 0.500000 +v -0.270598 -0.923880 0.270598 +v -0.653281 -0.382684 0.653281 +v -0.707107 -0.707107 -0.000000 +v -0.382683 -0.923880 -0.000000 +v -1.000000 0.000000 0.000000 +v -0.923879 -0.382684 -0.000000 +v -0.707107 0.707107 0.000000 +v -0.923879 0.382683 0.000000 +v -0.382683 0.923880 0.000000 +v -0.500000 0.707107 -0.500000 +v -0.653281 0.382683 -0.653281 +v -0.270598 0.923880 -0.270598 +v -0.270598 -0.923880 -0.270598 +v -0.653281 -0.382684 -0.653281 +v -0.500000 -0.707107 -0.500000 +v -0.707107 0.000000 -0.707107 +vt 0.687500 0.000000 +vt 0.750000 0.125000 +vt 0.625000 0.125000 +vt 0.750000 0.250000 +vt 0.750000 0.375000 +vt 0.625000 0.375000 +vt 0.625000 0.250000 +vt 0.750000 0.500000 +vt 0.750000 0.625000 +vt 0.625000 0.625000 +vt 0.625000 0.500000 +vt 0.750000 0.750000 +vt 0.750000 0.875000 +vt 0.625000 0.875000 +vt 0.625000 0.750000 +vt 0.687500 1.000000 +vt 0.500000 0.250000 +vt 0.500000 0.125000 +vt 0.500000 0.500000 +vt 0.500000 0.375000 +vt 0.500000 0.750000 +vt 0.500000 0.625000 +vt 0.562500 1.000000 +vt 0.500000 0.875000 +vt 0.562500 0.000000 +vt 0.375000 0.500000 +vt 0.375000 0.375000 +vt 0.375000 0.750000 +vt 0.375000 0.625000 +vt 0.437500 1.000000 +vt 0.375000 0.875000 +vt 0.437500 0.000000 +vt 0.375000 0.125000 +vt 0.375000 0.250000 +vt 0.312500 0.000000 +vt 0.250000 0.125000 +vt 0.250000 0.375000 +vt 0.250000 0.250000 +vt 0.250000 0.625000 +vt 0.250000 0.500000 +vt 0.250000 0.875000 +vt 0.250000 0.750000 +vt 0.312500 1.000000 +vt 0.125000 0.625000 +vt 0.125000 0.500000 +vt 0.125000 0.875000 +vt 0.125000 0.750000 +vt 0.125000 0.250000 +vt 0.125000 0.125000 +vt 0.125000 0.375000 +vt 0.187500 1.000000 +vt 0.187500 0.000000 +vt 0.000000 0.250000 +vt 0.000000 0.125000 +vt 0.000000 0.500000 +vt 0.000000 0.375000 +vt 0.000000 0.750000 +vt 0.000000 0.625000 +vt 0.062500 1.000000 +vt 0.000000 0.875000 +vt 0.062500 0.000000 +vt 1.000000 0.625000 +vt 1.000000 0.750000 +vt 0.875000 0.750000 +vt 0.875000 0.625000 +vt 1.000000 0.875000 +vt 0.937500 1.000000 +vt 0.875000 0.875000 +vt 0.937500 0.000000 +vt 1.000000 0.125000 +vt 0.875000 0.125000 +vt 1.000000 0.250000 +vt 1.000000 0.375000 +vt 0.875000 0.375000 +vt 0.875000 0.250000 +vt 1.000000 0.500000 +vt 0.875000 0.500000 +vt 0.812500 0.000000 +vt 0.812500 1.000000 +vn -0.0000 -1.0000 -0.0000 +vn 0.0000 -0.9063 -0.4226 +vn 0.2988 -0.9063 -0.2988 +vn -0.0000 -0.6839 -0.7296 +vn -0.0000 -0.3668 -0.9303 +vn 0.6578 -0.3668 -0.6578 +vn 0.5159 -0.6839 -0.5159 +vn -0.0000 0.0000 -1.0000 +vn -0.0000 0.3668 -0.9303 +vn 0.6578 0.3668 -0.6578 +vn 0.7071 0.0000 -0.7071 +vn -0.0000 0.6839 -0.7296 +vn 0.0000 0.9063 -0.4226 +vn 0.2988 0.9063 -0.2988 +vn 0.5159 0.6839 -0.5159 +vn -0.0000 1.0000 0.0000 +vn 0.7296 -0.6839 -0.0000 +vn 0.4226 -0.9063 -0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.9303 -0.3668 0.0000 +vn 0.7296 0.6839 0.0000 +vn 0.9303 0.3668 0.0000 +vn 0.4226 0.9063 0.0000 +vn 0.7071 0.0000 0.7071 +vn 0.6578 -0.3668 0.6578 +vn 0.5159 0.6839 0.5159 +vn 0.6578 0.3668 0.6578 +vn 0.2988 0.9063 0.2988 +vn 0.2988 -0.9063 0.2988 +vn 0.5159 -0.6839 0.5159 +vn -0.0000 -0.9063 0.4226 +vn 0.0000 -0.3668 0.9303 +vn 0.0000 -0.6839 0.7296 +vn 0.0000 0.3668 0.9303 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.9063 0.4226 +vn 0.0000 0.6839 0.7296 +vn -0.6578 0.3668 0.6578 +vn -0.7071 0.0000 0.7071 +vn -0.2988 0.9063 0.2988 +vn -0.5159 0.6839 0.5159 +vn -0.5159 -0.6839 0.5159 +vn -0.2988 -0.9063 0.2988 +vn -0.6578 -0.3668 0.6578 +vn -0.7296 -0.6839 -0.0000 +vn -0.4226 -0.9063 -0.0000 +vn -1.0000 0.0000 0.0000 +vn -0.9303 -0.3668 0.0000 +vn -0.7296 0.6839 0.0000 +vn -0.9303 0.3668 0.0000 +vn -0.4226 0.9063 0.0000 +vn -0.5159 0.6839 -0.5159 +vn -0.6578 0.3668 -0.6578 +vn -0.2988 0.9063 -0.2988 +vn -0.2988 -0.9063 -0.2988 +vn -0.6578 -0.3668 -0.6578 +vn -0.5159 -0.6839 -0.5159 +vn -0.7071 0.0000 -0.7071 +usemtl None +s 1 +f 1/1/1 2/2/2 3/3/3 +f 4/4/4 5/5/5 6/6/6 7/7/7 +f 8/8/8 9/9/9 10/10/10 11/11/11 +f 12/12/12 13/13/13 14/14/14 15/15/15 +f 2/2/2 4/4/4 7/7/7 3/3/3 +f 5/5/5 8/8/8 11/11/11 6/6/6 +f 9/9/9 12/12/12 15/15/15 10/10/10 +f 13/13/13 16/16/16 14/14/14 +f 3/3/3 7/7/7 17/17/17 18/18/18 +f 6/6/6 11/11/11 19/19/19 20/20/20 +f 10/10/10 15/15/15 21/21/21 22/22/22 +f 14/14/14 16/23/16 23/24/23 +f 1/25/1 3/3/3 18/18/18 +f 7/7/7 6/6/6 20/20/20 17/17/17 +f 11/11/11 10/10/10 22/22/22 19/19/19 +f 15/15/15 14/14/14 23/24/23 21/21/21 +f 20/20/20 19/19/19 24/26/24 25/27/25 +f 22/22/22 21/21/21 26/28/26 27/29/27 +f 23/24/23 16/30/16 28/31/28 +f 1/32/1 18/18/18 29/33/29 +f 17/17/17 20/20/20 25/27/25 30/34/30 +f 19/19/19 22/22/22 27/29/27 24/26/24 +f 21/21/21 23/24/23 28/31/28 26/28/26 +f 18/18/18 17/17/17 30/34/30 29/33/29 +f 1/35/1 29/33/29 31/36/31 +f 30/34/30 25/27/25 32/37/32 33/38/33 +f 24/26/24 27/29/27 34/39/34 35/40/35 +f 26/28/26 28/31/28 36/41/36 37/42/37 +f 29/33/29 30/34/30 33/38/33 31/36/31 +f 25/27/25 24/26/24 35/40/35 32/37/32 +f 27/29/27 26/28/26 37/42/37 34/39/34 +f 28/31/28 16/43/16 36/41/36 +f 35/40/35 34/39/34 38/44/38 39/45/39 +f 37/42/37 36/41/36 40/46/40 41/47/41 +f 31/36/31 33/38/33 42/48/42 43/49/43 +f 32/37/32 35/40/35 39/45/39 44/50/44 +f 34/39/34 37/42/37 41/47/41 38/44/38 +f 36/41/36 16/51/16 40/46/40 +f 1/52/1 31/36/31 43/49/43 +f 33/38/33 32/37/32 44/50/44 42/48/42 +f 43/49/43 42/48/42 45/53/45 46/54/46 +f 44/50/44 39/45/39 47/55/47 48/56/48 +f 38/44/38 41/47/41 49/57/49 50/58/50 +f 40/46/40 16/59/16 51/60/51 +f 1/61/1 43/49/43 46/54/46 +f 42/48/42 44/50/44 48/56/48 45/53/45 +f 39/45/39 38/44/38 50/58/50 47/55/47 +f 41/47/41 40/46/40 51/60/51 49/57/49 +f 50/62/50 49/63/49 52/64/52 53/65/53 +f 51/66/51 16/67/16 54/68/54 +f 1/69/1 46/70/46 55/71/55 +f 45/72/45 48/73/48 56/74/56 57/75/57 +f 47/76/47 50/62/50 53/65/53 58/77/58 +f 49/63/49 51/66/51 54/68/54 52/64/52 +f 46/70/46 45/72/45 57/75/57 55/71/55 +f 48/73/48 47/76/47 58/77/58 56/74/56 +f 1/78/1 55/71/55 2/2/2 +f 57/75/57 56/74/56 5/5/5 4/4/4 +f 58/77/58 53/65/53 9/9/9 8/8/8 +f 52/64/52 54/68/54 13/13/13 12/12/12 +f 55/71/55 57/75/57 4/4/4 2/2/2 +f 56/74/56 58/77/58 8/8/8 5/5/5 +f 53/65/53 52/64/52 12/12/12 9/9/9 +f 54/68/54 16/79/16 13/13/13 diff --git a/example/modifers/assets/sphere.ply b/example/modifers/assets/sphere.ply new file mode 100644 index 0000000..aa74ce0 --- /dev/null +++ b/example/modifers/assets/sphere.ply @@ -0,0 +1,2511 @@ +ply +format ascii 1.0 +comment Created by Blender 2.82 (sub 7) - www.blender.org, source file: '' +element vertex 1984 +property float x +property float y +property float z +property float nx +property float ny +property float nz +property float s +property float t +element face 512 +property list uchar uint vertex_indices +end_header +0.000000 0.707107 0.707107 0.062361 0.633159 0.771506 0.750000 0.750000 +0.000000 0.555570 0.831470 0.062361 0.633159 0.771506 0.750000 0.812500 +0.108386 0.544895 0.831470 0.062361 0.633159 0.771506 0.718750 0.812500 +0.137950 0.693520 0.707107 0.062361 0.633159 0.771506 0.718750 0.750000 +0.000000 0.707106 -0.707107 0.075912 0.770781 -0.632562 0.750000 0.250000 +0.000000 0.831469 -0.555570 0.075912 0.770781 -0.632562 0.750000 0.312500 +0.162212 0.815493 -0.555570 0.075912 0.770781 -0.632562 0.718750 0.312500 +0.137950 0.693520 -0.707107 0.075912 0.770781 -0.632562 0.718750 0.250000 +0.000000 0.831470 0.555570 0.075915 0.770780 0.632563 0.750000 0.687500 +0.000000 0.707107 0.707107 0.075915 0.770780 0.632563 0.750000 0.750000 +0.137950 0.693520 0.707107 0.075915 0.770780 0.632563 0.718750 0.750000 +0.162212 0.815493 0.555570 0.075915 0.770780 0.632563 0.718750 0.687500 +0.000000 0.555570 -0.831470 0.062360 0.633159 -0.771505 0.750000 0.187500 +0.000000 0.707106 -0.707107 0.062360 0.633159 -0.771505 0.750000 0.250000 +0.137950 0.693520 -0.707107 0.062360 0.633159 -0.771505 0.718750 0.250000 +0.108386 0.544895 -0.831470 0.062360 0.633159 -0.771505 0.718750 0.187500 +0.000000 0.923880 0.382683 0.086536 0.878613 0.469628 0.750000 0.625000 +0.000000 0.831470 0.555570 0.086536 0.878613 0.469628 0.750000 0.687500 +0.162212 0.815493 0.555570 0.086536 0.878613 0.469628 0.718750 0.687500 +0.180240 0.906127 0.382683 0.086536 0.878613 0.469628 0.718750 0.625000 +0.000000 0.382683 -0.923880 0.046378 0.470889 -0.880972 0.750000 0.125000 +0.000000 0.555570 -0.831470 0.046378 0.470889 -0.880972 0.750000 0.187500 +0.108386 0.544895 -0.831470 0.046378 0.470889 -0.880972 0.718750 0.187500 +0.074658 0.375330 -0.923880 0.046378 0.470889 -0.880972 0.718750 0.125000 +0.000000 0.980785 0.195090 0.093835 0.952718 0.289004 0.750000 0.562500 +0.000000 0.923880 0.382683 0.093835 0.952718 0.289004 0.750000 0.625000 +0.180240 0.906127 0.382683 0.093835 0.952718 0.289004 0.718750 0.625000 +0.191342 0.961940 0.195090 0.093835 0.952718 0.289004 0.718750 0.562500 +0.000000 0.195090 -0.980785 0.028578 0.290166 -0.956550 0.750000 0.062500 +0.000000 0.382683 -0.923880 0.028578 0.290166 -0.956550 0.750000 0.125000 +0.074658 0.375330 -0.923880 0.028578 0.290166 -0.956550 0.718750 0.125000 +0.038060 0.191341 -0.980785 0.028578 0.290166 -0.956550 0.718750 0.062500 +0.000000 1.000000 0.000000 0.097550 0.990438 0.097550 0.750000 0.500000 +0.000000 0.980785 0.195090 0.097550 0.990438 0.097550 0.750000 0.562500 +0.191342 0.961940 0.195090 0.097550 0.990438 0.097550 0.718750 0.562500 +0.195090 0.980785 0.000000 0.097550 0.990438 0.097550 0.718750 0.500000 +0.000000 0.195090 0.980785 0.009653 0.098012 0.995138 0.750000 0.937500 +-0.000000 -0.000001 1.000000 0.009653 0.098012 0.995138 0.734375 1.000000 +0.038060 0.191342 0.980785 0.009653 0.098012 0.995138 0.718750 0.937500 +0.000000 -0.000000 -1.000000 0.009653 0.098012 -0.995138 0.734375 0.000000 +0.000000 0.195090 -0.980785 0.009653 0.098012 -0.995138 0.750000 0.062500 +0.038060 0.191341 -0.980785 0.009653 0.098012 -0.995138 0.718750 0.062500 +0.000000 0.980785 -0.195090 0.097550 0.990438 -0.097550 0.750000 0.437500 +0.000000 1.000000 0.000000 0.097550 0.990438 -0.097550 0.750000 0.500000 +0.195090 0.980785 0.000000 0.097550 0.990438 -0.097550 0.718750 0.500000 +0.191342 0.961940 -0.195090 0.097550 0.990438 -0.097550 0.718750 0.437500 +0.000000 0.382683 0.923880 0.028579 0.290166 0.956549 0.750000 0.875000 +0.000000 0.195090 0.980785 0.028579 0.290166 0.956549 0.750000 0.937500 +0.038060 0.191342 0.980785 0.028579 0.290166 0.956549 0.718750 0.937500 +0.074658 0.375330 0.923880 0.028579 0.290166 0.956549 0.718750 0.875000 +0.000000 0.923879 -0.382683 0.093833 0.952718 -0.289005 0.750000 0.375000 +0.000000 0.980785 -0.195090 0.093833 0.952718 -0.289005 0.750000 0.437500 +0.191342 0.961940 -0.195090 0.093833 0.952718 -0.289005 0.718750 0.437500 +0.180240 0.906127 -0.382683 0.093833 0.952718 -0.289005 0.718750 0.375000 +0.000000 0.555570 0.831470 0.046379 0.470890 0.880972 0.750000 0.812500 +0.000000 0.382683 0.923880 0.046379 0.470890 0.880972 0.750000 0.875000 +0.074658 0.375330 0.923880 0.046379 0.470890 0.880972 0.718750 0.875000 +0.108386 0.544895 0.831470 0.046379 0.470890 0.880972 0.718750 0.812500 +0.000000 0.831469 -0.555570 0.086532 0.878613 -0.469629 0.750000 0.312500 +0.000000 0.923879 -0.382683 0.086532 0.878613 -0.469629 0.750000 0.375000 +0.180240 0.906127 -0.382683 0.086532 0.878613 -0.469629 0.718750 0.375000 +0.162212 0.815493 -0.555570 0.086532 0.878613 -0.469629 0.718750 0.312500 +0.108386 0.544895 0.831470 0.137353 0.452793 0.880972 0.718750 0.812500 +0.074658 0.375330 0.923880 0.137353 0.452793 0.880972 0.718750 0.875000 +0.146447 0.353553 0.923880 0.137353 0.452793 0.880972 0.687500 0.875000 +0.212608 0.513280 0.831470 0.137353 0.452793 0.880972 0.687500 0.812500 +0.162212 0.815493 -0.555570 0.256282 0.844848 -0.469628 0.718750 0.312500 +0.180240 0.906127 -0.382683 0.256282 0.844848 -0.469628 0.718750 0.375000 +0.353554 0.853553 -0.382683 0.256282 0.844848 -0.469628 0.687500 0.375000 +0.318190 0.768178 -0.555570 0.256282 0.844848 -0.469628 0.687500 0.312500 +0.137950 0.693520 0.707107 0.184686 0.608827 0.771506 0.718750 0.750000 +0.108386 0.544895 0.831470 0.184686 0.608827 0.771506 0.718750 0.812500 +0.212608 0.513280 0.831470 0.184686 0.608827 0.771506 0.687500 0.812500 +0.270598 0.653281 0.707107 0.184686 0.608827 0.771506 0.687500 0.750000 +0.137950 0.693520 -0.707107 0.224828 0.741159 -0.632563 0.718750 0.250000 +0.162212 0.815493 -0.555570 0.224828 0.741159 -0.632563 0.718750 0.312500 +0.318190 0.768178 -0.555570 0.224828 0.741159 -0.632563 0.687500 0.312500 +0.270598 0.653281 -0.707107 0.224828 0.741159 -0.632563 0.687500 0.250000 +0.162212 0.815493 0.555570 0.224828 0.741159 0.632563 0.718750 0.687500 +0.137950 0.693520 0.707107 0.224828 0.741159 0.632563 0.718750 0.750000 +0.270598 0.653281 0.707107 0.224828 0.741159 0.632563 0.687500 0.750000 +0.318190 0.768178 0.555570 0.224828 0.741159 0.632563 0.687500 0.687500 +0.108386 0.544895 -0.831470 0.184686 0.608827 -0.771506 0.718750 0.187500 +0.137950 0.693520 -0.707107 0.184686 0.608827 -0.771506 0.718750 0.250000 +0.270598 0.653281 -0.707107 0.184686 0.608827 -0.771506 0.687500 0.250000 +0.212608 0.513280 -0.831470 0.184686 0.608827 -0.771506 0.687500 0.187500 +0.180240 0.906127 0.382683 0.256282 0.844848 0.469628 0.718750 0.625000 +0.162212 0.815493 0.555570 0.256282 0.844848 0.469628 0.718750 0.687500 +0.318190 0.768178 0.555570 0.256282 0.844848 0.469628 0.687500 0.687500 +0.353553 0.853553 0.382683 0.256282 0.844848 0.469628 0.687500 0.625000 +0.074658 0.375330 -0.923880 0.137353 0.452793 -0.880972 0.718750 0.125000 +0.108386 0.544895 -0.831470 0.137353 0.452793 -0.880972 0.718750 0.187500 +0.212608 0.513280 -0.831470 0.137353 0.452793 -0.880972 0.687500 0.187500 +0.146447 0.353553 -0.923880 0.137353 0.452793 -0.880972 0.687500 0.125000 +0.191342 0.961940 0.195090 0.277898 0.916106 0.289004 0.718750 0.562500 +0.180240 0.906127 0.382683 0.277898 0.916106 0.289004 0.718750 0.625000 +0.353553 0.853553 0.382683 0.277898 0.916106 0.289004 0.687500 0.625000 +0.375330 0.906127 0.195090 0.277898 0.916106 0.289004 0.687500 0.562500 +0.038060 0.191341 -0.980785 0.084638 0.279015 -0.956550 0.718750 0.062500 +0.074658 0.375330 -0.923880 0.084638 0.279015 -0.956550 0.718750 0.125000 +0.146447 0.353553 -0.923880 0.084638 0.279015 -0.956550 0.687500 0.125000 +0.074658 0.180240 -0.980785 0.084638 0.279015 -0.956550 0.687500 0.062500 +0.195090 0.980785 0.000000 0.288900 0.952376 0.097550 0.718750 0.500000 +0.191342 0.961940 0.195090 0.288900 0.952376 0.097550 0.718750 0.562500 +0.375330 0.906127 0.195090 0.288900 0.952376 0.097550 0.687500 0.562500 +0.382684 0.923879 0.000000 0.288900 0.952376 0.097550 0.687500 0.500000 +0.038060 0.191342 0.980785 0.028589 0.094246 0.995138 0.718750 0.937500 +-0.000000 -0.000001 1.000000 0.028589 0.094246 0.995138 0.703125 1.000000 +0.074658 0.180240 0.980785 0.028589 0.094246 0.995138 0.687500 0.937500 +0.000000 -0.000000 -1.000000 0.028589 0.094246 -0.995138 0.703125 0.000000 +0.038060 0.191341 -0.980785 0.028589 0.094246 -0.995138 0.718750 0.062500 +0.074658 0.180240 -0.980785 0.028589 0.094246 -0.995138 0.687500 0.062500 +0.191342 0.961940 -0.195090 0.288901 0.952376 -0.097550 0.718750 0.437500 +0.195090 0.980785 0.000000 0.288901 0.952376 -0.097550 0.718750 0.500000 +0.382684 0.923879 0.000000 0.288901 0.952376 -0.097550 0.687500 0.500000 +0.375330 0.906127 -0.195090 0.288901 0.952376 -0.097550 0.687500 0.437500 +0.074658 0.375330 0.923880 0.084638 0.279015 0.956550 0.718750 0.875000 +0.038060 0.191342 0.980785 0.084638 0.279015 0.956550 0.718750 0.937500 +0.074658 0.180240 0.980785 0.084638 0.279015 0.956550 0.687500 0.937500 +0.146447 0.353553 0.923880 0.084638 0.279015 0.956550 0.687500 0.875000 +0.180240 0.906127 -0.382683 0.277898 0.916106 -0.289004 0.718750 0.375000 +0.191342 0.961940 -0.195090 0.277898 0.916106 -0.289004 0.718750 0.437500 +0.375330 0.906127 -0.195090 0.277898 0.916106 -0.289004 0.687500 0.437500 +0.353554 0.853553 -0.382683 0.277898 0.916106 -0.289004 0.687500 0.375000 +0.375330 0.906127 0.195090 0.451281 0.844288 0.289004 0.687500 0.562500 +0.353553 0.853553 0.382683 0.451281 0.844288 0.289004 0.687500 0.625000 +0.513280 0.768178 0.382683 0.451281 0.844288 0.289004 0.656250 0.625000 +0.544895 0.815493 0.195090 0.451281 0.844288 0.289004 0.656250 0.562500 +0.074658 0.180240 -0.980785 0.137445 0.257142 -0.956550 0.687500 0.062500 +0.146447 0.353553 -0.923880 0.137445 0.257142 -0.956550 0.687500 0.125000 +0.212608 0.318189 -0.923880 0.137445 0.257142 -0.956550 0.656250 0.125000 +0.108386 0.162211 -0.980785 0.137445 0.257142 -0.956550 0.656250 0.062500 +0.382684 0.923879 0.000000 0.469149 0.877715 0.097550 0.687500 0.500000 +0.375330 0.906127 0.195090 0.469149 0.877715 0.097550 0.687500 0.562500 +0.544895 0.815493 0.195090 0.469149 0.877715 0.097550 0.656250 0.562500 +0.555570 0.831469 0.000000 0.469149 0.877715 0.097550 0.656250 0.500000 +0.074658 0.180240 0.980785 0.046426 0.086857 0.995138 0.687500 0.937500 +-0.000000 -0.000001 1.000000 0.046426 0.086857 0.995138 0.671875 1.000000 +0.108387 0.162212 0.980785 0.046426 0.086857 0.995138 0.656250 0.937500 +0.000000 -0.000000 -1.000000 0.046426 0.086857 -0.995138 0.671875 0.000000 +0.074658 0.180240 -0.980785 0.046426 0.086857 -0.995138 0.687500 0.062500 +0.108386 0.162211 -0.980785 0.046426 0.086857 -0.995138 0.656250 0.062500 +0.375330 0.906127 -0.195090 0.469149 0.877715 -0.097550 0.687500 0.437500 +0.382684 0.923879 0.000000 0.469149 0.877715 -0.097550 0.687500 0.500000 +0.555570 0.831469 0.000000 0.469149 0.877715 -0.097550 0.656250 0.500000 +0.544895 0.815493 -0.195090 0.469149 0.877715 -0.097550 0.656250 0.437500 +0.146447 0.353553 0.923880 0.137445 0.257142 0.956549 0.687500 0.875000 +0.074658 0.180240 0.980785 0.137445 0.257142 0.956549 0.687500 0.937500 +0.108387 0.162212 0.980785 0.137445 0.257142 0.956549 0.656250 0.937500 +0.212608 0.318190 0.923880 0.137445 0.257142 0.956549 0.656250 0.875000 +0.353554 0.853553 -0.382683 0.451281 0.844288 -0.289004 0.687500 0.375000 +0.375330 0.906127 -0.195090 0.451281 0.844288 -0.289004 0.687500 0.437500 +0.544895 0.815493 -0.195090 0.451281 0.844288 -0.289004 0.656250 0.437500 +0.513280 0.768178 -0.382683 0.451281 0.844288 -0.289004 0.656250 0.375000 +0.212608 0.513280 0.831470 0.223050 0.417297 0.880972 0.687500 0.812500 +0.146447 0.353553 0.923880 0.223050 0.417297 0.880972 0.687500 0.875000 +0.212608 0.318190 0.923880 0.223050 0.417297 0.880972 0.656250 0.875000 +0.308658 0.461940 0.831470 0.223050 0.417297 0.880972 0.656250 0.812500 +0.318190 0.768178 -0.555570 0.416179 0.778617 -0.469628 0.687500 0.312500 +0.353554 0.853553 -0.382683 0.416179 0.778617 -0.469628 0.687500 0.375000 +0.513280 0.768178 -0.382683 0.416179 0.778617 -0.469628 0.656250 0.375000 +0.461940 0.691342 -0.555570 0.416179 0.778617 -0.469628 0.656250 0.312500 +0.270598 0.653281 0.707107 0.299913 0.561098 0.771506 0.687500 0.750000 +0.212608 0.513280 0.831470 0.299913 0.561098 0.771506 0.687500 0.812500 +0.308658 0.461940 0.831470 0.299913 0.561098 0.771506 0.656250 0.812500 +0.392848 0.587938 0.707107 0.299913 0.561098 0.771506 0.656250 0.750000 +0.270598 0.653281 -0.707107 0.365101 0.683056 -0.632563 0.687500 0.250000 +0.318190 0.768178 -0.555570 0.365101 0.683056 -0.632563 0.687500 0.312500 +0.461940 0.691342 -0.555570 0.365101 0.683056 -0.632563 0.656250 0.312500 +0.392848 0.587938 -0.707107 0.365101 0.683056 -0.632563 0.656250 0.250000 +0.318190 0.768178 0.555570 0.365101 0.683056 0.632563 0.687500 0.687500 +0.270598 0.653281 0.707107 0.365101 0.683056 0.632563 0.687500 0.750000 +0.392848 0.587938 0.707107 0.365101 0.683056 0.632563 0.656250 0.750000 +0.461940 0.691342 0.555570 0.365101 0.683056 0.632563 0.656250 0.687500 +0.212608 0.513280 -0.831470 0.299913 0.561098 -0.771506 0.687500 0.187500 +0.270598 0.653281 -0.707107 0.299913 0.561098 -0.771506 0.687500 0.250000 +0.392848 0.587938 -0.707107 0.299913 0.561098 -0.771506 0.656250 0.250000 +0.308658 0.461940 -0.831470 0.299913 0.561098 -0.771506 0.656250 0.187500 +0.353553 0.853553 0.382683 0.416179 0.778617 0.469628 0.687500 0.625000 +0.318190 0.768178 0.555570 0.416179 0.778617 0.469628 0.687500 0.687500 +0.461940 0.691342 0.555570 0.416179 0.778617 0.469628 0.656250 0.687500 +0.513280 0.768178 0.382683 0.416179 0.778617 0.469628 0.656250 0.625000 +0.146447 0.353553 -0.923880 0.223050 0.417297 -0.880972 0.687500 0.125000 +0.212608 0.513280 -0.831470 0.223050 0.417297 -0.880972 0.687500 0.187500 +0.308658 0.461940 -0.831470 0.223050 0.417297 -0.880972 0.656250 0.187500 +0.212608 0.318189 -0.923880 0.223050 0.417297 -0.880972 0.656250 0.125000 +0.461940 0.691342 -0.555570 0.560083 0.682463 -0.469628 0.656250 0.312500 +0.513280 0.768178 -0.382683 0.560083 0.682463 -0.469628 0.656250 0.375000 +0.653282 0.653281 -0.382683 0.560083 0.682463 -0.469628 0.625000 0.375000 +0.587938 0.587938 -0.555570 0.560083 0.682463 -0.469628 0.625000 0.312500 +0.392848 0.587938 0.707107 0.403615 0.491806 0.771506 0.656250 0.750000 +0.308658 0.461940 0.831470 0.403615 0.491806 0.771506 0.656250 0.812500 +0.392848 0.392847 0.831470 0.403615 0.491806 0.771506 0.625000 0.812500 +0.500000 0.500000 0.707107 0.403615 0.491806 0.771506 0.625000 0.750000 +0.392848 0.587938 -0.707107 0.491344 0.598704 -0.632562 0.656250 0.250000 +0.461940 0.691342 -0.555570 0.491344 0.598704 -0.632562 0.656250 0.312500 +0.587938 0.587938 -0.555570 0.491344 0.598704 -0.632562 0.625000 0.312500 +0.500000 0.500000 -0.707107 0.491344 0.598704 -0.632562 0.625000 0.250000 +0.461940 0.691342 0.555570 0.491344 0.598704 0.632562 0.656250 0.687500 +0.392848 0.587938 0.707107 0.491344 0.598704 0.632562 0.656250 0.750000 +0.500000 0.500000 0.707107 0.491344 0.598704 0.632562 0.625000 0.750000 +0.587938 0.587938 0.555570 0.491344 0.598704 0.632562 0.625000 0.687500 +0.308658 0.461940 -0.831470 0.403615 0.491806 -0.771506 0.656250 0.187500 +0.392848 0.587938 -0.707107 0.403615 0.491806 -0.771506 0.656250 0.250000 +0.500000 0.500000 -0.707107 0.403615 0.491806 -0.771506 0.625000 0.250000 +0.392848 0.392847 -0.831470 0.403615 0.491806 -0.771506 0.625000 0.187500 +0.513280 0.768178 0.382683 0.560083 0.682463 0.469628 0.656250 0.625000 +0.461940 0.691342 0.555570 0.560083 0.682463 0.469628 0.656250 0.687500 +0.587938 0.587938 0.555570 0.560083 0.682463 0.469628 0.625000 0.687500 +0.653282 0.653281 0.382683 0.560083 0.682463 0.469628 0.625000 0.625000 +0.212608 0.318189 -0.923880 0.300175 0.365764 -0.880972 0.656250 0.125000 +0.308658 0.461940 -0.831470 0.300175 0.365764 -0.880972 0.656250 0.187500 +0.392848 0.392847 -0.831470 0.300175 0.365764 -0.880972 0.625000 0.187500 +0.270598 0.270598 -0.923880 0.300175 0.365764 -0.880972 0.625000 0.125000 +0.544895 0.815493 0.195090 0.607322 0.740024 0.289004 0.656250 0.562500 +0.513280 0.768178 0.382683 0.607322 0.740024 0.289004 0.656250 0.625000 +0.653282 0.653281 0.382683 0.607322 0.740024 0.289004 0.625000 0.625000 +0.693520 0.693520 0.195090 0.607322 0.740024 0.289004 0.625000 0.562500 +0.108386 0.162211 -0.980785 0.184970 0.225386 -0.956550 0.656250 0.062500 +0.212608 0.318189 -0.923880 0.184970 0.225386 -0.956550 0.656250 0.125000 +0.270598 0.270598 -0.923880 0.184970 0.225386 -0.956550 0.625000 0.125000 +0.137950 0.137949 -0.980785 0.184970 0.225386 -0.956550 0.625000 0.062500 +0.555570 0.831469 0.000000 0.631368 0.769324 0.097550 0.656250 0.500000 +0.544895 0.815493 0.195090 0.631368 0.769324 0.097550 0.656250 0.562500 +0.693520 0.693520 0.195090 0.631368 0.769324 0.097550 0.625000 0.562500 +0.707107 0.707107 0.000000 0.631368 0.769324 0.097550 0.625000 0.500000 +0.108387 0.162212 0.980785 0.062479 0.076131 0.995138 0.656250 0.937500 +-0.000000 -0.000001 1.000000 0.062479 0.076131 0.995138 0.640625 1.000000 +0.137950 0.137950 0.980785 0.062479 0.076131 0.995138 0.625000 0.937500 +0.000000 -0.000000 -1.000000 0.062479 0.076131 -0.995138 0.640625 0.000000 +0.108386 0.162211 -0.980785 0.062479 0.076131 -0.995138 0.656250 0.062500 +0.137950 0.137949 -0.980785 0.062479 0.076131 -0.995138 0.625000 0.062500 +0.544895 0.815493 -0.195090 0.631368 0.769324 -0.097550 0.656250 0.437500 +0.555570 0.831469 0.000000 0.631368 0.769324 -0.097550 0.656250 0.500000 +0.707107 0.707107 0.000000 0.631368 0.769324 -0.097550 0.625000 0.500000 +0.693520 0.693520 -0.195090 0.631368 0.769324 -0.097550 0.625000 0.437500 +0.212608 0.318190 0.923880 0.184970 0.225387 0.956549 0.656250 0.875000 +0.108387 0.162212 0.980785 0.184970 0.225387 0.956549 0.656250 0.937500 +0.137950 0.137950 0.980785 0.184970 0.225387 0.956549 0.625000 0.937500 +0.270598 0.270598 0.923880 0.184970 0.225387 0.956549 0.625000 0.875000 +0.513280 0.768178 -0.382683 0.607323 0.740025 -0.289004 0.656250 0.375000 +0.544895 0.815493 -0.195090 0.607323 0.740025 -0.289004 0.656250 0.437500 +0.693520 0.693520 -0.195090 0.607323 0.740025 -0.289004 0.625000 0.437500 +0.653282 0.653281 -0.382683 0.607323 0.740025 -0.289004 0.625000 0.375000 +0.308658 0.461940 0.831470 0.300175 0.365764 0.880972 0.656250 0.812500 +0.212608 0.318190 0.923880 0.300175 0.365764 0.880972 0.656250 0.875000 +0.270598 0.270598 0.923880 0.300175 0.365764 0.880972 0.625000 0.875000 +0.392848 0.392847 0.831470 0.300175 0.365764 0.880972 0.625000 0.812500 +0.137950 0.137949 -0.980785 0.225386 0.184970 -0.956550 0.625000 0.062500 +0.270598 0.270598 -0.923880 0.225386 0.184970 -0.956550 0.625000 0.125000 +0.318190 0.212607 -0.923880 0.225386 0.184970 -0.956550 0.593750 0.125000 +0.162212 0.108386 -0.980785 0.225386 0.184970 -0.956550 0.593750 0.062500 +0.707107 0.707107 0.000000 0.769324 0.631367 0.097550 0.625000 0.500000 +0.693520 0.693520 0.195090 0.769324 0.631367 0.097550 0.625000 0.562500 +0.815493 0.544895 0.195090 0.769324 0.631367 0.097550 0.593750 0.562500 +0.831470 0.555570 0.000000 0.769324 0.631367 0.097550 0.593750 0.500000 +0.137950 0.137950 0.980785 0.076131 0.062479 0.995138 0.625000 0.937500 +-0.000000 -0.000001 1.000000 0.076131 0.062479 0.995138 0.609375 1.000000 +0.162212 0.108386 0.980785 0.076131 0.062479 0.995138 0.593750 0.937500 +0.000000 -0.000000 -1.000000 0.076131 0.062479 -0.995138 0.609375 0.000000 +0.137950 0.137949 -0.980785 0.076131 0.062479 -0.995138 0.625000 0.062500 +0.162212 0.108386 -0.980785 0.076131 0.062479 -0.995138 0.593750 0.062500 +0.693520 0.693520 -0.195090 0.769324 0.631367 -0.097550 0.625000 0.437500 +0.707107 0.707107 0.000000 0.769324 0.631367 -0.097550 0.625000 0.500000 +0.831470 0.555570 0.000000 0.769324 0.631367 -0.097550 0.593750 0.500000 +0.815493 0.544895 -0.195090 0.769324 0.631367 -0.097550 0.593750 0.437500 +0.270598 0.270598 0.923880 0.225387 0.184970 0.956550 0.625000 0.875000 +0.137950 0.137950 0.980785 0.225387 0.184970 0.956550 0.625000 0.937500 +0.162212 0.108386 0.980785 0.225387 0.184970 0.956550 0.593750 0.937500 +0.318190 0.212607 0.923880 0.225387 0.184970 0.956550 0.593750 0.875000 +0.653282 0.653281 -0.382683 0.740025 0.607322 -0.289003 0.625000 0.375000 +0.693520 0.693520 -0.195090 0.740025 0.607322 -0.289003 0.625000 0.437500 +0.815493 0.544895 -0.195090 0.740025 0.607322 -0.289003 0.593750 0.437500 +0.768178 0.513280 -0.382683 0.740025 0.607322 -0.289003 0.593750 0.375000 +0.392848 0.392847 0.831470 0.365764 0.300175 0.880972 0.625000 0.812500 +0.270598 0.270598 0.923880 0.365764 0.300175 0.880972 0.625000 0.875000 +0.318190 0.212607 0.923880 0.365764 0.300175 0.880972 0.593750 0.875000 +0.461940 0.308658 0.831470 0.365764 0.300175 0.880972 0.593750 0.812500 +0.587938 0.587938 -0.555570 0.682463 0.560083 -0.469628 0.625000 0.312500 +0.653282 0.653281 -0.382683 0.682463 0.560083 -0.469628 0.625000 0.375000 +0.768178 0.513280 -0.382683 0.682463 0.560083 -0.469628 0.593750 0.375000 +0.691342 0.461940 -0.555570 0.682463 0.560083 -0.469628 0.593750 0.312500 +0.500000 0.500000 0.707107 0.491806 0.403615 0.771506 0.625000 0.750000 +0.392848 0.392847 0.831470 0.491806 0.403615 0.771506 0.625000 0.812500 +0.461940 0.308658 0.831470 0.491806 0.403615 0.771506 0.593750 0.812500 +0.587938 0.392847 0.707107 0.491806 0.403615 0.771506 0.593750 0.750000 +0.500000 0.500000 -0.707107 0.598704 0.491343 -0.632563 0.625000 0.250000 +0.587938 0.587938 -0.555570 0.598704 0.491343 -0.632563 0.625000 0.312500 +0.691342 0.461940 -0.555570 0.598704 0.491343 -0.632563 0.593750 0.312500 +0.587938 0.392847 -0.707107 0.598704 0.491343 -0.632563 0.593750 0.250000 +0.587938 0.587938 0.555570 0.598704 0.491343 0.632563 0.625000 0.687500 +0.500000 0.500000 0.707107 0.598704 0.491343 0.632563 0.625000 0.750000 +0.587938 0.392847 0.707107 0.598704 0.491343 0.632563 0.593750 0.750000 +0.691342 0.461940 0.555570 0.598704 0.491343 0.632563 0.593750 0.687500 +0.392848 0.392847 -0.831470 0.491806 0.403615 -0.771506 0.625000 0.187500 +0.500000 0.500000 -0.707107 0.491806 0.403615 -0.771506 0.625000 0.250000 +0.587938 0.392847 -0.707107 0.491806 0.403615 -0.771506 0.593750 0.250000 +0.461940 0.308658 -0.831470 0.491806 0.403615 -0.771506 0.593750 0.187500 +0.653282 0.653281 0.382683 0.682463 0.560083 0.469628 0.625000 0.625000 +0.587938 0.587938 0.555570 0.682463 0.560083 0.469628 0.625000 0.687500 +0.691342 0.461940 0.555570 0.682463 0.560083 0.469628 0.593750 0.687500 +0.768178 0.513280 0.382683 0.682463 0.560083 0.469628 0.593750 0.625000 +0.270598 0.270598 -0.923880 0.365764 0.300175 -0.880972 0.625000 0.125000 +0.392848 0.392847 -0.831470 0.365764 0.300175 -0.880972 0.625000 0.187500 +0.461940 0.308658 -0.831470 0.365764 0.300175 -0.880972 0.593750 0.187500 +0.318190 0.212607 -0.923880 0.365764 0.300175 -0.880972 0.593750 0.125000 +0.693520 0.693520 0.195090 0.740025 0.607322 0.289004 0.625000 0.562500 +0.653282 0.653281 0.382683 0.740025 0.607322 0.289004 0.625000 0.625000 +0.768178 0.513280 0.382683 0.740025 0.607322 0.289004 0.593750 0.625000 +0.815493 0.544895 0.195090 0.740025 0.607322 0.289004 0.593750 0.562500 +0.587938 0.392847 0.707107 0.561098 0.299913 0.771506 0.593750 0.750000 +0.461940 0.308658 0.831470 0.561098 0.299913 0.771506 0.593750 0.812500 +0.513280 0.212607 0.831470 0.561098 0.299913 0.771506 0.562500 0.812500 +0.653282 0.270598 0.707107 0.561098 0.299913 0.771506 0.562500 0.750000 +0.587938 0.392847 -0.707107 0.683056 0.365101 -0.632563 0.593750 0.250000 +0.691342 0.461940 -0.555570 0.683056 0.365101 -0.632563 0.593750 0.312500 +0.768178 0.318189 -0.555570 0.683056 0.365101 -0.632563 0.562500 0.312500 +0.653282 0.270598 -0.707107 0.683056 0.365101 -0.632563 0.562500 0.250000 +0.691342 0.461940 0.555570 0.683056 0.365101 0.632563 0.593750 0.687500 +0.587938 0.392847 0.707107 0.683056 0.365101 0.632563 0.593750 0.750000 +0.653282 0.270598 0.707107 0.683056 0.365101 0.632563 0.562500 0.750000 +0.768178 0.318189 0.555570 0.683056 0.365101 0.632563 0.562500 0.687500 +0.461940 0.308658 -0.831470 0.561098 0.299913 -0.771506 0.593750 0.187500 +0.587938 0.392847 -0.707107 0.561098 0.299913 -0.771506 0.593750 0.250000 +0.653282 0.270598 -0.707107 0.561098 0.299913 -0.771506 0.562500 0.250000 +0.513280 0.212607 -0.831470 0.561098 0.299913 -0.771506 0.562500 0.187500 +0.768178 0.513280 0.382683 0.778617 0.416179 0.469628 0.593750 0.625000 +0.691342 0.461940 0.555570 0.778617 0.416179 0.469628 0.593750 0.687500 +0.768178 0.318189 0.555570 0.778617 0.416179 0.469628 0.562500 0.687500 +0.853554 0.353553 0.382683 0.778617 0.416179 0.469628 0.562500 0.625000 +0.318190 0.212607 -0.923880 0.417297 0.223050 -0.880972 0.593750 0.125000 +0.461940 0.308658 -0.831470 0.417297 0.223050 -0.880972 0.593750 0.187500 +0.513280 0.212607 -0.831470 0.417297 0.223050 -0.880972 0.562500 0.187500 +0.353554 0.146446 -0.923880 0.417297 0.223050 -0.880972 0.562500 0.125000 +0.815493 0.544895 0.195090 0.844288 0.451281 0.289003 0.593750 0.562500 +0.768178 0.513280 0.382683 0.844288 0.451281 0.289003 0.593750 0.625000 +0.853554 0.353553 0.382683 0.844288 0.451281 0.289003 0.562500 0.625000 +0.906128 0.375330 0.195090 0.844288 0.451281 0.289003 0.562500 0.562500 +0.162212 0.108386 -0.980785 0.257142 0.137445 -0.956550 0.593750 0.062500 +0.318190 0.212607 -0.923880 0.257142 0.137445 -0.956550 0.593750 0.125000 +0.353554 0.146446 -0.923880 0.257142 0.137445 -0.956550 0.562500 0.125000 +0.180240 0.074658 -0.980785 0.257142 0.137445 -0.956550 0.562500 0.062500 +0.831470 0.555570 0.000000 0.877715 0.469148 0.097550 0.593750 0.500000 +0.815493 0.544895 0.195090 0.877715 0.469148 0.097550 0.593750 0.562500 +0.906128 0.375330 0.195090 0.877715 0.469148 0.097550 0.562500 0.562500 +0.923880 0.382683 0.000000 0.877715 0.469148 0.097550 0.562500 0.500000 +0.162212 0.108386 0.980785 0.086857 0.046426 0.995138 0.593750 0.937500 +-0.000000 -0.000001 1.000000 0.086857 0.046426 0.995138 0.578125 1.000000 +0.180240 0.074658 0.980785 0.086857 0.046426 0.995138 0.562500 0.937500 +0.000000 -0.000000 -1.000000 0.086857 0.046426 -0.995138 0.578125 0.000000 +0.162212 0.108386 -0.980785 0.086857 0.046426 -0.995138 0.593750 0.062500 +0.180240 0.074658 -0.980785 0.086857 0.046426 -0.995138 0.562500 0.062500 +0.815493 0.544895 -0.195090 0.877715 0.469148 -0.097550 0.593750 0.437500 +0.831470 0.555570 0.000000 0.877715 0.469148 -0.097550 0.593750 0.500000 +0.923880 0.382683 0.000000 0.877715 0.469148 -0.097550 0.562500 0.500000 +0.906128 0.375330 -0.195090 0.877715 0.469148 -0.097550 0.562500 0.437500 +0.318190 0.212607 0.923880 0.257142 0.137445 0.956549 0.593750 0.875000 +0.162212 0.108386 0.980785 0.257142 0.137445 0.956549 0.593750 0.937500 +0.180240 0.074658 0.980785 0.257142 0.137445 0.956549 0.562500 0.937500 +0.353554 0.146446 0.923880 0.257142 0.137445 0.956549 0.562500 0.875000 +0.768178 0.513280 -0.382683 0.844288 0.451281 -0.289003 0.593750 0.375000 +0.815493 0.544895 -0.195090 0.844288 0.451281 -0.289003 0.593750 0.437500 +0.906128 0.375330 -0.195090 0.844288 0.451281 -0.289003 0.562500 0.437500 +0.853554 0.353553 -0.382683 0.844288 0.451281 -0.289003 0.562500 0.375000 +0.461940 0.308658 0.831470 0.417297 0.223050 0.880972 0.593750 0.812500 +0.318190 0.212607 0.923880 0.417297 0.223050 0.880972 0.593750 0.875000 +0.353554 0.146446 0.923880 0.417297 0.223050 0.880972 0.562500 0.875000 +0.513280 0.212607 0.831470 0.417297 0.223050 0.880972 0.562500 0.812500 +0.691342 0.461940 -0.555570 0.778617 0.416179 -0.469628 0.593750 0.312500 +0.768178 0.513280 -0.382683 0.778617 0.416179 -0.469628 0.593750 0.375000 +0.853554 0.353553 -0.382683 0.778617 0.416179 -0.469628 0.562500 0.375000 +0.768178 0.318189 -0.555570 0.778617 0.416179 -0.469628 0.562500 0.312500 +0.923880 0.382683 0.000000 0.952376 0.288900 0.097551 0.562500 0.500000 +0.906128 0.375330 0.195090 0.952376 0.288900 0.097551 0.562500 0.562500 +0.961940 0.191341 0.195090 0.952376 0.288900 0.097551 0.531250 0.562500 +0.980785 0.195090 0.000000 0.952376 0.288900 0.097551 0.531250 0.500000 +0.180240 0.074658 0.980785 0.094246 0.028589 0.995138 0.562500 0.937500 +-0.000000 -0.000001 1.000000 0.094246 0.028589 0.995138 0.546875 1.000000 +0.191342 0.038060 0.980785 0.094246 0.028589 0.995138 0.531250 0.937500 +0.000000 -0.000000 -1.000000 0.094246 0.028589 -0.995138 0.546875 0.000000 +0.180240 0.074658 -0.980785 0.094246 0.028589 -0.995138 0.562500 0.062500 +0.191342 0.038060 -0.980785 0.094246 0.028589 -0.995138 0.531250 0.062500 +0.906128 0.375330 -0.195090 0.952376 0.288900 -0.097551 0.562500 0.437500 +0.923880 0.382683 0.000000 0.952376 0.288900 -0.097551 0.562500 0.500000 +0.980785 0.195090 0.000000 0.952376 0.288900 -0.097551 0.531250 0.500000 +0.961940 0.191341 -0.195090 0.952376 0.288900 -0.097551 0.531250 0.437500 +0.353554 0.146446 0.923880 0.279015 0.084638 0.956549 0.562500 0.875000 +0.180240 0.074658 0.980785 0.279015 0.084638 0.956549 0.562500 0.937500 +0.191342 0.038060 0.980785 0.279015 0.084638 0.956549 0.531250 0.937500 +0.375331 0.074658 0.923880 0.279015 0.084638 0.956549 0.531250 0.875000 +0.853554 0.353553 -0.382683 0.916106 0.277898 -0.289003 0.562500 0.375000 +0.906128 0.375330 -0.195090 0.916106 0.277898 -0.289003 0.562500 0.437500 +0.961940 0.191341 -0.195090 0.916106 0.277898 -0.289003 0.531250 0.437500 +0.906128 0.180240 -0.382683 0.916106 0.277898 -0.289003 0.531250 0.375000 +0.513280 0.212607 0.831470 0.452794 0.137353 0.880972 0.562500 0.812500 +0.353554 0.146446 0.923880 0.452794 0.137353 0.880972 0.562500 0.875000 +0.375331 0.074658 0.923880 0.452794 0.137353 0.880972 0.531250 0.875000 +0.544895 0.108386 0.831470 0.452794 0.137353 0.880972 0.531250 0.812500 +0.768178 0.318189 -0.555570 0.844849 0.256282 -0.469628 0.562500 0.312500 +0.853554 0.353553 -0.382683 0.844849 0.256282 -0.469628 0.562500 0.375000 +0.906128 0.180240 -0.382683 0.844849 0.256282 -0.469628 0.531250 0.375000 +0.815493 0.162211 -0.555570 0.844849 0.256282 -0.469628 0.531250 0.312500 +0.653282 0.270598 0.707107 0.608827 0.184686 0.771506 0.562500 0.750000 +0.513280 0.212607 0.831470 0.608827 0.184686 0.771506 0.562500 0.812500 +0.544895 0.108386 0.831470 0.608827 0.184686 0.771506 0.531250 0.812500 +0.693520 0.137949 0.707107 0.608827 0.184686 0.771506 0.531250 0.750000 +0.653282 0.270598 -0.707107 0.741159 0.224828 -0.632562 0.562500 0.250000 +0.768178 0.318189 -0.555570 0.741159 0.224828 -0.632562 0.562500 0.312500 +0.815493 0.162211 -0.555570 0.741159 0.224828 -0.632562 0.531250 0.312500 +0.693520 0.137949 -0.707107 0.741159 0.224828 -0.632562 0.531250 0.250000 +0.768178 0.318189 0.555570 0.741159 0.224828 0.632562 0.562500 0.687500 +0.653282 0.270598 0.707107 0.741159 0.224828 0.632562 0.562500 0.750000 +0.693520 0.137949 0.707107 0.741159 0.224828 0.632562 0.531250 0.750000 +0.815493 0.162211 0.555570 0.741159 0.224828 0.632562 0.531250 0.687500 +0.513280 0.212607 -0.831470 0.608827 0.184685 -0.771506 0.562500 0.187500 +0.653282 0.270598 -0.707107 0.608827 0.184685 -0.771506 0.562500 0.250000 +0.693520 0.137949 -0.707107 0.608827 0.184685 -0.771506 0.531250 0.250000 +0.544895 0.108386 -0.831470 0.608827 0.184685 -0.771506 0.531250 0.187500 +0.853554 0.353553 0.382683 0.844848 0.256282 0.469628 0.562500 0.625000 +0.768178 0.318189 0.555570 0.844848 0.256282 0.469628 0.562500 0.687500 +0.815493 0.162211 0.555570 0.844848 0.256282 0.469628 0.531250 0.687500 +0.906128 0.180240 0.382683 0.844848 0.256282 0.469628 0.531250 0.625000 +0.353554 0.146446 -0.923880 0.452794 0.137353 -0.880972 0.562500 0.125000 +0.513280 0.212607 -0.831470 0.452794 0.137353 -0.880972 0.562500 0.187500 +0.544895 0.108386 -0.831470 0.452794 0.137353 -0.880972 0.531250 0.187500 +0.375330 0.074658 -0.923880 0.452794 0.137353 -0.880972 0.531250 0.125000 +0.906128 0.375330 0.195090 0.916106 0.277898 0.289003 0.562500 0.562500 +0.853554 0.353553 0.382683 0.916106 0.277898 0.289003 0.562500 0.625000 +0.906128 0.180240 0.382683 0.916106 0.277898 0.289003 0.531250 0.625000 +0.961940 0.191341 0.195090 0.916106 0.277898 0.289003 0.531250 0.562500 +0.180240 0.074658 -0.980785 0.279015 0.084638 -0.956550 0.562500 0.062500 +0.353554 0.146446 -0.923880 0.279015 0.084638 -0.956550 0.562500 0.125000 +0.375330 0.074658 -0.923880 0.279015 0.084638 -0.956550 0.531250 0.125000 +0.191342 0.038060 -0.980785 0.279015 0.084638 -0.956550 0.531250 0.062500 +0.693520 0.137949 -0.707107 0.770780 0.075915 -0.632562 0.531250 0.250000 +0.815493 0.162211 -0.555570 0.770780 0.075915 -0.632562 0.531250 0.312500 +0.831470 -0.000000 -0.555570 0.770780 0.075915 -0.632562 0.500000 0.312500 +0.707107 -0.000000 -0.707107 0.770780 0.075915 -0.632562 0.500000 0.250000 +0.815493 0.162211 0.555570 0.770780 0.075915 0.632562 0.531250 0.687500 +0.693520 0.137949 0.707107 0.770780 0.075915 0.632562 0.531250 0.750000 +0.707107 -0.000000 0.707107 0.770780 0.075915 0.632562 0.500000 0.750000 +0.831470 -0.000000 0.555570 0.770780 0.075915 0.632562 0.500000 0.687500 +0.544895 0.108386 -0.831470 0.633159 0.062360 -0.771506 0.531250 0.187500 +0.693520 0.137949 -0.707107 0.633159 0.062360 -0.771506 0.531250 0.250000 +0.707107 -0.000000 -0.707107 0.633159 0.062360 -0.771506 0.500000 0.250000 +0.555570 -0.000000 -0.831470 0.633159 0.062360 -0.771506 0.500000 0.187500 +0.906128 0.180240 0.382683 0.878613 0.086536 0.469628 0.531250 0.625000 +0.815493 0.162211 0.555570 0.878613 0.086536 0.469628 0.531250 0.687500 +0.831470 -0.000000 0.555570 0.878613 0.086536 0.469628 0.500000 0.687500 +0.923880 -0.000000 0.382683 0.878613 0.086536 0.469628 0.500000 0.625000 +0.375330 0.074658 -0.923880 0.470890 0.046378 -0.880972 0.531250 0.125000 +0.544895 0.108386 -0.831470 0.470890 0.046378 -0.880972 0.531250 0.187500 +0.555570 -0.000000 -0.831470 0.470890 0.046378 -0.880972 0.500000 0.187500 +0.382684 -0.000000 -0.923880 0.470890 0.046378 -0.880972 0.500000 0.125000 +0.961940 0.191341 0.195090 0.952718 0.093834 0.289003 0.531250 0.562500 +0.906128 0.180240 0.382683 0.952718 0.093834 0.289003 0.531250 0.625000 +0.923880 -0.000000 0.382683 0.952718 0.093834 0.289003 0.500000 0.625000 +0.980785 -0.000000 0.195090 0.952718 0.093834 0.289003 0.500000 0.562500 +0.191342 0.038060 -0.980785 0.290166 0.028579 -0.956550 0.531250 0.062500 +0.375330 0.074658 -0.923880 0.290166 0.028579 -0.956550 0.531250 0.125000 +0.382684 -0.000000 -0.923880 0.290166 0.028579 -0.956550 0.500000 0.125000 +0.195090 -0.000000 -0.980785 0.290166 0.028579 -0.956550 0.500000 0.062500 +0.980785 0.195090 0.000000 0.990438 0.097550 0.097551 0.531250 0.500000 +0.961940 0.191341 0.195090 0.990438 0.097550 0.097551 0.531250 0.562500 +0.980785 -0.000000 0.195090 0.990438 0.097550 0.097551 0.500000 0.562500 +1.000000 -0.000000 0.000000 0.990438 0.097550 0.097551 0.500000 0.500000 +0.191342 0.038060 0.980785 0.098012 0.009653 0.995138 0.531250 0.937500 +-0.000000 -0.000001 1.000000 0.098012 0.009653 0.995138 0.515625 1.000000 +0.195091 -0.000000 0.980785 0.098012 0.009653 0.995138 0.500000 0.937500 +0.000000 -0.000000 -1.000000 0.098012 0.009653 -0.995138 0.515625 0.000000 +0.191342 0.038060 -0.980785 0.098012 0.009653 -0.995138 0.531250 0.062500 +0.195090 -0.000000 -0.980785 0.098012 0.009653 -0.995138 0.500000 0.062500 +0.961940 0.191341 -0.195090 0.990438 0.097550 -0.097551 0.531250 0.437500 +0.980785 0.195090 0.000000 0.990438 0.097550 -0.097551 0.531250 0.500000 +1.000000 -0.000000 0.000000 0.990438 0.097550 -0.097551 0.500000 0.500000 +0.980785 -0.000000 -0.195090 0.990438 0.097550 -0.097551 0.500000 0.437500 +0.375331 0.074658 0.923880 0.290166 0.028579 0.956549 0.531250 0.875000 +0.191342 0.038060 0.980785 0.290166 0.028579 0.956549 0.531250 0.937500 +0.195091 -0.000000 0.980785 0.290166 0.028579 0.956549 0.500000 0.937500 +0.382684 -0.000000 0.923880 0.290166 0.028579 0.956549 0.500000 0.875000 +0.906128 0.180240 -0.382683 0.952718 0.093834 -0.289003 0.531250 0.375000 +0.961940 0.191341 -0.195090 0.952718 0.093834 -0.289003 0.531250 0.437500 +0.980785 -0.000000 -0.195090 0.952718 0.093834 -0.289003 0.500000 0.437500 +0.923880 -0.000000 -0.382683 0.952718 0.093834 -0.289003 0.500000 0.375000 +0.544895 0.108386 0.831470 0.470890 0.046378 0.880972 0.531250 0.812500 +0.375331 0.074658 0.923880 0.470890 0.046378 0.880972 0.531250 0.875000 +0.382684 -0.000000 0.923880 0.470890 0.046378 0.880972 0.500000 0.875000 +0.555570 -0.000000 0.831470 0.470890 0.046378 0.880972 0.500000 0.812500 +0.815493 0.162211 -0.555570 0.878613 0.086536 -0.469628 0.531250 0.312500 +0.906128 0.180240 -0.382683 0.878613 0.086536 -0.469628 0.531250 0.375000 +0.923880 -0.000000 -0.382683 0.878613 0.086536 -0.469628 0.500000 0.375000 +0.831470 -0.000000 -0.555570 0.878613 0.086536 -0.469628 0.500000 0.312500 +0.693520 0.137949 0.707107 0.633159 0.062361 0.771506 0.531250 0.750000 +0.544895 0.108386 0.831470 0.633159 0.062361 0.771506 0.531250 0.812500 +0.555570 -0.000000 0.831470 0.633159 0.062361 0.771506 0.500000 0.812500 +0.707107 -0.000000 0.707107 0.633159 0.062361 0.771506 0.500000 0.750000 +0.000000 -0.000000 -1.000000 0.098012 -0.009653 -0.995138 0.484375 0.000000 +0.195090 -0.000000 -0.980785 0.098012 -0.009653 -0.995138 0.500000 0.062500 +0.191342 -0.038061 -0.980785 0.098012 -0.009653 -0.995138 0.468750 0.062500 +0.980785 -0.000000 -0.195090 0.990438 -0.097550 -0.097551 0.500000 0.437500 +1.000000 -0.000000 0.000000 0.990438 -0.097550 -0.097551 0.500000 0.500000 +0.980785 -0.195091 0.000000 0.990438 -0.097550 -0.097551 0.468750 0.500000 +0.961940 -0.191342 -0.195090 0.990438 -0.097550 -0.097551 0.468750 0.437500 +0.382684 -0.000000 0.923880 0.290166 -0.028579 0.956549 0.500000 0.875000 +0.195091 -0.000000 0.980785 0.290166 -0.028579 0.956549 0.500000 0.937500 +0.191342 -0.038061 0.980785 0.290166 -0.028579 0.956549 0.468750 0.937500 +0.375331 -0.074658 0.923880 0.290166 -0.028579 0.956549 0.468750 0.875000 +0.923880 -0.000000 -0.382683 0.952718 -0.093835 -0.289003 0.500000 0.375000 +0.980785 -0.000000 -0.195090 0.952718 -0.093835 -0.289003 0.500000 0.437500 +0.961940 -0.191342 -0.195090 0.952718 -0.093835 -0.289003 0.468750 0.437500 +0.906128 -0.180240 -0.382683 0.952718 -0.093835 -0.289003 0.468750 0.375000 +0.555570 -0.000000 0.831470 0.470890 -0.046379 0.880972 0.500000 0.812500 +0.382684 -0.000000 0.923880 0.470890 -0.046379 0.880972 0.500000 0.875000 +0.375331 -0.074658 0.923880 0.470890 -0.046379 0.880972 0.468750 0.875000 +0.544895 -0.108387 0.831470 0.470890 -0.046379 0.880972 0.468750 0.812500 +0.831470 -0.000000 -0.555570 0.878613 -0.086536 -0.469628 0.500000 0.312500 +0.923880 -0.000000 -0.382683 0.878613 -0.086536 -0.469628 0.500000 0.375000 +0.906128 -0.180240 -0.382683 0.878613 -0.086536 -0.469628 0.468750 0.375000 +0.815493 -0.162212 -0.555570 0.878613 -0.086536 -0.469628 0.468750 0.312500 +0.707107 -0.000000 0.707107 0.633159 -0.062361 0.771506 0.500000 0.750000 +0.555570 -0.000000 0.831470 0.633159 -0.062361 0.771506 0.500000 0.812500 +0.544895 -0.108387 0.831470 0.633159 -0.062361 0.771506 0.468750 0.812500 +0.693520 -0.137950 0.707107 0.633159 -0.062361 0.771506 0.468750 0.750000 +0.707107 -0.000000 -0.707107 0.770780 -0.075915 -0.632562 0.500000 0.250000 +0.831470 -0.000000 -0.555570 0.770780 -0.075915 -0.632562 0.500000 0.312500 +0.815493 -0.162212 -0.555570 0.770780 -0.075915 -0.632562 0.468750 0.312500 +0.693520 -0.137950 -0.707107 0.770780 -0.075915 -0.632562 0.468750 0.250000 +0.831470 -0.000000 0.555570 0.770780 -0.075915 0.632562 0.500000 0.687500 +0.707107 -0.000000 0.707107 0.770780 -0.075915 0.632562 0.500000 0.750000 +0.693520 -0.137950 0.707107 0.770780 -0.075915 0.632562 0.468750 0.750000 +0.815493 -0.162212 0.555570 0.770780 -0.075915 0.632562 0.468750 0.687500 +0.555570 -0.000000 -0.831470 0.633159 -0.062361 -0.771506 0.500000 0.187500 +0.707107 -0.000000 -0.707107 0.633159 -0.062361 -0.771506 0.500000 0.250000 +0.693520 -0.137950 -0.707107 0.633159 -0.062361 -0.771506 0.468750 0.250000 +0.544895 -0.108387 -0.831470 0.633159 -0.062361 -0.771506 0.468750 0.187500 +0.923880 -0.000000 0.382683 0.878613 -0.086536 0.469628 0.500000 0.625000 +0.831470 -0.000000 0.555570 0.878613 -0.086536 0.469628 0.500000 0.687500 +0.815493 -0.162212 0.555570 0.878613 -0.086536 0.469628 0.468750 0.687500 +0.906128 -0.180240 0.382683 0.878613 -0.086536 0.469628 0.468750 0.625000 +0.382684 -0.000000 -0.923880 0.470890 -0.046379 -0.880972 0.500000 0.125000 +0.555570 -0.000000 -0.831470 0.470890 -0.046379 -0.880972 0.500000 0.187500 +0.544895 -0.108387 -0.831470 0.470890 -0.046379 -0.880972 0.468750 0.187500 +0.375330 -0.074658 -0.923880 0.470890 -0.046379 -0.880972 0.468750 0.125000 +0.980785 -0.000000 0.195090 0.952718 -0.093835 0.289003 0.500000 0.562500 +0.923880 -0.000000 0.382683 0.952718 -0.093835 0.289003 0.500000 0.625000 +0.906128 -0.180240 0.382683 0.952718 -0.093835 0.289003 0.468750 0.625000 +0.961940 -0.191342 0.195090 0.952718 -0.093835 0.289003 0.468750 0.562500 +0.195090 -0.000000 -0.980785 0.290166 -0.028579 -0.956550 0.500000 0.062500 +0.382684 -0.000000 -0.923880 0.290166 -0.028579 -0.956550 0.500000 0.125000 +0.375330 -0.074658 -0.923880 0.290166 -0.028579 -0.956550 0.468750 0.125000 +0.191342 -0.038061 -0.980785 0.290166 -0.028579 -0.956550 0.468750 0.062500 +1.000000 -0.000000 0.000000 0.990438 -0.097550 0.097551 0.500000 0.500000 +0.980785 -0.000000 0.195090 0.990438 -0.097550 0.097551 0.500000 0.562500 +0.961940 -0.191342 0.195090 0.990438 -0.097550 0.097551 0.468750 0.562500 +0.980785 -0.195091 0.000000 0.990438 -0.097550 0.097551 0.468750 0.500000 +0.195091 -0.000000 0.980785 0.098012 -0.009653 0.995138 0.500000 0.937500 +-0.000000 -0.000001 1.000000 0.098012 -0.009653 0.995138 0.484374 1.000000 +0.191342 -0.038061 0.980785 0.098012 -0.009653 0.995138 0.468750 0.937500 +0.544895 -0.108387 -0.831470 0.608827 -0.184686 -0.771506 0.468750 0.187500 +0.693520 -0.137950 -0.707107 0.608827 -0.184686 -0.771506 0.468750 0.250000 +0.653282 -0.270598 -0.707107 0.608827 -0.184686 -0.771506 0.437500 0.250000 +0.513280 -0.212608 -0.831470 0.608827 -0.184686 -0.771506 0.437500 0.187500 +0.906128 -0.180240 0.382683 0.844848 -0.256282 0.469629 0.468750 0.625000 +0.815493 -0.162212 0.555570 0.844848 -0.256282 0.469629 0.468750 0.687500 +0.768178 -0.318190 0.555570 0.844848 -0.256282 0.469629 0.437500 0.687500 +0.853554 -0.353554 0.382683 0.844848 -0.256282 0.469629 0.437500 0.625000 +0.375330 -0.074658 -0.923880 0.452794 -0.137354 -0.880972 0.468750 0.125000 +0.544895 -0.108387 -0.831470 0.452794 -0.137354 -0.880972 0.468750 0.187500 +0.513280 -0.212608 -0.831470 0.452794 -0.137354 -0.880972 0.437500 0.187500 +0.353553 -0.146447 -0.923880 0.452794 -0.137354 -0.880972 0.437500 0.125000 +0.961940 -0.191342 0.195090 0.916106 -0.277898 0.289003 0.468750 0.562500 +0.906128 -0.180240 0.382683 0.916106 -0.277898 0.289003 0.468750 0.625000 +0.853554 -0.353554 0.382683 0.916106 -0.277898 0.289003 0.437500 0.625000 +0.906127 -0.375331 0.195090 0.916106 -0.277898 0.289003 0.437500 0.562500 +0.191342 -0.038061 -0.980785 0.279015 -0.084638 -0.956550 0.468750 0.062500 +0.375330 -0.074658 -0.923880 0.279015 -0.084638 -0.956550 0.468750 0.125000 +0.353553 -0.146447 -0.923880 0.279015 -0.084638 -0.956550 0.437500 0.125000 +0.180240 -0.074658 -0.980785 0.279015 -0.084638 -0.956550 0.437500 0.062500 +0.980785 -0.195091 0.000000 0.952376 -0.288900 0.097551 0.468750 0.500000 +0.961940 -0.191342 0.195090 0.952376 -0.288900 0.097551 0.468750 0.562500 +0.906127 -0.375331 0.195090 0.952376 -0.288900 0.097551 0.437500 0.562500 +0.923880 -0.382684 0.000000 0.952376 -0.288900 0.097551 0.437500 0.500000 +0.191342 -0.038061 0.980785 0.094246 -0.028589 0.995138 0.468750 0.937500 +-0.000000 -0.000001 1.000000 0.094246 -0.028589 0.995138 0.453124 1.000000 +0.180240 -0.074658 0.980785 0.094246 -0.028589 0.995138 0.437500 0.937500 +0.000000 -0.000000 -1.000000 0.094246 -0.028589 -0.995138 0.453125 0.000000 +0.191342 -0.038061 -0.980785 0.094246 -0.028589 -0.995138 0.468750 0.062500 +0.180240 -0.074658 -0.980785 0.094246 -0.028589 -0.995138 0.437500 0.062500 +0.961940 -0.191342 -0.195090 0.952376 -0.288900 -0.097551 0.468750 0.437500 +0.980785 -0.195091 0.000000 0.952376 -0.288900 -0.097551 0.468750 0.500000 +0.923880 -0.382684 0.000000 0.952376 -0.288900 -0.097551 0.437500 0.500000 +0.906127 -0.375331 -0.195090 0.952376 -0.288900 -0.097551 0.437500 0.437500 +0.375331 -0.074658 0.923880 0.279015 -0.084638 0.956549 0.468750 0.875000 +0.191342 -0.038061 0.980785 0.279015 -0.084638 0.956549 0.468750 0.937500 +0.180240 -0.074658 0.980785 0.279015 -0.084638 0.956549 0.437500 0.937500 +0.353554 -0.146447 0.923880 0.279015 -0.084638 0.956549 0.437500 0.875000 +0.906128 -0.180240 -0.382683 0.916106 -0.277898 -0.289003 0.468750 0.375000 +0.961940 -0.191342 -0.195090 0.916106 -0.277898 -0.289003 0.468750 0.437500 +0.906127 -0.375331 -0.195090 0.916106 -0.277898 -0.289003 0.437500 0.437500 +0.853554 -0.353554 -0.382683 0.916106 -0.277898 -0.289003 0.437500 0.375000 +0.544895 -0.108387 0.831470 0.452793 -0.137354 0.880972 0.468750 0.812500 +0.375331 -0.074658 0.923880 0.452793 -0.137354 0.880972 0.468750 0.875000 +0.353554 -0.146447 0.923880 0.452793 -0.137354 0.880972 0.437500 0.875000 +0.513280 -0.212608 0.831470 0.452793 -0.137354 0.880972 0.437500 0.812500 +0.815493 -0.162212 -0.555570 0.844848 -0.256282 -0.469628 0.468750 0.312500 +0.906128 -0.180240 -0.382683 0.844848 -0.256282 -0.469628 0.468750 0.375000 +0.853554 -0.353554 -0.382683 0.844848 -0.256282 -0.469628 0.437500 0.375000 +0.768178 -0.318190 -0.555570 0.844848 -0.256282 -0.469628 0.437500 0.312500 +0.693520 -0.137950 0.707107 0.608827 -0.184686 0.771506 0.468750 0.750000 +0.544895 -0.108387 0.831470 0.608827 -0.184686 0.771506 0.468750 0.812500 +0.513280 -0.212608 0.831470 0.608827 -0.184686 0.771506 0.437500 0.812500 +0.653282 -0.270598 0.707107 0.608827 -0.184686 0.771506 0.437500 0.750000 +0.693520 -0.137950 -0.707107 0.741159 -0.224828 -0.632562 0.468750 0.250000 +0.815493 -0.162212 -0.555570 0.741159 -0.224828 -0.632562 0.468750 0.312500 +0.768178 -0.318190 -0.555570 0.741159 -0.224828 -0.632562 0.437500 0.312500 +0.653282 -0.270598 -0.707107 0.741159 -0.224828 -0.632562 0.437500 0.250000 +0.815493 -0.162212 0.555570 0.741159 -0.224828 0.632562 0.468750 0.687500 +0.693520 -0.137950 0.707107 0.741159 -0.224828 0.632562 0.468750 0.750000 +0.653282 -0.270598 0.707107 0.741159 -0.224828 0.632562 0.437500 0.750000 +0.768178 -0.318190 0.555570 0.741159 -0.224828 0.632562 0.437500 0.687500 +0.353554 -0.146447 0.923880 0.257142 -0.137445 0.956549 0.437500 0.875000 +0.180240 -0.074658 0.980785 0.257142 -0.137445 0.956549 0.437500 0.937500 +0.162212 -0.108387 0.980785 0.257142 -0.137445 0.956549 0.406250 0.937500 +0.318190 -0.212608 0.923880 0.257142 -0.137445 0.956549 0.406250 0.875000 +0.853554 -0.353554 -0.382683 0.844288 -0.451281 -0.289003 0.437500 0.375000 +0.906127 -0.375331 -0.195090 0.844288 -0.451281 -0.289003 0.437500 0.437500 +0.815493 -0.544895 -0.195090 0.844288 -0.451281 -0.289003 0.406250 0.437500 +0.768178 -0.513280 -0.382683 0.844288 -0.451281 -0.289003 0.406250 0.375000 +0.513280 -0.212608 0.831470 0.417297 -0.223050 0.880972 0.437500 0.812500 +0.353554 -0.146447 0.923880 0.417297 -0.223050 0.880972 0.437500 0.875000 +0.318190 -0.212608 0.923880 0.417297 -0.223050 0.880972 0.406250 0.875000 +0.461940 -0.308659 0.831470 0.417297 -0.223050 0.880972 0.406250 0.812500 +0.768178 -0.318190 -0.555570 0.778617 -0.416179 -0.469628 0.437500 0.312500 +0.853554 -0.353554 -0.382683 0.778617 -0.416179 -0.469628 0.437500 0.375000 +0.768178 -0.513280 -0.382683 0.778617 -0.416179 -0.469628 0.406250 0.375000 +0.691342 -0.461940 -0.555570 0.778617 -0.416179 -0.469628 0.406250 0.312500 +0.653282 -0.270598 0.707107 0.561098 -0.299913 0.771506 0.437500 0.750000 +0.513280 -0.212608 0.831470 0.561098 -0.299913 0.771506 0.437500 0.812500 +0.461940 -0.308659 0.831470 0.561098 -0.299913 0.771506 0.406250 0.812500 +0.587938 -0.392848 0.707107 0.561098 -0.299913 0.771506 0.406250 0.750000 +0.653282 -0.270598 -0.707107 0.683056 -0.365101 -0.632562 0.437500 0.250000 +0.768178 -0.318190 -0.555570 0.683056 -0.365101 -0.632562 0.437500 0.312500 +0.691342 -0.461940 -0.555570 0.683056 -0.365101 -0.632562 0.406250 0.312500 +0.587938 -0.392848 -0.707107 0.683056 -0.365101 -0.632562 0.406250 0.250000 +0.768178 -0.318190 0.555570 0.683056 -0.365101 0.632562 0.437500 0.687500 +0.653282 -0.270598 0.707107 0.683056 -0.365101 0.632562 0.437500 0.750000 +0.587938 -0.392848 0.707107 0.683056 -0.365101 0.632562 0.406250 0.750000 +0.691342 -0.461940 0.555570 0.683056 -0.365101 0.632562 0.406250 0.687500 +0.513280 -0.212608 -0.831470 0.561098 -0.299913 -0.771506 0.437500 0.187500 +0.653282 -0.270598 -0.707107 0.561098 -0.299913 -0.771506 0.437500 0.250000 +0.587938 -0.392848 -0.707107 0.561098 -0.299913 -0.771506 0.406250 0.250000 +0.461940 -0.308659 -0.831470 0.561098 -0.299913 -0.771506 0.406250 0.187500 +0.853554 -0.353554 0.382683 0.778617 -0.416179 0.469629 0.437500 0.625000 +0.768178 -0.318190 0.555570 0.778617 -0.416179 0.469629 0.437500 0.687500 +0.691342 -0.461940 0.555570 0.778617 -0.416179 0.469629 0.406250 0.687500 +0.768178 -0.513280 0.382683 0.778617 -0.416179 0.469629 0.406250 0.625000 +0.353553 -0.146447 -0.923880 0.417297 -0.223050 -0.880972 0.437500 0.125000 +0.513280 -0.212608 -0.831470 0.417297 -0.223050 -0.880972 0.437500 0.187500 +0.461940 -0.308659 -0.831470 0.417297 -0.223050 -0.880972 0.406250 0.187500 +0.318190 -0.212608 -0.923880 0.417297 -0.223050 -0.880972 0.406250 0.125000 +0.906127 -0.375331 0.195090 0.844288 -0.451282 0.289003 0.437500 0.562500 +0.853554 -0.353554 0.382683 0.844288 -0.451282 0.289003 0.437500 0.625000 +0.768178 -0.513280 0.382683 0.844288 -0.451282 0.289003 0.406250 0.625000 +0.815493 -0.544895 0.195090 0.844288 -0.451282 0.289003 0.406250 0.562500 +0.180240 -0.074658 -0.980785 0.257142 -0.137445 -0.956550 0.437500 0.062500 +0.353553 -0.146447 -0.923880 0.257142 -0.137445 -0.956550 0.437500 0.125000 +0.318190 -0.212608 -0.923880 0.257142 -0.137445 -0.956550 0.406250 0.125000 +0.162212 -0.108387 -0.980785 0.257142 -0.137445 -0.956550 0.406250 0.062500 +0.923880 -0.382684 0.000000 0.877715 -0.469149 0.097551 0.437500 0.500000 +0.906127 -0.375331 0.195090 0.877715 -0.469149 0.097551 0.437500 0.562500 +0.815493 -0.544895 0.195090 0.877715 -0.469149 0.097551 0.406250 0.562500 +0.831470 -0.555571 0.000000 0.877715 -0.469149 0.097551 0.406250 0.500000 +0.180240 -0.074658 0.980785 0.086858 -0.046426 0.995138 0.437500 0.937500 +-0.000000 -0.000001 1.000000 0.086858 -0.046426 0.995138 0.421874 1.000000 +0.162212 -0.108387 0.980785 0.086858 -0.046426 0.995138 0.406250 0.937500 +0.000000 -0.000000 -1.000000 0.086857 -0.046426 -0.995138 0.421875 0.000000 +0.180240 -0.074658 -0.980785 0.086857 -0.046426 -0.995138 0.437500 0.062500 +0.162212 -0.108387 -0.980785 0.086857 -0.046426 -0.995138 0.406250 0.062500 +0.906127 -0.375331 -0.195090 0.877715 -0.469149 -0.097551 0.437500 0.437500 +0.923880 -0.382684 0.000000 0.877715 -0.469149 -0.097551 0.437500 0.500000 +0.831470 -0.555571 0.000000 0.877715 -0.469149 -0.097551 0.406250 0.500000 +0.815493 -0.544895 -0.195090 0.877715 -0.469149 -0.097551 0.406250 0.437500 +0.768178 -0.513280 0.382683 0.682463 -0.560083 0.469629 0.406250 0.625000 +0.691342 -0.461940 0.555570 0.682463 -0.560083 0.469629 0.406250 0.687500 +0.587938 -0.587938 0.555570 0.682463 -0.560083 0.469629 0.375000 0.687500 +0.653282 -0.653282 0.382683 0.682463 -0.560083 0.469629 0.375000 0.625000 +0.318190 -0.212608 -0.923880 0.365764 -0.300175 -0.880972 0.406250 0.125000 +0.461940 -0.308659 -0.831470 0.365764 -0.300175 -0.880972 0.406250 0.187500 +0.392848 -0.392848 -0.831470 0.365764 -0.300175 -0.880972 0.375000 0.187500 +0.270598 -0.270598 -0.923880 0.365764 -0.300175 -0.880972 0.375000 0.125000 +0.815493 -0.544895 0.195090 0.740025 -0.607323 0.289003 0.406250 0.562500 +0.768178 -0.513280 0.382683 0.740025 -0.607323 0.289003 0.406250 0.625000 +0.653282 -0.653282 0.382683 0.740025 -0.607323 0.289003 0.375000 0.625000 +0.693520 -0.693520 0.195090 0.740025 -0.607323 0.289003 0.375000 0.562500 +0.162212 -0.108387 -0.980785 0.225386 -0.184970 -0.956550 0.406250 0.062500 +0.318190 -0.212608 -0.923880 0.225386 -0.184970 -0.956550 0.406250 0.125000 +0.270598 -0.270598 -0.923880 0.225386 -0.184970 -0.956550 0.375000 0.125000 +0.137950 -0.137950 -0.980785 0.225386 -0.184970 -0.956550 0.375000 0.062500 +0.831470 -0.555571 0.000000 0.769324 -0.631368 0.097551 0.406250 0.500000 +0.815493 -0.544895 0.195090 0.769324 -0.631368 0.097551 0.406250 0.562500 +0.693520 -0.693520 0.195090 0.769324 -0.631368 0.097551 0.375000 0.562500 +0.707107 -0.707107 0.000000 0.769324 -0.631368 0.097551 0.375000 0.500000 +0.162212 -0.108387 0.980785 0.076131 -0.062479 0.995138 0.406250 0.937500 +-0.000000 -0.000001 1.000000 0.076131 -0.062479 0.995138 0.390625 1.000000 +0.137950 -0.137950 0.980785 0.076131 -0.062479 0.995138 0.375000 0.937500 +0.000000 -0.000000 -1.000000 0.076131 -0.062479 -0.995138 0.390625 0.000000 +0.162212 -0.108387 -0.980785 0.076131 -0.062479 -0.995138 0.406250 0.062500 +0.137950 -0.137950 -0.980785 0.076131 -0.062479 -0.995138 0.375000 0.062500 +0.815493 -0.544895 -0.195090 0.769324 -0.631368 -0.097551 0.406250 0.437500 +0.831470 -0.555571 0.000000 0.769324 -0.631368 -0.097551 0.406250 0.500000 +0.707107 -0.707107 0.000000 0.769324 -0.631368 -0.097551 0.375000 0.500000 +0.693520 -0.693520 -0.195090 0.769324 -0.631368 -0.097551 0.375000 0.437500 +0.318190 -0.212608 0.923880 0.225387 -0.184970 0.956549 0.406250 0.875000 +0.162212 -0.108387 0.980785 0.225387 -0.184970 0.956549 0.406250 0.937500 +0.137950 -0.137950 0.980785 0.225387 -0.184970 0.956549 0.375000 0.937500 +0.270598 -0.270599 0.923880 0.225387 -0.184970 0.956549 0.375000 0.875000 +0.768178 -0.513280 -0.382683 0.740025 -0.607323 -0.289003 0.406250 0.375000 +0.815493 -0.544895 -0.195090 0.740025 -0.607323 -0.289003 0.406250 0.437500 +0.693520 -0.693520 -0.195090 0.740025 -0.607323 -0.289003 0.375000 0.437500 +0.653282 -0.653282 -0.382683 0.740025 -0.607323 -0.289003 0.375000 0.375000 +0.461940 -0.308659 0.831470 0.365764 -0.300175 0.880972 0.406250 0.812500 +0.318190 -0.212608 0.923880 0.365764 -0.300175 0.880972 0.406250 0.875000 +0.270598 -0.270599 0.923880 0.365764 -0.300175 0.880972 0.375000 0.875000 +0.392848 -0.392848 0.831470 0.365764 -0.300175 0.880972 0.375000 0.812500 +0.691342 -0.461940 -0.555570 0.682463 -0.560083 -0.469628 0.406250 0.312500 +0.768178 -0.513280 -0.382683 0.682463 -0.560083 -0.469628 0.406250 0.375000 +0.653282 -0.653282 -0.382683 0.682463 -0.560083 -0.469628 0.375000 0.375000 +0.587938 -0.587938 -0.555570 0.682463 -0.560083 -0.469628 0.375000 0.312500 +0.587938 -0.392848 0.707107 0.491806 -0.403615 0.771506 0.406250 0.750000 +0.461940 -0.308659 0.831470 0.491806 -0.403615 0.771506 0.406250 0.812500 +0.392848 -0.392848 0.831470 0.491806 -0.403615 0.771506 0.375000 0.812500 +0.500000 -0.500000 0.707107 0.491806 -0.403615 0.771506 0.375000 0.750000 +0.587938 -0.392848 -0.707107 0.598704 -0.491344 -0.632562 0.406250 0.250000 +0.691342 -0.461940 -0.555570 0.598704 -0.491344 -0.632562 0.406250 0.312500 +0.587938 -0.587938 -0.555570 0.598704 -0.491344 -0.632562 0.375000 0.312500 +0.500000 -0.500000 -0.707107 0.598704 -0.491344 -0.632562 0.375000 0.250000 +0.691342 -0.461940 0.555570 0.598704 -0.491344 0.632562 0.406250 0.687500 +0.587938 -0.392848 0.707107 0.598704 -0.491344 0.632562 0.406250 0.750000 +0.500000 -0.500000 0.707107 0.598704 -0.491344 0.632562 0.375000 0.750000 +0.587938 -0.587938 0.555570 0.598704 -0.491344 0.632562 0.375000 0.687500 +0.461940 -0.308659 -0.831470 0.491806 -0.403615 -0.771506 0.406250 0.187500 +0.587938 -0.392848 -0.707107 0.491806 -0.403615 -0.771506 0.406250 0.250000 +0.500000 -0.500000 -0.707107 0.491806 -0.403615 -0.771506 0.375000 0.250000 +0.392848 -0.392848 -0.831470 0.491806 -0.403615 -0.771506 0.375000 0.187500 +0.653282 -0.653282 -0.382683 0.607323 -0.740025 -0.289003 0.375000 0.375000 +0.693520 -0.693520 -0.195090 0.607323 -0.740025 -0.289003 0.375000 0.437500 +0.544895 -0.815493 -0.195090 0.607323 -0.740025 -0.289003 0.343750 0.437500 +0.513280 -0.768178 -0.382683 0.607323 -0.740025 -0.289003 0.343750 0.375000 +0.392848 -0.392848 0.831470 0.300175 -0.365764 0.880972 0.375000 0.812500 +0.270598 -0.270599 0.923880 0.300175 -0.365764 0.880972 0.375000 0.875000 +0.212608 -0.318190 0.923880 0.300175 -0.365764 0.880972 0.343750 0.875000 +0.308658 -0.461940 0.831470 0.300175 -0.365764 0.880972 0.343750 0.812500 +0.587938 -0.587938 -0.555570 0.560083 -0.682463 -0.469629 0.375000 0.312500 +0.653282 -0.653282 -0.382683 0.560083 -0.682463 -0.469629 0.375000 0.375000 +0.513280 -0.768178 -0.382683 0.560083 -0.682463 -0.469629 0.343750 0.375000 +0.461940 -0.691342 -0.555570 0.560083 -0.682463 -0.469629 0.343750 0.312500 +0.500000 -0.500000 0.707107 0.403615 -0.491807 0.771506 0.375000 0.750000 +0.392848 -0.392848 0.831470 0.403615 -0.491807 0.771506 0.375000 0.812500 +0.308658 -0.461940 0.831470 0.403615 -0.491807 0.771506 0.343750 0.812500 +0.392848 -0.587938 0.707107 0.403615 -0.491807 0.771506 0.343750 0.750000 +0.500000 -0.500000 -0.707107 0.491343 -0.598704 -0.632562 0.375000 0.250000 +0.587938 -0.587938 -0.555570 0.491343 -0.598704 -0.632562 0.375000 0.312500 +0.461940 -0.691342 -0.555570 0.491343 -0.598704 -0.632562 0.343750 0.312500 +0.392848 -0.587938 -0.707107 0.491343 -0.598704 -0.632562 0.343750 0.250000 +0.587938 -0.587938 0.555570 0.491343 -0.598704 0.632562 0.375000 0.687500 +0.500000 -0.500000 0.707107 0.491343 -0.598704 0.632562 0.375000 0.750000 +0.392848 -0.587938 0.707107 0.491343 -0.598704 0.632562 0.343750 0.750000 +0.461940 -0.691342 0.555570 0.491343 -0.598704 0.632562 0.343750 0.687500 +0.392848 -0.392848 -0.831470 0.403615 -0.491806 -0.771506 0.375000 0.187500 +0.500000 -0.500000 -0.707107 0.403615 -0.491806 -0.771506 0.375000 0.250000 +0.392848 -0.587938 -0.707107 0.403615 -0.491806 -0.771506 0.343750 0.250000 +0.308658 -0.461940 -0.831470 0.403615 -0.491806 -0.771506 0.343750 0.187500 +0.653282 -0.653282 0.382683 0.560083 -0.682463 0.469629 0.375000 0.625000 +0.587938 -0.587938 0.555570 0.560083 -0.682463 0.469629 0.375000 0.687500 +0.461940 -0.691342 0.555570 0.560083 -0.682463 0.469629 0.343750 0.687500 +0.513280 -0.768178 0.382683 0.560083 -0.682463 0.469629 0.343750 0.625000 +0.270598 -0.270598 -0.923880 0.300175 -0.365764 -0.880972 0.375000 0.125000 +0.392848 -0.392848 -0.831470 0.300175 -0.365764 -0.880972 0.375000 0.187500 +0.308658 -0.461940 -0.831470 0.300175 -0.365764 -0.880972 0.343750 0.187500 +0.212608 -0.318190 -0.923880 0.300175 -0.365764 -0.880972 0.343750 0.125000 +0.693520 -0.693520 0.195090 0.607323 -0.740025 0.289003 0.375000 0.562500 +0.653282 -0.653282 0.382683 0.607323 -0.740025 0.289003 0.375000 0.625000 +0.513280 -0.768178 0.382683 0.607323 -0.740025 0.289003 0.343750 0.625000 +0.544895 -0.815493 0.195090 0.607323 -0.740025 0.289003 0.343750 0.562500 +0.137950 -0.137950 -0.980785 0.184970 -0.225387 -0.956550 0.375000 0.062500 +0.270598 -0.270598 -0.923880 0.184970 -0.225387 -0.956550 0.375000 0.125000 +0.212608 -0.318190 -0.923880 0.184970 -0.225387 -0.956550 0.343750 0.125000 +0.108386 -0.162212 -0.980785 0.184970 -0.225387 -0.956550 0.343750 0.062500 +0.707107 -0.707107 0.000000 0.631367 -0.769324 0.097551 0.375000 0.500000 +0.693520 -0.693520 0.195090 0.631367 -0.769324 0.097551 0.375000 0.562500 +0.544895 -0.815493 0.195090 0.631367 -0.769324 0.097551 0.343750 0.562500 +0.555570 -0.831470 0.000000 0.631367 -0.769324 0.097551 0.343750 0.500000 +0.137950 -0.137950 0.980785 0.062479 -0.076131 0.995138 0.375000 0.937500 +-0.000000 -0.000001 1.000000 0.062479 -0.076131 0.995138 0.359375 1.000000 +0.108386 -0.162212 0.980785 0.062479 -0.076131 0.995138 0.343750 0.937500 +0.000000 -0.000000 -1.000000 0.062479 -0.076131 -0.995138 0.359375 0.000000 +0.137950 -0.137950 -0.980785 0.062479 -0.076131 -0.995138 0.375000 0.062500 +0.108386 -0.162212 -0.980785 0.062479 -0.076131 -0.995138 0.343750 0.062500 +0.693520 -0.693520 -0.195090 0.631367 -0.769324 -0.097551 0.375000 0.437500 +0.707107 -0.707107 0.000000 0.631367 -0.769324 -0.097551 0.375000 0.500000 +0.555570 -0.831470 0.000000 0.631367 -0.769324 -0.097551 0.343750 0.500000 +0.544895 -0.815493 -0.195090 0.631367 -0.769324 -0.097551 0.343750 0.437500 +0.270598 -0.270599 0.923880 0.184970 -0.225387 0.956549 0.375000 0.875000 +0.137950 -0.137950 0.980785 0.184970 -0.225387 0.956549 0.375000 0.937500 +0.108386 -0.162212 0.980785 0.184970 -0.225387 0.956549 0.343750 0.937500 +0.212608 -0.318190 0.923880 0.184970 -0.225387 0.956549 0.343750 0.875000 +0.212608 -0.318190 -0.923880 0.223050 -0.417297 -0.880972 0.343750 0.125000 +0.308658 -0.461940 -0.831470 0.223050 -0.417297 -0.880972 0.343750 0.187500 +0.212608 -0.513280 -0.831470 0.223050 -0.417297 -0.880972 0.312500 0.187500 +0.146447 -0.353554 -0.923880 0.223050 -0.417297 -0.880972 0.312500 0.125000 +0.544895 -0.815493 0.195090 0.451281 -0.844288 0.289003 0.343750 0.562500 +0.513280 -0.768178 0.382683 0.451281 -0.844288 0.289003 0.343750 0.625000 +0.353553 -0.853554 0.382683 0.451281 -0.844288 0.289003 0.312500 0.625000 +0.375330 -0.906128 0.195090 0.451281 -0.844288 0.289003 0.312500 0.562500 +0.108386 -0.162212 -0.980785 0.137445 -0.257142 -0.956550 0.343750 0.062500 +0.212608 -0.318190 -0.923880 0.137445 -0.257142 -0.956550 0.343750 0.125000 +0.146447 -0.353554 -0.923880 0.137445 -0.257142 -0.956550 0.312500 0.125000 +0.074658 -0.180240 -0.980785 0.137445 -0.257142 -0.956550 0.312500 0.062500 +0.555570 -0.831470 0.000000 0.469148 -0.877715 0.097551 0.343750 0.500000 +0.544895 -0.815493 0.195090 0.469148 -0.877715 0.097551 0.343750 0.562500 +0.375330 -0.906128 0.195090 0.469148 -0.877715 0.097551 0.312500 0.562500 +0.382683 -0.923880 0.000000 0.469148 -0.877715 0.097551 0.312500 0.500000 +0.108386 -0.162212 0.980785 0.046426 -0.086858 0.995138 0.343750 0.937500 +-0.000000 -0.000001 1.000000 0.046426 -0.086858 0.995138 0.328125 1.000000 +0.074658 -0.180240 0.980785 0.046426 -0.086858 0.995138 0.312500 0.937500 +0.000000 -0.000000 -1.000000 0.046426 -0.086857 -0.995138 0.328125 0.000000 +0.108386 -0.162212 -0.980785 0.046426 -0.086857 -0.995138 0.343750 0.062500 +0.074658 -0.180240 -0.980785 0.046426 -0.086857 -0.995138 0.312500 0.062500 +0.544895 -0.815493 -0.195090 0.469148 -0.877715 -0.097551 0.343750 0.437500 +0.555570 -0.831470 0.000000 0.469148 -0.877715 -0.097551 0.343750 0.500000 +0.382683 -0.923880 0.000000 0.469148 -0.877715 -0.097551 0.312500 0.500000 +0.375330 -0.906128 -0.195090 0.469148 -0.877715 -0.097551 0.312500 0.437500 +0.212608 -0.318190 0.923880 0.137445 -0.257142 0.956549 0.343750 0.875000 +0.108386 -0.162212 0.980785 0.137445 -0.257142 0.956549 0.343750 0.937500 +0.074658 -0.180240 0.980785 0.137445 -0.257142 0.956549 0.312500 0.937500 +0.146447 -0.353554 0.923880 0.137445 -0.257142 0.956549 0.312500 0.875000 +0.513280 -0.768178 -0.382683 0.451281 -0.844288 -0.289003 0.343750 0.375000 +0.544895 -0.815493 -0.195090 0.451281 -0.844288 -0.289003 0.343750 0.437500 +0.375330 -0.906128 -0.195090 0.451281 -0.844288 -0.289003 0.312500 0.437500 +0.353553 -0.853554 -0.382683 0.451281 -0.844288 -0.289003 0.312500 0.375000 +0.308658 -0.461940 0.831470 0.223050 -0.417297 0.880972 0.343750 0.812500 +0.212608 -0.318190 0.923880 0.223050 -0.417297 0.880972 0.343750 0.875000 +0.146447 -0.353554 0.923880 0.223050 -0.417297 0.880972 0.312500 0.875000 +0.212608 -0.513280 0.831470 0.223050 -0.417297 0.880972 0.312500 0.812500 +0.461940 -0.691342 -0.555570 0.416179 -0.778617 -0.469629 0.343750 0.312500 +0.513280 -0.768178 -0.382683 0.416179 -0.778617 -0.469629 0.343750 0.375000 +0.353553 -0.853554 -0.382683 0.416179 -0.778617 -0.469629 0.312500 0.375000 +0.318190 -0.768178 -0.555570 0.416179 -0.778617 -0.469629 0.312500 0.312500 +0.392848 -0.587938 0.707107 0.299913 -0.561098 0.771506 0.343750 0.750000 +0.308658 -0.461940 0.831470 0.299913 -0.561098 0.771506 0.343750 0.812500 +0.212608 -0.513280 0.831470 0.299913 -0.561098 0.771506 0.312500 0.812500 +0.270598 -0.653282 0.707107 0.299913 -0.561098 0.771506 0.312500 0.750000 +0.392848 -0.587938 -0.707107 0.365101 -0.683056 -0.632562 0.343750 0.250000 +0.461940 -0.691342 -0.555570 0.365101 -0.683056 -0.632562 0.343750 0.312500 +0.318190 -0.768178 -0.555570 0.365101 -0.683056 -0.632562 0.312500 0.312500 +0.270598 -0.653282 -0.707107 0.365101 -0.683056 -0.632562 0.312500 0.250000 +0.461940 -0.691342 0.555570 0.365101 -0.683056 0.632562 0.343750 0.687500 +0.392848 -0.587938 0.707107 0.365101 -0.683056 0.632562 0.343750 0.750000 +0.270598 -0.653282 0.707107 0.365101 -0.683056 0.632562 0.312500 0.750000 +0.318190 -0.768178 0.555570 0.365101 -0.683056 0.632562 0.312500 0.687500 +0.308658 -0.461940 -0.831470 0.299913 -0.561098 -0.771506 0.343750 0.187500 +0.392848 -0.587938 -0.707107 0.299913 -0.561098 -0.771506 0.343750 0.250000 +0.270598 -0.653282 -0.707107 0.299913 -0.561098 -0.771506 0.312500 0.250000 +0.212608 -0.513280 -0.831470 0.299913 -0.561098 -0.771506 0.312500 0.187500 +0.513280 -0.768178 0.382683 0.416179 -0.778617 0.469629 0.343750 0.625000 +0.461940 -0.691342 0.555570 0.416179 -0.778617 0.469629 0.343750 0.687500 +0.318190 -0.768178 0.555570 0.416179 -0.778617 0.469629 0.312500 0.687500 +0.353553 -0.853554 0.382683 0.416179 -0.778617 0.469629 0.312500 0.625000 +0.212608 -0.513280 0.831470 0.137353 -0.452793 0.880972 0.312500 0.812500 +0.146447 -0.353554 0.923880 0.137353 -0.452793 0.880972 0.312500 0.875000 +0.074658 -0.375331 0.923880 0.137353 -0.452793 0.880972 0.281250 0.875000 +0.108386 -0.544896 0.831470 0.137353 -0.452793 0.880972 0.281250 0.812500 +0.318190 -0.768178 -0.555570 0.256282 -0.844848 -0.469629 0.312500 0.312500 +0.353553 -0.853554 -0.382683 0.256282 -0.844848 -0.469629 0.312500 0.375000 +0.180240 -0.906128 -0.382683 0.256282 -0.844848 -0.469629 0.281250 0.375000 +0.162212 -0.815493 -0.555570 0.256282 -0.844848 -0.469629 0.281250 0.312500 +0.270598 -0.653282 0.707107 0.184686 -0.608827 0.771506 0.312500 0.750000 +0.212608 -0.513280 0.831470 0.184686 -0.608827 0.771506 0.312500 0.812500 +0.108386 -0.544896 0.831470 0.184686 -0.608827 0.771506 0.281250 0.812500 +0.137950 -0.693520 0.707107 0.184686 -0.608827 0.771506 0.281250 0.750000 +0.270598 -0.653282 -0.707107 0.224828 -0.741160 -0.632562 0.312500 0.250000 +0.318190 -0.768178 -0.555570 0.224828 -0.741160 -0.632562 0.312500 0.312500 +0.162212 -0.815493 -0.555570 0.224828 -0.741160 -0.632562 0.281250 0.312500 +0.137950 -0.693520 -0.707107 0.224828 -0.741160 -0.632562 0.281250 0.250000 +0.318190 -0.768178 0.555570 0.224828 -0.741160 0.632562 0.312500 0.687500 +0.270598 -0.653282 0.707107 0.224828 -0.741160 0.632562 0.312500 0.750000 +0.137950 -0.693520 0.707107 0.224828 -0.741160 0.632562 0.281250 0.750000 +0.162212 -0.815493 0.555570 0.224828 -0.741160 0.632562 0.281250 0.687500 +0.212608 -0.513280 -0.831470 0.184686 -0.608827 -0.771506 0.312500 0.187500 +0.270598 -0.653282 -0.707107 0.184686 -0.608827 -0.771506 0.312500 0.250000 +0.137950 -0.693520 -0.707107 0.184686 -0.608827 -0.771506 0.281250 0.250000 +0.108386 -0.544895 -0.831470 0.184686 -0.608827 -0.771506 0.281250 0.187500 +0.353553 -0.853554 0.382683 0.256282 -0.844848 0.469629 0.312500 0.625000 +0.318190 -0.768178 0.555570 0.256282 -0.844848 0.469629 0.312500 0.687500 +0.162212 -0.815493 0.555570 0.256282 -0.844848 0.469629 0.281250 0.687500 +0.180240 -0.906128 0.382683 0.256282 -0.844848 0.469629 0.281250 0.625000 +0.146447 -0.353554 -0.923880 0.137353 -0.452794 -0.880972 0.312500 0.125000 +0.212608 -0.513280 -0.831470 0.137353 -0.452794 -0.880972 0.312500 0.187500 +0.108386 -0.544895 -0.831470 0.137353 -0.452794 -0.880972 0.281250 0.187500 +0.074658 -0.375331 -0.923880 0.137353 -0.452794 -0.880972 0.281250 0.125000 +0.375330 -0.906128 0.195090 0.277898 -0.916106 0.289003 0.312500 0.562500 +0.353553 -0.853554 0.382683 0.277898 -0.916106 0.289003 0.312500 0.625000 +0.180240 -0.906128 0.382683 0.277898 -0.916106 0.289003 0.281250 0.625000 +0.191342 -0.961940 0.195090 0.277898 -0.916106 0.289003 0.281250 0.562500 +0.074658 -0.180240 -0.980785 0.084638 -0.279015 -0.956550 0.312500 0.062500 +0.146447 -0.353554 -0.923880 0.084638 -0.279015 -0.956550 0.312500 0.125000 +0.074658 -0.375331 -0.923880 0.084638 -0.279015 -0.956550 0.281250 0.125000 +0.038060 -0.191342 -0.980785 0.084638 -0.279015 -0.956550 0.281250 0.062500 +0.382683 -0.923880 0.000000 0.288900 -0.952376 0.097551 0.312500 0.500000 +0.375330 -0.906128 0.195090 0.288900 -0.952376 0.097551 0.312500 0.562500 +0.191342 -0.961940 0.195090 0.288900 -0.952376 0.097551 0.281250 0.562500 +0.195090 -0.980786 0.000000 0.288900 -0.952376 0.097551 0.281250 0.500000 +0.074658 -0.180240 0.980785 0.028589 -0.094246 0.995138 0.312500 0.937500 +-0.000000 -0.000001 1.000000 0.028589 -0.094246 0.995138 0.296875 1.000000 +0.038060 -0.191342 0.980785 0.028589 -0.094246 0.995138 0.281250 0.937500 +0.000000 -0.000000 -1.000000 0.028589 -0.094246 -0.995138 0.296875 0.000000 +0.074658 -0.180240 -0.980785 0.028589 -0.094246 -0.995138 0.312500 0.062500 +0.038060 -0.191342 -0.980785 0.028589 -0.094246 -0.995138 0.281250 0.062500 +0.375330 -0.906128 -0.195090 0.288900 -0.952376 -0.097551 0.312500 0.437500 +0.382683 -0.923880 0.000000 0.288900 -0.952376 -0.097551 0.312500 0.500000 +0.195090 -0.980786 0.000000 0.288900 -0.952376 -0.097551 0.281250 0.500000 +0.191342 -0.961940 -0.195090 0.288900 -0.952376 -0.097551 0.281250 0.437500 +0.146447 -0.353554 0.923880 0.084638 -0.279015 0.956549 0.312500 0.875000 +0.074658 -0.180240 0.980785 0.084638 -0.279015 0.956549 0.312500 0.937500 +0.038060 -0.191342 0.980785 0.084638 -0.279015 0.956549 0.281250 0.937500 +0.074658 -0.375331 0.923880 0.084638 -0.279015 0.956549 0.281250 0.875000 +0.353553 -0.853554 -0.382683 0.277898 -0.916106 -0.289003 0.312500 0.375000 +0.375330 -0.906128 -0.195090 0.277898 -0.916106 -0.289003 0.312500 0.437500 +0.191342 -0.961940 -0.195090 0.277898 -0.916106 -0.289003 0.281250 0.437500 +0.180240 -0.906128 -0.382683 0.277898 -0.916106 -0.289003 0.281250 0.375000 +0.191342 -0.961940 0.195090 0.093834 -0.952718 0.289003 0.281250 0.562500 +0.180240 -0.906128 0.382683 0.093834 -0.952718 0.289003 0.281250 0.625000 +0.000000 -0.923880 0.382683 0.093834 -0.952718 0.289003 0.250000 0.625000 +-0.000000 -0.980785 0.195090 0.093834 -0.952718 0.289003 0.250000 0.562500 +0.038060 -0.191342 -0.980785 0.028579 -0.290166 -0.956550 0.281250 0.062500 +0.074658 -0.375331 -0.923880 0.028579 -0.290166 -0.956550 0.281250 0.125000 +0.000000 -0.382684 -0.923880 0.028579 -0.290166 -0.956550 0.250000 0.125000 +0.000000 -0.195091 -0.980785 0.028579 -0.290166 -0.956550 0.250000 0.062500 +0.195090 -0.980786 0.000000 0.097549 -0.990438 0.097551 0.281250 0.500000 +0.191342 -0.961940 0.195090 0.097549 -0.990438 0.097551 0.281250 0.562500 +-0.000000 -0.980785 0.195090 0.097549 -0.990438 0.097551 0.250000 0.562500 +-0.000000 -1.000000 0.000000 0.097549 -0.990438 0.097551 0.250000 0.500000 +0.038060 -0.191342 0.980785 0.009653 -0.098013 0.995138 0.281250 0.937500 +-0.000000 -0.000001 1.000000 0.009653 -0.098013 0.995138 0.265625 1.000000 +-0.000000 -0.195091 0.980785 0.009653 -0.098013 0.995138 0.250000 0.937500 +0.000000 -0.000000 -1.000000 0.009653 -0.098012 -0.995138 0.265625 0.000000 +0.038060 -0.191342 -0.980785 0.009653 -0.098012 -0.995138 0.281250 0.062500 +0.000000 -0.195091 -0.980785 0.009653 -0.098012 -0.995138 0.250000 0.062500 +0.191342 -0.961940 -0.195090 0.097549 -0.990438 -0.097551 0.281250 0.437500 +0.195090 -0.980786 0.000000 0.097549 -0.990438 -0.097551 0.281250 0.500000 +-0.000000 -1.000000 0.000000 0.097549 -0.990438 -0.097551 0.250000 0.500000 +-0.000000 -0.980785 -0.195090 0.097549 -0.990438 -0.097551 0.250000 0.437500 +0.074658 -0.375331 0.923880 0.028579 -0.290166 0.956549 0.281250 0.875000 +0.038060 -0.191342 0.980785 0.028579 -0.290166 0.956549 0.281250 0.937500 +-0.000000 -0.195091 0.980785 0.028579 -0.290166 0.956549 0.250000 0.937500 +0.000000 -0.382684 0.923880 0.028579 -0.290166 0.956549 0.250000 0.875000 +0.180240 -0.906128 -0.382683 0.093834 -0.952718 -0.289003 0.281250 0.375000 +0.191342 -0.961940 -0.195090 0.093834 -0.952718 -0.289003 0.281250 0.437500 +-0.000000 -0.980785 -0.195090 0.093834 -0.952718 -0.289003 0.250000 0.437500 +0.000000 -0.923880 -0.382683 0.093834 -0.952718 -0.289003 0.250000 0.375000 +0.108386 -0.544896 0.831470 0.046378 -0.470889 0.880972 0.281250 0.812500 +0.074658 -0.375331 0.923880 0.046378 -0.470889 0.880972 0.281250 0.875000 +0.000000 -0.382684 0.923880 0.046378 -0.470889 0.880972 0.250000 0.875000 +0.000000 -0.555571 0.831470 0.046378 -0.470889 0.880972 0.250000 0.812500 +0.162212 -0.815493 -0.555570 0.086536 -0.878613 -0.469629 0.281250 0.312500 +0.180240 -0.906128 -0.382683 0.086536 -0.878613 -0.469629 0.281250 0.375000 +0.000000 -0.923880 -0.382683 0.086536 -0.878613 -0.469629 0.250000 0.375000 +-0.000000 -0.831470 -0.555570 0.086536 -0.878613 -0.469629 0.250000 0.312500 +0.137950 -0.693520 0.707107 0.062361 -0.633159 0.771506 0.281250 0.750000 +0.108386 -0.544896 0.831470 0.062361 -0.633159 0.771506 0.281250 0.812500 +0.000000 -0.555571 0.831470 0.062361 -0.633159 0.771506 0.250000 0.812500 +-0.000000 -0.707107 0.707107 0.062361 -0.633159 0.771506 0.250000 0.750000 +0.137950 -0.693520 -0.707107 0.075915 -0.770780 -0.632562 0.281250 0.250000 +0.162212 -0.815493 -0.555570 0.075915 -0.770780 -0.632562 0.281250 0.312500 +-0.000000 -0.831470 -0.555570 0.075915 -0.770780 -0.632562 0.250000 0.312500 +-0.000000 -0.707107 -0.707107 0.075915 -0.770780 -0.632562 0.250000 0.250000 +0.162212 -0.815493 0.555570 0.075915 -0.770780 0.632562 0.281250 0.687500 +0.137950 -0.693520 0.707107 0.075915 -0.770780 0.632562 0.281250 0.750000 +-0.000000 -0.707107 0.707107 0.075915 -0.770780 0.632562 0.250000 0.750000 +-0.000000 -0.831470 0.555570 0.075915 -0.770780 0.632562 0.250000 0.687500 +0.108386 -0.544895 -0.831470 0.062360 -0.633159 -0.771506 0.281250 0.187500 +0.137950 -0.693520 -0.707107 0.062360 -0.633159 -0.771506 0.281250 0.250000 +-0.000000 -0.707107 -0.707107 0.062360 -0.633159 -0.771506 0.250000 0.250000 +-0.000000 -0.555570 -0.831470 0.062360 -0.633159 -0.771506 0.250000 0.187500 +0.180240 -0.906128 0.382683 0.086536 -0.878612 0.469629 0.281250 0.625000 +0.162212 -0.815493 0.555570 0.086536 -0.878612 0.469629 0.281250 0.687500 +-0.000000 -0.831470 0.555570 0.086536 -0.878612 0.469629 0.250000 0.687500 +0.000000 -0.923880 0.382683 0.086536 -0.878612 0.469629 0.250000 0.625000 +0.074658 -0.375331 -0.923880 0.046378 -0.470890 -0.880972 0.281250 0.125000 +0.108386 -0.544895 -0.831470 0.046378 -0.470890 -0.880972 0.281250 0.187500 +-0.000000 -0.555570 -0.831470 0.046378 -0.470890 -0.880972 0.250000 0.187500 +0.000000 -0.382684 -0.923880 0.046378 -0.470890 -0.880972 0.250000 0.125000 +-0.000000 -0.831470 -0.555570 -0.086536 -0.878613 -0.469629 0.250000 0.312500 +0.000000 -0.923880 -0.382683 -0.086536 -0.878613 -0.469629 0.250000 0.375000 +-0.180240 -0.906128 -0.382683 -0.086536 -0.878613 -0.469629 0.218750 0.375000 +-0.162212 -0.815493 -0.555570 -0.086536 -0.878613 -0.469629 0.218750 0.312500 +-0.000000 -0.707107 0.707107 -0.062361 -0.633159 0.771506 0.250000 0.750000 +0.000000 -0.555571 0.831470 -0.062361 -0.633159 0.771506 0.250000 0.812500 +-0.108386 -0.544896 0.831470 -0.062361 -0.633159 0.771506 0.218750 0.812500 +-0.137950 -0.693520 0.707107 -0.062361 -0.633159 0.771506 0.218750 0.750000 +-0.000000 -0.707107 -0.707107 -0.075915 -0.770780 -0.632562 0.250000 0.250000 +-0.000000 -0.831470 -0.555570 -0.075915 -0.770780 -0.632562 0.250000 0.312500 +-0.162212 -0.815493 -0.555570 -0.075915 -0.770780 -0.632562 0.218750 0.312500 +-0.137950 -0.693520 -0.707107 -0.075915 -0.770780 -0.632562 0.218750 0.250000 +-0.000000 -0.831470 0.555570 -0.075915 -0.770780 0.632562 0.250000 0.687500 +-0.000000 -0.707107 0.707107 -0.075915 -0.770780 0.632562 0.250000 0.750000 +-0.137950 -0.693520 0.707107 -0.075915 -0.770780 0.632562 0.218750 0.750000 +-0.162212 -0.815493 0.555570 -0.075915 -0.770780 0.632562 0.218750 0.687500 +-0.000000 -0.555570 -0.831470 -0.062361 -0.633159 -0.771506 0.250000 0.187500 +-0.000000 -0.707107 -0.707107 -0.062361 -0.633159 -0.771506 0.250000 0.250000 +-0.137950 -0.693520 -0.707107 -0.062361 -0.633159 -0.771506 0.218750 0.250000 +-0.108386 -0.544895 -0.831470 -0.062361 -0.633159 -0.771506 0.218750 0.187500 +0.000000 -0.923880 0.382683 -0.086536 -0.878612 0.469629 0.250000 0.625000 +-0.000000 -0.831470 0.555570 -0.086536 -0.878612 0.469629 0.250000 0.687500 +-0.162212 -0.815493 0.555570 -0.086536 -0.878612 0.469629 0.218750 0.687500 +-0.180240 -0.906128 0.382683 -0.086536 -0.878612 0.469629 0.218750 0.625000 +0.000000 -0.382684 -0.923880 -0.046379 -0.470890 -0.880972 0.250000 0.125000 +-0.000000 -0.555570 -0.831470 -0.046379 -0.470890 -0.880972 0.250000 0.187500 +-0.108386 -0.544895 -0.831470 -0.046379 -0.470890 -0.880972 0.218750 0.187500 +-0.074658 -0.375331 -0.923880 -0.046379 -0.470890 -0.880972 0.218750 0.125000 +-0.000000 -0.980785 0.195090 -0.093835 -0.952718 0.289003 0.250000 0.562500 +0.000000 -0.923880 0.382683 -0.093835 -0.952718 0.289003 0.250000 0.625000 +-0.180240 -0.906128 0.382683 -0.093835 -0.952718 0.289003 0.218750 0.625000 +-0.191342 -0.961940 0.195090 -0.093835 -0.952718 0.289003 0.218750 0.562500 +0.000000 -0.195091 -0.980785 -0.028579 -0.290166 -0.956549 0.250000 0.062500 +0.000000 -0.382684 -0.923880 -0.028579 -0.290166 -0.956549 0.250000 0.125000 +-0.074658 -0.375331 -0.923880 -0.028579 -0.290166 -0.956549 0.218750 0.125000 +-0.038060 -0.191342 -0.980785 -0.028579 -0.290166 -0.956549 0.218750 0.062500 +-0.000000 -1.000000 0.000000 -0.097550 -0.990438 0.097551 0.250000 0.500000 +-0.000000 -0.980785 0.195090 -0.097550 -0.990438 0.097551 0.250000 0.562500 +-0.191342 -0.961940 0.195090 -0.097550 -0.990438 0.097551 0.218750 0.562500 +-0.195090 -0.980786 0.000000 -0.097550 -0.990438 0.097551 0.218750 0.500000 +-0.000000 -0.195091 0.980785 -0.009653 -0.098013 0.995138 0.250000 0.937500 +-0.000000 -0.000001 1.000000 -0.009653 -0.098013 0.995138 0.234375 1.000000 +-0.038060 -0.191342 0.980785 -0.009653 -0.098013 0.995138 0.218750 0.937500 +0.000000 -0.000000 -1.000000 -0.009653 -0.098012 -0.995138 0.234375 0.000000 +0.000000 -0.195091 -0.980785 -0.009653 -0.098012 -0.995138 0.250000 0.062500 +-0.038060 -0.191342 -0.980785 -0.009653 -0.098012 -0.995138 0.218750 0.062500 +-0.000000 -0.980785 -0.195090 -0.097550 -0.990438 -0.097551 0.250000 0.437500 +-0.000000 -1.000000 0.000000 -0.097550 -0.990438 -0.097551 0.250000 0.500000 +-0.195090 -0.980786 0.000000 -0.097550 -0.990438 -0.097551 0.218750 0.500000 +-0.191342 -0.961940 -0.195090 -0.097550 -0.990438 -0.097551 0.218750 0.437500 +0.000000 -0.382684 0.923880 -0.028579 -0.290166 0.956549 0.250000 0.875000 +-0.000000 -0.195091 0.980785 -0.028579 -0.290166 0.956549 0.250000 0.937500 +-0.038060 -0.191342 0.980785 -0.028579 -0.290166 0.956549 0.218750 0.937500 +-0.074658 -0.375331 0.923880 -0.028579 -0.290166 0.956549 0.218750 0.875000 +0.000000 -0.923880 -0.382683 -0.093835 -0.952718 -0.289003 0.250000 0.375000 +-0.000000 -0.980785 -0.195090 -0.093835 -0.952718 -0.289003 0.250000 0.437500 +-0.191342 -0.961940 -0.195090 -0.093835 -0.952718 -0.289003 0.218750 0.437500 +-0.180240 -0.906128 -0.382683 -0.093835 -0.952718 -0.289003 0.218750 0.375000 +0.000000 -0.555571 0.831470 -0.046379 -0.470889 0.880972 0.250000 0.812500 +0.000000 -0.382684 0.923880 -0.046379 -0.470889 0.880972 0.250000 0.875000 +-0.074658 -0.375331 0.923880 -0.046379 -0.470889 0.880972 0.218750 0.875000 +-0.108386 -0.544896 0.831470 -0.046379 -0.470889 0.880972 0.218750 0.812500 +-0.038060 -0.191342 -0.980785 -0.084638 -0.279015 -0.956550 0.218750 0.062500 +-0.074658 -0.375331 -0.923880 -0.084638 -0.279015 -0.956550 0.218750 0.125000 +-0.146447 -0.353554 -0.923880 -0.084638 -0.279015 -0.956550 0.187500 0.125000 +-0.074658 -0.180240 -0.980785 -0.084638 -0.279015 -0.956550 0.187500 0.062500 +-0.195090 -0.980786 0.000000 -0.288900 -0.952376 0.097551 0.218750 0.500000 +-0.191342 -0.961940 0.195090 -0.288900 -0.952376 0.097551 0.218750 0.562500 +-0.375330 -0.906127 0.195090 -0.288900 -0.952376 0.097551 0.187500 0.562500 +-0.382684 -0.923880 0.000000 -0.288900 -0.952376 0.097551 0.187500 0.500000 +-0.038060 -0.191342 0.980785 -0.028589 -0.094246 0.995138 0.218750 0.937500 +-0.000000 -0.000001 1.000000 -0.028589 -0.094246 0.995138 0.203125 1.000000 +-0.074658 -0.180240 0.980785 -0.028589 -0.094246 0.995138 0.187500 0.937500 +0.000000 -0.000000 -1.000000 -0.028589 -0.094246 -0.995138 0.203125 0.000000 +-0.038060 -0.191342 -0.980785 -0.028589 -0.094246 -0.995138 0.218750 0.062500 +-0.074658 -0.180240 -0.980785 -0.028589 -0.094246 -0.995138 0.187500 0.062500 +-0.191342 -0.961940 -0.195090 -0.288900 -0.952376 -0.097551 0.218750 0.437500 +-0.195090 -0.980786 0.000000 -0.288900 -0.952376 -0.097551 0.218750 0.500000 +-0.382684 -0.923880 0.000000 -0.288900 -0.952376 -0.097551 0.187500 0.500000 +-0.375330 -0.906127 -0.195090 -0.288900 -0.952376 -0.097551 0.187500 0.437500 +-0.074658 -0.375331 0.923880 -0.084638 -0.279015 0.956549 0.218750 0.875000 +-0.038060 -0.191342 0.980785 -0.084638 -0.279015 0.956549 0.218750 0.937500 +-0.074658 -0.180240 0.980785 -0.084638 -0.279015 0.956549 0.187500 0.937500 +-0.146447 -0.353554 0.923880 -0.084638 -0.279015 0.956549 0.187500 0.875000 +-0.180240 -0.906128 -0.382683 -0.277898 -0.916106 -0.289003 0.218750 0.375000 +-0.191342 -0.961940 -0.195090 -0.277898 -0.916106 -0.289003 0.218750 0.437500 +-0.375330 -0.906127 -0.195090 -0.277898 -0.916106 -0.289003 0.187500 0.437500 +-0.353553 -0.853554 -0.382683 -0.277898 -0.916106 -0.289003 0.187500 0.375000 +-0.108386 -0.544896 0.831470 -0.137353 -0.452793 0.880972 0.218750 0.812500 +-0.074658 -0.375331 0.923880 -0.137353 -0.452793 0.880972 0.218750 0.875000 +-0.146447 -0.353554 0.923880 -0.137353 -0.452793 0.880972 0.187500 0.875000 +-0.212608 -0.513280 0.831470 -0.137353 -0.452793 0.880972 0.187500 0.812500 +-0.162212 -0.815493 -0.555570 -0.256282 -0.844848 -0.469629 0.218750 0.312500 +-0.180240 -0.906128 -0.382683 -0.256282 -0.844848 -0.469629 0.218750 0.375000 +-0.353553 -0.853554 -0.382683 -0.256282 -0.844848 -0.469629 0.187500 0.375000 +-0.318190 -0.768178 -0.555570 -0.256282 -0.844848 -0.469629 0.187500 0.312500 +-0.137950 -0.693520 0.707107 -0.184686 -0.608827 0.771506 0.218750 0.750000 +-0.108386 -0.544896 0.831470 -0.184686 -0.608827 0.771506 0.218750 0.812500 +-0.212608 -0.513280 0.831470 -0.184686 -0.608827 0.771506 0.187500 0.812500 +-0.270598 -0.653282 0.707107 -0.184686 -0.608827 0.771506 0.187500 0.750000 +-0.137950 -0.693520 -0.707107 -0.224829 -0.741160 -0.632562 0.218750 0.250000 +-0.162212 -0.815493 -0.555570 -0.224829 -0.741160 -0.632562 0.218750 0.312500 +-0.318190 -0.768178 -0.555570 -0.224829 -0.741160 -0.632562 0.187500 0.312500 +-0.270598 -0.653282 -0.707107 -0.224829 -0.741160 -0.632562 0.187500 0.250000 +-0.162212 -0.815493 0.555570 -0.224829 -0.741160 0.632562 0.218750 0.687500 +-0.137950 -0.693520 0.707107 -0.224829 -0.741160 0.632562 0.218750 0.750000 +-0.270598 -0.653282 0.707107 -0.224829 -0.741160 0.632562 0.187500 0.750000 +-0.318190 -0.768178 0.555570 -0.224829 -0.741160 0.632562 0.187500 0.687500 +-0.108386 -0.544895 -0.831470 -0.184686 -0.608827 -0.771506 0.218750 0.187500 +-0.137950 -0.693520 -0.707107 -0.184686 -0.608827 -0.771506 0.218750 0.250000 +-0.270598 -0.653282 -0.707107 -0.184686 -0.608827 -0.771506 0.187500 0.250000 +-0.212608 -0.513280 -0.831470 -0.184686 -0.608827 -0.771506 0.187500 0.187500 +-0.180240 -0.906128 0.382683 -0.256282 -0.844848 0.469629 0.218750 0.625000 +-0.162212 -0.815493 0.555570 -0.256282 -0.844848 0.469629 0.218750 0.687500 +-0.318190 -0.768178 0.555570 -0.256282 -0.844848 0.469629 0.187500 0.687500 +-0.353553 -0.853554 0.382683 -0.256282 -0.844848 0.469629 0.187500 0.625000 +-0.074658 -0.375331 -0.923880 -0.137354 -0.452794 -0.880972 0.218750 0.125000 +-0.108386 -0.544895 -0.831470 -0.137354 -0.452794 -0.880972 0.218750 0.187500 +-0.212608 -0.513280 -0.831470 -0.137354 -0.452794 -0.880972 0.187500 0.187500 +-0.146447 -0.353554 -0.923880 -0.137354 -0.452794 -0.880972 0.187500 0.125000 +-0.191342 -0.961940 0.195090 -0.277898 -0.916106 0.289003 0.218750 0.562500 +-0.180240 -0.906128 0.382683 -0.277898 -0.916106 0.289003 0.218750 0.625000 +-0.353553 -0.853554 0.382683 -0.277898 -0.916106 0.289003 0.187500 0.625000 +-0.375330 -0.906127 0.195090 -0.277898 -0.916106 0.289003 0.187500 0.562500 +-0.270598 -0.653282 -0.707107 -0.365102 -0.683057 -0.632562 0.187500 0.250000 +-0.318190 -0.768178 -0.555570 -0.365102 -0.683057 -0.632562 0.187500 0.312500 +-0.461940 -0.691342 -0.555570 -0.365102 -0.683057 -0.632562 0.156250 0.312500 +-0.392847 -0.587938 -0.707107 -0.365102 -0.683057 -0.632562 0.156250 0.250000 +-0.318190 -0.768178 0.555570 -0.365102 -0.683057 0.632562 0.187500 0.687500 +-0.270598 -0.653282 0.707107 -0.365102 -0.683057 0.632562 0.187500 0.750000 +-0.392847 -0.587938 0.707107 -0.365102 -0.683057 0.632562 0.156250 0.750000 +-0.461940 -0.691342 0.555570 -0.365102 -0.683057 0.632562 0.156250 0.687500 +-0.212608 -0.513280 -0.831470 -0.299913 -0.561098 -0.771506 0.187500 0.187500 +-0.270598 -0.653282 -0.707107 -0.299913 -0.561098 -0.771506 0.187500 0.250000 +-0.392847 -0.587938 -0.707107 -0.299913 -0.561098 -0.771506 0.156250 0.250000 +-0.308658 -0.461940 -0.831470 -0.299913 -0.561098 -0.771506 0.156250 0.187500 +-0.353553 -0.853554 0.382683 -0.416179 -0.778616 0.469630 0.187500 0.625000 +-0.318190 -0.768178 0.555570 -0.416179 -0.778616 0.469630 0.187500 0.687500 +-0.461940 -0.691342 0.555570 -0.416179 -0.778616 0.469630 0.156250 0.687500 +-0.513280 -0.768178 0.382683 -0.416179 -0.778616 0.469630 0.156250 0.625000 +-0.146447 -0.353554 -0.923880 -0.223050 -0.417297 -0.880972 0.187500 0.125000 +-0.212608 -0.513280 -0.831470 -0.223050 -0.417297 -0.880972 0.187500 0.187500 +-0.308658 -0.461940 -0.831470 -0.223050 -0.417297 -0.880972 0.156250 0.187500 +-0.212607 -0.318190 -0.923880 -0.223050 -0.417297 -0.880972 0.156250 0.125000 +-0.375330 -0.906127 0.195090 -0.451281 -0.844288 0.289003 0.187500 0.562500 +-0.353553 -0.853554 0.382683 -0.451281 -0.844288 0.289003 0.187500 0.625000 +-0.513280 -0.768178 0.382683 -0.451281 -0.844288 0.289003 0.156250 0.625000 +-0.544895 -0.815493 0.195090 -0.451281 -0.844288 0.289003 0.156250 0.562500 +-0.074658 -0.180240 -0.980785 -0.137445 -0.257142 -0.956550 0.187500 0.062500 +-0.146447 -0.353554 -0.923880 -0.137445 -0.257142 -0.956550 0.187500 0.125000 +-0.212607 -0.318190 -0.923880 -0.137445 -0.257142 -0.956550 0.156250 0.125000 +-0.108386 -0.162212 -0.980785 -0.137445 -0.257142 -0.956550 0.156250 0.062500 +-0.382684 -0.923880 0.000000 -0.469149 -0.877715 0.097551 0.187500 0.500000 +-0.375330 -0.906127 0.195090 -0.469149 -0.877715 0.097551 0.187500 0.562500 +-0.544895 -0.815493 0.195090 -0.469149 -0.877715 0.097551 0.156250 0.562500 +-0.555570 -0.831470 0.000000 -0.469149 -0.877715 0.097551 0.156250 0.500000 +-0.074658 -0.180240 0.980785 -0.046427 -0.086858 0.995138 0.187500 0.937500 +-0.000000 -0.000001 1.000000 -0.046427 -0.086858 0.995138 0.171875 1.000000 +-0.108386 -0.162212 0.980785 -0.046427 -0.086858 0.995138 0.156250 0.937500 +0.000000 -0.000000 -1.000000 -0.046426 -0.086857 -0.995138 0.171875 0.000000 +-0.074658 -0.180240 -0.980785 -0.046426 -0.086857 -0.995138 0.187500 0.062500 +-0.108386 -0.162212 -0.980785 -0.046426 -0.086857 -0.995138 0.156250 0.062500 +-0.375330 -0.906127 -0.195090 -0.469149 -0.877715 -0.097551 0.187500 0.437500 +-0.382684 -0.923880 0.000000 -0.469149 -0.877715 -0.097551 0.187500 0.500000 +-0.555570 -0.831470 0.000000 -0.469149 -0.877715 -0.097551 0.156250 0.500000 +-0.544895 -0.815493 -0.195090 -0.469149 -0.877715 -0.097551 0.156250 0.437500 +-0.146447 -0.353554 0.923880 -0.137445 -0.257142 0.956549 0.187500 0.875000 +-0.074658 -0.180240 0.980785 -0.137445 -0.257142 0.956549 0.187500 0.937500 +-0.108386 -0.162212 0.980785 -0.137445 -0.257142 0.956549 0.156250 0.937500 +-0.212608 -0.318190 0.923880 -0.137445 -0.257142 0.956549 0.156250 0.875000 +-0.353553 -0.853554 -0.382683 -0.451281 -0.844288 -0.289003 0.187500 0.375000 +-0.375330 -0.906127 -0.195090 -0.451281 -0.844288 -0.289003 0.187500 0.437500 +-0.544895 -0.815493 -0.195090 -0.451281 -0.844288 -0.289003 0.156250 0.437500 +-0.513280 -0.768178 -0.382683 -0.451281 -0.844288 -0.289003 0.156250 0.375000 +-0.212608 -0.513280 0.831470 -0.223050 -0.417297 0.880972 0.187500 0.812500 +-0.146447 -0.353554 0.923880 -0.223050 -0.417297 0.880972 0.187500 0.875000 +-0.212608 -0.318190 0.923880 -0.223050 -0.417297 0.880972 0.156250 0.875000 +-0.308658 -0.461940 0.831470 -0.223050 -0.417297 0.880972 0.156250 0.812500 +-0.318190 -0.768178 -0.555570 -0.416179 -0.778616 -0.469629 0.187500 0.312500 +-0.353553 -0.853554 -0.382683 -0.416179 -0.778616 -0.469629 0.187500 0.375000 +-0.513280 -0.768178 -0.382683 -0.416179 -0.778616 -0.469629 0.156250 0.375000 +-0.461940 -0.691342 -0.555570 -0.416179 -0.778616 -0.469629 0.156250 0.312500 +-0.270598 -0.653282 0.707107 -0.299913 -0.561098 0.771506 0.187500 0.750000 +-0.212608 -0.513280 0.831470 -0.299913 -0.561098 0.771506 0.187500 0.812500 +-0.308658 -0.461940 0.831470 -0.299913 -0.561098 0.771506 0.156250 0.812500 +-0.392847 -0.587938 0.707107 -0.299913 -0.561098 0.771506 0.156250 0.750000 +-0.108386 -0.162212 0.980785 -0.062480 -0.076132 0.995138 0.156250 0.937500 +-0.000000 -0.000001 1.000000 -0.062480 -0.076132 0.995138 0.140625 1.000000 +-0.137950 -0.137950 0.980785 -0.062480 -0.076132 0.995138 0.125000 0.937500 +0.000000 -0.000000 -1.000000 -0.062479 -0.076131 -0.995138 0.140625 0.000000 +-0.108386 -0.162212 -0.980785 -0.062479 -0.076131 -0.995138 0.156250 0.062500 +-0.137950 -0.137950 -0.980785 -0.062479 -0.076131 -0.995138 0.125000 0.062500 +-0.544895 -0.815493 -0.195090 -0.631368 -0.769323 -0.097551 0.156250 0.437500 +-0.555570 -0.831470 0.000000 -0.631368 -0.769323 -0.097551 0.156250 0.500000 +-0.707107 -0.707107 0.000000 -0.631368 -0.769323 -0.097551 0.125000 0.500000 +-0.693520 -0.693520 -0.195090 -0.631368 -0.769323 -0.097551 0.125000 0.437500 +-0.212608 -0.318190 0.923880 -0.184970 -0.225387 0.956549 0.156250 0.875000 +-0.108386 -0.162212 0.980785 -0.184970 -0.225387 0.956549 0.156250 0.937500 +-0.137950 -0.137950 0.980785 -0.184970 -0.225387 0.956549 0.125000 0.937500 +-0.270598 -0.270598 0.923880 -0.184970 -0.225387 0.956549 0.125000 0.875000 +-0.513280 -0.768178 -0.382683 -0.607323 -0.740025 -0.289003 0.156250 0.375000 +-0.544895 -0.815493 -0.195090 -0.607323 -0.740025 -0.289003 0.156250 0.437500 +-0.693520 -0.693520 -0.195090 -0.607323 -0.740025 -0.289003 0.125000 0.437500 +-0.653281 -0.653282 -0.382683 -0.607323 -0.740025 -0.289003 0.125000 0.375000 +-0.308658 -0.461940 0.831470 -0.300174 -0.365764 0.880972 0.156250 0.812500 +-0.212608 -0.318190 0.923880 -0.300174 -0.365764 0.880972 0.156250 0.875000 +-0.270598 -0.270598 0.923880 -0.300174 -0.365764 0.880972 0.125000 0.875000 +-0.392848 -0.392848 0.831470 -0.300174 -0.365764 0.880972 0.125000 0.812500 +-0.461940 -0.691342 -0.555570 -0.560083 -0.682463 -0.469629 0.156250 0.312500 +-0.513280 -0.768178 -0.382683 -0.560083 -0.682463 -0.469629 0.156250 0.375000 +-0.653281 -0.653282 -0.382683 -0.560083 -0.682463 -0.469629 0.125000 0.375000 +-0.587938 -0.587938 -0.555570 -0.560083 -0.682463 -0.469629 0.125000 0.312500 +-0.392847 -0.587938 0.707107 -0.403615 -0.491807 0.771506 0.156250 0.750000 +-0.308658 -0.461940 0.831470 -0.403615 -0.491807 0.771506 0.156250 0.812500 +-0.392848 -0.392848 0.831470 -0.403615 -0.491807 0.771506 0.125000 0.812500 +-0.500000 -0.500000 0.707107 -0.403615 -0.491807 0.771506 0.125000 0.750000 +-0.392847 -0.587938 -0.707107 -0.491344 -0.598704 -0.632562 0.156250 0.250000 +-0.461940 -0.691342 -0.555570 -0.491344 -0.598704 -0.632562 0.156250 0.312500 +-0.587938 -0.587938 -0.555570 -0.491344 -0.598704 -0.632562 0.125000 0.312500 +-0.500000 -0.500000 -0.707107 -0.491344 -0.598704 -0.632562 0.125000 0.250000 +-0.461940 -0.691342 0.555570 -0.491344 -0.598704 0.632562 0.156250 0.687500 +-0.392847 -0.587938 0.707107 -0.491344 -0.598704 0.632562 0.156250 0.750000 +-0.500000 -0.500000 0.707107 -0.491344 -0.598704 0.632562 0.125000 0.750000 +-0.587938 -0.587938 0.555570 -0.491344 -0.598704 0.632562 0.125000 0.687500 +-0.308658 -0.461940 -0.831470 -0.403615 -0.491806 -0.771506 0.156250 0.187500 +-0.392847 -0.587938 -0.707107 -0.403615 -0.491806 -0.771506 0.156250 0.250000 +-0.500000 -0.500000 -0.707107 -0.403615 -0.491806 -0.771506 0.125000 0.250000 +-0.392847 -0.392848 -0.831470 -0.403615 -0.491806 -0.771506 0.125000 0.187500 +-0.513280 -0.768178 0.382683 -0.560083 -0.682463 0.469629 0.156250 0.625000 +-0.461940 -0.691342 0.555570 -0.560083 -0.682463 0.469629 0.156250 0.687500 +-0.587938 -0.587938 0.555570 -0.560083 -0.682463 0.469629 0.125000 0.687500 +-0.653281 -0.653282 0.382683 -0.560083 -0.682463 0.469629 0.125000 0.625000 +-0.212607 -0.318190 -0.923880 -0.300175 -0.365764 -0.880972 0.156250 0.125000 +-0.308658 -0.461940 -0.831470 -0.300175 -0.365764 -0.880972 0.156250 0.187500 +-0.392847 -0.392848 -0.831470 -0.300175 -0.365764 -0.880972 0.125000 0.187500 +-0.270598 -0.270598 -0.923880 -0.300175 -0.365764 -0.880972 0.125000 0.125000 +-0.544895 -0.815493 0.195090 -0.607323 -0.740025 0.289003 0.156250 0.562500 +-0.513280 -0.768178 0.382683 -0.607323 -0.740025 0.289003 0.156250 0.625000 +-0.653281 -0.653282 0.382683 -0.607323 -0.740025 0.289003 0.125000 0.625000 +-0.693520 -0.693520 0.195090 -0.607323 -0.740025 0.289003 0.125000 0.562500 +-0.108386 -0.162212 -0.980785 -0.184970 -0.225387 -0.956550 0.156250 0.062500 +-0.212607 -0.318190 -0.923880 -0.184970 -0.225387 -0.956550 0.156250 0.125000 +-0.270598 -0.270598 -0.923880 -0.184970 -0.225387 -0.956550 0.125000 0.125000 +-0.137950 -0.137950 -0.980785 -0.184970 -0.225387 -0.956550 0.125000 0.062500 +-0.555570 -0.831470 0.000000 -0.631368 -0.769323 0.097551 0.156250 0.500000 +-0.544895 -0.815493 0.195090 -0.631368 -0.769323 0.097551 0.156250 0.562500 +-0.693520 -0.693520 0.195090 -0.631368 -0.769323 0.097551 0.125000 0.562500 +-0.707107 -0.707107 0.000000 -0.631368 -0.769323 0.097551 0.125000 0.500000 +-0.587938 -0.587938 0.555570 -0.598704 -0.491344 0.632562 0.125000 0.687500 +-0.500000 -0.500000 0.707107 -0.598704 -0.491344 0.632562 0.125000 0.750000 +-0.587938 -0.392848 0.707107 -0.598704 -0.491344 0.632562 0.093750 0.750000 +-0.691342 -0.461940 0.555570 -0.598704 -0.491344 0.632562 0.093750 0.687500 +-0.392847 -0.392848 -0.831470 -0.491806 -0.403615 -0.771506 0.125000 0.187500 +-0.500000 -0.500000 -0.707107 -0.491806 -0.403615 -0.771506 0.125000 0.250000 +-0.587938 -0.392848 -0.707107 -0.491806 -0.403615 -0.771506 0.093750 0.250000 +-0.461940 -0.308658 -0.831470 -0.491806 -0.403615 -0.771506 0.093750 0.187500 +-0.653281 -0.653282 0.382683 -0.682463 -0.560083 0.469629 0.125000 0.625000 +-0.587938 -0.587938 0.555570 -0.682463 -0.560083 0.469629 0.125000 0.687500 +-0.691342 -0.461940 0.555570 -0.682463 -0.560083 0.469629 0.093750 0.687500 +-0.768178 -0.513280 0.382683 -0.682463 -0.560083 0.469629 0.093750 0.625000 +-0.270598 -0.270598 -0.923880 -0.365764 -0.300175 -0.880972 0.125000 0.125000 +-0.392847 -0.392848 -0.831470 -0.365764 -0.300175 -0.880972 0.125000 0.187500 +-0.461940 -0.308658 -0.831470 -0.365764 -0.300175 -0.880972 0.093750 0.187500 +-0.318190 -0.212608 -0.923880 -0.365764 -0.300175 -0.880972 0.093750 0.125000 +-0.693520 -0.693520 0.195090 -0.740025 -0.607323 0.289003 0.125000 0.562500 +-0.653281 -0.653282 0.382683 -0.740025 -0.607323 0.289003 0.125000 0.625000 +-0.768178 -0.513280 0.382683 -0.740025 -0.607323 0.289003 0.093750 0.625000 +-0.815493 -0.544895 0.195090 -0.740025 -0.607323 0.289003 0.093750 0.562500 +-0.137950 -0.137950 -0.980785 -0.225387 -0.184970 -0.956550 0.125000 0.062500 +-0.270598 -0.270598 -0.923880 -0.225387 -0.184970 -0.956550 0.125000 0.125000 +-0.318190 -0.212608 -0.923880 -0.225387 -0.184970 -0.956550 0.093750 0.125000 +-0.162212 -0.108387 -0.980785 -0.225387 -0.184970 -0.956550 0.093750 0.062500 +-0.707107 -0.707107 0.000000 -0.769324 -0.631367 0.097551 0.125000 0.500000 +-0.693520 -0.693520 0.195090 -0.769324 -0.631367 0.097551 0.125000 0.562500 +-0.815493 -0.544895 0.195090 -0.769324 -0.631367 0.097551 0.093750 0.562500 +-0.831470 -0.555570 0.000000 -0.769324 -0.631367 0.097551 0.093750 0.500000 +-0.137950 -0.137950 0.980785 -0.076132 -0.062479 0.995138 0.125000 0.937500 +-0.000000 -0.000001 1.000000 -0.076132 -0.062479 0.995138 0.109375 1.000000 +-0.162212 -0.108387 0.980785 -0.076132 -0.062479 0.995138 0.093750 0.937500 +0.000000 -0.000000 -1.000000 -0.076131 -0.062479 -0.995138 0.109375 0.000000 +-0.137950 -0.137950 -0.980785 -0.076131 -0.062479 -0.995138 0.125000 0.062500 +-0.162212 -0.108387 -0.980785 -0.076131 -0.062479 -0.995138 0.093750 0.062500 +-0.693520 -0.693520 -0.195090 -0.769324 -0.631367 -0.097551 0.125000 0.437500 +-0.707107 -0.707107 0.000000 -0.769324 -0.631367 -0.097551 0.125000 0.500000 +-0.831470 -0.555570 0.000000 -0.769324 -0.631367 -0.097551 0.093750 0.500000 +-0.815493 -0.544895 -0.195090 -0.769324 -0.631367 -0.097551 0.093750 0.437500 +-0.270598 -0.270598 0.923880 -0.225387 -0.184970 0.956549 0.125000 0.875000 +-0.137950 -0.137950 0.980785 -0.225387 -0.184970 0.956549 0.125000 0.937500 +-0.162212 -0.108387 0.980785 -0.225387 -0.184970 0.956549 0.093750 0.937500 +-0.318190 -0.212608 0.923880 -0.225387 -0.184970 0.956549 0.093750 0.875000 +-0.653281 -0.653282 -0.382683 -0.740025 -0.607323 -0.289003 0.125000 0.375000 +-0.693520 -0.693520 -0.195090 -0.740025 -0.607323 -0.289003 0.125000 0.437500 +-0.815493 -0.544895 -0.195090 -0.740025 -0.607323 -0.289003 0.093750 0.437500 +-0.768178 -0.513280 -0.382683 -0.740025 -0.607323 -0.289003 0.093750 0.375000 +-0.392848 -0.392848 0.831470 -0.365764 -0.300174 0.880972 0.125000 0.812500 +-0.270598 -0.270598 0.923880 -0.365764 -0.300174 0.880972 0.125000 0.875000 +-0.318190 -0.212608 0.923880 -0.365764 -0.300174 0.880972 0.093750 0.875000 +-0.461940 -0.308659 0.831470 -0.365764 -0.300174 0.880972 0.093750 0.812500 +-0.587938 -0.587938 -0.555570 -0.682463 -0.560083 -0.469629 0.125000 0.312500 +-0.653281 -0.653282 -0.382683 -0.682463 -0.560083 -0.469629 0.125000 0.375000 +-0.768178 -0.513280 -0.382683 -0.682463 -0.560083 -0.469629 0.093750 0.375000 +-0.691342 -0.461940 -0.555570 -0.682463 -0.560083 -0.469629 0.093750 0.312500 +-0.500000 -0.500000 0.707107 -0.491807 -0.403615 0.771506 0.125000 0.750000 +-0.392848 -0.392848 0.831470 -0.491807 -0.403615 0.771506 0.125000 0.812500 +-0.461940 -0.308659 0.831470 -0.491807 -0.403615 0.771506 0.093750 0.812500 +-0.587938 -0.392848 0.707107 -0.491807 -0.403615 0.771506 0.093750 0.750000 +-0.500000 -0.500000 -0.707107 -0.598704 -0.491344 -0.632562 0.125000 0.250000 +-0.587938 -0.587938 -0.555570 -0.598704 -0.491344 -0.632562 0.125000 0.312500 +-0.691342 -0.461940 -0.555570 -0.598704 -0.491344 -0.632562 0.093750 0.312500 +-0.587938 -0.392848 -0.707107 -0.598704 -0.491344 -0.632562 0.093750 0.250000 +-0.815493 -0.544895 -0.195090 -0.877715 -0.469148 -0.097551 0.093750 0.437500 +-0.831470 -0.555570 0.000000 -0.877715 -0.469148 -0.097551 0.093750 0.500000 +-0.923880 -0.382684 0.000000 -0.877715 -0.469148 -0.097551 0.062500 0.500000 +-0.906127 -0.375330 -0.195090 -0.877715 -0.469148 -0.097551 0.062500 0.437500 +-0.318190 -0.212608 0.923880 -0.257142 -0.137445 0.956549 0.093750 0.875000 +-0.162212 -0.108387 0.980785 -0.257142 -0.137445 0.956549 0.093750 0.937500 +-0.180240 -0.074658 0.980785 -0.257142 -0.137445 0.956549 0.062500 0.937500 +-0.353553 -0.146447 0.923880 -0.257142 -0.137445 0.956549 0.062500 0.875000 +-0.768178 -0.513280 -0.382683 -0.844288 -0.451281 -0.289002 0.093750 0.375000 +-0.815493 -0.544895 -0.195090 -0.844288 -0.451281 -0.289002 0.093750 0.437500 +-0.906127 -0.375330 -0.195090 -0.844288 -0.451281 -0.289002 0.062500 0.437500 +-0.853553 -0.353554 -0.382683 -0.844288 -0.451281 -0.289002 0.062500 0.375000 +-0.461940 -0.308659 0.831470 -0.417297 -0.223050 0.880972 0.093750 0.812500 +-0.318190 -0.212608 0.923880 -0.417297 -0.223050 0.880972 0.093750 0.875000 +-0.353553 -0.146447 0.923880 -0.417297 -0.223050 0.880972 0.062500 0.875000 +-0.513280 -0.212608 0.831470 -0.417297 -0.223050 0.880972 0.062500 0.812500 +-0.691342 -0.461940 -0.555570 -0.778616 -0.416179 -0.469629 0.093750 0.312500 +-0.768178 -0.513280 -0.382683 -0.778616 -0.416179 -0.469629 0.093750 0.375000 +-0.853553 -0.353554 -0.382683 -0.778616 -0.416179 -0.469629 0.062500 0.375000 +-0.768177 -0.318190 -0.555570 -0.778616 -0.416179 -0.469629 0.062500 0.312500 +-0.587938 -0.392848 0.707107 -0.561098 -0.299913 0.771506 0.093750 0.750000 +-0.461940 -0.308659 0.831470 -0.561098 -0.299913 0.771506 0.093750 0.812500 +-0.513280 -0.212608 0.831470 -0.561098 -0.299913 0.771506 0.062500 0.812500 +-0.653281 -0.270598 0.707107 -0.561098 -0.299913 0.771506 0.062500 0.750000 +-0.587938 -0.392848 -0.707107 -0.683057 -0.365101 -0.632562 0.093750 0.250000 +-0.691342 -0.461940 -0.555570 -0.683057 -0.365101 -0.632562 0.093750 0.312500 +-0.768177 -0.318190 -0.555570 -0.683057 -0.365101 -0.632562 0.062500 0.312500 +-0.653281 -0.270598 -0.707107 -0.683057 -0.365101 -0.632562 0.062500 0.250000 +-0.691342 -0.461940 0.555570 -0.683057 -0.365101 0.632562 0.093750 0.687500 +-0.587938 -0.392848 0.707107 -0.683057 -0.365101 0.632562 0.093750 0.750000 +-0.653281 -0.270598 0.707107 -0.683057 -0.365101 0.632562 0.062500 0.750000 +-0.768177 -0.318190 0.555570 -0.683057 -0.365101 0.632562 0.062500 0.687500 +-0.461940 -0.308658 -0.831470 -0.561098 -0.299913 -0.771506 0.093750 0.187500 +-0.587938 -0.392848 -0.707107 -0.561098 -0.299913 -0.771506 0.093750 0.250000 +-0.653281 -0.270598 -0.707107 -0.561098 -0.299913 -0.771506 0.062500 0.250000 +-0.513280 -0.212608 -0.831470 -0.561098 -0.299913 -0.771506 0.062500 0.187500 +-0.768178 -0.513280 0.382683 -0.778616 -0.416179 0.469630 0.093750 0.625000 +-0.691342 -0.461940 0.555570 -0.778616 -0.416179 0.469630 0.093750 0.687500 +-0.768177 -0.318190 0.555570 -0.778616 -0.416179 0.469630 0.062500 0.687500 +-0.853553 -0.353554 0.382683 -0.778616 -0.416179 0.469630 0.062500 0.625000 +-0.318190 -0.212608 -0.923880 -0.417297 -0.223050 -0.880972 0.093750 0.125000 +-0.461940 -0.308658 -0.831470 -0.417297 -0.223050 -0.880972 0.093750 0.187500 +-0.513280 -0.212608 -0.831470 -0.417297 -0.223050 -0.880972 0.062500 0.187500 +-0.353553 -0.146447 -0.923880 -0.417297 -0.223050 -0.880972 0.062500 0.125000 +-0.815493 -0.544895 0.195090 -0.844288 -0.451281 0.289002 0.093750 0.562500 +-0.768178 -0.513280 0.382683 -0.844288 -0.451281 0.289002 0.093750 0.625000 +-0.853553 -0.353554 0.382683 -0.844288 -0.451281 0.289002 0.062500 0.625000 +-0.906127 -0.375330 0.195090 -0.844288 -0.451281 0.289002 0.062500 0.562500 +-0.162212 -0.108387 -0.980785 -0.257142 -0.137445 -0.956549 0.093750 0.062500 +-0.318190 -0.212608 -0.923880 -0.257142 -0.137445 -0.956549 0.093750 0.125000 +-0.353553 -0.146447 -0.923880 -0.257142 -0.137445 -0.956549 0.062500 0.125000 +-0.180240 -0.074658 -0.980785 -0.257142 -0.137445 -0.956549 0.062500 0.062500 +-0.831470 -0.555570 0.000000 -0.877715 -0.469148 0.097551 0.093750 0.500000 +-0.815493 -0.544895 0.195090 -0.877715 -0.469148 0.097551 0.093750 0.562500 +-0.906127 -0.375330 0.195090 -0.877715 -0.469148 0.097551 0.062500 0.562500 +-0.923880 -0.382684 0.000000 -0.877715 -0.469148 0.097551 0.062500 0.500000 +-0.162212 -0.108387 0.980785 -0.086858 -0.046426 0.995138 0.093750 0.937500 +-0.000000 -0.000001 1.000000 -0.086858 -0.046426 0.995138 0.078125 1.000000 +-0.180240 -0.074658 0.980785 -0.086858 -0.046426 0.995138 0.062500 0.937500 +0.000000 -0.000000 -1.000000 -0.086858 -0.046426 -0.995138 0.078125 0.000000 +-0.162212 -0.108387 -0.980785 -0.086858 -0.046426 -0.995138 0.093750 0.062500 +-0.180240 -0.074658 -0.980785 -0.086858 -0.046426 -0.995138 0.062500 0.062500 +-0.513280 -0.212608 -0.831470 -0.608827 -0.184686 -0.771506 0.062500 0.187500 +-0.653281 -0.270598 -0.707107 -0.608827 -0.184686 -0.771506 0.062500 0.250000 +-0.693520 -0.137950 -0.707107 -0.608827 -0.184686 -0.771506 0.031250 0.250000 +-0.544895 -0.108387 -0.831470 -0.608827 -0.184686 -0.771506 0.031250 0.187500 +-0.853553 -0.353554 0.382683 -0.844848 -0.256282 0.469630 0.062500 0.625000 +-0.768177 -0.318190 0.555570 -0.844848 -0.256282 0.469630 0.062500 0.687500 +-0.815493 -0.162212 0.555570 -0.844848 -0.256282 0.469630 0.031250 0.687500 +-0.906127 -0.180240 0.382683 -0.844848 -0.256282 0.469630 0.031250 0.625000 +-0.353553 -0.146447 -0.923880 -0.452794 -0.137353 -0.880972 0.062500 0.125000 +-0.513280 -0.212608 -0.831470 -0.452794 -0.137353 -0.880972 0.062500 0.187500 +-0.544895 -0.108387 -0.831470 -0.452794 -0.137353 -0.880972 0.031250 0.187500 +-0.375330 -0.074658 -0.923880 -0.452794 -0.137353 -0.880972 0.031250 0.125000 +-0.906127 -0.375330 0.195090 -0.916106 -0.277898 0.289002 0.062500 0.562500 +-0.853553 -0.353554 0.382683 -0.916106 -0.277898 0.289002 0.062500 0.625000 +-0.906127 -0.180240 0.382683 -0.916106 -0.277898 0.289002 0.031250 0.625000 +-0.961939 -0.191342 0.195090 -0.916106 -0.277898 0.289002 0.031250 0.562500 +-0.180240 -0.074658 -0.980785 -0.279015 -0.084638 -0.956550 0.062500 0.062500 +-0.353553 -0.146447 -0.923880 -0.279015 -0.084638 -0.956550 0.062500 0.125000 +-0.375330 -0.074658 -0.923880 -0.279015 -0.084638 -0.956550 0.031250 0.125000 +-0.191342 -0.038061 -0.980785 -0.279015 -0.084638 -0.956550 0.031250 0.062500 +-0.923880 -0.382684 0.000000 -0.952376 -0.288900 0.097551 0.062500 0.500000 +-0.906127 -0.375330 0.195090 -0.952376 -0.288900 0.097551 0.062500 0.562500 +-0.961939 -0.191342 0.195090 -0.952376 -0.288900 0.097551 0.031250 0.562500 +-0.980785 -0.195090 0.000000 -0.952376 -0.288900 0.097551 0.031250 0.500000 +-0.180240 -0.074658 0.980785 -0.094246 -0.028589 0.995138 0.062500 0.937500 +-0.000000 -0.000001 1.000000 -0.094246 -0.028589 0.995138 0.046875 1.000000 +-0.191342 -0.038061 0.980785 -0.094246 -0.028589 0.995138 0.031250 0.937500 +0.000000 -0.000000 -1.000000 -0.094246 -0.028589 -0.995138 0.046875 0.000000 +-0.180240 -0.074658 -0.980785 -0.094246 -0.028589 -0.995138 0.062500 0.062500 +-0.191342 -0.038061 -0.980785 -0.094246 -0.028589 -0.995138 0.031250 0.062500 +-0.906127 -0.375330 -0.195090 -0.952376 -0.288900 -0.097551 0.062500 0.437500 +-0.923880 -0.382684 0.000000 -0.952376 -0.288900 -0.097551 0.062500 0.500000 +-0.980785 -0.195090 0.000000 -0.952376 -0.288900 -0.097551 0.031250 0.500000 +-0.961939 -0.191342 -0.195090 -0.952376 -0.288900 -0.097551 0.031250 0.437500 +-0.353553 -0.146447 0.923880 -0.279016 -0.084638 0.956549 0.062500 0.875000 +-0.180240 -0.074658 0.980785 -0.279016 -0.084638 0.956549 0.062500 0.937500 +-0.191342 -0.038061 0.980785 -0.279016 -0.084638 0.956549 0.031250 0.937500 +-0.375330 -0.074658 0.923880 -0.279016 -0.084638 0.956549 0.031250 0.875000 +-0.853553 -0.353554 -0.382683 -0.916106 -0.277898 -0.289002 0.062500 0.375000 +-0.906127 -0.375330 -0.195090 -0.916106 -0.277898 -0.289002 0.062500 0.437500 +-0.961939 -0.191342 -0.195090 -0.916106 -0.277898 -0.289002 0.031250 0.437500 +-0.906127 -0.180240 -0.382683 -0.916106 -0.277898 -0.289002 0.031250 0.375000 +-0.513280 -0.212608 0.831470 -0.452793 -0.137353 0.880972 0.062500 0.812500 +-0.353553 -0.146447 0.923880 -0.452793 -0.137353 0.880972 0.062500 0.875000 +-0.375330 -0.074658 0.923880 -0.452793 -0.137353 0.880972 0.031250 0.875000 +-0.544895 -0.108387 0.831470 -0.452793 -0.137353 0.880972 0.031250 0.812500 +-0.768177 -0.318190 -0.555570 -0.844848 -0.256282 -0.469630 0.062500 0.312500 +-0.853553 -0.353554 -0.382683 -0.844848 -0.256282 -0.469630 0.062500 0.375000 +-0.906127 -0.180240 -0.382683 -0.844848 -0.256282 -0.469630 0.031250 0.375000 +-0.815493 -0.162212 -0.555570 -0.844848 -0.256282 -0.469630 0.031250 0.312500 +-0.653281 -0.270598 0.707107 -0.608827 -0.184686 0.771506 0.062500 0.750000 +-0.513280 -0.212608 0.831470 -0.608827 -0.184686 0.771506 0.062500 0.812500 +-0.544895 -0.108387 0.831470 -0.608827 -0.184686 0.771506 0.031250 0.812500 +-0.693520 -0.137950 0.707107 -0.608827 -0.184686 0.771506 0.031250 0.750000 +-0.653281 -0.270598 -0.707107 -0.741160 -0.224828 -0.632562 0.062500 0.250000 +-0.768177 -0.318190 -0.555570 -0.741160 -0.224828 -0.632562 0.062500 0.312500 +-0.815493 -0.162212 -0.555570 -0.741160 -0.224828 -0.632562 0.031250 0.312500 +-0.693520 -0.137950 -0.707107 -0.741160 -0.224828 -0.632562 0.031250 0.250000 +-0.768177 -0.318190 0.555570 -0.741160 -0.224828 0.632562 0.062500 0.687500 +-0.653281 -0.270598 0.707107 -0.741160 -0.224828 0.632562 0.062500 0.750000 +-0.693520 -0.137950 0.707107 -0.741160 -0.224828 0.632562 0.031250 0.750000 +-0.815493 -0.162212 0.555570 -0.741160 -0.224828 0.632562 0.031250 0.687500 +-0.375330 -0.074658 0.923880 -0.290166 -0.028579 0.956549 0.031250 0.875000 +-0.191342 -0.038061 0.980785 -0.290166 -0.028579 0.956549 0.031250 0.937500 +-0.195090 -0.000000 0.980785 -0.290166 -0.028579 0.956549 0.000000 0.937500 +-0.382683 -0.000000 0.923880 -0.290166 -0.028579 0.956549 0.000000 0.875000 +-0.906127 -0.180240 -0.382683 -0.952719 -0.093834 -0.289002 0.031250 0.375000 +-0.961939 -0.191342 -0.195090 -0.952719 -0.093834 -0.289002 0.031250 0.437500 +-0.980785 -0.000000 -0.195090 -0.952719 -0.093834 -0.289002 0.000000 0.437500 +-0.923879 -0.000000 -0.382683 -0.952719 -0.093834 -0.289002 0.000000 0.375000 +-0.544895 -0.108387 0.831470 -0.470889 -0.046378 0.880972 0.031250 0.812500 +-0.375330 -0.074658 0.923880 -0.470889 -0.046378 0.880972 0.031250 0.875000 +-0.382683 -0.000000 0.923880 -0.470889 -0.046378 0.880972 0.000000 0.875000 +-0.555570 -0.000000 0.831470 -0.470889 -0.046378 0.880972 0.000000 0.812500 +-0.815493 -0.162212 -0.555570 -0.878612 -0.086536 -0.469629 0.031250 0.312500 +-0.906127 -0.180240 -0.382683 -0.878612 -0.086536 -0.469629 0.031250 0.375000 +-0.923879 -0.000000 -0.382683 -0.878612 -0.086536 -0.469629 0.000000 0.375000 +-0.831469 -0.000000 -0.555570 -0.878612 -0.086536 -0.469629 0.000000 0.312500 +-0.693520 -0.137950 0.707107 -0.633159 -0.062360 0.771506 0.031250 0.750000 +-0.544895 -0.108387 0.831470 -0.633159 -0.062360 0.771506 0.031250 0.812500 +-0.555570 -0.000000 0.831470 -0.633159 -0.062360 0.771506 0.000000 0.812500 +-0.707107 -0.000000 0.707107 -0.633159 -0.062360 0.771506 0.000000 0.750000 +-0.693520 -0.137950 -0.707107 -0.770781 -0.075915 -0.632562 0.031250 0.250000 +-0.815493 -0.162212 -0.555570 -0.770781 -0.075915 -0.632562 0.031250 0.312500 +-0.831469 -0.000000 -0.555570 -0.770781 -0.075915 -0.632562 0.000000 0.312500 +-0.707107 -0.000000 -0.707107 -0.770781 -0.075915 -0.632562 0.000000 0.250000 +-0.815493 -0.162212 0.555570 -0.770781 -0.075915 0.632562 0.031250 0.687500 +-0.693520 -0.137950 0.707107 -0.770781 -0.075915 0.632562 0.031250 0.750000 +-0.707107 -0.000000 0.707107 -0.770781 -0.075915 0.632562 0.000000 0.750000 +-0.831469 -0.000000 0.555570 -0.770781 -0.075915 0.632562 0.000000 0.687500 +-0.544895 -0.108387 -0.831470 -0.633159 -0.062360 -0.771506 0.031250 0.187500 +-0.693520 -0.137950 -0.707107 -0.633159 -0.062360 -0.771506 0.031250 0.250000 +-0.707107 -0.000000 -0.707107 -0.633159 -0.062360 -0.771506 0.000000 0.250000 +-0.555570 -0.000000 -0.831470 -0.633159 -0.062360 -0.771506 0.000000 0.187500 +-0.906127 -0.180240 0.382683 -0.878612 -0.086536 0.469630 0.031250 0.625000 +-0.815493 -0.162212 0.555570 -0.878612 -0.086536 0.469630 0.031250 0.687500 +-0.831469 -0.000000 0.555570 -0.878612 -0.086536 0.469630 0.000000 0.687500 +-0.923879 -0.000000 0.382683 -0.878612 -0.086536 0.469630 0.000000 0.625000 +-0.375330 -0.074658 -0.923880 -0.470890 -0.046378 -0.880972 0.031250 0.125000 +-0.544895 -0.108387 -0.831470 -0.470890 -0.046378 -0.880972 0.031250 0.187500 +-0.555570 -0.000000 -0.831470 -0.470890 -0.046378 -0.880972 0.000000 0.187500 +-0.382683 -0.000000 -0.923880 -0.470890 -0.046378 -0.880972 0.000000 0.125000 +-0.961939 -0.191342 0.195090 -0.952719 -0.093834 0.289002 0.031250 0.562500 +-0.906127 -0.180240 0.382683 -0.952719 -0.093834 0.289002 0.031250 0.625000 +-0.923879 -0.000000 0.382683 -0.952719 -0.093834 0.289002 0.000000 0.625000 +-0.980785 -0.000000 0.195090 -0.952719 -0.093834 0.289002 0.000000 0.562500 +-0.191342 -0.038061 -0.980785 -0.290166 -0.028579 -0.956549 0.031250 0.062500 +-0.375330 -0.074658 -0.923880 -0.290166 -0.028579 -0.956549 0.031250 0.125000 +-0.382683 -0.000000 -0.923880 -0.290166 -0.028579 -0.956549 0.000000 0.125000 +-0.195090 -0.000000 -0.980785 -0.290166 -0.028579 -0.956549 0.000000 0.062500 +-0.980785 -0.195090 0.000000 -0.990438 -0.097549 0.097551 0.031250 0.500000 +-0.961939 -0.191342 0.195090 -0.990438 -0.097549 0.097551 0.031250 0.562500 +-0.980785 -0.000000 0.195090 -0.990438 -0.097549 0.097551 0.000000 0.562500 +-1.000000 -0.000000 0.000000 -0.990438 -0.097549 0.097551 0.000000 0.500000 +-0.191342 -0.038061 0.980785 -0.098013 -0.009653 0.995138 0.031250 0.937500 +-0.000000 -0.000001 1.000000 -0.098013 -0.009653 0.995138 0.015625 1.000000 +-0.195090 -0.000000 0.980785 -0.098013 -0.009653 0.995138 0.000000 0.937500 +0.000000 -0.000000 -1.000000 -0.098012 -0.009653 -0.995138 0.015625 0.000000 +-0.191342 -0.038061 -0.980785 -0.098012 -0.009653 -0.995138 0.031250 0.062500 +-0.195090 -0.000000 -0.980785 -0.098012 -0.009653 -0.995138 0.000000 0.062500 +-0.961939 -0.191342 -0.195090 -0.990438 -0.097549 -0.097551 0.031250 0.437500 +-0.980785 -0.195090 0.000000 -0.990438 -0.097549 -0.097551 0.031250 0.500000 +-1.000000 -0.000000 0.000000 -0.990438 -0.097549 -0.097551 0.000000 0.500000 +-0.980785 -0.000000 -0.195090 -0.990438 -0.097549 -0.097551 0.000000 0.437500 +-0.923879 -0.000000 0.382683 -0.878612 0.086536 0.469630 1.000000 0.625000 +-0.831469 -0.000000 0.555570 -0.878612 0.086536 0.469630 1.000000 0.687500 +-0.815493 0.162211 0.555570 -0.878612 0.086536 0.469630 0.968750 0.687500 +-0.906127 0.180240 0.382683 -0.878612 0.086536 0.469630 0.968750 0.625000 +-0.382683 -0.000000 -0.923880 -0.470890 0.046379 -0.880972 1.000000 0.125000 +-0.555570 -0.000000 -0.831470 -0.470890 0.046379 -0.880972 1.000000 0.187500 +-0.544895 0.108386 -0.831470 -0.470890 0.046379 -0.880972 0.968750 0.187500 +-0.375330 0.074658 -0.923880 -0.470890 0.046379 -0.880972 0.968750 0.125000 +-0.980785 -0.000000 0.195090 -0.952719 0.093835 0.289002 1.000000 0.562500 +-0.923879 -0.000000 0.382683 -0.952719 0.093835 0.289002 1.000000 0.625000 +-0.906127 0.180240 0.382683 -0.952719 0.093835 0.289002 0.968750 0.625000 +-0.961939 0.191342 0.195090 -0.952719 0.093835 0.289002 0.968750 0.562500 +-0.195090 -0.000000 -0.980785 -0.290166 0.028579 -0.956550 1.000000 0.062500 +-0.382683 -0.000000 -0.923880 -0.290166 0.028579 -0.956550 1.000000 0.125000 +-0.375330 0.074658 -0.923880 -0.290166 0.028579 -0.956550 0.968750 0.125000 +-0.191342 0.038060 -0.980785 -0.290166 0.028579 -0.956550 0.968750 0.062500 +-1.000000 -0.000000 0.000000 -0.990438 0.097550 0.097551 1.000000 0.500000 +-0.980785 -0.000000 0.195090 -0.990438 0.097550 0.097551 1.000000 0.562500 +-0.961939 0.191342 0.195090 -0.990438 0.097550 0.097551 0.968750 0.562500 +-0.980785 0.195090 0.000000 -0.990438 0.097550 0.097551 0.968750 0.500000 +-0.195090 -0.000000 0.980785 -0.098013 0.009653 0.995138 1.000000 0.937500 +-0.000000 -0.000001 1.000000 -0.098013 0.009653 0.995138 0.984375 1.000000 +-0.191342 0.038060 0.980785 -0.098013 0.009653 0.995138 0.968750 0.937500 +0.000000 -0.000000 -1.000000 -0.098012 0.009653 -0.995138 0.984375 0.000000 +-0.195090 -0.000000 -0.980785 -0.098012 0.009653 -0.995138 1.000000 0.062500 +-0.191342 0.038060 -0.980785 -0.098012 0.009653 -0.995138 0.968750 0.062500 +-0.980785 -0.000000 -0.195090 -0.990438 0.097550 -0.097551 1.000000 0.437500 +-1.000000 -0.000000 0.000000 -0.990438 0.097550 -0.097551 1.000000 0.500000 +-0.980785 0.195090 0.000000 -0.990438 0.097550 -0.097551 0.968750 0.500000 +-0.961939 0.191342 -0.195090 -0.990438 0.097550 -0.097551 0.968750 0.437500 +-0.382683 -0.000000 0.923880 -0.290166 0.028579 0.956549 1.000000 0.875000 +-0.195090 -0.000000 0.980785 -0.290166 0.028579 0.956549 1.000000 0.937500 +-0.191342 0.038060 0.980785 -0.290166 0.028579 0.956549 0.968750 0.937500 +-0.375330 0.074658 0.923880 -0.290166 0.028579 0.956549 0.968750 0.875000 +-0.923879 -0.000000 -0.382683 -0.952719 0.093835 -0.289002 1.000000 0.375000 +-0.980785 -0.000000 -0.195090 -0.952719 0.093835 -0.289002 1.000000 0.437500 +-0.961939 0.191342 -0.195090 -0.952719 0.093835 -0.289002 0.968750 0.437500 +-0.906127 0.180240 -0.382683 -0.952719 0.093835 -0.289002 0.968750 0.375000 +-0.555570 -0.000000 0.831470 -0.470889 0.046379 0.880972 1.000000 0.812500 +-0.382683 -0.000000 0.923880 -0.470889 0.046379 0.880972 1.000000 0.875000 +-0.375330 0.074658 0.923880 -0.470889 0.046379 0.880972 0.968750 0.875000 +-0.544895 0.108386 0.831470 -0.470889 0.046379 0.880972 0.968750 0.812500 +-0.831469 -0.000000 -0.555570 -0.878612 0.086536 -0.469629 1.000000 0.312500 +-0.923879 -0.000000 -0.382683 -0.878612 0.086536 -0.469629 1.000000 0.375000 +-0.906127 0.180240 -0.382683 -0.878612 0.086536 -0.469629 0.968750 0.375000 +-0.815493 0.162211 -0.555570 -0.878612 0.086536 -0.469629 0.968750 0.312500 +-0.707107 -0.000000 0.707107 -0.633159 0.062361 0.771506 1.000000 0.750000 +-0.555570 -0.000000 0.831470 -0.633159 0.062361 0.771506 1.000000 0.812500 +-0.544895 0.108386 0.831470 -0.633159 0.062361 0.771506 0.968750 0.812500 +-0.693520 0.137949 0.707107 -0.633159 0.062361 0.771506 0.968750 0.750000 +-0.707107 -0.000000 -0.707107 -0.770781 0.075916 -0.632562 1.000000 0.250000 +-0.831469 -0.000000 -0.555570 -0.770781 0.075916 -0.632562 1.000000 0.312500 +-0.815493 0.162211 -0.555570 -0.770781 0.075916 -0.632562 0.968750 0.312500 +-0.693520 0.137949 -0.707107 -0.770781 0.075916 -0.632562 0.968750 0.250000 +-0.831469 -0.000000 0.555570 -0.770781 0.075916 0.632562 1.000000 0.687500 +-0.707107 -0.000000 0.707107 -0.770781 0.075916 0.632562 1.000000 0.750000 +-0.693520 0.137949 0.707107 -0.770781 0.075916 0.632562 0.968750 0.750000 +-0.815493 0.162211 0.555570 -0.770781 0.075916 0.632562 0.968750 0.687500 +-0.555570 -0.000000 -0.831470 -0.633158 0.062361 -0.771506 1.000000 0.187500 +-0.707107 -0.000000 -0.707107 -0.633158 0.062361 -0.771506 1.000000 0.250000 +-0.693520 0.137949 -0.707107 -0.633158 0.062361 -0.771506 0.968750 0.250000 +-0.544895 0.108386 -0.831470 -0.633158 0.062361 -0.771506 0.968750 0.187500 +-0.906127 0.180240 -0.382683 -0.916106 0.277898 -0.289002 0.968750 0.375000 +-0.961939 0.191342 -0.195090 -0.916106 0.277898 -0.289002 0.968750 0.437500 +-0.906127 0.375330 -0.195090 -0.916106 0.277898 -0.289002 0.937500 0.437500 +-0.853553 0.353553 -0.382683 -0.916106 0.277898 -0.289002 0.937500 0.375000 +-0.544895 0.108386 0.831470 -0.452793 0.137354 0.880972 0.968750 0.812500 +-0.375330 0.074658 0.923880 -0.452793 0.137354 0.880972 0.968750 0.875000 +-0.353553 0.146446 0.923880 -0.452793 0.137354 0.880972 0.937500 0.875000 +-0.513280 0.212607 0.831470 -0.452793 0.137354 0.880972 0.937500 0.812500 +-0.815493 0.162211 -0.555570 -0.844848 0.256282 -0.469630 0.968750 0.312500 +-0.906127 0.180240 -0.382683 -0.844848 0.256282 -0.469630 0.968750 0.375000 +-0.853553 0.353553 -0.382683 -0.844848 0.256282 -0.469630 0.937500 0.375000 +-0.768177 0.318189 -0.555570 -0.844848 0.256282 -0.469630 0.937500 0.312500 +-0.693520 0.137949 0.707107 -0.608827 0.184686 0.771506 0.968750 0.750000 +-0.544895 0.108386 0.831470 -0.608827 0.184686 0.771506 0.968750 0.812500 +-0.513280 0.212607 0.831470 -0.608827 0.184686 0.771506 0.937500 0.812500 +-0.653281 0.270598 0.707107 -0.608827 0.184686 0.771506 0.937500 0.750000 +-0.693520 0.137949 -0.707107 -0.741160 0.224829 -0.632561 0.968750 0.250000 +-0.815493 0.162211 -0.555570 -0.741160 0.224829 -0.632561 0.968750 0.312500 +-0.768177 0.318189 -0.555570 -0.741160 0.224829 -0.632561 0.937500 0.312500 +-0.653281 0.270598 -0.707107 -0.741160 0.224829 -0.632561 0.937500 0.250000 +-0.815493 0.162211 0.555570 -0.741160 0.224829 0.632561 0.968750 0.687500 +-0.693520 0.137949 0.707107 -0.741160 0.224829 0.632561 0.968750 0.750000 +-0.653281 0.270598 0.707107 -0.741160 0.224829 0.632561 0.937500 0.750000 +-0.768177 0.318189 0.555570 -0.741160 0.224829 0.632561 0.937500 0.687500 +-0.544895 0.108386 -0.831470 -0.608826 0.184686 -0.771506 0.968750 0.187500 +-0.693520 0.137949 -0.707107 -0.608826 0.184686 -0.771506 0.968750 0.250000 +-0.653281 0.270598 -0.707107 -0.608826 0.184686 -0.771506 0.937500 0.250000 +-0.513280 0.212607 -0.831470 -0.608826 0.184686 -0.771506 0.937500 0.187500 +-0.906127 0.180240 0.382683 -0.844848 0.256282 0.469630 0.968750 0.625000 +-0.815493 0.162211 0.555570 -0.844848 0.256282 0.469630 0.968750 0.687500 +-0.768177 0.318189 0.555570 -0.844848 0.256282 0.469630 0.937500 0.687500 +-0.853553 0.353553 0.382683 -0.844848 0.256282 0.469630 0.937500 0.625000 +-0.375330 0.074658 -0.923880 -0.452794 0.137354 -0.880972 0.968750 0.125000 +-0.544895 0.108386 -0.831470 -0.452794 0.137354 -0.880972 0.968750 0.187500 +-0.513280 0.212607 -0.831470 -0.452794 0.137354 -0.880972 0.937500 0.187500 +-0.353553 0.146446 -0.923880 -0.452794 0.137354 -0.880972 0.937500 0.125000 +-0.961939 0.191342 0.195090 -0.916106 0.277898 0.289002 0.968750 0.562500 +-0.906127 0.180240 0.382683 -0.916106 0.277898 0.289002 0.968750 0.625000 +-0.853553 0.353553 0.382683 -0.916106 0.277898 0.289002 0.937500 0.625000 +-0.906127 0.375330 0.195090 -0.916106 0.277898 0.289002 0.937500 0.562500 +-0.191342 0.038060 -0.980785 -0.279015 0.084638 -0.956550 0.968750 0.062500 +-0.375330 0.074658 -0.923880 -0.279015 0.084638 -0.956550 0.968750 0.125000 +-0.353553 0.146446 -0.923880 -0.279015 0.084638 -0.956550 0.937500 0.125000 +-0.180240 0.074657 -0.980785 -0.279015 0.084638 -0.956550 0.937500 0.062500 +-0.980785 0.195090 0.000000 -0.952376 0.288901 0.097551 0.968750 0.500000 +-0.961939 0.191342 0.195090 -0.952376 0.288901 0.097551 0.968750 0.562500 +-0.906127 0.375330 0.195090 -0.952376 0.288901 0.097551 0.937500 0.562500 +-0.923879 0.382683 0.000000 -0.952376 0.288901 0.097551 0.937500 0.500000 +-0.191342 0.038060 0.980785 -0.094246 0.028589 0.995138 0.968750 0.937500 +-0.000000 -0.000001 1.000000 -0.094246 0.028589 0.995138 0.953125 1.000000 +-0.180240 0.074658 0.980785 -0.094246 0.028589 0.995138 0.937500 0.937500 +0.000000 -0.000000 -1.000000 -0.094246 0.028589 -0.995138 0.953125 0.000000 +-0.191342 0.038060 -0.980785 -0.094246 0.028589 -0.995138 0.968750 0.062500 +-0.180240 0.074657 -0.980785 -0.094246 0.028589 -0.995138 0.937500 0.062500 +-0.961939 0.191342 -0.195090 -0.952376 0.288901 -0.097551 0.968750 0.437500 +-0.980785 0.195090 0.000000 -0.952376 0.288901 -0.097551 0.968750 0.500000 +-0.923879 0.382683 0.000000 -0.952376 0.288901 -0.097551 0.937500 0.500000 +-0.906127 0.375330 -0.195090 -0.952376 0.288901 -0.097551 0.937500 0.437500 +-0.375330 0.074658 0.923880 -0.279015 0.084638 0.956549 0.968750 0.875000 +-0.191342 0.038060 0.980785 -0.279015 0.084638 0.956549 0.968750 0.937500 +-0.180240 0.074658 0.980785 -0.279015 0.084638 0.956549 0.937500 0.937500 +-0.353553 0.146446 0.923880 -0.279015 0.084638 0.956549 0.937500 0.875000 +-0.353553 0.146446 -0.923880 -0.417297 0.223050 -0.880972 0.937500 0.125000 +-0.513280 0.212607 -0.831470 -0.417297 0.223050 -0.880972 0.937500 0.187500 +-0.461940 0.308658 -0.831470 -0.417297 0.223050 -0.880972 0.906250 0.187500 +-0.318189 0.212607 -0.923880 -0.417297 0.223050 -0.880972 0.906250 0.125000 +-0.906127 0.375330 0.195090 -0.844288 0.451282 0.289002 0.937500 0.562500 +-0.853553 0.353553 0.382683 -0.844288 0.451282 0.289002 0.937500 0.625000 +-0.768178 0.513280 0.382683 -0.844288 0.451282 0.289002 0.906250 0.625000 +-0.815493 0.544895 0.195090 -0.844288 0.451282 0.289002 0.906250 0.562500 +-0.180240 0.074657 -0.980785 -0.257142 0.137445 -0.956550 0.937500 0.062500 +-0.353553 0.146446 -0.923880 -0.257142 0.137445 -0.956550 0.937500 0.125000 +-0.318189 0.212607 -0.923880 -0.257142 0.137445 -0.956550 0.906250 0.125000 +-0.162212 0.108386 -0.980785 -0.257142 0.137445 -0.956550 0.906250 0.062500 +-0.923879 0.382683 0.000000 -0.877715 0.469149 0.097551 0.937500 0.500000 +-0.906127 0.375330 0.195090 -0.877715 0.469149 0.097551 0.937500 0.562500 +-0.815493 0.544895 0.195090 -0.877715 0.469149 0.097551 0.906250 0.562500 +-0.831469 0.555570 0.000000 -0.877715 0.469149 0.097551 0.906250 0.500000 +-0.180240 0.074658 0.980785 -0.086858 0.046426 0.995138 0.937500 0.937500 +-0.000000 -0.000001 1.000000 -0.086858 0.046426 0.995138 0.921875 1.000000 +-0.162212 0.108386 0.980785 -0.086858 0.046426 0.995138 0.906250 0.937500 +0.000000 -0.000000 -1.000000 -0.086858 0.046426 -0.995138 0.921875 0.000000 +-0.180240 0.074657 -0.980785 -0.086858 0.046426 -0.995138 0.937500 0.062500 +-0.162212 0.108386 -0.980785 -0.086858 0.046426 -0.995138 0.906250 0.062500 +-0.906127 0.375330 -0.195090 -0.877715 0.469149 -0.097551 0.937500 0.437500 +-0.923879 0.382683 0.000000 -0.877715 0.469149 -0.097551 0.937500 0.500000 +-0.831469 0.555570 0.000000 -0.877715 0.469149 -0.097551 0.906250 0.500000 +-0.815493 0.544895 -0.195090 -0.877715 0.469149 -0.097551 0.906250 0.437500 +-0.353553 0.146446 0.923880 -0.257142 0.137445 0.956549 0.937500 0.875000 +-0.180240 0.074658 0.980785 -0.257142 0.137445 0.956549 0.937500 0.937500 +-0.162212 0.108386 0.980785 -0.257142 0.137445 0.956549 0.906250 0.937500 +-0.318190 0.212607 0.923880 -0.257142 0.137445 0.956549 0.906250 0.875000 +-0.853553 0.353553 -0.382683 -0.844288 0.451282 -0.289002 0.937500 0.375000 +-0.906127 0.375330 -0.195090 -0.844288 0.451282 -0.289002 0.937500 0.437500 +-0.815493 0.544895 -0.195090 -0.844288 0.451282 -0.289002 0.906250 0.437500 +-0.768178 0.513280 -0.382683 -0.844288 0.451282 -0.289002 0.906250 0.375000 +-0.513280 0.212607 0.831470 -0.417297 0.223050 0.880972 0.937500 0.812500 +-0.353553 0.146446 0.923880 -0.417297 0.223050 0.880972 0.937500 0.875000 +-0.318190 0.212607 0.923880 -0.417297 0.223050 0.880972 0.906250 0.875000 +-0.461940 0.308658 0.831470 -0.417297 0.223050 0.880972 0.906250 0.812500 +-0.768177 0.318189 -0.555570 -0.778616 0.416179 -0.469629 0.937500 0.312500 +-0.853553 0.353553 -0.382683 -0.778616 0.416179 -0.469629 0.937500 0.375000 +-0.768178 0.513280 -0.382683 -0.778616 0.416179 -0.469629 0.906250 0.375000 +-0.691341 0.461939 -0.555570 -0.778616 0.416179 -0.469629 0.906250 0.312500 +-0.653281 0.270598 0.707107 -0.561098 0.299913 0.771506 0.937500 0.750000 +-0.513280 0.212607 0.831470 -0.561098 0.299913 0.771506 0.937500 0.812500 +-0.461940 0.308658 0.831470 -0.561098 0.299913 0.771506 0.906250 0.812500 +-0.587938 0.392847 0.707107 -0.561098 0.299913 0.771506 0.906250 0.750000 +-0.653281 0.270598 -0.707107 -0.683057 0.365102 -0.632561 0.937500 0.250000 +-0.768177 0.318189 -0.555570 -0.683057 0.365102 -0.632561 0.937500 0.312500 +-0.691341 0.461939 -0.555570 -0.683057 0.365102 -0.632561 0.906250 0.312500 +-0.587938 0.392847 -0.707107 -0.683057 0.365102 -0.632561 0.906250 0.250000 +-0.768177 0.318189 0.555570 -0.683057 0.365102 0.632561 0.937500 0.687500 +-0.653281 0.270598 0.707107 -0.683057 0.365102 0.632561 0.937500 0.750000 +-0.587938 0.392847 0.707107 -0.683057 0.365102 0.632561 0.906250 0.750000 +-0.691341 0.461939 0.555570 -0.683057 0.365102 0.632561 0.906250 0.687500 +-0.513280 0.212607 -0.831470 -0.561098 0.299913 -0.771506 0.937500 0.187500 +-0.653281 0.270598 -0.707107 -0.561098 0.299913 -0.771506 0.937500 0.250000 +-0.587938 0.392847 -0.707107 -0.561098 0.299913 -0.771506 0.906250 0.250000 +-0.461940 0.308658 -0.831470 -0.561098 0.299913 -0.771506 0.906250 0.187500 +-0.853553 0.353553 0.382683 -0.778616 0.416179 0.469630 0.937500 0.625000 +-0.768177 0.318189 0.555570 -0.778616 0.416179 0.469630 0.937500 0.687500 +-0.691341 0.461939 0.555570 -0.778616 0.416179 0.469630 0.906250 0.687500 +-0.768178 0.513280 0.382683 -0.778616 0.416179 0.469630 0.906250 0.625000 +-0.691341 0.461939 -0.555570 -0.682463 0.560083 -0.469629 0.906250 0.312500 +-0.768178 0.513280 -0.382683 -0.682463 0.560083 -0.469629 0.906250 0.375000 +-0.653281 0.653281 -0.382683 -0.682463 0.560083 -0.469629 0.875000 0.375000 +-0.587937 0.587937 -0.555570 -0.682463 0.560083 -0.469629 0.875000 0.312500 +-0.587938 0.392847 0.707107 -0.491806 0.403615 0.771506 0.906250 0.750000 +-0.461940 0.308658 0.831470 -0.491806 0.403615 0.771506 0.906250 0.812500 +-0.392847 0.392847 0.831470 -0.491806 0.403615 0.771506 0.875000 0.812500 +-0.500000 0.500000 0.707107 -0.491806 0.403615 0.771506 0.875000 0.750000 +-0.587938 0.392847 -0.707107 -0.598704 0.491344 -0.632561 0.906250 0.250000 +-0.691341 0.461939 -0.555570 -0.598704 0.491344 -0.632561 0.906250 0.312500 +-0.587937 0.587937 -0.555570 -0.598704 0.491344 -0.632561 0.875000 0.312500 +-0.500000 0.500000 -0.707107 -0.598704 0.491344 -0.632561 0.875000 0.250000 +-0.691341 0.461939 0.555570 -0.598704 0.491344 0.632561 0.906250 0.687500 +-0.587938 0.392847 0.707107 -0.598704 0.491344 0.632561 0.906250 0.750000 +-0.500000 0.500000 0.707107 -0.598704 0.491344 0.632561 0.875000 0.750000 +-0.587937 0.587937 0.555570 -0.598704 0.491344 0.632561 0.875000 0.687500 +-0.461940 0.308658 -0.831470 -0.491806 0.403615 -0.771506 0.906250 0.187500 +-0.587938 0.392847 -0.707107 -0.491806 0.403615 -0.771506 0.906250 0.250000 +-0.500000 0.500000 -0.707107 -0.491806 0.403615 -0.771506 0.875000 0.250000 +-0.392847 0.392847 -0.831470 -0.491806 0.403615 -0.771506 0.875000 0.187500 +-0.768178 0.513280 0.382683 -0.682463 0.560083 0.469630 0.906250 0.625000 +-0.691341 0.461939 0.555570 -0.682463 0.560083 0.469630 0.906250 0.687500 +-0.587937 0.587937 0.555570 -0.682463 0.560083 0.469630 0.875000 0.687500 +-0.653281 0.653281 0.382683 -0.682463 0.560083 0.469630 0.875000 0.625000 +-0.318189 0.212607 -0.923880 -0.365764 0.300175 -0.880972 0.906250 0.125000 +-0.461940 0.308658 -0.831470 -0.365764 0.300175 -0.880972 0.906250 0.187500 +-0.392847 0.392847 -0.831470 -0.365764 0.300175 -0.880972 0.875000 0.187500 +-0.270598 0.270598 -0.923880 -0.365764 0.300175 -0.880972 0.875000 0.125000 +-0.815493 0.544895 0.195090 -0.740025 0.607323 0.289002 0.906250 0.562500 +-0.768178 0.513280 0.382683 -0.740025 0.607323 0.289002 0.906250 0.625000 +-0.653281 0.653281 0.382683 -0.740025 0.607323 0.289002 0.875000 0.625000 +-0.693519 0.693519 0.195090 -0.740025 0.607323 0.289002 0.875000 0.562500 +-0.162212 0.108386 -0.980785 -0.225387 0.184970 -0.956550 0.906250 0.062500 +-0.318189 0.212607 -0.923880 -0.225387 0.184970 -0.956550 0.906250 0.125000 +-0.270598 0.270598 -0.923880 -0.225387 0.184970 -0.956550 0.875000 0.125000 +-0.137950 0.137949 -0.980785 -0.225387 0.184970 -0.956550 0.875000 0.062500 +-0.831469 0.555570 0.000000 -0.769323 0.631368 0.097551 0.906250 0.500000 +-0.815493 0.544895 0.195090 -0.769323 0.631368 0.097551 0.906250 0.562500 +-0.693519 0.693519 0.195090 -0.769323 0.631368 0.097551 0.875000 0.562500 +-0.707106 0.707106 0.000000 -0.769323 0.631368 0.097551 0.875000 0.500000 +-0.162212 0.108386 0.980785 -0.076131 0.062479 0.995138 0.906250 0.937500 +-0.000000 -0.000001 1.000000 -0.076131 0.062479 0.995138 0.890625 1.000000 +-0.137950 0.137949 0.980785 -0.076131 0.062479 0.995138 0.875000 0.937500 +0.000000 -0.000000 -1.000000 -0.076131 0.062479 -0.995138 0.890625 0.000000 +-0.162212 0.108386 -0.980785 -0.076131 0.062479 -0.995138 0.906250 0.062500 +-0.137950 0.137949 -0.980785 -0.076131 0.062479 -0.995138 0.875000 0.062500 +-0.815493 0.544895 -0.195090 -0.769323 0.631368 -0.097551 0.906250 0.437500 +-0.831469 0.555570 0.000000 -0.769323 0.631368 -0.097551 0.906250 0.500000 +-0.707106 0.707106 0.000000 -0.769323 0.631368 -0.097551 0.875000 0.500000 +-0.693519 0.693519 -0.195090 -0.769323 0.631368 -0.097551 0.875000 0.437500 +-0.318190 0.212607 0.923880 -0.225387 0.184970 0.956549 0.906250 0.875000 +-0.162212 0.108386 0.980785 -0.225387 0.184970 0.956549 0.906250 0.937500 +-0.137950 0.137949 0.980785 -0.225387 0.184970 0.956549 0.875000 0.937500 +-0.270598 0.270598 0.923880 -0.225387 0.184970 0.956549 0.875000 0.875000 +-0.768178 0.513280 -0.382683 -0.740025 0.607323 -0.289002 0.906250 0.375000 +-0.815493 0.544895 -0.195090 -0.740025 0.607323 -0.289002 0.906250 0.437500 +-0.693519 0.693519 -0.195090 -0.740025 0.607323 -0.289002 0.875000 0.437500 +-0.653281 0.653281 -0.382683 -0.740025 0.607323 -0.289002 0.875000 0.375000 +-0.461940 0.308658 0.831470 -0.365764 0.300175 0.880972 0.906250 0.812500 +-0.318190 0.212607 0.923880 -0.365764 0.300175 0.880972 0.906250 0.875000 +-0.270598 0.270598 0.923880 -0.365764 0.300175 0.880972 0.875000 0.875000 +-0.392847 0.392847 0.831470 -0.365764 0.300175 0.880972 0.875000 0.812500 +-0.137950 0.137949 -0.980785 -0.184970 0.225387 -0.956550 0.875000 0.062500 +-0.270598 0.270598 -0.923880 -0.184970 0.225387 -0.956550 0.875000 0.125000 +-0.212607 0.318189 -0.923880 -0.184970 0.225387 -0.956550 0.843750 0.125000 +-0.108386 0.162211 -0.980785 -0.184970 0.225387 -0.956550 0.843750 0.062500 +-0.707106 0.707106 0.000000 -0.631367 0.769324 0.097551 0.875000 0.500000 +-0.693519 0.693519 0.195090 -0.631367 0.769324 0.097551 0.875000 0.562500 +-0.544895 0.815492 0.195090 -0.631367 0.769324 0.097551 0.843750 0.562500 +-0.555570 0.831469 0.000000 -0.631367 0.769324 0.097551 0.843750 0.500000 +-0.137950 0.137949 0.980785 -0.062479 0.076131 0.995138 0.875000 0.937500 +-0.000000 -0.000001 1.000000 -0.062479 0.076131 0.995138 0.859375 1.000000 +-0.108386 0.162211 0.980785 -0.062479 0.076131 0.995138 0.843750 0.937500 +0.000000 -0.000000 -1.000000 -0.062479 0.076131 -0.995138 0.859375 0.000000 +-0.137950 0.137949 -0.980785 -0.062479 0.076131 -0.995138 0.875000 0.062500 +-0.108386 0.162211 -0.980785 -0.062479 0.076131 -0.995138 0.843750 0.062500 +-0.693519 0.693519 -0.195090 -0.631367 0.769324 -0.097551 0.875000 0.437500 +-0.707106 0.707106 0.000000 -0.631367 0.769324 -0.097551 0.875000 0.500000 +-0.555570 0.831469 0.000000 -0.631367 0.769324 -0.097551 0.843750 0.500000 +-0.544895 0.815492 -0.195090 -0.631367 0.769324 -0.097551 0.843750 0.437500 +-0.270598 0.270598 0.923880 -0.184970 0.225387 0.956549 0.875000 0.875000 +-0.137950 0.137949 0.980785 -0.184970 0.225387 0.956549 0.875000 0.937500 +-0.108386 0.162211 0.980785 -0.184970 0.225387 0.956549 0.843750 0.937500 +-0.212607 0.318189 0.923880 -0.184970 0.225387 0.956549 0.843750 0.875000 +-0.653281 0.653281 -0.382683 -0.607323 0.740025 -0.289002 0.875000 0.375000 +-0.693519 0.693519 -0.195090 -0.607323 0.740025 -0.289002 0.875000 0.437500 +-0.544895 0.815492 -0.195090 -0.607323 0.740025 -0.289002 0.843750 0.437500 +-0.513280 0.768177 -0.382683 -0.607323 0.740025 -0.289002 0.843750 0.375000 +-0.392847 0.392847 0.831470 -0.300174 0.365764 0.880972 0.875000 0.812500 +-0.270598 0.270598 0.923880 -0.300174 0.365764 0.880972 0.875000 0.875000 +-0.212607 0.318189 0.923880 -0.300174 0.365764 0.880972 0.843750 0.875000 +-0.308658 0.461939 0.831470 -0.300174 0.365764 0.880972 0.843750 0.812500 +-0.587937 0.587937 -0.555570 -0.560082 0.682463 -0.469629 0.875000 0.312500 +-0.653281 0.653281 -0.382683 -0.560082 0.682463 -0.469629 0.875000 0.375000 +-0.513280 0.768177 -0.382683 -0.560082 0.682463 -0.469629 0.843750 0.375000 +-0.461939 0.691341 -0.555570 -0.560082 0.682463 -0.469629 0.843750 0.312500 +-0.500000 0.500000 0.707107 -0.403615 0.491806 0.771506 0.875000 0.750000 +-0.392847 0.392847 0.831470 -0.403615 0.491806 0.771506 0.875000 0.812500 +-0.308658 0.461939 0.831470 -0.403615 0.491806 0.771506 0.843750 0.812500 +-0.392847 0.587937 0.707107 -0.403615 0.491806 0.771506 0.843750 0.750000 +-0.500000 0.500000 -0.707107 -0.491344 0.598705 -0.632561 0.875000 0.250000 +-0.587937 0.587937 -0.555570 -0.491344 0.598705 -0.632561 0.875000 0.312500 +-0.461939 0.691341 -0.555570 -0.491344 0.598705 -0.632561 0.843750 0.312500 +-0.392847 0.587937 -0.707107 -0.491344 0.598705 -0.632561 0.843750 0.250000 +-0.587937 0.587937 0.555570 -0.491344 0.598705 0.632561 0.875000 0.687500 +-0.500000 0.500000 0.707107 -0.491344 0.598705 0.632561 0.875000 0.750000 +-0.392847 0.587937 0.707107 -0.491344 0.598705 0.632561 0.843750 0.750000 +-0.461939 0.691341 0.555570 -0.491344 0.598705 0.632561 0.843750 0.687500 +-0.392847 0.392847 -0.831470 -0.403615 0.491806 -0.771506 0.875000 0.187500 +-0.500000 0.500000 -0.707107 -0.403615 0.491806 -0.771506 0.875000 0.250000 +-0.392847 0.587937 -0.707107 -0.403615 0.491806 -0.771506 0.843750 0.250000 +-0.308658 0.461939 -0.831470 -0.403615 0.491806 -0.771506 0.843750 0.187500 +-0.653281 0.653281 0.382683 -0.560082 0.682463 0.469630 0.875000 0.625000 +-0.587937 0.587937 0.555570 -0.560082 0.682463 0.469630 0.875000 0.687500 +-0.461939 0.691341 0.555570 -0.560082 0.682463 0.469630 0.843750 0.687500 +-0.513280 0.768177 0.382683 -0.560082 0.682463 0.469630 0.843750 0.625000 +-0.270598 0.270598 -0.923880 -0.300175 0.365764 -0.880972 0.875000 0.125000 +-0.392847 0.392847 -0.831470 -0.300175 0.365764 -0.880972 0.875000 0.187500 +-0.308658 0.461939 -0.831470 -0.300175 0.365764 -0.880972 0.843750 0.187500 +-0.212607 0.318189 -0.923880 -0.300175 0.365764 -0.880972 0.843750 0.125000 +-0.693519 0.693519 0.195090 -0.607323 0.740025 0.289002 0.875000 0.562500 +-0.653281 0.653281 0.382683 -0.607323 0.740025 0.289002 0.875000 0.625000 +-0.513280 0.768177 0.382683 -0.607323 0.740025 0.289002 0.843750 0.625000 +-0.544895 0.815492 0.195090 -0.607323 0.740025 0.289002 0.843750 0.562500 +-0.392847 0.587937 0.707107 -0.299913 0.561098 0.771506 0.843750 0.750000 +-0.308658 0.461939 0.831470 -0.299913 0.561098 0.771506 0.843750 0.812500 +-0.212607 0.513280 0.831470 -0.299913 0.561098 0.771506 0.812500 0.812500 +-0.270598 0.653281 0.707107 -0.299913 0.561098 0.771506 0.812500 0.750000 +-0.392847 0.587937 -0.707107 -0.365101 0.683057 -0.632561 0.843750 0.250000 +-0.461939 0.691341 -0.555570 -0.365101 0.683057 -0.632561 0.843750 0.312500 +-0.318189 0.768177 -0.555570 -0.365101 0.683057 -0.632561 0.812500 0.312500 +-0.270598 0.653281 -0.707107 -0.365101 0.683057 -0.632561 0.812500 0.250000 +-0.461939 0.691341 0.555570 -0.365101 0.683057 0.632561 0.843750 0.687500 +-0.392847 0.587937 0.707107 -0.365101 0.683057 0.632561 0.843750 0.750000 +-0.270598 0.653281 0.707107 -0.365101 0.683057 0.632561 0.812500 0.750000 +-0.318189 0.768177 0.555570 -0.365101 0.683057 0.632561 0.812500 0.687500 +-0.308658 0.461939 -0.831470 -0.299913 0.561098 -0.771506 0.843750 0.187500 +-0.392847 0.587937 -0.707107 -0.299913 0.561098 -0.771506 0.843750 0.250000 +-0.270598 0.653281 -0.707107 -0.299913 0.561098 -0.771506 0.812500 0.250000 +-0.212607 0.513279 -0.831470 -0.299913 0.561098 -0.771506 0.812500 0.187500 +-0.513280 0.768177 0.382683 -0.416179 0.778616 0.469630 0.843750 0.625000 +-0.461939 0.691341 0.555570 -0.416179 0.778616 0.469630 0.843750 0.687500 +-0.318189 0.768177 0.555570 -0.416179 0.778616 0.469630 0.812500 0.687500 +-0.353553 0.853553 0.382683 -0.416179 0.778616 0.469630 0.812500 0.625000 +-0.212607 0.318189 -0.923880 -0.223050 0.417297 -0.880972 0.843750 0.125000 +-0.308658 0.461939 -0.831470 -0.223050 0.417297 -0.880972 0.843750 0.187500 +-0.212607 0.513279 -0.831470 -0.223050 0.417297 -0.880972 0.812500 0.187500 +-0.146446 0.353553 -0.923880 -0.223050 0.417297 -0.880972 0.812500 0.125000 +-0.544895 0.815492 0.195090 -0.451281 0.844289 0.289002 0.843750 0.562500 +-0.513280 0.768177 0.382683 -0.451281 0.844289 0.289002 0.843750 0.625000 +-0.353553 0.853553 0.382683 -0.451281 0.844289 0.289002 0.812500 0.625000 +-0.375330 0.906127 0.195090 -0.451281 0.844289 0.289002 0.812500 0.562500 +-0.108386 0.162211 -0.980785 -0.137445 0.257142 -0.956549 0.843750 0.062500 +-0.212607 0.318189 -0.923880 -0.137445 0.257142 -0.956549 0.843750 0.125000 +-0.146446 0.353553 -0.923880 -0.137445 0.257142 -0.956549 0.812500 0.125000 +-0.074658 0.180240 -0.980785 -0.137445 0.257142 -0.956549 0.812500 0.062500 +-0.555570 0.831469 0.000000 -0.469148 0.877715 0.097551 0.843750 0.500000 +-0.544895 0.815492 0.195090 -0.469148 0.877715 0.097551 0.843750 0.562500 +-0.375330 0.906127 0.195090 -0.469148 0.877715 0.097551 0.812500 0.562500 +-0.382683 0.923879 0.000000 -0.469148 0.877715 0.097551 0.812500 0.500000 +-0.108386 0.162211 0.980785 -0.046426 0.086858 0.995138 0.843750 0.937500 +-0.000000 -0.000001 1.000000 -0.046426 0.086858 0.995138 0.828125 1.000000 +-0.074658 0.180240 0.980785 -0.046426 0.086858 0.995138 0.812500 0.937500 +0.000000 -0.000000 -1.000000 -0.046426 0.086858 -0.995138 0.828125 0.000000 +-0.108386 0.162211 -0.980785 -0.046426 0.086858 -0.995138 0.843750 0.062500 +-0.074658 0.180240 -0.980785 -0.046426 0.086858 -0.995138 0.812500 0.062500 +-0.544895 0.815492 -0.195090 -0.469148 0.877715 -0.097551 0.843750 0.437500 +-0.555570 0.831469 0.000000 -0.469148 0.877715 -0.097551 0.843750 0.500000 +-0.382683 0.923879 0.000000 -0.469148 0.877715 -0.097551 0.812500 0.500000 +-0.375330 0.906127 -0.195090 -0.469148 0.877715 -0.097551 0.812500 0.437500 +-0.212607 0.318189 0.923880 -0.137445 0.257142 0.956549 0.843750 0.875000 +-0.108386 0.162211 0.980785 -0.137445 0.257142 0.956549 0.843750 0.937500 +-0.074658 0.180240 0.980785 -0.137445 0.257142 0.956549 0.812500 0.937500 +-0.146447 0.353553 0.923880 -0.137445 0.257142 0.956549 0.812500 0.875000 +-0.513280 0.768177 -0.382683 -0.451281 0.844289 -0.289002 0.843750 0.375000 +-0.544895 0.815492 -0.195090 -0.451281 0.844289 -0.289002 0.843750 0.437500 +-0.375330 0.906127 -0.195090 -0.451281 0.844289 -0.289002 0.812500 0.437500 +-0.353553 0.853553 -0.382683 -0.451281 0.844289 -0.289002 0.812500 0.375000 +-0.308658 0.461939 0.831470 -0.223050 0.417297 0.880972 0.843750 0.812500 +-0.212607 0.318189 0.923880 -0.223050 0.417297 0.880972 0.843750 0.875000 +-0.146447 0.353553 0.923880 -0.223050 0.417297 0.880972 0.812500 0.875000 +-0.212607 0.513280 0.831470 -0.223050 0.417297 0.880972 0.812500 0.812500 +-0.461939 0.691341 -0.555570 -0.416179 0.778616 -0.469629 0.843750 0.312500 +-0.513280 0.768177 -0.382683 -0.416179 0.778616 -0.469629 0.843750 0.375000 +-0.353553 0.853553 -0.382683 -0.416179 0.778616 -0.469629 0.812500 0.375000 +-0.318189 0.768177 -0.555570 -0.416179 0.778616 -0.469629 0.812500 0.312500 +-0.382683 0.923879 0.000000 -0.288900 0.952376 0.097551 0.812500 0.500000 +-0.375330 0.906127 0.195090 -0.288900 0.952376 0.097551 0.812500 0.562500 +-0.191341 0.961939 0.195090 -0.288900 0.952376 0.097551 0.781250 0.562500 +-0.195090 0.980785 0.000000 -0.288900 0.952376 0.097551 0.781250 0.500000 +-0.074658 0.180240 0.980785 -0.028589 0.094246 0.995138 0.812500 0.937500 +-0.000000 -0.000001 1.000000 -0.028589 0.094246 0.995138 0.796875 1.000000 +-0.038060 0.191342 0.980785 -0.028589 0.094246 0.995138 0.781250 0.937500 +0.000000 -0.000000 -1.000000 -0.028589 0.094246 -0.995138 0.796875 0.000000 +-0.074658 0.180240 -0.980785 -0.028589 0.094246 -0.995138 0.812500 0.062500 +-0.038060 0.191341 -0.980785 -0.028589 0.094246 -0.995138 0.781250 0.062500 +-0.375330 0.906127 -0.195090 -0.288900 0.952376 -0.097551 0.812500 0.437500 +-0.382683 0.923879 0.000000 -0.288900 0.952376 -0.097551 0.812500 0.500000 +-0.195090 0.980785 0.000000 -0.288900 0.952376 -0.097551 0.781250 0.500000 +-0.191341 0.961939 -0.195090 -0.288900 0.952376 -0.097551 0.781250 0.437500 +-0.146447 0.353553 0.923880 -0.084638 0.279016 0.956549 0.812500 0.875000 +-0.074658 0.180240 0.980785 -0.084638 0.279016 0.956549 0.812500 0.937500 +-0.038060 0.191342 0.980785 -0.084638 0.279016 0.956549 0.781250 0.937500 +-0.074658 0.375330 0.923880 -0.084638 0.279016 0.956549 0.781250 0.875000 +-0.353553 0.853553 -0.382683 -0.277898 0.916106 -0.289002 0.812500 0.375000 +-0.375330 0.906127 -0.195090 -0.277898 0.916106 -0.289002 0.812500 0.437500 +-0.191341 0.961939 -0.195090 -0.277898 0.916106 -0.289002 0.781250 0.437500 +-0.180240 0.906127 -0.382683 -0.277898 0.916106 -0.289002 0.781250 0.375000 +-0.212607 0.513280 0.831470 -0.137353 0.452794 0.880972 0.812500 0.812500 +-0.146447 0.353553 0.923880 -0.137353 0.452794 0.880972 0.812500 0.875000 +-0.074658 0.375330 0.923880 -0.137353 0.452794 0.880972 0.781250 0.875000 +-0.108386 0.544895 0.831470 -0.137353 0.452794 0.880972 0.781250 0.812500 +-0.318189 0.768177 -0.555570 -0.256282 0.844848 -0.469629 0.812500 0.312500 +-0.353553 0.853553 -0.382683 -0.256282 0.844848 -0.469629 0.812500 0.375000 +-0.180240 0.906127 -0.382683 -0.256282 0.844848 -0.469629 0.781250 0.375000 +-0.162211 0.815492 -0.555570 -0.256282 0.844848 -0.469629 0.781250 0.312500 +-0.270598 0.653281 0.707107 -0.184685 0.608827 0.771506 0.812500 0.750000 +-0.212607 0.513280 0.831470 -0.184685 0.608827 0.771506 0.812500 0.812500 +-0.108386 0.544895 0.831470 -0.184685 0.608827 0.771506 0.781250 0.812500 +-0.137950 0.693520 0.707107 -0.184685 0.608827 0.771506 0.781250 0.750000 +-0.270598 0.653281 -0.707107 -0.224828 0.741160 -0.632561 0.812500 0.250000 +-0.318189 0.768177 -0.555570 -0.224828 0.741160 -0.632561 0.812500 0.312500 +-0.162211 0.815492 -0.555570 -0.224828 0.741160 -0.632561 0.781250 0.312500 +-0.137950 0.693520 -0.707107 -0.224828 0.741160 -0.632561 0.781250 0.250000 +-0.318189 0.768177 0.555570 -0.224828 0.741160 0.632561 0.812500 0.687500 +-0.270598 0.653281 0.707107 -0.224828 0.741160 0.632561 0.812500 0.750000 +-0.137950 0.693520 0.707107 -0.224828 0.741160 0.632561 0.781250 0.750000 +-0.162211 0.815492 0.555570 -0.224828 0.741160 0.632561 0.781250 0.687500 +-0.212607 0.513279 -0.831470 -0.184685 0.608826 -0.771506 0.812500 0.187500 +-0.270598 0.653281 -0.707107 -0.184685 0.608826 -0.771506 0.812500 0.250000 +-0.137950 0.693520 -0.707107 -0.184685 0.608826 -0.771506 0.781250 0.250000 +-0.108386 0.544895 -0.831470 -0.184685 0.608826 -0.771506 0.781250 0.187500 +-0.353553 0.853553 0.382683 -0.256282 0.844848 0.469630 0.812500 0.625000 +-0.318189 0.768177 0.555570 -0.256282 0.844848 0.469630 0.812500 0.687500 +-0.162211 0.815492 0.555570 -0.256282 0.844848 0.469630 0.781250 0.687500 +-0.180240 0.906127 0.382683 -0.256282 0.844848 0.469630 0.781250 0.625000 +-0.146446 0.353553 -0.923880 -0.137353 0.452794 -0.880972 0.812500 0.125000 +-0.212607 0.513279 -0.831470 -0.137353 0.452794 -0.880972 0.812500 0.187500 +-0.108386 0.544895 -0.831470 -0.137353 0.452794 -0.880972 0.781250 0.187500 +-0.074658 0.375330 -0.923880 -0.137353 0.452794 -0.880972 0.781250 0.125000 +-0.375330 0.906127 0.195090 -0.277898 0.916106 0.289002 0.812500 0.562500 +-0.353553 0.853553 0.382683 -0.277898 0.916106 0.289002 0.812500 0.625000 +-0.180240 0.906127 0.382683 -0.277898 0.916106 0.289002 0.781250 0.625000 +-0.191341 0.961939 0.195090 -0.277898 0.916106 0.289002 0.781250 0.562500 +-0.074658 0.180240 -0.980785 -0.084638 0.279015 -0.956549 0.812500 0.062500 +-0.146446 0.353553 -0.923880 -0.084638 0.279015 -0.956549 0.812500 0.125000 +-0.074658 0.375330 -0.923880 -0.084638 0.279015 -0.956549 0.781250 0.125000 +-0.038060 0.191341 -0.980785 -0.084638 0.279015 -0.956549 0.781250 0.062500 +-0.137950 0.693520 -0.707107 -0.075915 0.770781 -0.632561 0.781250 0.250000 +-0.162211 0.815492 -0.555570 -0.075915 0.770781 -0.632561 0.781250 0.312500 +0.000000 0.831469 -0.555570 -0.075915 0.770781 -0.632561 0.750000 0.312500 +0.000000 0.707106 -0.707107 -0.075915 0.770781 -0.632561 0.750000 0.250000 +-0.162211 0.815492 0.555570 -0.075918 0.770780 0.632562 0.781250 0.687500 +-0.137950 0.693520 0.707107 -0.075918 0.770780 0.632562 0.781250 0.750000 +0.000000 0.707107 0.707107 -0.075918 0.770780 0.632562 0.750000 0.750000 +0.000000 0.831470 0.555570 -0.075918 0.770780 0.632562 0.750000 0.687500 +-0.108386 0.544895 -0.831470 -0.062362 0.633159 -0.771506 0.781250 0.187500 +-0.137950 0.693520 -0.707107 -0.062362 0.633159 -0.771506 0.781250 0.250000 +0.000000 0.707106 -0.707107 -0.062362 0.633159 -0.771506 0.750000 0.250000 +0.000000 0.555570 -0.831470 -0.062362 0.633159 -0.771506 0.750000 0.187500 +-0.180240 0.906127 0.382683 -0.086539 0.878612 0.469629 0.781250 0.625000 +-0.162211 0.815492 0.555570 -0.086539 0.878612 0.469629 0.781250 0.687500 +0.000000 0.831470 0.555570 -0.086539 0.878612 0.469629 0.750000 0.687500 +0.000000 0.923880 0.382683 -0.086539 0.878612 0.469629 0.750000 0.625000 +-0.074658 0.375330 -0.923880 -0.046380 0.470889 -0.880972 0.781250 0.125000 +-0.108386 0.544895 -0.831470 -0.046380 0.470889 -0.880972 0.781250 0.187500 +0.000000 0.555570 -0.831470 -0.046380 0.470889 -0.880972 0.750000 0.187500 +0.000000 0.382683 -0.923880 -0.046380 0.470889 -0.880972 0.750000 0.125000 +-0.191341 0.961939 0.195090 -0.093838 0.952718 0.289003 0.781250 0.562500 +-0.180240 0.906127 0.382683 -0.093838 0.952718 0.289003 0.781250 0.625000 +0.000000 0.923880 0.382683 -0.093838 0.952718 0.289003 0.750000 0.625000 +0.000000 0.980785 0.195090 -0.093838 0.952718 0.289003 0.750000 0.562500 +-0.038060 0.191341 -0.980785 -0.028579 0.290166 -0.956550 0.781250 0.062500 +-0.074658 0.375330 -0.923880 -0.028579 0.290166 -0.956550 0.781250 0.125000 +0.000000 0.382683 -0.923880 -0.028579 0.290166 -0.956550 0.750000 0.125000 +0.000000 0.195090 -0.980785 -0.028579 0.290166 -0.956550 0.750000 0.062500 +-0.195090 0.980785 0.000000 -0.097554 0.990438 0.097550 0.781250 0.500000 +-0.191341 0.961939 0.195090 -0.097554 0.990438 0.097550 0.781250 0.562500 +0.000000 0.980785 0.195090 -0.097554 0.990438 0.097550 0.750000 0.562500 +0.000000 1.000000 0.000000 -0.097554 0.990438 0.097550 0.750000 0.500000 +-0.038060 0.191342 0.980785 -0.009654 0.098012 0.995138 0.781250 0.937500 +-0.000000 -0.000001 1.000000 -0.009654 0.098012 0.995138 0.765625 1.000000 +0.000000 0.195090 0.980785 -0.009654 0.098012 0.995138 0.750000 0.937500 +0.000000 -0.000000 -1.000000 -0.009653 0.098012 -0.995138 0.765625 0.000000 +-0.038060 0.191341 -0.980785 -0.009653 0.098012 -0.995138 0.781250 0.062500 +0.000000 0.195090 -0.980785 -0.009653 0.098012 -0.995138 0.750000 0.062500 +-0.191341 0.961939 -0.195090 -0.097554 0.990438 -0.097550 0.781250 0.437500 +-0.195090 0.980785 0.000000 -0.097554 0.990438 -0.097550 0.781250 0.500000 +0.000000 1.000000 0.000000 -0.097554 0.990438 -0.097550 0.750000 0.500000 +0.000000 0.980785 -0.195090 -0.097554 0.990438 -0.097550 0.750000 0.437500 +-0.074658 0.375330 0.923880 -0.028581 0.290166 0.956549 0.781250 0.875000 +-0.038060 0.191342 0.980785 -0.028581 0.290166 0.956549 0.781250 0.937500 +0.000000 0.195090 0.980785 -0.028581 0.290166 0.956549 0.750000 0.937500 +0.000000 0.382683 0.923880 -0.028581 0.290166 0.956549 0.750000 0.875000 +-0.180240 0.906127 -0.382683 -0.093837 0.952718 -0.289004 0.781250 0.375000 +-0.191341 0.961939 -0.195090 -0.093837 0.952718 -0.289004 0.781250 0.437500 +0.000000 0.980785 -0.195090 -0.093837 0.952718 -0.289004 0.750000 0.437500 +0.000000 0.923879 -0.382683 -0.093837 0.952718 -0.289004 0.750000 0.375000 +-0.108386 0.544895 0.831470 -0.046381 0.470889 0.880972 0.781250 0.812500 +-0.074658 0.375330 0.923880 -0.046381 0.470889 0.880972 0.781250 0.875000 +0.000000 0.382683 0.923880 -0.046381 0.470889 0.880972 0.750000 0.875000 +0.000000 0.555570 0.831470 -0.046381 0.470889 0.880972 0.750000 0.812500 +-0.162211 0.815492 -0.555570 -0.086535 0.878612 -0.469629 0.781250 0.312500 +-0.180240 0.906127 -0.382683 -0.086535 0.878612 -0.469629 0.781250 0.375000 +0.000000 0.923879 -0.382683 -0.086535 0.878612 -0.469629 0.750000 0.375000 +0.000000 0.831469 -0.555570 -0.086535 0.878612 -0.469629 0.750000 0.312500 +-0.137950 0.693520 0.707107 -0.062363 0.633158 0.771506 0.781250 0.750000 +-0.108386 0.544895 0.831470 -0.062363 0.633158 0.771506 0.781250 0.812500 +0.000000 0.555570 0.831470 -0.062363 0.633158 0.771506 0.750000 0.812500 +0.000000 0.707107 0.707107 -0.062363 0.633158 0.771506 0.750000 0.750000 +4 0 1 2 3 +4 4 5 6 7 +4 8 9 10 11 +4 12 13 14 15 +4 16 17 18 19 +4 20 21 22 23 +4 24 25 26 27 +4 28 29 30 31 +4 32 33 34 35 +3 36 37 38 +3 39 40 41 +4 42 43 44 45 +4 46 47 48 49 +4 50 51 52 53 +4 54 55 56 57 +4 58 59 60 61 +4 62 63 64 65 +4 66 67 68 69 +4 70 71 72 73 +4 74 75 76 77 +4 78 79 80 81 +4 82 83 84 85 +4 86 87 88 89 +4 90 91 92 93 +4 94 95 96 97 +4 98 99 100 101 +4 102 103 104 105 +3 106 107 108 +3 109 110 111 +4 112 113 114 115 +4 116 117 118 119 +4 120 121 122 123 +4 124 125 126 127 +4 128 129 130 131 +4 132 133 134 135 +3 136 137 138 +3 139 140 141 +4 142 143 144 145 +4 146 147 148 149 +4 150 151 152 153 +4 154 155 156 157 +4 158 159 160 161 +4 162 163 164 165 +4 166 167 168 169 +4 170 171 172 173 +4 174 175 176 177 +4 178 179 180 181 +4 182 183 184 185 +4 186 187 188 189 +4 190 191 192 193 +4 194 195 196 197 +4 198 199 200 201 +4 202 203 204 205 +4 206 207 208 209 +4 210 211 212 213 +4 214 215 216 217 +4 218 219 220 221 +4 222 223 224 225 +3 226 227 228 +3 229 230 231 +4 232 233 234 235 +4 236 237 238 239 +4 240 241 242 243 +4 244 245 246 247 +4 248 249 250 251 +4 252 253 254 255 +3 256 257 258 +3 259 260 261 +4 262 263 264 265 +4 266 267 268 269 +4 270 271 272 273 +4 274 275 276 277 +4 278 279 280 281 +4 282 283 284 285 +4 286 287 288 289 +4 290 291 292 293 +4 294 295 296 297 +4 298 299 300 301 +4 302 303 304 305 +4 306 307 308 309 +4 310 311 312 313 +4 314 315 316 317 +4 318 319 320 321 +4 322 323 324 325 +4 326 327 328 329 +4 330 331 332 333 +4 334 335 336 337 +4 338 339 340 341 +4 342 343 344 345 +3 346 347 348 +3 349 350 351 +4 352 353 354 355 +4 356 357 358 359 +4 360 361 362 363 +4 364 365 366 367 +4 368 369 370 371 +4 372 373 374 375 +3 376 377 378 +3 379 380 381 +4 382 383 384 385 +4 386 387 388 389 +4 390 391 392 393 +4 394 395 396 397 +4 398 399 400 401 +4 402 403 404 405 +4 406 407 408 409 +4 410 411 412 413 +4 414 415 416 417 +4 418 419 420 421 +4 422 423 424 425 +4 426 427 428 429 +4 430 431 432 433 +4 434 435 436 437 +4 438 439 440 441 +4 442 443 444 445 +4 446 447 448 449 +4 450 451 452 453 +4 454 455 456 457 +4 458 459 460 461 +4 462 463 464 465 +3 466 467 468 +3 469 470 471 +4 472 473 474 475 +4 476 477 478 479 +4 480 481 482 483 +4 484 485 486 487 +4 488 489 490 491 +4 492 493 494 495 +3 496 497 498 +4 499 500 501 502 +4 503 504 505 506 +4 507 508 509 510 +4 511 512 513 514 +4 515 516 517 518 +4 519 520 521 522 +4 523 524 525 526 +4 527 528 529 530 +4 531 532 533 534 +4 535 536 537 538 +4 539 540 541 542 +4 543 544 545 546 +4 547 548 549 550 +4 551 552 553 554 +3 555 556 557 +4 558 559 560 561 +4 562 563 564 565 +4 566 567 568 569 +4 570 571 572 573 +4 574 575 576 577 +4 578 579 580 581 +3 582 583 584 +3 585 586 587 +4 588 589 590 591 +4 592 593 594 595 +4 596 597 598 599 +4 600 601 602 603 +4 604 605 606 607 +4 608 609 610 611 +4 612 613 614 615 +4 616 617 618 619 +4 620 621 622 623 +4 624 625 626 627 +4 628 629 630 631 +4 632 633 634 635 +4 636 637 638 639 +4 640 641 642 643 +4 644 645 646 647 +4 648 649 650 651 +4 652 653 654 655 +4 656 657 658 659 +4 660 661 662 663 +4 664 665 666 667 +4 668 669 670 671 +3 672 673 674 +3 675 676 677 +4 678 679 680 681 +4 682 683 684 685 +4 686 687 688 689 +4 690 691 692 693 +4 694 695 696 697 +4 698 699 700 701 +3 702 703 704 +3 705 706 707 +4 708 709 710 711 +4 712 713 714 715 +4 716 717 718 719 +4 720 721 722 723 +4 724 725 726 727 +4 728 729 730 731 +4 732 733 734 735 +4 736 737 738 739 +4 740 741 742 743 +4 744 745 746 747 +4 748 749 750 751 +4 752 753 754 755 +4 756 757 758 759 +4 760 761 762 763 +4 764 765 766 767 +4 768 769 770 771 +4 772 773 774 775 +4 776 777 778 779 +4 780 781 782 783 +4 784 785 786 787 +4 788 789 790 791 +3 792 793 794 +3 795 796 797 +4 798 799 800 801 +4 802 803 804 805 +4 806 807 808 809 +4 810 811 812 813 +4 814 815 816 817 +4 818 819 820 821 +3 822 823 824 +3 825 826 827 +4 828 829 830 831 +4 832 833 834 835 +4 836 837 838 839 +4 840 841 842 843 +4 844 845 846 847 +4 848 849 850 851 +4 852 853 854 855 +4 856 857 858 859 +4 860 861 862 863 +4 864 865 866 867 +4 868 869 870 871 +4 872 873 874 875 +4 876 877 878 879 +4 880 881 882 883 +4 884 885 886 887 +4 888 889 890 891 +4 892 893 894 895 +4 896 897 898 899 +4 900 901 902 903 +4 904 905 906 907 +4 908 909 910 911 +3 912 913 914 +3 915 916 917 +4 918 919 920 921 +4 922 923 924 925 +4 926 927 928 929 +4 930 931 932 933 +4 934 935 936 937 +4 938 939 940 941 +3 942 943 944 +3 945 946 947 +4 948 949 950 951 +4 952 953 954 955 +4 956 957 958 959 +4 960 961 962 963 +4 964 965 966 967 +4 968 969 970 971 +4 972 973 974 975 +4 976 977 978 979 +4 980 981 982 983 +4 984 985 986 987 +4 988 989 990 991 +4 992 993 994 995 +4 996 997 998 999 +4 1000 1001 1002 1003 +4 1004 1005 1006 1007 +4 1008 1009 1010 1011 +4 1012 1013 1014 1015 +4 1016 1017 1018 1019 +4 1020 1021 1022 1023 +4 1024 1025 1026 1027 +4 1028 1029 1030 1031 +3 1032 1033 1034 +3 1035 1036 1037 +4 1038 1039 1040 1041 +4 1042 1043 1044 1045 +4 1046 1047 1048 1049 +4 1050 1051 1052 1053 +4 1054 1055 1056 1057 +4 1058 1059 1060 1061 +3 1062 1063 1064 +3 1065 1066 1067 +4 1068 1069 1070 1071 +4 1072 1073 1074 1075 +4 1076 1077 1078 1079 +4 1080 1081 1082 1083 +4 1084 1085 1086 1087 +4 1088 1089 1090 1091 +4 1092 1093 1094 1095 +4 1096 1097 1098 1099 +4 1100 1101 1102 1103 +4 1104 1105 1106 1107 +4 1108 1109 1110 1111 +4 1112 1113 1114 1115 +4 1116 1117 1118 1119 +4 1120 1121 1122 1123 +4 1124 1125 1126 1127 +4 1128 1129 1130 1131 +4 1132 1133 1134 1135 +4 1136 1137 1138 1139 +4 1140 1141 1142 1143 +4 1144 1145 1146 1147 +3 1148 1149 1150 +3 1151 1152 1153 +4 1154 1155 1156 1157 +4 1158 1159 1160 1161 +4 1162 1163 1164 1165 +4 1166 1167 1168 1169 +4 1170 1171 1172 1173 +4 1174 1175 1176 1177 +3 1178 1179 1180 +3 1181 1182 1183 +4 1184 1185 1186 1187 +4 1188 1189 1190 1191 +4 1192 1193 1194 1195 +4 1196 1197 1198 1199 +4 1200 1201 1202 1203 +4 1204 1205 1206 1207 +4 1208 1209 1210 1211 +4 1212 1213 1214 1215 +4 1216 1217 1218 1219 +4 1220 1221 1222 1223 +4 1224 1225 1226 1227 +4 1228 1229 1230 1231 +4 1232 1233 1234 1235 +4 1236 1237 1238 1239 +4 1240 1241 1242 1243 +4 1244 1245 1246 1247 +4 1248 1249 1250 1251 +4 1252 1253 1254 1255 +4 1256 1257 1258 1259 +4 1260 1261 1262 1263 +4 1264 1265 1266 1267 +3 1268 1269 1270 +3 1271 1272 1273 +4 1274 1275 1276 1277 +4 1278 1279 1280 1281 +4 1282 1283 1284 1285 +4 1286 1287 1288 1289 +4 1290 1291 1292 1293 +4 1294 1295 1296 1297 +4 1298 1299 1300 1301 +4 1302 1303 1304 1305 +4 1306 1307 1308 1309 +4 1310 1311 1312 1313 +4 1314 1315 1316 1317 +4 1318 1319 1320 1321 +4 1322 1323 1324 1325 +4 1326 1327 1328 1329 +4 1330 1331 1332 1333 +4 1334 1335 1336 1337 +4 1338 1339 1340 1341 +4 1342 1343 1344 1345 +4 1346 1347 1348 1349 +4 1350 1351 1352 1353 +4 1354 1355 1356 1357 +3 1358 1359 1360 +3 1361 1362 1363 +4 1364 1365 1366 1367 +4 1368 1369 1370 1371 +4 1372 1373 1374 1375 +4 1376 1377 1378 1379 +4 1380 1381 1382 1383 +4 1384 1385 1386 1387 +3 1388 1389 1390 +3 1391 1392 1393 +4 1394 1395 1396 1397 +4 1398 1399 1400 1401 +4 1402 1403 1404 1405 +4 1406 1407 1408 1409 +4 1410 1411 1412 1413 +4 1414 1415 1416 1417 +4 1418 1419 1420 1421 +4 1422 1423 1424 1425 +4 1426 1427 1428 1429 +4 1430 1431 1432 1433 +4 1434 1435 1436 1437 +4 1438 1439 1440 1441 +4 1442 1443 1444 1445 +4 1446 1447 1448 1449 +4 1450 1451 1452 1453 +4 1454 1455 1456 1457 +4 1458 1459 1460 1461 +4 1462 1463 1464 1465 +4 1466 1467 1468 1469 +4 1470 1471 1472 1473 +4 1474 1475 1476 1477 +3 1478 1479 1480 +3 1481 1482 1483 +4 1484 1485 1486 1487 +4 1488 1489 1490 1491 +4 1492 1493 1494 1495 +4 1496 1497 1498 1499 +4 1500 1501 1502 1503 +4 1504 1505 1506 1507 +3 1508 1509 1510 +3 1511 1512 1513 +4 1514 1515 1516 1517 +4 1518 1519 1520 1521 +4 1522 1523 1524 1525 +4 1526 1527 1528 1529 +4 1530 1531 1532 1533 +4 1534 1535 1536 1537 +4 1538 1539 1540 1541 +4 1542 1543 1544 1545 +4 1546 1547 1548 1549 +4 1550 1551 1552 1553 +4 1554 1555 1556 1557 +4 1558 1559 1560 1561 +4 1562 1563 1564 1565 +4 1566 1567 1568 1569 +4 1570 1571 1572 1573 +4 1574 1575 1576 1577 +4 1578 1579 1580 1581 +4 1582 1583 1584 1585 +4 1586 1587 1588 1589 +4 1590 1591 1592 1593 +4 1594 1595 1596 1597 +3 1598 1599 1600 +3 1601 1602 1603 +4 1604 1605 1606 1607 +4 1608 1609 1610 1611 +4 1612 1613 1614 1615 +4 1616 1617 1618 1619 +4 1620 1621 1622 1623 +4 1624 1625 1626 1627 +3 1628 1629 1630 +3 1631 1632 1633 +4 1634 1635 1636 1637 +4 1638 1639 1640 1641 +4 1642 1643 1644 1645 +4 1646 1647 1648 1649 +4 1650 1651 1652 1653 +4 1654 1655 1656 1657 +4 1658 1659 1660 1661 +4 1662 1663 1664 1665 +4 1666 1667 1668 1669 +4 1670 1671 1672 1673 +4 1674 1675 1676 1677 +4 1678 1679 1680 1681 +4 1682 1683 1684 1685 +4 1686 1687 1688 1689 +4 1690 1691 1692 1693 +4 1694 1695 1696 1697 +4 1698 1699 1700 1701 +4 1702 1703 1704 1705 +4 1706 1707 1708 1709 +4 1710 1711 1712 1713 +3 1714 1715 1716 +3 1717 1718 1719 +4 1720 1721 1722 1723 +4 1724 1725 1726 1727 +4 1728 1729 1730 1731 +4 1732 1733 1734 1735 +4 1736 1737 1738 1739 +4 1740 1741 1742 1743 +3 1744 1745 1746 +3 1747 1748 1749 +4 1750 1751 1752 1753 +4 1754 1755 1756 1757 +4 1758 1759 1760 1761 +4 1762 1763 1764 1765 +4 1766 1767 1768 1769 +4 1770 1771 1772 1773 +4 1774 1775 1776 1777 +4 1778 1779 1780 1781 +4 1782 1783 1784 1785 +4 1786 1787 1788 1789 +4 1790 1791 1792 1793 +4 1794 1795 1796 1797 +4 1798 1799 1800 1801 +4 1802 1803 1804 1805 +4 1806 1807 1808 1809 +4 1810 1811 1812 1813 +4 1814 1815 1816 1817 +4 1818 1819 1820 1821 +4 1822 1823 1824 1825 +4 1826 1827 1828 1829 +4 1830 1831 1832 1833 +3 1834 1835 1836 +3 1837 1838 1839 +4 1840 1841 1842 1843 +4 1844 1845 1846 1847 +4 1848 1849 1850 1851 +4 1852 1853 1854 1855 +4 1856 1857 1858 1859 +4 1860 1861 1862 1863 +3 1864 1865 1866 +3 1867 1868 1869 +4 1870 1871 1872 1873 +4 1874 1875 1876 1877 +4 1878 1879 1880 1881 +4 1882 1883 1884 1885 +4 1886 1887 1888 1889 +4 1890 1891 1892 1893 +4 1894 1895 1896 1897 +4 1898 1899 1900 1901 +4 1902 1903 1904 1905 +4 1906 1907 1908 1909 +4 1910 1911 1912 1913 +4 1914 1915 1916 1917 +4 1918 1919 1920 1921 +4 1922 1923 1924 1925 +4 1926 1927 1928 1929 +4 1930 1931 1932 1933 +4 1934 1935 1936 1937 +4 1938 1939 1940 1941 +4 1942 1943 1944 1945 +4 1946 1947 1948 1949 +4 1950 1951 1952 1953 +3 1954 1955 1956 +3 1957 1958 1959 +4 1960 1961 1962 1963 +4 1964 1965 1966 1967 +4 1968 1969 1970 1971 +4 1972 1973 1974 1975 +4 1976 1977 1978 1979 +4 1980 1981 1982 1983 diff --git a/example/modifers/assets/sphere.stl b/example/modifers/assets/sphere.stl new file mode 100644 index 0000000..abc0b82 Binary files /dev/null and b/example/modifers/assets/sphere.stl differ diff --git a/example/modifers/assets/sphere.x3d b/example/modifers/assets/sphere.x3d new file mode 100644 index 0000000..a3490ed --- /dev/null +++ b/example/modifers/assets/sphere.x3d @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/example/modifers/assets/sphere_ascii.stl b/example/modifers/assets/sphere_ascii.stl new file mode 100644 index 0000000..867232d --- /dev/null +++ b/example/modifers/assets/sphere_ascii.stl @@ -0,0 +1,6722 @@ +solid Exported from Blender-2.82 (sub 7) +facet normal 0.028579 0.290166 -0.956549 +outer loop +vertex 0.000000 0.195090 -0.980785 +vertex 0.000000 0.382683 -0.923880 +vertex 0.074658 0.375330 -0.923880 +endloop +endfacet +facet normal 0.028572 0.290166 -0.956550 +outer loop +vertex 0.000000 0.195090 -0.980785 +vertex 0.074658 0.375330 -0.923880 +vertex 0.038060 0.191341 -0.980785 +endloop +endfacet +facet normal 0.097550 0.990438 0.097550 +outer loop +vertex 0.000000 1.000000 0.000000 +vertex 0.000000 0.980785 0.195090 +vertex 0.191342 0.961940 0.195090 +endloop +endfacet +facet normal 0.097550 0.990438 0.097550 +outer loop +vertex 0.000000 1.000000 0.000000 +vertex 0.191342 0.961940 0.195090 +vertex 0.195090 0.980785 0.000000 +endloop +endfacet +facet normal 0.009654 0.098012 0.995138 +outer loop +vertex 0.000000 0.195090 0.980785 +vertex -0.000000 -0.000001 1.000000 +vertex 0.038060 0.191342 0.980785 +endloop +endfacet +facet normal 0.009652 0.098012 -0.995138 +outer loop +vertex 0.000000 -0.000000 -1.000000 +vertex 0.000000 0.195090 -0.980785 +vertex 0.038060 0.191341 -0.980785 +endloop +endfacet +facet normal 0.097550 0.990438 -0.097549 +outer loop +vertex 0.000000 0.980785 -0.195090 +vertex 0.000000 1.000000 0.000000 +vertex 0.195090 0.980785 0.000000 +endloop +endfacet +facet normal 0.097550 0.990438 -0.097549 +outer loop +vertex 0.000000 0.980785 -0.195090 +vertex 0.195090 0.980785 0.000000 +vertex 0.191342 0.961940 -0.195090 +endloop +endfacet +facet normal 0.028581 0.290166 0.956549 +outer loop +vertex 0.000000 0.382683 0.923880 +vertex 0.000000 0.195090 0.980785 +vertex 0.038060 0.191342 0.980785 +endloop +endfacet +facet normal 0.028580 0.290166 0.956549 +outer loop +vertex 0.000000 0.382683 0.923880 +vertex 0.038060 0.191342 0.980785 +vertex 0.074658 0.375330 0.923880 +endloop +endfacet +facet normal 0.093835 0.952717 -0.289006 +outer loop +vertex 0.000000 0.923879 -0.382683 +vertex 0.000000 0.980785 -0.195090 +vertex 0.191342 0.961940 -0.195090 +endloop +endfacet +facet normal 0.093832 0.952719 -0.289004 +outer loop +vertex 0.000000 0.923879 -0.382683 +vertex 0.191342 0.961940 -0.195090 +vertex 0.180240 0.906127 -0.382683 +endloop +endfacet +facet normal 0.046379 0.470889 0.880972 +outer loop +vertex 0.000000 0.555570 0.831470 +vertex 0.000000 0.382683 0.923880 +vertex 0.074658 0.375330 0.923880 +endloop +endfacet +facet normal 0.046380 0.470890 0.880972 +outer loop +vertex 0.000000 0.555570 0.831470 +vertex 0.074658 0.375330 0.923880 +vertex 0.108386 0.544895 0.831470 +endloop +endfacet +facet normal 0.086533 0.878613 -0.469629 +outer loop +vertex 0.000000 0.831469 -0.555570 +vertex 0.000000 0.923879 -0.382683 +vertex 0.180240 0.906127 -0.382683 +endloop +endfacet +facet normal 0.086531 0.878613 -0.469629 +outer loop +vertex 0.000000 0.831469 -0.555570 +vertex 0.180240 0.906127 -0.382683 +vertex 0.162212 0.815493 -0.555570 +endloop +endfacet +facet normal 0.062361 0.633159 0.771506 +outer loop +vertex 0.000000 0.707107 0.707107 +vertex 0.000000 0.555570 0.831470 +vertex 0.108386 0.544895 0.831470 +endloop +endfacet +facet normal 0.062361 0.633158 0.771506 +outer loop +vertex 0.000000 0.707107 0.707107 +vertex 0.108386 0.544895 0.831470 +vertex 0.137950 0.693520 0.707107 +endloop +endfacet +facet normal 0.075911 0.770781 -0.632562 +outer loop +vertex 0.000000 0.707106 -0.707107 +vertex 0.000000 0.831469 -0.555570 +vertex 0.162212 0.815493 -0.555570 +endloop +endfacet +facet normal 0.075913 0.770780 -0.632563 +outer loop +vertex 0.000000 0.707106 -0.707107 +vertex 0.162212 0.815493 -0.555570 +vertex 0.137950 0.693520 -0.707107 +endloop +endfacet +facet normal 0.075915 0.770779 0.632563 +outer loop +vertex 0.000000 0.831470 0.555570 +vertex 0.000000 0.707107 0.707107 +vertex 0.137950 0.693520 0.707107 +endloop +endfacet +facet normal 0.075915 0.770780 0.632563 +outer loop +vertex 0.000000 0.831470 0.555570 +vertex 0.137950 0.693520 0.707107 +vertex 0.162212 0.815493 0.555570 +endloop +endfacet +facet normal 0.062359 0.633160 -0.771505 +outer loop +vertex 0.000000 0.555570 -0.831470 +vertex 0.000000 0.707106 -0.707107 +vertex 0.137950 0.693520 -0.707107 +endloop +endfacet +facet normal 0.062361 0.633159 -0.771506 +outer loop +vertex 0.000000 0.555570 -0.831470 +vertex 0.137950 0.693520 -0.707107 +vertex 0.108386 0.544895 -0.831470 +endloop +endfacet +facet normal 0.086536 0.878613 0.469628 +outer loop +vertex 0.000000 0.923880 0.382683 +vertex 0.000000 0.831470 0.555570 +vertex 0.162212 0.815493 0.555570 +endloop +endfacet +facet normal 0.086536 0.878613 0.469628 +outer loop +vertex 0.000000 0.923880 0.382683 +vertex 0.162212 0.815493 0.555570 +vertex 0.180240 0.906127 0.382683 +endloop +endfacet +facet normal 0.046378 0.470889 -0.880973 +outer loop +vertex 0.000000 0.382683 -0.923880 +vertex 0.000000 0.555570 -0.831470 +vertex 0.108386 0.544895 -0.831470 +endloop +endfacet +facet normal 0.046376 0.470890 -0.880972 +outer loop +vertex 0.000000 0.382683 -0.923880 +vertex 0.108386 0.544895 -0.831470 +vertex 0.074658 0.375330 -0.923880 +endloop +endfacet +facet normal 0.093835 0.952718 0.289004 +outer loop +vertex 0.000000 0.980785 0.195090 +vertex 0.000000 0.923880 0.382683 +vertex 0.180240 0.906127 0.382683 +endloop +endfacet +facet normal 0.093835 0.952718 0.289004 +outer loop +vertex 0.000000 0.980785 0.195090 +vertex 0.180240 0.906127 0.382683 +vertex 0.191342 0.961940 0.195090 +endloop +endfacet +facet normal 0.137354 0.452793 -0.880972 +outer loop +vertex 0.074658 0.375330 -0.923880 +vertex 0.108386 0.544895 -0.831470 +vertex 0.212608 0.513280 -0.831470 +endloop +endfacet +facet normal 0.137351 0.452794 -0.880973 +outer loop +vertex 0.074658 0.375330 -0.923880 +vertex 0.212608 0.513280 -0.831470 +vertex 0.146447 0.353553 -0.923880 +endloop +endfacet +facet normal 0.277898 0.916106 0.289004 +outer loop +vertex 0.191342 0.961940 0.195090 +vertex 0.180240 0.906127 0.382683 +vertex 0.353553 0.853553 0.382683 +endloop +endfacet +facet normal 0.277898 0.916106 0.289004 +outer loop +vertex 0.191342 0.961940 0.195090 +vertex 0.353553 0.853553 0.382683 +vertex 0.375330 0.906127 0.195090 +endloop +endfacet +facet normal 0.084639 0.279015 -0.956550 +outer loop +vertex 0.038060 0.191341 -0.980785 +vertex 0.074658 0.375330 -0.923880 +vertex 0.146447 0.353553 -0.923880 +endloop +endfacet +facet normal 0.084642 0.279015 -0.956549 +outer loop +vertex 0.038060 0.191341 -0.980785 +vertex 0.146447 0.353553 -0.923880 +vertex 0.074658 0.180240 -0.980785 +endloop +endfacet +facet normal 0.288900 0.952376 0.097550 +outer loop +vertex 0.195090 0.980785 0.000000 +vertex 0.191342 0.961940 0.195090 +vertex 0.375330 0.906127 0.195090 +endloop +endfacet +facet normal 0.288900 0.952376 0.097550 +outer loop +vertex 0.195090 0.980785 0.000000 +vertex 0.375330 0.906127 0.195090 +vertex 0.382684 0.923879 0.000000 +endloop +endfacet +facet normal 0.028586 0.094246 0.995138 +outer loop +vertex 0.038060 0.191342 0.980785 +vertex -0.000000 -0.000001 1.000000 +vertex 0.074658 0.180240 0.980785 +endloop +endfacet +facet normal 0.028588 0.094246 -0.995138 +outer loop +vertex 0.000000 -0.000000 -1.000000 +vertex 0.038060 0.191341 -0.980785 +vertex 0.074658 0.180240 -0.980785 +endloop +endfacet +facet normal 0.288900 0.952376 -0.097549 +outer loop +vertex 0.191342 0.961940 -0.195090 +vertex 0.195090 0.980785 0.000000 +vertex 0.382684 0.923879 0.000000 +endloop +endfacet +facet normal 0.288901 0.952376 -0.097551 +outer loop +vertex 0.191342 0.961940 -0.195090 +vertex 0.382684 0.923879 0.000000 +vertex 0.375330 0.906127 -0.195090 +endloop +endfacet +facet normal 0.084636 0.279015 0.956550 +outer loop +vertex 0.074658 0.375330 0.923880 +vertex 0.038060 0.191342 0.980785 +vertex 0.074658 0.180240 0.980785 +endloop +endfacet +facet normal 0.084639 0.279015 0.956549 +outer loop +vertex 0.074658 0.375330 0.923880 +vertex 0.074658 0.180240 0.980785 +vertex 0.146447 0.353553 0.923880 +endloop +endfacet +facet normal 0.277898 0.916106 -0.289003 +outer loop +vertex 0.180240 0.906127 -0.382683 +vertex 0.191342 0.961940 -0.195090 +vertex 0.375330 0.906127 -0.195090 +endloop +endfacet +facet normal 0.277898 0.916106 -0.289004 +outer loop +vertex 0.180240 0.906127 -0.382683 +vertex 0.375330 0.906127 -0.195090 +vertex 0.353554 0.853553 -0.382683 +endloop +endfacet +facet normal 0.137353 0.452794 0.880972 +outer loop +vertex 0.108386 0.544895 0.831470 +vertex 0.074658 0.375330 0.923880 +vertex 0.146447 0.353553 0.923880 +endloop +endfacet +facet normal 0.137353 0.452793 0.880972 +outer loop +vertex 0.108386 0.544895 0.831470 +vertex 0.146447 0.353553 0.923880 +vertex 0.212608 0.513280 0.831470 +endloop +endfacet +facet normal 0.256282 0.844849 -0.469628 +outer loop +vertex 0.162212 0.815493 -0.555570 +vertex 0.180240 0.906127 -0.382683 +vertex 0.353554 0.853553 -0.382683 +endloop +endfacet +facet normal 0.256282 0.844848 -0.469628 +outer loop +vertex 0.162212 0.815493 -0.555570 +vertex 0.353554 0.853553 -0.382683 +vertex 0.318190 0.768178 -0.555570 +endloop +endfacet +facet normal 0.184686 0.608827 0.771506 +outer loop +vertex 0.137950 0.693520 0.707107 +vertex 0.108386 0.544895 0.831470 +vertex 0.212608 0.513280 0.831470 +endloop +endfacet +facet normal 0.184685 0.608827 0.771506 +outer loop +vertex 0.137950 0.693520 0.707107 +vertex 0.212608 0.513280 0.831470 +vertex 0.270598 0.653281 0.707107 +endloop +endfacet +facet normal 0.224828 0.741159 -0.632563 +outer loop +vertex 0.137950 0.693520 -0.707107 +vertex 0.162212 0.815493 -0.555570 +vertex 0.318190 0.768178 -0.555570 +endloop +endfacet +facet normal 0.224829 0.741159 -0.632563 +outer loop +vertex 0.137950 0.693520 -0.707107 +vertex 0.318190 0.768178 -0.555570 +vertex 0.270598 0.653281 -0.707107 +endloop +endfacet +facet normal 0.224829 0.741159 0.632563 +outer loop +vertex 0.162212 0.815493 0.555570 +vertex 0.137950 0.693520 0.707107 +vertex 0.270598 0.653281 0.707107 +endloop +endfacet +facet normal 0.224828 0.741159 0.632563 +outer loop +vertex 0.162212 0.815493 0.555570 +vertex 0.270598 0.653281 0.707107 +vertex 0.318190 0.768178 0.555570 +endloop +endfacet +facet normal 0.184686 0.608827 -0.771506 +outer loop +vertex 0.108386 0.544895 -0.831470 +vertex 0.137950 0.693520 -0.707107 +vertex 0.270598 0.653281 -0.707107 +endloop +endfacet +facet normal 0.184686 0.608826 -0.771506 +outer loop +vertex 0.108386 0.544895 -0.831470 +vertex 0.270598 0.653281 -0.707107 +vertex 0.212608 0.513280 -0.831470 +endloop +endfacet +facet normal 0.256282 0.844848 0.469629 +outer loop +vertex 0.180240 0.906127 0.382683 +vertex 0.162212 0.815493 0.555570 +vertex 0.318190 0.768178 0.555570 +endloop +endfacet +facet normal 0.256282 0.844848 0.469628 +outer loop +vertex 0.180240 0.906127 0.382683 +vertex 0.318190 0.768178 0.555570 +vertex 0.353553 0.853553 0.382683 +endloop +endfacet +facet normal 0.223051 0.417297 0.880972 +outer loop +vertex 0.212608 0.513280 0.831470 +vertex 0.146447 0.353553 0.923880 +vertex 0.212608 0.318190 0.923880 +endloop +endfacet +facet normal 0.223050 0.417297 0.880972 +outer loop +vertex 0.212608 0.513280 0.831470 +vertex 0.212608 0.318190 0.923880 +vertex 0.308658 0.461940 0.831470 +endloop +endfacet +facet normal 0.416179 0.778617 -0.469628 +outer loop +vertex 0.318190 0.768178 -0.555570 +vertex 0.353554 0.853553 -0.382683 +vertex 0.513280 0.768178 -0.382683 +endloop +endfacet +facet normal 0.416179 0.778617 -0.469628 +outer loop +vertex 0.318190 0.768178 -0.555570 +vertex 0.513280 0.768178 -0.382683 +vertex 0.461940 0.691342 -0.555570 +endloop +endfacet +facet normal 0.299913 0.561098 0.771506 +outer loop +vertex 0.270598 0.653281 0.707107 +vertex 0.212608 0.513280 0.831470 +vertex 0.308658 0.461940 0.831470 +endloop +endfacet +facet normal 0.299913 0.561098 0.771506 +outer loop +vertex 0.270598 0.653281 0.707107 +vertex 0.308658 0.461940 0.831470 +vertex 0.392848 0.587938 0.707107 +endloop +endfacet +facet normal 0.365101 0.683056 -0.632562 +outer loop +vertex 0.270598 0.653281 -0.707107 +vertex 0.318190 0.768178 -0.555570 +vertex 0.461940 0.691342 -0.555570 +endloop +endfacet +facet normal 0.365101 0.683056 -0.632563 +outer loop +vertex 0.270598 0.653281 -0.707107 +vertex 0.461940 0.691342 -0.555570 +vertex 0.392848 0.587938 -0.707107 +endloop +endfacet +facet normal 0.365101 0.683057 0.632562 +outer loop +vertex 0.318190 0.768178 0.555570 +vertex 0.270598 0.653281 0.707107 +vertex 0.392848 0.587938 0.707107 +endloop +endfacet +facet normal 0.365101 0.683056 0.632563 +outer loop +vertex 0.318190 0.768178 0.555570 +vertex 0.392848 0.587938 0.707107 +vertex 0.461940 0.691342 0.555570 +endloop +endfacet +facet normal 0.299913 0.561098 -0.771506 +outer loop +vertex 0.212608 0.513280 -0.831470 +vertex 0.270598 0.653281 -0.707107 +vertex 0.392848 0.587938 -0.707107 +endloop +endfacet +facet normal 0.299913 0.561098 -0.771505 +outer loop +vertex 0.212608 0.513280 -0.831470 +vertex 0.392848 0.587938 -0.707107 +vertex 0.308658 0.461940 -0.831470 +endloop +endfacet +facet normal 0.416179 0.778617 0.469628 +outer loop +vertex 0.353553 0.853553 0.382683 +vertex 0.318190 0.768178 0.555570 +vertex 0.461940 0.691342 0.555570 +endloop +endfacet +facet normal 0.416179 0.778617 0.469628 +outer loop +vertex 0.353553 0.853553 0.382683 +vertex 0.461940 0.691342 0.555570 +vertex 0.513280 0.768178 0.382683 +endloop +endfacet +facet normal 0.223050 0.417297 -0.880972 +outer loop +vertex 0.146447 0.353553 -0.923880 +vertex 0.212608 0.513280 -0.831470 +vertex 0.308658 0.461940 -0.831470 +endloop +endfacet +facet normal 0.223050 0.417297 -0.880972 +outer loop +vertex 0.146447 0.353553 -0.923880 +vertex 0.308658 0.461940 -0.831470 +vertex 0.212608 0.318189 -0.923880 +endloop +endfacet +facet normal 0.451281 0.844288 0.289004 +outer loop +vertex 0.375330 0.906127 0.195090 +vertex 0.353553 0.853553 0.382683 +vertex 0.513280 0.768178 0.382683 +endloop +endfacet +facet normal 0.451281 0.844288 0.289004 +outer loop +vertex 0.375330 0.906127 0.195090 +vertex 0.513280 0.768178 0.382683 +vertex 0.544895 0.815493 0.195090 +endloop +endfacet +facet normal 0.137444 0.257142 -0.956550 +outer loop +vertex 0.074658 0.180240 -0.980785 +vertex 0.146447 0.353553 -0.923880 +vertex 0.212608 0.318189 -0.923880 +endloop +endfacet +facet normal 0.137445 0.257142 -0.956550 +outer loop +vertex 0.074658 0.180240 -0.980785 +vertex 0.212608 0.318189 -0.923880 +vertex 0.108386 0.162211 -0.980785 +endloop +endfacet +facet normal 0.469149 0.877715 0.097549 +outer loop +vertex 0.382684 0.923879 0.000000 +vertex 0.375330 0.906127 0.195090 +vertex 0.544895 0.815493 0.195090 +endloop +endfacet +facet normal 0.469149 0.877715 0.097549 +outer loop +vertex 0.382684 0.923879 0.000000 +vertex 0.544895 0.815493 0.195090 +vertex 0.555570 0.831469 0.000000 +endloop +endfacet +facet normal 0.046428 0.086857 0.995138 +outer loop +vertex 0.074658 0.180240 0.980785 +vertex -0.000000 -0.000001 1.000000 +vertex 0.108387 0.162212 0.980785 +endloop +endfacet +facet normal 0.046428 0.086857 -0.995138 +outer loop +vertex 0.000000 -0.000000 -1.000000 +vertex 0.074658 0.180240 -0.980785 +vertex 0.108386 0.162211 -0.980785 +endloop +endfacet +facet normal 0.469148 0.877715 -0.097549 +outer loop +vertex 0.375330 0.906127 -0.195090 +vertex 0.382684 0.923879 0.000000 +vertex 0.555570 0.831469 0.000000 +endloop +endfacet +facet normal 0.469149 0.877715 -0.097549 +outer loop +vertex 0.375330 0.906127 -0.195090 +vertex 0.555570 0.831469 0.000000 +vertex 0.544895 0.815493 -0.195090 +endloop +endfacet +facet normal 0.137445 0.257142 0.956550 +outer loop +vertex 0.146447 0.353553 0.923880 +vertex 0.074658 0.180240 0.980785 +vertex 0.108387 0.162212 0.980785 +endloop +endfacet +facet normal 0.137445 0.257142 0.956550 +outer loop +vertex 0.146447 0.353553 0.923880 +vertex 0.108387 0.162212 0.980785 +vertex 0.212608 0.318190 0.923880 +endloop +endfacet +facet normal 0.451281 0.844288 -0.289003 +outer loop +vertex 0.353554 0.853553 -0.382683 +vertex 0.375330 0.906127 -0.195090 +vertex 0.544895 0.815493 -0.195090 +endloop +endfacet +facet normal 0.451281 0.844288 -0.289004 +outer loop +vertex 0.353554 0.853553 -0.382683 +vertex 0.544895 0.815493 -0.195090 +vertex 0.513280 0.768178 -0.382683 +endloop +endfacet +facet normal 0.607322 0.740025 0.289004 +outer loop +vertex 0.544895 0.815493 0.195090 +vertex 0.513280 0.768178 0.382683 +vertex 0.653282 0.653281 0.382683 +endloop +endfacet +facet normal 0.607322 0.740025 0.289004 +outer loop +vertex 0.544895 0.815493 0.195090 +vertex 0.653282 0.653281 0.382683 +vertex 0.693520 0.693520 0.195090 +endloop +endfacet +facet normal 0.184970 0.225386 -0.956550 +outer loop +vertex 0.108386 0.162211 -0.980785 +vertex 0.212608 0.318189 -0.923880 +vertex 0.270598 0.270598 -0.923880 +endloop +endfacet +facet normal 0.184971 0.225386 -0.956550 +outer loop +vertex 0.108386 0.162211 -0.980785 +vertex 0.270598 0.270598 -0.923880 +vertex 0.137950 0.137949 -0.980785 +endloop +endfacet +facet normal 0.631368 0.769323 0.097550 +outer loop +vertex 0.555570 0.831469 0.000000 +vertex 0.544895 0.815493 0.195090 +vertex 0.693520 0.693520 0.195090 +endloop +endfacet +facet normal 0.631367 0.769324 0.097551 +outer loop +vertex 0.555570 0.831469 0.000000 +vertex 0.693520 0.693520 0.195090 +vertex 0.707107 0.707107 0.000000 +endloop +endfacet +facet normal 0.062476 0.076131 0.995139 +outer loop +vertex 0.108387 0.162212 0.980785 +vertex -0.000000 -0.000001 1.000000 +vertex 0.137950 0.137950 0.980785 +endloop +endfacet +facet normal 0.062478 0.076131 -0.995138 +outer loop +vertex 0.000000 -0.000000 -1.000000 +vertex 0.108386 0.162211 -0.980785 +vertex 0.137950 0.137949 -0.980785 +endloop +endfacet +facet normal 0.631368 0.769324 -0.097550 +outer loop +vertex 0.544895 0.815493 -0.195090 +vertex 0.555570 0.831469 0.000000 +vertex 0.707107 0.707107 0.000000 +endloop +endfacet +facet normal 0.631368 0.769324 -0.097550 +outer loop +vertex 0.544895 0.815493 -0.195090 +vertex 0.707107 0.707107 0.000000 +vertex 0.693520 0.693520 -0.195090 +endloop +endfacet +facet normal 0.184969 0.225387 0.956550 +outer loop +vertex 0.212608 0.318190 0.923880 +vertex 0.108387 0.162212 0.980785 +vertex 0.137950 0.137950 0.980785 +endloop +endfacet +facet normal 0.184971 0.225387 0.956549 +outer loop +vertex 0.212608 0.318190 0.923880 +vertex 0.137950 0.137950 0.980785 +vertex 0.270598 0.270598 0.923880 +endloop +endfacet +facet normal 0.607322 0.740025 -0.289004 +outer loop +vertex 0.513280 0.768178 -0.382683 +vertex 0.544895 0.815493 -0.195090 +vertex 0.693520 0.693520 -0.195090 +endloop +endfacet +facet normal 0.607323 0.740025 -0.289003 +outer loop +vertex 0.513280 0.768178 -0.382683 +vertex 0.693520 0.693520 -0.195090 +vertex 0.653282 0.653281 -0.382683 +endloop +endfacet +facet normal 0.300173 0.365764 0.880972 +outer loop +vertex 0.308658 0.461940 0.831470 +vertex 0.212608 0.318190 0.923880 +vertex 0.270598 0.270598 0.923880 +endloop +endfacet +facet normal 0.300175 0.365764 0.880972 +outer loop +vertex 0.308658 0.461940 0.831470 +vertex 0.270598 0.270598 0.923880 +vertex 0.392848 0.392847 0.831470 +endloop +endfacet +facet normal 0.560084 0.682463 -0.469628 +outer loop +vertex 0.461940 0.691342 -0.555570 +vertex 0.513280 0.768178 -0.382683 +vertex 0.653282 0.653281 -0.382683 +endloop +endfacet +facet normal 0.560083 0.682463 -0.469629 +outer loop +vertex 0.461940 0.691342 -0.555570 +vertex 0.653282 0.653281 -0.382683 +vertex 0.587938 0.587938 -0.555570 +endloop +endfacet +facet normal 0.403615 0.491806 0.771506 +outer loop +vertex 0.392848 0.587938 0.707107 +vertex 0.308658 0.461940 0.831470 +vertex 0.392848 0.392847 0.831470 +endloop +endfacet +facet normal 0.403616 0.491807 0.771506 +outer loop +vertex 0.392848 0.587938 0.707107 +vertex 0.392848 0.392847 0.831470 +vertex 0.500000 0.500000 0.707107 +endloop +endfacet +facet normal 0.491344 0.598704 -0.632562 +outer loop +vertex 0.392848 0.587938 -0.707107 +vertex 0.461940 0.691342 -0.555570 +vertex 0.587938 0.587938 -0.555570 +endloop +endfacet +facet normal 0.491344 0.598704 -0.632563 +outer loop +vertex 0.392848 0.587938 -0.707107 +vertex 0.587938 0.587938 -0.555570 +vertex 0.500000 0.500000 -0.707107 +endloop +endfacet +facet normal 0.491344 0.598704 0.632562 +outer loop +vertex 0.461940 0.691342 0.555570 +vertex 0.392848 0.587938 0.707107 +vertex 0.500000 0.500000 0.707107 +endloop +endfacet +facet normal 0.491344 0.598704 0.632562 +outer loop +vertex 0.461940 0.691342 0.555570 +vertex 0.500000 0.500000 0.707107 +vertex 0.587938 0.587938 0.555570 +endloop +endfacet +facet normal 0.403615 0.491806 -0.771506 +outer loop +vertex 0.308658 0.461940 -0.831470 +vertex 0.392848 0.587938 -0.707107 +vertex 0.500000 0.500000 -0.707107 +endloop +endfacet +facet normal 0.403615 0.491806 -0.771506 +outer loop +vertex 0.308658 0.461940 -0.831470 +vertex 0.500000 0.500000 -0.707107 +vertex 0.392848 0.392847 -0.831470 +endloop +endfacet +facet normal 0.560083 0.682463 0.469629 +outer loop +vertex 0.513280 0.768178 0.382683 +vertex 0.461940 0.691342 0.555570 +vertex 0.587938 0.587938 0.555570 +endloop +endfacet +facet normal 0.560083 0.682463 0.469628 +outer loop +vertex 0.513280 0.768178 0.382683 +vertex 0.587938 0.587938 0.555570 +vertex 0.653282 0.653281 0.382683 +endloop +endfacet +facet normal 0.300175 0.365764 -0.880972 +outer loop +vertex 0.212608 0.318189 -0.923880 +vertex 0.308658 0.461940 -0.831470 +vertex 0.392848 0.392847 -0.831470 +endloop +endfacet +facet normal 0.300173 0.365764 -0.880973 +outer loop +vertex 0.212608 0.318189 -0.923880 +vertex 0.392848 0.392847 -0.831470 +vertex 0.270598 0.270598 -0.923880 +endloop +endfacet +facet normal 0.682463 0.560083 -0.469628 +outer loop +vertex 0.587938 0.587938 -0.555570 +vertex 0.653282 0.653281 -0.382683 +vertex 0.768178 0.513280 -0.382683 +endloop +endfacet +facet normal 0.682463 0.560083 -0.469628 +outer loop +vertex 0.587938 0.587938 -0.555570 +vertex 0.768178 0.513280 -0.382683 +vertex 0.691342 0.461940 -0.555570 +endloop +endfacet +facet normal 0.491807 0.403615 0.771506 +outer loop +vertex 0.500000 0.500000 0.707107 +vertex 0.392848 0.392847 0.831470 +vertex 0.461940 0.308658 0.831470 +endloop +endfacet +facet normal 0.491806 0.403615 0.771506 +outer loop +vertex 0.500000 0.500000 0.707107 +vertex 0.461940 0.308658 0.831470 +vertex 0.587938 0.392847 0.707107 +endloop +endfacet +facet normal 0.598704 0.491344 -0.632562 +outer loop +vertex 0.500000 0.500000 -0.707107 +vertex 0.587938 0.587938 -0.555570 +vertex 0.691342 0.461940 -0.555570 +endloop +endfacet +facet normal 0.598704 0.491343 -0.632563 +outer loop +vertex 0.500000 0.500000 -0.707107 +vertex 0.691342 0.461940 -0.555570 +vertex 0.587938 0.392847 -0.707107 +endloop +endfacet +facet normal 0.598704 0.491343 0.632563 +outer loop +vertex 0.587938 0.587938 0.555570 +vertex 0.500000 0.500000 0.707107 +vertex 0.587938 0.392847 0.707107 +endloop +endfacet +facet normal 0.598704 0.491344 0.632562 +outer loop +vertex 0.587938 0.587938 0.555570 +vertex 0.587938 0.392847 0.707107 +vertex 0.691342 0.461940 0.555570 +endloop +endfacet +facet normal 0.491806 0.403615 -0.771506 +outer loop +vertex 0.392848 0.392847 -0.831470 +vertex 0.500000 0.500000 -0.707107 +vertex 0.587938 0.392847 -0.707107 +endloop +endfacet +facet normal 0.491807 0.403614 -0.771506 +outer loop +vertex 0.392848 0.392847 -0.831470 +vertex 0.587938 0.392847 -0.707107 +vertex 0.461940 0.308658 -0.831470 +endloop +endfacet +facet normal 0.682463 0.560083 0.469629 +outer loop +vertex 0.653282 0.653281 0.382683 +vertex 0.587938 0.587938 0.555570 +vertex 0.691342 0.461940 0.555570 +endloop +endfacet +facet normal 0.682463 0.560083 0.469629 +outer loop +vertex 0.653282 0.653281 0.382683 +vertex 0.691342 0.461940 0.555570 +vertex 0.768178 0.513280 0.382683 +endloop +endfacet +facet normal 0.365764 0.300174 -0.880972 +outer loop +vertex 0.270598 0.270598 -0.923880 +vertex 0.392848 0.392847 -0.831470 +vertex 0.461940 0.308658 -0.831470 +endloop +endfacet +facet normal 0.365763 0.300175 -0.880972 +outer loop +vertex 0.270598 0.270598 -0.923880 +vertex 0.461940 0.308658 -0.831470 +vertex 0.318190 0.212607 -0.923880 +endloop +endfacet +facet normal 0.740024 0.607323 0.289004 +outer loop +vertex 0.693520 0.693520 0.195090 +vertex 0.653282 0.653281 0.382683 +vertex 0.768178 0.513280 0.382683 +endloop +endfacet +facet normal 0.740025 0.607322 0.289003 +outer loop +vertex 0.693520 0.693520 0.195090 +vertex 0.768178 0.513280 0.382683 +vertex 0.815493 0.544895 0.195090 +endloop +endfacet +facet normal 0.225386 0.184970 -0.956550 +outer loop +vertex 0.137950 0.137949 -0.980785 +vertex 0.270598 0.270598 -0.923880 +vertex 0.318190 0.212607 -0.923880 +endloop +endfacet +facet normal 0.225385 0.184970 -0.956550 +outer loop +vertex 0.137950 0.137949 -0.980785 +vertex 0.318190 0.212607 -0.923880 +vertex 0.162212 0.108386 -0.980785 +endloop +endfacet +facet normal 0.769324 0.631367 0.097550 +outer loop +vertex 0.707107 0.707107 0.000000 +vertex 0.693520 0.693520 0.195090 +vertex 0.815493 0.544895 0.195090 +endloop +endfacet +facet normal 0.769324 0.631368 0.097550 +outer loop +vertex 0.707107 0.707107 0.000000 +vertex 0.815493 0.544895 0.195090 +vertex 0.831470 0.555570 0.000000 +endloop +endfacet +facet normal 0.076130 0.062479 0.995138 +outer loop +vertex 0.137950 0.137950 0.980785 +vertex -0.000000 -0.000001 1.000000 +vertex 0.162212 0.108386 0.980785 +endloop +endfacet +facet normal 0.076132 0.062479 -0.995138 +outer loop +vertex 0.000000 -0.000000 -1.000000 +vertex 0.137950 0.137949 -0.980785 +vertex 0.162212 0.108386 -0.980785 +endloop +endfacet +facet normal 0.769324 0.631367 -0.097550 +outer loop +vertex 0.693520 0.693520 -0.195090 +vertex 0.707107 0.707107 0.000000 +vertex 0.831470 0.555570 0.000000 +endloop +endfacet +facet normal 0.769324 0.631368 -0.097550 +outer loop +vertex 0.693520 0.693520 -0.195090 +vertex 0.831470 0.555570 0.000000 +vertex 0.815493 0.544895 -0.195090 +endloop +endfacet +facet normal 0.225384 0.184970 0.956550 +outer loop +vertex 0.270598 0.270598 0.923880 +vertex 0.137950 0.137950 0.980785 +vertex 0.162212 0.108386 0.980785 +endloop +endfacet +facet normal 0.225388 0.184970 0.956549 +outer loop +vertex 0.270598 0.270598 0.923880 +vertex 0.162212 0.108386 0.980785 +vertex 0.318190 0.212607 0.923880 +endloop +endfacet +facet normal 0.740025 0.607322 -0.289003 +outer loop +vertex 0.653282 0.653281 -0.382683 +vertex 0.693520 0.693520 -0.195090 +vertex 0.815493 0.544895 -0.195090 +endloop +endfacet +facet normal 0.740025 0.607323 -0.289003 +outer loop +vertex 0.653282 0.653281 -0.382683 +vertex 0.815493 0.544895 -0.195090 +vertex 0.768178 0.513280 -0.382683 +endloop +endfacet +facet normal 0.365763 0.300175 0.880973 +outer loop +vertex 0.392848 0.392847 0.831470 +vertex 0.270598 0.270598 0.923880 +vertex 0.318190 0.212607 0.923880 +endloop +endfacet +facet normal 0.365765 0.300174 0.880972 +outer loop +vertex 0.392848 0.392847 0.831470 +vertex 0.318190 0.212607 0.923880 +vertex 0.461940 0.308658 0.831470 +endloop +endfacet +facet normal 0.257142 0.137445 -0.956549 +outer loop +vertex 0.162212 0.108386 -0.980785 +vertex 0.318190 0.212607 -0.923880 +vertex 0.353554 0.146446 -0.923880 +endloop +endfacet +facet normal 0.257141 0.137445 -0.956550 +outer loop +vertex 0.162212 0.108386 -0.980785 +vertex 0.353554 0.146446 -0.923880 +vertex 0.180240 0.074658 -0.980785 +endloop +endfacet +facet normal 0.877715 0.469148 0.097550 +outer loop +vertex 0.831470 0.555570 0.000000 +vertex 0.815493 0.544895 0.195090 +vertex 0.906128 0.375330 0.195090 +endloop +endfacet +facet normal 0.877715 0.469148 0.097550 +outer loop +vertex 0.831470 0.555570 0.000000 +vertex 0.906128 0.375330 0.195090 +vertex 0.923880 0.382683 0.000000 +endloop +endfacet +facet normal 0.086857 0.046426 0.995138 +outer loop +vertex 0.162212 0.108386 0.980785 +vertex -0.000000 -0.000001 1.000000 +vertex 0.180240 0.074658 0.980785 +endloop +endfacet +facet normal 0.086858 0.046426 -0.995138 +outer loop +vertex 0.000000 -0.000000 -1.000000 +vertex 0.162212 0.108386 -0.980785 +vertex 0.180240 0.074658 -0.980785 +endloop +endfacet +facet normal 0.877715 0.469148 -0.097550 +outer loop +vertex 0.815493 0.544895 -0.195090 +vertex 0.831470 0.555570 0.000000 +vertex 0.923880 0.382683 0.000000 +endloop +endfacet +facet normal 0.877715 0.469148 -0.097551 +outer loop +vertex 0.815493 0.544895 -0.195090 +vertex 0.923880 0.382683 0.000000 +vertex 0.906128 0.375330 -0.195090 +endloop +endfacet +facet normal 0.257144 0.137445 0.956549 +outer loop +vertex 0.318190 0.212607 0.923880 +vertex 0.162212 0.108386 0.980785 +vertex 0.180240 0.074658 0.980785 +endloop +endfacet +facet normal 0.257141 0.137445 0.956550 +outer loop +vertex 0.318190 0.212607 0.923880 +vertex 0.180240 0.074658 0.980785 +vertex 0.353554 0.146446 0.923880 +endloop +endfacet +facet normal 0.844288 0.451281 -0.289003 +outer loop +vertex 0.768178 0.513280 -0.382683 +vertex 0.815493 0.544895 -0.195090 +vertex 0.906128 0.375330 -0.195090 +endloop +endfacet +facet normal 0.844288 0.451281 -0.289003 +outer loop +vertex 0.768178 0.513280 -0.382683 +vertex 0.906128 0.375330 -0.195090 +vertex 0.853554 0.353553 -0.382683 +endloop +endfacet +facet normal 0.417296 0.223050 0.880972 +outer loop +vertex 0.461940 0.308658 0.831470 +vertex 0.318190 0.212607 0.923880 +vertex 0.353554 0.146446 0.923880 +endloop +endfacet +facet normal 0.417298 0.223050 0.880972 +outer loop +vertex 0.461940 0.308658 0.831470 +vertex 0.353554 0.146446 0.923880 +vertex 0.513280 0.212607 0.831470 +endloop +endfacet +facet normal 0.778617 0.416179 -0.469628 +outer loop +vertex 0.691342 0.461940 -0.555570 +vertex 0.768178 0.513280 -0.382683 +vertex 0.853554 0.353553 -0.382683 +endloop +endfacet +facet normal 0.778617 0.416179 -0.469628 +outer loop +vertex 0.691342 0.461940 -0.555570 +vertex 0.853554 0.353553 -0.382683 +vertex 0.768178 0.318189 -0.555570 +endloop +endfacet +facet normal 0.561098 0.299913 0.771506 +outer loop +vertex 0.587938 0.392847 0.707107 +vertex 0.461940 0.308658 0.831470 +vertex 0.513280 0.212607 0.831470 +endloop +endfacet +facet normal 0.561098 0.299913 0.771506 +outer loop +vertex 0.587938 0.392847 0.707107 +vertex 0.513280 0.212607 0.831470 +vertex 0.653282 0.270598 0.707107 +endloop +endfacet +facet normal 0.683056 0.365101 -0.632562 +outer loop +vertex 0.587938 0.392847 -0.707107 +vertex 0.691342 0.461940 -0.555570 +vertex 0.768178 0.318189 -0.555570 +endloop +endfacet +facet normal 0.683057 0.365100 -0.632562 +outer loop +vertex 0.587938 0.392847 -0.707107 +vertex 0.768178 0.318189 -0.555570 +vertex 0.653282 0.270598 -0.707107 +endloop +endfacet +facet normal 0.683057 0.365100 0.632563 +outer loop +vertex 0.691342 0.461940 0.555570 +vertex 0.587938 0.392847 0.707107 +vertex 0.653282 0.270598 0.707107 +endloop +endfacet +facet normal 0.683056 0.365101 0.632562 +outer loop +vertex 0.691342 0.461940 0.555570 +vertex 0.653282 0.270598 0.707107 +vertex 0.768178 0.318189 0.555570 +endloop +endfacet +facet normal 0.561097 0.299914 -0.771506 +outer loop +vertex 0.461940 0.308658 -0.831470 +vertex 0.587938 0.392847 -0.707107 +vertex 0.653282 0.270598 -0.707107 +endloop +endfacet +facet normal 0.561098 0.299912 -0.771506 +outer loop +vertex 0.461940 0.308658 -0.831470 +vertex 0.653282 0.270598 -0.707107 +vertex 0.513280 0.212607 -0.831470 +endloop +endfacet +facet normal 0.778616 0.416180 0.469628 +outer loop +vertex 0.768178 0.513280 0.382683 +vertex 0.691342 0.461940 0.555570 +vertex 0.768178 0.318189 0.555570 +endloop +endfacet +facet normal 0.778617 0.416179 0.469628 +outer loop +vertex 0.768178 0.513280 0.382683 +vertex 0.768178 0.318189 0.555570 +vertex 0.853554 0.353553 0.382683 +endloop +endfacet +facet normal 0.417297 0.223050 -0.880972 +outer loop +vertex 0.318190 0.212607 -0.923880 +vertex 0.461940 0.308658 -0.831470 +vertex 0.513280 0.212607 -0.831470 +endloop +endfacet +facet normal 0.417297 0.223050 -0.880972 +outer loop +vertex 0.318190 0.212607 -0.923880 +vertex 0.513280 0.212607 -0.831470 +vertex 0.353554 0.146446 -0.923880 +endloop +endfacet +facet normal 0.844288 0.451281 0.289004 +outer loop +vertex 0.815493 0.544895 0.195090 +vertex 0.768178 0.513280 0.382683 +vertex 0.853554 0.353553 0.382683 +endloop +endfacet +facet normal 0.844288 0.451281 0.289003 +outer loop +vertex 0.815493 0.544895 0.195090 +vertex 0.853554 0.353553 0.382683 +vertex 0.906128 0.375330 0.195090 +endloop +endfacet +facet normal 0.741159 0.224828 -0.632563 +outer loop +vertex 0.653282 0.270598 -0.707107 +vertex 0.768178 0.318189 -0.555570 +vertex 0.815493 0.162211 -0.555570 +endloop +endfacet +facet normal 0.741159 0.224828 -0.632563 +outer loop +vertex 0.653282 0.270598 -0.707107 +vertex 0.815493 0.162211 -0.555570 +vertex 0.693520 0.137949 -0.707107 +endloop +endfacet +facet normal 0.741159 0.224828 0.632563 +outer loop +vertex 0.768178 0.318189 0.555570 +vertex 0.653282 0.270598 0.707107 +vertex 0.693520 0.137949 0.707107 +endloop +endfacet +facet normal 0.741159 0.224828 0.632563 +outer loop +vertex 0.768178 0.318189 0.555570 +vertex 0.693520 0.137949 0.707107 +vertex 0.815493 0.162211 0.555570 +endloop +endfacet +facet normal 0.608827 0.184685 -0.771506 +outer loop +vertex 0.513280 0.212607 -0.831470 +vertex 0.653282 0.270598 -0.707107 +vertex 0.693520 0.137949 -0.707107 +endloop +endfacet +facet normal 0.608827 0.184686 -0.771505 +outer loop +vertex 0.513280 0.212607 -0.831470 +vertex 0.693520 0.137949 -0.707107 +vertex 0.544895 0.108386 -0.831470 +endloop +endfacet +facet normal 0.844848 0.256282 0.469628 +outer loop +vertex 0.853554 0.353553 0.382683 +vertex 0.768178 0.318189 0.555570 +vertex 0.815493 0.162211 0.555570 +endloop +endfacet +facet normal 0.844849 0.256282 0.469628 +outer loop +vertex 0.853554 0.353553 0.382683 +vertex 0.815493 0.162211 0.555570 +vertex 0.906128 0.180240 0.382683 +endloop +endfacet +facet normal 0.452793 0.137353 -0.880972 +outer loop +vertex 0.353554 0.146446 -0.923880 +vertex 0.513280 0.212607 -0.831470 +vertex 0.544895 0.108386 -0.831470 +endloop +endfacet +facet normal 0.452794 0.137353 -0.880972 +outer loop +vertex 0.353554 0.146446 -0.923880 +vertex 0.544895 0.108386 -0.831470 +vertex 0.375330 0.074658 -0.923880 +endloop +endfacet +facet normal 0.916106 0.277898 0.289003 +outer loop +vertex 0.906128 0.375330 0.195090 +vertex 0.853554 0.353553 0.382683 +vertex 0.906128 0.180240 0.382683 +endloop +endfacet +facet normal 0.916106 0.277898 0.289003 +outer loop +vertex 0.906128 0.375330 0.195090 +vertex 0.906128 0.180240 0.382683 +vertex 0.961940 0.191341 0.195090 +endloop +endfacet +facet normal 0.279015 0.084638 -0.956549 +outer loop +vertex 0.180240 0.074658 -0.980785 +vertex 0.353554 0.146446 -0.923880 +vertex 0.375330 0.074658 -0.923880 +endloop +endfacet +facet normal 0.279014 0.084639 -0.956550 +outer loop +vertex 0.180240 0.074658 -0.980785 +vertex 0.375330 0.074658 -0.923880 +vertex 0.191342 0.038060 -0.980785 +endloop +endfacet +facet normal 0.952376 0.288900 0.097551 +outer loop +vertex 0.923880 0.382683 0.000000 +vertex 0.906128 0.375330 0.195090 +vertex 0.961940 0.191341 0.195090 +endloop +endfacet +facet normal 0.952376 0.288901 0.097550 +outer loop +vertex 0.923880 0.382683 0.000000 +vertex 0.961940 0.191341 0.195090 +vertex 0.980785 0.195090 0.000000 +endloop +endfacet +facet normal 0.094248 0.028589 0.995138 +outer loop +vertex 0.180240 0.074658 0.980785 +vertex -0.000000 -0.000001 1.000000 +vertex 0.191342 0.038060 0.980785 +endloop +endfacet +facet normal 0.094247 0.028589 -0.995138 +outer loop +vertex 0.000000 -0.000000 -1.000000 +vertex 0.180240 0.074658 -0.980785 +vertex 0.191342 0.038060 -0.980785 +endloop +endfacet +facet normal 0.952376 0.288901 -0.097550 +outer loop +vertex 0.906128 0.375330 -0.195090 +vertex 0.923880 0.382683 0.000000 +vertex 0.980785 0.195090 0.000000 +endloop +endfacet +facet normal 0.952376 0.288900 -0.097551 +outer loop +vertex 0.906128 0.375330 -0.195090 +vertex 0.980785 0.195090 0.000000 +vertex 0.961940 0.191341 -0.195090 +endloop +endfacet +facet normal 0.279015 0.084638 0.956550 +outer loop +vertex 0.353554 0.146446 0.923880 +vertex 0.180240 0.074658 0.980785 +vertex 0.191342 0.038060 0.980785 +endloop +endfacet +facet normal 0.279016 0.084638 0.956549 +outer loop +vertex 0.353554 0.146446 0.923880 +vertex 0.191342 0.038060 0.980785 +vertex 0.375331 0.074658 0.923880 +endloop +endfacet +facet normal 0.916106 0.277898 -0.289003 +outer loop +vertex 0.853554 0.353553 -0.382683 +vertex 0.906128 0.375330 -0.195090 +vertex 0.961940 0.191341 -0.195090 +endloop +endfacet +facet normal 0.916106 0.277898 -0.289003 +outer loop +vertex 0.853554 0.353553 -0.382683 +vertex 0.961940 0.191341 -0.195090 +vertex 0.906128 0.180240 -0.382683 +endloop +endfacet +facet normal 0.452792 0.137353 0.880973 +outer loop +vertex 0.513280 0.212607 0.831470 +vertex 0.353554 0.146446 0.923880 +vertex 0.375331 0.074658 0.923880 +endloop +endfacet +facet normal 0.452794 0.137353 0.880972 +outer loop +vertex 0.513280 0.212607 0.831470 +vertex 0.375331 0.074658 0.923880 +vertex 0.544895 0.108386 0.831470 +endloop +endfacet +facet normal 0.844848 0.256282 -0.469628 +outer loop +vertex 0.768178 0.318189 -0.555570 +vertex 0.853554 0.353553 -0.382683 +vertex 0.906128 0.180240 -0.382683 +endloop +endfacet +facet normal 0.844849 0.256282 -0.469628 +outer loop +vertex 0.768178 0.318189 -0.555570 +vertex 0.906128 0.180240 -0.382683 +vertex 0.815493 0.162211 -0.555570 +endloop +endfacet +facet normal 0.608827 0.184686 0.771506 +outer loop +vertex 0.653282 0.270598 0.707107 +vertex 0.513280 0.212607 0.831470 +vertex 0.544895 0.108386 0.831470 +endloop +endfacet +facet normal 0.608827 0.184685 0.771506 +outer loop +vertex 0.653282 0.270598 0.707107 +vertex 0.544895 0.108386 0.831470 +vertex 0.693520 0.137949 0.707107 +endloop +endfacet +facet normal 0.098011 0.009653 0.995138 +outer loop +vertex 0.191342 0.038060 0.980785 +vertex -0.000000 -0.000001 1.000000 +vertex 0.195091 -0.000000 0.980785 +endloop +endfacet +facet normal 0.098012 0.009653 -0.995138 +outer loop +vertex 0.000000 -0.000000 -1.000000 +vertex 0.191342 0.038060 -0.980785 +vertex 0.195090 -0.000000 -0.980785 +endloop +endfacet +facet normal 0.990438 0.097549 -0.097551 +outer loop +vertex 0.961940 0.191341 -0.195090 +vertex 0.980785 0.195090 0.000000 +vertex 1.000000 -0.000000 0.000000 +endloop +endfacet +facet normal 0.990438 0.097549 -0.097551 +outer loop +vertex 0.961940 0.191341 -0.195090 +vertex 1.000000 -0.000000 0.000000 +vertex 0.980785 -0.000000 -0.195090 +endloop +endfacet +facet normal 0.290166 0.028579 0.956550 +outer loop +vertex 0.375331 0.074658 0.923880 +vertex 0.191342 0.038060 0.980785 +vertex 0.195091 -0.000000 0.980785 +endloop +endfacet +facet normal 0.290167 0.028579 0.956549 +outer loop +vertex 0.375331 0.074658 0.923880 +vertex 0.195091 -0.000000 0.980785 +vertex 0.382684 -0.000000 0.923880 +endloop +endfacet +facet normal 0.952718 0.093834 -0.289003 +outer loop +vertex 0.906128 0.180240 -0.382683 +vertex 0.961940 0.191341 -0.195090 +vertex 0.980785 -0.000000 -0.195090 +endloop +endfacet +facet normal 0.952718 0.093835 -0.289003 +outer loop +vertex 0.906128 0.180240 -0.382683 +vertex 0.980785 -0.000000 -0.195090 +vertex 0.923880 -0.000000 -0.382683 +endloop +endfacet +facet normal 0.470889 0.046378 0.880973 +outer loop +vertex 0.544895 0.108386 0.831470 +vertex 0.375331 0.074658 0.923880 +vertex 0.382684 -0.000000 0.923880 +endloop +endfacet +facet normal 0.470890 0.046379 0.880972 +outer loop +vertex 0.544895 0.108386 0.831470 +vertex 0.382684 -0.000000 0.923880 +vertex 0.555570 -0.000000 0.831470 +endloop +endfacet +facet normal 0.878613 0.086536 -0.469628 +outer loop +vertex 0.815493 0.162211 -0.555570 +vertex 0.906128 0.180240 -0.382683 +vertex 0.923880 -0.000000 -0.382683 +endloop +endfacet +facet normal 0.878613 0.086535 -0.469628 +outer loop +vertex 0.815493 0.162211 -0.555570 +vertex 0.923880 -0.000000 -0.382683 +vertex 0.831470 -0.000000 -0.555570 +endloop +endfacet +facet normal 0.633159 0.062361 0.771506 +outer loop +vertex 0.693520 0.137949 0.707107 +vertex 0.544895 0.108386 0.831470 +vertex 0.555570 -0.000000 0.831470 +endloop +endfacet +facet normal 0.633159 0.062360 0.771506 +outer loop +vertex 0.693520 0.137949 0.707107 +vertex 0.555570 -0.000000 0.831470 +vertex 0.707107 -0.000000 0.707107 +endloop +endfacet +facet normal 0.770780 0.075915 -0.632562 +outer loop +vertex 0.693520 0.137949 -0.707107 +vertex 0.815493 0.162211 -0.555570 +vertex 0.831470 -0.000000 -0.555570 +endloop +endfacet +facet normal 0.770780 0.075915 -0.632563 +outer loop +vertex 0.693520 0.137949 -0.707107 +vertex 0.831470 -0.000000 -0.555570 +vertex 0.707107 -0.000000 -0.707107 +endloop +endfacet +facet normal 0.770780 0.075916 0.632563 +outer loop +vertex 0.815493 0.162211 0.555570 +vertex 0.693520 0.137949 0.707107 +vertex 0.707107 -0.000000 0.707107 +endloop +endfacet +facet normal 0.770780 0.075915 0.632563 +outer loop +vertex 0.815493 0.162211 0.555570 +vertex 0.707107 -0.000000 0.707107 +vertex 0.831470 -0.000000 0.555570 +endloop +endfacet +facet normal 0.633159 0.062360 -0.771506 +outer loop +vertex 0.544895 0.108386 -0.831470 +vertex 0.693520 0.137949 -0.707107 +vertex 0.707107 -0.000000 -0.707107 +endloop +endfacet +facet normal 0.633158 0.062361 -0.771506 +outer loop +vertex 0.544895 0.108386 -0.831470 +vertex 0.707107 -0.000000 -0.707107 +vertex 0.555570 -0.000000 -0.831470 +endloop +endfacet +facet normal 0.878613 0.086536 0.469628 +outer loop +vertex 0.906128 0.180240 0.382683 +vertex 0.815493 0.162211 0.555570 +vertex 0.831470 -0.000000 0.555570 +endloop +endfacet +facet normal 0.878613 0.086535 0.469629 +outer loop +vertex 0.906128 0.180240 0.382683 +vertex 0.831470 -0.000000 0.555570 +vertex 0.923880 -0.000000 0.382683 +endloop +endfacet +facet normal 0.470889 0.046379 -0.880972 +outer loop +vertex 0.375330 0.074658 -0.923880 +vertex 0.544895 0.108386 -0.831470 +vertex 0.555570 -0.000000 -0.831470 +endloop +endfacet +facet normal 0.470890 0.046378 -0.880972 +outer loop +vertex 0.375330 0.074658 -0.923880 +vertex 0.555570 -0.000000 -0.831470 +vertex 0.382684 -0.000000 -0.923880 +endloop +endfacet +facet normal 0.952718 0.093834 0.289004 +outer loop +vertex 0.961940 0.191341 0.195090 +vertex 0.906128 0.180240 0.382683 +vertex 0.923880 -0.000000 0.382683 +endloop +endfacet +facet normal 0.952718 0.093835 0.289003 +outer loop +vertex 0.961940 0.191341 0.195090 +vertex 0.923880 -0.000000 0.382683 +vertex 0.980785 -0.000000 0.195090 +endloop +endfacet +facet normal 0.290166 0.028578 -0.956549 +outer loop +vertex 0.191342 0.038060 -0.980785 +vertex 0.375330 0.074658 -0.923880 +vertex 0.382684 -0.000000 -0.923880 +endloop +endfacet +facet normal 0.290165 0.028579 -0.956550 +outer loop +vertex 0.191342 0.038060 -0.980785 +vertex 0.382684 -0.000000 -0.923880 +vertex 0.195090 -0.000000 -0.980785 +endloop +endfacet +facet normal 0.990438 0.097549 0.097551 +outer loop +vertex 0.980785 0.195090 0.000000 +vertex 0.961940 0.191341 0.195090 +vertex 0.980785 -0.000000 0.195090 +endloop +endfacet +facet normal 0.990438 0.097549 0.097551 +outer loop +vertex 0.980785 0.195090 0.000000 +vertex 0.980785 -0.000000 0.195090 +vertex 1.000000 -0.000000 0.000000 +endloop +endfacet +facet normal 0.770780 -0.075915 0.632562 +outer loop +vertex 0.831470 -0.000000 0.555570 +vertex 0.707107 -0.000000 0.707107 +vertex 0.693520 -0.137950 0.707107 +endloop +endfacet +facet normal 0.770780 -0.075915 0.632563 +outer loop +vertex 0.831470 -0.000000 0.555570 +vertex 0.693520 -0.137950 0.707107 +vertex 0.815493 -0.162212 0.555570 +endloop +endfacet +facet normal 0.633158 -0.062361 -0.771506 +outer loop +vertex 0.555570 -0.000000 -0.831470 +vertex 0.707107 -0.000000 -0.707107 +vertex 0.693520 -0.137950 -0.707107 +endloop +endfacet +facet normal 0.633159 -0.062361 -0.771506 +outer loop +vertex 0.555570 -0.000000 -0.831470 +vertex 0.693520 -0.137950 -0.707107 +vertex 0.544895 -0.108387 -0.831470 +endloop +endfacet +facet normal 0.878613 -0.086536 0.469628 +outer loop +vertex 0.923880 -0.000000 0.382683 +vertex 0.831470 -0.000000 0.555570 +vertex 0.815493 -0.162212 0.555570 +endloop +endfacet +facet normal 0.878613 -0.086536 0.469628 +outer loop +vertex 0.923880 -0.000000 0.382683 +vertex 0.815493 -0.162212 0.555570 +vertex 0.906128 -0.180240 0.382683 +endloop +endfacet +facet normal 0.470889 -0.046378 -0.880972 +outer loop +vertex 0.382684 -0.000000 -0.923880 +vertex 0.555570 -0.000000 -0.831470 +vertex 0.544895 -0.108387 -0.831470 +endloop +endfacet +facet normal 0.470890 -0.046379 -0.880972 +outer loop +vertex 0.382684 -0.000000 -0.923880 +vertex 0.544895 -0.108387 -0.831470 +vertex 0.375330 -0.074658 -0.923880 +endloop +endfacet +facet normal 0.952718 -0.093835 0.289003 +outer loop +vertex 0.980785 -0.000000 0.195090 +vertex 0.923880 -0.000000 0.382683 +vertex 0.906128 -0.180240 0.382683 +endloop +endfacet +facet normal 0.952718 -0.093835 0.289003 +outer loop +vertex 0.980785 -0.000000 0.195090 +vertex 0.906128 -0.180240 0.382683 +vertex 0.961940 -0.191342 0.195090 +endloop +endfacet +facet normal 0.290166 -0.028579 -0.956550 +outer loop +vertex 0.195090 -0.000000 -0.980785 +vertex 0.382684 -0.000000 -0.923880 +vertex 0.375330 -0.074658 -0.923880 +endloop +endfacet +facet normal 0.290165 -0.028578 -0.956550 +outer loop +vertex 0.195090 -0.000000 -0.980785 +vertex 0.375330 -0.074658 -0.923880 +vertex 0.191342 -0.038061 -0.980785 +endloop +endfacet +facet normal 0.990438 -0.097550 0.097551 +outer loop +vertex 1.000000 -0.000000 0.000000 +vertex 0.980785 -0.000000 0.195090 +vertex 0.961940 -0.191342 0.195090 +endloop +endfacet +facet normal 0.990438 -0.097549 0.097551 +outer loop +vertex 1.000000 -0.000000 0.000000 +vertex 0.961940 -0.191342 0.195090 +vertex 0.980785 -0.195091 0.000000 +endloop +endfacet +facet normal 0.098014 -0.009653 0.995138 +outer loop +vertex 0.195091 -0.000000 0.980785 +vertex -0.000000 -0.000001 1.000000 +vertex 0.191342 -0.038061 0.980785 +endloop +endfacet +facet normal 0.098014 -0.009653 -0.995138 +outer loop +vertex 0.000000 -0.000000 -1.000000 +vertex 0.195090 -0.000000 -0.980785 +vertex 0.191342 -0.038061 -0.980785 +endloop +endfacet +facet normal 0.990438 -0.097549 -0.097551 +outer loop +vertex 0.980785 -0.000000 -0.195090 +vertex 1.000000 -0.000000 0.000000 +vertex 0.980785 -0.195091 0.000000 +endloop +endfacet +facet normal 0.990438 -0.097550 -0.097551 +outer loop +vertex 0.980785 -0.000000 -0.195090 +vertex 0.980785 -0.195091 0.000000 +vertex 0.961940 -0.191342 -0.195090 +endloop +endfacet +facet normal 0.290166 -0.028579 0.956550 +outer loop +vertex 0.382684 -0.000000 0.923880 +vertex 0.195091 -0.000000 0.980785 +vertex 0.191342 -0.038061 0.980785 +endloop +endfacet +facet normal 0.290167 -0.028579 0.956549 +outer loop +vertex 0.382684 -0.000000 0.923880 +vertex 0.191342 -0.038061 0.980785 +vertex 0.375331 -0.074658 0.923880 +endloop +endfacet +facet normal 0.952718 -0.093835 -0.289003 +outer loop +vertex 0.923880 -0.000000 -0.382683 +vertex 0.980785 -0.000000 -0.195090 +vertex 0.961940 -0.191342 -0.195090 +endloop +endfacet +facet normal 0.952718 -0.093835 -0.289003 +outer loop +vertex 0.923880 -0.000000 -0.382683 +vertex 0.961940 -0.191342 -0.195090 +vertex 0.906128 -0.180240 -0.382683 +endloop +endfacet +facet normal 0.470889 -0.046379 0.880973 +outer loop +vertex 0.555570 -0.000000 0.831470 +vertex 0.382684 -0.000000 0.923880 +vertex 0.375331 -0.074658 0.923880 +endloop +endfacet +facet normal 0.470890 -0.046379 0.880972 +outer loop +vertex 0.555570 -0.000000 0.831470 +vertex 0.375331 -0.074658 0.923880 +vertex 0.544895 -0.108387 0.831470 +endloop +endfacet +facet normal 0.878613 -0.086536 -0.469628 +outer loop +vertex 0.831470 -0.000000 -0.555570 +vertex 0.923880 -0.000000 -0.382683 +vertex 0.906128 -0.180240 -0.382683 +endloop +endfacet +facet normal 0.878613 -0.086536 -0.469628 +outer loop +vertex 0.831470 -0.000000 -0.555570 +vertex 0.906128 -0.180240 -0.382683 +vertex 0.815493 -0.162212 -0.555570 +endloop +endfacet +facet normal 0.633158 -0.062361 0.771506 +outer loop +vertex 0.707107 -0.000000 0.707107 +vertex 0.555570 -0.000000 0.831470 +vertex 0.544895 -0.108387 0.831470 +endloop +endfacet +facet normal 0.633159 -0.062360 0.771506 +outer loop +vertex 0.707107 -0.000000 0.707107 +vertex 0.544895 -0.108387 0.831470 +vertex 0.693520 -0.137950 0.707107 +endloop +endfacet +facet normal 0.770780 -0.075916 -0.632563 +outer loop +vertex 0.707107 -0.000000 -0.707107 +vertex 0.831470 -0.000000 -0.555570 +vertex 0.815493 -0.162212 -0.555570 +endloop +endfacet +facet normal 0.770780 -0.075915 -0.632562 +outer loop +vertex 0.707107 -0.000000 -0.707107 +vertex 0.815493 -0.162212 -0.555570 +vertex 0.693520 -0.137950 -0.707107 +endloop +endfacet +facet normal 0.952376 -0.288900 -0.097551 +outer loop +vertex 0.961940 -0.191342 -0.195090 +vertex 0.980785 -0.195091 0.000000 +vertex 0.923880 -0.382684 0.000000 +endloop +endfacet +facet normal 0.952376 -0.288901 -0.097551 +outer loop +vertex 0.961940 -0.191342 -0.195090 +vertex 0.923880 -0.382684 0.000000 +vertex 0.906127 -0.375331 -0.195090 +endloop +endfacet +facet normal 0.279015 -0.084639 0.956549 +outer loop +vertex 0.375331 -0.074658 0.923880 +vertex 0.191342 -0.038061 0.980785 +vertex 0.180240 -0.074658 0.980785 +endloop +endfacet +facet normal 0.279015 -0.084638 0.956549 +outer loop +vertex 0.375331 -0.074658 0.923880 +vertex 0.180240 -0.074658 0.980785 +vertex 0.353554 -0.146447 0.923880 +endloop +endfacet +facet normal 0.916106 -0.277898 -0.289003 +outer loop +vertex 0.906128 -0.180240 -0.382683 +vertex 0.961940 -0.191342 -0.195090 +vertex 0.906127 -0.375331 -0.195090 +endloop +endfacet +facet normal 0.916106 -0.277898 -0.289003 +outer loop +vertex 0.906128 -0.180240 -0.382683 +vertex 0.906127 -0.375331 -0.195090 +vertex 0.853554 -0.353554 -0.382683 +endloop +endfacet +facet normal 0.452793 -0.137353 0.880972 +outer loop +vertex 0.544895 -0.108387 0.831470 +vertex 0.375331 -0.074658 0.923880 +vertex 0.353554 -0.146447 0.923880 +endloop +endfacet +facet normal 0.452794 -0.137353 0.880972 +outer loop +vertex 0.544895 -0.108387 0.831470 +vertex 0.353554 -0.146447 0.923880 +vertex 0.513280 -0.212608 0.831470 +endloop +endfacet +facet normal 0.844849 -0.256281 -0.469628 +outer loop +vertex 0.815493 -0.162212 -0.555570 +vertex 0.906128 -0.180240 -0.382683 +vertex 0.853554 -0.353554 -0.382683 +endloop +endfacet +facet normal 0.844848 -0.256283 -0.469628 +outer loop +vertex 0.815493 -0.162212 -0.555570 +vertex 0.853554 -0.353554 -0.382683 +vertex 0.768178 -0.318190 -0.555570 +endloop +endfacet +facet normal 0.608827 -0.184686 0.771506 +outer loop +vertex 0.693520 -0.137950 0.707107 +vertex 0.544895 -0.108387 0.831470 +vertex 0.513280 -0.212608 0.831470 +endloop +endfacet +facet normal 0.608827 -0.184685 0.771506 +outer loop +vertex 0.693520 -0.137950 0.707107 +vertex 0.513280 -0.212608 0.831470 +vertex 0.653282 -0.270598 0.707107 +endloop +endfacet +facet normal 0.741159 -0.224829 -0.632562 +outer loop +vertex 0.693520 -0.137950 -0.707107 +vertex 0.815493 -0.162212 -0.555570 +vertex 0.768178 -0.318190 -0.555570 +endloop +endfacet +facet normal 0.741159 -0.224828 -0.632562 +outer loop +vertex 0.693520 -0.137950 -0.707107 +vertex 0.768178 -0.318190 -0.555570 +vertex 0.653282 -0.270598 -0.707107 +endloop +endfacet +facet normal 0.741159 -0.224828 0.632562 +outer loop +vertex 0.815493 -0.162212 0.555570 +vertex 0.693520 -0.137950 0.707107 +vertex 0.653282 -0.270598 0.707107 +endloop +endfacet +facet normal 0.741159 -0.224828 0.632562 +outer loop +vertex 0.815493 -0.162212 0.555570 +vertex 0.653282 -0.270598 0.707107 +vertex 0.768178 -0.318190 0.555570 +endloop +endfacet +facet normal 0.608826 -0.184685 -0.771506 +outer loop +vertex 0.544895 -0.108387 -0.831470 +vertex 0.693520 -0.137950 -0.707107 +vertex 0.653282 -0.270598 -0.707107 +endloop +endfacet +facet normal 0.608827 -0.184687 -0.771506 +outer loop +vertex 0.544895 -0.108387 -0.831470 +vertex 0.653282 -0.270598 -0.707107 +vertex 0.513280 -0.212608 -0.831470 +endloop +endfacet +facet normal 0.844848 -0.256282 0.469629 +outer loop +vertex 0.906128 -0.180240 0.382683 +vertex 0.815493 -0.162212 0.555570 +vertex 0.768178 -0.318190 0.555570 +endloop +endfacet +facet normal 0.844848 -0.256282 0.469629 +outer loop +vertex 0.906128 -0.180240 0.382683 +vertex 0.768178 -0.318190 0.555570 +vertex 0.853554 -0.353554 0.382683 +endloop +endfacet +facet normal 0.452794 -0.137354 -0.880972 +outer loop +vertex 0.375330 -0.074658 -0.923880 +vertex 0.544895 -0.108387 -0.831470 +vertex 0.513280 -0.212608 -0.831470 +endloop +endfacet +facet normal 0.452793 -0.137353 -0.880973 +outer loop +vertex 0.375330 -0.074658 -0.923880 +vertex 0.513280 -0.212608 -0.831470 +vertex 0.353553 -0.146447 -0.923880 +endloop +endfacet +facet normal 0.916106 -0.277897 0.289003 +outer loop +vertex 0.961940 -0.191342 0.195090 +vertex 0.906128 -0.180240 0.382683 +vertex 0.853554 -0.353554 0.382683 +endloop +endfacet +facet normal 0.916106 -0.277898 0.289003 +outer loop +vertex 0.961940 -0.191342 0.195090 +vertex 0.853554 -0.353554 0.382683 +vertex 0.906127 -0.375331 0.195090 +endloop +endfacet +facet normal 0.279015 -0.084638 -0.956549 +outer loop +vertex 0.191342 -0.038061 -0.980785 +vertex 0.375330 -0.074658 -0.923880 +vertex 0.353553 -0.146447 -0.923880 +endloop +endfacet +facet normal 0.279013 -0.084638 -0.956550 +outer loop +vertex 0.191342 -0.038061 -0.980785 +vertex 0.353553 -0.146447 -0.923880 +vertex 0.180240 -0.074658 -0.980785 +endloop +endfacet +facet normal 0.952376 -0.288901 0.097551 +outer loop +vertex 0.980785 -0.195091 0.000000 +vertex 0.961940 -0.191342 0.195090 +vertex 0.906127 -0.375331 0.195090 +endloop +endfacet +facet normal 0.952376 -0.288900 0.097551 +outer loop +vertex 0.980785 -0.195091 0.000000 +vertex 0.906127 -0.375331 0.195090 +vertex 0.923880 -0.382684 0.000000 +endloop +endfacet +facet normal 0.094244 -0.028589 0.995139 +outer loop +vertex 0.191342 -0.038061 0.980785 +vertex -0.000000 -0.000001 1.000000 +vertex 0.180240 -0.074658 0.980785 +endloop +endfacet +facet normal 0.094245 -0.028589 -0.995138 +outer loop +vertex 0.000000 -0.000000 -1.000000 +vertex 0.191342 -0.038061 -0.980785 +vertex 0.180240 -0.074658 -0.980785 +endloop +endfacet +facet normal 0.561098 -0.299913 -0.771506 +outer loop +vertex 0.513280 -0.212608 -0.831470 +vertex 0.653282 -0.270598 -0.707107 +vertex 0.587938 -0.392848 -0.707107 +endloop +endfacet +facet normal 0.561098 -0.299913 -0.771506 +outer loop +vertex 0.513280 -0.212608 -0.831470 +vertex 0.587938 -0.392848 -0.707107 +vertex 0.461940 -0.308659 -0.831470 +endloop +endfacet +facet normal 0.778617 -0.416179 0.469629 +outer loop +vertex 0.853554 -0.353554 0.382683 +vertex 0.768178 -0.318190 0.555570 +vertex 0.691342 -0.461940 0.555570 +endloop +endfacet +facet normal 0.778617 -0.416179 0.469629 +outer loop +vertex 0.853554 -0.353554 0.382683 +vertex 0.691342 -0.461940 0.555570 +vertex 0.768178 -0.513280 0.382683 +endloop +endfacet +facet normal 0.417297 -0.223050 -0.880972 +outer loop +vertex 0.353553 -0.146447 -0.923880 +vertex 0.513280 -0.212608 -0.831470 +vertex 0.461940 -0.308659 -0.831470 +endloop +endfacet +facet normal 0.417298 -0.223049 -0.880972 +outer loop +vertex 0.353553 -0.146447 -0.923880 +vertex 0.461940 -0.308659 -0.831470 +vertex 0.318190 -0.212608 -0.923880 +endloop +endfacet +facet normal 0.844288 -0.451282 0.289003 +outer loop +vertex 0.906127 -0.375331 0.195090 +vertex 0.853554 -0.353554 0.382683 +vertex 0.768178 -0.513280 0.382683 +endloop +endfacet +facet normal 0.844288 -0.451282 0.289003 +outer loop +vertex 0.906127 -0.375331 0.195090 +vertex 0.768178 -0.513280 0.382683 +vertex 0.815493 -0.544895 0.195090 +endloop +endfacet +facet normal 0.257143 -0.137445 -0.956549 +outer loop +vertex 0.180240 -0.074658 -0.980785 +vertex 0.353553 -0.146447 -0.923880 +vertex 0.318190 -0.212608 -0.923880 +endloop +endfacet +facet normal 0.257139 -0.137445 -0.956550 +outer loop +vertex 0.180240 -0.074658 -0.980785 +vertex 0.318190 -0.212608 -0.923880 +vertex 0.162212 -0.108387 -0.980785 +endloop +endfacet +facet normal 0.877715 -0.469149 0.097551 +outer loop +vertex 0.923880 -0.382684 0.000000 +vertex 0.906127 -0.375331 0.195090 +vertex 0.815493 -0.544895 0.195090 +endloop +endfacet +facet normal 0.877715 -0.469148 0.097551 +outer loop +vertex 0.923880 -0.382684 0.000000 +vertex 0.815493 -0.544895 0.195090 +vertex 0.831470 -0.555571 0.000000 +endloop +endfacet +facet normal 0.086857 -0.046426 0.995138 +outer loop +vertex 0.180240 -0.074658 0.980785 +vertex -0.000000 -0.000001 1.000000 +vertex 0.162212 -0.108387 0.980785 +endloop +endfacet +facet normal 0.086858 -0.046426 -0.995138 +outer loop +vertex 0.000000 -0.000000 -1.000000 +vertex 0.180240 -0.074658 -0.980785 +vertex 0.162212 -0.108387 -0.980785 +endloop +endfacet +facet normal 0.877714 -0.469149 -0.097551 +outer loop +vertex 0.906127 -0.375331 -0.195090 +vertex 0.923880 -0.382684 0.000000 +vertex 0.831470 -0.555571 0.000000 +endloop +endfacet +facet normal 0.877715 -0.469148 -0.097551 +outer loop +vertex 0.906127 -0.375331 -0.195090 +vertex 0.831470 -0.555571 0.000000 +vertex 0.815493 -0.544895 -0.195090 +endloop +endfacet +facet normal 0.257142 -0.137445 0.956549 +outer loop +vertex 0.353554 -0.146447 0.923880 +vertex 0.180240 -0.074658 0.980785 +vertex 0.162212 -0.108387 0.980785 +endloop +endfacet +facet normal 0.257142 -0.137445 0.956549 +outer loop +vertex 0.353554 -0.146447 0.923880 +vertex 0.162212 -0.108387 0.980785 +vertex 0.318190 -0.212608 0.923880 +endloop +endfacet +facet normal 0.844288 -0.451281 -0.289003 +outer loop +vertex 0.853554 -0.353554 -0.382683 +vertex 0.906127 -0.375331 -0.195090 +vertex 0.815493 -0.544895 -0.195090 +endloop +endfacet +facet normal 0.844288 -0.451282 -0.289003 +outer loop +vertex 0.853554 -0.353554 -0.382683 +vertex 0.815493 -0.544895 -0.195090 +vertex 0.768178 -0.513280 -0.382683 +endloop +endfacet +facet normal 0.417297 -0.223050 0.880972 +outer loop +vertex 0.513280 -0.212608 0.831470 +vertex 0.353554 -0.146447 0.923880 +vertex 0.318190 -0.212608 0.923880 +endloop +endfacet +facet normal 0.417297 -0.223050 0.880972 +outer loop +vertex 0.513280 -0.212608 0.831470 +vertex 0.318190 -0.212608 0.923880 +vertex 0.461940 -0.308659 0.831470 +endloop +endfacet +facet normal 0.778617 -0.416179 -0.469628 +outer loop +vertex 0.768178 -0.318190 -0.555570 +vertex 0.853554 -0.353554 -0.382683 +vertex 0.768178 -0.513280 -0.382683 +endloop +endfacet +facet normal 0.778617 -0.416180 -0.469628 +outer loop +vertex 0.768178 -0.318190 -0.555570 +vertex 0.768178 -0.513280 -0.382683 +vertex 0.691342 -0.461940 -0.555570 +endloop +endfacet +facet normal 0.561098 -0.299914 0.771505 +outer loop +vertex 0.653282 -0.270598 0.707107 +vertex 0.513280 -0.212608 0.831470 +vertex 0.461940 -0.308659 0.831470 +endloop +endfacet +facet normal 0.561098 -0.299913 0.771506 +outer loop +vertex 0.653282 -0.270598 0.707107 +vertex 0.461940 -0.308659 0.831470 +vertex 0.587938 -0.392848 0.707107 +endloop +endfacet +facet normal 0.683056 -0.365102 -0.632562 +outer loop +vertex 0.653282 -0.270598 -0.707107 +vertex 0.768178 -0.318190 -0.555570 +vertex 0.691342 -0.461940 -0.555570 +endloop +endfacet +facet normal 0.683056 -0.365101 -0.632562 +outer loop +vertex 0.653282 -0.270598 -0.707107 +vertex 0.691342 -0.461940 -0.555570 +vertex 0.587938 -0.392848 -0.707107 +endloop +endfacet +facet normal 0.683056 -0.365101 0.632562 +outer loop +vertex 0.768178 -0.318190 0.555570 +vertex 0.653282 -0.270598 0.707107 +vertex 0.587938 -0.392848 0.707107 +endloop +endfacet +facet normal 0.683056 -0.365102 0.632562 +outer loop +vertex 0.768178 -0.318190 0.555570 +vertex 0.587938 -0.392848 0.707107 +vertex 0.691342 -0.461940 0.555570 +endloop +endfacet +facet normal 0.225387 -0.184970 0.956549 +outer loop +vertex 0.318190 -0.212608 0.923880 +vertex 0.162212 -0.108387 0.980785 +vertex 0.137950 -0.137950 0.980785 +endloop +endfacet +facet normal 0.225387 -0.184970 0.956549 +outer loop +vertex 0.318190 -0.212608 0.923880 +vertex 0.137950 -0.137950 0.980785 +vertex 0.270598 -0.270599 0.923880 +endloop +endfacet +facet normal 0.740025 -0.607322 -0.289003 +outer loop +vertex 0.768178 -0.513280 -0.382683 +vertex 0.815493 -0.544895 -0.195090 +vertex 0.693520 -0.693520 -0.195090 +endloop +endfacet +facet normal 0.740025 -0.607322 -0.289003 +outer loop +vertex 0.768178 -0.513280 -0.382683 +vertex 0.693520 -0.693520 -0.195090 +vertex 0.653282 -0.653282 -0.382683 +endloop +endfacet +facet normal 0.365763 -0.300175 0.880972 +outer loop +vertex 0.461940 -0.308659 0.831470 +vertex 0.318190 -0.212608 0.923880 +vertex 0.270598 -0.270599 0.923880 +endloop +endfacet +facet normal 0.365764 -0.300175 0.880972 +outer loop +vertex 0.461940 -0.308659 0.831470 +vertex 0.270598 -0.270599 0.923880 +vertex 0.392848 -0.392848 0.831470 +endloop +endfacet +facet normal 0.682464 -0.560083 -0.469628 +outer loop +vertex 0.691342 -0.461940 -0.555570 +vertex 0.768178 -0.513280 -0.382683 +vertex 0.653282 -0.653282 -0.382683 +endloop +endfacet +facet normal 0.682463 -0.560083 -0.469629 +outer loop +vertex 0.691342 -0.461940 -0.555570 +vertex 0.653282 -0.653282 -0.382683 +vertex 0.587938 -0.587938 -0.555570 +endloop +endfacet +facet normal 0.491807 -0.403615 0.771506 +outer loop +vertex 0.587938 -0.392848 0.707107 +vertex 0.461940 -0.308659 0.831470 +vertex 0.392848 -0.392848 0.831470 +endloop +endfacet +facet normal 0.491806 -0.403615 0.771506 +outer loop +vertex 0.587938 -0.392848 0.707107 +vertex 0.392848 -0.392848 0.831470 +vertex 0.500000 -0.500000 0.707107 +endloop +endfacet +facet normal 0.598703 -0.491344 -0.632562 +outer loop +vertex 0.587938 -0.392848 -0.707107 +vertex 0.691342 -0.461940 -0.555570 +vertex 0.587938 -0.587938 -0.555570 +endloop +endfacet +facet normal 0.598704 -0.491343 -0.632562 +outer loop +vertex 0.587938 -0.392848 -0.707107 +vertex 0.587938 -0.587938 -0.555570 +vertex 0.500000 -0.500000 -0.707107 +endloop +endfacet +facet normal 0.598704 -0.491344 0.632563 +outer loop +vertex 0.691342 -0.461940 0.555570 +vertex 0.587938 -0.392848 0.707107 +vertex 0.500000 -0.500000 0.707107 +endloop +endfacet +facet normal 0.598704 -0.491344 0.632562 +outer loop +vertex 0.691342 -0.461940 0.555570 +vertex 0.500000 -0.500000 0.707107 +vertex 0.587938 -0.587938 0.555570 +endloop +endfacet +facet normal 0.491806 -0.403615 -0.771506 +outer loop +vertex 0.461940 -0.308659 -0.831470 +vertex 0.587938 -0.392848 -0.707107 +vertex 0.500000 -0.500000 -0.707107 +endloop +endfacet +facet normal 0.491807 -0.403615 -0.771506 +outer loop +vertex 0.461940 -0.308659 -0.831470 +vertex 0.500000 -0.500000 -0.707107 +vertex 0.392848 -0.392848 -0.831470 +endloop +endfacet +facet normal 0.682463 -0.560084 0.469628 +outer loop +vertex 0.768178 -0.513280 0.382683 +vertex 0.691342 -0.461940 0.555570 +vertex 0.587938 -0.587938 0.555570 +endloop +endfacet +facet normal 0.682463 -0.560082 0.469629 +outer loop +vertex 0.768178 -0.513280 0.382683 +vertex 0.587938 -0.587938 0.555570 +vertex 0.653282 -0.653282 0.382683 +endloop +endfacet +facet normal 0.365763 -0.300175 -0.880972 +outer loop +vertex 0.318190 -0.212608 -0.923880 +vertex 0.461940 -0.308659 -0.831470 +vertex 0.392848 -0.392848 -0.831470 +endloop +endfacet +facet normal 0.365765 -0.300174 -0.880972 +outer loop +vertex 0.318190 -0.212608 -0.923880 +vertex 0.392848 -0.392848 -0.831470 +vertex 0.270598 -0.270598 -0.923880 +endloop +endfacet +facet normal 0.740025 -0.607322 0.289003 +outer loop +vertex 0.815493 -0.544895 0.195090 +vertex 0.768178 -0.513280 0.382683 +vertex 0.653282 -0.653282 0.382683 +endloop +endfacet +facet normal 0.740025 -0.607322 0.289003 +outer loop +vertex 0.815493 -0.544895 0.195090 +vertex 0.653282 -0.653282 0.382683 +vertex 0.693520 -0.693520 0.195090 +endloop +endfacet +facet normal 0.225386 -0.184970 -0.956550 +outer loop +vertex 0.162212 -0.108387 -0.980785 +vertex 0.318190 -0.212608 -0.923880 +vertex 0.270598 -0.270598 -0.923880 +endloop +endfacet +facet normal 0.225389 -0.184970 -0.956549 +outer loop +vertex 0.162212 -0.108387 -0.980785 +vertex 0.270598 -0.270598 -0.923880 +vertex 0.137950 -0.137950 -0.980785 +endloop +endfacet +facet normal 0.769324 -0.631368 0.097551 +outer loop +vertex 0.831470 -0.555571 0.000000 +vertex 0.815493 -0.544895 0.195090 +vertex 0.693520 -0.693520 0.195090 +endloop +endfacet +facet normal 0.769323 -0.631368 0.097551 +outer loop +vertex 0.831470 -0.555571 0.000000 +vertex 0.693520 -0.693520 0.195090 +vertex 0.707107 -0.707107 0.000000 +endloop +endfacet +facet normal 0.076133 -0.062479 0.995138 +outer loop +vertex 0.162212 -0.108387 0.980785 +vertex -0.000000 -0.000001 1.000000 +vertex 0.137950 -0.137950 0.980785 +endloop +endfacet +facet normal 0.076131 -0.062479 -0.995138 +outer loop +vertex 0.000000 -0.000000 -1.000000 +vertex 0.162212 -0.108387 -0.980785 +vertex 0.137950 -0.137950 -0.980785 +endloop +endfacet +facet normal 0.769324 -0.631368 -0.097551 +outer loop +vertex 0.815493 -0.544895 -0.195090 +vertex 0.831470 -0.555571 0.000000 +vertex 0.707107 -0.707107 0.000000 +endloop +endfacet +facet normal 0.769323 -0.631368 -0.097551 +outer loop +vertex 0.815493 -0.544895 -0.195090 +vertex 0.707107 -0.707107 0.000000 +vertex 0.693520 -0.693520 -0.195090 +endloop +endfacet +facet normal 0.560083 -0.682463 0.469629 +outer loop +vertex 0.653282 -0.653282 0.382683 +vertex 0.587938 -0.587938 0.555570 +vertex 0.461940 -0.691342 0.555570 +endloop +endfacet +facet normal 0.560083 -0.682463 0.469629 +outer loop +vertex 0.653282 -0.653282 0.382683 +vertex 0.461940 -0.691342 0.555570 +vertex 0.513280 -0.768178 0.382683 +endloop +endfacet +facet normal 0.300175 -0.365764 -0.880972 +outer loop +vertex 0.270598 -0.270598 -0.923880 +vertex 0.392848 -0.392848 -0.831470 +vertex 0.308658 -0.461940 -0.831470 +endloop +endfacet +facet normal 0.300173 -0.365764 -0.880973 +outer loop +vertex 0.270598 -0.270598 -0.923880 +vertex 0.308658 -0.461940 -0.831470 +vertex 0.212608 -0.318190 -0.923880 +endloop +endfacet +facet normal 0.607323 -0.740025 0.289003 +outer loop +vertex 0.693520 -0.693520 0.195090 +vertex 0.653282 -0.653282 0.382683 +vertex 0.513280 -0.768178 0.382683 +endloop +endfacet +facet normal 0.607322 -0.740025 0.289003 +outer loop +vertex 0.693520 -0.693520 0.195090 +vertex 0.513280 -0.768178 0.382683 +vertex 0.544895 -0.815493 0.195090 +endloop +endfacet +facet normal 0.184969 -0.225387 -0.956550 +outer loop +vertex 0.137950 -0.137950 -0.980785 +vertex 0.270598 -0.270598 -0.923880 +vertex 0.212608 -0.318190 -0.923880 +endloop +endfacet +facet normal 0.184971 -0.225387 -0.956549 +outer loop +vertex 0.137950 -0.137950 -0.980785 +vertex 0.212608 -0.318190 -0.923880 +vertex 0.108386 -0.162212 -0.980785 +endloop +endfacet +facet normal 0.631367 -0.769324 0.097550 +outer loop +vertex 0.707107 -0.707107 0.000000 +vertex 0.693520 -0.693520 0.195090 +vertex 0.544895 -0.815493 0.195090 +endloop +endfacet +facet normal 0.631368 -0.769323 0.097551 +outer loop +vertex 0.707107 -0.707107 0.000000 +vertex 0.544895 -0.815493 0.195090 +vertex 0.555570 -0.831470 0.000000 +endloop +endfacet +facet normal 0.062481 -0.076131 0.995138 +outer loop +vertex 0.137950 -0.137950 0.980785 +vertex -0.000000 -0.000001 1.000000 +vertex 0.108386 -0.162212 0.980785 +endloop +endfacet +facet normal 0.062478 -0.076131 -0.995139 +outer loop +vertex 0.000000 -0.000000 -1.000000 +vertex 0.137950 -0.137950 -0.980785 +vertex 0.108386 -0.162212 -0.980785 +endloop +endfacet +facet normal 0.631368 -0.769324 -0.097551 +outer loop +vertex 0.693520 -0.693520 -0.195090 +vertex 0.707107 -0.707107 0.000000 +vertex 0.555570 -0.831470 0.000000 +endloop +endfacet +facet normal 0.631368 -0.769324 -0.097551 +outer loop +vertex 0.693520 -0.693520 -0.195090 +vertex 0.555570 -0.831470 0.000000 +vertex 0.544895 -0.815493 -0.195090 +endloop +endfacet +facet normal 0.184969 -0.225387 0.956550 +outer loop +vertex 0.270598 -0.270599 0.923880 +vertex 0.137950 -0.137950 0.980785 +vertex 0.108386 -0.162212 0.980785 +endloop +endfacet +facet normal 0.184969 -0.225387 0.956550 +outer loop +vertex 0.270598 -0.270599 0.923880 +vertex 0.108386 -0.162212 0.980785 +vertex 0.212608 -0.318190 0.923880 +endloop +endfacet +facet normal 0.607322 -0.740025 -0.289003 +outer loop +vertex 0.653282 -0.653282 -0.382683 +vertex 0.693520 -0.693520 -0.195090 +vertex 0.544895 -0.815493 -0.195090 +endloop +endfacet +facet normal 0.607322 -0.740025 -0.289003 +outer loop +vertex 0.653282 -0.653282 -0.382683 +vertex 0.544895 -0.815493 -0.195090 +vertex 0.513280 -0.768178 -0.382683 +endloop +endfacet +facet normal 0.300174 -0.365764 0.880972 +outer loop +vertex 0.392848 -0.392848 0.831470 +vertex 0.270598 -0.270599 0.923880 +vertex 0.212608 -0.318190 0.923880 +endloop +endfacet +facet normal 0.300174 -0.365764 0.880972 +outer loop +vertex 0.392848 -0.392848 0.831470 +vertex 0.212608 -0.318190 0.923880 +vertex 0.308658 -0.461940 0.831470 +endloop +endfacet +facet normal 0.560083 -0.682463 -0.469628 +outer loop +vertex 0.587938 -0.587938 -0.555570 +vertex 0.653282 -0.653282 -0.382683 +vertex 0.513280 -0.768178 -0.382683 +endloop +endfacet +facet normal 0.560083 -0.682463 -0.469629 +outer loop +vertex 0.587938 -0.587938 -0.555570 +vertex 0.513280 -0.768178 -0.382683 +vertex 0.461940 -0.691342 -0.555570 +endloop +endfacet +facet normal 0.403615 -0.491806 0.771506 +outer loop +vertex 0.500000 -0.500000 0.707107 +vertex 0.392848 -0.392848 0.831470 +vertex 0.308658 -0.461940 0.831470 +endloop +endfacet +facet normal 0.403615 -0.491807 0.771506 +outer loop +vertex 0.500000 -0.500000 0.707107 +vertex 0.308658 -0.461940 0.831470 +vertex 0.392848 -0.587938 0.707107 +endloop +endfacet +facet normal 0.491343 -0.598704 -0.632563 +outer loop +vertex 0.500000 -0.500000 -0.707107 +vertex 0.587938 -0.587938 -0.555570 +vertex 0.461940 -0.691342 -0.555570 +endloop +endfacet +facet normal 0.491344 -0.598704 -0.632562 +outer loop +vertex 0.500000 -0.500000 -0.707107 +vertex 0.461940 -0.691342 -0.555570 +vertex 0.392848 -0.587938 -0.707107 +endloop +endfacet +facet normal 0.491343 -0.598704 0.632563 +outer loop +vertex 0.587938 -0.587938 0.555570 +vertex 0.500000 -0.500000 0.707107 +vertex 0.392848 -0.587938 0.707107 +endloop +endfacet +facet normal 0.491343 -0.598704 0.632562 +outer loop +vertex 0.587938 -0.587938 0.555570 +vertex 0.392848 -0.587938 0.707107 +vertex 0.461940 -0.691342 0.555570 +endloop +endfacet +facet normal 0.403616 -0.491806 -0.771506 +outer loop +vertex 0.392848 -0.392848 -0.831470 +vertex 0.500000 -0.500000 -0.707107 +vertex 0.392848 -0.587938 -0.707107 +endloop +endfacet +facet normal 0.403615 -0.491806 -0.771506 +outer loop +vertex 0.392848 -0.392848 -0.831470 +vertex 0.392848 -0.587938 -0.707107 +vertex 0.308658 -0.461940 -0.831470 +endloop +endfacet +facet normal 0.451281 -0.844288 -0.289004 +outer loop +vertex 0.513280 -0.768178 -0.382683 +vertex 0.544895 -0.815493 -0.195090 +vertex 0.375330 -0.906128 -0.195090 +endloop +endfacet +facet normal 0.451281 -0.844288 -0.289003 +outer loop +vertex 0.513280 -0.768178 -0.382683 +vertex 0.375330 -0.906128 -0.195090 +vertex 0.353553 -0.853554 -0.382683 +endloop +endfacet +facet normal 0.223050 -0.417297 0.880972 +outer loop +vertex 0.308658 -0.461940 0.831470 +vertex 0.212608 -0.318190 0.923880 +vertex 0.146447 -0.353554 0.923880 +endloop +endfacet +facet normal 0.223050 -0.417297 0.880972 +outer loop +vertex 0.308658 -0.461940 0.831470 +vertex 0.146447 -0.353554 0.923880 +vertex 0.212608 -0.513280 0.831470 +endloop +endfacet +facet normal 0.416179 -0.778617 -0.469628 +outer loop +vertex 0.461940 -0.691342 -0.555570 +vertex 0.513280 -0.768178 -0.382683 +vertex 0.353553 -0.853554 -0.382683 +endloop +endfacet +facet normal 0.416179 -0.778617 -0.469629 +outer loop +vertex 0.461940 -0.691342 -0.555570 +vertex 0.353553 -0.853554 -0.382683 +vertex 0.318190 -0.768178 -0.555570 +endloop +endfacet +facet normal 0.299913 -0.561098 0.771506 +outer loop +vertex 0.392848 -0.587938 0.707107 +vertex 0.308658 -0.461940 0.831470 +vertex 0.212608 -0.513280 0.831470 +endloop +endfacet +facet normal 0.299913 -0.561098 0.771506 +outer loop +vertex 0.392848 -0.587938 0.707107 +vertex 0.212608 -0.513280 0.831470 +vertex 0.270598 -0.653282 0.707107 +endloop +endfacet +facet normal 0.365101 -0.683057 -0.632562 +outer loop +vertex 0.392848 -0.587938 -0.707107 +vertex 0.461940 -0.691342 -0.555570 +vertex 0.318190 -0.768178 -0.555570 +endloop +endfacet +facet normal 0.365100 -0.683057 -0.632563 +outer loop +vertex 0.392848 -0.587938 -0.707107 +vertex 0.318190 -0.768178 -0.555570 +vertex 0.270598 -0.653282 -0.707107 +endloop +endfacet +facet normal 0.365101 -0.683056 0.632562 +outer loop +vertex 0.461940 -0.691342 0.555570 +vertex 0.392848 -0.587938 0.707107 +vertex 0.270598 -0.653282 0.707107 +endloop +endfacet +facet normal 0.365101 -0.683057 0.632562 +outer loop +vertex 0.461940 -0.691342 0.555570 +vertex 0.270598 -0.653282 0.707107 +vertex 0.318190 -0.768178 0.555570 +endloop +endfacet +facet normal 0.299912 -0.561098 -0.771506 +outer loop +vertex 0.308658 -0.461940 -0.831470 +vertex 0.392848 -0.587938 -0.707107 +vertex 0.270598 -0.653282 -0.707107 +endloop +endfacet +facet normal 0.299913 -0.561098 -0.771506 +outer loop +vertex 0.308658 -0.461940 -0.831470 +vertex 0.270598 -0.653282 -0.707107 +vertex 0.212608 -0.513280 -0.831470 +endloop +endfacet +facet normal 0.416179 -0.778617 0.469629 +outer loop +vertex 0.513280 -0.768178 0.382683 +vertex 0.461940 -0.691342 0.555570 +vertex 0.318190 -0.768178 0.555570 +endloop +endfacet +facet normal 0.416179 -0.778617 0.469629 +outer loop +vertex 0.513280 -0.768178 0.382683 +vertex 0.318190 -0.768178 0.555570 +vertex 0.353553 -0.853554 0.382683 +endloop +endfacet +facet normal 0.223050 -0.417297 -0.880972 +outer loop +vertex 0.212608 -0.318190 -0.923880 +vertex 0.308658 -0.461940 -0.831470 +vertex 0.212608 -0.513280 -0.831470 +endloop +endfacet +facet normal 0.223049 -0.417297 -0.880972 +outer loop +vertex 0.212608 -0.318190 -0.923880 +vertex 0.212608 -0.513280 -0.831470 +vertex 0.146447 -0.353554 -0.923880 +endloop +endfacet +facet normal 0.451281 -0.844288 0.289003 +outer loop +vertex 0.544895 -0.815493 0.195090 +vertex 0.513280 -0.768178 0.382683 +vertex 0.353553 -0.853554 0.382683 +endloop +endfacet +facet normal 0.451281 -0.844288 0.289003 +outer loop +vertex 0.544895 -0.815493 0.195090 +vertex 0.353553 -0.853554 0.382683 +vertex 0.375330 -0.906128 0.195090 +endloop +endfacet +facet normal 0.137446 -0.257141 -0.956549 +outer loop +vertex 0.108386 -0.162212 -0.980785 +vertex 0.212608 -0.318190 -0.923880 +vertex 0.146447 -0.353554 -0.923880 +endloop +endfacet +facet normal 0.137446 -0.257142 -0.956549 +outer loop +vertex 0.108386 -0.162212 -0.980785 +vertex 0.146447 -0.353554 -0.923880 +vertex 0.074658 -0.180240 -0.980785 +endloop +endfacet +facet normal 0.469148 -0.877715 0.097550 +outer loop +vertex 0.555570 -0.831470 0.000000 +vertex 0.544895 -0.815493 0.195090 +vertex 0.375330 -0.906128 0.195090 +endloop +endfacet +facet normal 0.469148 -0.877715 0.097552 +outer loop +vertex 0.555570 -0.831470 0.000000 +vertex 0.375330 -0.906128 0.195090 +vertex 0.382683 -0.923880 0.000000 +endloop +endfacet +facet normal 0.046424 -0.086858 0.995138 +outer loop +vertex 0.108386 -0.162212 0.980785 +vertex -0.000000 -0.000001 1.000000 +vertex 0.074658 -0.180240 0.980785 +endloop +endfacet +facet normal 0.046428 -0.086857 -0.995138 +outer loop +vertex 0.000000 -0.000000 -1.000000 +vertex 0.108386 -0.162212 -0.980785 +vertex 0.074658 -0.180240 -0.980785 +endloop +endfacet +facet normal 0.469148 -0.877715 -0.097551 +outer loop +vertex 0.544895 -0.815493 -0.195090 +vertex 0.555570 -0.831470 0.000000 +vertex 0.382683 -0.923880 0.000000 +endloop +endfacet +facet normal 0.469148 -0.877715 -0.097551 +outer loop +vertex 0.544895 -0.815493 -0.195090 +vertex 0.382683 -0.923880 0.000000 +vertex 0.375330 -0.906128 -0.195090 +endloop +endfacet +facet normal 0.137445 -0.257142 0.956550 +outer loop +vertex 0.212608 -0.318190 0.923880 +vertex 0.108386 -0.162212 0.980785 +vertex 0.074658 -0.180240 0.980785 +endloop +endfacet +facet normal 0.137445 -0.257142 0.956549 +outer loop +vertex 0.212608 -0.318190 0.923880 +vertex 0.074658 -0.180240 0.980785 +vertex 0.146447 -0.353554 0.923880 +endloop +endfacet +facet normal 0.137354 -0.452794 -0.880972 +outer loop +vertex 0.146447 -0.353554 -0.923880 +vertex 0.212608 -0.513280 -0.831470 +vertex 0.108386 -0.544895 -0.831470 +endloop +endfacet +facet normal 0.137353 -0.452794 -0.880972 +outer loop +vertex 0.146447 -0.353554 -0.923880 +vertex 0.108386 -0.544895 -0.831470 +vertex 0.074658 -0.375331 -0.923880 +endloop +endfacet +facet normal 0.277898 -0.916106 0.289004 +outer loop +vertex 0.375330 -0.906128 0.195090 +vertex 0.353553 -0.853554 0.382683 +vertex 0.180240 -0.906128 0.382683 +endloop +endfacet +facet normal 0.277898 -0.916106 0.289002 +outer loop +vertex 0.375330 -0.906128 0.195090 +vertex 0.180240 -0.906128 0.382683 +vertex 0.191342 -0.961940 0.195090 +endloop +endfacet +facet normal 0.084637 -0.279015 -0.956550 +outer loop +vertex 0.074658 -0.180240 -0.980785 +vertex 0.146447 -0.353554 -0.923880 +vertex 0.074658 -0.375331 -0.923880 +endloop +endfacet +facet normal 0.084642 -0.279015 -0.956549 +outer loop +vertex 0.074658 -0.180240 -0.980785 +vertex 0.074658 -0.375331 -0.923880 +vertex 0.038060 -0.191342 -0.980785 +endloop +endfacet +facet normal 0.288900 -0.952376 0.097552 +outer loop +vertex 0.382683 -0.923880 0.000000 +vertex 0.375330 -0.906128 0.195090 +vertex 0.191342 -0.961940 0.195090 +endloop +endfacet +facet normal 0.288900 -0.952376 0.097552 +outer loop +vertex 0.382683 -0.923880 0.000000 +vertex 0.191342 -0.961940 0.195090 +vertex 0.195090 -0.980786 0.000000 +endloop +endfacet +facet normal 0.028590 -0.094246 0.995138 +outer loop +vertex 0.074658 -0.180240 0.980785 +vertex -0.000000 -0.000001 1.000000 +vertex 0.038060 -0.191342 0.980785 +endloop +endfacet +facet normal 0.028588 -0.094246 -0.995138 +outer loop +vertex 0.000000 -0.000000 -1.000000 +vertex 0.074658 -0.180240 -0.980785 +vertex 0.038060 -0.191342 -0.980785 +endloop +endfacet +facet normal 0.288900 -0.952376 -0.097552 +outer loop +vertex 0.375330 -0.906128 -0.195090 +vertex 0.382683 -0.923880 0.000000 +vertex 0.195090 -0.980786 0.000000 +endloop +endfacet +facet normal 0.288900 -0.952376 -0.097552 +outer loop +vertex 0.375330 -0.906128 -0.195090 +vertex 0.195090 -0.980786 0.000000 +vertex 0.191342 -0.961940 -0.195090 +endloop +endfacet +facet normal 0.084640 -0.279015 0.956549 +outer loop +vertex 0.146447 -0.353554 0.923880 +vertex 0.074658 -0.180240 0.980785 +vertex 0.038060 -0.191342 0.980785 +endloop +endfacet +facet normal 0.084639 -0.279015 0.956549 +outer loop +vertex 0.146447 -0.353554 0.923880 +vertex 0.038060 -0.191342 0.980785 +vertex 0.074658 -0.375331 0.923880 +endloop +endfacet +facet normal 0.277898 -0.916106 -0.289003 +outer loop +vertex 0.353553 -0.853554 -0.382683 +vertex 0.375330 -0.906128 -0.195090 +vertex 0.191342 -0.961940 -0.195090 +endloop +endfacet +facet normal 0.277898 -0.916106 -0.289003 +outer loop +vertex 0.353553 -0.853554 -0.382683 +vertex 0.191342 -0.961940 -0.195090 +vertex 0.180240 -0.906128 -0.382683 +endloop +endfacet +facet normal 0.137352 -0.452794 0.880972 +outer loop +vertex 0.212608 -0.513280 0.831470 +vertex 0.146447 -0.353554 0.923880 +vertex 0.074658 -0.375331 0.923880 +endloop +endfacet +facet normal 0.137353 -0.452793 0.880972 +outer loop +vertex 0.212608 -0.513280 0.831470 +vertex 0.074658 -0.375331 0.923880 +vertex 0.108386 -0.544896 0.831470 +endloop +endfacet +facet normal 0.256282 -0.844848 -0.469629 +outer loop +vertex 0.318190 -0.768178 -0.555570 +vertex 0.353553 -0.853554 -0.382683 +vertex 0.180240 -0.906128 -0.382683 +endloop +endfacet +facet normal 0.256281 -0.844848 -0.469629 +outer loop +vertex 0.318190 -0.768178 -0.555570 +vertex 0.180240 -0.906128 -0.382683 +vertex 0.162212 -0.815493 -0.555570 +endloop +endfacet +facet normal 0.184686 -0.608827 0.771506 +outer loop +vertex 0.270598 -0.653282 0.707107 +vertex 0.212608 -0.513280 0.831470 +vertex 0.108386 -0.544896 0.831470 +endloop +endfacet +facet normal 0.184686 -0.608827 0.771506 +outer loop +vertex 0.270598 -0.653282 0.707107 +vertex 0.108386 -0.544896 0.831470 +vertex 0.137950 -0.693520 0.707107 +endloop +endfacet +facet normal 0.224828 -0.741160 -0.632562 +outer loop +vertex 0.270598 -0.653282 -0.707107 +vertex 0.318190 -0.768178 -0.555570 +vertex 0.162212 -0.815493 -0.555570 +endloop +endfacet +facet normal 0.224828 -0.741159 -0.632562 +outer loop +vertex 0.270598 -0.653282 -0.707107 +vertex 0.162212 -0.815493 -0.555570 +vertex 0.137950 -0.693520 -0.707107 +endloop +endfacet +facet normal 0.224828 -0.741159 0.632562 +outer loop +vertex 0.318190 -0.768178 0.555570 +vertex 0.270598 -0.653282 0.707107 +vertex 0.137950 -0.693520 0.707107 +endloop +endfacet +facet normal 0.224828 -0.741160 0.632562 +outer loop +vertex 0.318190 -0.768178 0.555570 +vertex 0.137950 -0.693520 0.707107 +vertex 0.162212 -0.815493 0.555570 +endloop +endfacet +facet normal 0.184686 -0.608827 -0.771506 +outer loop +vertex 0.212608 -0.513280 -0.831470 +vertex 0.270598 -0.653282 -0.707107 +vertex 0.137950 -0.693520 -0.707107 +endloop +endfacet +facet normal 0.184685 -0.608827 -0.771506 +outer loop +vertex 0.212608 -0.513280 -0.831470 +vertex 0.137950 -0.693520 -0.707107 +vertex 0.108386 -0.544895 -0.831470 +endloop +endfacet +facet normal 0.256281 -0.844848 0.469629 +outer loop +vertex 0.353553 -0.853554 0.382683 +vertex 0.318190 -0.768178 0.555570 +vertex 0.162212 -0.815493 0.555570 +endloop +endfacet +facet normal 0.256282 -0.844848 0.469629 +outer loop +vertex 0.353553 -0.853554 0.382683 +vertex 0.162212 -0.815493 0.555570 +vertex 0.180240 -0.906128 0.382683 +endloop +endfacet +facet normal 0.086536 -0.878613 -0.469628 +outer loop +vertex 0.162212 -0.815493 -0.555570 +vertex 0.180240 -0.906128 -0.382683 +vertex 0.000000 -0.923880 -0.382683 +endloop +endfacet +facet normal 0.086535 -0.878613 -0.469629 +outer loop +vertex 0.162212 -0.815493 -0.555570 +vertex 0.000000 -0.923880 -0.382683 +vertex -0.000000 -0.831470 -0.555570 +endloop +endfacet +facet normal 0.062361 -0.633159 0.771506 +outer loop +vertex 0.137950 -0.693520 0.707107 +vertex 0.108386 -0.544896 0.831470 +vertex 0.000000 -0.555571 0.831470 +endloop +endfacet +facet normal 0.062361 -0.633159 0.771506 +outer loop +vertex 0.137950 -0.693520 0.707107 +vertex 0.000000 -0.555571 0.831470 +vertex -0.000000 -0.707107 0.707107 +endloop +endfacet +facet normal 0.075915 -0.770780 -0.632563 +outer loop +vertex 0.137950 -0.693520 -0.707107 +vertex 0.162212 -0.815493 -0.555570 +vertex -0.000000 -0.831470 -0.555570 +endloop +endfacet +facet normal 0.075915 -0.770780 -0.632562 +outer loop +vertex 0.137950 -0.693520 -0.707107 +vertex -0.000000 -0.831470 -0.555570 +vertex -0.000000 -0.707107 -0.707107 +endloop +endfacet +facet normal 0.075915 -0.770781 0.632561 +outer loop +vertex 0.162212 -0.815493 0.555570 +vertex 0.137950 -0.693520 0.707107 +vertex -0.000000 -0.707107 0.707107 +endloop +endfacet +facet normal 0.075915 -0.770780 0.632563 +outer loop +vertex 0.162212 -0.815493 0.555570 +vertex -0.000000 -0.707107 0.707107 +vertex -0.000000 -0.831470 0.555570 +endloop +endfacet +facet normal 0.062361 -0.633158 -0.771506 +outer loop +vertex 0.108386 -0.544895 -0.831470 +vertex 0.137950 -0.693520 -0.707107 +vertex -0.000000 -0.707107 -0.707107 +endloop +endfacet +facet normal 0.062360 -0.633159 -0.771506 +outer loop +vertex 0.108386 -0.544895 -0.831470 +vertex -0.000000 -0.707107 -0.707107 +vertex -0.000000 -0.555570 -0.831470 +endloop +endfacet +facet normal 0.086535 -0.878613 0.469629 +outer loop +vertex 0.180240 -0.906128 0.382683 +vertex 0.162212 -0.815493 0.555570 +vertex -0.000000 -0.831470 0.555570 +endloop +endfacet +facet normal 0.086536 -0.878613 0.469629 +outer loop +vertex 0.180240 -0.906128 0.382683 +vertex -0.000000 -0.831470 0.555570 +vertex 0.000000 -0.923880 0.382683 +endloop +endfacet +facet normal 0.046378 -0.470890 -0.880972 +outer loop +vertex 0.074658 -0.375331 -0.923880 +vertex 0.108386 -0.544895 -0.831470 +vertex -0.000000 -0.555570 -0.831470 +endloop +endfacet +facet normal 0.046380 -0.470890 -0.880972 +outer loop +vertex 0.074658 -0.375331 -0.923880 +vertex -0.000000 -0.555570 -0.831470 +vertex 0.000000 -0.382684 -0.923880 +endloop +endfacet +facet normal 0.093835 -0.952718 0.289004 +outer loop +vertex 0.191342 -0.961940 0.195090 +vertex 0.180240 -0.906128 0.382683 +vertex 0.000000 -0.923880 0.382683 +endloop +endfacet +facet normal 0.093834 -0.952718 0.289003 +outer loop +vertex 0.191342 -0.961940 0.195090 +vertex 0.000000 -0.923880 0.382683 +vertex -0.000000 -0.980785 0.195090 +endloop +endfacet +facet normal 0.028579 -0.290166 -0.956550 +outer loop +vertex 0.038060 -0.191342 -0.980785 +vertex 0.074658 -0.375331 -0.923880 +vertex 0.000000 -0.382684 -0.923880 +endloop +endfacet +facet normal 0.028576 -0.290166 -0.956550 +outer loop +vertex 0.038060 -0.191342 -0.980785 +vertex 0.000000 -0.382684 -0.923880 +vertex 0.000000 -0.195091 -0.980785 +endloop +endfacet +facet normal 0.097549 -0.990438 0.097551 +outer loop +vertex 0.195090 -0.980786 0.000000 +vertex 0.191342 -0.961940 0.195090 +vertex -0.000000 -0.980785 0.195090 +endloop +endfacet +facet normal 0.097549 -0.990438 0.097551 +outer loop +vertex 0.195090 -0.980786 0.000000 +vertex -0.000000 -0.980785 0.195090 +vertex -0.000000 -1.000000 0.000000 +endloop +endfacet +facet normal 0.009654 -0.098013 0.995138 +outer loop +vertex 0.038060 -0.191342 0.980785 +vertex -0.000000 -0.000001 1.000000 +vertex -0.000000 -0.195091 0.980785 +endloop +endfacet +facet normal 0.009653 -0.098012 -0.995138 +outer loop +vertex 0.000000 -0.000000 -1.000000 +vertex 0.038060 -0.191342 -0.980785 +vertex 0.000000 -0.195091 -0.980785 +endloop +endfacet +facet normal 0.097549 -0.990438 -0.097551 +outer loop +vertex 0.191342 -0.961940 -0.195090 +vertex 0.195090 -0.980786 0.000000 +vertex -0.000000 -1.000000 0.000000 +endloop +endfacet +facet normal 0.097549 -0.990438 -0.097551 +outer loop +vertex 0.191342 -0.961940 -0.195090 +vertex -0.000000 -1.000000 0.000000 +vertex -0.000000 -0.980785 -0.195090 +endloop +endfacet +facet normal 0.028577 -0.290166 0.956550 +outer loop +vertex 0.074658 -0.375331 0.923880 +vertex 0.038060 -0.191342 0.980785 +vertex -0.000000 -0.195091 0.980785 +endloop +endfacet +facet normal 0.028578 -0.290166 0.956549 +outer loop +vertex 0.074658 -0.375331 0.923880 +vertex -0.000000 -0.195091 0.980785 +vertex 0.000000 -0.382684 0.923880 +endloop +endfacet +facet normal 0.093834 -0.952718 -0.289004 +outer loop +vertex 0.180240 -0.906128 -0.382683 +vertex 0.191342 -0.961940 -0.195090 +vertex -0.000000 -0.980785 -0.195090 +endloop +endfacet +facet normal 0.093835 -0.952718 -0.289003 +outer loop +vertex 0.180240 -0.906128 -0.382683 +vertex -0.000000 -0.980785 -0.195090 +vertex 0.000000 -0.923880 -0.382683 +endloop +endfacet +facet normal 0.046379 -0.470889 0.880972 +outer loop +vertex 0.108386 -0.544896 0.831470 +vertex 0.074658 -0.375331 0.923880 +vertex 0.000000 -0.382684 0.923880 +endloop +endfacet +facet normal 0.046379 -0.470889 0.880972 +outer loop +vertex 0.108386 -0.544896 0.831470 +vertex 0.000000 -0.382684 0.923880 +vertex 0.000000 -0.555571 0.831470 +endloop +endfacet +facet normal -0.028579 -0.290166 -0.956550 +outer loop +vertex 0.000000 -0.195091 -0.980785 +vertex 0.000000 -0.382684 -0.923880 +vertex -0.074658 -0.375331 -0.923880 +endloop +endfacet +facet normal -0.028576 -0.290166 -0.956550 +outer loop +vertex 0.000000 -0.195091 -0.980785 +vertex -0.074658 -0.375331 -0.923880 +vertex -0.038060 -0.191342 -0.980785 +endloop +endfacet +facet normal -0.097550 -0.990438 0.097551 +outer loop +vertex -0.000000 -1.000000 0.000000 +vertex -0.000000 -0.980785 0.195090 +vertex -0.191342 -0.961940 0.195090 +endloop +endfacet +facet normal -0.097550 -0.990438 0.097551 +outer loop +vertex -0.000000 -1.000000 0.000000 +vertex -0.191342 -0.961940 0.195090 +vertex -0.195090 -0.980786 0.000000 +endloop +endfacet +facet normal -0.009654 -0.098013 0.995138 +outer loop +vertex -0.000000 -0.195091 0.980785 +vertex -0.000000 -0.000001 1.000000 +vertex -0.038060 -0.191342 0.980785 +endloop +endfacet +facet normal -0.009653 -0.098012 -0.995138 +outer loop +vertex 0.000000 -0.000000 -1.000000 +vertex 0.000000 -0.195091 -0.980785 +vertex -0.038060 -0.191342 -0.980785 +endloop +endfacet +facet normal -0.097550 -0.990438 -0.097551 +outer loop +vertex -0.000000 -0.980785 -0.195090 +vertex -0.000000 -1.000000 0.000000 +vertex -0.195090 -0.980786 0.000000 +endloop +endfacet +facet normal -0.097550 -0.990438 -0.097551 +outer loop +vertex -0.000000 -0.980785 -0.195090 +vertex -0.195090 -0.980786 0.000000 +vertex -0.191342 -0.961940 -0.195090 +endloop +endfacet +facet normal -0.028581 -0.290166 0.956549 +outer loop +vertex 0.000000 -0.382684 0.923880 +vertex -0.000000 -0.195091 0.980785 +vertex -0.038060 -0.191342 0.980785 +endloop +endfacet +facet normal -0.028578 -0.290166 0.956549 +outer loop +vertex 0.000000 -0.382684 0.923880 +vertex -0.038060 -0.191342 0.980785 +vertex -0.074658 -0.375331 0.923880 +endloop +endfacet +facet normal -0.093835 -0.952718 -0.289003 +outer loop +vertex 0.000000 -0.923880 -0.382683 +vertex -0.000000 -0.980785 -0.195090 +vertex -0.191342 -0.961940 -0.195090 +endloop +endfacet +facet normal -0.093835 -0.952718 -0.289004 +outer loop +vertex 0.000000 -0.923880 -0.382683 +vertex -0.191342 -0.961940 -0.195090 +vertex -0.180240 -0.906128 -0.382683 +endloop +endfacet +facet normal -0.046378 -0.470889 0.880972 +outer loop +vertex 0.000000 -0.555571 0.831470 +vertex 0.000000 -0.382684 0.923880 +vertex -0.074658 -0.375331 0.923880 +endloop +endfacet +facet normal -0.046377 -0.470889 0.880972 +outer loop +vertex 0.000000 -0.555571 0.831470 +vertex -0.074658 -0.375331 0.923880 +vertex -0.108386 -0.544896 0.831470 +endloop +endfacet +facet normal -0.086536 -0.878613 -0.469629 +outer loop +vertex -0.000000 -0.831470 -0.555570 +vertex 0.000000 -0.923880 -0.382683 +vertex -0.180240 -0.906128 -0.382683 +endloop +endfacet +facet normal -0.086536 -0.878613 -0.469629 +outer loop +vertex -0.000000 -0.831470 -0.555570 +vertex -0.180240 -0.906128 -0.382683 +vertex -0.162212 -0.815493 -0.555570 +endloop +endfacet +facet normal -0.062361 -0.633159 0.771506 +outer loop +vertex -0.000000 -0.707107 0.707107 +vertex 0.000000 -0.555571 0.831470 +vertex -0.108386 -0.544896 0.831470 +endloop +endfacet +facet normal -0.062361 -0.633159 0.771506 +outer loop +vertex -0.000000 -0.707107 0.707107 +vertex -0.108386 -0.544896 0.831470 +vertex -0.137950 -0.693520 0.707107 +endloop +endfacet +facet normal -0.075916 -0.770781 -0.632561 +outer loop +vertex -0.000000 -0.707107 -0.707107 +vertex -0.000000 -0.831470 -0.555570 +vertex -0.162212 -0.815493 -0.555570 +endloop +endfacet +facet normal -0.075915 -0.770780 -0.632562 +outer loop +vertex -0.000000 -0.707107 -0.707107 +vertex -0.162212 -0.815493 -0.555570 +vertex -0.137950 -0.693520 -0.707107 +endloop +endfacet +facet normal -0.075915 -0.770780 0.632562 +outer loop +vertex -0.000000 -0.831470 0.555570 +vertex -0.000000 -0.707107 0.707107 +vertex -0.137950 -0.693520 0.707107 +endloop +endfacet +facet normal -0.075915 -0.770781 0.632562 +outer loop +vertex -0.000000 -0.831470 0.555570 +vertex -0.137950 -0.693520 0.707107 +vertex -0.162212 -0.815493 0.555570 +endloop +endfacet +facet normal -0.062361 -0.633159 -0.771506 +outer loop +vertex -0.000000 -0.555570 -0.831470 +vertex -0.000000 -0.707107 -0.707107 +vertex -0.137950 -0.693520 -0.707107 +endloop +endfacet +facet normal -0.062361 -0.633159 -0.771506 +outer loop +vertex -0.000000 -0.555570 -0.831470 +vertex -0.137950 -0.693520 -0.707107 +vertex -0.108386 -0.544895 -0.831470 +endloop +endfacet +facet normal -0.086536 -0.878612 0.469629 +outer loop +vertex 0.000000 -0.923880 0.382683 +vertex -0.000000 -0.831470 0.555570 +vertex -0.162212 -0.815493 0.555570 +endloop +endfacet +facet normal -0.086536 -0.878613 0.469629 +outer loop +vertex 0.000000 -0.923880 0.382683 +vertex -0.162212 -0.815493 0.555570 +vertex -0.180240 -0.906128 0.382683 +endloop +endfacet +facet normal -0.046379 -0.470890 -0.880972 +outer loop +vertex 0.000000 -0.382684 -0.923880 +vertex -0.000000 -0.555570 -0.831470 +vertex -0.108386 -0.544895 -0.831470 +endloop +endfacet +facet normal -0.046378 -0.470890 -0.880972 +outer loop +vertex 0.000000 -0.382684 -0.923880 +vertex -0.108386 -0.544895 -0.831470 +vertex -0.074658 -0.375331 -0.923880 +endloop +endfacet +facet normal -0.093835 -0.952718 0.289004 +outer loop +vertex -0.000000 -0.980785 0.195090 +vertex 0.000000 -0.923880 0.382683 +vertex -0.180240 -0.906128 0.382683 +endloop +endfacet +facet normal -0.093835 -0.952718 0.289003 +outer loop +vertex -0.000000 -0.980785 0.195090 +vertex -0.180240 -0.906128 0.382683 +vertex -0.191342 -0.961940 0.195090 +endloop +endfacet +facet normal -0.184686 -0.608827 0.771506 +outer loop +vertex -0.137950 -0.693520 0.707107 +vertex -0.108386 -0.544896 0.831470 +vertex -0.212608 -0.513280 0.831470 +endloop +endfacet +facet normal -0.184686 -0.608827 0.771506 +outer loop +vertex -0.137950 -0.693520 0.707107 +vertex -0.212608 -0.513280 0.831470 +vertex -0.270598 -0.653282 0.707107 +endloop +endfacet +facet normal -0.224829 -0.741160 -0.632562 +outer loop +vertex -0.137950 -0.693520 -0.707107 +vertex -0.162212 -0.815493 -0.555570 +vertex -0.318190 -0.768178 -0.555570 +endloop +endfacet +facet normal -0.224829 -0.741159 -0.632562 +outer loop +vertex -0.137950 -0.693520 -0.707107 +vertex -0.318190 -0.768178 -0.555570 +vertex -0.270598 -0.653282 -0.707107 +endloop +endfacet +facet normal -0.224828 -0.741159 0.632562 +outer loop +vertex -0.162212 -0.815493 0.555570 +vertex -0.137950 -0.693520 0.707107 +vertex -0.270598 -0.653282 0.707107 +endloop +endfacet +facet normal -0.224829 -0.741159 0.632562 +outer loop +vertex -0.162212 -0.815493 0.555570 +vertex -0.270598 -0.653282 0.707107 +vertex -0.318190 -0.768178 0.555570 +endloop +endfacet +facet normal -0.184686 -0.608827 -0.771506 +outer loop +vertex -0.108386 -0.544895 -0.831470 +vertex -0.137950 -0.693520 -0.707107 +vertex -0.270598 -0.653282 -0.707107 +endloop +endfacet +facet normal -0.184685 -0.608827 -0.771506 +outer loop +vertex -0.108386 -0.544895 -0.831470 +vertex -0.270598 -0.653282 -0.707107 +vertex -0.212608 -0.513280 -0.831470 +endloop +endfacet +facet normal -0.256282 -0.844848 0.469629 +outer loop +vertex -0.180240 -0.906128 0.382683 +vertex -0.162212 -0.815493 0.555570 +vertex -0.318190 -0.768178 0.555570 +endloop +endfacet +facet normal -0.256282 -0.844847 0.469630 +outer loop +vertex -0.180240 -0.906128 0.382683 +vertex -0.318190 -0.768178 0.555570 +vertex -0.353553 -0.853554 0.382683 +endloop +endfacet +facet normal -0.137354 -0.452793 -0.880972 +outer loop +vertex -0.074658 -0.375331 -0.923880 +vertex -0.108386 -0.544895 -0.831470 +vertex -0.212608 -0.513280 -0.831470 +endloop +endfacet +facet normal -0.137354 -0.452794 -0.880972 +outer loop +vertex -0.074658 -0.375331 -0.923880 +vertex -0.212608 -0.513280 -0.831470 +vertex -0.146447 -0.353554 -0.923880 +endloop +endfacet +facet normal -0.277898 -0.916106 0.289003 +outer loop +vertex -0.191342 -0.961940 0.195090 +vertex -0.180240 -0.906128 0.382683 +vertex -0.353553 -0.853554 0.382683 +endloop +endfacet +facet normal -0.277898 -0.916106 0.289002 +outer loop +vertex -0.191342 -0.961940 0.195090 +vertex -0.353553 -0.853554 0.382683 +vertex -0.375330 -0.906127 0.195090 +endloop +endfacet +facet normal -0.084639 -0.279015 -0.956549 +outer loop +vertex -0.038060 -0.191342 -0.980785 +vertex -0.074658 -0.375331 -0.923880 +vertex -0.146447 -0.353554 -0.923880 +endloop +endfacet +facet normal -0.084638 -0.279015 -0.956550 +outer loop +vertex -0.038060 -0.191342 -0.980785 +vertex -0.146447 -0.353554 -0.923880 +vertex -0.074658 -0.180240 -0.980785 +endloop +endfacet +facet normal -0.288900 -0.952376 0.097552 +outer loop +vertex -0.195090 -0.980786 0.000000 +vertex -0.191342 -0.961940 0.195090 +vertex -0.375330 -0.906127 0.195090 +endloop +endfacet +facet normal -0.288900 -0.952376 0.097551 +outer loop +vertex -0.195090 -0.980786 0.000000 +vertex -0.375330 -0.906127 0.195090 +vertex -0.382684 -0.923880 0.000000 +endloop +endfacet +facet normal -0.028590 -0.094246 0.995138 +outer loop +vertex -0.038060 -0.191342 0.980785 +vertex -0.000000 -0.000001 1.000000 +vertex -0.074658 -0.180240 0.980785 +endloop +endfacet +facet normal -0.028588 -0.094246 -0.995138 +outer loop +vertex 0.000000 -0.000000 -1.000000 +vertex -0.038060 -0.191342 -0.980785 +vertex -0.074658 -0.180240 -0.980785 +endloop +endfacet +facet normal -0.288900 -0.952376 -0.097551 +outer loop +vertex -0.191342 -0.961940 -0.195090 +vertex -0.195090 -0.980786 0.000000 +vertex -0.382684 -0.923880 0.000000 +endloop +endfacet +facet normal -0.288900 -0.952376 -0.097552 +outer loop +vertex -0.191342 -0.961940 -0.195090 +vertex -0.382684 -0.923880 0.000000 +vertex -0.375330 -0.906127 -0.195090 +endloop +endfacet +facet normal -0.084640 -0.279015 0.956549 +outer loop +vertex -0.074658 -0.375331 0.923880 +vertex -0.038060 -0.191342 0.980785 +vertex -0.074658 -0.180240 0.980785 +endloop +endfacet +facet normal -0.084637 -0.279015 0.956550 +outer loop +vertex -0.074658 -0.375331 0.923880 +vertex -0.074658 -0.180240 0.980785 +vertex -0.146447 -0.353554 0.923880 +endloop +endfacet +facet normal -0.277898 -0.916106 -0.289003 +outer loop +vertex -0.180240 -0.906128 -0.382683 +vertex -0.191342 -0.961940 -0.195090 +vertex -0.375330 -0.906127 -0.195090 +endloop +endfacet +facet normal -0.277898 -0.916106 -0.289002 +outer loop +vertex -0.180240 -0.906128 -0.382683 +vertex -0.375330 -0.906127 -0.195090 +vertex -0.353553 -0.853554 -0.382683 +endloop +endfacet +facet normal -0.137355 -0.452793 0.880972 +outer loop +vertex -0.108386 -0.544896 0.831470 +vertex -0.074658 -0.375331 0.923880 +vertex -0.146447 -0.353554 0.923880 +endloop +endfacet +facet normal -0.137353 -0.452793 0.880972 +outer loop +vertex -0.108386 -0.544896 0.831470 +vertex -0.146447 -0.353554 0.923880 +vertex -0.212608 -0.513280 0.831470 +endloop +endfacet +facet normal -0.256282 -0.844848 -0.469630 +outer loop +vertex -0.162212 -0.815493 -0.555570 +vertex -0.180240 -0.906128 -0.382683 +vertex -0.353553 -0.853554 -0.382683 +endloop +endfacet +facet normal -0.256283 -0.844848 -0.469629 +outer loop +vertex -0.162212 -0.815493 -0.555570 +vertex -0.353553 -0.853554 -0.382683 +vertex -0.318190 -0.768178 -0.555570 +endloop +endfacet +facet normal -0.469148 -0.877715 0.097552 +outer loop +vertex -0.382684 -0.923880 0.000000 +vertex -0.375330 -0.906127 0.195090 +vertex -0.544895 -0.815493 0.195090 +endloop +endfacet +facet normal -0.469149 -0.877715 0.097551 +outer loop +vertex -0.382684 -0.923880 0.000000 +vertex -0.544895 -0.815493 0.195090 +vertex -0.555570 -0.831470 0.000000 +endloop +endfacet +facet normal -0.046424 -0.086858 0.995138 +outer loop +vertex -0.074658 -0.180240 0.980785 +vertex -0.000000 -0.000001 1.000000 +vertex -0.108386 -0.162212 0.980785 +endloop +endfacet +facet normal -0.046428 -0.086857 -0.995138 +outer loop +vertex 0.000000 -0.000000 -1.000000 +vertex -0.074658 -0.180240 -0.980785 +vertex -0.108386 -0.162212 -0.980785 +endloop +endfacet +facet normal -0.469149 -0.877715 -0.097552 +outer loop +vertex -0.375330 -0.906127 -0.195090 +vertex -0.382684 -0.923880 0.000000 +vertex -0.555570 -0.831470 0.000000 +endloop +endfacet +facet normal -0.469148 -0.877715 -0.097551 +outer loop +vertex -0.375330 -0.906127 -0.195090 +vertex -0.555570 -0.831470 0.000000 +vertex -0.544895 -0.815493 -0.195090 +endloop +endfacet +facet normal -0.137445 -0.257142 0.956549 +outer loop +vertex -0.146447 -0.353554 0.923880 +vertex -0.074658 -0.180240 0.980785 +vertex -0.108386 -0.162212 0.980785 +endloop +endfacet +facet normal -0.137447 -0.257142 0.956549 +outer loop +vertex -0.146447 -0.353554 0.923880 +vertex -0.108386 -0.162212 0.980785 +vertex -0.212608 -0.318190 0.923880 +endloop +endfacet +facet normal -0.451282 -0.844288 -0.289002 +outer loop +vertex -0.353553 -0.853554 -0.382683 +vertex -0.375330 -0.906127 -0.195090 +vertex -0.544895 -0.815493 -0.195090 +endloop +endfacet +facet normal -0.451281 -0.844288 -0.289003 +outer loop +vertex -0.353553 -0.853554 -0.382683 +vertex -0.544895 -0.815493 -0.195090 +vertex -0.513280 -0.768178 -0.382683 +endloop +endfacet +facet normal -0.223051 -0.417296 0.880972 +outer loop +vertex -0.212608 -0.513280 0.831470 +vertex -0.146447 -0.353554 0.923880 +vertex -0.212608 -0.318190 0.923880 +endloop +endfacet +facet normal -0.223050 -0.417296 0.880972 +outer loop +vertex -0.212608 -0.513280 0.831470 +vertex -0.212608 -0.318190 0.923880 +vertex -0.308658 -0.461940 0.831470 +endloop +endfacet +facet normal -0.416179 -0.778616 -0.469630 +outer loop +vertex -0.318190 -0.768178 -0.555570 +vertex -0.353553 -0.853554 -0.382683 +vertex -0.513280 -0.768178 -0.382683 +endloop +endfacet +facet normal -0.416179 -0.778616 -0.469629 +outer loop +vertex -0.318190 -0.768178 -0.555570 +vertex -0.513280 -0.768178 -0.382683 +vertex -0.461940 -0.691342 -0.555570 +endloop +endfacet +facet normal -0.299913 -0.561098 0.771506 +outer loop +vertex -0.270598 -0.653282 0.707107 +vertex -0.212608 -0.513280 0.831470 +vertex -0.308658 -0.461940 0.831470 +endloop +endfacet +facet normal -0.299914 -0.561098 0.771506 +outer loop +vertex -0.270598 -0.653282 0.707107 +vertex -0.308658 -0.461940 0.831470 +vertex -0.392847 -0.587938 0.707107 +endloop +endfacet +facet normal -0.365102 -0.683057 -0.632561 +outer loop +vertex -0.270598 -0.653282 -0.707107 +vertex -0.318190 -0.768178 -0.555570 +vertex -0.461940 -0.691342 -0.555570 +endloop +endfacet +facet normal -0.365102 -0.683056 -0.632562 +outer loop +vertex -0.270598 -0.653282 -0.707107 +vertex -0.461940 -0.691342 -0.555570 +vertex -0.392847 -0.587938 -0.707107 +endloop +endfacet +facet normal -0.365102 -0.683057 0.632561 +outer loop +vertex -0.318190 -0.768178 0.555570 +vertex -0.270598 -0.653282 0.707107 +vertex -0.392847 -0.587938 0.707107 +endloop +endfacet +facet normal -0.365102 -0.683057 0.632562 +outer loop +vertex -0.318190 -0.768178 0.555570 +vertex -0.392847 -0.587938 0.707107 +vertex -0.461940 -0.691342 0.555570 +endloop +endfacet +facet normal -0.299913 -0.561098 -0.771506 +outer loop +vertex -0.212608 -0.513280 -0.831470 +vertex -0.270598 -0.653282 -0.707107 +vertex -0.392847 -0.587938 -0.707107 +endloop +endfacet +facet normal -0.299913 -0.561098 -0.771505 +outer loop +vertex -0.212608 -0.513280 -0.831470 +vertex -0.392847 -0.587938 -0.707107 +vertex -0.308658 -0.461940 -0.831470 +endloop +endfacet +facet normal -0.416179 -0.778616 0.469630 +outer loop +vertex -0.353553 -0.853554 0.382683 +vertex -0.318190 -0.768178 0.555570 +vertex -0.461940 -0.691342 0.555570 +endloop +endfacet +facet normal -0.416179 -0.778616 0.469629 +outer loop +vertex -0.353553 -0.853554 0.382683 +vertex -0.461940 -0.691342 0.555570 +vertex -0.513280 -0.768178 0.382683 +endloop +endfacet +facet normal -0.223051 -0.417297 -0.880972 +outer loop +vertex -0.146447 -0.353554 -0.923880 +vertex -0.212608 -0.513280 -0.831470 +vertex -0.308658 -0.461940 -0.831470 +endloop +endfacet +facet normal -0.223051 -0.417297 -0.880972 +outer loop +vertex -0.146447 -0.353554 -0.923880 +vertex -0.308658 -0.461940 -0.831470 +vertex -0.212607 -0.318190 -0.923880 +endloop +endfacet +facet normal -0.451282 -0.844288 0.289003 +outer loop +vertex -0.375330 -0.906127 0.195090 +vertex -0.353553 -0.853554 0.382683 +vertex -0.513280 -0.768178 0.382683 +endloop +endfacet +facet normal -0.451282 -0.844288 0.289002 +outer loop +vertex -0.375330 -0.906127 0.195090 +vertex -0.513280 -0.768178 0.382683 +vertex -0.544895 -0.815493 0.195090 +endloop +endfacet +facet normal -0.137446 -0.257142 -0.956549 +outer loop +vertex -0.074658 -0.180240 -0.980785 +vertex -0.146447 -0.353554 -0.923880 +vertex -0.212607 -0.318190 -0.923880 +endloop +endfacet +facet normal -0.137446 -0.257141 -0.956550 +outer loop +vertex -0.074658 -0.180240 -0.980785 +vertex -0.212607 -0.318190 -0.923880 +vertex -0.108386 -0.162212 -0.980785 +endloop +endfacet +facet normal -0.491344 -0.598704 -0.632561 +outer loop +vertex -0.392847 -0.587938 -0.707107 +vertex -0.461940 -0.691342 -0.555570 +vertex -0.587938 -0.587938 -0.555570 +endloop +endfacet +facet normal -0.491344 -0.598704 -0.632562 +outer loop +vertex -0.392847 -0.587938 -0.707107 +vertex -0.587938 -0.587938 -0.555570 +vertex -0.500000 -0.500000 -0.707107 +endloop +endfacet +facet normal -0.491344 -0.598704 0.632561 +outer loop +vertex -0.461940 -0.691342 0.555570 +vertex -0.392847 -0.587938 0.707107 +vertex -0.500000 -0.500000 0.707107 +endloop +endfacet +facet normal -0.491344 -0.598704 0.632562 +outer loop +vertex -0.461940 -0.691342 0.555570 +vertex -0.500000 -0.500000 0.707107 +vertex -0.587938 -0.587938 0.555570 +endloop +endfacet +facet normal -0.403615 -0.491806 -0.771506 +outer loop +vertex -0.308658 -0.461940 -0.831470 +vertex -0.392847 -0.587938 -0.707107 +vertex -0.500000 -0.500000 -0.707107 +endloop +endfacet +facet normal -0.403616 -0.491806 -0.771506 +outer loop +vertex -0.308658 -0.461940 -0.831470 +vertex -0.500000 -0.500000 -0.707107 +vertex -0.392847 -0.392848 -0.831470 +endloop +endfacet +facet normal -0.560083 -0.682462 0.469630 +outer loop +vertex -0.513280 -0.768178 0.382683 +vertex -0.461940 -0.691342 0.555570 +vertex -0.587938 -0.587938 0.555570 +endloop +endfacet +facet normal -0.560083 -0.682463 0.469629 +outer loop +vertex -0.513280 -0.768178 0.382683 +vertex -0.587938 -0.587938 0.555570 +vertex -0.653281 -0.653282 0.382683 +endloop +endfacet +facet normal -0.300174 -0.365764 -0.880972 +outer loop +vertex -0.212607 -0.318190 -0.923880 +vertex -0.308658 -0.461940 -0.831470 +vertex -0.392847 -0.392848 -0.831470 +endloop +endfacet +facet normal -0.300173 -0.365764 -0.880973 +outer loop +vertex -0.212607 -0.318190 -0.923880 +vertex -0.392847 -0.392848 -0.831470 +vertex -0.270598 -0.270598 -0.923880 +endloop +endfacet +facet normal -0.607323 -0.740024 0.289003 +outer loop +vertex -0.544895 -0.815493 0.195090 +vertex -0.513280 -0.768178 0.382683 +vertex -0.653281 -0.653282 0.382683 +endloop +endfacet +facet normal -0.607323 -0.740024 0.289003 +outer loop +vertex -0.544895 -0.815493 0.195090 +vertex -0.653281 -0.653282 0.382683 +vertex -0.693520 -0.693520 0.195090 +endloop +endfacet +facet normal -0.184970 -0.225387 -0.956549 +outer loop +vertex -0.108386 -0.162212 -0.980785 +vertex -0.212607 -0.318190 -0.923880 +vertex -0.270598 -0.270598 -0.923880 +endloop +endfacet +facet normal -0.184967 -0.225386 -0.956550 +outer loop +vertex -0.108386 -0.162212 -0.980785 +vertex -0.270598 -0.270598 -0.923880 +vertex -0.137950 -0.137950 -0.980785 +endloop +endfacet +facet normal -0.631368 -0.769323 0.097551 +outer loop +vertex -0.555570 -0.831470 0.000000 +vertex -0.544895 -0.815493 0.195090 +vertex -0.693520 -0.693520 0.195090 +endloop +endfacet +facet normal -0.631368 -0.769323 0.097551 +outer loop +vertex -0.555570 -0.831470 0.000000 +vertex -0.693520 -0.693520 0.195090 +vertex -0.707107 -0.707107 0.000000 +endloop +endfacet +facet normal -0.062481 -0.076131 0.995138 +outer loop +vertex -0.108386 -0.162212 0.980785 +vertex -0.000000 -0.000001 1.000000 +vertex -0.137950 -0.137950 0.980785 +endloop +endfacet +facet normal -0.062478 -0.076131 -0.995138 +outer loop +vertex 0.000000 -0.000000 -1.000000 +vertex -0.108386 -0.162212 -0.980785 +vertex -0.137950 -0.137950 -0.980785 +endloop +endfacet +facet normal -0.631368 -0.769324 -0.097551 +outer loop +vertex -0.544895 -0.815493 -0.195090 +vertex -0.555570 -0.831470 0.000000 +vertex -0.707107 -0.707107 0.000000 +endloop +endfacet +facet normal -0.631368 -0.769323 -0.097551 +outer loop +vertex -0.544895 -0.815493 -0.195090 +vertex -0.707107 -0.707107 0.000000 +vertex -0.693520 -0.693520 -0.195090 +endloop +endfacet +facet normal -0.184969 -0.225387 0.956549 +outer loop +vertex -0.212608 -0.318190 0.923880 +vertex -0.108386 -0.162212 0.980785 +vertex -0.137950 -0.137950 0.980785 +endloop +endfacet +facet normal -0.184970 -0.225387 0.956550 +outer loop +vertex -0.212608 -0.318190 0.923880 +vertex -0.137950 -0.137950 0.980785 +vertex -0.270598 -0.270598 0.923880 +endloop +endfacet +facet normal -0.607323 -0.740025 -0.289003 +outer loop +vertex -0.513280 -0.768178 -0.382683 +vertex -0.544895 -0.815493 -0.195090 +vertex -0.693520 -0.693520 -0.195090 +endloop +endfacet +facet normal -0.607323 -0.740024 -0.289003 +outer loop +vertex -0.513280 -0.768178 -0.382683 +vertex -0.693520 -0.693520 -0.195090 +vertex -0.653281 -0.653282 -0.382683 +endloop +endfacet +facet normal -0.300173 -0.365764 0.880973 +outer loop +vertex -0.308658 -0.461940 0.831470 +vertex -0.212608 -0.318190 0.923880 +vertex -0.270598 -0.270598 0.923880 +endloop +endfacet +facet normal -0.300175 -0.365763 0.880972 +outer loop +vertex -0.308658 -0.461940 0.831470 +vertex -0.270598 -0.270598 0.923880 +vertex -0.392848 -0.392848 0.831470 +endloop +endfacet +facet normal -0.560083 -0.682462 -0.469630 +outer loop +vertex -0.461940 -0.691342 -0.555570 +vertex -0.513280 -0.768178 -0.382683 +vertex -0.653281 -0.653282 -0.382683 +endloop +endfacet +facet normal -0.560083 -0.682463 -0.469629 +outer loop +vertex -0.461940 -0.691342 -0.555570 +vertex -0.653281 -0.653282 -0.382683 +vertex -0.587938 -0.587938 -0.555570 +endloop +endfacet +facet normal -0.403615 -0.491807 0.771506 +outer loop +vertex -0.392847 -0.587938 0.707107 +vertex -0.308658 -0.461940 0.831470 +vertex -0.392848 -0.392848 0.831470 +endloop +endfacet +facet normal -0.403615 -0.491807 0.771505 +outer loop +vertex -0.392847 -0.587938 0.707107 +vertex -0.392848 -0.392848 0.831470 +vertex -0.500000 -0.500000 0.707107 +endloop +endfacet +facet normal -0.076133 -0.062480 0.995138 +outer loop +vertex -0.137950 -0.137950 0.980785 +vertex -0.000000 -0.000001 1.000000 +vertex -0.162212 -0.108387 0.980785 +endloop +endfacet +facet normal -0.076131 -0.062479 -0.995138 +outer loop +vertex 0.000000 -0.000000 -1.000000 +vertex -0.137950 -0.137950 -0.980785 +vertex -0.162212 -0.108387 -0.980785 +endloop +endfacet +facet normal -0.769324 -0.631367 -0.097552 +outer loop +vertex -0.693520 -0.693520 -0.195090 +vertex -0.707107 -0.707107 0.000000 +vertex -0.831470 -0.555570 0.000000 +endloop +endfacet +facet normal -0.769323 -0.631368 -0.097551 +outer loop +vertex -0.693520 -0.693520 -0.195090 +vertex -0.831470 -0.555570 0.000000 +vertex -0.815493 -0.544895 -0.195090 +endloop +endfacet +facet normal -0.225390 -0.184970 0.956549 +outer loop +vertex -0.270598 -0.270598 0.923880 +vertex -0.137950 -0.137950 0.980785 +vertex -0.162212 -0.108387 0.980785 +endloop +endfacet +facet normal -0.225385 -0.184970 0.956550 +outer loop +vertex -0.270598 -0.270598 0.923880 +vertex -0.162212 -0.108387 0.980785 +vertex -0.318190 -0.212608 0.923880 +endloop +endfacet +facet normal -0.740025 -0.607323 -0.289002 +outer loop +vertex -0.653281 -0.653282 -0.382683 +vertex -0.693520 -0.693520 -0.195090 +vertex -0.815493 -0.544895 -0.195090 +endloop +endfacet +facet normal -0.740025 -0.607323 -0.289002 +outer loop +vertex -0.653281 -0.653282 -0.382683 +vertex -0.815493 -0.544895 -0.195090 +vertex -0.768178 -0.513280 -0.382683 +endloop +endfacet +facet normal -0.365763 -0.300174 0.880973 +outer loop +vertex -0.392848 -0.392848 0.831470 +vertex -0.270598 -0.270598 0.923880 +vertex -0.318190 -0.212608 0.923880 +endloop +endfacet +facet normal -0.365765 -0.300174 0.880972 +outer loop +vertex -0.392848 -0.392848 0.831470 +vertex -0.318190 -0.212608 0.923880 +vertex -0.461940 -0.308659 0.831470 +endloop +endfacet +facet normal -0.682463 -0.560083 -0.469629 +outer loop +vertex -0.587938 -0.587938 -0.555570 +vertex -0.653281 -0.653282 -0.382683 +vertex -0.768178 -0.513280 -0.382683 +endloop +endfacet +facet normal -0.682463 -0.560083 -0.469629 +outer loop +vertex -0.587938 -0.587938 -0.555570 +vertex -0.768178 -0.513280 -0.382683 +vertex -0.691342 -0.461940 -0.555570 +endloop +endfacet +facet normal -0.491806 -0.403615 0.771506 +outer loop +vertex -0.500000 -0.500000 0.707107 +vertex -0.392848 -0.392848 0.831470 +vertex -0.461940 -0.308659 0.831470 +endloop +endfacet +facet normal -0.491807 -0.403615 0.771506 +outer loop +vertex -0.500000 -0.500000 0.707107 +vertex -0.461940 -0.308659 0.831470 +vertex -0.587938 -0.392848 0.707107 +endloop +endfacet +facet normal -0.598704 -0.491344 -0.632562 +outer loop +vertex -0.500000 -0.500000 -0.707107 +vertex -0.587938 -0.587938 -0.555570 +vertex -0.691342 -0.461940 -0.555570 +endloop +endfacet +facet normal -0.598705 -0.491343 -0.632562 +outer loop +vertex -0.500000 -0.500000 -0.707107 +vertex -0.691342 -0.461940 -0.555570 +vertex -0.587938 -0.392848 -0.707107 +endloop +endfacet +facet normal -0.598704 -0.491344 0.632562 +outer loop +vertex -0.587938 -0.587938 0.555570 +vertex -0.500000 -0.500000 0.707107 +vertex -0.587938 -0.392848 0.707107 +endloop +endfacet +facet normal -0.598704 -0.491344 0.632562 +outer loop +vertex -0.587938 -0.587938 0.555570 +vertex -0.587938 -0.392848 0.707107 +vertex -0.691342 -0.461940 0.555570 +endloop +endfacet +facet normal -0.491806 -0.403615 -0.771506 +outer loop +vertex -0.392847 -0.392848 -0.831470 +vertex -0.500000 -0.500000 -0.707107 +vertex -0.587938 -0.392848 -0.707107 +endloop +endfacet +facet normal -0.491807 -0.403614 -0.771506 +outer loop +vertex -0.392847 -0.392848 -0.831470 +vertex -0.587938 -0.392848 -0.707107 +vertex -0.461940 -0.308658 -0.831470 +endloop +endfacet +facet normal -0.682463 -0.560082 0.469630 +outer loop +vertex -0.653281 -0.653282 0.382683 +vertex -0.587938 -0.587938 0.555570 +vertex -0.691342 -0.461940 0.555570 +endloop +endfacet +facet normal -0.682463 -0.560083 0.469630 +outer loop +vertex -0.653281 -0.653282 0.382683 +vertex -0.691342 -0.461940 0.555570 +vertex -0.768178 -0.513280 0.382683 +endloop +endfacet +facet normal -0.365764 -0.300175 -0.880972 +outer loop +vertex -0.270598 -0.270598 -0.923880 +vertex -0.392847 -0.392848 -0.831470 +vertex -0.461940 -0.308658 -0.831470 +endloop +endfacet +facet normal -0.365764 -0.300175 -0.880972 +outer loop +vertex -0.270598 -0.270598 -0.923880 +vertex -0.461940 -0.308658 -0.831470 +vertex -0.318190 -0.212608 -0.923880 +endloop +endfacet +facet normal -0.740025 -0.607323 0.289003 +outer loop +vertex -0.693520 -0.693520 0.195090 +vertex -0.653281 -0.653282 0.382683 +vertex -0.768178 -0.513280 0.382683 +endloop +endfacet +facet normal -0.740025 -0.607323 0.289002 +outer loop +vertex -0.693520 -0.693520 0.195090 +vertex -0.768178 -0.513280 0.382683 +vertex -0.815493 -0.544895 0.195090 +endloop +endfacet +facet normal -0.225387 -0.184970 -0.956549 +outer loop +vertex -0.137950 -0.137950 -0.980785 +vertex -0.270598 -0.270598 -0.923880 +vertex -0.318190 -0.212608 -0.923880 +endloop +endfacet +facet normal -0.225387 -0.184970 -0.956549 +outer loop +vertex -0.137950 -0.137950 -0.980785 +vertex -0.318190 -0.212608 -0.923880 +vertex -0.162212 -0.108387 -0.980785 +endloop +endfacet +facet normal -0.769324 -0.631367 0.097551 +outer loop +vertex -0.707107 -0.707107 0.000000 +vertex -0.693520 -0.693520 0.195090 +vertex -0.815493 -0.544895 0.195090 +endloop +endfacet +facet normal -0.769324 -0.631367 0.097551 +outer loop +vertex -0.707107 -0.707107 0.000000 +vertex -0.815493 -0.544895 0.195090 +vertex -0.831470 -0.555570 0.000000 +endloop +endfacet +facet normal -0.683057 -0.365101 0.632562 +outer loop +vertex -0.691342 -0.461940 0.555570 +vertex -0.587938 -0.392848 0.707107 +vertex -0.653281 -0.270598 0.707107 +endloop +endfacet +facet normal -0.683057 -0.365102 0.632562 +outer loop +vertex -0.691342 -0.461940 0.555570 +vertex -0.653281 -0.270598 0.707107 +vertex -0.768177 -0.318190 0.555570 +endloop +endfacet +facet normal -0.561098 -0.299914 -0.771506 +outer loop +vertex -0.461940 -0.308658 -0.831470 +vertex -0.587938 -0.392848 -0.707107 +vertex -0.653281 -0.270598 -0.707107 +endloop +endfacet +facet normal -0.561098 -0.299913 -0.771506 +outer loop +vertex -0.461940 -0.308658 -0.831470 +vertex -0.653281 -0.270598 -0.707107 +vertex -0.513280 -0.212608 -0.831470 +endloop +endfacet +facet normal -0.778616 -0.416179 0.469629 +outer loop +vertex -0.768178 -0.513280 0.382683 +vertex -0.691342 -0.461940 0.555570 +vertex -0.768177 -0.318190 0.555570 +endloop +endfacet +facet normal -0.778616 -0.416179 0.469630 +outer loop +vertex -0.768178 -0.513280 0.382683 +vertex -0.768177 -0.318190 0.555570 +vertex -0.853553 -0.353554 0.382683 +endloop +endfacet +facet normal -0.417297 -0.223050 -0.880972 +outer loop +vertex -0.318190 -0.212608 -0.923880 +vertex -0.461940 -0.308658 -0.831470 +vertex -0.513280 -0.212608 -0.831470 +endloop +endfacet +facet normal -0.417297 -0.223049 -0.880972 +outer loop +vertex -0.318190 -0.212608 -0.923880 +vertex -0.513280 -0.212608 -0.831470 +vertex -0.353553 -0.146447 -0.923880 +endloop +endfacet +facet normal -0.844288 -0.451282 0.289002 +outer loop +vertex -0.815493 -0.544895 0.195090 +vertex -0.768178 -0.513280 0.382683 +vertex -0.853553 -0.353554 0.382683 +endloop +endfacet +facet normal -0.844289 -0.451281 0.289002 +outer loop +vertex -0.815493 -0.544895 0.195090 +vertex -0.853553 -0.353554 0.382683 +vertex -0.906127 -0.375330 0.195090 +endloop +endfacet +facet normal -0.257142 -0.137445 -0.956549 +outer loop +vertex -0.162212 -0.108387 -0.980785 +vertex -0.318190 -0.212608 -0.923880 +vertex -0.353553 -0.146447 -0.923880 +endloop +endfacet +facet normal -0.257140 -0.137445 -0.956550 +outer loop +vertex -0.162212 -0.108387 -0.980785 +vertex -0.353553 -0.146447 -0.923880 +vertex -0.180240 -0.074658 -0.980785 +endloop +endfacet +facet normal -0.877715 -0.469148 0.097551 +outer loop +vertex -0.831470 -0.555570 0.000000 +vertex -0.815493 -0.544895 0.195090 +vertex -0.906127 -0.375330 0.195090 +endloop +endfacet +facet normal -0.877715 -0.469148 0.097551 +outer loop +vertex -0.831470 -0.555570 0.000000 +vertex -0.906127 -0.375330 0.195090 +vertex -0.923880 -0.382684 0.000000 +endloop +endfacet +facet normal -0.086857 -0.046426 0.995138 +outer loop +vertex -0.162212 -0.108387 0.980785 +vertex -0.000000 -0.000001 1.000000 +vertex -0.180240 -0.074658 0.980785 +endloop +endfacet +facet normal -0.086858 -0.046426 -0.995138 +outer loop +vertex 0.000000 -0.000000 -1.000000 +vertex -0.162212 -0.108387 -0.980785 +vertex -0.180240 -0.074658 -0.980785 +endloop +endfacet +facet normal -0.877715 -0.469148 -0.097551 +outer loop +vertex -0.815493 -0.544895 -0.195090 +vertex -0.831470 -0.555570 0.000000 +vertex -0.923880 -0.382684 0.000000 +endloop +endfacet +facet normal -0.877715 -0.469148 -0.097551 +outer loop +vertex -0.815493 -0.544895 -0.195090 +vertex -0.923880 -0.382684 0.000000 +vertex -0.906127 -0.375330 -0.195090 +endloop +endfacet +facet normal -0.257146 -0.137445 0.956548 +outer loop +vertex -0.318190 -0.212608 0.923880 +vertex -0.162212 -0.108387 0.980785 +vertex -0.180240 -0.074658 0.980785 +endloop +endfacet +facet normal -0.257141 -0.137445 0.956550 +outer loop +vertex -0.318190 -0.212608 0.923880 +vertex -0.180240 -0.074658 0.980785 +vertex -0.353553 -0.146447 0.923880 +endloop +endfacet +facet normal -0.844288 -0.451281 -0.289003 +outer loop +vertex -0.768178 -0.513280 -0.382683 +vertex -0.815493 -0.544895 -0.195090 +vertex -0.906127 -0.375330 -0.195090 +endloop +endfacet +facet normal -0.844288 -0.451282 -0.289002 +outer loop +vertex -0.768178 -0.513280 -0.382683 +vertex -0.906127 -0.375330 -0.195090 +vertex -0.853553 -0.353554 -0.382683 +endloop +endfacet +facet normal -0.417297 -0.223049 0.880972 +outer loop +vertex -0.461940 -0.308659 0.831470 +vertex -0.318190 -0.212608 0.923880 +vertex -0.353553 -0.146447 0.923880 +endloop +endfacet +facet normal -0.417297 -0.223050 0.880972 +outer loop +vertex -0.461940 -0.308659 0.831470 +vertex -0.353553 -0.146447 0.923880 +vertex -0.513280 -0.212608 0.831470 +endloop +endfacet +facet normal -0.778616 -0.416179 -0.469629 +outer loop +vertex -0.691342 -0.461940 -0.555570 +vertex -0.768178 -0.513280 -0.382683 +vertex -0.853553 -0.353554 -0.382683 +endloop +endfacet +facet normal -0.778617 -0.416178 -0.469630 +outer loop +vertex -0.691342 -0.461940 -0.555570 +vertex -0.853553 -0.353554 -0.382683 +vertex -0.768177 -0.318190 -0.555570 +endloop +endfacet +facet normal -0.561098 -0.299913 0.771506 +outer loop +vertex -0.587938 -0.392848 0.707107 +vertex -0.461940 -0.308659 0.831470 +vertex -0.513280 -0.212608 0.831470 +endloop +endfacet +facet normal -0.561098 -0.299913 0.771506 +outer loop +vertex -0.587938 -0.392848 0.707107 +vertex -0.513280 -0.212608 0.831470 +vertex -0.653281 -0.270598 0.707107 +endloop +endfacet +facet normal -0.683057 -0.365101 -0.632562 +outer loop +vertex -0.587938 -0.392848 -0.707107 +vertex -0.691342 -0.461940 -0.555570 +vertex -0.768177 -0.318190 -0.555570 +endloop +endfacet +facet normal -0.683057 -0.365102 -0.632562 +outer loop +vertex -0.587938 -0.392848 -0.707107 +vertex -0.768177 -0.318190 -0.555570 +vertex -0.653281 -0.270598 -0.707107 +endloop +endfacet +facet normal -0.952376 -0.288900 -0.097551 +outer loop +vertex -0.906127 -0.375330 -0.195090 +vertex -0.923880 -0.382684 0.000000 +vertex -0.980785 -0.195090 0.000000 +endloop +endfacet +facet normal -0.952376 -0.288900 -0.097551 +outer loop +vertex -0.906127 -0.375330 -0.195090 +vertex -0.980785 -0.195090 0.000000 +vertex -0.961939 -0.191342 -0.195090 +endloop +endfacet +facet normal -0.279016 -0.084639 0.956549 +outer loop +vertex -0.353553 -0.146447 0.923880 +vertex -0.180240 -0.074658 0.980785 +vertex -0.191342 -0.038061 0.980785 +endloop +endfacet +facet normal -0.279016 -0.084638 0.956549 +outer loop +vertex -0.353553 -0.146447 0.923880 +vertex -0.191342 -0.038061 0.980785 +vertex -0.375330 -0.074658 0.923880 +endloop +endfacet +facet normal -0.916106 -0.277898 -0.289002 +outer loop +vertex -0.853553 -0.353554 -0.382683 +vertex -0.906127 -0.375330 -0.195090 +vertex -0.961939 -0.191342 -0.195090 +endloop +endfacet +facet normal -0.916106 -0.277897 -0.289002 +outer loop +vertex -0.853553 -0.353554 -0.382683 +vertex -0.961939 -0.191342 -0.195090 +vertex -0.906127 -0.180240 -0.382683 +endloop +endfacet +facet normal -0.452793 -0.137354 0.880973 +outer loop +vertex -0.513280 -0.212608 0.831470 +vertex -0.353553 -0.146447 0.923880 +vertex -0.375330 -0.074658 0.923880 +endloop +endfacet +facet normal -0.452794 -0.137353 0.880972 +outer loop +vertex -0.513280 -0.212608 0.831470 +vertex -0.375330 -0.074658 0.923880 +vertex -0.544895 -0.108387 0.831470 +endloop +endfacet +facet normal -0.844848 -0.256282 -0.469629 +outer loop +vertex -0.768177 -0.318190 -0.555570 +vertex -0.853553 -0.353554 -0.382683 +vertex -0.906127 -0.180240 -0.382683 +endloop +endfacet +facet normal -0.844848 -0.256282 -0.469630 +outer loop +vertex -0.768177 -0.318190 -0.555570 +vertex -0.906127 -0.180240 -0.382683 +vertex -0.815493 -0.162212 -0.555570 +endloop +endfacet +facet normal -0.608826 -0.184686 0.771506 +outer loop +vertex -0.653281 -0.270598 0.707107 +vertex -0.513280 -0.212608 0.831470 +vertex -0.544895 -0.108387 0.831470 +endloop +endfacet +facet normal -0.608827 -0.184685 0.771506 +outer loop +vertex -0.653281 -0.270598 0.707107 +vertex -0.544895 -0.108387 0.831470 +vertex -0.693520 -0.137950 0.707107 +endloop +endfacet +facet normal -0.741160 -0.224828 -0.632562 +outer loop +vertex -0.653281 -0.270598 -0.707107 +vertex -0.768177 -0.318190 -0.555570 +vertex -0.815493 -0.162212 -0.555570 +endloop +endfacet +facet normal -0.741160 -0.224828 -0.632562 +outer loop +vertex -0.653281 -0.270598 -0.707107 +vertex -0.815493 -0.162212 -0.555570 +vertex -0.693520 -0.137950 -0.707107 +endloop +endfacet +facet normal -0.741160 -0.224828 0.632562 +outer loop +vertex -0.768177 -0.318190 0.555570 +vertex -0.653281 -0.270598 0.707107 +vertex -0.693520 -0.137950 0.707107 +endloop +endfacet +facet normal -0.741160 -0.224828 0.632562 +outer loop +vertex -0.768177 -0.318190 0.555570 +vertex -0.693520 -0.137950 0.707107 +vertex -0.815493 -0.162212 0.555570 +endloop +endfacet +facet normal -0.608827 -0.184685 -0.771506 +outer loop +vertex -0.513280 -0.212608 -0.831470 +vertex -0.653281 -0.270598 -0.707107 +vertex -0.693520 -0.137950 -0.707107 +endloop +endfacet +facet normal -0.608827 -0.184685 -0.771506 +outer loop +vertex -0.513280 -0.212608 -0.831470 +vertex -0.693520 -0.137950 -0.707107 +vertex -0.544895 -0.108387 -0.831470 +endloop +endfacet +facet normal -0.844848 -0.256282 0.469630 +outer loop +vertex -0.853553 -0.353554 0.382683 +vertex -0.768177 -0.318190 0.555570 +vertex -0.815493 -0.162212 0.555570 +endloop +endfacet +facet normal -0.844848 -0.256281 0.469630 +outer loop +vertex -0.853553 -0.353554 0.382683 +vertex -0.815493 -0.162212 0.555570 +vertex -0.906127 -0.180240 0.382683 +endloop +endfacet +facet normal -0.452794 -0.137354 -0.880972 +outer loop +vertex -0.353553 -0.146447 -0.923880 +vertex -0.513280 -0.212608 -0.831470 +vertex -0.544895 -0.108387 -0.831470 +endloop +endfacet +facet normal -0.452794 -0.137353 -0.880972 +outer loop +vertex -0.353553 -0.146447 -0.923880 +vertex -0.544895 -0.108387 -0.831470 +vertex -0.375330 -0.074658 -0.923880 +endloop +endfacet +facet normal -0.916106 -0.277897 0.289002 +outer loop +vertex -0.906127 -0.375330 0.195090 +vertex -0.853553 -0.353554 0.382683 +vertex -0.906127 -0.180240 0.382683 +endloop +endfacet +facet normal -0.916106 -0.277898 0.289002 +outer loop +vertex -0.906127 -0.375330 0.195090 +vertex -0.906127 -0.180240 0.382683 +vertex -0.961939 -0.191342 0.195090 +endloop +endfacet +facet normal -0.279016 -0.084638 -0.956549 +outer loop +vertex -0.180240 -0.074658 -0.980785 +vertex -0.353553 -0.146447 -0.923880 +vertex -0.375330 -0.074658 -0.923880 +endloop +endfacet +facet normal -0.279015 -0.084638 -0.956550 +outer loop +vertex -0.180240 -0.074658 -0.980785 +vertex -0.375330 -0.074658 -0.923880 +vertex -0.191342 -0.038061 -0.980785 +endloop +endfacet +facet normal -0.952376 -0.288901 0.097551 +outer loop +vertex -0.923880 -0.382684 0.000000 +vertex -0.906127 -0.375330 0.195090 +vertex -0.961939 -0.191342 0.195090 +endloop +endfacet +facet normal -0.952376 -0.288899 0.097551 +outer loop +vertex -0.923880 -0.382684 0.000000 +vertex -0.961939 -0.191342 0.195090 +vertex -0.980785 -0.195090 0.000000 +endloop +endfacet +facet normal -0.094244 -0.028589 0.995139 +outer loop +vertex -0.180240 -0.074658 0.980785 +vertex -0.000000 -0.000001 1.000000 +vertex -0.191342 -0.038061 0.980785 +endloop +endfacet +facet normal -0.094245 -0.028589 -0.995138 +outer loop +vertex 0.000000 -0.000000 -1.000000 +vertex -0.180240 -0.074658 -0.980785 +vertex -0.191342 -0.038061 -0.980785 +endloop +endfacet +facet normal -0.633158 -0.062361 -0.771506 +outer loop +vertex -0.544895 -0.108387 -0.831470 +vertex -0.693520 -0.137950 -0.707107 +vertex -0.707107 -0.000000 -0.707107 +endloop +endfacet +facet normal -0.633159 -0.062360 -0.771506 +outer loop +vertex -0.544895 -0.108387 -0.831470 +vertex -0.707107 -0.000000 -0.707107 +vertex -0.555570 -0.000000 -0.831470 +endloop +endfacet +facet normal -0.878612 -0.086536 0.469630 +outer loop +vertex -0.906127 -0.180240 0.382683 +vertex -0.815493 -0.162212 0.555570 +vertex -0.831469 -0.000000 0.555570 +endloop +endfacet +facet normal -0.878612 -0.086536 0.469630 +outer loop +vertex -0.906127 -0.180240 0.382683 +vertex -0.831469 -0.000000 0.555570 +vertex -0.923879 -0.000000 0.382683 +endloop +endfacet +facet normal -0.470890 -0.046379 -0.880972 +outer loop +vertex -0.375330 -0.074658 -0.923880 +vertex -0.544895 -0.108387 -0.831470 +vertex -0.555570 -0.000000 -0.831470 +endloop +endfacet +facet normal -0.470889 -0.046378 -0.880972 +outer loop +vertex -0.375330 -0.074658 -0.923880 +vertex -0.555570 -0.000000 -0.831470 +vertex -0.382683 -0.000000 -0.923880 +endloop +endfacet +facet normal -0.952719 -0.093835 0.289002 +outer loop +vertex -0.961939 -0.191342 0.195090 +vertex -0.906127 -0.180240 0.382683 +vertex -0.923879 -0.000000 0.382683 +endloop +endfacet +facet normal -0.952719 -0.093834 0.289002 +outer loop +vertex -0.961939 -0.191342 0.195090 +vertex -0.923879 -0.000000 0.382683 +vertex -0.980785 -0.000000 0.195090 +endloop +endfacet +facet normal -0.290167 -0.028579 -0.956549 +outer loop +vertex -0.191342 -0.038061 -0.980785 +vertex -0.375330 -0.074658 -0.923880 +vertex -0.382683 -0.000000 -0.923880 +endloop +endfacet +facet normal -0.290166 -0.028579 -0.956550 +outer loop +vertex -0.191342 -0.038061 -0.980785 +vertex -0.382683 -0.000000 -0.923880 +vertex -0.195090 -0.000000 -0.980785 +endloop +endfacet +facet normal -0.990438 -0.097549 0.097551 +outer loop +vertex -0.980785 -0.195090 0.000000 +vertex -0.961939 -0.191342 0.195090 +vertex -0.980785 -0.000000 0.195090 +endloop +endfacet +facet normal -0.990438 -0.097549 0.097551 +outer loop +vertex -0.980785 -0.195090 0.000000 +vertex -0.980785 -0.000000 0.195090 +vertex -1.000000 -0.000000 0.000000 +endloop +endfacet +facet normal -0.098014 -0.009653 0.995138 +outer loop +vertex -0.191342 -0.038061 0.980785 +vertex -0.000000 -0.000001 1.000000 +vertex -0.195090 -0.000000 0.980785 +endloop +endfacet +facet normal -0.098014 -0.009653 -0.995138 +outer loop +vertex 0.000000 -0.000000 -1.000000 +vertex -0.191342 -0.038061 -0.980785 +vertex -0.195090 -0.000000 -0.980785 +endloop +endfacet +facet normal -0.990438 -0.097549 -0.097551 +outer loop +vertex -0.961939 -0.191342 -0.195090 +vertex -0.980785 -0.195090 0.000000 +vertex -1.000000 -0.000000 0.000000 +endloop +endfacet +facet normal -0.990438 -0.097549 -0.097551 +outer loop +vertex -0.961939 -0.191342 -0.195090 +vertex -1.000000 -0.000000 0.000000 +vertex -0.980785 -0.000000 -0.195090 +endloop +endfacet +facet normal -0.290167 -0.028579 0.956549 +outer loop +vertex -0.375330 -0.074658 0.923880 +vertex -0.191342 -0.038061 0.980785 +vertex -0.195090 -0.000000 0.980785 +endloop +endfacet +facet normal -0.290166 -0.028579 0.956549 +outer loop +vertex -0.375330 -0.074658 0.923880 +vertex -0.195090 -0.000000 0.980785 +vertex -0.382683 -0.000000 0.923880 +endloop +endfacet +facet normal -0.952719 -0.093834 -0.289002 +outer loop +vertex -0.906127 -0.180240 -0.382683 +vertex -0.961939 -0.191342 -0.195090 +vertex -0.980785 -0.000000 -0.195090 +endloop +endfacet +facet normal -0.952719 -0.093835 -0.289002 +outer loop +vertex -0.906127 -0.180240 -0.382683 +vertex -0.980785 -0.000000 -0.195090 +vertex -0.923879 -0.000000 -0.382683 +endloop +endfacet +facet normal -0.470889 -0.046378 0.880973 +outer loop +vertex -0.544895 -0.108387 0.831470 +vertex -0.375330 -0.074658 0.923880 +vertex -0.382683 -0.000000 0.923880 +endloop +endfacet +facet normal -0.470890 -0.046378 0.880972 +outer loop +vertex -0.544895 -0.108387 0.831470 +vertex -0.382683 -0.000000 0.923880 +vertex -0.555570 -0.000000 0.831470 +endloop +endfacet +facet normal -0.878613 -0.086536 -0.469629 +outer loop +vertex -0.815493 -0.162212 -0.555570 +vertex -0.906127 -0.180240 -0.382683 +vertex -0.923879 -0.000000 -0.382683 +endloop +endfacet +facet normal -0.878613 -0.086535 -0.469629 +outer loop +vertex -0.815493 -0.162212 -0.555570 +vertex -0.923879 -0.000000 -0.382683 +vertex -0.831469 -0.000000 -0.555570 +endloop +endfacet +facet normal -0.633159 -0.062361 0.771506 +outer loop +vertex -0.693520 -0.137950 0.707107 +vertex -0.544895 -0.108387 0.831470 +vertex -0.555570 -0.000000 0.831470 +endloop +endfacet +facet normal -0.633159 -0.062361 0.771506 +outer loop +vertex -0.693520 -0.137950 0.707107 +vertex -0.555570 -0.000000 0.831470 +vertex -0.707107 -0.000000 0.707107 +endloop +endfacet +facet normal -0.770781 -0.075915 -0.632561 +outer loop +vertex -0.693520 -0.137950 -0.707107 +vertex -0.815493 -0.162212 -0.555570 +vertex -0.831469 -0.000000 -0.555570 +endloop +endfacet +facet normal -0.770781 -0.075914 -0.632562 +outer loop +vertex -0.693520 -0.137950 -0.707107 +vertex -0.831469 -0.000000 -0.555570 +vertex -0.707107 -0.000000 -0.707107 +endloop +endfacet +facet normal -0.770781 -0.075915 0.632562 +outer loop +vertex -0.815493 -0.162212 0.555570 +vertex -0.693520 -0.137950 0.707107 +vertex -0.707107 -0.000000 0.707107 +endloop +endfacet +facet normal -0.770781 -0.075915 0.632561 +outer loop +vertex -0.815493 -0.162212 0.555570 +vertex -0.707107 -0.000000 0.707107 +vertex -0.831469 -0.000000 0.555570 +endloop +endfacet +facet normal -0.952719 0.093835 -0.289002 +outer loop +vertex -0.923879 -0.000000 -0.382683 +vertex -0.980785 -0.000000 -0.195090 +vertex -0.961939 0.191342 -0.195090 +endloop +endfacet +facet normal -0.952719 0.093835 -0.289002 +outer loop +vertex -0.923879 -0.000000 -0.382683 +vertex -0.961939 0.191342 -0.195090 +vertex -0.906127 0.180240 -0.382683 +endloop +endfacet +facet normal -0.470889 0.046378 0.880972 +outer loop +vertex -0.555570 -0.000000 0.831470 +vertex -0.382683 -0.000000 0.923880 +vertex -0.375330 0.074658 0.923880 +endloop +endfacet +facet normal -0.470889 0.046379 0.880972 +outer loop +vertex -0.555570 -0.000000 0.831470 +vertex -0.375330 0.074658 0.923880 +vertex -0.544895 0.108386 0.831470 +endloop +endfacet +facet normal -0.878612 0.086537 -0.469629 +outer loop +vertex -0.831469 -0.000000 -0.555570 +vertex -0.923879 -0.000000 -0.382683 +vertex -0.906127 0.180240 -0.382683 +endloop +endfacet +facet normal -0.878612 0.086535 -0.469629 +outer loop +vertex -0.831469 -0.000000 -0.555570 +vertex -0.906127 0.180240 -0.382683 +vertex -0.815493 0.162211 -0.555570 +endloop +endfacet +facet normal -0.633159 0.062361 0.771506 +outer loop +vertex -0.707107 -0.000000 0.707107 +vertex -0.555570 -0.000000 0.831470 +vertex -0.544895 0.108386 0.831470 +endloop +endfacet +facet normal -0.633159 0.062361 0.771506 +outer loop +vertex -0.707107 -0.000000 0.707107 +vertex -0.544895 0.108386 0.831470 +vertex -0.693520 0.137949 0.707107 +endloop +endfacet +facet normal -0.770781 0.075915 -0.632562 +outer loop +vertex -0.707107 -0.000000 -0.707107 +vertex -0.831469 -0.000000 -0.555570 +vertex -0.815493 0.162211 -0.555570 +endloop +endfacet +facet normal -0.770781 0.075916 -0.632561 +outer loop +vertex -0.707107 -0.000000 -0.707107 +vertex -0.815493 0.162211 -0.555570 +vertex -0.693520 0.137949 -0.707107 +endloop +endfacet +facet normal -0.770781 0.075914 0.632562 +outer loop +vertex -0.831469 -0.000000 0.555570 +vertex -0.707107 -0.000000 0.707107 +vertex -0.693520 0.137949 0.707107 +endloop +endfacet +facet normal -0.770781 0.075916 0.632562 +outer loop +vertex -0.831469 -0.000000 0.555570 +vertex -0.693520 0.137949 0.707107 +vertex -0.815493 0.162211 0.555570 +endloop +endfacet +facet normal -0.633158 0.062360 -0.771506 +outer loop +vertex -0.555570 -0.000000 -0.831470 +vertex -0.707107 -0.000000 -0.707107 +vertex -0.693520 0.137949 -0.707107 +endloop +endfacet +facet normal -0.633159 0.062361 -0.771505 +outer loop +vertex -0.555570 -0.000000 -0.831470 +vertex -0.693520 0.137949 -0.707107 +vertex -0.544895 0.108386 -0.831470 +endloop +endfacet +facet normal -0.878612 0.086536 0.469630 +outer loop +vertex -0.923879 -0.000000 0.382683 +vertex -0.831469 -0.000000 0.555570 +vertex -0.815493 0.162211 0.555570 +endloop +endfacet +facet normal -0.878612 0.086535 0.469630 +outer loop +vertex -0.923879 -0.000000 0.382683 +vertex -0.815493 0.162211 0.555570 +vertex -0.906127 0.180240 0.382683 +endloop +endfacet +facet normal -0.470890 0.046379 -0.880972 +outer loop +vertex -0.382683 -0.000000 -0.923880 +vertex -0.555570 -0.000000 -0.831470 +vertex -0.544895 0.108386 -0.831470 +endloop +endfacet +facet normal -0.470889 0.046378 -0.880972 +outer loop +vertex -0.382683 -0.000000 -0.923880 +vertex -0.544895 0.108386 -0.831470 +vertex -0.375330 0.074658 -0.923880 +endloop +endfacet +facet normal -0.952719 0.093836 0.289002 +outer loop +vertex -0.980785 -0.000000 0.195090 +vertex -0.923879 -0.000000 0.382683 +vertex -0.906127 0.180240 0.382683 +endloop +endfacet +facet normal -0.952719 0.093835 0.289002 +outer loop +vertex -0.980785 -0.000000 0.195090 +vertex -0.906127 0.180240 0.382683 +vertex -0.961939 0.191342 0.195090 +endloop +endfacet +facet normal -0.290166 0.028579 -0.956549 +outer loop +vertex -0.195090 -0.000000 -0.980785 +vertex -0.382683 -0.000000 -0.923880 +vertex -0.375330 0.074658 -0.923880 +endloop +endfacet +facet normal -0.290166 0.028579 -0.956549 +outer loop +vertex -0.195090 -0.000000 -0.980785 +vertex -0.375330 0.074658 -0.923880 +vertex -0.191342 0.038060 -0.980785 +endloop +endfacet +facet normal -0.990438 0.097550 0.097551 +outer loop +vertex -1.000000 -0.000000 0.000000 +vertex -0.980785 -0.000000 0.195090 +vertex -0.961939 0.191342 0.195090 +endloop +endfacet +facet normal -0.990438 0.097550 0.097551 +outer loop +vertex -1.000000 -0.000000 0.000000 +vertex -0.961939 0.191342 0.195090 +vertex -0.980785 0.195090 0.000000 +endloop +endfacet +facet normal -0.098012 0.009653 0.995138 +outer loop +vertex -0.195090 -0.000000 0.980785 +vertex -0.000000 -0.000001 1.000000 +vertex -0.191342 0.038060 0.980785 +endloop +endfacet +facet normal -0.098012 0.009653 -0.995138 +outer loop +vertex 0.000000 -0.000000 -1.000000 +vertex -0.195090 -0.000000 -0.980785 +vertex -0.191342 0.038060 -0.980785 +endloop +endfacet +facet normal -0.990438 0.097551 -0.097551 +outer loop +vertex -0.980785 -0.000000 -0.195090 +vertex -1.000000 -0.000000 0.000000 +vertex -0.980785 0.195090 0.000000 +endloop +endfacet +facet normal -0.990438 0.097549 -0.097551 +outer loop +vertex -0.980785 -0.000000 -0.195090 +vertex -0.980785 0.195090 0.000000 +vertex -0.961939 0.191342 -0.195090 +endloop +endfacet +facet normal -0.290166 0.028578 0.956549 +outer loop +vertex -0.382683 -0.000000 0.923880 +vertex -0.195090 -0.000000 0.980785 +vertex -0.191342 0.038060 0.980785 +endloop +endfacet +facet normal -0.290166 0.028579 0.956549 +outer loop +vertex -0.382683 -0.000000 0.923880 +vertex -0.191342 0.038060 0.980785 +vertex -0.375330 0.074658 0.923880 +endloop +endfacet +facet normal -0.452793 0.137354 -0.880972 +outer loop +vertex -0.375330 0.074658 -0.923880 +vertex -0.544895 0.108386 -0.831470 +vertex -0.513280 0.212607 -0.831470 +endloop +endfacet +facet normal -0.452794 0.137353 -0.880972 +outer loop +vertex -0.375330 0.074658 -0.923880 +vertex -0.513280 0.212607 -0.831470 +vertex -0.353553 0.146446 -0.923880 +endloop +endfacet +facet normal -0.916106 0.277897 0.289002 +outer loop +vertex -0.961939 0.191342 0.195090 +vertex -0.906127 0.180240 0.382683 +vertex -0.853553 0.353553 0.382683 +endloop +endfacet +facet normal -0.916106 0.277898 0.289002 +outer loop +vertex -0.961939 0.191342 0.195090 +vertex -0.853553 0.353553 0.382683 +vertex -0.906127 0.375330 0.195090 +endloop +endfacet +facet normal -0.279015 0.084638 -0.956550 +outer loop +vertex -0.191342 0.038060 -0.980785 +vertex -0.375330 0.074658 -0.923880 +vertex -0.353553 0.146446 -0.923880 +endloop +endfacet +facet normal -0.279016 0.084638 -0.956549 +outer loop +vertex -0.191342 0.038060 -0.980785 +vertex -0.353553 0.146446 -0.923880 +vertex -0.180240 0.074657 -0.980785 +endloop +endfacet +facet normal -0.952376 0.288901 0.097551 +outer loop +vertex -0.980785 0.195090 0.000000 +vertex -0.961939 0.191342 0.195090 +vertex -0.906127 0.375330 0.195090 +endloop +endfacet +facet normal -0.952376 0.288900 0.097551 +outer loop +vertex -0.980785 0.195090 0.000000 +vertex -0.906127 0.375330 0.195090 +vertex -0.923879 0.382683 0.000000 +endloop +endfacet +facet normal -0.094248 0.028589 0.995138 +outer loop +vertex -0.191342 0.038060 0.980785 +vertex -0.000000 -0.000001 1.000000 +vertex -0.180240 0.074658 0.980785 +endloop +endfacet +facet normal -0.094247 0.028589 -0.995138 +outer loop +vertex 0.000000 -0.000000 -1.000000 +vertex -0.191342 0.038060 -0.980785 +vertex -0.180240 0.074657 -0.980785 +endloop +endfacet +facet normal -0.952376 0.288901 -0.097551 +outer loop +vertex -0.961939 0.191342 -0.195090 +vertex -0.980785 0.195090 0.000000 +vertex -0.923879 0.382683 0.000000 +endloop +endfacet +facet normal -0.952376 0.288900 -0.097551 +outer loop +vertex -0.961939 0.191342 -0.195090 +vertex -0.923879 0.382683 0.000000 +vertex -0.906127 0.375330 -0.195090 +endloop +endfacet +facet normal -0.279015 0.084639 0.956550 +outer loop +vertex -0.375330 0.074658 0.923880 +vertex -0.191342 0.038060 0.980785 +vertex -0.180240 0.074658 0.980785 +endloop +endfacet +facet normal -0.279016 0.084638 0.956549 +outer loop +vertex -0.375330 0.074658 0.923880 +vertex -0.180240 0.074658 0.980785 +vertex -0.353553 0.146446 0.923880 +endloop +endfacet +facet normal -0.916106 0.277898 -0.289002 +outer loop +vertex -0.906127 0.180240 -0.382683 +vertex -0.961939 0.191342 -0.195090 +vertex -0.906127 0.375330 -0.195090 +endloop +endfacet +facet normal -0.916106 0.277897 -0.289002 +outer loop +vertex -0.906127 0.180240 -0.382683 +vertex -0.906127 0.375330 -0.195090 +vertex -0.853553 0.353553 -0.382683 +endloop +endfacet +facet normal -0.452793 0.137354 0.880973 +outer loop +vertex -0.544895 0.108386 0.831470 +vertex -0.375330 0.074658 0.923880 +vertex -0.353553 0.146446 0.923880 +endloop +endfacet +facet normal -0.452793 0.137353 0.880972 +outer loop +vertex -0.544895 0.108386 0.831470 +vertex -0.353553 0.146446 0.923880 +vertex -0.513280 0.212607 0.831470 +endloop +endfacet +facet normal -0.844848 0.256282 -0.469629 +outer loop +vertex -0.815493 0.162211 -0.555570 +vertex -0.906127 0.180240 -0.382683 +vertex -0.853553 0.353553 -0.382683 +endloop +endfacet +facet normal -0.844848 0.256281 -0.469630 +outer loop +vertex -0.815493 0.162211 -0.555570 +vertex -0.853553 0.353553 -0.382683 +vertex -0.768177 0.318189 -0.555570 +endloop +endfacet +facet normal -0.608827 0.184685 0.771506 +outer loop +vertex -0.693520 0.137949 0.707107 +vertex -0.544895 0.108386 0.831470 +vertex -0.513280 0.212607 0.831470 +endloop +endfacet +facet normal -0.608826 0.184686 0.771506 +outer loop +vertex -0.693520 0.137949 0.707107 +vertex -0.513280 0.212607 0.831470 +vertex -0.653281 0.270598 0.707107 +endloop +endfacet +facet normal -0.741160 0.224828 -0.632561 +outer loop +vertex -0.693520 0.137949 -0.707107 +vertex -0.815493 0.162211 -0.555570 +vertex -0.768177 0.318189 -0.555570 +endloop +endfacet +facet normal -0.741160 0.224829 -0.632562 +outer loop +vertex -0.693520 0.137949 -0.707107 +vertex -0.768177 0.318189 -0.555570 +vertex -0.653281 0.270598 -0.707107 +endloop +endfacet +facet normal -0.741160 0.224828 0.632562 +outer loop +vertex -0.815493 0.162211 0.555570 +vertex -0.693520 0.137949 0.707107 +vertex -0.653281 0.270598 0.707107 +endloop +endfacet +facet normal -0.741160 0.224829 0.632562 +outer loop +vertex -0.815493 0.162211 0.555570 +vertex -0.653281 0.270598 0.707107 +vertex -0.768177 0.318189 0.555570 +endloop +endfacet +facet normal -0.608826 0.184686 -0.771506 +outer loop +vertex -0.544895 0.108386 -0.831470 +vertex -0.693520 0.137949 -0.707107 +vertex -0.653281 0.270598 -0.707107 +endloop +endfacet +facet normal -0.608826 0.184685 -0.771506 +outer loop +vertex -0.544895 0.108386 -0.831470 +vertex -0.653281 0.270598 -0.707107 +vertex -0.513280 0.212607 -0.831470 +endloop +endfacet +facet normal -0.844847 0.256283 0.469630 +outer loop +vertex -0.906127 0.180240 0.382683 +vertex -0.815493 0.162211 0.555570 +vertex -0.768177 0.318189 0.555570 +endloop +endfacet +facet normal -0.844848 0.256281 0.469630 +outer loop +vertex -0.906127 0.180240 0.382683 +vertex -0.768177 0.318189 0.555570 +vertex -0.853553 0.353553 0.382683 +endloop +endfacet +facet normal -0.417296 0.223050 0.880972 +outer loop +vertex -0.513280 0.212607 0.831470 +vertex -0.353553 0.146446 0.923880 +vertex -0.318190 0.212607 0.923880 +endloop +endfacet +facet normal -0.417296 0.223050 0.880972 +outer loop +vertex -0.513280 0.212607 0.831470 +vertex -0.318190 0.212607 0.923880 +vertex -0.461940 0.308658 0.831470 +endloop +endfacet +facet normal -0.778616 0.416179 -0.469629 +outer loop +vertex -0.768177 0.318189 -0.555570 +vertex -0.853553 0.353553 -0.382683 +vertex -0.768178 0.513280 -0.382683 +endloop +endfacet +facet normal -0.778616 0.416179 -0.469630 +outer loop +vertex -0.768177 0.318189 -0.555570 +vertex -0.768178 0.513280 -0.382683 +vertex -0.691341 0.461939 -0.555570 +endloop +endfacet +facet normal -0.561098 0.299913 0.771506 +outer loop +vertex -0.653281 0.270598 0.707107 +vertex -0.513280 0.212607 0.831470 +vertex -0.461940 0.308658 0.831470 +endloop +endfacet +facet normal -0.561098 0.299913 0.771506 +outer loop +vertex -0.653281 0.270598 0.707107 +vertex -0.461940 0.308658 0.831470 +vertex -0.587938 0.392847 0.707107 +endloop +endfacet +facet normal -0.683057 0.365101 -0.632561 +outer loop +vertex -0.653281 0.270598 -0.707107 +vertex -0.768177 0.318189 -0.555570 +vertex -0.691341 0.461939 -0.555570 +endloop +endfacet +facet normal -0.683057 0.365102 -0.632562 +outer loop +vertex -0.653281 0.270598 -0.707107 +vertex -0.691341 0.461939 -0.555570 +vertex -0.587938 0.392847 -0.707107 +endloop +endfacet +facet normal -0.683057 0.365102 0.632561 +outer loop +vertex -0.768177 0.318189 0.555570 +vertex -0.653281 0.270598 0.707107 +vertex -0.587938 0.392847 0.707107 +endloop +endfacet +facet normal -0.683057 0.365102 0.632561 +outer loop +vertex -0.768177 0.318189 0.555570 +vertex -0.587938 0.392847 0.707107 +vertex -0.691341 0.461939 0.555570 +endloop +endfacet +facet normal -0.561097 0.299914 -0.771506 +outer loop +vertex -0.513280 0.212607 -0.831470 +vertex -0.653281 0.270598 -0.707107 +vertex -0.587938 0.392847 -0.707107 +endloop +endfacet +facet normal -0.561098 0.299913 -0.771506 +outer loop +vertex -0.513280 0.212607 -0.831470 +vertex -0.587938 0.392847 -0.707107 +vertex -0.461940 0.308658 -0.831470 +endloop +endfacet +facet normal -0.778615 0.416180 0.469630 +outer loop +vertex -0.853553 0.353553 0.382683 +vertex -0.768177 0.318189 0.555570 +vertex -0.691341 0.461939 0.555570 +endloop +endfacet +facet normal -0.778616 0.416178 0.469630 +outer loop +vertex -0.853553 0.353553 0.382683 +vertex -0.691341 0.461939 0.555570 +vertex -0.768178 0.513280 0.382683 +endloop +endfacet +facet normal -0.417297 0.223050 -0.880972 +outer loop +vertex -0.353553 0.146446 -0.923880 +vertex -0.513280 0.212607 -0.831470 +vertex -0.461940 0.308658 -0.831470 +endloop +endfacet +facet normal -0.417296 0.223050 -0.880972 +outer loop +vertex -0.353553 0.146446 -0.923880 +vertex -0.461940 0.308658 -0.831470 +vertex -0.318189 0.212607 -0.923880 +endloop +endfacet +facet normal -0.844288 0.451282 0.289002 +outer loop +vertex -0.906127 0.375330 0.195090 +vertex -0.853553 0.353553 0.382683 +vertex -0.768178 0.513280 0.382683 +endloop +endfacet +facet normal -0.844288 0.451282 0.289002 +outer loop +vertex -0.906127 0.375330 0.195090 +vertex -0.768178 0.513280 0.382683 +vertex -0.815493 0.544895 0.195090 +endloop +endfacet +facet normal -0.257142 0.137445 -0.956550 +outer loop +vertex -0.180240 0.074657 -0.980785 +vertex -0.353553 0.146446 -0.923880 +vertex -0.318189 0.212607 -0.923880 +endloop +endfacet +facet normal -0.257142 0.137445 -0.956549 +outer loop +vertex -0.180240 0.074657 -0.980785 +vertex -0.318189 0.212607 -0.923880 +vertex -0.162212 0.108386 -0.980785 +endloop +endfacet +facet normal -0.877715 0.469149 0.097551 +outer loop +vertex -0.923879 0.382683 0.000000 +vertex -0.906127 0.375330 0.195090 +vertex -0.815493 0.544895 0.195090 +endloop +endfacet +facet normal -0.877715 0.469149 0.097551 +outer loop +vertex -0.923879 0.382683 0.000000 +vertex -0.815493 0.544895 0.195090 +vertex -0.831469 0.555570 0.000000 +endloop +endfacet +facet normal -0.086859 0.046426 0.995138 +outer loop +vertex -0.180240 0.074658 0.980785 +vertex -0.000000 -0.000001 1.000000 +vertex -0.162212 0.108386 0.980785 +endloop +endfacet +facet normal -0.086857 0.046426 -0.995138 +outer loop +vertex 0.000000 -0.000000 -1.000000 +vertex -0.180240 0.074657 -0.980785 +vertex -0.162212 0.108386 -0.980785 +endloop +endfacet +facet normal -0.877714 0.469149 -0.097551 +outer loop +vertex -0.906127 0.375330 -0.195090 +vertex -0.923879 0.382683 0.000000 +vertex -0.831469 0.555570 0.000000 +endloop +endfacet +facet normal -0.877715 0.469149 -0.097551 +outer loop +vertex -0.906127 0.375330 -0.195090 +vertex -0.831469 0.555570 0.000000 +vertex -0.815493 0.544895 -0.195090 +endloop +endfacet +facet normal -0.257142 0.137446 0.956549 +outer loop +vertex -0.353553 0.146446 0.923880 +vertex -0.180240 0.074658 0.980785 +vertex -0.162212 0.108386 0.980785 +endloop +endfacet +facet normal -0.257142 0.137445 0.956549 +outer loop +vertex -0.353553 0.146446 0.923880 +vertex -0.162212 0.108386 0.980785 +vertex -0.318190 0.212607 0.923880 +endloop +endfacet +facet normal -0.844288 0.451282 -0.289002 +outer loop +vertex -0.853553 0.353553 -0.382683 +vertex -0.906127 0.375330 -0.195090 +vertex -0.815493 0.544895 -0.195090 +endloop +endfacet +facet normal -0.844288 0.451282 -0.289002 +outer loop +vertex -0.853553 0.353553 -0.382683 +vertex -0.815493 0.544895 -0.195090 +vertex -0.768178 0.513280 -0.382683 +endloop +endfacet +facet normal -0.740025 0.607322 0.289003 +outer loop +vertex -0.815493 0.544895 0.195090 +vertex -0.768178 0.513280 0.382683 +vertex -0.653281 0.653281 0.382683 +endloop +endfacet +facet normal -0.740025 0.607323 0.289001 +outer loop +vertex -0.815493 0.544895 0.195090 +vertex -0.653281 0.653281 0.382683 +vertex -0.693519 0.693519 0.195090 +endloop +endfacet +facet normal -0.225386 0.184970 -0.956550 +outer loop +vertex -0.162212 0.108386 -0.980785 +vertex -0.318189 0.212607 -0.923880 +vertex -0.270598 0.270598 -0.923880 +endloop +endfacet +facet normal -0.225389 0.184970 -0.956549 +outer loop +vertex -0.162212 0.108386 -0.980785 +vertex -0.270598 0.270598 -0.923880 +vertex -0.137950 0.137949 -0.980785 +endloop +endfacet +facet normal -0.769324 0.631367 0.097551 +outer loop +vertex -0.831469 0.555570 0.000000 +vertex -0.815493 0.544895 0.195090 +vertex -0.693519 0.693519 0.195090 +endloop +endfacet +facet normal -0.769323 0.631368 0.097551 +outer loop +vertex -0.831469 0.555570 0.000000 +vertex -0.693519 0.693519 0.195090 +vertex -0.707106 0.707106 0.000000 +endloop +endfacet +facet normal -0.076129 0.062479 0.995139 +outer loop +vertex -0.162212 0.108386 0.980785 +vertex -0.000000 -0.000001 1.000000 +vertex -0.137950 0.137949 0.980785 +endloop +endfacet +facet normal -0.076131 0.062479 -0.995138 +outer loop +vertex 0.000000 -0.000000 -1.000000 +vertex -0.162212 0.108386 -0.980785 +vertex -0.137950 0.137949 -0.980785 +endloop +endfacet +facet normal -0.769323 0.631368 -0.097551 +outer loop +vertex -0.815493 0.544895 -0.195090 +vertex -0.831469 0.555570 0.000000 +vertex -0.707106 0.707106 0.000000 +endloop +endfacet +facet normal -0.769323 0.631368 -0.097551 +outer loop +vertex -0.815493 0.544895 -0.195090 +vertex -0.707106 0.707106 0.000000 +vertex -0.693519 0.693519 -0.195090 +endloop +endfacet +facet normal -0.225388 0.184970 0.956549 +outer loop +vertex -0.318190 0.212607 0.923880 +vertex -0.162212 0.108386 0.980785 +vertex -0.137950 0.137949 0.980785 +endloop +endfacet +facet normal -0.225386 0.184970 0.956550 +outer loop +vertex -0.318190 0.212607 0.923880 +vertex -0.137950 0.137949 0.980785 +vertex -0.270598 0.270598 0.923880 +endloop +endfacet +facet normal -0.740025 0.607323 -0.289002 +outer loop +vertex -0.768178 0.513280 -0.382683 +vertex -0.815493 0.544895 -0.195090 +vertex -0.693519 0.693519 -0.195090 +endloop +endfacet +facet normal -0.740025 0.607322 -0.289002 +outer loop +vertex -0.768178 0.513280 -0.382683 +vertex -0.693519 0.693519 -0.195090 +vertex -0.653281 0.653281 -0.382683 +endloop +endfacet +facet normal -0.365764 0.300175 0.880972 +outer loop +vertex -0.461940 0.308658 0.831470 +vertex -0.318190 0.212607 0.923880 +vertex -0.270598 0.270598 0.923880 +endloop +endfacet +facet normal -0.365764 0.300175 0.880972 +outer loop +vertex -0.461940 0.308658 0.831470 +vertex -0.270598 0.270598 0.923880 +vertex -0.392847 0.392847 0.831470 +endloop +endfacet +facet normal -0.682463 0.560083 -0.469629 +outer loop +vertex -0.691341 0.461939 -0.555570 +vertex -0.768178 0.513280 -0.382683 +vertex -0.653281 0.653281 -0.382683 +endloop +endfacet +facet normal -0.682462 0.560083 -0.469630 +outer loop +vertex -0.691341 0.461939 -0.555570 +vertex -0.653281 0.653281 -0.382683 +vertex -0.587937 0.587937 -0.555570 +endloop +endfacet +facet normal -0.491806 0.403615 0.771506 +outer loop +vertex -0.587938 0.392847 0.707107 +vertex -0.461940 0.308658 0.831470 +vertex -0.392847 0.392847 0.831470 +endloop +endfacet +facet normal -0.491806 0.403615 0.771506 +outer loop +vertex -0.587938 0.392847 0.707107 +vertex -0.392847 0.392847 0.831470 +vertex -0.500000 0.500000 0.707107 +endloop +endfacet +facet normal -0.598704 0.491344 -0.632561 +outer loop +vertex -0.587938 0.392847 -0.707107 +vertex -0.691341 0.461939 -0.555570 +vertex -0.587937 0.587937 -0.555570 +endloop +endfacet +facet normal -0.598705 0.491344 -0.632561 +outer loop +vertex -0.587938 0.392847 -0.707107 +vertex -0.587937 0.587937 -0.555570 +vertex -0.500000 0.500000 -0.707107 +endloop +endfacet +facet normal -0.598705 0.491344 0.632561 +outer loop +vertex -0.691341 0.461939 0.555570 +vertex -0.587938 0.392847 0.707107 +vertex -0.500000 0.500000 0.707107 +endloop +endfacet +facet normal -0.598704 0.491344 0.632561 +outer loop +vertex -0.691341 0.461939 0.555570 +vertex -0.500000 0.500000 0.707107 +vertex -0.587937 0.587937 0.555570 +endloop +endfacet +facet normal -0.491805 0.403615 -0.771507 +outer loop +vertex -0.461940 0.308658 -0.831470 +vertex -0.587938 0.392847 -0.707107 +vertex -0.500000 0.500000 -0.707107 +endloop +endfacet +facet normal -0.491807 0.403615 -0.771506 +outer loop +vertex -0.461940 0.308658 -0.831470 +vertex -0.500000 0.500000 -0.707107 +vertex -0.392847 0.392847 -0.831470 +endloop +endfacet +facet normal -0.682462 0.560083 0.469630 +outer loop +vertex -0.768178 0.513280 0.382683 +vertex -0.691341 0.461939 0.555570 +vertex -0.587937 0.587937 0.555570 +endloop +endfacet +facet normal -0.682463 0.560082 0.469630 +outer loop +vertex -0.768178 0.513280 0.382683 +vertex -0.587937 0.587937 0.555570 +vertex -0.653281 0.653281 0.382683 +endloop +endfacet +facet normal -0.365764 0.300175 -0.880972 +outer loop +vertex -0.318189 0.212607 -0.923880 +vertex -0.461940 0.308658 -0.831470 +vertex -0.392847 0.392847 -0.831470 +endloop +endfacet +facet normal -0.365763 0.300175 -0.880972 +outer loop +vertex -0.318189 0.212607 -0.923880 +vertex -0.392847 0.392847 -0.831470 +vertex -0.270598 0.270598 -0.923880 +endloop +endfacet +facet normal -0.560082 0.682463 -0.469630 +outer loop +vertex -0.587937 0.587937 -0.555570 +vertex -0.653281 0.653281 -0.382683 +vertex -0.513280 0.768177 -0.382683 +endloop +endfacet +facet normal -0.560083 0.682463 -0.469629 +outer loop +vertex -0.587937 0.587937 -0.555570 +vertex -0.513280 0.768177 -0.382683 +vertex -0.461939 0.691341 -0.555570 +endloop +endfacet +facet normal -0.403615 0.491807 0.771506 +outer loop +vertex -0.500000 0.500000 0.707107 +vertex -0.392847 0.392847 0.831470 +vertex -0.308658 0.461939 0.831470 +endloop +endfacet +facet normal -0.403615 0.491807 0.771506 +outer loop +vertex -0.500000 0.500000 0.707107 +vertex -0.308658 0.461939 0.831470 +vertex -0.392847 0.587937 0.707107 +endloop +endfacet +facet normal -0.491344 0.598705 -0.632561 +outer loop +vertex -0.500000 0.500000 -0.707107 +vertex -0.587937 0.587937 -0.555570 +vertex -0.461939 0.691341 -0.555570 +endloop +endfacet +facet normal -0.491343 0.598705 -0.632562 +outer loop +vertex -0.500000 0.500000 -0.707107 +vertex -0.461939 0.691341 -0.555570 +vertex -0.392847 0.587937 -0.707107 +endloop +endfacet +facet normal -0.491344 0.598705 0.632561 +outer loop +vertex -0.587937 0.587937 0.555570 +vertex -0.500000 0.500000 0.707107 +vertex -0.392847 0.587937 0.707107 +endloop +endfacet +facet normal -0.491344 0.598705 0.632562 +outer loop +vertex -0.587937 0.587937 0.555570 +vertex -0.392847 0.587937 0.707107 +vertex -0.461939 0.691341 0.555570 +endloop +endfacet +facet normal -0.403615 0.491806 -0.771506 +outer loop +vertex -0.392847 0.392847 -0.831470 +vertex -0.500000 0.500000 -0.707107 +vertex -0.392847 0.587937 -0.707107 +endloop +endfacet +facet normal -0.403615 0.491807 -0.771506 +outer loop +vertex -0.392847 0.392847 -0.831470 +vertex -0.392847 0.587937 -0.707107 +vertex -0.308658 0.461939 -0.831470 +endloop +endfacet +facet normal -0.560082 0.682463 0.469629 +outer loop +vertex -0.653281 0.653281 0.382683 +vertex -0.587937 0.587937 0.555570 +vertex -0.461939 0.691341 0.555570 +endloop +endfacet +facet normal -0.560083 0.682463 0.469630 +outer loop +vertex -0.653281 0.653281 0.382683 +vertex -0.461939 0.691341 0.555570 +vertex -0.513280 0.768177 0.382683 +endloop +endfacet +facet normal -0.300174 0.365764 -0.880972 +outer loop +vertex -0.270598 0.270598 -0.923880 +vertex -0.392847 0.392847 -0.831470 +vertex -0.308658 0.461939 -0.831470 +endloop +endfacet +facet normal -0.300175 0.365764 -0.880972 +outer loop +vertex -0.270598 0.270598 -0.923880 +vertex -0.308658 0.461939 -0.831470 +vertex -0.212607 0.318189 -0.923880 +endloop +endfacet +facet normal -0.607323 0.740025 0.289002 +outer loop +vertex -0.693519 0.693519 0.195090 +vertex -0.653281 0.653281 0.382683 +vertex -0.513280 0.768177 0.382683 +endloop +endfacet +facet normal -0.607322 0.740026 0.289001 +outer loop +vertex -0.693519 0.693519 0.195090 +vertex -0.513280 0.768177 0.382683 +vertex -0.544895 0.815492 0.195090 +endloop +endfacet +facet normal -0.184969 0.225387 -0.956550 +outer loop +vertex -0.137950 0.137949 -0.980785 +vertex -0.270598 0.270598 -0.923880 +vertex -0.212607 0.318189 -0.923880 +endloop +endfacet +facet normal -0.184971 0.225387 -0.956549 +outer loop +vertex -0.137950 0.137949 -0.980785 +vertex -0.212607 0.318189 -0.923880 +vertex -0.108386 0.162211 -0.980785 +endloop +endfacet +facet normal -0.631367 0.769324 0.097551 +outer loop +vertex -0.707106 0.707106 0.000000 +vertex -0.693519 0.693519 0.195090 +vertex -0.544895 0.815492 0.195090 +endloop +endfacet +facet normal -0.631367 0.769324 0.097551 +outer loop +vertex -0.707106 0.707106 0.000000 +vertex -0.544895 0.815492 0.195090 +vertex -0.555570 0.831469 0.000000 +endloop +endfacet +facet normal -0.062477 0.076131 0.995139 +outer loop +vertex -0.137950 0.137949 0.980785 +vertex -0.000000 -0.000001 1.000000 +vertex -0.108386 0.162211 0.980785 +endloop +endfacet +facet normal -0.062478 0.076131 -0.995138 +outer loop +vertex 0.000000 -0.000000 -1.000000 +vertex -0.137950 0.137949 -0.980785 +vertex -0.108386 0.162211 -0.980785 +endloop +endfacet +facet normal -0.631367 0.769324 -0.097551 +outer loop +vertex -0.693519 0.693519 -0.195090 +vertex -0.707106 0.707106 0.000000 +vertex -0.555570 0.831469 0.000000 +endloop +endfacet +facet normal -0.631367 0.769324 -0.097551 +outer loop +vertex -0.693519 0.693519 -0.195090 +vertex -0.555570 0.831469 0.000000 +vertex -0.544895 0.815492 -0.195090 +endloop +endfacet +facet normal -0.184970 0.225387 0.956550 +outer loop +vertex -0.270598 0.270598 0.923880 +vertex -0.137950 0.137949 0.980785 +vertex -0.108386 0.162211 0.980785 +endloop +endfacet +facet normal -0.184970 0.225387 0.956549 +outer loop +vertex -0.270598 0.270598 0.923880 +vertex -0.108386 0.162211 0.980785 +vertex -0.212607 0.318189 0.923880 +endloop +endfacet +facet normal -0.607322 0.740025 -0.289001 +outer loop +vertex -0.653281 0.653281 -0.382683 +vertex -0.693519 0.693519 -0.195090 +vertex -0.544895 0.815492 -0.195090 +endloop +endfacet +facet normal -0.607323 0.740025 -0.289002 +outer loop +vertex -0.653281 0.653281 -0.382683 +vertex -0.544895 0.815492 -0.195090 +vertex -0.513280 0.768177 -0.382683 +endloop +endfacet +facet normal -0.300175 0.365763 0.880972 +outer loop +vertex -0.392847 0.392847 0.831470 +vertex -0.270598 0.270598 0.923880 +vertex -0.212607 0.318189 0.923880 +endloop +endfacet +facet normal -0.300175 0.365764 0.880972 +outer loop +vertex -0.392847 0.392847 0.831470 +vertex -0.212607 0.318189 0.923880 +vertex -0.308658 0.461939 0.831470 +endloop +endfacet +facet normal -0.137446 0.257142 -0.956549 +outer loop +vertex -0.108386 0.162211 -0.980785 +vertex -0.212607 0.318189 -0.923880 +vertex -0.146446 0.353553 -0.923880 +endloop +endfacet +facet normal -0.137446 0.257142 -0.956549 +outer loop +vertex -0.108386 0.162211 -0.980785 +vertex -0.146446 0.353553 -0.923880 +vertex -0.074658 0.180240 -0.980785 +endloop +endfacet +facet normal -0.469148 0.877715 0.097551 +outer loop +vertex -0.555570 0.831469 0.000000 +vertex -0.544895 0.815492 0.195090 +vertex -0.375330 0.906127 0.195090 +endloop +endfacet +facet normal -0.469148 0.877715 0.097551 +outer loop +vertex -0.555570 0.831469 0.000000 +vertex -0.375330 0.906127 0.195090 +vertex -0.382683 0.923879 0.000000 +endloop +endfacet +facet normal -0.046428 0.086858 0.995138 +outer loop +vertex -0.108386 0.162211 0.980785 +vertex -0.000000 -0.000001 1.000000 +vertex -0.074658 0.180240 0.980785 +endloop +endfacet +facet normal -0.046428 0.086857 -0.995138 +outer loop +vertex 0.000000 -0.000000 -1.000000 +vertex -0.108386 0.162211 -0.980785 +vertex -0.074658 0.180240 -0.980785 +endloop +endfacet +facet normal -0.469148 0.877715 -0.097551 +outer loop +vertex -0.544895 0.815492 -0.195090 +vertex -0.555570 0.831469 0.000000 +vertex -0.382683 0.923879 0.000000 +endloop +endfacet +facet normal -0.469148 0.877715 -0.097551 +outer loop +vertex -0.544895 0.815492 -0.195090 +vertex -0.382683 0.923879 0.000000 +vertex -0.375330 0.906127 -0.195090 +endloop +endfacet +facet normal -0.137449 0.257142 0.956549 +outer loop +vertex -0.212607 0.318189 0.923880 +vertex -0.108386 0.162211 0.980785 +vertex -0.074658 0.180240 0.980785 +endloop +endfacet +facet normal -0.137445 0.257142 0.956549 +outer loop +vertex -0.212607 0.318189 0.923880 +vertex -0.074658 0.180240 0.980785 +vertex -0.146447 0.353553 0.923880 +endloop +endfacet +facet normal -0.451281 0.844289 -0.289002 +outer loop +vertex -0.513280 0.768177 -0.382683 +vertex -0.544895 0.815492 -0.195090 +vertex -0.375330 0.906127 -0.195090 +endloop +endfacet +facet normal -0.451282 0.844289 -0.289001 +outer loop +vertex -0.513280 0.768177 -0.382683 +vertex -0.375330 0.906127 -0.195090 +vertex -0.353553 0.853553 -0.382683 +endloop +endfacet +facet normal -0.223049 0.417297 0.880972 +outer loop +vertex -0.308658 0.461939 0.831470 +vertex -0.212607 0.318189 0.923880 +vertex -0.146447 0.353553 0.923880 +endloop +endfacet +facet normal -0.223050 0.417297 0.880972 +outer loop +vertex -0.308658 0.461939 0.831470 +vertex -0.146447 0.353553 0.923880 +vertex -0.212607 0.513280 0.831470 +endloop +endfacet +facet normal -0.416179 0.778616 -0.469629 +outer loop +vertex -0.461939 0.691341 -0.555570 +vertex -0.513280 0.768177 -0.382683 +vertex -0.353553 0.853553 -0.382683 +endloop +endfacet +facet normal -0.416178 0.778616 -0.469630 +outer loop +vertex -0.461939 0.691341 -0.555570 +vertex -0.353553 0.853553 -0.382683 +vertex -0.318189 0.768177 -0.555570 +endloop +endfacet +facet normal -0.299913 0.561098 0.771506 +outer loop +vertex -0.392847 0.587937 0.707107 +vertex -0.308658 0.461939 0.831470 +vertex -0.212607 0.513280 0.831470 +endloop +endfacet +facet normal -0.299913 0.561098 0.771506 +outer loop +vertex -0.392847 0.587937 0.707107 +vertex -0.212607 0.513280 0.831470 +vertex -0.270598 0.653281 0.707107 +endloop +endfacet +facet normal -0.365101 0.683057 -0.632561 +outer loop +vertex -0.392847 0.587937 -0.707107 +vertex -0.461939 0.691341 -0.555570 +vertex -0.318189 0.768177 -0.555570 +endloop +endfacet +facet normal -0.365102 0.683057 -0.632561 +outer loop +vertex -0.392847 0.587937 -0.707107 +vertex -0.318189 0.768177 -0.555570 +vertex -0.270598 0.653281 -0.707107 +endloop +endfacet +facet normal -0.365102 0.683057 0.632561 +outer loop +vertex -0.461939 0.691341 0.555570 +vertex -0.392847 0.587937 0.707107 +vertex -0.270598 0.653281 0.707107 +endloop +endfacet +facet normal -0.365101 0.683057 0.632561 +outer loop +vertex -0.461939 0.691341 0.555570 +vertex -0.270598 0.653281 0.707107 +vertex -0.318189 0.768177 0.555570 +endloop +endfacet +facet normal -0.299913 0.561098 -0.771506 +outer loop +vertex -0.308658 0.461939 -0.831470 +vertex -0.392847 0.587937 -0.707107 +vertex -0.270598 0.653281 -0.707107 +endloop +endfacet +facet normal -0.299913 0.561098 -0.771506 +outer loop +vertex -0.308658 0.461939 -0.831470 +vertex -0.270598 0.653281 -0.707107 +vertex -0.212607 0.513279 -0.831470 +endloop +endfacet +facet normal -0.416178 0.778616 0.469630 +outer loop +vertex -0.513280 0.768177 0.382683 +vertex -0.461939 0.691341 0.555570 +vertex -0.318189 0.768177 0.555570 +endloop +endfacet +facet normal -0.416179 0.778616 0.469630 +outer loop +vertex -0.513280 0.768177 0.382683 +vertex -0.318189 0.768177 0.555570 +vertex -0.353553 0.853553 0.382683 +endloop +endfacet +facet normal -0.223050 0.417297 -0.880972 +outer loop +vertex -0.212607 0.318189 -0.923880 +vertex -0.308658 0.461939 -0.831470 +vertex -0.212607 0.513279 -0.831470 +endloop +endfacet +facet normal -0.223051 0.417297 -0.880972 +outer loop +vertex -0.212607 0.318189 -0.923880 +vertex -0.212607 0.513279 -0.831470 +vertex -0.146446 0.353553 -0.923880 +endloop +endfacet +facet normal -0.451282 0.844288 0.289002 +outer loop +vertex -0.544895 0.815492 0.195090 +vertex -0.513280 0.768177 0.382683 +vertex -0.353553 0.853553 0.382683 +endloop +endfacet +facet normal -0.451281 0.844289 0.289001 +outer loop +vertex -0.544895 0.815492 0.195090 +vertex -0.353553 0.853553 0.382683 +vertex -0.375330 0.906127 0.195090 +endloop +endfacet +facet normal -0.184686 0.608826 0.771506 +outer loop +vertex -0.270598 0.653281 0.707107 +vertex -0.212607 0.513280 0.831470 +vertex -0.108386 0.544895 0.831470 +endloop +endfacet +facet normal -0.184686 0.608827 0.771506 +outer loop +vertex -0.270598 0.653281 0.707107 +vertex -0.108386 0.544895 0.831470 +vertex -0.137950 0.693520 0.707107 +endloop +endfacet +facet normal -0.224828 0.741160 -0.632561 +outer loop +vertex -0.270598 0.653281 -0.707107 +vertex -0.318189 0.768177 -0.555570 +vertex -0.162211 0.815492 -0.555570 +endloop +endfacet +facet normal -0.224828 0.741160 -0.632561 +outer loop +vertex -0.270598 0.653281 -0.707107 +vertex -0.162211 0.815492 -0.555570 +vertex -0.137950 0.693520 -0.707107 +endloop +endfacet +facet normal -0.224828 0.741161 0.632561 +outer loop +vertex -0.318189 0.768177 0.555570 +vertex -0.270598 0.653281 0.707107 +vertex -0.137950 0.693520 0.707107 +endloop +endfacet +facet normal -0.224828 0.741160 0.632561 +outer loop +vertex -0.318189 0.768177 0.555570 +vertex -0.137950 0.693520 0.707107 +vertex -0.162211 0.815492 0.555570 +endloop +endfacet +facet normal -0.184685 0.608827 -0.771506 +outer loop +vertex -0.212607 0.513279 -0.831470 +vertex -0.270598 0.653281 -0.707107 +vertex -0.137950 0.693520 -0.707107 +endloop +endfacet +facet normal -0.184685 0.608826 -0.771506 +outer loop +vertex -0.212607 0.513279 -0.831470 +vertex -0.137950 0.693520 -0.707107 +vertex -0.108386 0.544895 -0.831470 +endloop +endfacet +facet normal -0.256281 0.844848 0.469630 +outer loop +vertex -0.353553 0.853553 0.382683 +vertex -0.318189 0.768177 0.555570 +vertex -0.162211 0.815492 0.555570 +endloop +endfacet +facet normal -0.256282 0.844847 0.469630 +outer loop +vertex -0.353553 0.853553 0.382683 +vertex -0.162211 0.815492 0.555570 +vertex -0.180240 0.906127 0.382683 +endloop +endfacet +facet normal -0.137353 0.452794 -0.880972 +outer loop +vertex -0.146446 0.353553 -0.923880 +vertex -0.212607 0.513279 -0.831470 +vertex -0.108386 0.544895 -0.831470 +endloop +endfacet +facet normal -0.137354 0.452794 -0.880972 +outer loop +vertex -0.146446 0.353553 -0.923880 +vertex -0.108386 0.544895 -0.831470 +vertex -0.074658 0.375330 -0.923880 +endloop +endfacet +facet normal -0.277898 0.916107 0.289001 +outer loop +vertex -0.375330 0.906127 0.195090 +vertex -0.353553 0.853553 0.382683 +vertex -0.180240 0.906127 0.382683 +endloop +endfacet +facet normal -0.277898 0.916106 0.289002 +outer loop +vertex -0.375330 0.906127 0.195090 +vertex -0.180240 0.906127 0.382683 +vertex -0.191341 0.961939 0.195090 +endloop +endfacet +facet normal -0.084639 0.279015 -0.956549 +outer loop +vertex -0.074658 0.180240 -0.980785 +vertex -0.146446 0.353553 -0.923880 +vertex -0.074658 0.375330 -0.923880 +endloop +endfacet +facet normal -0.084638 0.279015 -0.956550 +outer loop +vertex -0.074658 0.180240 -0.980785 +vertex -0.074658 0.375330 -0.923880 +vertex -0.038060 0.191341 -0.980785 +endloop +endfacet +facet normal -0.288900 0.952376 0.097551 +outer loop +vertex -0.382683 0.923879 0.000000 +vertex -0.375330 0.906127 0.195090 +vertex -0.191341 0.961939 0.195090 +endloop +endfacet +facet normal -0.288900 0.952376 0.097551 +outer loop +vertex -0.382683 0.923879 0.000000 +vertex -0.191341 0.961939 0.195090 +vertex -0.195090 0.980785 0.000000 +endloop +endfacet +facet normal -0.028586 0.094246 0.995138 +outer loop +vertex -0.074658 0.180240 0.980785 +vertex -0.000000 -0.000001 1.000000 +vertex -0.038060 0.191342 0.980785 +endloop +endfacet +facet normal -0.028588 0.094246 -0.995138 +outer loop +vertex 0.000000 -0.000000 -1.000000 +vertex -0.074658 0.180240 -0.980785 +vertex -0.038060 0.191341 -0.980785 +endloop +endfacet +facet normal -0.288900 0.952376 -0.097551 +outer loop +vertex -0.375330 0.906127 -0.195090 +vertex -0.382683 0.923879 0.000000 +vertex -0.195090 0.980785 0.000000 +endloop +endfacet +facet normal -0.288900 0.952376 -0.097551 +outer loop +vertex -0.375330 0.906127 -0.195090 +vertex -0.195090 0.980785 0.000000 +vertex -0.191341 0.961939 -0.195090 +endloop +endfacet +facet normal -0.084636 0.279016 0.956550 +outer loop +vertex -0.146447 0.353553 0.923880 +vertex -0.074658 0.180240 0.980785 +vertex -0.038060 0.191342 0.980785 +endloop +endfacet +facet normal -0.084639 0.279016 0.956549 +outer loop +vertex -0.146447 0.353553 0.923880 +vertex -0.038060 0.191342 0.980785 +vertex -0.074658 0.375330 0.923880 +endloop +endfacet +facet normal -0.277898 0.916106 -0.289002 +outer loop +vertex -0.353553 0.853553 -0.382683 +vertex -0.375330 0.906127 -0.195090 +vertex -0.191341 0.961939 -0.195090 +endloop +endfacet +facet normal -0.277898 0.916107 -0.289001 +outer loop +vertex -0.353553 0.853553 -0.382683 +vertex -0.191341 0.961939 -0.195090 +vertex -0.180240 0.906127 -0.382683 +endloop +endfacet +facet normal -0.137353 0.452794 0.880972 +outer loop +vertex -0.212607 0.513280 0.831470 +vertex -0.146447 0.353553 0.923880 +vertex -0.074658 0.375330 0.923880 +endloop +endfacet +facet normal -0.137352 0.452794 0.880972 +outer loop +vertex -0.212607 0.513280 0.831470 +vertex -0.074658 0.375330 0.923880 +vertex -0.108386 0.544895 0.831470 +endloop +endfacet +facet normal -0.256282 0.844848 -0.469630 +outer loop +vertex -0.318189 0.768177 -0.555570 +vertex -0.353553 0.853553 -0.382683 +vertex -0.180240 0.906127 -0.382683 +endloop +endfacet +facet normal -0.256281 0.844848 -0.469630 +outer loop +vertex -0.318189 0.768177 -0.555570 +vertex -0.180240 0.906127 -0.382683 +vertex -0.162211 0.815492 -0.555570 +endloop +endfacet +facet normal -0.097554 0.990438 0.097550 +outer loop +vertex -0.195090 0.980785 0.000000 +vertex -0.191341 0.961939 0.195090 +vertex 0.000000 0.980785 0.195090 +endloop +endfacet +facet normal -0.097554 0.990438 0.097550 +outer loop +vertex -0.195090 0.980785 0.000000 +vertex 0.000000 0.980785 0.195090 +vertex 0.000000 1.000000 0.000000 +endloop +endfacet +facet normal -0.009654 0.098012 0.995138 +outer loop +vertex -0.038060 0.191342 0.980785 +vertex -0.000000 -0.000001 1.000000 +vertex 0.000000 0.195090 0.980785 +endloop +endfacet +facet normal -0.009653 0.098012 -0.995138 +outer loop +vertex 0.000000 -0.000000 -1.000000 +vertex -0.038060 0.191341 -0.980785 +vertex 0.000000 0.195090 -0.980785 +endloop +endfacet +facet normal -0.097554 0.990438 -0.097550 +outer loop +vertex -0.191341 0.961939 -0.195090 +vertex -0.195090 0.980785 0.000000 +vertex 0.000000 1.000000 0.000000 +endloop +endfacet +facet normal -0.097555 0.990438 -0.097549 +outer loop +vertex -0.191341 0.961939 -0.195090 +vertex 0.000000 1.000000 0.000000 +vertex 0.000000 0.980785 -0.195090 +endloop +endfacet +facet normal -0.028580 0.290166 0.956549 +outer loop +vertex -0.074658 0.375330 0.923880 +vertex -0.038060 0.191342 0.980785 +vertex 0.000000 0.195090 0.980785 +endloop +endfacet +facet normal -0.028582 0.290166 0.956549 +outer loop +vertex -0.074658 0.375330 0.923880 +vertex 0.000000 0.195090 0.980785 +vertex 0.000000 0.382683 0.923880 +endloop +endfacet +facet normal -0.093839 0.952718 -0.289002 +outer loop +vertex -0.180240 0.906127 -0.382683 +vertex -0.191341 0.961939 -0.195090 +vertex 0.000000 0.980785 -0.195090 +endloop +endfacet +facet normal -0.093834 0.952717 -0.289007 +outer loop +vertex -0.180240 0.906127 -0.382683 +vertex 0.000000 0.980785 -0.195090 +vertex 0.000000 0.923879 -0.382683 +endloop +endfacet +facet normal -0.046382 0.470889 0.880972 +outer loop +vertex -0.108386 0.544895 0.831470 +vertex -0.074658 0.375330 0.923880 +vertex 0.000000 0.382683 0.923880 +endloop +endfacet +facet normal -0.046381 0.470890 0.880972 +outer loop +vertex -0.108386 0.544895 0.831470 +vertex 0.000000 0.382683 0.923880 +vertex 0.000000 0.555570 0.831470 +endloop +endfacet +facet normal -0.086536 0.878612 -0.469629 +outer loop +vertex -0.162211 0.815492 -0.555570 +vertex -0.180240 0.906127 -0.382683 +vertex 0.000000 0.923879 -0.382683 +endloop +endfacet +facet normal -0.086535 0.878612 -0.469629 +outer loop +vertex -0.162211 0.815492 -0.555570 +vertex 0.000000 0.923879 -0.382683 +vertex 0.000000 0.831469 -0.555570 +endloop +endfacet +facet normal -0.062363 0.633158 0.771506 +outer loop +vertex -0.137950 0.693520 0.707107 +vertex -0.108386 0.544895 0.831470 +vertex 0.000000 0.555570 0.831470 +endloop +endfacet +facet normal -0.062362 0.633159 0.771506 +outer loop +vertex -0.137950 0.693520 0.707107 +vertex 0.000000 0.555570 0.831470 +vertex 0.000000 0.707107 0.707107 +endloop +endfacet +facet normal -0.075915 0.770781 -0.632561 +outer loop +vertex -0.137950 0.693520 -0.707107 +vertex -0.162211 0.815492 -0.555570 +vertex 0.000000 0.831469 -0.555570 +endloop +endfacet +facet normal -0.075915 0.770781 -0.632561 +outer loop +vertex -0.137950 0.693520 -0.707107 +vertex 0.000000 0.831469 -0.555570 +vertex 0.000000 0.707106 -0.707107 +endloop +endfacet +facet normal -0.075918 0.770780 0.632561 +outer loop +vertex -0.162211 0.815492 0.555570 +vertex -0.137950 0.693520 0.707107 +vertex 0.000000 0.707107 0.707107 +endloop +endfacet +facet normal -0.075919 0.770779 0.632563 +outer loop +vertex -0.162211 0.815492 0.555570 +vertex 0.000000 0.707107 0.707107 +vertex 0.000000 0.831470 0.555570 +endloop +endfacet +facet normal -0.062361 0.633158 -0.771506 +outer loop +vertex -0.108386 0.544895 -0.831470 +vertex -0.137950 0.693520 -0.707107 +vertex 0.000000 0.707106 -0.707107 +endloop +endfacet +facet normal -0.062364 0.633160 -0.771505 +outer loop +vertex -0.108386 0.544895 -0.831470 +vertex 0.000000 0.707106 -0.707107 +vertex 0.000000 0.555570 -0.831470 +endloop +endfacet +facet normal -0.086540 0.878612 0.469630 +outer loop +vertex -0.180240 0.906127 0.382683 +vertex -0.162211 0.815492 0.555570 +vertex 0.000000 0.831470 0.555570 +endloop +endfacet +facet normal -0.086538 0.878613 0.469628 +outer loop +vertex -0.180240 0.906127 0.382683 +vertex 0.000000 0.831470 0.555570 +vertex 0.000000 0.923880 0.382683 +endloop +endfacet +facet normal -0.046381 0.470890 -0.880972 +outer loop +vertex -0.074658 0.375330 -0.923880 +vertex -0.108386 0.544895 -0.831470 +vertex 0.000000 0.555570 -0.831470 +endloop +endfacet +facet normal -0.046378 0.470889 -0.880973 +outer loop +vertex -0.074658 0.375330 -0.923880 +vertex 0.000000 0.555570 -0.831470 +vertex 0.000000 0.382683 -0.923880 +endloop +endfacet +facet normal -0.093837 0.952718 0.289002 +outer loop +vertex -0.191341 0.961939 0.195090 +vertex -0.180240 0.906127 0.382683 +vertex 0.000000 0.923880 0.382683 +endloop +endfacet +facet normal -0.093839 0.952718 0.289004 +outer loop +vertex -0.191341 0.961939 0.195090 +vertex 0.000000 0.923880 0.382683 +vertex 0.000000 0.980785 0.195090 +endloop +endfacet +facet normal -0.028579 0.290166 -0.956550 +outer loop +vertex -0.038060 0.191341 -0.980785 +vertex -0.074658 0.375330 -0.923880 +vertex 0.000000 0.382683 -0.923880 +endloop +endfacet +facet normal -0.028580 0.290166 -0.956549 +outer loop +vertex -0.038060 0.191341 -0.980785 +vertex 0.000000 0.382683 -0.923880 +vertex 0.000000 0.195090 -0.980785 +endloop +endfacet +endsolid Exported from Blender-2.82 (sub 7) diff --git a/example/modifers/assets/sphere_normals.x3d b/example/modifers/assets/sphere_normals.x3d new file mode 100644 index 0000000..3971914 --- /dev/null +++ b/example/modifers/assets/sphere_normals.x3d @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/example/modifers/assets/square_ascii.stl b/example/modifers/assets/square_ascii.stl new file mode 100644 index 0000000..9a2bb77 --- /dev/null +++ b/example/modifers/assets/square_ascii.stl @@ -0,0 +1,170 @@ +solid Exported from Blender-2.82 (sub 7) +facet normal 0.000000 0.000000 1.000000 +outer loop +vertex 1.000000 1.000000 1.000000 +vertex -1.000000 1.000000 1.000000 +vertex -1.000000 -1.000000 1.000000 +endloop +endfacet +facet normal 0.000000 0.000000 1.000000 +outer loop +vertex 1.000000 1.000000 1.000000 +vertex -1.000000 -1.000000 1.000000 +vertex 1.000000 -1.000000 1.000000 +endloop +endfacet +facet normal 0.000000 -1.000000 0.000000 +outer loop +vertex 1.000000 -1.000000 -1.000000 +vertex 1.000000 -1.000000 1.000000 +vertex -1.000000 -1.000000 1.000000 +endloop +endfacet +facet normal 0.000000 -1.000000 0.000000 +outer loop +vertex 1.000000 -1.000000 -1.000000 +vertex -1.000000 -1.000000 1.000000 +vertex -1.000000 -1.000000 -1.000000 +endloop +endfacet +facet normal -1.000000 0.000000 0.000000 +outer loop +vertex -1.000000 -1.000000 -1.000000 +vertex -1.000000 -1.000000 1.000000 +vertex -1.000000 1.000000 1.000000 +endloop +endfacet +facet normal -1.000000 0.000000 0.000000 +outer loop +vertex -1.000000 -1.000000 -1.000000 +vertex -1.000000 1.000000 1.000000 +vertex -1.000000 1.000000 -1.000000 +endloop +endfacet +facet normal 0.000000 0.000000 -1.000000 +outer loop +vertex -1.000000 1.000000 -1.000000 +vertex 1.000000 1.000000 -1.000000 +vertex 1.000000 -1.000000 -1.000000 +endloop +endfacet +facet normal 0.000000 0.000000 -1.000000 +outer loop +vertex -1.000000 1.000000 -1.000000 +vertex 1.000000 -1.000000 -1.000000 +vertex -1.000000 -1.000000 -1.000000 +endloop +endfacet +facet normal 1.000000 0.000000 0.000000 +outer loop +vertex 1.000000 1.000000 -1.000000 +vertex 1.000000 1.000000 1.000000 +vertex 1.000000 -1.000000 1.000000 +endloop +endfacet +facet normal 1.000000 0.000000 0.000000 +outer loop +vertex 1.000000 1.000000 -1.000000 +vertex 1.000000 -1.000000 1.000000 +vertex 1.000000 -1.000000 -1.000000 +endloop +endfacet +facet normal 0.000000 1.000000 0.000000 +outer loop +vertex -1.000000 1.000000 -1.000000 +vertex -1.000000 1.000000 1.000000 +vertex 1.000000 1.000000 1.000000 +endloop +endfacet +facet normal 0.000000 1.000000 0.000000 +outer loop +vertex -1.000000 1.000000 -1.000000 +vertex 1.000000 1.000000 1.000000 +vertex 1.000000 1.000000 -1.000000 +endloop +endfacet +facet normal 0.000000 0.000000 1.000000 +outer loop +vertex 1.000000 1.000000 3.237565 +vertex -1.000000 1.000000 3.237565 +vertex -1.000000 -1.000000 3.237565 +endloop +endfacet +facet normal 0.000000 0.000000 1.000000 +outer loop +vertex 1.000000 1.000000 3.237565 +vertex -1.000000 -1.000000 3.237565 +vertex 1.000000 -1.000000 3.237565 +endloop +endfacet +facet normal 0.000000 -1.000000 0.000000 +outer loop +vertex 1.000000 -1.000000 1.237565 +vertex 1.000000 -1.000000 3.237565 +vertex -1.000000 -1.000000 3.237565 +endloop +endfacet +facet normal 0.000000 -1.000000 0.000000 +outer loop +vertex 1.000000 -1.000000 1.237565 +vertex -1.000000 -1.000000 3.237565 +vertex -1.000000 -1.000000 1.237565 +endloop +endfacet +facet normal -1.000000 0.000000 0.000000 +outer loop +vertex -1.000000 -1.000000 1.237565 +vertex -1.000000 -1.000000 3.237565 +vertex -1.000000 1.000000 3.237565 +endloop +endfacet +facet normal -1.000000 0.000000 0.000000 +outer loop +vertex -1.000000 -1.000000 1.237565 +vertex -1.000000 1.000000 3.237565 +vertex -1.000000 1.000000 1.237565 +endloop +endfacet +facet normal 0.000000 0.000000 -1.000000 +outer loop +vertex -1.000000 1.000000 1.237565 +vertex 1.000000 1.000000 1.237565 +vertex 1.000000 -1.000000 1.237565 +endloop +endfacet +facet normal 0.000000 0.000000 -1.000000 +outer loop +vertex -1.000000 1.000000 1.237565 +vertex 1.000000 -1.000000 1.237565 +vertex -1.000000 -1.000000 1.237565 +endloop +endfacet +facet normal 1.000000 0.000000 0.000000 +outer loop +vertex 1.000000 1.000000 1.237565 +vertex 1.000000 1.000000 3.237565 +vertex 1.000000 -1.000000 3.237565 +endloop +endfacet +facet normal 1.000000 0.000000 0.000000 +outer loop +vertex 1.000000 1.000000 1.237565 +vertex 1.000000 -1.000000 3.237565 +vertex 1.000000 -1.000000 1.237565 +endloop +endfacet +facet normal 0.000000 1.000000 0.000000 +outer loop +vertex -1.000000 1.000000 1.237565 +vertex -1.000000 1.000000 3.237565 +vertex 1.000000 1.000000 3.237565 +endloop +endfacet +facet normal 0.000000 1.000000 0.000000 +outer loop +vertex -1.000000 1.000000 1.237565 +vertex 1.000000 1.000000 3.237565 +vertex 1.000000 1.000000 1.237565 +endloop +endfacet +endsolid Exported from Blender-2.82 (sub 7) diff --git a/example/modifers/ios/Flutter/AppFrameworkInfo.plist b/example/modifers/ios/Flutter/AppFrameworkInfo.plist new file mode 100644 index 0000000..80391e4 --- /dev/null +++ b/example/modifers/ios/Flutter/AppFrameworkInfo.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + App + CFBundleIdentifier + io.flutter.flutter.app + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + App + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + MinimumOSVersion + 9.0 + + diff --git a/example/modifers/ios/Flutter/Debug.xcconfig b/example/modifers/ios/Flutter/Debug.xcconfig new file mode 100644 index 0000000..0b2d479 --- /dev/null +++ b/example/modifers/ios/Flutter/Debug.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/example/modifers/ios/Flutter/Generated.xcconfig b/example/modifers/ios/Flutter/Generated.xcconfig new file mode 100644 index 0000000..3a92792 --- /dev/null +++ b/example/modifers/ios/Flutter/Generated.xcconfig @@ -0,0 +1,13 @@ +// This is a generated file; do not edit or check into version control. +FLUTTER_ROOT=C:\src\flutter +FLUTTER_APPLICATION_PATH=C:\Users\johns\Downloads\App\Updates\flutter_cube-0.2.0\example\modifers +COCOAPODS_PARALLEL_CODE_SIGN=true +FLUTTER_TARGET=lib\main.dart +FLUTTER_BUILD_DIR=build +FLUTTER_BUILD_NAME=1.0.0 +FLUTTER_BUILD_NUMBER=1 +EXCLUDED_ARCHS[sdk=iphonesimulator*]=i386 +DART_OBFUSCATION=false +TRACK_WIDGET_CREATION=false +TREE_SHAKE_ICONS=false +PACKAGE_CONFIG=.packages diff --git a/example/modifers/ios/Flutter/Release.xcconfig b/example/modifers/ios/Flutter/Release.xcconfig new file mode 100644 index 0000000..0b2d479 --- /dev/null +++ b/example/modifers/ios/Flutter/Release.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/example/modifers/ios/Flutter/flutter_export_environment.sh b/example/modifers/ios/Flutter/flutter_export_environment.sh new file mode 100644 index 0000000..d5ad799 --- /dev/null +++ b/example/modifers/ios/Flutter/flutter_export_environment.sh @@ -0,0 +1,13 @@ +#!/bin/sh +# This is a generated file; do not edit or check into version control. +export "FLUTTER_ROOT=C:\src\flutter" +export "FLUTTER_APPLICATION_PATH=C:\Users\johns\Downloads\App\Updates\flutter_cube-0.2.0\example\modifers" +export "COCOAPODS_PARALLEL_CODE_SIGN=true" +export "FLUTTER_TARGET=lib\main.dart" +export "FLUTTER_BUILD_DIR=build" +export "FLUTTER_BUILD_NAME=1.0.0" +export "FLUTTER_BUILD_NUMBER=1" +export "DART_OBFUSCATION=false" +export "TRACK_WIDGET_CREATION=false" +export "TREE_SHAKE_ICONS=false" +export "PACKAGE_CONFIG=.packages" diff --git a/example/modifers/ios/Runner.xcodeproj/project.pbxproj b/example/modifers/ios/Runner.xcodeproj/project.pbxproj new file mode 100644 index 0000000..69ae9aa --- /dev/null +++ b/example/modifers/ios/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,481 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + objects = { + +/* Begin PBXBuildFile section */ + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 9705A1C41CF9048500538489 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; + 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 97C146EB1CF9000F007C117D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 9740EEB11CF90186004384FC /* Flutter */ = { + isa = PBXGroup; + children = ( + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 9740EEB31CF90195004384FC /* Generated.xcconfig */, + ); + name = Flutter; + sourceTree = ""; + }; + 97C146E51CF9000F007C117D = { + isa = PBXGroup; + children = ( + 9740EEB11CF90186004384FC /* Flutter */, + 97C146F01CF9000F007C117D /* Runner */, + 97C146EF1CF9000F007C117D /* Products */, + ); + sourceTree = ""; + }; + 97C146EF1CF9000F007C117D /* Products */ = { + isa = PBXGroup; + children = ( + 97C146EE1CF9000F007C117D /* Runner.app */, + ); + name = Products; + sourceTree = ""; + }; + 97C146F01CF9000F007C117D /* Runner */ = { + isa = PBXGroup; + children = ( + 97C146FA1CF9000F007C117D /* Main.storyboard */, + 97C146FD1CF9000F007C117D /* Assets.xcassets */, + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, + 97C147021CF9000F007C117D /* Info.plist */, + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, + ); + path = Runner; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 97C146ED1CF9000F007C117D /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 9740EEB61CF901F6004384FC /* Run Script */, + 97C146EA1CF9000F007C117D /* Sources */, + 97C146EB1CF9000F007C117D /* Frameworks */, + 97C146EC1CF9000F007C117D /* Resources */, + 9705A1C41CF9048500538489 /* Embed Frameworks */, + 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Runner; + productName = Runner; + productReference = 97C146EE1CF9000F007C117D /* Runner.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 97C146E61CF9000F007C117D /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 1300; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 97C146ED1CF9000F007C117D = { + CreatedOnToolsVersion = 7.3.1; + LastSwiftMigration = 1100; + }; + }; + }; + buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 97C146E51CF9000F007C117D; + productRefGroup = 97C146EF1CF9000F007C117D /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 97C146ED1CF9000F007C117D /* Runner */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 97C146EC1CF9000F007C117D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Thin Binary"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + }; + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 97C146EA1CF9000F007C117D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 97C146FA1CF9000F007C117D /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C146FB1CF9000F007C117D /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C147001CF9000F007C117D /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 249021D3217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Profile; + }; + 249021D4217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.modifers; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Profile; + }; + 97C147031CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 97C147041CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 97C147061CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.modifers; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + 97C147071CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.modifers; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147031CF9000F007C117D /* Debug */, + 97C147041CF9000F007C117D /* Release */, + 249021D3217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147061CF9000F007C117D /* Debug */, + 97C147071CF9000F007C117D /* Release */, + 249021D4217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 97C146E61CF9000F007C117D /* Project object */; +} diff --git a/example/modifers/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/example/modifers/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..c4b79bd --- /dev/null +++ b/example/modifers/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/example/modifers/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/example/modifers/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..fc6bf80 --- /dev/null +++ b/example/modifers/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/example/modifers/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/example/modifers/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..af0309c --- /dev/null +++ b/example/modifers/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/example/modifers/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/example/modifers/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 0000000..f9cbb25 --- /dev/null +++ b/example/modifers/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example/modifers/ios/Runner.xcworkspace/contents.xcworkspacedata b/example/modifers/ios/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..59c6d39 --- /dev/null +++ b/example/modifers/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/example/modifers/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/example/modifers/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..fc6bf80 --- /dev/null +++ b/example/modifers/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/example/modifers/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/example/modifers/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..af0309c --- /dev/null +++ b/example/modifers/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/example/modifers/ios/Runner/AppDelegate.swift b/example/modifers/ios/Runner/AppDelegate.swift new file mode 100644 index 0000000..3763683 --- /dev/null +++ b/example/modifers/ios/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import UIKit +import Flutter + +@UIApplicationMain +@objc class AppDelegate: FlutterAppDelegate { + override func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? + ) -> Bool { + GeneratedPluginRegistrant.register(with: self) + return super.application(application, didFinishLaunchingWithOptions: launchOptions) + } +} diff --git a/example/modifers/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/example/modifers/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..1950fd8 --- /dev/null +++ b/example/modifers/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,122 @@ +{ + "images" : [ + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@3x.png", + "scale" : "3x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@3x.png", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@3x.png", + "scale" : "3x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@2x.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@3x.png", + "scale" : "3x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@1x.png", + "scale" : "1x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@1x.png", + "scale" : "1x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@1x.png", + "scale" : "1x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@2x.png", + "scale" : "2x" + }, + { + "size" : "83.5x83.5", + "idiom" : "ipad", + "filename" : "Icon-App-83.5x83.5@2x.png", + "scale" : "2x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "Icon-App-1024x1024@1x.png", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/example/modifers/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/example/modifers/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png new file mode 100644 index 0000000..dc9ada4 Binary files /dev/null and b/example/modifers/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png differ diff --git a/example/modifers/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/example/modifers/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png new file mode 100644 index 0000000..28c6bf0 Binary files /dev/null and b/example/modifers/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png differ diff --git a/example/modifers/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/example/modifers/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png new file mode 100644 index 0000000..2ccbfd9 Binary files /dev/null and b/example/modifers/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png differ diff --git a/example/modifers/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/example/modifers/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png new file mode 100644 index 0000000..f091b6b Binary files /dev/null and b/example/modifers/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png differ diff --git a/example/modifers/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/example/modifers/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png new file mode 100644 index 0000000..4cde121 Binary files /dev/null and b/example/modifers/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png differ diff --git a/example/modifers/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/example/modifers/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png new file mode 100644 index 0000000..d0ef06e Binary files /dev/null and b/example/modifers/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png differ diff --git a/example/modifers/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/example/modifers/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png new file mode 100644 index 0000000..dcdc230 Binary files /dev/null and b/example/modifers/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png differ diff --git a/example/modifers/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/example/modifers/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png new file mode 100644 index 0000000..2ccbfd9 Binary files /dev/null and b/example/modifers/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png differ diff --git a/example/modifers/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/example/modifers/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png new file mode 100644 index 0000000..c8f9ed8 Binary files /dev/null and b/example/modifers/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png differ diff --git a/example/modifers/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/example/modifers/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png new file mode 100644 index 0000000..a6d6b86 Binary files /dev/null and b/example/modifers/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png differ diff --git a/example/modifers/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/example/modifers/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png new file mode 100644 index 0000000..a6d6b86 Binary files /dev/null and b/example/modifers/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png differ diff --git a/example/modifers/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/example/modifers/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png new file mode 100644 index 0000000..75b2d16 Binary files /dev/null and b/example/modifers/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png differ diff --git a/example/modifers/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/example/modifers/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png new file mode 100644 index 0000000..c4df70d Binary files /dev/null and b/example/modifers/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png differ diff --git a/example/modifers/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/example/modifers/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png new file mode 100644 index 0000000..6a84f41 Binary files /dev/null and b/example/modifers/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png differ diff --git a/example/modifers/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/example/modifers/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png new file mode 100644 index 0000000..d0e1f58 Binary files /dev/null and b/example/modifers/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png differ diff --git a/example/modifers/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/example/modifers/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json new file mode 100644 index 0000000..d08a4de --- /dev/null +++ b/example/modifers/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "LaunchImage.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/example/modifers/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/example/modifers/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png new file mode 100644 index 0000000..9da19ea Binary files /dev/null and b/example/modifers/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png differ diff --git a/example/modifers/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/example/modifers/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png new file mode 100644 index 0000000..9da19ea Binary files /dev/null and b/example/modifers/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png differ diff --git a/example/modifers/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/example/modifers/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png new file mode 100644 index 0000000..9da19ea Binary files /dev/null and b/example/modifers/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png differ diff --git a/example/modifers/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/example/modifers/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md new file mode 100644 index 0000000..65a94b5 --- /dev/null +++ b/example/modifers/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md @@ -0,0 +1,5 @@ +# Launch Screen Assets + +You can customize the launch screen with your own desired assets by replacing the image files in this directory. + +You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. \ No newline at end of file diff --git a/example/modifers/ios/Runner/Base.lproj/LaunchScreen.storyboard b/example/modifers/ios/Runner/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..497371e --- /dev/null +++ b/example/modifers/ios/Runner/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example/modifers/ios/Runner/Base.lproj/Main.storyboard b/example/modifers/ios/Runner/Base.lproj/Main.storyboard new file mode 100644 index 0000000..bbb83ca --- /dev/null +++ b/example/modifers/ios/Runner/Base.lproj/Main.storyboard @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example/modifers/ios/Runner/GeneratedPluginRegistrant.h b/example/modifers/ios/Runner/GeneratedPluginRegistrant.h new file mode 100644 index 0000000..7a89092 --- /dev/null +++ b/example/modifers/ios/Runner/GeneratedPluginRegistrant.h @@ -0,0 +1,19 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GeneratedPluginRegistrant_h +#define GeneratedPluginRegistrant_h + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface GeneratedPluginRegistrant : NSObject ++ (void)registerWithRegistry:(NSObject*)registry; +@end + +NS_ASSUME_NONNULL_END +#endif /* GeneratedPluginRegistrant_h */ diff --git a/example/modifers/ios/Runner/GeneratedPluginRegistrant.m b/example/modifers/ios/Runner/GeneratedPluginRegistrant.m new file mode 100644 index 0000000..efe65ec --- /dev/null +++ b/example/modifers/ios/Runner/GeneratedPluginRegistrant.m @@ -0,0 +1,14 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#import "GeneratedPluginRegistrant.h" + +@implementation GeneratedPluginRegistrant + ++ (void)registerWithRegistry:(NSObject*)registry { +} + +@end diff --git a/example/modifers/ios/Runner/Info.plist b/example/modifers/ios/Runner/Info.plist new file mode 100644 index 0000000..4841de0 --- /dev/null +++ b/example/modifers/ios/Runner/Info.plist @@ -0,0 +1,47 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Modifers + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + modifers + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleSignature + ???? + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIViewControllerBasedStatusBarAppearance + + + diff --git a/example/modifers/ios/Runner/Runner-Bridging-Header.h b/example/modifers/ios/Runner/Runner-Bridging-Header.h new file mode 100644 index 0000000..fae207f --- /dev/null +++ b/example/modifers/ios/Runner/Runner-Bridging-Header.h @@ -0,0 +1 @@ +#import "GeneratedPluginRegistrant.h" diff --git a/example/modifers/lib/main.dart b/example/modifers/lib/main.dart new file mode 100644 index 0000000..6adbc48 --- /dev/null +++ b/example/modifers/lib/main.dart @@ -0,0 +1,405 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_cube/flutter_cube.dart'; +import 'dart:async'; +import 'package:flutter_colorpicker/flutter_colorpicker.dart'; + +void main() { + runApp(const MyApp()); +} + +class MyApp extends StatelessWidget { + const MyApp({Key? key}) : super(key: key); + + // This widget is the root of your application. + @override + Widget build(BuildContext context) { + return MaterialApp( + title: 'Flutter Demo', + theme: ThemeData.dark(), + home: const MyHomePage(title: 'Flutter Cube Home Page'), + ); + } +} + +class MyHomePage extends StatefulWidget { + const MyHomePage({Key? key, required this.title}) : super(key: key); + final String title; + + @override + State createState() => _MyHomePageState(); +} + +class _MyHomePageState extends State { + Scene? _scene; + int illum = 45; + + int? finalSelectedObject; + int? finalSelectedChild; + String? tappedObject; + Timer? clickedTimer; + String? clickedName; + final double _ambient = 0.8; + final double _diffuse = 0.5; + final double _specular = 0.5; + final double _shininess = 0.0; + + @override + void initState() { + super.initState(); + } + @override + void dispose() { + clickedTimer?.cancel(); + super.dispose(); + } + + void _onSceneCreated(Scene scene) { + scene.camera.position.z = 20; + scene.camera.position.y = -1; + scene.camera.pan.y = -1; + scene.camera.target.y = 0; + scene.light.position.setFrom(Vector3(0, 0, 10)); + scene.rayCasting = true; + scene.camera.cameraControls = CameraControls( + panX: true, + panY: true, + orbitX: true, + orbitY: true, + zoom: true + ); + //scene.blendMode = BlendMode.colorDodge; + scene.textureBlendMode = BlendMode.colorDodge; //use this if you want to change the color with texture applied + scene.light.setColor(Colors.white, _ambient, _diffuse, _specular); + scene.world.add(Object( + position: Vector3(0, 0, 0), + rotation: Vector3(0,10,90), + scale: Vector3(10.0, 10.0, 10.0), + fileName: 'assets/earth_w_nm.obj', + number: 0, + name: 'Sphere', + backfaceCulling: true, + lighting: true, + showVerts: false, + xray: false, + )); + _scene = scene; + setState(() {}); + } + void cubeCallback({CubeCallbacks? call, Offset? details}){ + switch (call) { + case CubeCallbacks.OnTap: + setState(() { + checkTappedObject(_scene!.clickedObject(),false); + tappedObject = _scene!.clickedObject(); + }); + break; + case CubeCallbacks.RemoveObject: + break; + default: + } + } + void changeObjectEmissivity(){ + if(finalSelectedChild != null && finalSelectedObject != null){ + _scene!.world.children[finalSelectedObject!].children[finalSelectedChild!].mesh.material.emissivity = illum; + } + else if(finalSelectedObject != null){ + _scene!.world.children[finalSelectedObject!].mesh.material.emissivity = illum; + } + setState(() {}); + } + void changeObjectColor(Vector3 color){ + if(finalSelectedChild != null && finalSelectedObject != null){ + _scene!.world.children[finalSelectedObject!].children[finalSelectedChild!].mesh.material.diffuse = color; + } + else if(finalSelectedObject != null){ + _scene!.world.children[finalSelectedObject!].mesh.material.diffuse = color; + } + setState(() {}); + } + Color currentColor(){ + Vector3 color = Vector3(0,0,0); + if(finalSelectedChild != null && finalSelectedObject != null){ + color = _scene!.world.children[finalSelectedObject!].children[finalSelectedChild!].mesh.material.diffuse; + } + else if(finalSelectedObject != null){ + color = _scene!.world.children[finalSelectedObject!].mesh.material.diffuse; + } + return toColor(color); + } + void checkTappedObject(String? tappedObject,bool hovering){ + int? i; + int? j; + for(int k = 0; k < _scene!.world.children.length; k++){ + if(_scene!.world.children[k].children.isNotEmpty){ + for(int l = 0; l < _scene!.world.children[k].children.length;l++){ + if(_scene!.world.children[k].children[l].name == tappedObject){ + i = k; + j = l; + } + else if(_scene!.world.children[k].name == tappedObject){ + i = k; + } + } + } + else{ + if(_scene!.world.children[k].name == tappedObject){ + i = k; + } + } + } + if(!hovering){ + finalSelectedObject = i; + finalSelectedChild = j; + } + } + Widget objectBox(String name, bool child){ + return Container( + padding: const EdgeInsets.only(left: 10,right: 10), + height: 25, + width: 120, + margin: const EdgeInsets.all(5), + decoration: BoxDecoration( + color: Theme.of(context).cardColor, + borderRadius: const BorderRadius.all(Radius.circular(2)), + boxShadow: [BoxShadow( + color: Theme.of(context).shadowColor, + blurRadius: 5, + offset: const Offset(0,2), + ),] + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Row(children: [ + InkWell( + onTap: (){ + setState(() { + if(name == 'Wireframe'){ + _scene!.showWireframe = !_scene!.showWireframe; + } + else if(name == 'X-Ray'){ + _scene!.xray = !_scene!.xray; + } + else if(name == 'Texture'){ + _scene!.showTexture = !_scene!.showTexture; + } + else{ + _scene!.showVerticies = !_scene!.showVerticies; + } + }); + }, + child: Icon( + (child)?Icons.check_box_outlined:Icons.check_box_outline_blank, + size: 18, + ) + ), + Container( + margin: const EdgeInsets.only(left: 10), + //width: _width-85, + child: Text( + name, + overflow: TextOverflow.ellipsis, + ) + ), + ],), + ],) + ); + } + Widget objectButton(String name){ + return Container( + margin: const EdgeInsets.all(5), + child: InkWell( + onTap: (){ + Duration time = const Duration(seconds: 1); + setState(() { + clickedName = name; + }); + clickedTimer = Timer(time,(){ + setState(() { + clickedName = null; + clickedTimer?.cancel(); + }); + }); + if(name == 'Remove Duplicates'){ + if(_scene!.world.children.isNotEmpty){ + if(finalSelectedChild != null && finalSelectedObject != null){ + _scene!.world.children[finalSelectedObject!].children[finalSelectedChild!].mesh.removeDuplicateVertices(); + } + else if(finalSelectedObject != null){ + _scene!.world.children[finalSelectedObject!].mesh.removeDuplicateVertices(); + } + } + } + else if(name == 'Change Color'){ + changeColor(context, currentColor()).then((value){ + if(value != null){ + changeObjectColor(fromColor(value)); + } + }); + } + else if(name == 'Seperate By Loose Parts'){ + if(_scene!.world.children.isNotEmpty){ + if(finalSelectedChild != null && finalSelectedObject != null){ + _scene!.world.children[finalSelectedObject!].children[finalSelectedChild!].seperateByLooseParts(); + } + else if(finalSelectedObject != null){ + _scene!.world.children[finalSelectedObject!].seperateByLooseParts(); + } + } + } + else{ + if(_scene!.world.children.isNotEmpty){ + if(finalSelectedChild != null && finalSelectedObject != null){ + if(name == 'Smooth Shading'){ + _scene!.world.children[finalSelectedObject!].children[finalSelectedChild!].mesh.calculateVertexNormals(Shading.Smooth); + } + else{ + _scene!.world.children[finalSelectedObject!].children[finalSelectedChild!].mesh.calculateVertexNormals(Shading.Flat); + } + } + else if(finalSelectedObject != null){ + if(name == 'Smooth Shading'){ + _scene!.world.children[finalSelectedObject!].mesh.calculateVertexNormals(Shading.Smooth); + } + else{ + _scene!.world.children[finalSelectedObject!].mesh.calculateVertexNormals(Shading.Flat); + } + } + } + } + }, + child: Container( + height: 25, + width: 140, + alignment: Alignment.center, + padding: const EdgeInsets.fromLTRB(5,0,5,0), + decoration: BoxDecoration( + color: (clickedName == name)?Theme.of(context).accentColor:Theme.of(context).cardColor, + borderRadius: const BorderRadius.all(Radius.circular(2)), + boxShadow: [BoxShadow( + color: Theme.of(context).shadowColor, + blurRadius: 5, + offset: const Offset(0,2), + ),] + ), + child: Text( + name, + overflow: TextOverflow.ellipsis, + ) + ) + ) + ); + } + Widget slider(){ + return Container( + //padding: const EdgeInsets.only(left: 10,right: 10), + margin: const EdgeInsets.all(5), + height: 25, + width: 320, + decoration: BoxDecoration( + color: Theme.of(context).cardColor, + borderRadius: const BorderRadius.all(Radius.circular(2)), + boxShadow: [BoxShadow( + color: Theme.of(context).shadowColor, + blurRadius: 5, + offset: const Offset(0,2), + ),] + ), + child: Slider( + value: illum.toDouble(), + min: 0, + max: 100, + divisions: 25, + label: illum.round().toString(), + onChanged: (double value) { + setState(() { + if(finalSelectedObject != null){ + illum = value.toInt(); + changeObjectEmissivity(); + } + }); + }, + ) + ); + } + + @override + Widget build(BuildContext context) { + + return Scaffold( + appBar: AppBar( + title: Text(widget.title), + ), + body: Stack( + children:[ + Cube( + onSceneCreated: _onSceneCreated, + callback: cubeCallback, + ), + _scene != null?Align( + alignment: Alignment.topRight, + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + slider(), + objectButton('Change Color'), + objectButton('Flat Shading'), + objectButton('Smooth Shading'), + objectButton('Remove Duplicates'), + objectButton('Seperate By Loose Parts'), + objectBox('Wireframe',_scene!.showWireframe), + objectBox('Verticies',_scene!.showVerticies), + objectBox('X-Ray',_scene!.xray), + objectBox('Texture',_scene!.showTexture), + Container( + padding: const EdgeInsets.only(left: 10,right: 10), + height: 25, + width: 120, + margin: const EdgeInsets.all(5), + decoration: BoxDecoration( + color: Theme.of(context).cardColor, + borderRadius: const BorderRadius.all(Radius.circular(2)), + boxShadow: [BoxShadow( + color: Theme.of(context).shadowColor, + blurRadius: 5, + offset: const Offset(0,2), + ),] + ), + child: Text(tappedObject != null?tappedObject!:'NONE') + ), + ], + )):Container(), + ]) + ); + } +} + +Future changeColor(BuildContext context, Color selectedColor ) async { + return showDialog( + context: context, + barrierDismissible: false, // user must tap button! + builder: (BuildContext context) { + Color color = selectedColor; + return AlertDialog( + title: const Text('Pick a color!'), + content: SingleChildScrollView( + child: ColorPicker( + pickerColor: selectedColor, + onColorChanged: (newColor){ + color = newColor; + }, + ), + ), + actions: [ + ElevatedButton( + child: const Text('Got it'), + onPressed: () { + Navigator.pop(context,color); + }, + ), + ], + ); + } + ); +} diff --git a/example/modifers/pubspec.lock b/example/modifers/pubspec.lock new file mode 100644 index 0000000..8207ac1 --- /dev/null +++ b/example/modifers/pubspec.lock @@ -0,0 +1,217 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + archive: + dependency: transitive + description: + name: archive + url: "https://pub.dartlang.org" + source: hosted + version: "3.1.11" + async: + dependency: transitive + description: + name: async + url: "https://pub.dartlang.org" + source: hosted + version: "2.8.2" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0" + characters: + dependency: transitive + description: + name: characters + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.0" + charcode: + dependency: transitive + description: + name: charcode + url: "https://pub.dartlang.org" + source: hosted + version: "1.3.1" + clock: + dependency: transitive + description: + name: clock + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.0" + collection: + dependency: transitive + description: + name: collection + url: "https://pub.dartlang.org" + source: hosted + version: "1.15.0" + crypto: + dependency: transitive + description: + name: crypto + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.1" + cupertino_icons: + dependency: "direct main" + description: + name: cupertino_icons + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.4" + fake_async: + dependency: transitive + description: + name: fake_async + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.0" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_colorpicker: + dependency: "direct main" + description: + name: flutter_colorpicker + url: "https://pub.dartlang.org" + source: hosted + version: "0.6.0" + flutter_cube: + dependency: "direct main" + description: + path: "../.." + relative: true + source: path + version: "0.1.0" + flutter_lints: + dependency: "direct dev" + description: + name: flutter_lints + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.4" + flutter_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + image: + dependency: transitive + description: + name: image + url: "https://pub.dartlang.org" + source: hosted + version: "3.1.1" + lints: + dependency: transitive + description: + name: lints + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.1" + matcher: + dependency: transitive + description: + name: matcher + url: "https://pub.dartlang.org" + source: hosted + version: "0.12.11" + meta: + dependency: transitive + description: + name: meta + url: "https://pub.dartlang.org" + source: hosted + version: "1.7.0" + path: + dependency: transitive + description: + name: path + url: "https://pub.dartlang.org" + source: hosted + version: "1.8.0" + petitparser: + dependency: transitive + description: + name: petitparser + url: "https://pub.dartlang.org" + source: hosted + version: "4.4.0" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.99" + source_span: + dependency: transitive + description: + name: source_span + url: "https://pub.dartlang.org" + source: hosted + version: "1.8.1" + stack_trace: + dependency: transitive + description: + name: stack_trace + url: "https://pub.dartlang.org" + source: hosted + version: "1.10.0" + stream_channel: + dependency: transitive + description: + name: stream_channel + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0" + string_scanner: + dependency: transitive + description: + name: string_scanner + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.0" + term_glyph: + dependency: transitive + description: + name: term_glyph + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.0" + test_api: + dependency: transitive + description: + name: test_api + url: "https://pub.dartlang.org" + source: hosted + version: "0.4.3" + typed_data: + dependency: transitive + description: + name: typed_data + url: "https://pub.dartlang.org" + source: hosted + version: "1.3.0" + vector_math: + dependency: transitive + description: + name: vector_math + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.1" + xml: + dependency: transitive + description: + name: xml + url: "https://pub.dartlang.org" + source: hosted + version: "5.3.1" +sdks: + dart: ">=2.14.0 <3.0.0" + flutter: ">=1.17.0" diff --git a/example/modifers/pubspec.yaml b/example/modifers/pubspec.yaml new file mode 100644 index 0000000..3e9c94b --- /dev/null +++ b/example/modifers/pubspec.yaml @@ -0,0 +1,95 @@ +name: modifers +description: A new Flutter project. + +# The following line prevents the package from being accidentally published to +# pub.dev using `flutter pub publish`. This is preferred for private packages. +publish_to: 'none' # Remove this line if you wish to publish to pub.dev + +# The following defines the version and build number for your application. +# A version number is three numbers separated by dots, like 1.2.43 +# followed by an optional build number separated by a +. +# Both the version and the builder number may be overridden in flutter +# build by specifying --build-name and --build-number, respectively. +# In Android, build-name is used as versionName while build-number used as versionCode. +# Read more about Android versioning at https://developer.android.com/studio/publish/versioning +# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. +# Read more about iOS versioning at +# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html +version: 1.0.0+1 + +environment: + sdk: ">=2.12.1 <3.0.0" + +# Dependencies specify other packages that your package needs in order to work. +# To automatically upgrade your package dependencies to the latest versions +# consider running `flutter pub upgrade --major-versions`. Alternatively, +# dependencies can be manually updated by changing the version numbers below to +# the latest version available on pub.dev. To see which dependencies have newer +# versions available, run `flutter pub outdated`. +dependencies: + flutter: + sdk: flutter + + + # The following adds the Cupertino Icons font to your application. + # Use with the CupertinoIcons class for iOS style icons. + cupertino_icons: ^1.0.2 + flutter_colorpicker: 0.6.0 + flutter_cube: + path: ../../ + +dev_dependencies: + flutter_test: + sdk: flutter + + # The "flutter_lints" package below contains a set of recommended lints to + # encourage good coding practices. The lint set provided by the package is + # activated in the `analysis_options.yaml` file located at the root of your + # package. See that file for information about deactivating specific lint + # rules and activating additional ones. + flutter_lints: ^1.0.0 + +# For information on the generic Dart part of this file, see the +# following page: https://dart.dev/tools/pub/pubspec + +# The following section is specific to Flutter. +flutter: + + # The following line ensures that the Material Icons font is + # included with your application, so that you can use the icons in + # the material Icons class. + uses-material-design: true + + # To add assets to your application, add an assets section, like this: + # assets: + # - images/a_dot_burr.jpeg + # - images/a_dot_ham.jpeg + + # An image asset can refer to one or more resolution-specific "variants", see + # https://flutter.dev/assets-and-images/#resolution-aware. + + # For details regarding adding assets from package dependencies, see + # https://flutter.dev/assets-and-images/#from-packages + + # To add custom fonts to your application, add a fonts section here, + # in this "flutter" section. Each entry in this list should have a + # "family" key with the font family name, and a "fonts" key with a + # list giving the asset and other descriptors for the font. For + # example: + # fonts: + # - family: Schyler + # fonts: + # - asset: fonts/Schyler-Regular.ttf + # - asset: fonts/Schyler-Italic.ttf + # style: italic + # - family: Trajan Pro + # fonts: + # - asset: fonts/TrajanPro.ttf + # - asset: fonts/TrajanPro_Bold.ttf + # weight: 700 + # + # For details regarding fonts from package dependencies, + # see https://flutter.dev/custom-fonts/#from-packages + + assets: + - assets/ diff --git a/example/planet/lib/main.dart b/example/planet/lib/main.dart index 1283b74..fc922c4 100644 --- a/example/planet/lib/main.dart +++ b/example/planet/lib/main.dart @@ -89,7 +89,7 @@ Future generateSphereMesh({num radius = 0.5, int latSegments = 32, int lon int count = (latSegments + 1) * (lonSegments + 1); List vertices = List.filled(count, Vector3.zero()); List texcoords = List.filled(count, Offset.zero); - List indices = List.filled(latSegments * lonSegments * 2, Polygon(0, 0, 0)); + List indices = List.filled(latSegments * lonSegments * 2, Triangle([0, 0, 0],null,null)); int i = 0; for (int y = 0; y <= latSegments; ++y) { @@ -109,8 +109,8 @@ Future generateSphereMesh({num radius = 0.5, int latSegments = 32, int lon final int base1 = (lonSegments + 1) * y; final int base2 = (lonSegments + 1) * (y + 1); for (int x = 0; x < lonSegments; ++x) { - indices[i++] = Polygon(base1 + x, base1 + x + 1, base2 + x); - indices[i++] = Polygon(base1 + x + 1, base2 + x + 1, base2 + x); + indices[i++] = Triangle([base1 + x, base1 + x + 1, base2 + x],null,[base1 + x, base1 + x + 1, base2 + x]); + indices[i++] = Triangle([base1 + x + 1, base2 + x + 1, base2 + x],null,[base1 + x, base1 + x + 1, base2 + x]); } } diff --git a/lib/exporter/exporter.dart b/lib/exporter/exporter.dart new file mode 100644 index 0000000..e128ee8 --- /dev/null +++ b/lib/exporter/exporter.dart @@ -0,0 +1,78 @@ +import 'dart:io'; +import 'dart:ui'; + +import 'package:flutter_cube/exporter/obj_exporter.dart'; +import 'package:flutter_cube/exporter/stl_exporter.dart'; +import 'package:flutter_cube/exporter/x3d_exporter.dart'; +import 'package:flutter_cube/exporter/ply_exporter.dart'; +import 'package:flutter_cube/exporter/svg_exporter.dart'; +import 'package:flutter_cube/flutter_cube.dart'; + +enum ExporterType{stl,obj,ply,svg,x3d,png} + +class ObjectExporter{ + static List getMeshes(Object obj){ + List meshes = []; + print(obj.children.length); + if(obj.children.isNotEmpty) + for(int i = 0; i < obj.children.length;i++){ + if(obj.children[i].children.isNotEmpty){ + for(int j = 0; j < obj.children[i].children.length;j++){ + meshes.add(obj.children[i].children[j].mesh); + } + } + else{ + meshes.add(obj.children[i].mesh); + } + } + else + meshes.add(obj.mesh); + return meshes; + } + static void export(ExporterType type, String filePath, Scene scene){ + List meshes = getMeshes(scene.world); + switch (type) { + case ExporterType.svg: + SVGExporter.export(scene).then((data){ + _writeToFile(filePath, data); + }); + break; + case ExporterType.stl: + STLExporter.export(meshes).then((data){ + _writeToFile(filePath, data); + }); + break; + case ExporterType.obj: + List fileName = filePath.split('.')[1].split('\\'); + OBJExporter.export(fileName.last,meshes).then((data){ + _writeToFile(filePath, data); + }); + break; + case ExporterType.ply: + PLYExporter.export(meshes).then((data){ + _writeToFile(filePath, data); + }); + break; + case ExporterType.x3d: + X3DExporter.export(meshes).then((data){ + _writeToFile(filePath, data); + }); + break; + case ExporterType.png: + _exportPNG(filePath, scene); + break; + default: + } + } + static Future _exportPNG(String filePath, Scene scene) async{ + await scene.generateImage(Size(scene.camera.viewportWidth, scene.camera.viewportHeight)).then((value){ + value.toByteData(format: ImageByteFormat.png).then((value){ + File(filePath).writeAsBytesSync(value!.buffer.asUint8List()); + }); + }); + } + static Future _writeToFile(String path, String data){ + final file = File(path); + return file.writeAsString(data); + } +} \ No newline at end of file diff --git a/lib/exporter/obj_exporter.dart b/lib/exporter/obj_exporter.dart new file mode 100644 index 0000000..5815bb0 --- /dev/null +++ b/lib/exporter/obj_exporter.dart @@ -0,0 +1,44 @@ +import 'dart:async'; +import 'package:vector_math/vector_math_64.dart'; +import 'package:flutter_cube/model/mesh.dart'; + +class OBJExporter{ + static Future export(String fileName,List meshes) async { + String file = "# Flutter OBJ File: ''\n"; + file += 'mtllib '+fileName+'.mtl\n'; + int vertexOffset = 1; + int normalOffset = 1; + for(int i = 0; i < meshes.length;i++){ + file += 'o Object.'+(i+1).toString()+'\n'; + bool hasNormals = false; + for(int j = 0 ; j < meshes[i].vertices.length;j++){ + Vector3 v = meshes[i].vertices[j]; + file += 'v '+v.x.toStringAsFixed(6)+' '+v.y.toStringAsFixed(6)+' '+v.z.toStringAsFixed(6)+'\n'; + } + if(meshes[i].normals.isNotEmpty) + for(int j = 0; j < meshes[i].normals.length;j++){ + hasNormals = true; + Vector3 n = meshes[i].normals[j]; + file += 'vn '+n.x.toStringAsFixed(6)+' '+n.y.toStringAsFixed(6)+' '+n.z.toStringAsFixed(6)+'\n'; + } + file += 'usemtl None\ns 1\n'; + for(int j = 0; j < meshes[i].indices.length; j++){ + List v = meshes[i].indices[j].vertexes; + if(hasNormals){ + // List n = meshes[i].vnormals[j].vertexes; + // file += 'f '+(v[0]+vertexOffset).toString()+'//'+(n[0]+normalOffset).toString()+' ' + // +(v[1]+vertexOffset).toString()+'//'+(n[1]+normalOffset).toString()+' ' + // +(v[2]+vertexOffset).toString()+'//'+(n[2]+normalOffset).toString()+'\n'; + } + else + file += 'f '+(v[0]+vertexOffset).toString()+' '+(v[1]+vertexOffset).toString()+' '+(v[2]+vertexOffset).toString()+'\n'; + } + + vertexOffset += meshes[i].vertices.length; + normalOffset += meshes[i].normals.length; + } + file += '\n'; + + return file; + } +} \ No newline at end of file diff --git a/lib/exporter/ply_exporter.dart b/lib/exporter/ply_exporter.dart new file mode 100644 index 0000000..9ddc873 --- /dev/null +++ b/lib/exporter/ply_exporter.dart @@ -0,0 +1,65 @@ +import 'dart:async'; +import 'package:vector_math/vector_math_64.dart'; +import 'package:flutter_cube/model/mesh.dart'; + +class PLYExporter{ + static Future export(List meshes) async { + bool hasColor = false; + String file = 'ply\n'; + file += 'format ascii 1.0\n'; + file += 'comment Created by Flutter\n'; + file += 'element vertex xxx\n'; + file += 'property float x\n'; + file += 'property float y\n'; + file += 'property float z\n'; + file += 'property float nx\n'; + file += 'property float ny\n'; + file += 'property float nz\n'; + for(int i = 0; i < meshes.length;i++){ + if(meshes[i].material.diffuse!=Vector3.all(0.8)){ + hasColor = true; + break; + } + } + if(hasColor){ + file += 'property uchar red\n'; + file += 'property uchar green\n'; + file += 'property uchar blue\n'; + } + // file += 'property float s\n'; + // file += 'property float t\n'; + file += 'element face yyy\n'; + file += 'property list uchar uint vertex_indices\n'; + file += 'end_header\n'; + + String polygon = ''; + int faces = 0; + int verticies = 0; + + for(int i = 0; i < meshes.length;i++){ + meshes[i].calculateVertexNormals(Shading.Smooth); + int vertexOffset = verticies; + for(int j = 0; j < meshes[i].vertices.length;j++){ + Vector3 v = meshes[i].vertices[j]; + Vector3 n = meshes[i].normals[j]; + file += v.x.toStringAsFixed(6)+' '+v.y.toStringAsFixed(6)+' '+v.z.toStringAsFixed(6)+' '+n.x.toStringAsFixed(6)+' '+n.y.toStringAsFixed(6)+' '+n.z.toStringAsFixed(6); + + if(hasColor) + file += (meshes[i].material.diffuse.x*255).ceil().toString()+' '+(meshes[i].material.diffuse.y*255).ceil().toString()+' '+(meshes[i].material.diffuse.z*255).ceil().toString(); + + file += '\n'; + verticies++; + } + for(int j = 0; j < meshes[i].indices.length; j++){ + List vertexes = meshes[i].indices[j].vertexes; + polygon += '3 '+(vertexes[0]+vertexOffset).toString()+' '+(vertexes[1]+vertexOffset).toString()+' '+(vertexes[2]+vertexOffset).toString()+'\n'; + faces++; + } + } + file = file.replaceAll('xxx', verticies.toString()); + file = file.replaceAll('yyy', faces.toString()); + file += polygon+'\n'; + + return file; + } +} \ No newline at end of file diff --git a/lib/exporter/stl_exporter.dart b/lib/exporter/stl_exporter.dart new file mode 100644 index 0000000..fcaf0b6 --- /dev/null +++ b/lib/exporter/stl_exporter.dart @@ -0,0 +1,29 @@ +import 'dart:async'; +import 'package:vector_math/vector_math_64.dart'; +import 'package:flutter_cube/model/mesh.dart'; + +class STLExporter{ + static Future export(List meshes) async { + String file = 'solid Exported from Flutter\n'; + + for(int i = 0; i < meshes.length;i++){ + meshes[i].calculateVertexNormals(Shading.Flat); + for(int j = 0; j < meshes[i].indices.length; j++){ + Vector3 normal = meshes[i].normals[j]; + file += 'facet normal '+normal.x.toStringAsFixed(6)+' '+normal.y.toStringAsFixed(6)+' '+normal.z.toStringAsFixed(6)+'\n'; + Vector3 v1 = meshes[i].vertices[meshes[i].indices[j].vertexes[0]]; + Vector3 v2 = meshes[i].vertices[meshes[i].indices[j].vertexes[1]]; + Vector3 v3 = meshes[i].vertices[meshes[i].indices[j].vertexes[2]]; + file += 'outer loop\n'; + file += 'vertex '+v1.x.toStringAsFixed(6)+' '+v1.y.toStringAsFixed(6)+' '+v1.z.toStringAsFixed(6)+'\n'; + file += 'vertex '+v2.x.toStringAsFixed(6)+' '+v2.y.toStringAsFixed(6)+' '+v2.z.toStringAsFixed(6)+'\n'; + file += 'vertex '+v3.x.toStringAsFixed(6)+' '+v3.y.toStringAsFixed(6)+' '+v3.z.toStringAsFixed(6)+'\n'; + file += 'endloop\n'; + file += 'endfacet\n'; + } + } + file += 'endsolid Exported from Flutter\n'; + + return file; + } +} \ No newline at end of file diff --git a/lib/exporter/svg_exporter.dart b/lib/exporter/svg_exporter.dart new file mode 100644 index 0000000..37c7818 --- /dev/null +++ b/lib/exporter/svg_exporter.dart @@ -0,0 +1,105 @@ +import 'dart:async'; +import 'dart:ui'; +import 'dart:typed_data'; +import 'package:flutter_cube/flutter_cube.dart'; + +class SVGExporter{ + static Future export(Scene scene) async { + // create render mesh from objects + final renderMesh = scene.makeRenderMesh(); + final List renderPolys = scene.renderObject(renderMesh, scene.world, Matrix4.identity(), scene.camera.lookAtMatrix, scene.camera.projectionMatrix, false); + final int indexCount = renderPolys.length; + final Uint16List indices = Uint16List(indexCount * 3); + + renderPolys.sort((Triangle? a, Triangle? b){ + return scene.paintersAlgorithm(a,b); + }); + + for (int i = 0; i < indexCount; i++) { + if(renderPolys[i] != null){ + final int index0 = i * 3; + final int index1 = index0 + 1; + final int index2 = index0 + 2; + final Triangle triangle = renderPolys[i]!; + + indices[index0] = triangle.vertexes[0]; + indices[index1] = triangle.vertexes[1]; + indices[index2] = triangle.vertexes[2]; + } + } + + return svgStacked(renderMesh,indices); + } + + static String svgStacked(RenderMesh renderMesh, Uint16List indices){ + String top = ''; + String st = ''; + List usedColors = []; + List values = [Vector2(0,0),Vector2(0,0)]; + + checkValues(Vector2 val){ + if(val.x < values[0].x) + values[0].x = val.x; + if(val.x > values[1].x) + values[1].x = val.x; + if(val.y < values[0].y) + values[0].y = val.y; + if(val.y > values[1].y) + values[1].y = val.y; + } + + int colorCheck(int color){ + bool isColorUsed = false; + int newColorLoc = 0; + for(int i = 0; i < usedColors.length; i++){ + if(usedColors[i] == color){ + newColorLoc = i; + isColorUsed = true; + break; + } + } + + if(!isColorUsed){ + usedColors.add(color); + newColorLoc = usedColors.length-1; + int actColor = 0xFFFFFF & Color(color).value; + String hexString ='#${actColor.toRadixString(16).padLeft(6, '0')}'; + print(hexString); + st += '.st'+newColorLoc.toString()+'{fill:'+hexString+';}'; + } + return newColorLoc; + } + int colorLoc = 0; + for(int i = 0; i < indices.length; i=i+3){ + if(i != 0){ + file += '" class="st'+colorLoc.toString()+' st">'; + } + file += ''; + file += ''; + + top = top.replaceAll('xx2', (values[1].x*2).ceil().toString()); + top = top.replaceAll('yy2', values[1].y.ceil().toString()); + + return top+st+file; + } +} \ No newline at end of file diff --git a/lib/exporter/x3d_exporter.dart b/lib/exporter/x3d_exporter.dart new file mode 100644 index 0000000..c58f500 --- /dev/null +++ b/lib/exporter/x3d_exporter.dart @@ -0,0 +1,9 @@ +import 'dart:async'; +import 'package:flutter_cube/flutter_cube.dart'; + +class X3DExporter{ + static Future export(List mesh) async { + String file = ''; + return file; + } +} \ No newline at end of file diff --git a/lib/flutter_cube.dart b/lib/flutter_cube.dart index 9a102ea..4a7e451 100755 --- a/lib/flutter_cube.dart +++ b/lib/flutter_cube.dart @@ -1,9 +1,10 @@ library flutter_cube; -export 'src/widget.dart'; -export 'src/scene.dart'; -export 'src/object.dart'; -export 'src/camera.dart'; -export 'src/mesh.dart'; -export 'src/material.dart'; -export 'package:vector_math/vector_math_64.dart' hide Colors; +export 'ui/widget.dart'; +export 'scene/scene.dart'; +export 'model/object.dart'; +export 'scene/camera.dart'; +export 'model/mesh.dart'; +export 'model/material.dart'; +export 'exporter/exporter.dart'; +export 'package:vector_math/vector_math_64.dart' hide Colors hide Triangle; diff --git a/lib/loader/loader.dart b/lib/loader/loader.dart new file mode 100644 index 0000000..1457f1b --- /dev/null +++ b/lib/loader/loader.dart @@ -0,0 +1,4 @@ +export 'obj_loader.dart'; +export 'stl_loader.dart'; +export 'x3d_loader.dart'; +export 'ply_loader.dart'; \ No newline at end of file diff --git a/lib/loader/obj_loader.dart b/lib/loader/obj_loader.dart new file mode 100644 index 0000000..5c88ce1 --- /dev/null +++ b/lib/loader/obj_loader.dart @@ -0,0 +1,157 @@ +import 'dart:async'; +import 'dart:io'; +import 'dart:ui'; +import 'package:flutter/foundation.dart'; +import 'package:vector_math/vector_math_64.dart' hide Triangle; +import 'package:flutter/services.dart' show rootBundle; +import 'package:path/path.dart' as path; +import '../model/mesh.dart'; +import '../model/material.dart'; + +class OBJLoader{ + static int _getVertexIndex(String vIndex) { + if (int.parse(vIndex) < 0) + return int.parse(vIndex) + 1; + else + return int.parse(vIndex) - 1; + } + + + /// Loading mesh from Wavefront's object file (.obj). + /// Reference:http://paulbourke.net/dataformats/obj/ + /// + static Future> load(String file, bool normalized, {bool isAsset = true}) async { + Map? materials; + List vertices = []; + List normals = []; + List texcoords = []; + + List vertexIndices = []; + + List elementNames = []; + List elementMaterials = []; + + List elementOffsets = []; + + String? materialName; + String? objectlName; + String? groupName; + String basePath = kIsWeb?'assets':path.dirname(file); + + String data; + if (isAsset) + data = await rootBundle.loadString(file); + else{ + if(kIsWeb) + data = file;//utf8.decode(file.bytes); + else + data = await File(file).readAsString(); + } + + final lines = data.split('\n'); + for (var line in lines) { + List parts = line.trim().split(RegExp(r"\s+")); + + switch (parts[0]) { + case 'mtllib': + // load material library file. eg: mtllib master.mtl + final mtlFileName = path.join(basePath, parts[1]); + materials = await loadMtl(mtlFileName, isAsset: isAsset); + break; + case 'usemtl': + // material name from material library. eg: usemtl red + if (parts.length >= 2) materialName = parts[1]; + // create a new mesh element + final String elementName = objectlName ?? groupName ?? materialName ?? ''; + elementNames.add(elementName); + elementMaterials.add(materialName ?? ''); + elementOffsets.add(vertexIndices.length); + break; + case 'g': + // the name for the group. eg: g front cube + if (parts.length >= 2) groupName = parts[1]; + break; + case 'o': + // the user-defined object name. eg: o cube + if (parts.length >= 2) objectlName = parts[1]; + break; + case 'v': + // a geometric vertex and its x y z coordinates. eg: v 0.000000 2.000000 0.000000 + if (parts.length >= 4) { + final v = Vector3(double.parse(parts[1]), double.parse(parts[2]), double.parse(parts[3])); + vertices.add(v); + } + break; + case 'vn': + // a geometric vertex normals and its x y z coordinates. eg: vn 0.000000 2.000000 0.000000 + if (parts.length >= 4) { + final v = Vector3(double.parse(parts[1]), double.parse(parts[2]), double.parse(parts[3])); + normals.add(v); + } + break; + case 'vt': + // eg: vt 0.000000 0.000000 + if (parts.length >= 3) { + double x = double.parse(parts[1]); + double y = double.parse(parts[2]); + if (x < 0 || x > 1.0) x %= 1.0; + if (y < 0 || y > 1.0) y %= 1.0; + final vt = Offset(x, y); + texcoords.add(vt); + } + break; + case 'f': + // eg:f v1/vt1/vn1 v2/vt2/vn2 v3/vt3/vn3; f v1 v2 v3; f v1/vt1 v2/vt2 v3/vt3; f v1//vn1 v2//vn2 v3//vn3; + List> p = []; + for(int split = 1; split < parts.length;split++){ + p.add(parts[split].split('/')); + } + + if (parts.length >= 3) { + //Convert to triangles + List? ti; + if ((p[0].length > 1 && p[0][1] != '') && (p[1].length > 1 && p[1][1] != '') && (p[2].length > 1 && p[2][1] != '')) + ti = [_getVertexIndex(p[0][1]), _getVertexIndex(p[1][1]), _getVertexIndex(p[2][1])]; + + List? nv; + if ((p[0].length > 2 && p[0][2] != '') && (p[1].length > 2 && p[1][2] != '') && (p[2].length > 2 && p[2][2] != '')) + nv = [_getVertexIndex(p[0][2]), _getVertexIndex(p[1][2]), _getVertexIndex(p[2][2])]; + + vertexIndices.add( + Triangle( + [_getVertexIndex(p[0][0]), _getVertexIndex(p[1][0]), _getVertexIndex(p[2][0])], + nv,ti + ) + ); + + // Triangle to triangle. eg: f 1/1 2/2 3/3 4/4 ==> f 1/1 2/2 3/3 + f 1/1 3/3 4/4 + if(p.length > 3) + for (int i = 3; i < p.length; i++) { + //final List p3 = p[i].split('/'); + List vi = [vertexIndices[vertexIndices.length-1].vertexes[0], vertexIndices[vertexIndices.length-1].vertexes[2], _getVertexIndex(p[i][0])]; + if (p[i].length > 1 && p[i][1] != '') + ti = [vertexIndices[vertexIndices.length-1].texture![0], vertexIndices[vertexIndices.length-1].texture![2], _getVertexIndex(p[i][1])]; + if (p[i].length > 2 && p[i][2] != '') + nv = [vertexIndices[vertexIndices.length-1].normals![0], vertexIndices[vertexIndices.length-1].normals![2], _getVertexIndex(p[i][2])]; + vertexIndices.add(Triangle(vi,nv,ti)); + } + } + break; + default: + } + } + final meshes = await buildMesh( + vertices, + normals, + texcoords, + vertexIndices, + materials, + elementNames, + elementMaterials, + elementOffsets, + basePath, + isAsset, + ); + return normalized ? normalizeMesh(meshes) : meshes; + } +} \ No newline at end of file diff --git a/lib/loader/ply_loader.dart b/lib/loader/ply_loader.dart new file mode 100644 index 0000000..71f72fa --- /dev/null +++ b/lib/loader/ply_loader.dart @@ -0,0 +1,143 @@ +import 'dart:async'; +import 'dart:io'; +import 'package:flutter/foundation.dart'; +import 'dart:ui'; +import 'package:vector_math/vector_math_64.dart' hide Triangle; +import 'package:flutter/services.dart' show rootBundle; +import 'package:path/path.dart' as path; +import '../model/mesh.dart'; +import '../model/material.dart'; + +class PLYLoader{ + static int _getVertexIndex(String vIndex) { + return int.parse(vIndex); + } + + /// Loading mesh from Wavefront's object file (.obj). + /// Reference:http://paulbourke.net/dataformats/obj/ + /// + static Future> load(String file, bool normalized, {bool isAsset = true}) async { + Map? materials; + List vertices = []; + List normals = []; + List texcoords = []; + + List vertexIndices = []; + + List elementNames = []; + List elementMaterials = []; + + List elementOffsets = []; + String basePath = kIsWeb?'temp':path.dirname(file); + + bool endedHeader = false; + int vertexAmount = 0; + int k = 0; + List propertyType = []; + + String data; + if (isAsset) + data = await rootBundle.loadString(file); + else{ + if(kIsWeb) + data = file;//utf8.decode(file.bytes); + else + data = await File(file).readAsString(); + } + + final lines = data.split('\n'); + for (var line in lines) { + List parts = line.trim().split(RegExp(r"\s+")); + switch (parts[0]) { + case 'property': + // load material library file. eg: mtllib master.mtl + propertyType.add(parts[2]); + break; + case 'end_header': + // the name for the group. eg: g front cube + endedHeader = true; + break; + case 'element': + // the user-defined object name. eg: o cube + if(parts[1] == 'vertex') vertexAmount = int.parse(parts[2]); + break; + default: + if(endedHeader){ + if(k < vertexAmount){ + Vector3 v = Vector3(0,0,0); + Vector3 n = Vector3(0,0,0); + Vector2 t = Vector2(0,0); + + for(int i = 0; i < parts.length;i++){ + String pt = propertyType[i]; + switch (pt) { + case 'x': + v.x = double.parse(parts[i]); + break; + case 'y': + v.y = double.parse(parts[i]); + break; + case 'z': + v.z = double.parse(parts[i]); + break; + case 'nx': + n.x = double.parse(parts[i]); + break; + case 'ny': + n.y = double.parse(parts[i]); + break; + case 'nz': + n.z= double.parse(parts[i]); + break; + case 's': + t.x = double.parse(parts[i]); + break; + case 't': + t.y = double.parse(parts[i]); + break; + default: + } + } + vertices.add(v); + normals.add(n); + texcoords.add(Offset(t.x,t.y)); + k++; + } + else{ + if(parts.length > 3){ + List p = []; + List vi = []; + List indi = [_getVertexIndex(parts[1]), _getVertexIndex(parts[2]), _getVertexIndex(parts[3])]; + vertexIndices.add(Triangle(indi,indi,indi)); + vi.add(_getVertexIndex(parts[1])); + vi.add(_getVertexIndex(parts[2])); + vi.add(_getVertexIndex(parts[3])); + p.add(vertexIndices.length); + // Triangle to triangle. eg: f 1/1 2/2 3/3 4/4 ==> f 1/1 2/2 3/3 + f 1/1 3/3 4/4 + for (int i = 4; i < parts.length; i++) { + List indi = [vertexIndices[vertexIndices.length-1].vertexes[0], vertexIndices[vertexIndices.length-1].vertexes[2], _getVertexIndex(parts[i])]; + vertexIndices.add(Triangle(indi,indi,indi)); + vi.add(_getVertexIndex(parts[i])); + p.add(vertexIndices.length); + } + } + } + } + } + } + + final meshes = await buildMesh( + vertices, + normals, + texcoords, + vertexIndices, + materials, + elementNames, + elementMaterials, + elementOffsets, + basePath, + isAsset, + ); + return normalized ? normalizeMesh(meshes) : meshes; + } +} \ No newline at end of file diff --git a/lib/loader/stl_loader.dart b/lib/loader/stl_loader.dart new file mode 100644 index 0000000..da4a36d --- /dev/null +++ b/lib/loader/stl_loader.dart @@ -0,0 +1,213 @@ +import 'dart:async'; +import 'dart:io'; +import 'dart:typed_data'; +import 'dart:ui'; +import 'dart:convert'; +import 'package:flutter/foundation.dart'; +import 'package:vector_math/vector_math_64.dart' hide Triangle; +import 'package:flutter/services.dart' show rootBundle; +import 'package:path/path.dart' as path; +import '../model/mesh.dart'; +import '../model/material.dart'; + +class STLLoader{ + static Future> load(String file,bool normalized, {bool isAsset = true}) async { + String basePath = kIsWeb?'temp':path.dirname(file); + + dynamic data; + bool isAscii = false; + + if (isAsset){ + try{ + data = await rootBundle.loadString(file); + isAscii = true; + } + catch(e){ + await rootBundle.load(file).then((value){ + data = value.buffer.asUint8List(); + }); + + } + } + else{ + if(kIsWeb){ + try{ + data = utf8.encode(file); + } + catch(e){ + data = file; + isAscii = true; + } + } + else{ + try{ + data = await File(file).readAsString(); + isAscii = true; + } + catch(e){ + data = await File(file).readAsBytes(); + } + } + } + + if(!isAscii) + return await STLByteLoader.load(data, basePath, normalized, isAsset); + else + return await STLAsciiLoader.load(data, basePath, normalized, isAsset); + } +} + +class STLAsciiLoader{ + /// Loading mesh from Wavefront's object file (.obj). + /// Reference:http://paulbourke.net/dataformats/obj/ + /// + static Future> load(String data, String basePath, bool normalized, bool isAsset) async { + Map? materials; + List vertices = []; + List normals = []; + List texcoords = []; + + List vertexIndices = []; + + List elementNames = []; + List elementMaterials = []; + + List elementOffsets = []; + + final lines = data.split('\n'); + for (var line in lines) { + List parts = line.trim().split(RegExp(r"\s+")); + switch (parts[0]) { + case 'facet': + Vector3 n = Vector3(double.parse(parts[2]),double.parse(parts[3]),double.parse(parts[4])); + normals.add(n); + normals.add(n); + normals.add(n); + break; + case 'vertex': + // the name for the group. eg: g front cube + vertices.add(Vector3(double.parse(parts[1]),double.parse(parts[2]),double.parse(parts[3]))); + int k = vertices.length; + if(k%3 == 0 && k != 0) + vertexIndices.add(Triangle([k-3,k-2,k-1],[k-3,k-2,k-1],null)); + break; + default: + } + } + + final meshes = await buildMesh( + vertices, + normals, + texcoords, + vertexIndices, + materials, + elementNames, + elementMaterials, + elementOffsets, + basePath, + isAsset, + ); + return normalized ? normalizeMesh(meshes) : meshes; + } +} + +class STLByteLoader{ + static double getDouble(List temp, [int byteOffset = 0]){ + Uint8List newTemp = convertToUint8List(temp); + return (ByteData.view(newTemp.buffer)).getFloat32(byteOffset,Endian.little); + } + + static Uint8List convertToUint8List(List temp){ + Uint8List temp2 = Uint8List(temp.length); + for(int i = 0; i < temp.length; i++) + temp2[i] = temp[i]; + return temp2; + } + + static List getVerticies(int byteIndex, Uint8List fileBytes){ + List v = []; + for(int i = 0; i < 3; i++){ + v.add(Vector3(0,0,0)); + v[i].x = getDouble([fileBytes[byteIndex], fileBytes[byteIndex + 1], fileBytes[byteIndex + 2], fileBytes[byteIndex + 3]]); + byteIndex += 4; + v[i].y = getDouble([fileBytes[byteIndex], fileBytes[byteIndex + 1], fileBytes[byteIndex + 2], fileBytes[byteIndex + 3]]); + byteIndex += 4; + v[i].z = getDouble([fileBytes[byteIndex], fileBytes[byteIndex + 1], fileBytes[byteIndex + 2], fileBytes[byteIndex + 3]]); + byteIndex += 4; + } + return v; + } + static Vector3 getNormals(int byteIndex, Uint8List fileBytes){ + Vector3 v = Vector3(0,0,0); + v.x = getDouble([fileBytes[byteIndex], fileBytes[byteIndex + 1], fileBytes[byteIndex + 2], fileBytes[byteIndex + 3]]); + byteIndex += 4; + v.y = getDouble([fileBytes[byteIndex], fileBytes[byteIndex + 1], fileBytes[byteIndex + 2], fileBytes[byteIndex + 3]]); + byteIndex += 4; + v.z = getDouble([fileBytes[byteIndex], fileBytes[byteIndex + 1], fileBytes[byteIndex + 2], fileBytes[byteIndex + 3]]); + return v; + } + /// Loading mesh from Wavefront's object file (.obj). + /// Reference:http://paulbourke.net/dataformats/obj/ + /// + static Future> load(Uint8List data, String basePath ,bool normalized, isAsset) async { + Map? materials; + List vertices = []; + List normals = []; + List texcoords = []; + + List vertexIndices = []; + + List elementNames = []; + List elementMaterials = []; + + List elementOffsets = []; + + int numOfMesh = 0; + int byteIndex = 0; + + Uint8List temp = Uint8List(4); + + /* 80 bytes title + 4 byte num of triangles + 50 bytes (1 of triangular mesh) */ + if (data.length > 120){ + temp[0] = data[80]; + temp[1] = data[81]; + temp[2] = data[82]; + temp[3] = data[83]; + + numOfMesh = (ByteData.view(temp.buffer)).getInt32(0,Endian.little); + print(numOfMesh); + byteIndex = 84; + + for(int i = 0; i < numOfMesh; i++){ + /* this try-catch block will be reviewed */ + /* face normal */ + Vector3 newNormals = getNormals(byteIndex, data); + normals.add(newNormals); + normals.add(newNormals); + normals.add(newNormals); + byteIndex += 12; + + List newVertices = getVerticies(byteIndex, data); + vertices.add(newVertices[0]); + vertices.add(newVertices[1]); + vertices.add(newVertices[2]); + vertexIndices.add(Triangle([i*3,i*3+1,i*3+2],[i*3,i*3+1,i*3+2],null)); + byteIndex += 12*3+2; + } + } + + final meshes = await buildMesh( + vertices, + normals, + texcoords, + vertexIndices, + materials, + elementNames, + elementMaterials, + elementOffsets, + basePath, + isAsset, + ); + return normalized ? normalizeMesh(meshes) : meshes; + } +} \ No newline at end of file diff --git a/lib/loader/x3d_loader.dart b/lib/loader/x3d_loader.dart new file mode 100644 index 0000000..3897156 --- /dev/null +++ b/lib/loader/x3d_loader.dart @@ -0,0 +1,123 @@ +import 'dart:async'; +import 'dart:io'; +import 'dart:ui'; +import 'package:flutter/foundation.dart'; +import 'package:vector_math/vector_math_64.dart' hide Triangle; +import 'package:flutter/services.dart' show rootBundle; +import 'package:path/path.dart' as path; +import '../model/mesh.dart'; +import '../model/material.dart'; + +class X3DLoader{ + static int _getVertexIndex(String vIndex) { + return int.parse(vIndex); + } + + static List getVerticies(String points){ + List sepPoints = points.split(RegExp(r"\s+")); + List v = []; + for(int i = 0; i < sepPoints.length-2;i=i+3){ + v.add(Vector3(double.parse(sepPoints[i]),double.parse(sepPoints[i+1]),double.parse(sepPoints[i+2]))); + } + return v; + } + static List getOffsets(String points){ + List sepPoints = points.split(RegExp(r"\s+")); + List o = []; + for(int i = 0; i < sepPoints.length-1;i=i+2){ + o.add(Offset(double.parse(sepPoints[i]),double.parse(sepPoints[i+1]))); + } + return o; + } + static List getTriangles(List> vIndi, List> tIndi, bool hasNormals){ + List tri = []; + for(int i = 0; i < vIndi.length; i++){ + List indi = [vIndi[i][0],vIndi[i][1],vIndi[i][2]]; + List tIn = tIndi.isNotEmpty?[tIndi[i][0],tIndi[i][1],tIndi[i][2]]:[]; + tri.add(Triangle(indi, hasNormals?indi:null, tIndi.isNotEmpty?tIn:null)); + for(int j = 3; j < vIndi[i].length;j++){ + List indi = [vIndi[i][0],vIndi[i][2],vIndi[i][j]]; + List tIn = tIndi.isNotEmpty?[tIndi[i][0],tIndi[i][2],tIndi[i][j]]:[]; + tri.add(Triangle(indi, hasNormals?indi:null, tIndi.isNotEmpty?tIn:null)); + } + } + return tri; + } + static List> getIndexes(String indexes){ + List> indi = []; + List cords = indexes.split(' -1 '); + for(int i = 0; i < cords.length;i++){ + List p = cords[i].split(RegExp(r"\s+")); + if(p.isNotEmpty && p.length > 1){ + List vi = []; + for (int j = 0; j < p.length; j++) + vi.add(_getVertexIndex(p[j])); + indi.add(vi); + } + } + return indi; + } + + /// Loading mesh from Wavefront's object file (.obj). + /// Reference:http://paulbourke.net/dataformats/obj/ + /// + static Future> load(String file, bool normalized, {bool isAsset = true}) async { + Map? materials; + List vertices = []; + List normals = []; + List texcoords = []; + + List tri = []; + + List> vertexIndices; + List> textureIndices; + + List elementNames = []; + List elementMaterials = []; + + List elementOffsets = []; + String basePath = kIsWeb?'temp':path.dirname(file); + + String data; + if (isAsset) + data = await rootBundle.loadString(file); + else{ + if(kIsWeb) + data = file;//utf8.decode(file.bytes); + else + data = await File(file).readAsString(); + } + + String texCoords = data.split('texCoordIndex="')[1].split('"')[0]; + textureIndices = getIndexes(texCoords); + String coordIndexes = data.split('coordIndex="')[1].split('"')[0]; + vertexIndices = getIndexes(coordIndexes); + String vector; + if(data.contains('vector="')){ + vector = data.split('vector="')[1].split('"')[0]; + normals = getVerticies(vector); + } + tri = getTriangles(vertexIndices,textureIndices,normals.isNotEmpty); + List points = data.split('point="'); + String coordPoints = points[1].split('"')[0]; + vertices = getVerticies(coordPoints); + if(points.length > 1){ + String textPoints = points[2].split('"')[0]; + texcoords = getOffsets(textPoints); + } + + final meshes = await buildMesh( + vertices, + normals, + texcoords, + tri, + materials, + elementNames, + elementMaterials, + elementOffsets, + basePath, + isAsset, + ); + return normalized ? normalizeMesh(meshes) : meshes; + } +} \ No newline at end of file diff --git a/lib/src/material.dart b/lib/model/material.dart old mode 100755 new mode 100644 similarity index 81% rename from lib/src/material.dart rename to lib/model/material.dart index 80467a3..795f2b1 --- a/lib/src/material.dart +++ b/lib/model/material.dart @@ -1,6 +1,8 @@ import 'dart:async'; import 'dart:io'; import 'dart:typed_data'; +import 'package:flutter/foundation.dart'; +import 'package:image/image.dart' as img; import 'package:vector_math/vector_math_64.dart'; import 'package:flutter/services.dart' show rootBundle; import 'package:path/path.dart' as path; @@ -17,10 +19,11 @@ class Material { mapKa = '', mapKd = '', mapKe = '', - shininess = 0, + mapBump = '', + shininess = 0.8, ni = 0, opacity = 1.0, - illum = 0; + emissivity = 8; String name; Vector3 ambient; Vector3 diffuse; @@ -30,10 +33,11 @@ class Material { double shininess; double ni; double opacity; - int illum; + int emissivity; String mapKa; String mapKd; String mapKe; + String mapBump; } /// Loading material from Material Library File (.mtl). @@ -44,8 +48,9 @@ Future> loadMtl(String fileName, {bool isAsset = true}) as String data; try { if (isAsset) { - data = await rootBundle.loadString(fileName); - } else { + data = await rootBundle.loadString(fileName.replaceAll('\\', '/')); + } + else { data = await File(fileName).readAsString(); } } catch (_) { @@ -98,6 +103,21 @@ Future> loadMtl(String fileName, {bool isAsset = true}) as material.mapKd = parts.last; } break; + case 'map_Bump': + if (parts.length >= 2) { + material.mapBump = parts.last; + } + break; + case 'map_bump': + if (parts.length >= 2) { + material.mapBump = parts.last; + } + break; + case 'norm': + if (parts.length >= 2) { + material.mapBump = parts.last; + } + break; case 'Ns': if (parts.length >= 2) { material.shininess = double.parse(parts[1]); @@ -115,7 +135,7 @@ Future> loadMtl(String fileName, {bool isAsset = true}) as break; case 'illum': if (parts.length >= 2) { - material.illum = int.parse(parts[1]); + material.emissivity = int.parse(parts[1]); } break; default: @@ -125,15 +145,20 @@ Future> loadMtl(String fileName, {bool isAsset = true}) as } /// load an image from asset -Future loadImageFromAsset(String fileName, {bool isAsset = true}) { +Future loadImageFromAsset(String fileName, {bool isAsset = true, bool makeGray = false}) { final c = Completer(); var dataFuture; - if (isAsset) { - dataFuture = rootBundle.load(fileName).then((data) => data.buffer.asUint8List()); - } else { + if (isAsset) + dataFuture = rootBundle.load(fileName.replaceAll('\\', '/')).then((data) => data.buffer.asUint8List()); + else dataFuture = File(fileName).readAsBytes(); - } - dataFuture.then((data) { + + dataFuture.then((data) async{ + if(makeGray){ + img.Image image = img.grayscale(img.decodeJpg(data)!); + data = img.encodeJpg(image); + } + instantiateImageCodec(data).then((codec) { codec.getNextFrame().then((frameInfo) { c.complete(frameInfo.image); @@ -151,15 +176,19 @@ Future?> loadTexture(Material? material, String basePath if (material == null) return null; String fileName = material.mapKa; if (fileName == '') fileName = material.mapKd; + bool makeGray = false; + if (fileName == ''){ + fileName = material.mapBump; + makeGray = true; + } if (fileName == '') return null; - // try to load image from asset in subdirectories Image? image; final List dirList = fileName.split(RegExp(r'[/\\]+')); while (dirList.length > 0) { fileName = path.join(basePath, path.joinAll(dirList)); try { - image = await loadImageFromAsset(fileName, isAsset: isAsset); + image = await loadImageFromAsset(fileName, isAsset: isAsset, makeGray: makeGray); } catch (_) {} if (image != null) return MapEntry(fileName, image); dirList.removeAt(0); @@ -174,7 +203,6 @@ Future getImagePixels(Image image) async { }).catchError((error) { c.completeError(error); }); - return c.future; } diff --git a/lib/model/mesh.dart b/lib/model/mesh.dart new file mode 100644 index 0000000..ac471e9 --- /dev/null +++ b/lib/model/mesh.dart @@ -0,0 +1,563 @@ +import 'dart:async'; +import 'dart:collection'; +import 'dart:typed_data'; +import 'dart:ui'; +import 'dart:math' as math; +import 'package:vector_math/vector_math_64.dart'; +import 'material.dart'; + +enum SubdivideSurface{Catmull_Clark,Catmull_Clark_Simple} +enum Shading{Flat,Smooth} + +class Vertex{ + Vertex({ + required this.indicies, + required this.vertex + }); + + List vertex; + List indicies; +} + +class Triangle{ + Triangle(this.vertexes,this.normals,this.texture,[this.z = 0, this.showFace = false]); + List vertexes; + List? normals; + List? texture; + + double z; + bool showFace; + + List copyVertexes() => vertexes; + List? copyNormals() => normals; + List? copyTextures() => texture; + void copyFromArray(List array) { + vertexes = array; + normals = array; + texture = array; + } +} + +class Mesh { + Mesh({ + List? vertices, + List? normals, + List? texcoords, + List? indices, + List? colors, + this.texture, + Rect? textureRect, + this.texturePath, + Material? material, + this.name + }) { + this.vertices = vertices ?? []; + this.normals = normals ?? []; + this.texcoords = texcoords ?? []; + this.colors = colors ?? []; + this.indices = indices ?? []; + this.material = material ?? Material(); + this.textureRect = textureRect ?? Rect.fromLTWH(0, 0, texture==null?1.0:texture!.width.toDouble(), texture==null?1.0:texture!.height.toDouble()); + } + late List vertices; + late List normals; + late List texcoords; + late List colors; + late List indices; + Image? texture; + late Rect textureRect; + String? texturePath; + late Material material; + String? name; + /// Calculate new normals using shading types Flat or Smooth + void calculateVertexNormals(Shading type){ + Vertex temp = _calculateVertexNormals(vertices,indices,type); + this.normals = temp.vertex; + } + /// Remove normals + void removeNormals(){ + this.normals = []; + } + /// Remove duplicate verticies from mesh + void removeDuplicateVertices(){ + Vertex temp = _removeDuplicates(vertices, indices); + this.indices = temp.indicies; + this.vertices = temp.vertex; + } +} + +/// Load the texture image file and rebuild vertices and texcoords to keep the same length. +Future> buildMesh( + List vertices, + List normals, + List texcoords, + List triangles, + Map? materials, + List elementNames, + List elementMaterials, + List elementOffsets, + String basePath, + bool isAsset, +) async { + if (elementOffsets.length == 0) { + elementNames.add(''); + elementMaterials.add(''); + elementOffsets.add(0); + } + + final List meshes = []; + for (int index = 0; index < elementOffsets.length; index++) { + int faceStart = elementOffsets[index]; + int faceEnd = (index + 1 < elementOffsets.length) ? elementOffsets[index + 1] : triangles.length; + + var newVertices = []; + var newNormals = []; + var newTexcoords = []; + var newTriangles = []; + + if (faceStart == 0 && faceEnd == triangles.length) { + newVertices = vertices; + newNormals = normals; + newTexcoords = texcoords; + newTriangles = triangles; + } + else + _copyRangeIndices(faceStart, faceEnd, vertices, normals, texcoords ,triangles, newVertices, newNormals, newTexcoords, newTriangles); + + // load texture image from assets. + final Material? material = (materials != null) ? materials[elementMaterials[index]] : null; + final MapEntry? imageEntry = await loadTexture(material, basePath,isAsset: isAsset); + + // fix zero texture area + if (imageEntry != null) + _remapZeroAreaUVs(newTexcoords, newTriangles, imageEntry.value.width.toDouble(), imageEntry.value.height.toDouble()); + + // If a vertex has multiple different texture coordinates, + // then create a vertex for each texture coordinate. + _rebuildVertices(newVertices, newNormals, newTexcoords, newTriangles); + final Mesh mesh = Mesh( + vertices: newVertices, + normals: newNormals, + texcoords: newTexcoords, + indices: newTriangles, + texture: imageEntry?.value, + texturePath: imageEntry?.key, + material: material, + name: elementNames[index], + ); + + meshes.add(mesh); + } + + return meshes; +} +/// Copy a mesh from the obj +void _copyRangeIndices( + int start, + int end, + List fromVertices, + List fromNormals, + List fromText, + List fromIndices, + List toVertices, + List toNormals, + List toText, + List toIndices +) { + if (start < 0 || end > fromIndices.length) return; + final viMap = List.filled(fromVertices.length, null); + final niMap = List.filled(fromNormals.length, null); + final tiMap = List.filled(fromText.length, null); + + bool processNi = niMap.isNotEmpty; + bool processTi = tiMap.isNotEmpty; + + for (int i = start; i < end; i++) { + final List newVi = List.filled(fromIndices[i].vertexes.length, 0); + final List newNi = processNi?List.filled(fromIndices[i].normals!.length, 0):[]; + final List newTi = processTi?List.filled(fromIndices[i].texture!.length, 0):[]; + + final List vi = fromIndices[i].copyVertexes(); + final List? ni = fromIndices[i].copyNormals(); + final List? ti = fromIndices[i].copyTextures(); + + for (int j = 0; j < vi.length; j++) { + //vert + int indexV = vi[j]; + int indexN = processNi?ni![j]:0; + int indexT = processTi?ti![j]:0; + + if (indexV < 0) indexV = fromVertices.length - 1 + indexV; + if (indexN < 0) indexN = fromNormals.length - 1 + indexN; + if (indexT < 0) indexT = fromText.length - 1 + indexT; + + int? v = viMap[indexV]; + int? n = processNi?niMap[indexN]:null; + int? t = processTi?tiMap[indexT]:null; + + if (v == null) { + newVi[j] = toVertices.length; + viMap[indexV] = toVertices.length; + toVertices.add(fromVertices[indexV]); + } + else + newVi[j] = v; + + if(n == null && processNi){ + newNi[j] = toNormals.length; + niMap[indexN] = toNormals.length; + toNormals.add(fromNormals[indexN]); + } + else if(processNi) + newNi[j] = n!; + + if(t == null && processTi){ + newTi[j] = toText.length; + tiMap[indexT] = toText.length; + toText.add(fromText[indexT]); + } + else if(processTi) + newTi[j] = t!; + + } + toIndices.add(Triangle(newVi,newNi,newTi)); + } +} + +/// Remap the UVs when the texture area is zero. +void _remapZeroAreaUVs(List texcoords, List textureIndices, double textureWidth, double textureHeight) { + for (int index = 0; index < textureIndices.length; index++) { + Triangle p = textureIndices[index]; + if (texcoords[p.texture![0]] == texcoords[p.texture![1]] && texcoords[p.texture![0]] == texcoords[p.texture![2]]) { + double u = (texcoords[p.texture![0]].dx * textureWidth).floorToDouble(); + double v = (texcoords[p.texture![0]].dy * textureHeight).floorToDouble(); + double u1 = (u + 1.0) / textureWidth; + double v1 = (v + 1.0) / textureHeight; + u /= textureWidth; + v /= textureHeight; + int texindex = texcoords.length; + texcoords.add(Offset(u, v)); + texcoords.add(Offset(u, v1)); + texcoords.add(Offset(u1, v)); + for(int j = 0; j < p.texture!.length;j++) + p.texture![j] = texindex+j; + } + } +} + +/// Rebuild vertices and texture coordinates to keep the same length. +void _rebuildVertices(List vertices, List normals, List texcoords, List vertexIndices) { + int texcoordsCount = texcoords.length; + if (texcoordsCount == 0) return; + List newVertices = []; + List newNormals = []; + List newTexcoords = []; + HashMap indexMap = HashMap(); + for (int i = 0; i < vertexIndices.length; i++) { + List vi = vertexIndices[i].copyVertexes(); + List? vn = vertexIndices[i].copyNormals(); + List? ti = vertexIndices[i].copyTextures(); + List face = List.filled(vi.length, 0); + for (int j = 0; j < vi.length; j++) { + int vIndex = vi[j]; + int? vnIndex = vn != null?vn[j]:null; + int tIndex = ti![j]; + int vtIndex = vIndex * texcoordsCount + tIndex; + int? v = indexMap[vtIndex]; + if (v == null) { + face[j] = newVertices.length; + indexMap[vtIndex] = face[j]; + newVertices.add(vertices[vIndex].clone()); + if(vnIndex!=null)newNormals.add(normals[vnIndex].clone()); + newTexcoords.add(texcoords[tIndex]); + } + else + face[j] = v; + } + vertexIndices[i].copyFromArray(face); + } + vertices + ..clear() + ..addAll(newVertices); + if(newNormals.isNotEmpty)normals + ..clear() + ..addAll(newNormals); + texcoords + ..clear() + ..addAll(newTexcoords); +} + +Vertex _calculateVertexNormals(List vertices,List indices, Shading shading){ + if(shading == Shading.Flat) + return _calculateFlatVertexNormals(vertices,indices); + else + return _calculateSmoothVertexNormals(vertices,indices); +} +Vertex _calculateFlatVertexNormals(List vertices,List indices){ + List vN = []; + List vertexIndicies = []; + + Vector3 normalizeFace(int face) { + Vector3 faceNormal; + + Vector3 ver1 = vertices[indices[face].vertexes[0]]; + Vector3 ver2 = vertices[indices[face].vertexes[1]]; + Vector3 ver3 = vertices[indices[face].vertexes[2]]; + List x = [ver1[0],ver2[0],ver3[0]]; + List y = [ver1[1],ver2[1],ver3[1]]; + List z = [ver1[2],ver2[2],ver3[2]]; + + Vector3 P1 = Vector3(x[0],y[0],z[0]); + Vector3 P2 = Vector3(x[1],y[1],z[1]); + Vector3 P3 = Vector3(x[2],y[2],z[2]); + + Vector3 V = P2-P1; + Vector3 W = P3-P1; + Vector3 N = V.cross(W); + + faceNormal = N..normalize(); + + return (faceNormal*3)..normalize(); + } + + for(int j = 0; j < indices.length;j++){ + Vector3 nor = normalizeFace(j); + vN.add(nor); + vertexIndicies.add( + Triangle(indices[j].vertexes,[vN.length-1,vN.length-1,vN.length-1],indices[j].texture) + ); + } + + return Vertex(indicies: vertexIndicies,vertex: vN); +} +Vertex _calculateSmoothVertexNormals(List vertices,List indices){ + List vN = []; + List vertexIndicies = []; + + List findFaces(Vector3 i){ + List newInd = []; + for(int j = 0; j < indices.length; j++){ + for(int k = 0; k < indices[j].vertexes.length;k++){ + int location = indices[j].vertexes[k]; + if(vertices[location] == i) + newInd.add(j); + } + } + return newInd; + } + + List normalizeFaces(List faces) { + List faceNormals = []; + for(int i = 0; i < faces.length; i++){ + Vector3 ver1 = vertices[indices[faces[i]].vertexes[0]]; + Vector3 ver2 = vertices[indices[faces[i]].vertexes[1]]; + Vector3 ver3 = vertices[indices[faces[i]].vertexes[2]]; + List x = [ver1[0],ver2[0],ver3[0]]; + List y = [ver1[1],ver2[1],ver3[1]]; + List z = [ver1[2],ver2[2],ver3[2]]; + + Vector3 P1 = Vector3(x[0],y[0],z[0]); + Vector3 P2 = Vector3(x[1],y[1],z[1]); + Vector3 P3 = Vector3(x[2],y[2],z[2]); + + Vector3 V = P2-P1; + Vector3 W = P3-P1; + Vector3 N = V.cross(W); + + faceNormals.add(N..normalize()); + } + return faceNormals; + } + + Vector3 vertexNormal(List faceNormals){ + Vector3 vn = faceNormals[0]; + for(int i = 1; i < faceNormals.length; i++) + vn += faceNormals[i]; + return (vn)..normalize(); + } + + for(int i = 0; i < vertices.length; i++){ + List faces = findFaces(vertices[i]); + List faceNormals = normalizeFaces(faces); + vN.add(vertexNormal(faceNormals)); + vertexIndicies.add(Triangle(indices[i].vertexes, indices[i].vertexes, null)); + } + + return Vertex(indicies: vertexIndicies, vertex: vN); +} + +Vertex _removeDuplicates(List fromVertices,List fromIndices){ + List toIndices = []; + List toVertices = fromVertices.toSet().toList(); + + for(int i = 0; i < fromIndices.length;i++){ + List vertexes = []; + List normals = []; + List texture = []; + for(int j = 0; j < fromIndices[i].vertexes.length; j++){ + for(int k = 0; k < toVertices.length;k++){ + if(fromVertices[fromIndices[i].vertexes[j]] == toVertices[k]){ + vertexes.add(k); + texture.add(k); + normals.add(k); + } + } + } + toIndices.add( + Triangle(vertexes,normals,texture) + ); + } + return Vertex( + vertex: toVertices, + indicies: toIndices + ); +} + + +/// Calcunormal vector +Vector3 normalVector(Vector3 a, Vector3 b, Vector3 c) { + return (b - a).cross(c - a).normalized(); +} + +/// Scale the model size to 1 +List normalizeMesh(List meshes) { + double maxLength = 0; + for (Mesh mesh in meshes) { + final List vertices = mesh.vertices; + for (int i = 0; i < vertices.length; i++) { + final storage = vertices[i].storage; + final double x = storage[0]; + final double y = storage[1]; + final double z = storage[2]; + if (x > maxLength) maxLength = x; + if (y > maxLength) maxLength = y; + if (z > maxLength) maxLength = z; + } + } + + maxLength = 0.5 / maxLength; + for (Mesh mesh in meshes) { + final List vertices = mesh.vertices; + for (int i = 0; i < vertices.length; i++) { + vertices[i].scale(maxLength); + } + } + return meshes; +} + +// Packing all textures to a single image. +/// Reference:https://observablehq.com/@mourner/simple-rectangle-packing +/// +Future packingTexture(List meshes) async { + // generate a key for a mesh. + String getMeshKey(Mesh mesh) { + if (mesh.texture != null) return mesh.texturePath ?? '' + mesh.textureRect.toString(); + return toColor(mesh.material.diffuse.bgr).toString(); + } + + // only pack the different textures. + final allMeshes = meshes; + final textures = Map(); + for (Mesh mesh in allMeshes) { + if (mesh.vertices.length == 0) continue; + final String key = getMeshKey(mesh); + textures.putIfAbsent(key, () => mesh); + } + // if there is only one texture then return the texture directly. + meshes = textures.values.toList(); + if (meshes.length == 1) return meshes[0].texture; + if (meshes.length == 0) return null; + + // packing + double area = 0; + double maxWidth = 0; + for (Mesh mesh in meshes) { + area += mesh.textureRect.width * mesh.textureRect.height; + maxWidth = math.max(maxWidth, mesh.textureRect.width); + } + meshes.sort((Mesh a, Mesh b) => b.textureRect.height.compareTo(a.textureRect.height)); + + final double startWidth = math.max(math.sqrt(area / 0.95), maxWidth); + final List spaces = []; + spaces.add(Rect.fromLTWH(0, 0, startWidth, double.infinity)); + + for (Mesh mesh in meshes) { + for (int i = spaces.length - 1; i >= 0; i--) { + final Rect block = mesh.textureRect; + final Rect space = spaces[i]; + if (block.width > space.width || block.height > space.height) continue; + mesh.textureRect = Rect.fromLTWH(space.left, space.top, block.width, block.height); + if (block.width == space.width && block.height == space.height) { + final Rect last = spaces.removeLast(); + if (i < spaces.length) spaces[i] = last; + } else if (block.height == space.height) { + spaces[i] = Rect.fromLTWH(space.left + block.width, space.top, space.width - block.width, space.height); + } else if (block.width == space.width) { + spaces[i] = Rect.fromLTWH(space.left, space.top + block.height, space.width, space.height - block.height); + } else { + spaces.add(Rect.fromLTWH(space.left + block.width, space.top, space.width - block.width, block.height)); + spaces[i] = Rect.fromLTWH(space.left, space.top + block.height, space.width, space.height - block.height); + } + break; + } + } + + // get the packed texture size + int textureWidth = 0; + int textureHeight = 0; + for (Mesh mesh in meshes) { + final Rect box = mesh.textureRect; + if (textureWidth < box.left + box.width) textureWidth = (box.left + box.width).ceil(); + if (textureHeight < box.top + box.height) textureHeight = (box.top + box.height).ceil(); + } + + // get the pixels from mesh.texture + final texture = Uint32List(textureWidth * textureHeight); + for (Mesh mesh in meshes) { + final int imageWidth = mesh.textureRect.width.toInt(); + final int imageHeight = mesh.textureRect.height.toInt(); + Uint32List pixels; + if (mesh.texture != null) { + final Uint32List data = await getImagePixels(mesh.texture!); + pixels = data.buffer.asUint32List(); + } + else { + final int length = imageWidth * imageHeight; + pixels = Uint32List(length); + // color mode then set texture to transparent. + final int color = 0; //mesh.material == null ? 0 : toColor(mesh.material.kd.bgr, mesh.material.d).value; + for (int i = 0; i < length; i++) { + pixels[i] = color; + } + } + + // break if the mesh.texture has changed + if (mesh.textureRect.right > textureWidth || mesh.textureRect.bottom > textureHeight) break; + + // copy pixels from mesh.texture to texture + int fromIndex = 0; + int toIndex = mesh.textureRect.top.toInt() * textureWidth + mesh.textureRect.left.toInt(); + for (int y = 0; y < imageHeight; y++) { + for (int x = 0; x < imageWidth; x++) { + texture[toIndex + x] = pixels[fromIndex + x]; + } + fromIndex += imageWidth; + toIndex += textureWidth; + } + } + + // apply the packed textureRect to all meshes. + for (Mesh mesh in allMeshes) { + final String? key = getMeshKey(mesh); + if (key != null) { + final Rect? rect = textures[key]?.textureRect; + if (rect != null) mesh.textureRect = rect; + } + } + + final c = Completer(); + decodeImageFromPixels(texture.buffer.asUint8List(), textureWidth, textureHeight, PixelFormat.rgba8888, (image) { + c.complete(image); + }); + return c.future; +} diff --git a/lib/model/meshGeneration.dart b/lib/model/meshGeneration.dart new file mode 100644 index 0000000..8b16e8a --- /dev/null +++ b/lib/model/meshGeneration.dart @@ -0,0 +1,112 @@ +import 'dart:ui' as ui; +import 'dart:math' as math; +import 'package:flutter/material.dart'; +import 'package:flutter_cube/flutter_cube.dart'; + +class GenerateMesh{ + static Future generateSphere({ + num radius = 0.5, + int latSegments = 32, + int lonSegments = 64, + String? texturePath + }) async { + int count = (latSegments + 1) * (lonSegments + 1); + List vertices = List.filled(count, Vector3.zero()); + List texcoords = List.filled(count, Offset.zero); + List indices = List.filled(latSegments * lonSegments * 2, Triangle([0, 0, 0],null,null)); + + int i = 0; + for (int y = 0; y <= latSegments; ++y) { + final double v = y / latSegments; + final double sv = math.sin(v * math.pi); + final double cv = math.cos(v * math.pi); + for (int x = 0; x <= lonSegments; ++x) { + final double u = x / lonSegments; + vertices[i] = Vector3(radius * math.cos(u * math.pi * 2.0) * sv, radius * cv, radius * math.sin(u * math.pi * 2.0) * sv); + texcoords[i] = Offset(1.0 - u, 1.0 - v); + i++; + } + } + + i = 0; + for (int y = 0; y < latSegments; ++y) { + final int base1 = (lonSegments + 1) * y; + final int base2 = (lonSegments + 1) * (y + 1); + for (int x = 0; x < lonSegments; ++x) { + indices[i++] = Triangle([base1 + x, base1 + x + 1, base2 + x],null,[base1 + x, base1 + x + 1, base2 + x]); + indices[i++] = Triangle([base1 + x + 1, base2 + x + 1, base2 + x],null,[base1 + x, base1 + x + 1, base2 + x]); + } + } + Mesh mesh; + if(texturePath != null){ + ui.Image texture = await loadImageFromAsset(texturePath); + mesh = Mesh( + vertices: vertices, + texcoords: texcoords, + indices: indices, + texture: texture, + texturePath: texturePath + ); + } + else{ + mesh = Mesh( + vertices: vertices, + indices: indices, + ); + } + return mesh; + } + + static Future generatePlane({ + double size = 0.1, + int latSegments = 32, + int lonSegments = 64, + String? texturePath + }) async { + int count = (latSegments + 1) * (lonSegments + 1); + List vertices = List.filled(count, Vector3.zero()); + List texcoords = List.filled(count, Offset.zero); + //List indices = List.filled(latSegments * lonSegments * 2, Polygon([0, 0, 0])); + + int i = 0; + for (int y = 0; y <= latSegments; ++y) { + final double v = y / latSegments; + final double sv = v; + final double cv = v; + for (int x = 0; x <= lonSegments; ++x) { + final double u = x / lonSegments; + vertices[i] = Vector3(y*size, x*size, 0); + texcoords[i] = Offset(1.0 - u, 1.0 - v); + i++; + } + } + + i = 0; + for (int y = 0; y < latSegments; ++y) { + final int base1 = (lonSegments + 1) * y; + final int base2 = (lonSegments + 1) * (y + 1); + for (int x = 0; x < lonSegments; ++x) { + //indices[i++] = Polygon([base1 + x, base1 + x + 1, base2 + x]); + //indices[i++] = Polygon([base1 + x + 1, base2 + x + 1, base2 + x]); + } + } + Mesh mesh; + if(texturePath != null){ + ui.Image texture = await loadImageFromAsset(texturePath); + mesh = Mesh( + vertices: vertices, + texcoords: texcoords, + //indices: indices, + texture: texture, + texturePath: texturePath + ); + } + else{ + mesh = Mesh( + vertices: vertices, + //indices: indices, + ); + } + return mesh; + } +} diff --git a/lib/model/object.dart b/lib/model/object.dart new file mode 100644 index 0000000..55d51e2 --- /dev/null +++ b/lib/model/object.dart @@ -0,0 +1,289 @@ +import 'package:vector_math/vector_math_64.dart' hide Triangle; +import 'dart:ui'; +import 'package:flutter_cube/scene/scene.dart'; +import 'mesh.dart'; +import 'package:flutter_cube/loader/loader.dart'; + +class Object { + Object({ + Vector3? position, + Vector3? rotation, + Vector3? scale, + this.name, + Mesh? mesh, + Scene? scene, + this.parent, + List? children, + this.backfaceCulling = true, + this.lighting = false, + this.visiable = true, + this.xray = false, + this.showVerts = false, + bool normalized = true, + String? fileName, + String? fileType, + this.number, + bool isAsset = true, + }) { + if (position != null) position.copyInto(this.position); + if (rotation != null) rotation.copyInto(this.rotation); + if (scale != null) scale.copyInto(this.scale); + updateTransform(); + this.mesh = mesh ?? Mesh(); + this.children = children ?? []; + for (Object child in this.children) { + child.parent = this; + } + this.scene = scene; + + if(fileName != null && fileType == null) + fileType = fileName.split('.')[1]; + // load mesh from obj file + if (fileName != null && fileType != null) { + if(fileType == 'obj') + OBJLoader.load(fileName, normalized, isAsset: isAsset).then((List meshes) { + if (meshes.length == 1) + this.mesh = meshes[0]; + else if (meshes.length > 1) + for (Mesh mesh in meshes) + add(Object(name: mesh.name, mesh: mesh, backfaceCulling: backfaceCulling, lighting: lighting, number: number,showVerts: showVerts)); + this.scene?.objectCreated(this); + }); + else if(fileType == 'stl') + STLLoader.load(fileName, normalized, isAsset: isAsset).then((List meshes) { + if (meshes.length == 1) + this.mesh = meshes[0]; + else if (meshes.length > 1) + for (Mesh mesh in meshes) + add(Object(name: mesh.name, mesh: mesh, backfaceCulling: backfaceCulling, lighting: lighting, number: number,showVerts: showVerts)); + this.scene?.objectCreated(this); + }); + else if(fileType == 'x3d') + X3DLoader.load(fileName, normalized, isAsset: isAsset).then((List meshes) { + if (meshes.length == 1) + this.mesh = meshes[0]; + else if (meshes.length > 1) + for (Mesh mesh in meshes) + add(Object(name: mesh.name, mesh: mesh, backfaceCulling: backfaceCulling, lighting: lighting, number: number,showVerts: showVerts)); + this.scene?.objectCreated(this); + }); + else if(fileType == 'ply') + PLYLoader.load(fileName, normalized, isAsset: isAsset).then((List meshes) { + if (meshes.length == 1) + this.mesh = meshes[0]; + else if (meshes.length > 1) + for (Mesh mesh in meshes) + add(Object(name: mesh.name, mesh: mesh, backfaceCulling: backfaceCulling, lighting: lighting, number: number,showVerts: showVerts)); + this.scene?.objectCreated(this); + }); + } + else { + this.scene?.objectCreated(this); + } + } + + /// The local position of this object relative to the parent. Default is Vector3(0.0, 0.0, 0.0). updateTransform after you change the value. + final Vector3 position = Vector3(0.0, 0.0, 0.0); + + /// The local rotation of this object relative to the parent. Default is Vector3(0.0, 0.0, 0.0). updateTransform after you change the value. + final Vector3 rotation = Vector3(0.0, 0.0, 0.0); + + /// The local scale of this object relative to the parent. Default is Vector3(1.0, 1.0, 1.0). updateTransform after you change the value. + final Vector3 scale = Vector3(1.0, 1.0, 1.0); + + /// The name of this object. + String? name; + + int? number; + + /// The scene of this object. + Scene? _scene; + Scene? get scene => _scene; + set scene(Scene? value) { + _scene = value; + for (Object child in children) { + child.scene = value; + } + } + + /// The parent of this object. + Object? parent; + + /// The children of this object. + late List children; + + /// The mesh of this object + Image? texture; + + /// The mesh of this object + late Mesh mesh; + + /// The backface will be culled without rendering. + bool backfaceCulling; + + /// Enable basic lighting, default to false. + bool lighting; + + /// Is this object visiable. + bool visiable; + + //See al point on object + bool xray; + + //Show verticies + bool showVerts; + + /// The transformation of the object in the scene, including position, rotation, and scaling. + final Matrix4 transform = Matrix4.identity(); + + void updateTransform() { + final Matrix4 m = Matrix4.compose(position, Quaternion.euler(radians(rotation.x), radians(rotation.y),radians(rotation.z)), scale);// + transform.setFrom(m); + } + + List _getSeperatedMeshs(){ + List allMesh = []; + List tempPoly = mesh.indices; + List tri = []; + List colors = []; + List verts = []; + List nors = []; + List text = []; + + List tempIndi = []; + + int k = 0; + + while(tempPoly.isNotEmpty){ + void reset(){ + allMesh.add( + Mesh( + vertices: verts, + normals: nors, + texcoords: text, + indices: tri, + colors: colors, + texture: mesh.texture, + texturePath: mesh.texturePath, + name: mesh.name, + ) + ); + tri = []; + colors = []; + verts = []; + nors = []; + text = []; + tempIndi = []; + } + void addItems(int j){ + dynamic getVect(dynamic verts, List indi){ + dynamic newVerts = []; + for(int i = 0; i < indi.length;i++){ + newVerts.add(verts[indi[i]]); + } + return newVerts; + } + getVect(mesh.vertices, tempPoly[j].vertexes).forEach((element) { + verts.add(element); + }); + if(mesh.normals.isNotEmpty) + getVect(mesh.normals, tempPoly[j].vertexes).forEach((element) { + nors.add(element); + }); + if(mesh.texcoords.isNotEmpty) + getVect(mesh.texcoords, tempPoly[j].vertexes).forEach((element) { + text.add(element); + }); + if(mesh.colors.isNotEmpty) + getVect(mesh.colors, tempPoly[j].vertexes).forEach((element) { + colors.add(element); + }); + tri.add(Triangle( + [verts.length-3,verts.length-2,verts.length-1], + (nors.isNotEmpty)?[nors.length-3,nors.length-2,nors.length-1]:null, + (text.isNotEmpty)?[text.length-3,text.length-2,text.length-1]:null + )); + tempPoly[j].vertexes.forEach((element) { + tempIndi.add(element); + }); + + if(tempPoly.length == 1) + reset(); + tempPoly.removeAt(j); + k = 0; + } + bool checkforsamevertexes(Triangle tempPoly1){ + for(int l = 0; l < tempIndi.length; l++){ + for(int k = 0; k < tempPoly1.vertexes.length; k++){ + if(tempPoly1.vertexes[k] == tempIndi[l]){ + k = 0; + return true; + } + } + } + return false; + } + + if(tri.isEmpty){ + addItems(0); + tempPoly[0].vertexes.forEach((element) { + tempIndi.add(element); + }); + } + + for(int j = tempPoly.length-1; j >= 0; j--){ + if(checkforsamevertexes(tempPoly[j])) + addItems(j); + } + + if(k > 2){ + reset(); + } + k++; + } + + return allMesh; + } + void seperateByLooseParts(){ + List newMeshes = _getSeperatedMeshs(); + + for(int i = 0; i < newMeshes.length;i++){ + add( + Object( + name: name!.split('_')[0]+'_'+i.toString(), + mesh: newMeshes[i], + backfaceCulling: backfaceCulling, + lighting: lighting, + number: number, + showVerts: showVerts + ) + ); + } + + name = name!.split('_')[0]; + mesh = Mesh(); + } + + /// Add a child + void add(Object object) { + assert(object != this); + object.scene = scene; + object.parent = this; + children.add(object); + } + + /// Remove a child + void remove(Object object) { + children.remove(object); + } + + /// Find a child matching the name + Object? find(Pattern name) { + for (Object child in children) { + if (child.name != null && (name as RegExp).hasMatch(child.name!)) return child; + final Object? result = child.find(name); + if (result != null) return result; + } + return null; + } +} diff --git a/lib/scene/camera.dart b/lib/scene/camera.dart new file mode 100644 index 0000000..92f170b --- /dev/null +++ b/lib/scene/camera.dart @@ -0,0 +1,110 @@ +import 'dart:math' as math; +import 'package:vector_math/vector_math_64.dart'; + +class CameraControls{ + CameraControls({ + this.zoom = true, + this.panX = true, + this.panY = true, + this.orbitX = true, + this.orbitY = true, + }); + bool zoom; + bool panX; + bool panY; + bool orbitX; + bool orbitY; +} + +class Camera { + Camera({ + Vector3? position, + Vector3? target, + Vector3? up, + this.fov = 60.0, + this.near = 0.1, + this.far = 10000, + this.zoom = 1.0, + this.viewportWidth = 100.0, + this.viewportHeight = 100.0, + CameraControls? cameraControls + }) { + if (position != null) position.copyInto(this.position); + if (target != null) target.copyInto(this.target); + if (up != null) up.copyInto(this.up); + this.cameraControls = cameraControls != null?cameraControls:CameraControls(); + _zoomStart = zoom; + } + + late CameraControls cameraControls; + final Vector3 position = Vector3(0.0, 0.0, -10.0); + final Vector3 target = Vector3(0.0, 0.0, 0.0); + final Vector3 up = Vector3(0.0, 1.0, 0.0); + final Vector3 pan = Vector3(0,0,0); + final Vector3 angle = Vector3(0,0,0); + + double fov; + double near; + double far; + double zoom; + late double _zoomStart; + double viewportWidth; + double viewportHeight; + + double get aspectRatio => viewportWidth / viewportHeight; + + Matrix4 get lookAtMatrix { + return makeViewMatrix(position, target, up)*Matrix4.translation(pan); + } + Matrix4 get projectionMatrix { + if(zoom < near) + zoom = near; + final double top = near * math.tan(radians(fov) / 2.0) / ((!cameraControls.zoom)?_zoomStart:zoom); + final double bottom = -top; + final double right = top * aspectRatio; + final double left = -right; + return makeFrustumMatrix(left, right, bottom, top, near, far); + } + + void panCamera(Vector2 from, Vector2 to, [double sensitivity = 1.0]){ + final double y = (!cameraControls.panX)?0:((to.x - from.x)) * sensitivity/ (viewportWidth * 0.5); + final double x = (!cameraControls.panY)?0:((to.y - from.y)) * sensitivity/ (viewportHeight * 0.5); + + Vector2 delta = Vector2(x, y); + Vector3 moveDirection = Vector3(delta.x, delta.y, 0); + + Vector3 _eye = position - target; + Vector3 eyeDirection = _eye.normalized(); + Vector3 upDirection = up.normalized(); + Vector3 sidewaysDirection = upDirection.cross(eyeDirection).normalized(); + upDirection.scale(delta.y); + sidewaysDirection.scale(delta.x); + moveDirection = upDirection + sidewaysDirection; + Vector3 axis = moveDirection.cross(_eye); + + pan.x += axis.x; + pan.y += axis.y; + pan.z += axis.z; + } + + void trackBall(Vector2 from, Vector2 to, [double sensitivity = 1.0]) { + final double x = (!cameraControls.orbitX)?0:-(to.x - from.x) * sensitivity / (viewportWidth * 0.5); + final double y = (!cameraControls.orbitY)?0:(to.y - from.y) * sensitivity / (viewportHeight * 0.5); + Vector2 delta = Vector2(x, y); + Vector3 moveDirection = Vector3(delta.x, delta.y, 0); + final double angle = moveDirection.length; + if (angle > 0) { + Vector3 _eye = position-target; + Vector3 eyeDirection = _eye.normalized(); + Vector3 upDirection = up.normalized(); + Vector3 sidewaysDirection = upDirection.cross(eyeDirection).normalized(); + upDirection.scale(delta.y); + sidewaysDirection.scale(delta.x); + moveDirection = upDirection + sidewaysDirection; + Vector3 axis = moveDirection.cross(_eye).normalized(); + Quaternion q = Quaternion.axisAngle(axis, angle); + q.rotate(position); + q.rotate(up); + } + } +} diff --git a/lib/src/light.dart b/lib/scene/light.dart similarity index 83% rename from lib/src/light.dart rename to lib/scene/light.dart index b9e2cb9..27acca1 100644 --- a/lib/src/light.dart +++ b/lib/scene/light.dart @@ -1,15 +1,16 @@ import 'dart:ui'; import 'dart:math' as math; +import 'package:flutter/cupertino.dart'; import 'package:vector_math/vector_math_64.dart'; -import 'material.dart'; +import 'package:flutter_cube/model/material.dart'; class Light { Light({Vector3? position, Color? color, double ambient = 0.1, double diffuse = 0.8, double specular = 0.5}) { position?.copyInto(this.position); setColor(color, ambient, diffuse, specular); } - final Vector3 position = Vector3(0, 0, 10); + final Vector3 position = Vector3(10, 10, 0); final Vector3 ambient = Vector3.zero(); final Vector3 diffuse = Vector3.zero(); final Vector3 specular = Vector3.zero(); @@ -22,8 +23,8 @@ class Light { } Color shading(Vector3 viewPosition, Vector3 fragmentPosition, Vector3 normal, Material material) { - final Vector3 ambient = material.ambient.clone()..multiply(this.ambient); - final Vector3 lightDir = (position - fragmentPosition)..normalize(); + final Vector3 ambient = material.ambient.clone()..multiply(this.ambient*(material.emissivity*0.004)); + final Vector3 lightDir = (viewPosition - fragmentPosition)..normalize(); final double diff = math.max(normal.dot(lightDir), 0); final Vector3 diffuse = (material.diffuse * diff)..multiply(this.diffuse); final Vector3 viewDir = (viewPosition - fragmentPosition)..normalize(); @@ -33,7 +34,7 @@ class Light { ambient ..add(diffuse) ..add(specular) - ..clampScalar(0.0, 1.0); + ..clampScalar(0, 1.0); return toColor(ambient, material.opacity); } } diff --git a/lib/scene/scene.dart b/lib/scene/scene.dart new file mode 100644 index 0000000..442ce63 --- /dev/null +++ b/lib/scene/scene.dart @@ -0,0 +1,568 @@ +import 'dart:ui'; +import 'dart:typed_data'; + +import 'package:flutter_cube/flutter_cube.dart'; +import 'package:flutter_cube/scene/light.dart'; + +enum RenderType{Wireframe,Normal} +enum SortingType{Painters,HSR} + +typedef ObjectCreatedCallback = void Function(Object object); + +class Scene { + Scene({ + VoidCallback? onUpdate, + ObjectCreatedCallback? onObjectCreated, + }) { + this._onUpdate = onUpdate; + this._onObjectCreated = onObjectCreated; + world = Object(scene: this); + } + + Light light = Light(); + Camera camera = Camera(); + late Object world; + /// allows tapping and hovering on objects + bool rayCasting = false; + Image? texture; + BlendMode blendMode = BlendMode.srcOver; + /// Blend mode of texture image, change this to colorDodge if there is only a normal map to allow changing colors. + BlendMode textureBlendMode = BlendMode.srcOver; + VoidCallback? _onUpdate; + /// Location of the tapped spot + Offset? tapLocation; + /// Location where the mouse is hovering + Offset? hoverLocation; + ObjectCreatedCallback? _onObjectCreated; + int vertexCount = 0; + int faceCount = 0; + int polyCount = 0; + /// name of the object tapped on + String? _objectTappedOn; + String? _prevObjectTappedOn; + /// name of the object hovering on + String? _objectHoveringOn; + double? _currentSum; + double? _currentHoverSum; + bool _needsUpdateTexture = false; + + /// Turn on wreframe + bool showWireframe = false; + /// Turn on verticies + bool showVerticies = false; + /// show through model + bool xray = false; + /// show Texture + bool showTexture = true; + + SortingType sortingType = SortingType.HSR; + + // calcuthe total number of vertices and facese + void _calculateVertices(Object o) { + vertexCount += o.mesh.vertices.length*(showVerticies?2:1); + faceCount += o.mesh.indices.length*(showWireframe?3:1); + final List children = o.children; + for (int i = 0; i < children.length; i++) + _calculateVertices(children[i]); + } + /// returns the name of the object tapped on + String? clickedObject(){ + _prevObjectTappedOn = _objectTappedOn; + tapLocation = null; + _currentSum = null; + + return _prevObjectTappedOn; + } + /// returns the name of the object hovered on + String? hoverObject(){ + _currentHoverSum = null; + return _objectHoveringOn; + } + + RenderMesh makeRenderMesh(){ + vertexCount = 0; + faceCount = 0; + polyCount = 0; + _calculateVertices(world); + final renderMesh = RenderMesh(vertexCount, faceCount); + renderMesh.texture = texture; + return renderMesh; + } + + bool _isFrontFace(List x, List y, List z) { + Vector3 P1 = Vector3(x[0],y[0],z[0]); + Vector3 P2 = Vector3(x[1],y[1],z[1]); + Vector3 P3 = Vector3(x[2],y[2],z[2]); + + Vector3 V = P2-P1; + Vector3 W = P3-P1; + + Vector3 N = Vector3( + ((V.y*W.z)-(V.z*W.y)), + ((V.z*W.x)-(V.x*W.z)), + ((V.x*W.y)-(V.y*W.x)) + )..normalize(); + Vector3 centroid = Vector3((x[0]+x[1]+x[2])/3,(y[0]+y[1]+y[2])/3,(z[0]+z[1]+z[2])/3)..normalize(); + double dot = centroid.dot(N); + return dot < 0; + } + bool _isClippedFace(List x, List y, List z) { + // clip if at least one vertex is outside the near and far plane + if (z[0] < 0 || z[0] > 1 || z[1] < 0 || z[1] > 1 || z[2] < 0 || z[2] > 1) return true; + // clip if the face's bounding box does not intersect the viewport + double left; + double right; + if (x[0] < x[1]) { + left = x[0]; + right = x[1]; + } + else { + left = x[1]; + right = x[0]; + } + if (left > x[2]) left = x[2]; + if (left > 1) return true; + if (right < x[2]) right = x[2]; + if (right < -1) return true; + + double top; + double bottom; + if (y[0] < y[1]) { + top = y[0]; + bottom = y[1]; + } + else { + top = y[1]; + bottom = y[0]; + } + if (top > y[2]) top = y[2]; + if (top > 1) return true; + if (bottom < y[2]) bottom = y[2]; + if (bottom < -1) return true; + return false; + } + //this is for checking what item has been tapped on + bool _isBelow(Offset p,List x, List y,Offset v){ + double sign (double hx, double hy, double ix, double iy, double kx, double ky){ + return (hx - kx) * (iy - ky) - (ix - kx) * (hy - ky); + } + double d1, d2, d3; + bool hasNeg, hasPos; + + d1 = sign(p.dx, p.dy ,((1.0+x[0])*v.dx/2), ((1.0-y[0])*v.dy/2), ((1.0+x[1])*v.dx/2), ((1.0-y[1])*v.dy/2)); + d2 = sign(p.dx, p.dy, ((1.0+x[1])*v.dx/2), ((1.0-y[1])*v.dy/2), ((1.0+x[2])*v.dx/2), ((1.0-y[2])*v.dy/2)); + d3 = sign(p.dx, p.dy, ((1.0+x[2])*v.dx/2), ((1.0-y[2])*v.dy/2), ((1.0+x[0])*v.dx/2), ((1.0-y[0])*v.dy/2)); + + hasNeg = (d1 < 0) || (d2 < 0) || (d3 < 0); + hasPos = (d1 > 0) || (d2 > 0) || (d3 > 0); + + return !(hasNeg && hasPos); + } + //painters algorithm sorts triangles that are in the top most z positions + int paintersAlgorithm(Triangle? a, Triangle? b){ + //return b.sumOfZ.compareTo(a.sumOfZ); + if(a == null) return -1; + if(b == null) return -1; + final double az = a.z; + final double bz = b.z; + //return (az-bz).round(); + if (bz > az) return 1; + if (bz < az) return -1; + return 0; + } + + Float64List storage(Vector3 vertices, Matrix4 transform){ + final Vector4 v = Vector4.identity(); + // Conver Vector3 to Vector4 + final Float64List storage3 = vertices.storage; + v.setValues(storage3[0], storage3[1], storage3[2], 1.0); + // apply "model => world => camera => perspective" transform + v.applyMatrix4(transform); + // transform from homonegenous coordinates to the normalized device coordinates, + return v.storage; + } + + List renderObject(RenderMesh renderMesh, Object o, Matrix4 model, Matrix4 view, Matrix4 projection,[bool lightOn = true]) { + if (!o.visiable) return []; + model *= o.transform; + List triangles = []; + final Matrix4 transform = projection*view*model; + + // apply transform and add vertices to renderMesh + final double viewportWidth = camera.viewportWidth; + final double viewportHeight = camera.viewportHeight; + final Offset viewport = Offset(viewportWidth,viewportHeight); + + final Float32List positions = renderMesh.positions; + final Float32List positionsZ = renderMesh.positionsZ; + + final List vertices = o.mesh.vertices; + final List normals = o.mesh.normals; + + final int vertexOffset = renderMesh.vertexCount; + final int vertexCount = vertices.length; + + renderMesh.vertexCount += vertexCount; + + // add faces to renderMesh + final List renderIndices = renderMesh.indices; + final List indices = o.mesh.indices; + final int indexOffset = renderMesh.indexCount; + final int indexCount = indices.length; + final bool culling = o.backfaceCulling; + + //color information + final Int32List renderColors = renderMesh.colors; + final Matrix4 normalTransform = (model.clone()..invert()).transposed(); + final Vector3 viewPosition = camera.position; + final Material material = o.mesh.material; + final List colors = o.mesh.colors; + final int colorValue = (o.mesh.texture != null) ? Color.fromARGB(0, 0, 0, 0).value : toColor(o.mesh.material.diffuse, o.mesh.material.opacity).value; + + //texture information + final Float32List renderTexcoords = renderMesh.texcoords; + final int? imageWidth = o.mesh.texture == null?null:o.mesh.textureRect.width.toInt(); + final int? imageHeight = o.mesh.texture == null?null:o.mesh.textureRect.height.toInt(); + final double? imageLeft = o.mesh.texture == null?null:o.mesh.textureRect.left; + final double? imageTop = o.mesh.texture == null?null:o.mesh.textureRect.top; + final List? texcoords = o.mesh.texture == null?null:o.mesh.texcoords; + + for (int i = 0; i < indexCount; i++){ + final Triangle p = indices[i]; + List vertexes = []; + List x = []; + List y = []; + List z = []; + + List xp = []; + List yp = []; + + double sumOfZ = 0; + + for(int j = 0; j < p.vertexes.length;j++){ + final vertex = vertexOffset + p.vertexes[j]; + vertexes.add(vertex); + + Float64List storage4 = storage(vertices[p.vertexes[j]], transform); + double w = storage4.length > 3?storage4[3]:1.0; + double posx = storage4.length > 3?storage4[0]/w:storage4[0]/(viewportWidth / 2)-1.0; + double posy = storage4.length > 3?storage4[1]/w:-(storage4[1]/(viewportHeight / 2)-1.0); + positionsZ[vertex] = storage4.length > 3?storage4[2]/w:storage4[2]/(camera.far/2)+0.1; + x.add(posx); + y.add(posy); + z.add(positionsZ[vertex]); + positions[vertex * 2] = storage4.length > 3?((1.0 + posx) * viewportWidth / 2):storage4[0]; + positions[vertex * 2 + 1] = storage4.length > 3?((1.0 - posy) * viewportHeight / 2):storage4[1]; + xp.add(positions[vertex * 2]); + yp.add(positions[vertex * 2+1]); + sumOfZ += positionsZ[vertex]; + + if(o.lighting && lightOn){ + final Vector3 a = Vector3.zero(); + final Vector3 an = Vector3.zero(); + + a.setFrom(vertices[p.vertexes[j]]); + + final Vector3 normal = a + ..applyMatrix4(normalTransform) + ..normalize(); + + if(normals.isNotEmpty) + an + ..setFrom(normals[p.normals![j]]) + ..applyMatrix4(normalTransform) + ..normalize(); + else + an.setFrom(normal); + + a..applyMatrix4(normalTransform); + Color color = light.shading(viewPosition, a, an, material); + renderColors[vertex] = color.value; + } + else { + if (vertexCount != o.mesh.colors.length) + renderColors[vertex] = colorValue; + else + renderColors[vertex] = colors[i].value; + } + + if (o.mesh.texture != null && o.mesh.texcoords.length == vertexCount && showTexture) { + final Offset t = texcoords![p.texture![j]]; + final double x = t.dx * imageWidth! + imageLeft!; + final double y = (1.0 - t.dy) * imageHeight! + imageTop!; + renderTexcoords[vertex * 2] = x; + renderTexcoords[vertex * 2 + 1] = y; + } + else { + renderTexcoords[vertex * 2] = 0; + renderTexcoords[vertex * 2 + 1] = 0; + } + } + + final bool isFF = !_isFrontFace(x,y,z); + + if(!culling || isFF || xray){ + bool showFace = false; + if(xray || o.xray || (showWireframe || showVerticies) && isFF) + showFace = true; + if (!_isClippedFace(x,y,z)) { + double zHeight = sumOfZ; + renderIndices[indexOffset + i] = Triangle(vertexes,null,null,zHeight,showFace); + triangles.add(renderIndices[indexOffset + i]!); + if(tapLocation != null && _isBelow(tapLocation!,x,y,viewport)){ + if(_currentSum == null){ + _currentSum = sumOfZ; + _objectTappedOn = o.name; + } + else if(_currentSum! > sumOfZ){ + _currentSum = sumOfZ; + _objectTappedOn = o.name; + } + } + if(hoverLocation != null && _isBelow(hoverLocation!,x,y,viewport)){ + if(_currentHoverSum == null){ + _currentHoverSum = sumOfZ; + _objectHoveringOn = o.name; + } + else if(_currentHoverSum! > sumOfZ){ + _currentHoverSum = sumOfZ; + _objectHoveringOn = o.name; + } + } + } + } + } + renderMesh.indexCount += indexCount; + + // render children + List children = o.children; + for (int i = 0; i < children.length; i++) + triangles += renderObject(renderMesh, children[i], model, view, projection, lightOn); + + return triangles; + } + void render(Canvas canvas, Size size) { + _objectHoveringOn = null; + // check if texture needs to update + if (_needsUpdateTexture){ + _needsUpdateTexture = false; + _updateTexture(); + } + // create render mesh from objects + final renderMesh = makeRenderMesh(); + final List renderPolys = renderObject(renderMesh, world, Matrix4.identity(), camera.lookAtMatrix, camera.projectionMatrix); + final int indexCount = renderPolys.length; + final Uint16List indices = Uint16List(indexCount * 3); + + renderPolys.sort((Triangle? a, Triangle? b){ + return paintersAlgorithm(a,b); + }); + + for (int i = 0; i < indexCount; i++) { + if(renderPolys[i] != null){ + final int index0 = i * 3; + final int index1 = index0 + 1; + final int index2 = index0 + 2; + final Triangle triangle = renderPolys[i]!; + + indices[index0] = triangle.vertexes[0]; + indices[index1] = triangle.vertexes[1]; + indices[index2] = triangle.vertexes[2]; + } + } + + if((!showVerticies && !showWireframe) || xray){ + _drwaVert( + canvas, + renderMesh.positions, + renderMesh.texcoords, + renderMesh.colors, + indices, + renderMesh.texture + ); + } + if(showVerticies || showWireframe){ + int k =0 ; + for (int j = 0; j < indices.length; j=j+3) { + final Float32List temp = Float32List(6); + temp[0] = renderMesh.positions[indices[j]*2]; + temp[1] = renderMesh.positions[indices[j]*2+1]; + temp[2] = renderMesh.positions[indices[j+1]*2]; + temp[3] = renderMesh.positions[indices[j+1]*2+1]; + temp[4] = renderMesh.positions[indices[j+2]*2]; + temp[5] = renderMesh.positions[indices[j+2]*2+1]; + + if(!xray){ + final Float32List? tex = (renderMesh.texture == null)?null:Float32List(6); + final Int32List colors = Int32List(3); + colors[0] = renderMesh.colors[indices[j]]; + colors[1] = renderMesh.colors[indices[j+1]]; + colors[2] = renderMesh.colors[indices[j+2]]; + + if(renderMesh.texture != null){ + tex![0] = renderMesh.texcoords[indices[j]*2]; + tex[1] = renderMesh.texcoords[indices[j]*2+1]; + tex[2] = renderMesh.texcoords[indices[j+1]*2]; + tex[3] = renderMesh.texcoords[indices[j+1]*2+1]; + tex[4] = renderMesh.texcoords[indices[j+2]*2]; + tex[5] = renderMesh.texcoords[indices[j+2]*2+1]; + } + _drwaVert( + canvas, + temp, + tex, + colors, + null, + renderMesh.texture + ); + } + if(showWireframe){ + final Paint paint = new Paint() + ..isAntiAlias = true + ..color = Color(0xff000000) + ..style = PaintingStyle.fill + ..strokeWidth = 0.5 + ..blendMode = blendMode; + + final Float32List temp2 = Float32List(8); + + temp2[0] = renderMesh.positions[indices[j]*2]; + temp2[1] = renderMesh.positions[indices[j]*2+1]; + temp2[2] = renderMesh.positions[indices[j+1]*2]; + temp2[3] = renderMesh.positions[indices[j+1]*2+1]; + temp2[4] = renderMesh.positions[indices[j+2]*2]; + temp2[5] = renderMesh.positions[indices[j+2]*2+1]; + temp2[6] = renderMesh.positions[indices[j]*2]; + temp2[7] = renderMesh.positions[indices[j]*2+1]; + + canvas.drawRawPoints(PointMode.polygon, temp2, paint); + } + if(showVerticies){ + final Paint paint = new Paint() + ..isAntiAlias = true + ..color = Color(0xffed9121) + ..style = PaintingStyle.fill + ..strokeWidth = 3 + ..blendMode = blendMode; + + canvas.drawRawPoints(PointMode.points, temp, paint); + } + k++; + } + } + } + + void _drwaVert(Canvas canvas, Float32List positions, Float32List? texCoord,Int32List colors, Uint16List? indices, Image? texture){ + final vertices = Vertices.raw( + VertexMode.triangles, + positions, + textureCoordinates: texCoord, + colors: colors, + indices: indices, + ); + + final paint = Paint() + ..blendMode = xray?BlendMode.screen:blendMode; + + if (texture != null && showTexture) { + final matrix4 = Matrix4.identity(); + final shader = ImageShader(texture, TileMode.clamp, TileMode.clamp, matrix4.storage, filterQuality: FilterQuality.high); + paint.shader = shader; + } + + canvas.drawVertices(vertices, xray?BlendMode.modulate:textureBlendMode, paint); + } + void objectCreated(Object object) { + updateTexture(); + if (_onObjectCreated != null) _onObjectCreated!(object); + } + void update() { + if (_onUpdate != null) _onUpdate!(); + } + void _getAllMesh(List meshes, Object object) { + meshes.add(object.mesh); + final List children = object.children; + for (int i = 0; i < children.length; i++) { + _getAllMesh(meshes, children[i]); + } + } + /// Mark needs update texture + void _updateTexture() async { + final meshes = []; + _getAllMesh(meshes, world); + texture = await packingTexture(meshes); + update(); + } + /// Mark update tap loaction + void updateTapLocation(Offset details) { + _objectTappedOn = null; + tapLocation = details; + update(); + } + /// Mark update hover loaction + void updateHoverLocation(Offset details) { + hoverLocation = details; + update(); + } + /// Mark needs update texture + void updateTexture() { + _needsUpdateTexture = true; + update(); + } + Future generateImage(Size size) async { + final recorder = PictureRecorder(); + final canvas = Canvas( + recorder, + Rect.fromLTWH(0,0,size.width, size.height) + ); + // create render mesh from objects + final renderMesh = makeRenderMesh(); + final List renderPolys = renderObject(renderMesh, world, Matrix4.identity(), camera.lookAtMatrix, camera.projectionMatrix); + final int indexCount = renderPolys.length; + final Uint16List indices = Uint16List(indexCount * 3); + + renderPolys.sort((Triangle? a, Triangle? b){ + return paintersAlgorithm(a,b); + }); + + for (int i = 0; i < indexCount; i++) { + if(renderPolys[i] != null){ + final int index0 = i * 3; + final int index1 = index0 + 1; + final int index2 = index0 + 2; + final Triangle triangle = renderPolys[i]!; + + indices[index0] = triangle.vertexes[0]; + indices[index1] = triangle.vertexes[1]; + indices[index2] = triangle.vertexes[2]; + } + } + _drwaVert( + canvas, + renderMesh.positions, + renderMesh.texcoords, + renderMesh.colors, + indices, + renderMesh.texture + ); + return await recorder.endRecording().toImage(size.width.ceil(), size.height.ceil()); + } +} + +class RenderMesh { + RenderMesh(int vertexCount, int faceCount) { + positions = Float32List(vertexCount * 2); + positionsZ = Float32List(vertexCount); + texcoords = Float32List(vertexCount * 2); + colors = Int32List(vertexCount); + indices = List.filled(faceCount, null); + } + late Float32List positions; + late Float32List positionsZ; + late Float32List texcoords; + late Int32List colors; + late List indices; + Image? texture; + int vertexCount = 0; + int indexCount = 0; +} diff --git a/lib/src/camera.dart b/lib/src/camera.dart deleted file mode 100755 index fbd564f..0000000 --- a/lib/src/camera.dart +++ /dev/null @@ -1,65 +0,0 @@ -import 'dart:math' as math; -import 'package:vector_math/vector_math_64.dart'; - -class Camera { - Camera({ - Vector3? position, - Vector3? target, - Vector3? up, - this.fov = 60.0, - this.near = 0.1, - this.far = 1000, - this.zoom = 1.0, - this.viewportWidth = 100.0, - this.viewportHeight = 100.0, - }) { - if (position != null) position.copyInto(this.position); - if (target != null) target.copyInto(this.target); - if (up != null) up.copyInto(this.up); - } - - final Vector3 position = Vector3(0.0, 0.0, -10.0); - final Vector3 target = Vector3(0.0, 0.0, 0.0); - final Vector3 up = Vector3(0.0, 1.0, 0.0); - double fov; - double near; - double far; - double zoom; - double viewportWidth; - double viewportHeight; - - double get aspectRatio => viewportWidth / viewportHeight; - - Matrix4 get lookAtMatrix { - return makeViewMatrix(position, target, up); - } - - Matrix4 get projectionMatrix { - final double top = near * math.tan(radians(fov) / 2.0) / zoom; - final double bottom = -top; - final double right = top * aspectRatio; - final double left = -right; - return makeFrustumMatrix(left, right, bottom, top, near, far); - } - - void trackBall(Vector2 from, Vector2 to, [double sensitivity = 1.0]) { - final double x = -(to.x - from.x) * sensitivity / (viewportWidth * 0.5); - final double y = (to.y - from.y) * sensitivity / (viewportHeight * 0.5); - Vector2 delta = Vector2(x, y); - Vector3 moveDirection = Vector3(delta.x, delta.y, 0); - final double angle = moveDirection.length; - if (angle > 0) { - Vector3 _eye = position - target; - Vector3 eyeDirection = _eye.normalized(); - Vector3 upDirection = up.normalized(); - Vector3 sidewaysDirection = upDirection.cross(eyeDirection).normalized(); - upDirection.scale(delta.y); - sidewaysDirection.scale(delta.x); - moveDirection = upDirection + sidewaysDirection; - Vector3 axis = moveDirection.cross(_eye).normalized(); - Quaternion q = Quaternion.axisAngle(axis, angle); - q.rotate(position); - q.rotate(up); - } - } -} diff --git a/lib/src/mesh.dart b/lib/src/mesh.dart deleted file mode 100755 index 46c67b8..0000000 --- a/lib/src/mesh.dart +++ /dev/null @@ -1,460 +0,0 @@ -import 'dart:async'; -import 'dart:collection'; -import 'dart:io'; -import 'dart:typed_data'; -import 'dart:ui'; -import 'dart:math' as math; -import 'package:vector_math/vector_math_64.dart'; -import 'package:flutter/services.dart' show rootBundle; -import 'package:path/path.dart' as path; -import 'material.dart'; - -class Polygon { - Polygon(this.vertex0, this.vertex1, this.vertex2, [this.sumOfZ = 0]); - int vertex0; - int vertex1; - int vertex2; - double sumOfZ; - List copyToArray() => [vertex0, vertex1, vertex2]; - void copyFromArray(List array, [int offset = 0]) { - final int i = offset; - vertex0 = array[i]; - vertex1 = array[i + 1]; - vertex2 = array[i + 2]; - } -} - -// wolcy97: 2020-01-31 -int _getVertexIndex(String vIndex) { - if (int.parse(vIndex) < 0) - return int.parse(vIndex) + 1; - else - return int.parse(vIndex) - 1; -} - -class Mesh { - Mesh({List? vertices, List? texcoords, List? indices, List? colors, this.texture, Rect? textureRect, this.texturePath, Material? material, this.name}) { - this.vertices = vertices ?? []; - this.texcoords = texcoords ?? []; - this.colors = colors ?? []; - this.indices = indices ?? []; - this.material = material ?? Material(); - this.textureRect = textureRect ?? Rect.fromLTWH(0, 0, texture?.width.toDouble() ?? 1.0, texture?.height.toDouble() ?? 1.0); - } - late List vertices; - late List texcoords; - late List colors; - late List indices; - Image? texture; - late Rect textureRect; - String? texturePath; - late Material material; - String? name; -} - -/// Loading mesh from Wavefront's object file (.obj). -/// Reference:http://paulbourke.net/dataformats/obj/ -/// -Future> loadObj(String fileName, bool normalized, {bool isAsset = true}) async { - Map? materials; - List vertices = []; - List texcoords = []; - List vertexIndices = []; - List textureIndices = []; - List elementNames = []; - List elementMaterials = []; - List elementOffsets = []; - String? materialName; - String? objectlName; - String? groupName; - String basePath = path.dirname(fileName); - - var data; - if (isAsset) { - // load obj data from asset. - data = await rootBundle.loadString(fileName); - } else { - // load obj data from file. - data = await File(fileName).readAsString(); - } - final lines = data.split('\n'); - for (var line in lines) { - List parts = line.trim().split(RegExp(r"\s+")); - - switch (parts[0]) { - case 'mtllib': - // load material library file. eg: mtllib master.mtl - final mtlFileName = path.join(basePath, parts[1]); - materials = await loadMtl(mtlFileName, isAsset: isAsset); - break; - case 'usemtl': - // material name from material library. eg: usemtl red - if (parts.length >= 2) materialName = parts[1]; - // create a new mesh element - final String elementName = objectlName ?? groupName ?? materialName ?? ''; - elementNames.add(elementName); - elementMaterials.add(materialName ?? ''); - elementOffsets.add(vertexIndices.length); - break; - case 'g': - // the name for the group. eg: g front cube - if (parts.length >= 2) groupName = parts[1]; - break; - case 'o': - // the user-defined object name. eg: o cube - if (parts.length >= 2) objectlName = parts[1]; - break; - case 'v': - // a geometric vertex and its x y z coordinates. eg: v 0.000000 2.000000 0.000000 - if (parts.length >= 4) { - final v = Vector3(double.parse(parts[1]), double.parse(parts[2]), double.parse(parts[3])); - vertices.add(v); - } - break; - case 'vt': - // eg: vt 0.000000 0.000000 - if (parts.length >= 3) { - double x = double.parse(parts[1]); - double y = double.parse(parts[2]); - if (x < 0 || x > 1.0) x %= 1.0; - if (y < 0 || y > 1.0) y %= 1.0; - final vt = Offset(x, y); - texcoords.add(vt); - } - break; - case 'f': - if (parts.length >= 4) { - // eg: f 1/1 2/2 3/3 - final List p1 = parts[1].split('/'); - final List p2 = parts[2].split('/'); - final List p3 = parts[3].split('/'); - Polygon vi = Polygon(_getVertexIndex(p1[0]), _getVertexIndex(p2[0]), _getVertexIndex(p3[0])); - vertexIndices.add(vi); - Polygon ti = Polygon(0, 0, 0); - if ((p1.length >= 2 && p1[1] != '') && (p2.length >= 2 && p2[1] != '') && (p3.length >= 2 && p3[1] != '')) { - ti = Polygon(_getVertexIndex(p1[1]), _getVertexIndex(p2[1]), _getVertexIndex(p3[1])); - textureIndices.add(ti); - } - // polygon to triangle. eg: f 1/1 2/2 3/3 4/4 ==> f 1/1 2/2 3/3 + f 1/1 3/3 4/4 - for (int i = 4; i < parts.length; i++) { - final List p3 = parts[i].split('/'); - vi = Polygon(vi.vertex0, vi.vertex2, _getVertexIndex(p3[0])); - vertexIndices.add(vi); - if (p3.length >= 2 && p3[1] != '') { - ti = Polygon(ti.vertex0, ti.vertex2, _getVertexIndex(p3[1])); - textureIndices.add(ti); - } - } - } - break; - default: - } - } - final meshes = await _buildMesh( - vertices, - texcoords, - vertexIndices, - textureIndices, - materials, - elementNames, - elementMaterials, - elementOffsets, - basePath, - isAsset, - ); - return normalized ? normalizeMesh(meshes) : meshes; -} - -/// Load the texture image file and rebuild vertices and texcoords to keep the same length. -Future> _buildMesh( - List vertices, - List texcoords, - List vertexIndices, - List textureIndices, - Map? materials, - List elementNames, - List elementMaterials, - List elementOffsets, - String basePath, - bool isAsset, -) async { - if (elementOffsets.length == 0) { - elementNames.add(''); - elementMaterials.add(''); - elementOffsets.add(0); - } - - final List meshes = []; - for (int index = 0; index < elementOffsets.length; index++) { - int faceStart = elementOffsets[index]; - int faceEnd = (index + 1 < elementOffsets.length) ? elementOffsets[index + 1] : vertexIndices.length; - - var newVertices = []; - var newTexcoords = []; - var newIndices = []; - var newTextureIndices = []; - - if (faceStart == 0 && faceEnd == vertexIndices.length) { - newVertices = vertices; - newTexcoords = texcoords; - newIndices = vertexIndices; - newTextureIndices = textureIndices; - } else { - _copyRangeIndices(faceStart, faceEnd, vertices, vertexIndices, newVertices, newIndices); - _copyRangeIndices(faceStart, faceEnd, texcoords, textureIndices, newTexcoords, newTextureIndices); - } - - // load texture image from assets. - final Material? material = (materials != null) ? materials[elementMaterials[index]] : null; - final MapEntry? imageEntry = await loadTexture(material, basePath); - - // fix zero texture area - if (imageEntry != null) { - _remapZeroAreaUVs(newTexcoords, newTextureIndices, imageEntry.value.width.toDouble(), imageEntry.value.height.toDouble()); - } - - // If a vertex has multiple different texture coordinates, - // then create a vertex for each texture coordinate. - _rebuildVertices(newVertices, newTexcoords, newIndices, newTextureIndices); - - final Mesh mesh = Mesh( - vertices: newVertices, - texcoords: newTexcoords, - indices: newIndices, - texture: imageEntry?.value, - texturePath: imageEntry?.key, - material: material, - name: elementNames[index], - ); - meshes.add(mesh); - } - - return meshes; -} - -/// Copy a mesh from the obj -void _copyRangeIndices(int start, int end, List fromVertices, List fromIndices, List toVertices, List toIndices) { - if (start < 0 || end > fromIndices.length) return; - final faceMap = List.filled(fromVertices.length, null); - final List face = List.filled(3, 0); - for (int i = start; i < end; i++) { - final List vi = fromIndices[i].copyToArray(); - for (int j = 0; j < vi.length; j++) { - int index = vi[j]; - if (index < 0) index = fromVertices.length - 1 + index; - int? v = faceMap[index]; - if (v == null) { - face[j] = toVertices.length; - faceMap[index] = toVertices.length; - toVertices.add(fromVertices[index]); - } else { - face[j] = v; - } - } - toIndices.add(Polygon(face[0], face[1], face[2])); - } -} - -/// Remap the UVs when the texture area is zero. -void _remapZeroAreaUVs(List texcoords, List textureIndices, double textureWidth, double textureHeight) { - for (int index = 0; index < textureIndices.length; index++) { - Polygon p = textureIndices[index]; - if (texcoords[p.vertex0] == texcoords[p.vertex1] && texcoords[p.vertex0] == texcoords[p.vertex2]) { - double u = (texcoords[p.vertex0].dx * textureWidth).floorToDouble(); - double v = (texcoords[p.vertex0].dy * textureHeight).floorToDouble(); - double u1 = (u + 1.0) / textureWidth; - double v1 = (v + 1.0) / textureHeight; - u /= textureWidth; - v /= textureHeight; - int texindex = texcoords.length; - texcoords.add(Offset(u, v)); - texcoords.add(Offset(u, v1)); - texcoords.add(Offset(u1, v)); - p.vertex0 = texindex; - p.vertex1 = texindex + 1; - p.vertex2 = texindex + 2; - } - } -} - -/// Rebuild vertices and texture coordinates to keep the same length. -void _rebuildVertices(List vertices, List texcoords, List vertexIndices, List textureIndices) { - int texcoordsCount = texcoords.length; - if (texcoordsCount == 0) return; - List newVertices = []; - List newTexcoords = []; - HashMap indexMap = HashMap(); - for (int i = 0; i < vertexIndices.length; i++) { - List vi = vertexIndices[i].copyToArray(); - List ti = textureIndices[i].copyToArray(); - List face = List.filled(3, 0); - for (int j = 0; j < vi.length; j++) { - int vIndex = vi[j]; - int tIndex = ti[j]; - int vtIndex = vIndex * texcoordsCount + tIndex; - int? v = indexMap[vtIndex]; - if (v == null) { - face[j] = newVertices.length; - indexMap[vtIndex] = face[j]; - newVertices.add(vertices[vIndex].clone()); - newTexcoords.add(texcoords[tIndex]); - } else { - face[j] = v; - } - } - vertexIndices[i].copyFromArray(face); - } - vertices - ..clear() - ..addAll(newVertices); - texcoords - ..clear() - ..addAll(newTexcoords); -} - -/// Calculate normal vector -Vector3 normalVector(Vector3 a, Vector3 b, Vector3 c) { - return (b - a).cross(c - a).normalized(); -} - -/// Scale the model size to 1 -List normalizeMesh(List meshes) { - double maxLength = 0; - for (Mesh mesh in meshes) { - final List vertices = mesh.vertices; - for (int i = 0; i < vertices.length; i++) { - final storage = vertices[i].storage; - final double x = storage[0]; - final double y = storage[1]; - final double z = storage[2]; - if (x > maxLength) maxLength = x; - if (y > maxLength) maxLength = y; - if (z > maxLength) maxLength = z; - } - } - - maxLength = 0.5 / maxLength; - for (Mesh mesh in meshes) { - final List vertices = mesh.vertices; - for (int i = 0; i < vertices.length; i++) { - vertices[i].scale(maxLength); - } - } - return meshes; -} - -// Packing all textures to a single image. -/// Reference:https://observablehq.com/@mourner/simple-rectangle-packing -/// -Future packingTexture(List meshes) async { - // generate a key for a mesh. - String getMeshKey(Mesh mesh) { - if (mesh.texture != null) return mesh.texturePath ?? '' + mesh.textureRect.toString(); - return toColor(mesh.material.diffuse.bgr).toString(); - } - - // only pack the different textures. - final allMeshes = meshes; - final textures = Map(); - for (Mesh mesh in allMeshes) { - if (mesh.vertices.length == 0) continue; - final String key = getMeshKey(mesh); - textures.putIfAbsent(key, () => mesh); - } - // if there is only one texture then return the texture directly. - meshes = textures.values.toList(); - if (meshes.length == 1) return meshes[0].texture; - if (meshes.length == 0) return null; - - // packing - double area = 0; - double maxWidth = 0; - for (Mesh mesh in meshes) { - area += mesh.textureRect.width * mesh.textureRect.height; - maxWidth = math.max(maxWidth, mesh.textureRect.width); - } - meshes.sort((Mesh a, Mesh b) => b.textureRect.height.compareTo(a.textureRect.height)); - - final double startWidth = math.max(math.sqrt(area / 0.95), maxWidth); - final List spaces = []; - spaces.add(Rect.fromLTWH(0, 0, startWidth, double.infinity)); - - for (Mesh mesh in meshes) { - for (int i = spaces.length - 1; i >= 0; i--) { - final Rect block = mesh.textureRect; - final Rect space = spaces[i]; - if (block.width > space.width || block.height > space.height) continue; - mesh.textureRect = Rect.fromLTWH(space.left, space.top, block.width, block.height); - if (block.width == space.width && block.height == space.height) { - final Rect last = spaces.removeLast(); - if (i < spaces.length) spaces[i] = last; - } else if (block.height == space.height) { - spaces[i] = Rect.fromLTWH(space.left + block.width, space.top, space.width - block.width, space.height); - } else if (block.width == space.width) { - spaces[i] = Rect.fromLTWH(space.left, space.top + block.height, space.width, space.height - block.height); - } else { - spaces.add(Rect.fromLTWH(space.left + block.width, space.top, space.width - block.width, block.height)); - spaces[i] = Rect.fromLTWH(space.left, space.top + block.height, space.width, space.height - block.height); - } - break; - } - } - - // get the packed texture size - int textureWidth = 0; - int textureHeight = 0; - for (Mesh mesh in meshes) { - final Rect box = mesh.textureRect; - if (textureWidth < box.left + box.width) textureWidth = (box.left + box.width).ceil(); - if (textureHeight < box.top + box.height) textureHeight = (box.top + box.height).ceil(); - } - - // get the pixels from mesh.texture - final texture = Uint32List(textureWidth * textureHeight); - for (Mesh mesh in meshes) { - final int imageWidth = mesh.textureRect.width.toInt(); - final int imageHeight = mesh.textureRect.height.toInt(); - Uint32List pixels; - if (mesh.texture != null) { - final Uint32List data = await getImagePixels(mesh.texture!); - pixels = data.buffer.asUint32List(); - } else { - final int length = imageWidth * imageHeight; - pixels = Uint32List(length); - // color mode then set texture to transparent. - final int color = 0; //mesh.material == null ? 0 : toColor(mesh.material.kd.bgr, mesh.material.d).value; - for (int i = 0; i < length; i++) { - pixels[i] = color; - } - } - - // break if the mesh.texture has changed - if (mesh.textureRect.right > textureWidth || mesh.textureRect.bottom > textureHeight) break; - - // copy pixels from mesh.texture to texture - int fromIndex = 0; - int toIndex = mesh.textureRect.top.toInt() * textureWidth + mesh.textureRect.left.toInt(); - for (int y = 0; y < imageHeight; y++) { - for (int x = 0; x < imageWidth; x++) { - texture[toIndex + x] = pixels[fromIndex + x]; - } - fromIndex += imageWidth; - toIndex += textureWidth; - } - } - - // apply the packed textureRect to all meshes. - for (Mesh mesh in allMeshes) { - final String? key = getMeshKey(mesh); - if (key != null) { - final Rect? rect = textures[key]?.textureRect; - if (rect != null) mesh.textureRect = rect; - } - } - - final c = Completer(); - decodeImageFromPixels(texture.buffer.asUint8List(), textureWidth, textureHeight, PixelFormat.rgba8888, (image) { - c.complete(image); - }); - return c.future; -} diff --git a/lib/src/object.dart b/lib/src/object.dart deleted file mode 100755 index 25ff215..0000000 --- a/lib/src/object.dart +++ /dev/null @@ -1,122 +0,0 @@ -import 'dart:ui'; -import 'package:vector_math/vector_math_64.dart'; -import 'scene.dart'; -import 'mesh.dart'; - -class Object { - Object({ - Vector3? position, - Vector3? rotation, - Vector3? scale, - this.name, - Mesh? mesh, - Scene? scene, - this.parent, - List? children, - this.backfaceCulling = true, - this.lighting = false, - this.visiable = true, - bool normalized = true, - String? fileName, - bool isAsset = true, - }) { - if (position != null) position.copyInto(this.position); - if (rotation != null) rotation.copyInto(this.rotation); - if (scale != null) scale.copyInto(this.scale); - updateTransform(); - this.mesh = mesh ?? Mesh(); - this.children = children ?? []; - for (Object child in this.children) { - child.parent = this; - } - this.scene = scene; - - // load mesh from obj file - if (fileName != null) { - loadObj(fileName, normalized, isAsset: isAsset).then((List meshes) { - if (meshes.length == 1) { - this.mesh = meshes[0]; - } else if (meshes.length > 1) { - // multiple objects - for (Mesh mesh in meshes) { - add(Object(name: mesh.name, mesh: mesh, backfaceCulling: backfaceCulling, lighting: lighting)); - } - } - this.scene?.objectCreated(this); - }); - } else { - this.scene?.objectCreated(this); - } - } - - /// The local position of this object relative to the parent. Default is Vector3(0.0, 0.0, 0.0). updateTransform after you change the value. - final Vector3 position = Vector3(0.0, 0.0, 0.0); - - /// The local rotation of this object relative to the parent. Default is Vector3(0.0, 0.0, 0.0). updateTransform after you change the value. - final Vector3 rotation = Vector3(0.0, 0.0, 0.0); - - /// The local scale of this object relative to the parent. Default is Vector3(1.0, 1.0, 1.0). updateTransform after you change the value. - final Vector3 scale = Vector3(1.0, 1.0, 1.0); - - /// The name of this object. - String? name; - - /// The scene of this object. - Scene? _scene; - Scene? get scene => _scene; - set scene(Scene? value) { - _scene = value; - for (Object child in children) { - child.scene = value; - } - } - - /// The parent of this object. - Object? parent; - - /// The children of this object. - late List children; - - /// The mesh of this object - late Mesh mesh; - - /// The backface will be culled without rendering. - bool backfaceCulling; - - /// Enable basic lighting, default to false. - bool lighting; - - /// Is this object visiable. - bool visiable; - - /// The transformation of the object in the scene, including position, rotation, and scaling. - final Matrix4 transform = Matrix4.identity(); - - void updateTransform() { - final Matrix4 m = Matrix4.compose(position, Quaternion.euler(radians(rotation.y), radians(rotation.x), radians(rotation.z)), scale); - transform.setFrom(m); - } - - /// Add a child - void add(Object object) { - assert(object != this); - object.scene = scene; - object.parent = this; - children.add(object); - } - - /// Remove a child - void remove(Object object) { - children.remove(object); - } - - /// Find a child matching the name - Object? find(Pattern name) { - for (Object child in children) { - if (child.name != null && (name as RegExp).hasMatch(child.name!)) return child; - final Object? result = child.find(name); - if (result != null) return result; - } - return null; - } -} diff --git a/lib/src/scene.dart b/lib/src/scene.dart deleted file mode 100755 index 35c76fe..0000000 --- a/lib/src/scene.dart +++ /dev/null @@ -1,347 +0,0 @@ -import 'dart:ui'; -import 'dart:typed_data'; -import 'package:flutter_cube/flutter_cube.dart'; -import 'package:vector_math/vector_math_64.dart'; -import 'object.dart'; -import 'camera.dart'; -import 'mesh.dart'; -import 'material.dart'; -import 'light.dart'; - -typedef ObjectCreatedCallback = void Function(Object object); - -class Scene { - Scene({VoidCallback? onUpdate, ObjectCreatedCallback? onObjectCreated}) { - this._onUpdate = onUpdate; - this._onObjectCreated = onObjectCreated; - world = Object(scene: this); - } - - Light light = Light(); - Camera camera = Camera(); - late Object world; - Image? texture; - BlendMode blendMode = BlendMode.srcOver; - BlendMode textureBlendMode = BlendMode.srcOver; - VoidCallback? _onUpdate; - ObjectCreatedCallback? _onObjectCreated; - int vertexCount = 0; - int faceCount = 0; - bool _needsUpdateTexture = false; - - // calculate the total number of vertices and faces - void _calculateVertices(Object o) { - vertexCount += o.mesh.vertices.length; - faceCount += o.mesh.indices.length; - final List children = o.children; - for (int i = 0; i < children.length; i++) { - _calculateVertices(children[i]); - } - } - - RenderMesh _makeRenderMesh() { - vertexCount = 0; - faceCount = 0; - _calculateVertices(world); - final renderMesh = RenderMesh(vertexCount, faceCount); - renderMesh.texture = texture; - return renderMesh; - } - - bool _isBackFace(double ax, double ay, double bx, double by, double cx, double cy) { - double area = (bx - ax) * (cy - ay) - (cx - ax) * (by - ay); - return area <= 0; - } - - bool _isClippedFace(double ax, double ay, double az, double bx, double by, double bz, double cx, double cy, double cz) { - // clip if at least one vertex is outside the near and far plane - if (az < 0 || az > 1 || bz < 0 || bz > 1 || cz < 0 || cz > 1) return true; - // clip if the face's bounding box does not intersect the viewport - double left; - double right; - if (ax < bx) { - left = ax; - right = bx; - } else { - left = bx; - right = ax; - } - if (left > cx) left = cx; - if (left > 1) return true; - if (right < cx) right = cx; - if (right < -1) return true; - - double top; - double bottom; - if (ay < by) { - top = ay; - bottom = by; - } else { - top = by; - bottom = ay; - } - if (top > cy) top = cy; - if (top > 1) return true; - if (bottom < cy) bottom = cy; - if (bottom < -1) return true; - return false; - } - - void _renderObject(RenderMesh renderMesh, Object o, Matrix4 model, Matrix4 view, Matrix4 projection) { - if (!o.visiable) return; - model *= o.transform; - final Matrix4 transform = projection * view * model; - - // apply transform and add vertices to renderMesh - final double viewportWidth = camera.viewportWidth; - final double viewportHeight = camera.viewportHeight; - final Float32List positions = renderMesh.positions; - final Float32List positionsZ = renderMesh.positionsZ; - final List vertices = o.mesh.vertices; - final int vertexOffset = renderMesh.vertexCount; - final int vertexCount = vertices.length; - final Vector4 v = Vector4.identity(); - for (int i = 0; i < vertexCount; i++) { - // Conver Vector3 to Vector4 - final Float64List storage3 = vertices[i].storage; - v.setValues(storage3[0], storage3[1], storage3[2], 1.0); - // apply "model => world => camera => perspective" transform - v.applyMatrix4(transform); - // transform from homonegenous coordinates to the normalized device coordinates, - final int xIndex = (vertexOffset + i) * 2; - final int yIndex = xIndex + 1; - final Float64List storage4 = v.storage; - final double w = storage4[3]; //v.w; - positions[xIndex] = storage4[0] / w; //v.x; - positions[yIndex] = storage4[1] / w; //v.y; - positionsZ[vertexOffset + i] = storage4[2] / w; //v.z; - } - renderMesh.vertexCount += vertexCount; - - // add faces to renderMesh - final List renderIndices = renderMesh.indices; - final List indices = o.mesh.indices; - final int indexOffset = renderMesh.indexCount; - final int indexCount = indices.length; - final bool culling = o.backfaceCulling; - for (int i = 0; i < indexCount; i++) { - final Polygon p = indices[i]; - final int vertex0 = vertexOffset + p.vertex0; - final int vertex1 = vertexOffset + p.vertex1; - final int vertex2 = vertexOffset + p.vertex2; - final double ax = positions[vertex0 * 2]; - final double ay = positions[vertex0 * 2 + 1]; - final double az = positionsZ[vertex0]; - final double bx = positions[vertex1 * 2]; - final double by = positions[vertex1 * 2 + 1]; - final double bz = positionsZ[vertex1]; - final double cx = positions[vertex2 * 2]; - final double cy = positions[vertex2 * 2 + 1]; - final double cz = positionsZ[vertex2]; - if (!culling || !_isBackFace(ax, ay, bx, by, cx, cy)) { - if (!_isClippedFace(ax, ay, az, bx, by, bz, cx, cy, cz)) { - final double sumOfZ = az + bz + cz; - renderIndices[indexOffset + i] = Polygon(vertex0, vertex1, vertex2, sumOfZ); - } - } - } - renderMesh.indexCount += indexCount; - - if (o.lighting) { - final Int32List renderColors = renderMesh.colors; - final Matrix4 vertexTransform = model; - final Matrix4 normalTransform = (model.clone()..invert()).transposed(); - final Vector3 viewPosition = camera.position; - final Material material = o.mesh.material; - final Vector3 a = Vector3.zero(); - final Vector3 b = Vector3.zero(); - final Vector3 c = Vector3.zero(); - - for (int i = 0; i < indexCount; i++) { - // check if the face is clipped - if (renderIndices[indexOffset + i] != null) { - final Polygon p = indices[i]; - a.setFrom(vertices[p.vertex0]); - b.setFrom(vertices[p.vertex1]); - c.setFrom(vertices[p.vertex2]); - final Vector3 normal = normalVector(a, b, c) - ..applyMatrix4(normalTransform) - ..normalize(); - a.applyMatrix4(vertexTransform); - b.applyMatrix4(vertexTransform); - c.applyMatrix4(vertexTransform); - - renderColors[vertexOffset + p.vertex0] = light.shading(viewPosition, a, normal, material).value; - renderColors[vertexOffset + p.vertex1] = light.shading(viewPosition, b, normal, material).value; - renderColors[vertexOffset + p.vertex2] = light.shading(viewPosition, c, normal, material).value; - } - } - } else { - // add vertex colors to renderMesh - final Int32List renderColors = renderMesh.colors; - final List colors = o.mesh.colors; - final int colorCount = o.mesh.vertices.length; - if (colorCount != o.mesh.colors.length) { - final int colorValue = (o.mesh.texture != null) ? Color.fromARGB(0, 0, 0, 0).value : toColor(o.mesh.material.diffuse, o.mesh.material.opacity).value; - for (int i = 0; i < colorCount; i++) { - renderColors[vertexOffset + i] = colorValue; - } - } else { - for (int i = 0; i < colorCount; i++) { - renderColors[vertexOffset + i] = colors[i].value; - } - } - } - - // apply perspective to screen transform - for (int i = 0; i < vertexCount; i++) { - final int x = (vertexOffset + i) * 2; - final int y = x + 1; - // remaps coordinates from [-1, 1] to the [0, viewport] space. - positions[x] = (1.0 + positions[x]) * viewportWidth / 2; - positions[y] = (1.0 - positions[y]) * viewportHeight / 2; - } - - // add texture coordinates to renderMesh - final int texcoordCount = o.mesh.vertices.length; - final Float32List renderTexcoords = renderMesh.texcoords; - if (o.mesh.texture != null && o.mesh.texcoords.length == texcoordCount) { - final int imageWidth = o.mesh.textureRect.width.toInt(); - final int imageHeight = o.mesh.textureRect.height.toInt(); - final double imageLeft = o.mesh.textureRect.left; - final double imageTop = o.mesh.textureRect.top; - final List texcoords = o.mesh.texcoords; - for (int i = 0; i < texcoordCount; i++) { - final Offset t = texcoords[i]; - final double x = t.dx * imageWidth + imageLeft; - final double y = (1.0 - t.dy) * imageHeight + imageTop; - final int xIndex = (vertexOffset + i) * 2; - final int yIndex = xIndex + 1; - renderTexcoords[xIndex] = x; - renderTexcoords[yIndex] = y; - } - } else { - for (int i = 0; i < texcoordCount; i++) { - final int xIndex = (vertexOffset + i) * 2; - final int yIndex = xIndex + 1; - renderTexcoords[xIndex] = 0; - renderTexcoords[yIndex] = 0; - } - } - - // render children - List children = o.children; - for (int i = 0; i < children.length; i++) { - _renderObject(renderMesh, children[i], model, view, projection); - } - } - - void render(Canvas canvas, Size size) { - // check if texture needs to update - if (_needsUpdateTexture) { - _needsUpdateTexture = false; - _updateTexture(); - } - - // create render mesh from objects - final renderMesh = _makeRenderMesh(); - _renderObject(renderMesh, world, Matrix4.identity(), camera.lookAtMatrix, camera.projectionMatrix); - - // remove the culled faces and recreate list. - final List renderIndices = []; - final List rawIndices = renderMesh.indices; - for (int i = 0; i < rawIndices.length; i++) { - final Polygon? p = rawIndices[i]; - if (p != null) renderIndices.add(p); - } - if (renderIndices.length == 0) return; - - // sort the faces by z - renderIndices.sort((Polygon a, Polygon b) { - // return b.sumOfZ.compareTo(a.sumOfZ); - final double az = a.sumOfZ; - final double bz = b.sumOfZ; - if (bz > az) return 1; - if (bz < az) return -1; - return 0; - }); - - // convert Polygon list to Uint16List - final int indexCount = renderIndices.length; - final Uint16List indices = Uint16List(indexCount * 3); - for (int i = 0; i < indexCount; i++) { - final int index0 = i * 3; - final int index1 = index0 + 1; - final int index2 = index0 + 2; - final Polygon polygon = renderIndices[i]; - indices[index0] = polygon.vertex0; - indices[index1] = polygon.vertex1; - indices[index2] = polygon.vertex2; - } - - final vertices = Vertices.raw( - VertexMode.triangles, - renderMesh.positions, - textureCoordinates: renderMesh.texture == null ? null : renderMesh.texcoords, - colors: renderMesh.colors, - indices: indices, - ); - - final paint = Paint(); - if (renderMesh.texture != null) { - Float64List matrix4 = new Matrix4.identity().storage; - final shader = ImageShader(renderMesh.texture!, TileMode.mirror, TileMode.mirror, matrix4); - paint.shader = shader; - } - paint.blendMode = blendMode; - canvas.drawVertices(vertices, textureBlendMode, paint); - } - - void objectCreated(Object object) { - updateTexture(); - if (_onObjectCreated != null) _onObjectCreated!(object); - } - - void update() { - if (_onUpdate != null) _onUpdate!(); - } - - void _getAllMesh(List meshes, Object object) { - meshes.add(object.mesh); - final List children = object.children; - for (int i = 0; i < children.length; i++) { - _getAllMesh(meshes, children[i]); - } - } - - void _updateTexture() async { - final meshes = []; - _getAllMesh(meshes, world); - texture = await packingTexture(meshes); - update(); - } - - /// Mark needs update texture - void updateTexture() { - _needsUpdateTexture = true; - update(); - } -} - -class RenderMesh { - RenderMesh(int vertexCount, int faceCount) { - positions = Float32List(vertexCount * 2); - positionsZ = Float32List(vertexCount); - texcoords = Float32List(vertexCount * 2); - colors = Int32List(vertexCount); - indices = List.filled(faceCount, null); - } - late Float32List positions; - late Float32List positionsZ; - late Float32List texcoords; - late Int32List colors; - late List indices; - Image? texture; - int vertexCount = 0; - int indexCount = 0; -} diff --git a/lib/src/widget.dart b/lib/src/widget.dart deleted file mode 100755 index ab56541..0000000 --- a/lib/src/widget.dart +++ /dev/null @@ -1,97 +0,0 @@ -import 'dart:ui'; -import 'package:flutter/widgets.dart' hide Image; -import 'package:vector_math/vector_math_64.dart'; -import 'scene.dart'; - -typedef void SceneCreatedCallback(Scene scene); - -class Cube extends StatefulWidget { - Cube({ - Key? key, - this.interactive = true, - this.onSceneCreated, - this.onObjectCreated, - }) : super(key: key); - - final bool interactive; - final SceneCreatedCallback? onSceneCreated; - final ObjectCreatedCallback? onObjectCreated; - - @override - _CubeState createState() => _CubeState(); -} - -class _CubeState extends State { - late Scene scene; - late Offset _lastFocalPoint; - double? _lastZoom; - - void _handleScaleStart(ScaleStartDetails details) { - _lastFocalPoint = details.localFocalPoint; - _lastZoom = null; - } - - void _handleScaleUpdate(ScaleUpdateDetails details) { - scene.camera.trackBall(toVector2(_lastFocalPoint), toVector2(details.localFocalPoint), 1.5); - _lastFocalPoint = details.localFocalPoint; - if (_lastZoom == null) { - _lastZoom = scene.camera.zoom; - } else { - scene.camera.zoom = _lastZoom! * details.scale; - } - setState(() {}); - } - - @override - void initState() { - super.initState(); - scene = Scene( - onUpdate: () => setState(() {}), - onObjectCreated: widget.onObjectCreated, - ); - // prevent setState() or markNeedsBuild called during build - WidgetsBinding.instance?.addPostFrameCallback((_) { - widget.onSceneCreated?.call(scene); - }); - } - - @override - Widget build(BuildContext context) { - return LayoutBuilder(builder: (BuildContext context, BoxConstraints constraints) { - scene.camera.viewportWidth = constraints.maxWidth; - scene.camera.viewportHeight = constraints.maxHeight; - final customPaint = CustomPaint( - painter: _CubePainter(scene), - size: Size(constraints.maxWidth, constraints.maxHeight), - ); - return widget.interactive - ? GestureDetector( - onScaleStart: _handleScaleStart, - onScaleUpdate: _handleScaleUpdate, - child: customPaint, - ) - : customPaint; - }); - } -} - -class _CubePainter extends CustomPainter { - final Scene _scene; - const _CubePainter(this._scene); - - @override - void paint(Canvas canvas, Size size) { - _scene.render(canvas, size); - } - - // We should repaint whenever the board changes, such as board.selected. - @override - bool shouldRepaint(_CubePainter oldDelegate) { - return true; - } -} - -/// Convert Offset to Vector2 -Vector2 toVector2(Offset value) { - return Vector2(value.dx, value.dy); -} diff --git a/lib/ui/widget.dart b/lib/ui/widget.dart new file mode 100644 index 0000000..724c574 --- /dev/null +++ b/lib/ui/widget.dart @@ -0,0 +1,159 @@ +import 'package:flutter/gestures.dart'; +import 'package:flutter/widgets.dart' hide Image; +import 'package:vector_math/vector_math_64.dart'; +import 'package:flutter_cube/scene/scene.dart'; +import 'package:flutter/material.dart'; + +typedef void SceneCreatedCallback(Scene scene); +enum CubeCallbacks{OnTap,RemoveObject} + +class Cube extends StatefulWidget { + Cube({ + Key? key, + this.interactive = true, + this.onSceneCreated, + this.onObjectCreated, + this.onSceneUpdated, + this.callback, + }) : super(key: key); + + final bool interactive; + final SceneCreatedCallback? onSceneCreated; + final ObjectCreatedCallback? onObjectCreated; + final VoidCallback? onSceneUpdated; + final Function({CubeCallbacks call, Offset details})? callback; + + @override + _CubeState createState() => _CubeState(); +} + +class _CubeState extends State { + late Scene scene; + late Offset _lastFocalPoint; + double? _lastZoom; + double _scroll = 1.0; + double _scale = 0; + int _mouseType = 0; + bool tapped = false; + + void _handleScaleStart(ScaleStartDetails details) { + _lastFocalPoint = details.localFocalPoint; + _lastZoom = null; + } + void _handelPanUpdate(Offset localFocalPoint){ + scene.camera.panCamera(toVector2(_lastFocalPoint), toVector2(localFocalPoint), 1.5); + } + + void _handleScaleUpdate(double scale, Offset localFocalPoint, bool pan) { + if (_lastZoom == null){ + _scale = scale; + _lastZoom = scene.camera.zoom; + } + scene.camera.zoom = _lastZoom !* scale; + + if(_mouseType == 1 || !pan) + scene.camera.trackBall(toVector2(_lastFocalPoint), toVector2(localFocalPoint), 1.5); + else if(_mouseType == 2 || pan) + _handelPanUpdate(localFocalPoint); + + _lastFocalPoint = localFocalPoint; + setState(() {}); + } + @override + void initState() { + super.initState(); + scene = Scene( + onUpdate: () => setState(() { + widget.onSceneUpdated?.call(); + if(tapped){ + widget.callback?.call(call: CubeCallbacks.OnTap); + tapped = false; + } + }), + onObjectCreated: widget.onObjectCreated, + ); + // prevent setState() or markNeedsBuild called during build + WidgetsBinding.instance?.addPostFrameCallback((_) { + widget.onSceneCreated?.call(scene); + _scroll = scene.camera.zoom; + }); + } + @override + void dispose(){ + super.dispose(); + } + @override + Widget build(BuildContext context) { + return LayoutBuilder(builder: (BuildContext context, BoxConstraints constraints) { + scene.camera.viewportWidth = constraints.maxWidth; + scene.camera.viewportHeight = constraints.maxHeight; + final customPaint = CustomPaint( + painter: _CubePainter(scene), + size: Size(constraints.maxWidth, constraints.maxHeight), + isComplex: true, + ); + return widget.interactive + ?Listener( + onPointerMove: (details){ + _mouseType = details.buttons; + }, + onPointerHover: (details){ + if(scene.rayCasting) + scene.updateHoverLocation(details.localPosition); + }, + onPointerSignal: (details){ + if(details is PointerScrollEvent){ + if (_lastZoom == null) + _scroll = _scroll; + else + if(scene.camera.zoom > 0.5 || details.scrollDelta.dy > 0) + _scroll = _scroll+details.scrollDelta.dy*0.01; + + _lastFocalPoint = details.localPosition; + _handleScaleUpdate(_scroll,details.localPosition,false);//_lastFocalPoint + } + }, + child: GestureDetector( + onScaleStart: _handleScaleStart, + onScaleUpdate: (details){ + bool pan = false; + if(_scale < details.scale+0.1 && _scale > details.scale-0.1) + pan = true; + _handleScaleUpdate(details.scale,details.localFocalPoint, pan); + }, + onTapDown: (TapDownDetails details){ + _lastZoom = null; + scene.updateTapLocation(details.localPosition); + tapped = true; + }, + onTapUp: (TapUpDetails details){ + + }, + child: customPaint, + ) + ) + : customPaint; + }); + } +} + +class _CubePainter extends CustomPainter { + final Scene _scene; + const _CubePainter(this._scene); + + @override + void paint(Canvas canvas, Size size) { + _scene.render(canvas, size); + } + + // We should repaint whenever the board changes, such as board.selected. + @override + bool shouldRepaint(_CubePainter oldDelegate) { + return true; + } +} + +/// Convert Offset to Vector2 +Vector2 toVector2(Offset value) { + return Vector2(value.dx, value.dy); +} diff --git a/pubspec.lock b/pubspec.lock index 3785710..20c3203 100755 --- a/pubspec.lock +++ b/pubspec.lock @@ -1,13 +1,20 @@ # Generated by pub # See https://dart.dev/tools/pub/glossary#lockfile packages: + archive: + dependency: transitive + description: + name: archive + url: "https://pub.dartlang.org" + source: hosted + version: "3.1.11" async: dependency: transitive description: name: async url: "https://pub.dartlang.org" source: hosted - version: "2.5.0" + version: "2.8.2" boolean_selector: dependency: transitive description: @@ -21,14 +28,14 @@ packages: name: characters url: "https://pub.dartlang.org" source: hosted - version: "1.1.0" + version: "1.2.0" charcode: dependency: transitive description: name: charcode url: "https://pub.dartlang.org" source: hosted - version: "1.2.0" + version: "1.3.1" clock: dependency: transitive description: @@ -43,6 +50,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.15.0" + crypto: + dependency: transitive + description: + name: crypto + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.1" fake_async: dependency: transitive description: @@ -60,20 +74,27 @@ packages: description: flutter source: sdk version: "0.0.0" + image: + dependency: "direct main" + description: + name: image + url: "https://pub.dartlang.org" + source: hosted + version: "3.1.1" matcher: dependency: transitive description: name: matcher url: "https://pub.dartlang.org" source: hosted - version: "0.12.10" + version: "0.12.11" meta: dependency: transitive description: name: meta url: "https://pub.dartlang.org" source: hosted - version: "1.3.0" + version: "1.7.0" path: dependency: "direct main" description: @@ -81,6 +102,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.8.0" + petitparser: + dependency: transitive + description: + name: petitparser + url: "https://pub.dartlang.org" + source: hosted + version: "4.4.0" sky_engine: dependency: transitive description: flutter @@ -92,7 +120,7 @@ packages: name: source_span url: "https://pub.dartlang.org" source: hosted - version: "1.8.0" + version: "1.8.1" stack_trace: dependency: transitive description: @@ -127,7 +155,7 @@ packages: name: test_api url: "https://pub.dartlang.org" source: hosted - version: "0.2.19" + version: "0.4.3" typed_data: dependency: transitive description: @@ -141,6 +169,13 @@ packages: name: vector_math url: "https://pub.dartlang.org" source: hosted - version: "2.1.0" + version: "2.1.1" + xml: + dependency: transitive + description: + name: xml + url: "https://pub.dartlang.org" + source: hosted + version: "5.3.1" sdks: - dart: ">=2.12.0 <3.0.0" + dart: ">=2.15.0 <3.0.0" diff --git a/pubspec.yaml b/pubspec.yaml index af5085e..fdd6770 100755 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,15 +1,16 @@ name: flutter_cube description: A Flutter 3D widget that renders Wavefront's object files. -version: 0.1.0 +version: 0.2.0 homepage: https://github.com/zesage/flutter_cube environment: - sdk: '>=2.12.0 <3.0.0' + sdk: '>=2.15.0 <3.0.0' -dependencies: +dependencies: flutter: sdk: flutter vector_math: any + image: 3.1.1 path: dev_dependencies: