diff --git a/sandbox/embed_selfhost_calculate.html b/sandbox/embed_selfhost_calculate.html
index 9bfc823..4873c7b 100644
--- a/sandbox/embed_selfhost_calculate.html
+++ b/sandbox/embed_selfhost_calculate.html
@@ -63,7 +63,7 @@
});
// load a model providing model urls
- viewer.LoadModelFromUrls ([
+ viewer.LoadModelFromUrlList ([
'../../test/testfiles/obj/hundred_cubes.obj',
'../../test/testfiles/obj/hundred_cubes.mtl'
]);
diff --git a/sandbox/embed_selfhost_code_url.html b/sandbox/embed_selfhost_code_url.html
index eb58a15..00c019b 100644
--- a/sandbox/embed_selfhost_code_url.html
+++ b/sandbox/embed_selfhost_code_url.html
@@ -52,7 +52,7 @@
});
// load a model providing model urls
- viewer.LoadModelFromUrls ([
+ viewer.LoadModelFromUrlList ([
'../../test/testfiles/gltf/DamagedHelmet/glTF-Binary/DamagedHelmet.glb'
]);
});
diff --git a/sandbox/embed_selfhost_noextension.html b/sandbox/embed_selfhost_noextension.html
new file mode 100644
index 0000000..f35bf41
--- /dev/null
+++ b/sandbox/embed_selfhost_noextension.html
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+ Online 3D Viewer
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/source/engine/import/filelist.js b/source/engine/import/filelist.js
index 82f6e19..1c4525a 100644
--- a/source/engine/import/filelist.js
+++ b/source/engine/import/filelist.js
@@ -1,27 +1,44 @@
import { RunTasks } from '../core/taskrunner.js';
import { FileFormat, FileSource, GetFileExtension, GetFileName, ReadFile, RequestUrl } from '../io/fileutils.js';
-export class File
+export class InputFile
{
- constructor (file, source)
+ constructor (name, source, data)
{
+ this.name = name;
this.source = source;
- if (source === FileSource.Url) {
- this.fileUrl = file;
- this.fileObject = null;
- this.name = GetFileName (file);
- this.extension = GetFileExtension (file);
- } else if (source === FileSource.File) {
- this.fileUrl = null;
- this.fileObject = file;
- this.name = GetFileName (file.name);
- this.extension = GetFileExtension (file.name);
- } else if (source === FileSource.Decompressed) {
- this.fileUrl = null;
- this.fileObject = null;
- this.name = GetFileName (file);
- this.extension = GetFileExtension (file);
- }
+ this.data = data;
+ }
+}
+
+export function InputFilesFromUrls (urls)
+{
+ let inputFiles = [];
+ for (let url of urls) {
+ let fileName = GetFileName (url);
+ inputFiles.push (new InputFile (fileName, FileSource.Url, url));
+ }
+ return inputFiles;
+}
+
+export function InputFilesFromFileObjects (fileObjects)
+{
+ let inputFiles = [];
+ for (let fileObject of fileObjects) {
+ let fileName = GetFileName (fileObject.name);
+ inputFiles.push (new InputFile (fileName, FileSource.File, fileObject));
+ }
+ return inputFiles;
+}
+
+export class ImporterFile
+{
+ constructor (name, source, data)
+ {
+ this.name = GetFileName (name);
+ this.extension = GetFileExtension (name);
+ this.source = source;
+ this.data = data;
this.content = null;
}
@@ -31,25 +48,25 @@ export class File
}
}
-export class FileList
+export class ImporterFileList
{
constructor ()
{
this.files = [];
}
- FillFromFileUrls (fileList)
+ FillFromInputFiles (inputFiles)
{
- this.Fill (fileList, FileSource.Url);
+ this.files = [];
+ for (let inputFile of inputFiles) {
+ let file = new ImporterFile (inputFile.name, inputFile.source, inputFile.data);
+ this.files.push (file);
+ }
}
- FillFromFileObjects (fileList)
- {
- this.Fill (fileList, FileSource.File);
- }
-
- ExtendFromFileList (files)
+ ExtendFromFileList (fileList)
{
+ let files = fileList.GetFiles ();
for (let i = 0; i < files.length; i++) {
let file = files[i];
if (!this.ContainsFileByPath (file.name)) {
@@ -104,16 +121,6 @@ export class FileList
return true;
}
- Fill (fileList, fileSource)
- {
- this.files = [];
- for (let fileIndex = 0; fileIndex < fileList.length; fileIndex++) {
- let fileObject = fileList[fileIndex];
- let file = new File (fileObject, fileSource);
- this.AddFile (file);
- }
- }
-
AddFile (file)
{
this.files.push (file);
@@ -127,9 +134,9 @@ export class FileList
}
let loaderPromise = null;
if (file.source === FileSource.Url) {
- loaderPromise = RequestUrl (file.fileUrl, FileFormat.Binary);
+ loaderPromise = RequestUrl (file.data, FileFormat.Binary);
} else if (file.source === FileSource.File) {
- loaderPromise = ReadFile (file.fileObject, FileFormat.Binary);
+ loaderPromise = ReadFile (file.data, FileFormat.Binary);
} else {
complete ();
return;
diff --git a/source/engine/import/importer.js b/source/engine/import/importer.js
index bcb79eb..4d5099c 100644
--- a/source/engine/import/importer.js
+++ b/source/engine/import/importer.js
@@ -1,7 +1,7 @@
import { RunTaskAsync } from '../core/taskrunner.js';
import { FileSource, GetFileName } from '../io/fileutils.js';
import { Color } from '../model/color.js';
-import { File, FileList } from './filelist.js';
+import { ImporterFile, ImporterFileList } from './filelist.js';
import { Importer3dm } from './importer3dm.js';
import { Importer3ds } from './importer3ds.js';
import { ImporterGltf } from './importergltf.js';
@@ -96,7 +96,7 @@ export class Importer
new ImporterThreeWrl (),
new ImporterThree3mf ()
];
- this.fileList = new FileList ();
+ this.fileList = new ImporterFileList ();
this.model = null;
this.usedFiles = [];
this.missingFiles = [];
@@ -107,9 +107,9 @@ export class Importer
this.importers.push (importer);
}
- ImportFiles (fileList, fileSource, settings, callbacks)
+ ImportFiles (inputFiles, settings, callbacks)
{
- this.LoadFiles (fileList, fileSource, () => {
+ this.LoadFiles (inputFiles, () => {
callbacks.onFilesLoaded ();
RunTaskAsync (() => {
this.ImportLoadedFiles (settings, callbacks);
@@ -117,14 +117,11 @@ export class Importer
});
}
- LoadFiles (fileList, fileSource, onReady)
+ LoadFiles (inputFiles, onReady)
{
- let newFileList = new FileList ();
- if (fileSource === FileSource.Url) {
- newFileList.FillFromFileUrls (fileList);
- } else if (fileSource === FileSource.File) {
- newFileList.FillFromFileObjects (fileList);
- }
+ let newFileList = new ImporterFileList ();
+ newFileList.FillFromInputFiles (inputFiles);
+
let reset = false;
if (this.HasImportableFile (newFileList)) {
reset = true;
@@ -139,8 +136,7 @@ export class Importer
if (!foundMissingFile) {
reset = true;
} else {
- let newFiles = newFileList.GetFiles ();
- this.fileList.ExtendFromFileList (newFiles);
+ this.fileList.ExtendFromFileList (newFileList);
reset = false;
}
}
@@ -258,7 +254,7 @@ export class Importer
const decompressed = fflate.unzipSync (archiveBuffer);
for (const fileName in decompressed) {
if (Object.prototype.hasOwnProperty.call (decompressed, fileName)) {
- let file = new File (fileName, FileSource.Decompressed);
+ let file = new ImporterFile (fileName, FileSource.Decompressed, null);
file.SetContent (decompressed[fileName].buffer);
fileList.AddFile (file);
}
diff --git a/source/engine/main.js b/source/engine/main.js
index d5639f7..778524b 100644
--- a/source/engine/main.js
+++ b/source/engine/main.js
@@ -20,7 +20,7 @@ import { OctreeNode, Octree } from './geometry/octree.js';
import { Quaternion, QuaternionIsEqual, ArrayToQuaternion, QuaternionFromAxisAngle, QuaternionFromXYZ } from './geometry/quaternion.js';
import { Transformation, TransformationIsEqual } from './geometry/transformation.js';
import { BezierTweenFunction, LinearTweenFunction, ParabolicTweenFunction, TweenCoord3D } from './geometry/tween.js';
-import { File, FileList } from './import/filelist.js';
+import { InputFile, ImporterFile, ImporterFileList, InputFilesFromUrls, InputFilesFromFileObjects } from './import/filelist.js';
import { ImportSettings, ImportError, ImportResult, ImporterFileAccessor, Importer, ImportErrorCode } from './import/importer.js';
import { Importer3dm } from './import/importer3dm.js';
import { Importer3ds } from './import/importer3ds.js';
@@ -140,8 +140,11 @@ export {
LinearTweenFunction,
ParabolicTweenFunction,
TweenCoord3D,
- File,
- FileList,
+ InputFile,
+ ImporterFile,
+ ImporterFileList,
+ InputFilesFromUrls,
+ InputFilesFromFileObjects,
ImportSettings,
ImportError,
ImportResult,
diff --git a/source/engine/threejs/threemodelloader.js b/source/engine/threejs/threemodelloader.js
index c8aa560..75a7d0a 100644
--- a/source/engine/threejs/threemodelloader.js
+++ b/source/engine/threejs/threemodelloader.js
@@ -22,7 +22,7 @@ export class ThreeModelLoader
return this.inProgress;
}
- LoadModel (files, fileSource, settings, callbacks)
+ LoadModel (inputFiles, settings, callbacks)
{
if (this.inProgress) {
return;
@@ -31,7 +31,7 @@ export class ThreeModelLoader
this.inProgress = true;
callbacks.onLoadStart ();
this.RevokeObjectUrls ();
- this.importer.ImportFiles (files, fileSource, settings, {
+ this.importer.ImportFiles (inputFiles, settings, {
onFilesLoaded : () => {
callbacks.onImportStart ();
},
diff --git a/source/engine/viewer/embeddedviewer.js b/source/engine/viewer/embeddedviewer.js
index 71ab1e0..28c32d7 100644
--- a/source/engine/viewer/embeddedviewer.js
+++ b/source/engine/viewer/embeddedviewer.js
@@ -1,7 +1,8 @@
import { IsDefined } from '../core/core.js';
import { Direction } from '../geometry/geometry.js';
+import { InputFilesFromFileObjects, InputFilesFromUrls } from '../import/filelist.js';
import { ImportErrorCode, ImportSettings } from '../import/importer.js';
-import { FileSource, TransformFileHostUrls } from '../io/fileutils.js';
+import { TransformFileHostUrls } from '../io/fileutils.js';
import { ParameterConverter } from '../parameters/parameterlist.js';
import { ThreeModelLoader } from '../threejs/threemodelloader.js';
import { Viewer } from './viewer.js';
@@ -51,20 +52,22 @@ export class EmbeddedViewer
});
}
- LoadModelFromUrls (modelUrls)
+ LoadModelFromUrlList (modelUrls)
{
TransformFileHostUrls (modelUrls);
- this.LoadModelInternal (modelUrls, FileSource.Url);
+ let inputFiles = InputFilesFromUrls (modelUrls);
+ this.LoadModelFromInputFiles (inputFiles);
}
LoadModelFromFileList (fileList)
{
- this.LoadModelInternal (fileList, FileSource.File);
+ let inputFiles = InputFilesFromFileObjects (fileList);
+ this.LoadModelFromInputFiles (inputFiles);
}
- LoadModelInternal (fileList, fileSource)
+ LoadModelFromInputFiles (inputFiles)
{
- if (fileList === null || fileList.length === 0) {
+ if (inputFiles === null || inputFiles.length === 0) {
return null;
}
@@ -77,7 +80,7 @@ export class EmbeddedViewer
this.model = null;
let progressDiv = null;
let loader = new ThreeModelLoader ();
- loader.LoadModel (fileList, fileSource, settings, {
+ loader.LoadModel (inputFiles, settings, {
onLoadStart : () => {
this.canvas.style.display = 'none';
progressDiv = document.createElement ('div');
@@ -151,7 +154,7 @@ export class EmbeddedViewer
export function Init3DViewerElement (parentElement, modelUrls, parameters)
{
let viewer = new EmbeddedViewer (parentElement, parameters);
- viewer.LoadModelFromUrls (modelUrls);
+ viewer.LoadModelFromUrlList (modelUrls);
return viewer;
}
diff --git a/source/website/embed.js b/source/website/embed.js
index e22f52e..91c034b 100644
--- a/source/website/embed.js
+++ b/source/website/embed.js
@@ -1,5 +1,5 @@
import { CreateModelUrlParameters } from '../engine/parameters/parameterlist.js';
-import { FileSource, TransformFileHostUrls } from '../engine/io/fileutils.js';
+import { TransformFileHostUrls } from '../engine/io/fileutils.js';
import { ImportSettings } from '../engine/import/importer.js';
import { AddDomElement } from '../engine/viewer/domutils.js';
import { Viewer } from '../engine/viewer/viewer.js';
@@ -7,6 +7,7 @@ import { HashHandler } from './hashhandler.js';
import { ThreeModelLoaderUI } from './threemodelloaderui.js';
import { Direction } from '../engine/geometry/geometry.js';
import { HandleEvent } from './eventhandler.js';
+import { InputFilesFromUrls } from '../engine/import/filelist.js';
export class Embed
{
@@ -66,7 +67,8 @@ export class Embed
if (defaultColor !== null) {
settings.defaultColor = defaultColor;
}
- this.modelLoaderUI.LoadModel (urls, FileSource.Url, settings, {
+ let inputFiles = InputFilesFromUrls (urls);
+ this.modelLoaderUI.LoadModel (inputFiles, settings, {
onStart : () =>
{
diff --git a/source/website/sharingdialog.js b/source/website/sharingdialog.js
index 4e539f1..e0d4112 100644
--- a/source/website/sharingdialog.js
+++ b/source/website/sharingdialog.js
@@ -118,7 +118,7 @@ export function ShowSharingDialog (fileList, settings, camera)
for (let fileIndex = 0; fileIndex < files.length; fileIndex++) {
let file = files[fileIndex];
if (file.source === FileSource.Url) {
- modelFiles.push (file.fileUrl);
+ modelFiles.push (file.data);
}
}
diff --git a/source/website/threemodelloaderui.js b/source/website/threemodelloaderui.js
index 1005151..b960e61 100644
--- a/source/website/threemodelloaderui.js
+++ b/source/website/threemodelloaderui.js
@@ -13,14 +13,14 @@ export class ThreeModelLoaderUI
this.modalDialog = null;
}
- LoadModel (files, fileSource, settings, callbacks)
+ LoadModel (inputFiles, settings, callbacks)
{
if (this.modelLoader.InProgress ()) {
return;
}
let progressDialog = null;
- this.modelLoader.LoadModel (files, fileSource, settings, {
+ this.modelLoader.LoadModel (inputFiles, settings, {
onLoadStart : () => {
this.CloseDialogIfOpen ();
callbacks.onStart ();
diff --git a/source/website/website.js b/source/website/website.js
index 78d2346..4e76ca2 100644
--- a/source/website/website.js
+++ b/source/website/website.js
@@ -1,4 +1,5 @@
-import { FileSource, GetFileExtension, TransformFileHostUrls } from '../engine/io/fileutils.js';
+import { GetFileExtension, TransformFileHostUrls } from '../engine/io/fileutils.js';
+import { InputFilesFromFileObjects, InputFilesFromUrls } from '../engine/import/filelist.js';
import { ImportErrorCode, ImportSettings } from '../engine/import/importer.js';
import { Viewer } from '../engine/viewer/viewer.js';
import { AddDiv, AddDomElement, ShowDomElement, SetDomElementOuterHeight } from '../engine/viewer/domutils.js';
@@ -358,7 +359,8 @@ export class Website
LoadModelFromUrlList (urls, settings)
{
- this.LoadModel (urls, FileSource.Url, settings);
+ let inputFiles = InputFilesFromUrls (urls);
+ this.LoadModelFromInputFiles (inputFiles, settings);
this.ClearHashIfNotOnlyUrlList ();
}
@@ -366,13 +368,14 @@ export class Website
{
let importSettings = new ImportSettings ();
importSettings.defaultColor = this.settings.defaultColor;
- this.LoadModel (files, FileSource.File, importSettings);
+ let inputFiles = InputFilesFromFileObjects (files);
+ this.LoadModelFromInputFiles (inputFiles, importSettings);
this.ClearHashIfNotOnlyUrlList ();
}
- LoadModel (files, fileSource, settings)
+ LoadModelFromInputFiles (files, settings)
{
- this.modelLoaderUI.LoadModel (files, fileSource, settings, {
+ this.modelLoaderUI.LoadModel (files, settings, {
onStart : () =>
{
this.SetUIState (WebsiteUIState.Loading);
diff --git a/test/testfiles/obj/hundred_cubes_noext_mtl b/test/testfiles/obj/hundred_cubes_noext_mtl
new file mode 100644
index 0000000..cd2c541
--- /dev/null
+++ b/test/testfiles/obj/hundred_cubes_noext_mtl
@@ -0,0 +1,14 @@
+newmtl Red
+Ka 0.000000 0.000000 0.000000
+Kd 0.800000 0.200000 0.200000
+Ks 0.500000 0.500000 0.500000
+
+newmtl Green
+Ka 0.000000 0.000000 0.000000
+Kd 0.152940 0.607840 0.380390
+Ks 0.500000 0.500000 0.500000
+
+newmtl Blue
+Ka 0.000000 0.000000 0.000000
+Kd 0.000000 0.541180 0.721570
+Ks 0.500000 0.500000 0.500000
diff --git a/test/testfiles/obj/hundred_cubes_noext_obj b/test/testfiles/obj/hundred_cubes_noext_obj
new file mode 100644
index 0000000..2061de5
--- /dev/null
+++ b/test/testfiles/obj/hundred_cubes_noext_obj
@@ -0,0 +1,1603 @@
+mtllib hundred_cubes.mtl
+
+v 0.0 0.0 0.0
+v 1.0 0.0 0.0
+v 1.0 1.0 0.0
+v 0.0 1.0 0.0
+v 0.0 0.0 1.0
+v 1.0 0.0 1.0
+v 1.0 1.0 1.0
+v 0.0 1.0 1.0
+v 0.0 2.0 0.0
+v 1.0 2.0 0.0
+v 1.0 3.0 0.0
+v 0.0 3.0 0.0
+v 0.0 2.0 1.0
+v 1.0 2.0 1.0
+v 1.0 3.0 1.0
+v 0.0 3.0 1.0
+v 0.0 4.0 0.0
+v 1.0 4.0 0.0
+v 1.0 5.0 0.0
+v 0.0 5.0 0.0
+v 0.0 4.0 1.0
+v 1.0 4.0 1.0
+v 1.0 5.0 1.0
+v 0.0 5.0 1.0
+v 0.0 6.0 0.0
+v 1.0 6.0 0.0
+v 1.0 7.0 0.0
+v 0.0 7.0 0.0
+v 0.0 6.0 1.0
+v 1.0 6.0 1.0
+v 1.0 7.0 1.0
+v 0.0 7.0 1.0
+v 0.0 8.0 0.0
+v 1.0 8.0 0.0
+v 1.0 9.0 0.0
+v 0.0 9.0 0.0
+v 0.0 8.0 1.0
+v 1.0 8.0 1.0
+v 1.0 9.0 1.0
+v 0.0 9.0 1.0
+v 0.0 10.0 0.0
+v 1.0 10.0 0.0
+v 1.0 11.0 0.0
+v 0.0 11.0 0.0
+v 0.0 10.0 1.0
+v 1.0 10.0 1.0
+v 1.0 11.0 1.0
+v 0.0 11.0 1.0
+v 0.0 12.0 0.0
+v 1.0 12.0 0.0
+v 1.0 13.0 0.0
+v 0.0 13.0 0.0
+v 0.0 12.0 1.0
+v 1.0 12.0 1.0
+v 1.0 13.0 1.0
+v 0.0 13.0 1.0
+v 0.0 14.0 0.0
+v 1.0 14.0 0.0
+v 1.0 15.0 0.0
+v 0.0 15.0 0.0
+v 0.0 14.0 1.0
+v 1.0 14.0 1.0
+v 1.0 15.0 1.0
+v 0.0 15.0 1.0
+v 0.0 16.0 0.0
+v 1.0 16.0 0.0
+v 1.0 17.0 0.0
+v 0.0 17.0 0.0
+v 0.0 16.0 1.0
+v 1.0 16.0 1.0
+v 1.0 17.0 1.0
+v 0.0 17.0 1.0
+v 0.0 18.0 0.0
+v 1.0 18.0 0.0
+v 1.0 19.0 0.0
+v 0.0 19.0 0.0
+v 0.0 18.0 1.0
+v 1.0 18.0 1.0
+v 1.0 19.0 1.0
+v 0.0 19.0 1.0
+v 2.0 0.0 0.0
+v 3.0 0.0 0.0
+v 3.0 1.0 0.0
+v 2.0 1.0 0.0
+v 2.0 0.0 1.0
+v 3.0 0.0 1.0
+v 3.0 1.0 1.0
+v 2.0 1.0 1.0
+v 2.0 2.0 0.0
+v 3.0 2.0 0.0
+v 3.0 3.0 0.0
+v 2.0 3.0 0.0
+v 2.0 2.0 1.0
+v 3.0 2.0 1.0
+v 3.0 3.0 1.0
+v 2.0 3.0 1.0
+v 2.0 4.0 0.0
+v 3.0 4.0 0.0
+v 3.0 5.0 0.0
+v 2.0 5.0 0.0
+v 2.0 4.0 1.0
+v 3.0 4.0 1.0
+v 3.0 5.0 1.0
+v 2.0 5.0 1.0
+v 2.0 6.0 0.0
+v 3.0 6.0 0.0
+v 3.0 7.0 0.0
+v 2.0 7.0 0.0
+v 2.0 6.0 1.0
+v 3.0 6.0 1.0
+v 3.0 7.0 1.0
+v 2.0 7.0 1.0
+v 2.0 8.0 0.0
+v 3.0 8.0 0.0
+v 3.0 9.0 0.0
+v 2.0 9.0 0.0
+v 2.0 8.0 1.0
+v 3.0 8.0 1.0
+v 3.0 9.0 1.0
+v 2.0 9.0 1.0
+v 2.0 10.0 0.0
+v 3.0 10.0 0.0
+v 3.0 11.0 0.0
+v 2.0 11.0 0.0
+v 2.0 10.0 1.0
+v 3.0 10.0 1.0
+v 3.0 11.0 1.0
+v 2.0 11.0 1.0
+v 2.0 12.0 0.0
+v 3.0 12.0 0.0
+v 3.0 13.0 0.0
+v 2.0 13.0 0.0
+v 2.0 12.0 1.0
+v 3.0 12.0 1.0
+v 3.0 13.0 1.0
+v 2.0 13.0 1.0
+v 2.0 14.0 0.0
+v 3.0 14.0 0.0
+v 3.0 15.0 0.0
+v 2.0 15.0 0.0
+v 2.0 14.0 1.0
+v 3.0 14.0 1.0
+v 3.0 15.0 1.0
+v 2.0 15.0 1.0
+v 2.0 16.0 0.0
+v 3.0 16.0 0.0
+v 3.0 17.0 0.0
+v 2.0 17.0 0.0
+v 2.0 16.0 1.0
+v 3.0 16.0 1.0
+v 3.0 17.0 1.0
+v 2.0 17.0 1.0
+v 2.0 18.0 0.0
+v 3.0 18.0 0.0
+v 3.0 19.0 0.0
+v 2.0 19.0 0.0
+v 2.0 18.0 1.0
+v 3.0 18.0 1.0
+v 3.0 19.0 1.0
+v 2.0 19.0 1.0
+v 4.0 0.0 0.0
+v 5.0 0.0 0.0
+v 5.0 1.0 0.0
+v 4.0 1.0 0.0
+v 4.0 0.0 1.0
+v 5.0 0.0 1.0
+v 5.0 1.0 1.0
+v 4.0 1.0 1.0
+v 4.0 2.0 0.0
+v 5.0 2.0 0.0
+v 5.0 3.0 0.0
+v 4.0 3.0 0.0
+v 4.0 2.0 1.0
+v 5.0 2.0 1.0
+v 5.0 3.0 1.0
+v 4.0 3.0 1.0
+v 4.0 4.0 0.0
+v 5.0 4.0 0.0
+v 5.0 5.0 0.0
+v 4.0 5.0 0.0
+v 4.0 4.0 1.0
+v 5.0 4.0 1.0
+v 5.0 5.0 1.0
+v 4.0 5.0 1.0
+v 4.0 6.0 0.0
+v 5.0 6.0 0.0
+v 5.0 7.0 0.0
+v 4.0 7.0 0.0
+v 4.0 6.0 1.0
+v 5.0 6.0 1.0
+v 5.0 7.0 1.0
+v 4.0 7.0 1.0
+v 4.0 8.0 0.0
+v 5.0 8.0 0.0
+v 5.0 9.0 0.0
+v 4.0 9.0 0.0
+v 4.0 8.0 1.0
+v 5.0 8.0 1.0
+v 5.0 9.0 1.0
+v 4.0 9.0 1.0
+v 4.0 10.0 0.0
+v 5.0 10.0 0.0
+v 5.0 11.0 0.0
+v 4.0 11.0 0.0
+v 4.0 10.0 1.0
+v 5.0 10.0 1.0
+v 5.0 11.0 1.0
+v 4.0 11.0 1.0
+v 4.0 12.0 0.0
+v 5.0 12.0 0.0
+v 5.0 13.0 0.0
+v 4.0 13.0 0.0
+v 4.0 12.0 1.0
+v 5.0 12.0 1.0
+v 5.0 13.0 1.0
+v 4.0 13.0 1.0
+v 4.0 14.0 0.0
+v 5.0 14.0 0.0
+v 5.0 15.0 0.0
+v 4.0 15.0 0.0
+v 4.0 14.0 1.0
+v 5.0 14.0 1.0
+v 5.0 15.0 1.0
+v 4.0 15.0 1.0
+v 4.0 16.0 0.0
+v 5.0 16.0 0.0
+v 5.0 17.0 0.0
+v 4.0 17.0 0.0
+v 4.0 16.0 1.0
+v 5.0 16.0 1.0
+v 5.0 17.0 1.0
+v 4.0 17.0 1.0
+v 4.0 18.0 0.0
+v 5.0 18.0 0.0
+v 5.0 19.0 0.0
+v 4.0 19.0 0.0
+v 4.0 18.0 1.0
+v 5.0 18.0 1.0
+v 5.0 19.0 1.0
+v 4.0 19.0 1.0
+v 6.0 0.0 0.0
+v 7.0 0.0 0.0
+v 7.0 1.0 0.0
+v 6.0 1.0 0.0
+v 6.0 0.0 1.0
+v 7.0 0.0 1.0
+v 7.0 1.0 1.0
+v 6.0 1.0 1.0
+v 6.0 2.0 0.0
+v 7.0 2.0 0.0
+v 7.0 3.0 0.0
+v 6.0 3.0 0.0
+v 6.0 2.0 1.0
+v 7.0 2.0 1.0
+v 7.0 3.0 1.0
+v 6.0 3.0 1.0
+v 6.0 4.0 0.0
+v 7.0 4.0 0.0
+v 7.0 5.0 0.0
+v 6.0 5.0 0.0
+v 6.0 4.0 1.0
+v 7.0 4.0 1.0
+v 7.0 5.0 1.0
+v 6.0 5.0 1.0
+v 6.0 6.0 0.0
+v 7.0 6.0 0.0
+v 7.0 7.0 0.0
+v 6.0 7.0 0.0
+v 6.0 6.0 1.0
+v 7.0 6.0 1.0
+v 7.0 7.0 1.0
+v 6.0 7.0 1.0
+v 6.0 8.0 0.0
+v 7.0 8.0 0.0
+v 7.0 9.0 0.0
+v 6.0 9.0 0.0
+v 6.0 8.0 1.0
+v 7.0 8.0 1.0
+v 7.0 9.0 1.0
+v 6.0 9.0 1.0
+v 6.0 10.0 0.0
+v 7.0 10.0 0.0
+v 7.0 11.0 0.0
+v 6.0 11.0 0.0
+v 6.0 10.0 1.0
+v 7.0 10.0 1.0
+v 7.0 11.0 1.0
+v 6.0 11.0 1.0
+v 6.0 12.0 0.0
+v 7.0 12.0 0.0
+v 7.0 13.0 0.0
+v 6.0 13.0 0.0
+v 6.0 12.0 1.0
+v 7.0 12.0 1.0
+v 7.0 13.0 1.0
+v 6.0 13.0 1.0
+v 6.0 14.0 0.0
+v 7.0 14.0 0.0
+v 7.0 15.0 0.0
+v 6.0 15.0 0.0
+v 6.0 14.0 1.0
+v 7.0 14.0 1.0
+v 7.0 15.0 1.0
+v 6.0 15.0 1.0
+v 6.0 16.0 0.0
+v 7.0 16.0 0.0
+v 7.0 17.0 0.0
+v 6.0 17.0 0.0
+v 6.0 16.0 1.0
+v 7.0 16.0 1.0
+v 7.0 17.0 1.0
+v 6.0 17.0 1.0
+v 6.0 18.0 0.0
+v 7.0 18.0 0.0
+v 7.0 19.0 0.0
+v 6.0 19.0 0.0
+v 6.0 18.0 1.0
+v 7.0 18.0 1.0
+v 7.0 19.0 1.0
+v 6.0 19.0 1.0
+v 8.0 0.0 0.0
+v 9.0 0.0 0.0
+v 9.0 1.0 0.0
+v 8.0 1.0 0.0
+v 8.0 0.0 1.0
+v 9.0 0.0 1.0
+v 9.0 1.0 1.0
+v 8.0 1.0 1.0
+v 8.0 2.0 0.0
+v 9.0 2.0 0.0
+v 9.0 3.0 0.0
+v 8.0 3.0 0.0
+v 8.0 2.0 1.0
+v 9.0 2.0 1.0
+v 9.0 3.0 1.0
+v 8.0 3.0 1.0
+v 8.0 4.0 0.0
+v 9.0 4.0 0.0
+v 9.0 5.0 0.0
+v 8.0 5.0 0.0
+v 8.0 4.0 1.0
+v 9.0 4.0 1.0
+v 9.0 5.0 1.0
+v 8.0 5.0 1.0
+v 8.0 6.0 0.0
+v 9.0 6.0 0.0
+v 9.0 7.0 0.0
+v 8.0 7.0 0.0
+v 8.0 6.0 1.0
+v 9.0 6.0 1.0
+v 9.0 7.0 1.0
+v 8.0 7.0 1.0
+v 8.0 8.0 0.0
+v 9.0 8.0 0.0
+v 9.0 9.0 0.0
+v 8.0 9.0 0.0
+v 8.0 8.0 1.0
+v 9.0 8.0 1.0
+v 9.0 9.0 1.0
+v 8.0 9.0 1.0
+v 8.0 10.0 0.0
+v 9.0 10.0 0.0
+v 9.0 11.0 0.0
+v 8.0 11.0 0.0
+v 8.0 10.0 1.0
+v 9.0 10.0 1.0
+v 9.0 11.0 1.0
+v 8.0 11.0 1.0
+v 8.0 12.0 0.0
+v 9.0 12.0 0.0
+v 9.0 13.0 0.0
+v 8.0 13.0 0.0
+v 8.0 12.0 1.0
+v 9.0 12.0 1.0
+v 9.0 13.0 1.0
+v 8.0 13.0 1.0
+v 8.0 14.0 0.0
+v 9.0 14.0 0.0
+v 9.0 15.0 0.0
+v 8.0 15.0 0.0
+v 8.0 14.0 1.0
+v 9.0 14.0 1.0
+v 9.0 15.0 1.0
+v 8.0 15.0 1.0
+v 8.0 16.0 0.0
+v 9.0 16.0 0.0
+v 9.0 17.0 0.0
+v 8.0 17.0 0.0
+v 8.0 16.0 1.0
+v 9.0 16.0 1.0
+v 9.0 17.0 1.0
+v 8.0 17.0 1.0
+v 8.0 18.0 0.0
+v 9.0 18.0 0.0
+v 9.0 19.0 0.0
+v 8.0 19.0 0.0
+v 8.0 18.0 1.0
+v 9.0 18.0 1.0
+v 9.0 19.0 1.0
+v 8.0 19.0 1.0
+v 10.0 0.0 0.0
+v 11.0 0.0 0.0
+v 11.0 1.0 0.0
+v 10.0 1.0 0.0
+v 10.0 0.0 1.0
+v 11.0 0.0 1.0
+v 11.0 1.0 1.0
+v 10.0 1.0 1.0
+v 10.0 2.0 0.0
+v 11.0 2.0 0.0
+v 11.0 3.0 0.0
+v 10.0 3.0 0.0
+v 10.0 2.0 1.0
+v 11.0 2.0 1.0
+v 11.0 3.0 1.0
+v 10.0 3.0 1.0
+v 10.0 4.0 0.0
+v 11.0 4.0 0.0
+v 11.0 5.0 0.0
+v 10.0 5.0 0.0
+v 10.0 4.0 1.0
+v 11.0 4.0 1.0
+v 11.0 5.0 1.0
+v 10.0 5.0 1.0
+v 10.0 6.0 0.0
+v 11.0 6.0 0.0
+v 11.0 7.0 0.0
+v 10.0 7.0 0.0
+v 10.0 6.0 1.0
+v 11.0 6.0 1.0
+v 11.0 7.0 1.0
+v 10.0 7.0 1.0
+v 10.0 8.0 0.0
+v 11.0 8.0 0.0
+v 11.0 9.0 0.0
+v 10.0 9.0 0.0
+v 10.0 8.0 1.0
+v 11.0 8.0 1.0
+v 11.0 9.0 1.0
+v 10.0 9.0 1.0
+v 10.0 10.0 0.0
+v 11.0 10.0 0.0
+v 11.0 11.0 0.0
+v 10.0 11.0 0.0
+v 10.0 10.0 1.0
+v 11.0 10.0 1.0
+v 11.0 11.0 1.0
+v 10.0 11.0 1.0
+v 10.0 12.0 0.0
+v 11.0 12.0 0.0
+v 11.0 13.0 0.0
+v 10.0 13.0 0.0
+v 10.0 12.0 1.0
+v 11.0 12.0 1.0
+v 11.0 13.0 1.0
+v 10.0 13.0 1.0
+v 10.0 14.0 0.0
+v 11.0 14.0 0.0
+v 11.0 15.0 0.0
+v 10.0 15.0 0.0
+v 10.0 14.0 1.0
+v 11.0 14.0 1.0
+v 11.0 15.0 1.0
+v 10.0 15.0 1.0
+v 10.0 16.0 0.0
+v 11.0 16.0 0.0
+v 11.0 17.0 0.0
+v 10.0 17.0 0.0
+v 10.0 16.0 1.0
+v 11.0 16.0 1.0
+v 11.0 17.0 1.0
+v 10.0 17.0 1.0
+v 10.0 18.0 0.0
+v 11.0 18.0 0.0
+v 11.0 19.0 0.0
+v 10.0 19.0 0.0
+v 10.0 18.0 1.0
+v 11.0 18.0 1.0
+v 11.0 19.0 1.0
+v 10.0 19.0 1.0
+v 12.0 0.0 0.0
+v 13.0 0.0 0.0
+v 13.0 1.0 0.0
+v 12.0 1.0 0.0
+v 12.0 0.0 1.0
+v 13.0 0.0 1.0
+v 13.0 1.0 1.0
+v 12.0 1.0 1.0
+v 12.0 2.0 0.0
+v 13.0 2.0 0.0
+v 13.0 3.0 0.0
+v 12.0 3.0 0.0
+v 12.0 2.0 1.0
+v 13.0 2.0 1.0
+v 13.0 3.0 1.0
+v 12.0 3.0 1.0
+v 12.0 4.0 0.0
+v 13.0 4.0 0.0
+v 13.0 5.0 0.0
+v 12.0 5.0 0.0
+v 12.0 4.0 1.0
+v 13.0 4.0 1.0
+v 13.0 5.0 1.0
+v 12.0 5.0 1.0
+v 12.0 6.0 0.0
+v 13.0 6.0 0.0
+v 13.0 7.0 0.0
+v 12.0 7.0 0.0
+v 12.0 6.0 1.0
+v 13.0 6.0 1.0
+v 13.0 7.0 1.0
+v 12.0 7.0 1.0
+v 12.0 8.0 0.0
+v 13.0 8.0 0.0
+v 13.0 9.0 0.0
+v 12.0 9.0 0.0
+v 12.0 8.0 1.0
+v 13.0 8.0 1.0
+v 13.0 9.0 1.0
+v 12.0 9.0 1.0
+v 12.0 10.0 0.0
+v 13.0 10.0 0.0
+v 13.0 11.0 0.0
+v 12.0 11.0 0.0
+v 12.0 10.0 1.0
+v 13.0 10.0 1.0
+v 13.0 11.0 1.0
+v 12.0 11.0 1.0
+v 12.0 12.0 0.0
+v 13.0 12.0 0.0
+v 13.0 13.0 0.0
+v 12.0 13.0 0.0
+v 12.0 12.0 1.0
+v 13.0 12.0 1.0
+v 13.0 13.0 1.0
+v 12.0 13.0 1.0
+v 12.0 14.0 0.0
+v 13.0 14.0 0.0
+v 13.0 15.0 0.0
+v 12.0 15.0 0.0
+v 12.0 14.0 1.0
+v 13.0 14.0 1.0
+v 13.0 15.0 1.0
+v 12.0 15.0 1.0
+v 12.0 16.0 0.0
+v 13.0 16.0 0.0
+v 13.0 17.0 0.0
+v 12.0 17.0 0.0
+v 12.0 16.0 1.0
+v 13.0 16.0 1.0
+v 13.0 17.0 1.0
+v 12.0 17.0 1.0
+v 12.0 18.0 0.0
+v 13.0 18.0 0.0
+v 13.0 19.0 0.0
+v 12.0 19.0 0.0
+v 12.0 18.0 1.0
+v 13.0 18.0 1.0
+v 13.0 19.0 1.0
+v 12.0 19.0 1.0
+v 14.0 0.0 0.0
+v 15.0 0.0 0.0
+v 15.0 1.0 0.0
+v 14.0 1.0 0.0
+v 14.0 0.0 1.0
+v 15.0 0.0 1.0
+v 15.0 1.0 1.0
+v 14.0 1.0 1.0
+v 14.0 2.0 0.0
+v 15.0 2.0 0.0
+v 15.0 3.0 0.0
+v 14.0 3.0 0.0
+v 14.0 2.0 1.0
+v 15.0 2.0 1.0
+v 15.0 3.0 1.0
+v 14.0 3.0 1.0
+v 14.0 4.0 0.0
+v 15.0 4.0 0.0
+v 15.0 5.0 0.0
+v 14.0 5.0 0.0
+v 14.0 4.0 1.0
+v 15.0 4.0 1.0
+v 15.0 5.0 1.0
+v 14.0 5.0 1.0
+v 14.0 6.0 0.0
+v 15.0 6.0 0.0
+v 15.0 7.0 0.0
+v 14.0 7.0 0.0
+v 14.0 6.0 1.0
+v 15.0 6.0 1.0
+v 15.0 7.0 1.0
+v 14.0 7.0 1.0
+v 14.0 8.0 0.0
+v 15.0 8.0 0.0
+v 15.0 9.0 0.0
+v 14.0 9.0 0.0
+v 14.0 8.0 1.0
+v 15.0 8.0 1.0
+v 15.0 9.0 1.0
+v 14.0 9.0 1.0
+v 14.0 10.0 0.0
+v 15.0 10.0 0.0
+v 15.0 11.0 0.0
+v 14.0 11.0 0.0
+v 14.0 10.0 1.0
+v 15.0 10.0 1.0
+v 15.0 11.0 1.0
+v 14.0 11.0 1.0
+v 14.0 12.0 0.0
+v 15.0 12.0 0.0
+v 15.0 13.0 0.0
+v 14.0 13.0 0.0
+v 14.0 12.0 1.0
+v 15.0 12.0 1.0
+v 15.0 13.0 1.0
+v 14.0 13.0 1.0
+v 14.0 14.0 0.0
+v 15.0 14.0 0.0
+v 15.0 15.0 0.0
+v 14.0 15.0 0.0
+v 14.0 14.0 1.0
+v 15.0 14.0 1.0
+v 15.0 15.0 1.0
+v 14.0 15.0 1.0
+v 14.0 16.0 0.0
+v 15.0 16.0 0.0
+v 15.0 17.0 0.0
+v 14.0 17.0 0.0
+v 14.0 16.0 1.0
+v 15.0 16.0 1.0
+v 15.0 17.0 1.0
+v 14.0 17.0 1.0
+v 14.0 18.0 0.0
+v 15.0 18.0 0.0
+v 15.0 19.0 0.0
+v 14.0 19.0 0.0
+v 14.0 18.0 1.0
+v 15.0 18.0 1.0
+v 15.0 19.0 1.0
+v 14.0 19.0 1.0
+v 16.0 0.0 0.0
+v 17.0 0.0 0.0
+v 17.0 1.0 0.0
+v 16.0 1.0 0.0
+v 16.0 0.0 1.0
+v 17.0 0.0 1.0
+v 17.0 1.0 1.0
+v 16.0 1.0 1.0
+v 16.0 2.0 0.0
+v 17.0 2.0 0.0
+v 17.0 3.0 0.0
+v 16.0 3.0 0.0
+v 16.0 2.0 1.0
+v 17.0 2.0 1.0
+v 17.0 3.0 1.0
+v 16.0 3.0 1.0
+v 16.0 4.0 0.0
+v 17.0 4.0 0.0
+v 17.0 5.0 0.0
+v 16.0 5.0 0.0
+v 16.0 4.0 1.0
+v 17.0 4.0 1.0
+v 17.0 5.0 1.0
+v 16.0 5.0 1.0
+v 16.0 6.0 0.0
+v 17.0 6.0 0.0
+v 17.0 7.0 0.0
+v 16.0 7.0 0.0
+v 16.0 6.0 1.0
+v 17.0 6.0 1.0
+v 17.0 7.0 1.0
+v 16.0 7.0 1.0
+v 16.0 8.0 0.0
+v 17.0 8.0 0.0
+v 17.0 9.0 0.0
+v 16.0 9.0 0.0
+v 16.0 8.0 1.0
+v 17.0 8.0 1.0
+v 17.0 9.0 1.0
+v 16.0 9.0 1.0
+v 16.0 10.0 0.0
+v 17.0 10.0 0.0
+v 17.0 11.0 0.0
+v 16.0 11.0 0.0
+v 16.0 10.0 1.0
+v 17.0 10.0 1.0
+v 17.0 11.0 1.0
+v 16.0 11.0 1.0
+v 16.0 12.0 0.0
+v 17.0 12.0 0.0
+v 17.0 13.0 0.0
+v 16.0 13.0 0.0
+v 16.0 12.0 1.0
+v 17.0 12.0 1.0
+v 17.0 13.0 1.0
+v 16.0 13.0 1.0
+v 16.0 14.0 0.0
+v 17.0 14.0 0.0
+v 17.0 15.0 0.0
+v 16.0 15.0 0.0
+v 16.0 14.0 1.0
+v 17.0 14.0 1.0
+v 17.0 15.0 1.0
+v 16.0 15.0 1.0
+v 16.0 16.0 0.0
+v 17.0 16.0 0.0
+v 17.0 17.0 0.0
+v 16.0 17.0 0.0
+v 16.0 16.0 1.0
+v 17.0 16.0 1.0
+v 17.0 17.0 1.0
+v 16.0 17.0 1.0
+v 16.0 18.0 0.0
+v 17.0 18.0 0.0
+v 17.0 19.0 0.0
+v 16.0 19.0 0.0
+v 16.0 18.0 1.0
+v 17.0 18.0 1.0
+v 17.0 19.0 1.0
+v 16.0 19.0 1.0
+v 18.0 0.0 0.0
+v 19.0 0.0 0.0
+v 19.0 1.0 0.0
+v 18.0 1.0 0.0
+v 18.0 0.0 1.0
+v 19.0 0.0 1.0
+v 19.0 1.0 1.0
+v 18.0 1.0 1.0
+v 18.0 2.0 0.0
+v 19.0 2.0 0.0
+v 19.0 3.0 0.0
+v 18.0 3.0 0.0
+v 18.0 2.0 1.0
+v 19.0 2.0 1.0
+v 19.0 3.0 1.0
+v 18.0 3.0 1.0
+v 18.0 4.0 0.0
+v 19.0 4.0 0.0
+v 19.0 5.0 0.0
+v 18.0 5.0 0.0
+v 18.0 4.0 1.0
+v 19.0 4.0 1.0
+v 19.0 5.0 1.0
+v 18.0 5.0 1.0
+v 18.0 6.0 0.0
+v 19.0 6.0 0.0
+v 19.0 7.0 0.0
+v 18.0 7.0 0.0
+v 18.0 6.0 1.0
+v 19.0 6.0 1.0
+v 19.0 7.0 1.0
+v 18.0 7.0 1.0
+v 18.0 8.0 0.0
+v 19.0 8.0 0.0
+v 19.0 9.0 0.0
+v 18.0 9.0 0.0
+v 18.0 8.0 1.0
+v 19.0 8.0 1.0
+v 19.0 9.0 1.0
+v 18.0 9.0 1.0
+v 18.0 10.0 0.0
+v 19.0 10.0 0.0
+v 19.0 11.0 0.0
+v 18.0 11.0 0.0
+v 18.0 10.0 1.0
+v 19.0 10.0 1.0
+v 19.0 11.0 1.0
+v 18.0 11.0 1.0
+v 18.0 12.0 0.0
+v 19.0 12.0 0.0
+v 19.0 13.0 0.0
+v 18.0 13.0 0.0
+v 18.0 12.0 1.0
+v 19.0 12.0 1.0
+v 19.0 13.0 1.0
+v 18.0 13.0 1.0
+v 18.0 14.0 0.0
+v 19.0 14.0 0.0
+v 19.0 15.0 0.0
+v 18.0 15.0 0.0
+v 18.0 14.0 1.0
+v 19.0 14.0 1.0
+v 19.0 15.0 1.0
+v 18.0 15.0 1.0
+v 18.0 16.0 0.0
+v 19.0 16.0 0.0
+v 19.0 17.0 0.0
+v 18.0 17.0 0.0
+v 18.0 16.0 1.0
+v 19.0 16.0 1.0
+v 19.0 17.0 1.0
+v 18.0 17.0 1.0
+v 18.0 18.0 0.0
+v 19.0 18.0 0.0
+v 19.0 19.0 0.0
+v 18.0 19.0 0.0
+v 18.0 18.0 1.0
+v 19.0 18.0 1.0
+v 19.0 19.0 1.0
+v 18.0 19.0 1.0
+
+g Mesh001
+usemtl Red
+f 1 2 6 5
+f 2 3 7 6
+f 3 4 8 7
+f 4 1 5 8
+f 1 4 3 2
+f 5 6 7 8
+g Mesh002
+usemtl Green
+f 9 10 14 13
+f 10 11 15 14
+f 11 12 16 15
+f 12 9 13 16
+f 9 12 11 10
+f 13 14 15 16
+g Mesh003
+usemtl Blue
+f 17 18 22 21
+f 18 19 23 22
+f 19 20 24 23
+f 20 17 21 24
+f 17 20 19 18
+f 21 22 23 24
+g Mesh004
+usemtl Red
+f 25 26 30 29
+f 26 27 31 30
+f 27 28 32 31
+f 28 25 29 32
+f 25 28 27 26
+f 29 30 31 32
+g Mesh005
+usemtl Green
+f 33 34 38 37
+f 34 35 39 38
+f 35 36 40 39
+f 36 33 37 40
+f 33 36 35 34
+f 37 38 39 40
+g Mesh006
+usemtl Blue
+f 41 42 46 45
+f 42 43 47 46
+f 43 44 48 47
+f 44 41 45 48
+f 41 44 43 42
+f 45 46 47 48
+g Mesh007
+usemtl Red
+f 49 50 54 53
+f 50 51 55 54
+f 51 52 56 55
+f 52 49 53 56
+f 49 52 51 50
+f 53 54 55 56
+g Mesh008
+usemtl Green
+f 57 58 62 61
+f 58 59 63 62
+f 59 60 64 63
+f 60 57 61 64
+f 57 60 59 58
+f 61 62 63 64
+g Mesh009
+usemtl Blue
+f 65 66 70 69
+f 66 67 71 70
+f 67 68 72 71
+f 68 65 69 72
+f 65 68 67 66
+f 69 70 71 72
+g Mesh010
+usemtl Red
+f 73 74 78 77
+f 74 75 79 78
+f 75 76 80 79
+f 76 73 77 80
+f 73 76 75 74
+f 77 78 79 80
+g Mesh011
+usemtl Green
+f 81 82 86 85
+f 82 83 87 86
+f 83 84 88 87
+f 84 81 85 88
+f 81 84 83 82
+f 85 86 87 88
+g Mesh012
+usemtl Blue
+f 89 90 94 93
+f 90 91 95 94
+f 91 92 96 95
+f 92 89 93 96
+f 89 92 91 90
+f 93 94 95 96
+g Mesh013
+usemtl Red
+f 97 98 102 101
+f 98 99 103 102
+f 99 100 104 103
+f 100 97 101 104
+f 97 100 99 98
+f 101 102 103 104
+g Mesh014
+usemtl Green
+f 105 106 110 109
+f 106 107 111 110
+f 107 108 112 111
+f 108 105 109 112
+f 105 108 107 106
+f 109 110 111 112
+g Mesh015
+usemtl Blue
+f 113 114 118 117
+f 114 115 119 118
+f 115 116 120 119
+f 116 113 117 120
+f 113 116 115 114
+f 117 118 119 120
+g Mesh016
+usemtl Red
+f 121 122 126 125
+f 122 123 127 126
+f 123 124 128 127
+f 124 121 125 128
+f 121 124 123 122
+f 125 126 127 128
+g Mesh017
+usemtl Green
+f 129 130 134 133
+f 130 131 135 134
+f 131 132 136 135
+f 132 129 133 136
+f 129 132 131 130
+f 133 134 135 136
+g Mesh018
+usemtl Blue
+f 137 138 142 141
+f 138 139 143 142
+f 139 140 144 143
+f 140 137 141 144
+f 137 140 139 138
+f 141 142 143 144
+g Mesh019
+usemtl Red
+f 145 146 150 149
+f 146 147 151 150
+f 147 148 152 151
+f 148 145 149 152
+f 145 148 147 146
+f 149 150 151 152
+g Mesh020
+usemtl Green
+f 153 154 158 157
+f 154 155 159 158
+f 155 156 160 159
+f 156 153 157 160
+f 153 156 155 154
+f 157 158 159 160
+g Mesh021
+usemtl Blue
+f 161 162 166 165
+f 162 163 167 166
+f 163 164 168 167
+f 164 161 165 168
+f 161 164 163 162
+f 165 166 167 168
+g Mesh022
+usemtl Red
+f 169 170 174 173
+f 170 171 175 174
+f 171 172 176 175
+f 172 169 173 176
+f 169 172 171 170
+f 173 174 175 176
+g Mesh023
+usemtl Green
+f 177 178 182 181
+f 178 179 183 182
+f 179 180 184 183
+f 180 177 181 184
+f 177 180 179 178
+f 181 182 183 184
+g Mesh024
+usemtl Blue
+f 185 186 190 189
+f 186 187 191 190
+f 187 188 192 191
+f 188 185 189 192
+f 185 188 187 186
+f 189 190 191 192
+g Mesh025
+usemtl Red
+f 193 194 198 197
+f 194 195 199 198
+f 195 196 200 199
+f 196 193 197 200
+f 193 196 195 194
+f 197 198 199 200
+g Mesh026
+usemtl Green
+f 201 202 206 205
+f 202 203 207 206
+f 203 204 208 207
+f 204 201 205 208
+f 201 204 203 202
+f 205 206 207 208
+g Mesh027
+usemtl Blue
+f 209 210 214 213
+f 210 211 215 214
+f 211 212 216 215
+f 212 209 213 216
+f 209 212 211 210
+f 213 214 215 216
+g Mesh028
+usemtl Red
+f 217 218 222 221
+f 218 219 223 222
+f 219 220 224 223
+f 220 217 221 224
+f 217 220 219 218
+f 221 222 223 224
+g Mesh029
+usemtl Green
+f 225 226 230 229
+f 226 227 231 230
+f 227 228 232 231
+f 228 225 229 232
+f 225 228 227 226
+f 229 230 231 232
+g Mesh030
+usemtl Blue
+f 233 234 238 237
+f 234 235 239 238
+f 235 236 240 239
+f 236 233 237 240
+f 233 236 235 234
+f 237 238 239 240
+g Mesh031
+usemtl Red
+f 241 242 246 245
+f 242 243 247 246
+f 243 244 248 247
+f 244 241 245 248
+f 241 244 243 242
+f 245 246 247 248
+g Mesh032
+usemtl Green
+f 249 250 254 253
+f 250 251 255 254
+f 251 252 256 255
+f 252 249 253 256
+f 249 252 251 250
+f 253 254 255 256
+g Mesh033
+usemtl Blue
+f 257 258 262 261
+f 258 259 263 262
+f 259 260 264 263
+f 260 257 261 264
+f 257 260 259 258
+f 261 262 263 264
+g Mesh034
+usemtl Red
+f 265 266 270 269
+f 266 267 271 270
+f 267 268 272 271
+f 268 265 269 272
+f 265 268 267 266
+f 269 270 271 272
+g Mesh035
+usemtl Green
+f 273 274 278 277
+f 274 275 279 278
+f 275 276 280 279
+f 276 273 277 280
+f 273 276 275 274
+f 277 278 279 280
+g Mesh036
+usemtl Blue
+f 281 282 286 285
+f 282 283 287 286
+f 283 284 288 287
+f 284 281 285 288
+f 281 284 283 282
+f 285 286 287 288
+g Mesh037
+usemtl Red
+f 289 290 294 293
+f 290 291 295 294
+f 291 292 296 295
+f 292 289 293 296
+f 289 292 291 290
+f 293 294 295 296
+g Mesh038
+usemtl Green
+f 297 298 302 301
+f 298 299 303 302
+f 299 300 304 303
+f 300 297 301 304
+f 297 300 299 298
+f 301 302 303 304
+g Mesh039
+usemtl Blue
+f 305 306 310 309
+f 306 307 311 310
+f 307 308 312 311
+f 308 305 309 312
+f 305 308 307 306
+f 309 310 311 312
+g Mesh040
+usemtl Red
+f 313 314 318 317
+f 314 315 319 318
+f 315 316 320 319
+f 316 313 317 320
+f 313 316 315 314
+f 317 318 319 320
+g Mesh041
+usemtl Green
+f 321 322 326 325
+f 322 323 327 326
+f 323 324 328 327
+f 324 321 325 328
+f 321 324 323 322
+f 325 326 327 328
+g Mesh042
+usemtl Blue
+f 329 330 334 333
+f 330 331 335 334
+f 331 332 336 335
+f 332 329 333 336
+f 329 332 331 330
+f 333 334 335 336
+g Mesh043
+usemtl Red
+f 337 338 342 341
+f 338 339 343 342
+f 339 340 344 343
+f 340 337 341 344
+f 337 340 339 338
+f 341 342 343 344
+g Mesh044
+usemtl Green
+f 345 346 350 349
+f 346 347 351 350
+f 347 348 352 351
+f 348 345 349 352
+f 345 348 347 346
+f 349 350 351 352
+g Mesh045
+usemtl Blue
+f 353 354 358 357
+f 354 355 359 358
+f 355 356 360 359
+f 356 353 357 360
+f 353 356 355 354
+f 357 358 359 360
+g Mesh046
+usemtl Red
+f 361 362 366 365
+f 362 363 367 366
+f 363 364 368 367
+f 364 361 365 368
+f 361 364 363 362
+f 365 366 367 368
+g Mesh047
+usemtl Green
+f 369 370 374 373
+f 370 371 375 374
+f 371 372 376 375
+f 372 369 373 376
+f 369 372 371 370
+f 373 374 375 376
+g Mesh048
+usemtl Blue
+f 377 378 382 381
+f 378 379 383 382
+f 379 380 384 383
+f 380 377 381 384
+f 377 380 379 378
+f 381 382 383 384
+g Mesh049
+usemtl Red
+f 385 386 390 389
+f 386 387 391 390
+f 387 388 392 391
+f 388 385 389 392
+f 385 388 387 386
+f 389 390 391 392
+g Mesh050
+usemtl Green
+f 393 394 398 397
+f 394 395 399 398
+f 395 396 400 399
+f 396 393 397 400
+f 393 396 395 394
+f 397 398 399 400
+g Mesh051
+usemtl Blue
+f 401 402 406 405
+f 402 403 407 406
+f 403 404 408 407
+f 404 401 405 408
+f 401 404 403 402
+f 405 406 407 408
+g Mesh052
+usemtl Red
+f 409 410 414 413
+f 410 411 415 414
+f 411 412 416 415
+f 412 409 413 416
+f 409 412 411 410
+f 413 414 415 416
+g Mesh053
+usemtl Green
+f 417 418 422 421
+f 418 419 423 422
+f 419 420 424 423
+f 420 417 421 424
+f 417 420 419 418
+f 421 422 423 424
+g Mesh054
+usemtl Blue
+f 425 426 430 429
+f 426 427 431 430
+f 427 428 432 431
+f 428 425 429 432
+f 425 428 427 426
+f 429 430 431 432
+g Mesh055
+usemtl Red
+f 433 434 438 437
+f 434 435 439 438
+f 435 436 440 439
+f 436 433 437 440
+f 433 436 435 434
+f 437 438 439 440
+g Mesh056
+usemtl Green
+f 441 442 446 445
+f 442 443 447 446
+f 443 444 448 447
+f 444 441 445 448
+f 441 444 443 442
+f 445 446 447 448
+g Mesh057
+usemtl Blue
+f 449 450 454 453
+f 450 451 455 454
+f 451 452 456 455
+f 452 449 453 456
+f 449 452 451 450
+f 453 454 455 456
+g Mesh058
+usemtl Red
+f 457 458 462 461
+f 458 459 463 462
+f 459 460 464 463
+f 460 457 461 464
+f 457 460 459 458
+f 461 462 463 464
+g Mesh059
+usemtl Green
+f 465 466 470 469
+f 466 467 471 470
+f 467 468 472 471
+f 468 465 469 472
+f 465 468 467 466
+f 469 470 471 472
+g Mesh060
+usemtl Blue
+f 473 474 478 477
+f 474 475 479 478
+f 475 476 480 479
+f 476 473 477 480
+f 473 476 475 474
+f 477 478 479 480
+g Mesh061
+usemtl Red
+f 481 482 486 485
+f 482 483 487 486
+f 483 484 488 487
+f 484 481 485 488
+f 481 484 483 482
+f 485 486 487 488
+g Mesh062
+usemtl Green
+f 489 490 494 493
+f 490 491 495 494
+f 491 492 496 495
+f 492 489 493 496
+f 489 492 491 490
+f 493 494 495 496
+g Mesh063
+usemtl Blue
+f 497 498 502 501
+f 498 499 503 502
+f 499 500 504 503
+f 500 497 501 504
+f 497 500 499 498
+f 501 502 503 504
+g Mesh064
+usemtl Red
+f 505 506 510 509
+f 506 507 511 510
+f 507 508 512 511
+f 508 505 509 512
+f 505 508 507 506
+f 509 510 511 512
+g Mesh065
+usemtl Green
+f 513 514 518 517
+f 514 515 519 518
+f 515 516 520 519
+f 516 513 517 520
+f 513 516 515 514
+f 517 518 519 520
+g Mesh066
+usemtl Blue
+f 521 522 526 525
+f 522 523 527 526
+f 523 524 528 527
+f 524 521 525 528
+f 521 524 523 522
+f 525 526 527 528
+g Mesh067
+usemtl Red
+f 529 530 534 533
+f 530 531 535 534
+f 531 532 536 535
+f 532 529 533 536
+f 529 532 531 530
+f 533 534 535 536
+g Mesh068
+usemtl Green
+f 537 538 542 541
+f 538 539 543 542
+f 539 540 544 543
+f 540 537 541 544
+f 537 540 539 538
+f 541 542 543 544
+g Mesh069
+usemtl Blue
+f 545 546 550 549
+f 546 547 551 550
+f 547 548 552 551
+f 548 545 549 552
+f 545 548 547 546
+f 549 550 551 552
+g Mesh070
+usemtl Red
+f 553 554 558 557
+f 554 555 559 558
+f 555 556 560 559
+f 556 553 557 560
+f 553 556 555 554
+f 557 558 559 560
+g Mesh071
+usemtl Green
+f 561 562 566 565
+f 562 563 567 566
+f 563 564 568 567
+f 564 561 565 568
+f 561 564 563 562
+f 565 566 567 568
+g Mesh072
+usemtl Blue
+f 569 570 574 573
+f 570 571 575 574
+f 571 572 576 575
+f 572 569 573 576
+f 569 572 571 570
+f 573 574 575 576
+g Mesh073
+usemtl Red
+f 577 578 582 581
+f 578 579 583 582
+f 579 580 584 583
+f 580 577 581 584
+f 577 580 579 578
+f 581 582 583 584
+g Mesh074
+usemtl Green
+f 585 586 590 589
+f 586 587 591 590
+f 587 588 592 591
+f 588 585 589 592
+f 585 588 587 586
+f 589 590 591 592
+g Mesh075
+usemtl Blue
+f 593 594 598 597
+f 594 595 599 598
+f 595 596 600 599
+f 596 593 597 600
+f 593 596 595 594
+f 597 598 599 600
+g Mesh076
+usemtl Red
+f 601 602 606 605
+f 602 603 607 606
+f 603 604 608 607
+f 604 601 605 608
+f 601 604 603 602
+f 605 606 607 608
+g Mesh077
+usemtl Green
+f 609 610 614 613
+f 610 611 615 614
+f 611 612 616 615
+f 612 609 613 616
+f 609 612 611 610
+f 613 614 615 616
+g Mesh078
+usemtl Blue
+f 617 618 622 621
+f 618 619 623 622
+f 619 620 624 623
+f 620 617 621 624
+f 617 620 619 618
+f 621 622 623 624
+g Mesh079
+usemtl Red
+f 625 626 630 629
+f 626 627 631 630
+f 627 628 632 631
+f 628 625 629 632
+f 625 628 627 626
+f 629 630 631 632
+g Mesh080
+usemtl Green
+f 633 634 638 637
+f 634 635 639 638
+f 635 636 640 639
+f 636 633 637 640
+f 633 636 635 634
+f 637 638 639 640
+g Mesh081
+usemtl Blue
+f 641 642 646 645
+f 642 643 647 646
+f 643 644 648 647
+f 644 641 645 648
+f 641 644 643 642
+f 645 646 647 648
+g Mesh082
+usemtl Red
+f 649 650 654 653
+f 650 651 655 654
+f 651 652 656 655
+f 652 649 653 656
+f 649 652 651 650
+f 653 654 655 656
+g Mesh083
+usemtl Green
+f 657 658 662 661
+f 658 659 663 662
+f 659 660 664 663
+f 660 657 661 664
+f 657 660 659 658
+f 661 662 663 664
+g Mesh084
+usemtl Blue
+f 665 666 670 669
+f 666 667 671 670
+f 667 668 672 671
+f 668 665 669 672
+f 665 668 667 666
+f 669 670 671 672
+g Mesh085
+usemtl Red
+f 673 674 678 677
+f 674 675 679 678
+f 675 676 680 679
+f 676 673 677 680
+f 673 676 675 674
+f 677 678 679 680
+g Mesh086
+usemtl Green
+f 681 682 686 685
+f 682 683 687 686
+f 683 684 688 687
+f 684 681 685 688
+f 681 684 683 682
+f 685 686 687 688
+g Mesh087
+usemtl Blue
+f 689 690 694 693
+f 690 691 695 694
+f 691 692 696 695
+f 692 689 693 696
+f 689 692 691 690
+f 693 694 695 696
+g Mesh088
+usemtl Red
+f 697 698 702 701
+f 698 699 703 702
+f 699 700 704 703
+f 700 697 701 704
+f 697 700 699 698
+f 701 702 703 704
+g Mesh089
+usemtl Green
+f 705 706 710 709
+f 706 707 711 710
+f 707 708 712 711
+f 708 705 709 712
+f 705 708 707 706
+f 709 710 711 712
+g Mesh090
+usemtl Blue
+f 713 714 718 717
+f 714 715 719 718
+f 715 716 720 719
+f 716 713 717 720
+f 713 716 715 714
+f 717 718 719 720
+g Mesh091
+usemtl Red
+f 721 722 726 725
+f 722 723 727 726
+f 723 724 728 727
+f 724 721 725 728
+f 721 724 723 722
+f 725 726 727 728
+g Mesh092
+usemtl Green
+f 729 730 734 733
+f 730 731 735 734
+f 731 732 736 735
+f 732 729 733 736
+f 729 732 731 730
+f 733 734 735 736
+g Mesh093
+usemtl Blue
+f 737 738 742 741
+f 738 739 743 742
+f 739 740 744 743
+f 740 737 741 744
+f 737 740 739 738
+f 741 742 743 744
+g Mesh094
+usemtl Red
+f 745 746 750 749
+f 746 747 751 750
+f 747 748 752 751
+f 748 745 749 752
+f 745 748 747 746
+f 749 750 751 752
+g Mesh095
+usemtl Green
+f 753 754 758 757
+f 754 755 759 758
+f 755 756 760 759
+f 756 753 757 760
+f 753 756 755 754
+f 757 758 759 760
+g Mesh096
+usemtl Blue
+f 761 762 766 765
+f 762 763 767 766
+f 763 764 768 767
+f 764 761 765 768
+f 761 764 763 762
+f 765 766 767 768
+g Mesh097
+usemtl Red
+f 769 770 774 773
+f 770 771 775 774
+f 771 772 776 775
+f 772 769 773 776
+f 769 772 771 770
+f 773 774 775 776
+g Mesh098
+usemtl Green
+f 777 778 782 781
+f 778 779 783 782
+f 779 780 784 783
+f 780 777 781 784
+f 777 780 779 778
+f 781 782 783 784
+g Mesh099
+usemtl Blue
+f 785 786 790 789
+f 786 787 791 790
+f 787 788 792 791
+f 788 785 789 792
+f 785 788 787 786
+f 789 790 791 792
+g Mesh100
+usemtl Red
+f 793 794 798 797
+f 794 795 799 798
+f 795 796 800 799
+f 796 793 797 800
+f 793 796 795 794
+f 797 798 799 800
diff --git a/test/tests/exportimport_test.js b/test/tests/exportimport_test.js
index 4155b4e..2623982 100644
--- a/test/tests/exportimport_test.js
+++ b/test/tests/exportimport_test.js
@@ -116,8 +116,8 @@ function ExportImport (model, format, extension, onReady)
onSuccess : function (exportedFiles) {
let importer = new OV.Importer ();
let settings = new OV.ImportSettings ();
- let fileObjects = exportedFiles.map (file => new FileObject ('', file.name, file.content));
- importer.ImportFiles (fileObjects, OV.FileSource.File, settings, {
+ let fileObjects = exportedFiles.map (file => new OV.InputFile (file.name, OV.FileSource.File, new FileObject ('', file.name, file.content)));
+ importer.ImportFiles (fileObjects, settings, {
onFilesLoaded : function () {
},
diff --git a/test/tests/importer_test.js b/test/tests/importer_test.js
index 0f73b9f..9d04c2c 100644
--- a/test/tests/importer_test.js
+++ b/test/tests/importer_test.js
@@ -7,7 +7,8 @@ export default function suite ()
function ImportFilesWithImporter (importer, files, callbacks)
{
let settings = new OV.ImportSettings ();
- importer.ImportFiles (files, OV.FileSource.File, settings, {
+ let inputFiles = OV.InputFilesFromFileObjects (files);
+ importer.ImportFiles (inputFiles, settings, {
onFilesLoaded : function () {
},
@@ -259,7 +260,8 @@ describe ('Importer Test', function () {
let theImporter = new OV.Importer ();
let settings = new OV.ImportSettings ();
settings.defaultColor = new OV.Color (200, 0, 0);
- theImporter.ImportFiles (files, OV.FileSource.File, settings, {
+ let inputFiles = OV.InputFilesFromFileObjects (files);
+ theImporter.ImportFiles (inputFiles, settings, {
onFilesLoaded : function () {
},